feat: enhance styling and structure of forms, buttons, and repository settings

master
Lucas Colombo 1 month ago
parent 0587a7791e
commit 7957f0c426

@ -0,0 +1,124 @@
@use '@lucas-labs/lui-micro/var' as var;
@use '@lucas-labs/lui-micro/color' as color;
@mixin segment {
.ui.top.attached.header {
border-radius: var(--border-radius) var(--border-radius) 0 0;
}
.ui.attached.segment:has(+.ui[class*="top attached"].header), .ui.attached.segment:has(+.page.buttons), .ui.attached.segment:last-child, .ui.segment:has(+.ui.segment:not(.attached)), .ui.attached.segment:has(+.ui.modal) {
border-bottom-left-radius: var(--border-radius);
border-bottom-right-radius: var(--border-radius);
}
.ui.segments:not(.horizontal)>.segment:first-child {
border-radius: var(--border-radius);
}
.ui.segments:not(.horizontal)>.segment:last-child {
border-radius: var(--border-radius);
}
.ui.segment {
border-radius: var(--border-radius);
}
}
@mixin comments {
.comment {
.content {
background-color: var(--color-box-body);
>.comment-header, >.ui.segment {
&:before, &:after {
display: none;
}
}
.comment-header {
padding: var.get('measure/.25x') var.get('measure/.25x') var.get('measure/.25x') var.get('measure/1x') !important;
.comment-header-left {
.text {
color: color.get('subtle') !important;
.author {
color: color.get('text') !important;
}
}
}
.comment-header-right {
* {
color: color.get('subtle') !important;
}
.label {
height: var.get('measure/1.25x', 1.25rem) !important;
padding: 0px var.get('measure/.375x') !important;
border-radius: var.get('measure/1x') !important;
}
}
}
}
// comment form at the end
&.form:not(.issue-content) {
display: flex;
align-items: flex-start;
background-color: var(--color-body);
gap: var.get('measure/1x');
left: -68px !important;
width: calc(100% + 68px - 16px) !important;
@media (max-width: 768px) {
left: 0 !important;
margin-left: -16px !important;
width: auto !important;
}
.timeline-avatar {
display: block;
position: relative !important;
left: unset !important;
flex: 0 0 auto !important;
}
.content {
// fake title to mimic github new issue page
&:before {
display: block;
content: 'Add a comment';
font-weight: 600;
margin-bottom: var.get('measure/1x');
margin-top: var.get('measure/.5x');
font-size: var.get('font-size/lg');
}
display: block;
position: relative !important;
margin-left: 0 !important;
flex: 1;
.ui.segment {
padding: 0 !important;
border: none !important;
}
}
}
}
.comment-list .comment>.content>div:last-child {
border-bottom-left-radius: var(--border-radius) !important;
border-bottom-right-radius: var(--border-radius) !important;
}
.comment-list .comment>.content>div:first-child {
border-top-left-radius: var(--border-radius) !important;
border-top-right-radius: var(--border-radius) !important;
}
.ui.comments .comment {
margin: var.get('measure/.25x') 0 0;
}
}

@ -2,136 +2,140 @@
@use '@lucas-labs/lui-micro/color' as color; @use '@lucas-labs/lui-micro/color' as color;
@mixin editor { @mixin editor {
#comment-form, .edit-content-zone { .combo-markdown-editor {
padding: 0 !important; .top.tabular.menu {
border: none !important; background-color: var(--color-box-header);
border-radius: var(--border-radius) var(--border-radius) 0 0;
.combo-markdown-editor { min-height: 0px;
.top.tabular.menu { margin-bottom: var.get('measure/1x') !important;
background-color: var(--color-box-header);
border-radius: var(--border-radius) var(--border-radius) 0 0; .item {
min-height: 0px; margin: -1px 0 0 -1px; // merge borders
margin-bottom: var.get('measure/1x') !important; border-top-left-radius: var(--border-radius) !important;
border-top-right-radius: var(--border-radius) !important;
.item { padding: var.get('measure/.5x') var.get('measure/.75x') !important;
margin: -1px 0 0 -1px; // merge borders font-weight: 400;
border-top-left-radius: var(--border-radius) !important;
border-top-right-radius: var(--border-radius) !important; &:hover {
padding: var.get('measure/.5x') var.get('measure/.75x') !important; color: var(--color-text-light-2);
font-weight: 400; }
&:hover { &.active {
color: var(--color-text-light-2); color: var(--color-text);
&:after {
// a hacky 1 pixel "button border" to make the border
// of the whole menu disappear under the active tab
display: block;
content: '';
position: absolute;
top: 100%;
right: 0;
width: 100%;
height: 1px;
background-color: var(--color-body);
} }
}
}
}
&.active { .tab {
color: var(--color-text); .EasyMDEContainer { // legacy editor
&:after { border: none !important;
// a hacky 1 pixel "button border" to make the border
// of the whole menu disappear under the active tab .editor-toolbar {
display: block; border: none !important;
content: '';
position: absolute;
top: 100%;
right: 0;
width: 100%;
height: 1px;
background-color: var(--color-body);
}
}
} }
} }
.tab { markdown-toolbar, .EasyMDEContainer .editor-toolbar {
.EasyMDEContainer { // legacy editor padding: 0 10px !important;
.markdown-toolbar-group {
border: none !important; border: none !important;
padding: 0 !important;
.editor-toolbar { &:not(:last-child) {
border: none !important; &:after {
content: '';
display: block;
position: relative;
width: 1px;
flex: 1;
margin: var.get('measure/.375x') var.get('measure/.375x') !important;
background-color: color.get('elevation/6');
}
} }
} }
markdown-toolbar, .EasyMDEContainer .editor-toolbar { .markdown-toolbar-button, button {
padding: 0 10px !important; line-height: 0;
display: inline-block;
.markdown-toolbar-group { color: var(--color-text-light-2) !important;
border: none !important; padding: var.get('measure/.375x') !important;
padding: 0 !important; transition: background-color .1s ease;
border-radius: var.get('measure/.375x') !important;
&:not(:last-child) { height: auto;
&:after { min-width: fit-content;
content: '';
display: block;
position: relative;
width: 1px;
flex: 1;
margin: var.get('measure/.375x') var.get('measure/.375x') !important;
background-color: color.get('elevation/6');
}
}
}
.markdown-toolbar-button, button { &:hover {
line-height: 0; background-color: color.get('elevation/5') !important;
display: inline-block; }
color: var(--color-text-light-2) !important;
padding: var.get('measure/.375x') !important; // if has attribute level
transition: background-color .1s ease; &[level] {
border-radius: var.get('measure/.375x') !important; width: 34px;
height: auto;
min-width: fit-content;
&:hover {
background-color: color.get('elevation/5') !important;
}
// if has attribute level
&[level] {
width: 34px;
}
// if aria-checked is true
&[aria-checked="true"] {
background-color: color.get('elevation/4');
}
} }
button { // if aria-checked is true
&:after { &[aria-checked="true"] {
vertical-align: unset !important; background-color: color.get('elevation/4');
}
} }
} }
textarea, .CodeMirror.cm-s-easymde.CodeMirror-wrap {
background-color: transparent !important;
border: none !important;
padding: var.get('measure/1x') var.get('measure/1x') !important;
}
.editor-statusbar { button {
margin-bottom: 0 !important; &:after {
vertical-align: unset !important;
}
} }
}
textarea, .CodeMirror.cm-s-easymde.CodeMirror-wrap {
background-color: transparent !important;
border: none !important;
padding: var.get('measure/1x') var.get('measure/1x') !important;
}
&.markup { .editor-statusbar {
padding: 0 var.get('measure/1x') var.get('measure/1x'); margin-bottom: 0 !important;
} }
&.markup {
padding: 0 var.get('measure/1x') var.get('measure/1x');
} }
} }
}
.field:first-child { .combo-markdown-editor {
border: 1px solid var(--color-secondary); border: 1px solid var(--color-secondary);
border-radius: var(--border-radius);
&:focus-within {
outline: 2px solid var(--color-accent);
border-radius: var(--border-radius); border-radius: var(--border-radius);
&:focus-within { }
outline: 2px solid var(--color-accent);
border-radius: var(--border-radius);
}
textarea:focus { textarea:focus {
outline: none; outline: none !important;
}
} }
.ui.tab.markup[data-tab-panel=markdown-previewer] {
border-bottom: 0px;
}
}
#comment-form, .edit-content-zone, .comment-form, .comment-code-cloud form {
padding: 0 !important;
border: none !important;
.field { .field {
margin-bottom: var.get('measure/1x') !important; margin-bottom: var.get('measure/1x') !important;
} }

@ -5,6 +5,7 @@
@mixin forms { @mixin forms {
@include forms.dropdown-menu; @include forms.dropdown-menu;
@include forms.menu; @include forms.menu;
@include forms.tabular-menu;
@include forms.input; @include forms.input;
} }

@ -53,8 +53,12 @@
border-bottom-left-radius: 0; border-bottom-left-radius: 0;
} }
&.green, &.red { &.green {
color: var(--color-green-contrast) !important; color: var(--color-green-contrast) !important;
} }
&.red {
color: var(--color-red-contrast) !important;
}
} }
} }

@ -50,13 +50,56 @@
} }
@mixin gitea-button { @mixin gitea-button {
.ui.icon.buttons .button, .ui.icon.button:not(.compact) {
// padding: 50px;
}
.code-comment-buttons-buttons {
button:not(.labeled):not(.icon) {
padding: .78571429em !important;
}
}
// buttons group
.ui.buttons {
&.icon .button, &.icon:not(.compact) {
padding: 50px 50px;
}
.button {
&:first-child {
border-top-left-radius: var(--border-radius);
border-bottom-left-radius: var(--border-radius);
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
&.button:last-child {
border-top-right-radius: var(--border-radius);
border-bottom-right-radius: var(--border-radius);
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
border-right: none;
flex: 1 0 auto;
border-radius: 0;
margin: 0;
}
}
.ui.button { .ui.button {
border-radius: var(--border-radius); border-radius: var(--border-radius);
transition: color .1s ease, background-color .1s ease, border-color .1s ease; transition: color .1s ease, background-color .1s ease, border-color .1s ease;
padding: calc(#{var.get('measure/.375x')} - 1px) var.get('measure/1x'); padding: calc(#{var.get('measure/.375x')} - 1px) var.get('measure/1x');
font-size: var.get('font-size/md') !important; font-size: var.get('font-size/md');
line-height: 20px; line-height: 20px;
&.tiny {
font-size: var.get('font-size/sm');
line-height: var.get('font-size/sm');
}
&.basic { &.basic {
border-radius: var(--border-radius); border-radius: var(--border-radius);
} }
@ -80,4 +123,6 @@
font-weight: 500; font-weight: 500;
} }
} }
} }

@ -161,16 +161,19 @@
border-radius: var(--border-radius) !important; border-radius: var(--border-radius) !important;
border-top-width: 1px !important; border-top-width: 1px !important;
border-color: var(--color-secondary) !important; border-color: var(--color-secondary) !important;
display: flex !important;
flex-direction: column; flex-direction: column;
gap: var.get('measure/.25x'); gap: var.get('measure/.25x');
&.visible {
display: flex;
}
.item { .item {
border: none !important; border: none !important;
} }
} }
} }
} }
} }
@mixin menu { @mixin menu {
@ -202,4 +205,10 @@
background: var(--color-hover); background: var(--color-hover);
} }
} }
}
@mixin tabular-menu {
.ui.tabular.menu .active.item, .ui.tabular.menu .active.item:hover {
border-radius: var(--border-radius) var(--border-radius) 0 0 !important;
}
} }

@ -3,4 +3,5 @@
@forward './forms'; @forward './forms';
@forward './file-content'; @forward './file-content';
@forward './avatar'; @forward './avatar';
@forward './button'; @forward './button';
@forward './boxes';

@ -14,6 +14,8 @@
@include components.file-content; // github-style file content @include components.file-content; // github-style file content
@include components.avatar; // github-style avatars @include components.avatar; // github-style avatars
@include components.gitea-button; // github-style buttons @include components.gitea-button; // github-style buttons
@include components.segment;
@include components.comments; // github-style comment boxes
// code highlighting // code highlighting
@include modules.chroma($is-dark); // syntax highlighting @include modules.chroma($is-dark); // syntax highlighting

@ -22,6 +22,12 @@
.issue-title-meta { .issue-title-meta {
color: color.get('subtle'); color: color.get('subtle');
} }
&:has(+ .ui.pull.tabs) { // if the next sibling is a tab (e.g. pull request tab selector)
margin-bottom: var.get('measure/1x');
padding-bottom: var.get('measure/.5x');
border-bottom: none;
}
} }
.issue-content { .issue-content {
@ -35,97 +41,171 @@
} }
.timeline-item { .timeline-item {
&.comment { &.event {
.content { .badge {
background-color: var(--color-box-body); // and not contains a tw-bg-* class
&:not([class*="tw-bg-"]) {
color: var(--color-timeline-badge-fg) !important;
}
>.comment-header, >.ui.segment { &.tw-bg-green.tw-text-white {
&:before, &:after { color: var(--color-green-contrast) !important;
display: none; }
}
&.tw-bg-red.tw-text-white {
color: var(--color-red-contrast) !important;
} }
}
.ui.segments.conversation-holder {
margin-left: var.get('measure/.5x');
border-radius: var(--border-radius);
}
}
}
.repository.view.issue {
--avatar-size: 24px;
.comment-list .ui.comments {
background-color: transparent;
gap: var.get('measure/1x');
position: relative;
}
.comment-header { .comment-list {
padding: var.get('measure/.25x') var.get('measure/.25x') var.get('measure/.25x') var.get('measure/1x') !important; .ui.comment-code-cloud.segment {
padding: 0 var.get('measure/.5x') var.get('measure/.5x') !important;
.comment-header-left { .ui.comments {
.text { gap: var.get('measure/.5x');
color: color.get('subtle') !important;
.author { &:before {
color: color.get('text') !important; display: block;
content: "";
position: absolute;
top: 0;
bottom: 0;
left: calc((var(--avatar-size) / 2) - 1px);
top: 16px;
width: 3px;
background-color: var(--color-timeline);
opacity: 50%;
}
.comment.code-comment .content.comment-container{
background-color: transparent !important;
.header.comment-header {
.comment-header-left {
gap: var.get('measure/.5x');
.avatar img {
z-index: 1 !important;
width: var(--avatar-size) !important;
height: var(--avatar-size) !important;
}
} }
} }
} }
}
.comment-header-right { .code-comment-buttons {
* { margin: 0!important;
color: color.get('subtle') !important; }
}
.comment-form {
.label { margin-top: var.get('measure/1x');
height: var.get('measure/1.25x', 1.25rem) !important;
padding: 0px var.get('measure/.375x') !important; .field.footer {
border-radius: var.get('measure/1x') !important; margin: 0 !important;
padding: 0 !important;
button {
padding: var.get('measure/.5x') var.get('measure/1x') !important;
} }
} }
} }
} }
}
}
// comment form at the end .repository .ui.tabs.divider {
&.form { margin-bottom: var.get('measure/1x');
display: flex; }
align-items: flex-start;
background-color: var(--color-body);
gap: var.get('measure/1x');
left: -68px !important;
width: calc(100% + 68px - 16px) !important;
@media (max-width: 768px) {
left: 0 !important;
margin-left: -16px !important;
width: auto !important;
}
.timeline-avatar { .repository .diff-detail-box { // diff page detail box
display: block; padding: var.get('measure/.5x') 0;
position: relative !important; margin: calc(var.get('measure/1x') * -1) 0 0 0;
left: unset !important; height: 60px;
flex: 0 0 auto !important; }
}
.content { .repository #diff-container {
// fake title to mimic github new issue page #diff-file-tree {
&:before { top: 60px;
display: block; .diff-file-tree-items {
content: 'Add a comment'; margin: 0;
font-weight: 600; }
margin-bottom: var.get('measure/1x'); }
margin-top: var.get('measure/.5x');
font-size: var.get('font-size/lg');
}
display: block; column-gap: var.get('measure/1x');
position: relative !important;
margin-left: 0 !important;
flex: 1;
.ui.segment { .diff-file-body tr.tag-code:last-child td:first-child, .diff-file-body tr.tag-code:last-child td:first-child * {
padding: 0 !important; border-bottom-left-radius: calc(var(--border-radius) - 2px);
border: none !important; }
.diff-file-body tr.tag-code:last-child td:last-child, .diff-file-body tr.tag-code:last-child td:last-child * {
border-bottom-right-radius: var(--border-radius);
}
.ui.attached.header.diff-file-header.sticky-2nd-row {
position: sticky;
top: 60px;
z-index: 7;
}
.add-comment {
border-top: 1px solid var(--color-secondary);
border-bottom: 1px solid var(--color-secondary);
.conversation-holder {
.comment-code-cloud {
padding: var.get('measure/.75x') !important;
form {
&:not(:first-child) {
margin-top: var.get('measure/.5x');
}
.field.footer {
margin: 0 !important;
padding: 0 !important;
button {
padding: var.get('measure/.5x') var.get('measure/1x') !important;
}
}
} }
} }
} }
} }
} }
.repository.view.issue .comment-list .comment>.content>div:last-child { // new issue page
border-bottom-left-radius: var(--border-radius); .page-content.repository.new.issue {
border-bottom-right-radius: var(--border-radius); .issue-content-left {
} .ui.comments .comment {
.ui.segment.content {
padding: 6px 0 0;
border: none;
.repository.view.issue .comment-list .comment>.content>div:first-child { .field {
border-top-left-radius: var(--border-radius); margin-bottom: var.get('measure/1x');
border-top-right-radius: var(--border-radius); }
}
&:before, &:after {
display: none;
}
}
}
}
}
} }

@ -39,7 +39,14 @@
.repo-description { .repo-description {
margin-bottom: var.get('measure/1x'); margin-bottom: var.get('measure/1x');
}
+a.flex-text-block {
svg {
color: color.get('subtle') !important;
}
margin-bottom: var.get('measure/1x');
}
}
.flex-text-block { .flex-text-block {
gap: var.get('measure/.25x') !important; gap: var.get('measure/.25x') !important;
@ -53,6 +60,10 @@
@media (max-width: 768px) { @media (max-width: 768px) {
.repo-description { .repo-description {
margin-top: 0 !important; margin-top: 0 !important;
+a.flex-text-block {
margin-bottom: 0;
}
} }
#repo-topics, #manage_topic, .flex-item-title { #repo-topics, #manage_topic, .flex-item-title {
@ -105,7 +116,6 @@
gap: 0 !important; gap: 0 !important;
.language-stats { .language-stats {
background-color: red !important;
margin: 0 !important; margin: 0 !important;
height: var.get('measure/.5x') !important; height: var.get('measure/.5x') !important;
margin-bottom: var.get('measure/.5x') !important; margin-bottom: var.get('measure/.5x') !important;
@ -164,4 +174,70 @@
} }
} }
} }
button.ui.primary.button.js-btn-clone-panel {
display: flex;
flex-wrap: nowrap;
gap: var.get('measure/.5x');
align-items: center;
span {
display: flex;
flex-wrap: nowrap;
gap: var.get('measure/.375x');
align-items: center;
}
}
.clone-panel-popup {
.clone-panel-field {
margin: var.get('measure/1x');
}
.clone-panel-list {
margin: var.get('measure/1x');
.item {
margin: var.get('measure/.5x') 0;
}
}
.clone-panel-tab {
padding: 0 var.get('measure/1x') var.get('measure/.5x');
display: flex;
gap: var.get('measure/.5x');
button {
padding: var.get('measure/.375x') var.get('measure/.5x');
font-weight: 600;
&.active {
border-bottom: 0;
position: relative;
&:after {
content: '';
display: block;
position: absolute;
bottom: -7px;
left: 0;
width: 100%;
height: 2px;
background-color: color.get('primary/base');
}
}
&:hover {
background-color: var(--color-hover);
border-radius: var(--border-radius);
transition: background 0.12s ease-out;
text-decoration: none;
}
}
}
}
.tippy-svg-arrow {
display: none;
}
} }

@ -3,7 +3,7 @@
@use './section'; @use './section';
@mixin settings-pages { @mixin settings-pages {
.page-content.user.settings, .page-content.admin { .page-content.user.settings, .page-content.admin, .page-content.repository.settings {
.ui.flex-container { .ui.flex-container {
column-gap: 40px; column-gap: 40px;
@ -16,6 +16,5 @@
@include section.content; @include section.content;
} }
} }
} }
} }

@ -40,7 +40,7 @@
--opacity-disabled: 0.55; --opacity-disabled: 0.55;
--height-loading: 16rem; --height-loading: 16rem;
--min-height-textarea: 132px; // padding + 6 lines + border = calc(1.57142em + 6lh + 2px), but lh is not fully supported --min-height-textarea: 132px; // padding + 6 lines + border = calc(1.57142em + 6lh + 2px), but lh is not fully supported
--checkbox-size: 15px; // height and width of checkbox and radio inputs --checkbox-size: 16px; // height and width of checkbox and radio inputs
--page-spacing: 24px; // space between page elements --page-spacing: 24px; // space between page elements
--page-margin-x: 32px; // minimum space on left and right side of page --page-margin-x: 32px; // minimum space on left and right side of page
--tab-size: 4; --tab-size: 4;

@ -123,7 +123,7 @@
--color-purple: #{color.get('palette/purple/base')}; --color-purple: #{color.get('palette/purple/base')};
--color-pink: #{color.get('palette/pink/base')}; --color-pink: #{color.get('palette/pink/base')};
--color-brown: #{color.get('palette/brown/base')}; --color-brown: #{color.get('palette/brown/base')};
--color-black: #{color.get('elevation/1')}; --color-black: #{color.get('palette/black/base')};
// //
// named » contrasts (lugit addition) // named » contrasts (lugit addition)
@ -287,6 +287,7 @@
--color-text-light-3: #{color.get('subtle')}; --color-text-light-3: #{color.get('subtle')};
--color-footer: rgba(#{color.get('elevation/2', 'rgb')}, 0.2); --color-footer: rgba(#{color.get('elevation/2', 'rgb')}, 0.2);
--color-timeline: #{color.get('elevation/5')}; --color-timeline: #{color.get('elevation/5')};
--color-timeline-badge-fg: #{if($is-dark, var(--color-white), var.get('color-text'))};
// box // box
--color-box-header: #{rgba(color.get('elevation/4', 'rgb'), 1)}; --color-box-header: #{rgba(color.get('elevation/4', 'rgb'), 1)};
@ -306,7 +307,7 @@
--color-light-border: #{color.get('elevation/6')}; --color-light-border: #{color.get('elevation/6')};
--color-hover: rgba(#{color.get('elevation/6', 'rgb')}, 0.5); --color-hover: rgba(#{color.get('elevation/6', 'rgb')}, 0.5);
--color-hover-opaque: #{color.get('elevation/6', 'rgb')}; --color-hover-opaque: #{color.get('elevation/6', 'rgb')};
--color-active: #{color.get('elevation/4')}; --color-active: #{color.get('elevation/5')};
--color-menu: #{color.get('elevation/4')}; --color-menu: #{color.get('elevation/4')};
--color-card: #{color.get('elevation/3')}; --color-card: #{color.get('elevation/3')};
--color-markup-table-row: rgba(#{color.get('text', 'rgb')}, 0.02); --color-markup-table-row: rgba(#{color.get('text', 'rgb')}, 0.02);

Loading…
Cancel
Save