From 67b7c9df24ba27cf926b695a16e903a3c7eb40fd Mon Sep 17 00:00:00 2001 From: Alexander Platov Date: Sun, 23 Apr 2023 20:37:24 +0300 Subject: [PATCH] New themes (#3049) Signed-off-by: Alexander Platov Signed-off-by: Denis Bykhov Co-authored-by: Denis Bykhov --- models/tracker/src/index.ts | 14 +- packages/kanban/src/components/Kanban.svelte | 3 +- .../src/components/KanbanCardEmpty.svelte | 6 +- .../kanban/src/components/KanbanRow.svelte | 11 +- .../src/components/MessageBox.svelte | 8 +- .../src/components/NavLink.svelte | 21 +- .../src/components/ReferenceInput.svelte | 21 +- packages/theme/styles/_colors.scss | 149 +++++++++- packages/theme/styles/_layouts.scss | 52 ++-- packages/theme/styles/common.scss | 62 ++-- packages/theme/styles/components.scss | 160 +++++++--- packages/theme/styles/dialogs.scss | 19 +- packages/theme/styles/global.scss | 2 +- packages/theme/styles/panel.scss | 20 +- packages/theme/styles/popups.scss | 3 +- packages/ui/src/colors.ts | 55 ++++ packages/ui/src/components/ActionIcon.svelte | 3 +- packages/ui/src/components/Button.svelte | 175 ++++++----- packages/ui/src/components/CheckBox.svelte | 30 +- .../ui/src/components/EditWithIcon.svelte | 24 +- .../ui/src/components/MultiProgress.svelte | 4 +- .../ui/src/components/PanelInstance.svelte | 2 +- packages/ui/src/components/Scroller.svelte | 54 +++- packages/ui/src/components/SearchEdit.svelte | 1 - packages/ui/src/components/ShowMore.svelte | 8 +- packages/ui/src/components/Status.svelte | 2 +- packages/ui/src/components/StylishEdit.svelte | 10 +- packages/ui/src/components/TabList.svelte | 50 ++-- .../calendar/DateRangePresenter.svelte | 48 +-- .../components/calendar/MonthCalendar.svelte | 13 +- .../components/calendar/WeekCalendar.svelte | 5 +- .../components/calendar/YearCalendar.svelte | 11 +- .../src/components/icons/CollapseArrow.svelte | 8 + .../internal/FontSizeSelector.svelte | 2 + .../ui/src/components/internal/Root.svelte | 2 +- packages/ui/src/index.ts | 2 + packages/ui/src/popups.ts | 2 +- packages/ui/src/types.ts | 7 +- .../src/components/AttachmentRefInput.svelte | 8 +- .../src/components/FileBrowser.svelte | 36 ++- .../src/components/FileBrowserFilters.svelte | 80 +++-- .../src/components/CalendarView.svelte | 280 +++++++++--------- .../src/components/Events.svelte | 48 ++- .../src/components/Channel.svelte | 5 + .../src/components/ChannelHeader.svelte | 2 +- .../src/components/ChunterBrowser.svelte | 2 +- .../src/components/DmHeader.svelte | 3 +- .../src/components/Header.svelte | 1 + .../src/components/JumpToDateSelector.svelte | 45 +-- .../src/components/Message.svelte | 13 +- .../src/components/SavedMessages.svelte | 8 +- .../src/components/Thread.svelte | 18 +- .../src/components/Threads.svelte | 15 +- plugins/contact-assets/lang/en.json | 2 +- plugins/contact-assets/lang/ru.json | 2 +- .../src/components/Avatar.svelte | 6 + .../src/components/Contacts.svelte | 39 ++- .../EmployeeAttributePresenter.svelte | 6 +- .../src/components/EmployeePresenter.svelte | 7 +- .../components/EmployeeRefPresenter.svelte | 6 +- .../src/components/PersonContent.svelte | 21 +- .../src/components/PersonPresenter.svelte | 8 +- .../src/components/icons/Avatar.svelte | 4 + .../src/components/Documents.svelte | 34 +-- .../src/components/DepartmentCard.svelte | 118 ++++---- .../src/components/Schedule.svelte | 156 +++++----- .../src/components/Structure.svelte | 42 ++- .../components/schedule/MonthTableView.svelte | 51 ++-- .../src/components/schedule/MonthView.svelte | 33 +-- .../src/components/Categories.svelte | 40 +-- .../src/components/Form.svelte | 6 +- .../src/components/LoginApp.svelte | 2 +- .../src/components/SelectWorkspace.svelte | 7 +- .../src/components/StatusControl.svelte | 6 +- .../src/components/CreateCandidate.svelte | 21 +- .../src/components/Organizations.svelte | 50 ++-- .../src/components/Vacancies.svelte | 50 ++-- .../src/components/CategoryBar.svelte | 2 +- .../src/components/LabelsPresenter.svelte | 50 ++-- .../components/TagReferencePresenter.svelte | 7 +- .../src/components/TagsView.svelte | 42 +-- plugins/task-assets/assets/icons.svg | 9 +- .../src/components/AssignedTasks.svelte | 5 +- .../src/components/Dashboard.svelte | 3 +- .../src/components/StatusTableView.svelte | 21 +- plugins/tracker-assets/assets/icons.svg | 28 +- .../src/components/ComponentSelector.svelte | 5 +- .../src/components/ModeSelector.svelte | 58 ++-- .../components/ComponentBrowser.svelte | 45 ++- .../components/ComponentEditor.svelte | 7 +- .../src/components/icons/StatusIcon.svelte | 38 ++- .../components/issues/IssuePresenter.svelte | 10 +- .../src/components/issues/IssuesHeader.svelte | 44 +-- .../src/components/issues/IssuesView.svelte | 2 +- .../src/components/issues/KanbanView.svelte | 6 +- .../components/issues/PriorityEditor.svelte | 4 +- .../issues/PriorityRefPresenter.svelte | 11 +- .../src/components/issues/StatusEditor.svelte | 9 +- .../components/issues/StatusPresenter.svelte | 22 +- .../issues/StatusRefPresenter.svelte | 11 +- .../components/issues/TitlePresenter.svelte | 11 +- .../issues/timereport/EstimationEditor.svelte | 2 +- .../EstimationProgressCircle.svelte | 10 +- .../EstimationStatsPresenter.svelte | 44 ++- .../issues/timereport/TimePresenter.svelte | 13 +- .../components/sprints/SprintBrowser.svelte | 100 +++---- .../components/sprints/SprintEditor.svelte | 87 +++--- .../components/sprints/SprintSelector.svelte | 5 +- .../templates/IssueTemplatesView.svelte | 22 +- plugins/view-assets/assets/icons.svg | 14 +- .../src/components/ClassAttributeBar.svelte | 10 +- .../src/components/DocNavLink.svelte | 3 +- .../src/components/Table.svelte | 12 +- .../components/ViewletSettingButton.svelte | 24 +- .../src/components/filter/FilterBar.svelte | 15 +- .../src/components/filter/FilterButton.svelte | 24 +- .../components/filter/FilterSection.svelte | 12 +- .../src/components/icons/ArrowDown.svelte | 24 ++ .../src/components/icons/Filter.svelte | 26 ++ .../src/components/icons/UpDown.svelte | 26 ++ .../components/list/DividerPresenter.svelte | 12 + .../src/components/list/ListCategories.svelte | 4 +- .../src/components/list/ListCategory.svelte | 69 +++-- .../src/components/list/ListHeader.svelte | 150 +++++++--- .../src/components/list/ListItem.svelte | 96 ++++-- .../src/components/list/ListView.svelte | 6 +- .../components/status/StatusPresenter.svelte | 2 +- plugins/view-resources/src/index.ts | 2 + plugins/view/src/index.ts | 3 +- .../src/components/Header.svelte | 11 +- .../src/components/SpaceBrowser.svelte | 118 +++++--- .../src/components/SpaceHeader.svelte | 56 ++-- .../src/components/SpecialView.svelte | 38 +-- .../src/components/Workbench.svelte | 6 +- tests/sanity/tests/hr.spec.ts | 6 +- tests/sanity/tests/org.members.spec.ts | 2 +- tests/sanity/tests/tracker.spec.ts | 6 +- tests/sanity/tests/workbench.spec.ts | 2 +- 138 files changed, 2263 insertions(+), 1599 deletions(-) create mode 100644 packages/ui/src/components/icons/CollapseArrow.svelte create mode 100644 plugins/view-resources/src/components/icons/ArrowDown.svelte create mode 100644 plugins/view-resources/src/components/icons/Filter.svelte create mode 100644 plugins/view-resources/src/components/icons/UpDown.svelte create mode 100644 plugins/view-resources/src/components/list/DividerPresenter.svelte diff --git a/models/tracker/src/index.ts b/models/tracker/src/index.ts index 116a69cb8a..0ce7abe63b 100644 --- a/models/tracker/src/index.ts +++ b/models/tracker/src/index.ts @@ -529,7 +529,7 @@ export function createModel (builder: Builder): void { { key: '', presenter: tracker.component.IssuePresenter, - props: { type: 'issue', listProps: { fixed: 'left' } } + props: { type: 'issue', listProps: { key: 'issue', fixed: 'left' } } }, { key: '', @@ -544,7 +544,11 @@ export function createModel (builder: Builder): void { presenter: tags.component.LabelsPresenter, props: { kind: 'list', full: false, lookupField: 'labels', listProps: { optional: true, compression: true } } }, - { key: '', presenter: tracker.component.DueDatePresenter, props: { kind: 'list' } }, + { + key: '', + presenter: tracker.component.DueDatePresenter, + props: { kind: 'list', listProps: { optional: true, compression: true } } + }, { key: '', presenter: tracker.component.ComponentEditor, @@ -575,15 +579,17 @@ export function createModel (builder: Builder): void { } } }, + { key: '', presenter: view.component.DividerPresenter, props: { type: 'divider' } }, { key: '', presenter: tracker.component.EstimationEditor, - props: { kind: 'list', size: 'small', listProps: { optional: true } } + props: { kind: 'list', size: 'small', listProps: { key: 'estimation', fixed: 'left' } } }, + { key: '', presenter: view.component.DividerPresenter, props: { type: 'divider' } }, { key: 'modifiedOn', presenter: tracker.component.ModificationDatePresenter, - props: { listProps: { fixed: 'right', optional: true } } + props: { listProps: { key: 'modified', fixed: 'left' } } }, { key: '$lookup.assignee', diff --git a/packages/kanban/src/components/Kanban.svelte b/packages/kanban/src/components/Kanban.svelte index 159c308129..7261fea82e 100644 --- a/packages/kanban/src/components/Kanban.svelte +++ b/packages/kanban/src/components/Kanban.svelte @@ -302,7 +302,7 @@ } -
+
{#each categories as state, si (typeof state === 'object' ? state.name : state)} @@ -360,7 +360,6 @@ position: relative; width: 100%; height: 100%; - background: var(--board-bg-color); } .kanban-content { display: flex; diff --git a/packages/kanban/src/components/KanbanCardEmpty.svelte b/packages/kanban/src/components/KanbanCardEmpty.svelte index 2d251133fb..ffe43e7e96 100644 --- a/packages/kanban/src/components/KanbanCardEmpty.svelte +++ b/packages/kanban/src/components/KanbanCardEmpty.svelte @@ -25,13 +25,13 @@ align-items: center; padding: 0.75rem 1.5rem; color: var(--dark-color); - background-color: var(--board-card-bg-color); - border: 1px dotted var(--divider-color); + background-color: var(--theme-kanban-card-bg-color); + border: 1px dotted var(--theme-kanban-card-border); border-radius: 0.75rem; cursor: pointer; &:hover { - color: var(--caption-color); + color: var(--theme-caption-color); } } diff --git a/packages/kanban/src/components/KanbanRow.svelte b/packages/kanban/src/components/KanbanRow.svelte index d5fda1741a..22dabf9c65 100644 --- a/packages/kanban/src/components/KanbanRow.svelte +++ b/packages/kanban/src/components/KanbanRow.svelte @@ -106,13 +106,14 @@ diff --git a/packages/text-editor/src/components/ReferenceInput.svelte b/packages/text-editor/src/components/ReferenceInput.svelte index 650841ab72..402d1077ec 100644 --- a/packages/text-editor/src/components/ReferenceInput.svelte +++ b/packages/text-editor/src/components/ReferenceInput.svelte @@ -361,7 +361,7 @@ align-items: center; width: 1rem; height: 1rem; - color: var(--caption-color); + color: var(--theme-caption-color); opacity: 0.6; cursor: pointer; @@ -383,8 +383,8 @@ .formatPanelRef { padding: 0.5rem; - background-color: var(--body-color); - border: 1px solid var(--divider-color); + background-color: var(--theme-comp-header-color); + border: 1px solid var(--theme-divider-color); border-radius: 0.5rem 0.5rem 0 0; border-bottom: 0; @@ -402,8 +402,8 @@ align-items: flex-end; min-height: 2.75rem; padding: 0.75rem 1rem; - background-color: var(--body-accent); - border: 1px solid var(--divider-color); + background-color: var(--theme-refinput-color); + border: 1px solid var(--theme-divider-color); border-radius: 0.5rem; &.withoutTopBorder { @@ -417,7 +417,7 @@ align-items: center; width: calc(100% - 1.75rem); height: 100%; - color: var(--content-color); + color: var(--theme-content-color); background-color: transparent; border: none; outline: none; @@ -468,19 +468,18 @@ .icon { width: 1.25rem; height: 1.25rem; - color: var(--dark-color); + color: var(--theme-dark-color); cursor: pointer; &:hover { - color: var(--caption-color); + color: var(--theme-caption-color); } } &:focus { - border: 1px solid var(--primary-button-focused-border); - box-shadow: 0 0 0 3px var(--primary-button-outline); + box-shadow: 0 0 0 2px var(--primary-button-focused-border); & > .icon { - color: var(--caption-color); + color: var(--theme-caption-color); } } diff --git a/packages/theme/styles/_colors.scss b/packages/theme/styles/_colors.scss index eb512bc0ac..a7ace02cf4 100644 --- a/packages/theme/styles/_colors.scss +++ b/packages/theme/styles/_colors.scss @@ -15,16 +15,17 @@ /* Common Colors */ * { - --primary-button-color: #fff; - --primary-button-enabled: #4474F6; - --primary-button-hovered: #2A5FF6; - --primary-button-pressed: #194CD7; - --primary-button-focused: #194CD7; - --primary-button-disabled: #5771B9; - --primary-button-focused-border: #7393EB; - --primary-button-outline: rgba(87, 132, 255, .3); - --primary-button-border: rgba(255, 255, 255, .09); + // --primary-button-color: #fff; + // --primary-button-enabled: #4474F6; + // --primary-button-hovered: #2A5FF6; + // --primary-button-pressed: #194CD7; + // --primary-button-focused: #194CD7; + // --primary-button-disabled: #5771B9; + // --primary-button-focused-border: #7393EB; + // --primary-button-outline: rgba(87, 132, 255, .3); + // --primary-button-border: rgba(255, 255, 255, .09); + --white-color: #fff; --duotone-color: rgba(126, 134, 158, .25); --system-error-color: #EE7A7A; @@ -52,6 +53,67 @@ /* Dark Theme */ .theme-dark { + --primary-button-color: #fff; + --primary-button-enabled: #205DC2; + --primary-button-hovered: #1A53AF; + --primary-button-pressed: #144CA8; + --primary-button-focused: #144CA8; + --primary-button-disabled: #6E9FED; + --primary-button-focused-border: #6E9FED; + --primary-button-border: rgba(255, 255, 255, .09); + --primary-button-outline: rgba(87, 132, 255, .3); // OLD + + --theme-button-enabled: rgba(255, 255, 255, .02); + --theme-button-hovered: rgba(255, 255, 255, .04); + --theme-button-pressed: rgba(255, 255, 255, .08); + --theme-button-focused: rgba(255, 255, 255, .04); + --theme-button-disabled: rgba(255, 255, 255, .02); + --theme-button-border: rgba(255, 255, 255, .06); + + --theme-refinput-color: rgba(255, 255, 255, .03); + + --theme-bg-color: #1A1A28; + --theme-back-color: #0f0f18; + --theme-statusbar-color: #2C2C35; + --theme-navpanel-color: #14141F; + --theme-navpanel-hovered: rgba(255, 255, 255, .04); + --theme-navpanel-selected: rgba(255, 255, 255, .07); + --theme-navpanel-divider: rgba(255, 255, 255, .1); + --theme-navpanel-border: transparent; + --theme-navpanel-icons-color: #7F7F7F; + --theme-comp-header-color: #1F1F2C; + --theme-divider-color: rgba(255, 255, 255, .06); + + --theme-trans-color: rgba(255, 255, 255, .3); + --theme-darker-color: rgba(255, 255, 255, .4); + --theme-halfcontent-color: rgba(255, 255, 255, .5); + --theme-dark-color: rgba(255, 255, 255, .6); + --theme-content-color: rgba(255, 255, 255, .8); + --theme-caption-color: #FFF; + + --theme-list-border-color: rgba(255, 255, 255, .05); + --theme-list-header-color: #C88C65; + --theme-list-subheader-color: #262634; + --theme-list-row-color: #21212F; + --theme-list-button-color: #262633; + --theme-list-divider-color: rgba(255, 255, 255, .09); + --theme-list-subheader-divider: transparent; + + --theme-table-border-color: rgba(255, 255, 255, .1); + --theme-table-header-color: #1C1C29; + --theme-table-row-color: #21212F; + + --theme-kanban-card-bg-color: rgba(222, 222, 240, .04); + --theme-kanban-card-border: transparent; + --theme-kanban-card-footer: #D9D9D9; + + --theme-tablist-color: rgba(0, 0, 0, .02); + --theme-checkbox-color: #000; + --theme-checkbox-bg-color: #FFF; + --theme-checkbox-border: rgba(0, 0, 0, .12); + --theme-checkbox-disabled: #999; + --theme-progress-color: #FFFFFF; + --body-color: #1f2023; --body-accent: #222326; --board-bg-color: #1c1d1f; @@ -61,7 +123,7 @@ --accent-bg-color: #27282b; --accent-shadow: rgb(0 0 0 / 10%) 0px 2px 4px; - --highlight-hover: #28292b; + --highlight-hover: #282834; --highlight-select: #252b3a; --highlight-select-border: #44506b; --highlight-select-hover: #2c3346; @@ -106,7 +168,7 @@ --button-bg-hover: #37383b; --button-border-color: #3c3f44; --button-border-hover: #45484e; - --button-shadow: rgb(0 0 0 / 25%) 0px 1px 1px; + --button-shadow: rgb(0 0 0 / 15%) 0px 1px 1px 1px; --button-disabled-color: #313236; --noborder-bg-color: #313236; --noborder-bg-hover: #37383b; @@ -135,6 +197,67 @@ /* Light Theme */ .theme-light { + --primary-button-color: #fff; + --primary-button-enabled: #2B5190; + --primary-button-hovered: #1A53AF; // DARK + --primary-button-pressed: #144CA8; // DARK + --primary-button-focused: #144CA8; // DARK + --primary-button-disabled: #6E9FED; // DARK + --primary-button-focused-border: #6E9FED; // DARK + --primary-button-border: rgba(255, 255, 255, .09); + --primary-button-outline: rgba(87, 132, 255, .3); // OLD + + --theme-button-enabled: rgba(0, 0, 0, .02); + --theme-button-hovered: rgba(0, 0, 0, .04); + --theme-button-pressed: rgba(0, 0, 0, .08); + --theme-button-focused: rgba(0, 0, 0, .04); + --theme-button-disabled: rgba(0, 0, 0, .02); + --theme-button-border: rgba(0, 0, 0, .06); + + --theme-refinput-color: rgba(0, 0, 0, .03); + + --theme-bg-color: #F1F1F4; + --theme-back-color: #D9D9DD; + --theme-statusbar-color: #bfbfc6; + --theme-navpanel-color: #E8E8ED; + --theme-navpanel-hovered: rgba(218, 218, 231, .5); + --theme-navpanel-selected: #DADAE7; + --theme-navpanel-divider: rgba(0, 0, 0, .06); + --theme-navpanel-border: rgba(0, 0, 0, .06); + --theme-navpanel-icons-color: #7F7F7F; + --theme-comp-header-color: #FBFBFC; + --theme-divider-color: rgba(0, 0, 0, .06); + + --theme-trans-color: rgba(0, 0, 0, .3); + --theme-darker-color: rgba(0, 0, 0, .4); + --theme-halfcontent-color: rgba(0, 0, 0, .5); + --theme-dark-color: rgba(0, 0, 0, .6); + --theme-content-color: rgba(0, 0, 0, .8); + --theme-caption-color: #000; + + --theme-list-border-color: rgba(0, 0, 0, .09); + --theme-list-header-color: #ECD4CA; + --theme-list-subheader-color: #EEEEF0; + --theme-list-row-color: #F7F7F8; + --theme-list-button-color: #F2F2F4; + --theme-list-divider-color: rgba(0, 0, 0, .07); + --theme-list-subheader-divider: rgba(0, 0, 0, .06); + + --theme-table-border-color: rgba(0, 0, 0, .1); + --theme-table-header-color: #EFEFF2; + --theme-table-row-color: #F4F4F6; + + --theme-kanban-card-bg-color: rgba(0, 0, 0, .03); + --theme-kanban-card-border: rgba(0, 0, 0, .04); + --theme-kanban-card-footer: rgba(0, 0, 0, .04); + + --theme-tablist-color: rgba(0, 0, 0, .02); + --theme-checkbox-color: #000; + --theme-checkbox-bg-color: #FFF; + --theme-checkbox-border: rgba(0, 0, 0, .12); + --theme-checkbox-disabled: #999; + --theme-progress-color: rgba(0, 0, 0, .5); + --body-color: #fff; --body-accent: #fafafa; // HZ --board-bg-color: #f4f5f8; @@ -144,7 +267,7 @@ --accent-bg-color: #eff0f2; // HZ --accent-shadow: rgb(0 0 0 / 10%) 0px 2px 4px; // Dark - --highlight-hover: #f9f9f9; + --highlight-hover: #F0F0F1; --highlight-select: #f0f4ff; --highlight-select-border: #e6eaff; --highlight-select-hover: #e4ebff; @@ -189,7 +312,7 @@ --button-bg-hover: #f4f5f8; --button-border-color: #dfe1e4; --button-border-hover: #c9cbcd; - --button-shadow: rgb(0 0 0 / 7%) 0px 1px 1px; + --button-shadow: rgb(0 0 0 / 20%) 0px 1px 2px 1px; --button-disabled-color: #eff1f4; --noborder-bg-color: #eff1f4; --noborder-bg-hover: #f4f5f8; diff --git a/packages/theme/styles/_layouts.scss b/packages/theme/styles/_layouts.scss index de26879501..18a57c3c7a 100644 --- a/packages/theme/styles/_layouts.scss +++ b/packages/theme/styles/_layouts.scss @@ -363,10 +363,11 @@ input.search { } } .buttons-divider { - min-width: 1px; + flex-shrink: 0; width: 1px; height: 1.5rem; - background-color: var(--divider-color); + max-height: 1.5rem; + background-color: var(--theme-list-divider-color); } .labels-row { @@ -467,6 +468,7 @@ input.search { .mb-8 { margin-bottom: 2rem; } .mb-9 { margin-bottom: 2.25rem; } .mb-10 { margin-bottom: 2.5rem; } +.mx-0-5 { margin: 0 .125rem; } .mx-1 { margin: 0 .25rem; } .mx-2 { margin: 0 .5rem; } .mx-3 { margin: 0 .75rem; } @@ -475,6 +477,7 @@ input.search { .mx-auto { margin: 0 auto; } .my-2 { margin: .5rem 0; } .my-4 { margin: 1rem 0; } +.my-5 { margin: 1.25rem 0; } .m-0-5 { margin: .125rem; } .m-1 { margin: .25rem; } @@ -484,6 +487,7 @@ input.search { .pl-3 { padding-left: .75rem; } .pl-4 { padding-left: 1rem; } .pl-8 { padding-left: 2rem; } +.pl-10 { padding-left: 2.5rem; } .pr-1 { padding-right: .25rem; } .pr-2 { padding-right: .5rem; } .pr-3 { padding-right: .75rem; } @@ -504,6 +508,7 @@ input.search { .px-2 { padding: 0 .5rem; } .px-3 { padding: 0 .75rem; } .px-4 { padding: 0 1rem; } +.px-10 { padding: 0 2.5rem; } .py-1 { padding: 0.25rem 0; } .py-4 { padding: 1rem 0; } .py-8 { padding: 2rem 0; } @@ -612,6 +617,7 @@ input.search { .min-w-min { min-width: min-content; } .min-h-0 { min-height: 0; } .min-h-2 { min-height: .5rem; } +.min-h-4 { min-height: 1rem; } .min-h-7 { min-height: 1.75rem; } .min-h-30 { min-height: 7.5rem; } .min-h-60 { min-height: 15rem; } @@ -623,7 +629,9 @@ input.search { .max-w-60 { max-width: 15rem; } .max-w-80 { max-width: 20rem; } .max-w-240 { max-width: 60rem; } +.max-h-0 { max-height: 0; } .max-h-2 { max-height: .5rem; } +.max-h-4 { max-height: 1rem; } .max-h-30 { max-height: 7.5rem; } .max-h-50 { max-height: 12.5rem; } .max-h-60 { max-height: 15rem; } @@ -642,20 +650,20 @@ input.search { height: 1em; } .svg-x-small { - width: .857em; - height: .857em; + width: .75rem; + height: .75rem; } .svg-small { - width: 1.143em; - height: 1.143em; + width: 1rem; + height: 1rem; } .svg-medium { - width: 1.429em; - height: 1.429em; + width: 1.25rem; + height: 1.25rem; } .svg-large { - width: 1.715em; - height: 1.715em; + width: 1.5rem; + height: 1.5rem; } .svg-full { width: inherit; @@ -767,26 +775,26 @@ a.no-line { } .focused-button { - background-color: var(--button-bg-color); + background-color: var(--theme-button-enabled); border: 1px solid transparent; - & > .icon { color: var(--accent-color); } + & > .icon { color: var(--theme-content-color); } &.selected { - background-color: var(--button-bg-hover); - border: 1px solid var(--button-border-hover); + background-color: var(--theme-button-pressed); + border: 1px solid var(--theme-button-border); } &:hover { - background-color: var(--button-bg-hover); - border: 1px solid var(--button-border-hover); - & > .icon { color: var(--caption-color); } + background-color: var(--theme-button-hovered); + border: 1px solid var(--theme-button-border); + & > .icon { color: var(--theme-caption-color); } } &:focus { - border: 1px solid var(--primary-button-focused-border); - box-shadow: 0 0 0 3px var(--primary-button-outline); - & > .icon { color: var(--caption-color); } + border: 1px solid var(--theme-button-border); + box-shadow: 0 0 0 2px var(--primary-button-focused-border); + & > .icon { color: var(--theme-caption-color); } } - &.bordered { border-color: var(--button-border-color); } + &.bordered { border-color: var(--theme-button-border); } } .overflow-x-auto { overflow-x: auto; } @@ -817,6 +825,8 @@ a.no-line { .background-primary-color { background-color: var(--primary-button-enabled); } .background-content-accent-color { background-color: var(--accent-color); } +.content-trans-color { color: var(--theme-trans-color); } + .dark-color, .content-dark-color { color: var(--dark-color); } .content-color { color: var(--content-color); } diff --git a/packages/theme/styles/common.scss b/packages/theme/styles/common.scss index f234aa6c4e..022cf9cacf 100644 --- a/packages/theme/styles/common.scss +++ b/packages/theme/styles/common.scss @@ -15,15 +15,16 @@ /* Panels */ * { - --app-panel-width: 4rem; + --app-panel-width: 4.25rem; } .antiPanel-application { flex-shrink: 0; display: flex; justify-content: space-between; align-items: center; - background-color: var(--board-bg-color); - + background-color: var(--theme-navpanel-color); + border-right: 1px solid var(--theme-navpanel-divider); + &.vertical { flex-direction: column; min-width: var(--app-panel-width); @@ -43,37 +44,39 @@ flex-direction: column; height: 100%; overflow: hidden; - - &.filled { background-color: var(--body-accent); } - &.border-left { border-left: 1px solid var(--divider-color); } - &.border-right { border-right: 1px solid var(--divider-color); } + + &.filled { background-color: var(--theme-bg-color); } + &.border-left { border-left: 1px solid var(--theme-divider-color); } + &.border-right { border-right: 1px solid var(--theme-divider-color); } } .antiPanel-navigator { position: relative; min-width: 17.5rem; max-width: 17.5rem; width: 17.5rem; + background-color: var(--theme-navpanel-color); + border-right: 1px solid var(--theme-navpanel-border); } @media (max-width: 1024px) { .antiPanel-navigator { position: fixed; - background-color: var(--body-accent); + top: var(--status-bar-height); + height: calc(100% - var(--status-bar-height)); + background-color: var(--theme-navpanel-color); filter: drop-shadow(2px 0 1px rgba(0, 0, 0, .2)); z-index: 450; &.portrait { - top: var(--status-bar-height); left: 0; } &.landscape { - top: var(--status-bar-height); - left: var(--app-panel-width); + left: var(--app-panel-width); } } } .antiPanel-component:not(.aside) { flex-grow: 1; - // background-color: var(--board-bg-color); + background-color: var(--theme-bg-color); } .antiPanel-component.aside { min-width: 30rem; @@ -169,13 +172,13 @@ } &:hover, &.hovered, &.selected { - background-color: var(--menu-bg-select); + // background-color: var(--theme-navpanel-hovered); .an-element__icon, .an-element__label { color: var(--caption-color); } .an-element__icon-arrow { opacity: 1; } } - &:hover, &.hovered { background-color: var(--highlight-hover); } - &.selected { background-color: var(--menu-bg-select); } + &:hover, &.hovered { background-color: var(--theme-navpanel-hovered); } + &.selected { background-color: var(--theme-navpanel-selected); } &:hover .an-element__tool, &.hovered .an-element__tool { visibility: visible; } &:not(.collapsed) .an-element__icon-arrow { opacity: 1; } @@ -220,7 +223,7 @@ margin: .5rem 0; height: 1px; - &.line { background-color: var(--divider-color); } + &.line { background-color: var(--theme-navpanel-divider); } &.short { margin: .25rem 1rem; } } .antiNav-space { @@ -231,7 +234,7 @@ flex-shrink: 0; width: 100%; height: 1px; - background-color: var(--divider-color); + background-color: var(--theme-navpanel-divider); } .antiNav-footer-grower { flex-shrink: 10; @@ -297,7 +300,7 @@ margin: .25rem 0; min-height: 1px; height: 1px; - background-color: var(--divider-color); + background-color: var(--theme-divider-color); &.dark { background-color: var(--body-accent); } &.noMargin { margin: 0; } @@ -351,20 +354,7 @@ border-radius: .5rem .5rem 0 0; } &__counter { - display: flex; - align-items: center; - flex-wrap: nowrap; - flex-shrink: 0; - padding: 0.25rem 0.5rem; - min-width: 1.325rem; - text-align: center; - font-weight: 500; - font-size: 1rem; - line-height: 1rem; - color: var(--accent-color); - background-color: var(--body-color); - border: 1px solid var(--divider-color); - border-radius: 1rem; + color: var(--theme-darker-color); } &__tag { display: flex; @@ -431,8 +421,8 @@ // Emphasized .antiEmphasized { padding: .75rem; - background-color: var(--body-accent); - border: 1px solid var(--button-border-color); + background-color: var(--theme-comp-header-color); + border: 1px solid var(--theme-divider-color); border-radius: .5rem; transition-property: border, background-color; transition-duration: .15s; @@ -440,8 +430,8 @@ &:hover, &:focus-within { - background-color: var(--body-color); - border-color: var(--button-border-hover); + // background-color: var(--body-color); + border-color: var(--theme-list-divider-color); } } diff --git a/packages/theme/styles/components.scss b/packages/theme/styles/components.scss index b0b91093e1..70ef4fca8f 100644 --- a/packages/theme/styles/components.scss +++ b/packages/theme/styles/components.scss @@ -20,10 +20,15 @@ height: 100%; .ac-header { - padding: 0.5rem 1.5rem 0.5rem 2.5rem; + padding: 0.5rem 2.25rem; + background-color: var(--theme-comp-header-color); // height: 3.5rem; // min-height: 2.5rem; + &.caption-height { + min-height: 3.25rem; + } + &.search-start { padding-left: 1.75rem; } &.short { display: flex; align-items: center; @@ -31,21 +36,23 @@ } &.full, &-full { - display: grid; - grid-template-columns: auto; - grid-auto-flow: column; - grid-auto-columns: max-content; - gap: .75rem; + display: flex; + justify-content: space-between; align-items: center; + min-width: 0; + + &:not(.small-gap, .medium-gap) > *:not(:last-child) { margin-right: 1.25rem; } + &.small-gap > *:not(:last-child) { margin-right: .75rem; } + &.medium-gap > *:not(:last-child) { margin-right: 1rem; } } - &.withSettings { padding-right: .75rem; } + // &.withSettings { padding-right: .75rem; } &.mini { display: flex; flex-direction: column; } &.mirror { justify-content: space-between; - padding: 0 1rem; + // padding: 0 1rem; &-tool { justify-content: space-between; @@ -53,7 +60,7 @@ } } &.divide { - border-bottom: 1px solid var(--divider-color); + border-bottom: 1px solid var(--theme-divider-color); } .secondRow { align-self: flex-end; @@ -77,23 +84,30 @@ .ac-header__icon { margin-right: 0.5rem; - color: var(--content-color); + color: var(--theme-content-color); } .ac-header__title { + flex-shrink: 1; min-width: 0; - font-weight: 500; font-size: 1rem; - color: var(--caption-color); + color: var(--theme-caption-color); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; user-select: none; } + .ac-header__counter { + flex-shrink: 0; + margin-left: .25rem; + min-width: 0; + font-size: 1rem; + color: var(--theme-darker-color); + } .ac-header__description { min-width: 0; font-size: 0.75rem; - color: var(--dark-color); + color: var(--theme-dark-color); overflow: hidden; visibility: visible; @@ -316,14 +330,14 @@ // height: 1.5rem; } &__element { - fill: var(--accent-bg-color); - stroke: var(--divider-color); + fill: var(--theme-button-enabled); + stroke: var(--theme-button-border); stroke-linecap: round; stroke-linejoin: round; - &:hover { fill: var(--button-bg-color); } + &:hover { fill: var(--theme-button-hovered); } } - &__selected { fill: var(--button-bg-hover); } + &__selected { fill: var(--theme-button-pressed); } .asb-label__container { position: absolute; @@ -338,11 +352,11 @@ height: 100%; font-weight: 500; font-size: 0.8125rem; - color: var(--dark-color); + color: var(--theme-dark-color); pointer-events: none; &.selected { - color: var(--caption-color); + color: var(--theme-caption-color); } } } @@ -360,18 +374,24 @@ &:last-child { padding-right: 0; } } th { - height: 2.5rem; - font-weight: 500; - font-size: .75rem; - color: var(--dark-color); - box-shadow: inset 0 -1px 0 0 var(--divider-color); + height: 3rem; + font-weight: 600; + font-size: .625rem; + letter-spacing: .5px; + text-transform: uppercase; + color: var(--theme-dark-color); + box-shadow: inset 0 -1px 0 0 var(--theme-table-border-color); user-select: none; // z-index: 5; &.sortable { cursor: pointer; } - &.sorted .icon { - margin-left: .25rem; - opacity: .6; + &.sorted { + color: var(--theme-caption-color); + + .icon { + margin-left: .25rem; + opacity: .6; + } } &:hover .antiTable-cells__checkCell { visibility: visible; } .checkall { visibility: visible; } @@ -379,7 +399,7 @@ &.editable { th, td, tr { - border: 1px dashed var(--divider-color); + border: 1px dashed var(--theme-divider-color); } } @@ -424,10 +444,12 @@ } .antiTable-body__row { + position: relative; height: 3.25rem; - color: var(--caption-color); + color: var(--theme-caption-color); + background-color: var(--theme-table-row-color); + border-bottom: 1px solid var(--theme-divider-color); - &:not(:last-child) { border-bottom: 1px solid var(--accent-bg-color); } &:hover .antiTable-cells__firstCell .antiTable-cells__firstCell-menuRow { visibility: visible; } &:hover, &.checking { .antiTable-cells__checkCell { visibility: visible; } @@ -442,14 +464,14 @@ } .antiTable-body__border { - border: 1px solid var(--divider-color); + border: 1px solid var(--theme-divider-color); } &.highlightRows .antiTable-body__row { &.selected { background-color: var(--highlight-hover); } &.checking { background-color: var(--highlight-select); - border-bottom-color: var(--highlight-select-border); + // border-bottom-color: var(--highlight-select-border); &:hover { background-color: var(--highlight-select-hover); } } @@ -460,8 +482,8 @@ position: sticky; z-index: 2; top: 0; - height: 2.5rem; - background-color: var(--body-color); + height: 3rem; + background-color: var(--theme-table-header-color); } .scroller-tfoot { @@ -469,10 +491,10 @@ z-index: 2; bottom: 0; height: 2.5rem; - background-color: var(--body-color); + background-color: var(--theme-table-header-color); tr { - box-shadow: inset 0 1px 0 0 var(--divider-color); + box-shadow: inset 0 1px 0 0 var(--theme-divider-color); } } @@ -480,9 +502,22 @@ th, td { &:first-child { position: sticky; - z-index: 1; + padding: 0; left: 0; - background-color: var(--body-color); + background-color: var(--theme-bg-color); + border-right: 1px solid transparent !important; + z-index: 1; + } + .fullfill { + display: flex; + align-items: center; + padding: .5rem; + width: 100%; + height: 100%; + background-color: var(--theme-bg-color); + border-right: 1px solid var(--theme-divider-color); + + &.center { justify-content: center; } } } } @@ -497,12 +532,12 @@ // Basic component view. .antiComponentBox { padding: 0.5rem; - background-color: var(--board-card-bg-color); - border: 1px solid var(--divider-color); + background-color: var(--theme-list-row-color); + border: 1px solid var(--theme-list-divider-color); border-radius: .75rem; &.antiComponentBoxFocused { - background-color: var(--board-card-bg-hover); + background-color: var(--theme-button-hovered); } } @@ -649,3 +684,46 @@ &.inter { font-size: 1em; } } } + +/* ListView - global style */ +.list-container .category-container .categoryHeader.subLevel.closed { + border-bottom: 1px solid var(--theme-list-border-color); + border-radius: 0 0 0.25rem 0.25rem; +} +.list-container .category-container .categoryHeader.closed:not(.subLevel) { + border-radius: 0 0 .25rem .25rem; + + &::before { + border-bottom-color: var(--theme-list-border-color); + border-radius: 0.25rem; + } +} +.list-container .category-container .listGrid { + .fix-margin { margin-left: .875rem; } + .name { margin-left: .375rem; } + + .optional-bar { + overflow: hidden; + display: flex; + align-items: center; + flex-shrink: 1; + min-width: 0; + + .label-wrapper { + display: flex; + align-items: center; + flex-shrink: 10; + width: auto; + min-width: 0; + } + & > *:not(:last-child) { + flex-shrink: 10; + width: min-content; + } + & > *:last-child { + flex-shrink: 0; + width: max-content; + } + & > * { margin-left: .375rem; } + } +} diff --git a/packages/theme/styles/dialogs.scss b/packages/theme/styles/dialogs.scss index 025db1f473..17f3c1a415 100644 --- a/packages/theme/styles/dialogs.scss +++ b/packages/theme/styles/dialogs.scss @@ -29,7 +29,8 @@ display: flex; flex-direction: column; min-height: 0; - background: var(--popup-bg-color); + background: var(--theme-list-row-color); + border: 1px solid var(--theme-divider-color); border-radius: .5rem; box-shadow: var(--card-shadow); @@ -49,7 +50,7 @@ min-width: 0; font-weight: 500; font-size: 1rem; - color: var(--accent-color); + color: var(--theme-caption-color); } &__error { min-width: 0; @@ -83,13 +84,13 @@ display: flex; flex-direction: column; margin: 0 1rem .75rem; - color: var(--caption-color); + color: var(--theme-caption-color); flex-wrap: wrap; &__separator { margin: 1rem 0; height: 1px; - background-color: var(--divider-color); + background-color: var(--theme-divider-color); } } @@ -110,7 +111,7 @@ .antiCard-group { padding: .5rem 1rem; - &:not(:last-child) { border-bottom: 1px solid var(--popup-divider); } + &:not(:last-child) { border-bottom: 1px solid var(--theme-divider-color); } &.grid { display: grid; grid-template-columns: 5rem auto; @@ -124,7 +125,7 @@ font-weight: 500; font-size: .75rem; line-height: .75rem; - color: var(--content-color); + color: var(--theme-content-color); } .value { display: flex; @@ -166,8 +167,8 @@ font-weight: 400; font-size: .8125rem; } - &__divider { color: var(--content-color); } - &__title { color: var(--accent-color); } + &__divider { color: var(--theme-content-color); } + &__title { color: var(--theme-caption-color); } } .antiCard-content { margin: .5rem 1.125rem 1rem; } .antiCard-pool { @@ -185,7 +186,7 @@ align-items: center; padding: .75rem; height: auto; - border-top: 1px solid var(--divider-color); + border-top: 1px solid var(--theme-divider-color); &.reverse { flex-direction: row-reverse; } &__error { diff --git a/packages/theme/styles/global.scss b/packages/theme/styles/global.scss index 1c238733fc..4227c011ed 100644 --- a/packages/theme/styles/global.scss +++ b/packages/theme/styles/global.scss @@ -115,7 +115,7 @@ body { font-weight: 400; font-size: var(--body-font-size); color: var(--content-color); - background-color: var(--body-color); + background-color: var(--theme-bg-color); user-select: none; } diff --git a/packages/theme/styles/panel.scss b/packages/theme/styles/panel.scss index 336b69b9ce..596af402bd 100644 --- a/packages/theme/styles/panel.scss +++ b/packages/theme/styles/panel.scss @@ -68,7 +68,7 @@ &:not(.embedded) { border-radius: .5rem; - box-shadow: var(--popup-panel-shadow); + // box-shadow: var(--popup-panel-shadow); } .popupPanel-title { @@ -87,9 +87,9 @@ &__bordered { min-width: 0; min-height: 3rem; - background-color: var(--board-card-bg-color); + background-color: var(--theme-comp-header-color); &:not(.embedded) { - border: 1px solid var(--divider-color); + border: 1px solid var(--theme-divider-color); border-bottom: none; border-radius: .5rem .5rem 0 0; } @@ -116,8 +116,8 @@ min-height: 0; width: 100%; height: 100%; - background-color: var(--body-color); - border: 1px solid var(--divider-color); + background-color: var(--theme-bg-color); + border: 1px solid var(--theme-divider-color); &:not(.embedded) { border-radius: 0 0 .5rem .5rem; } @@ -184,8 +184,8 @@ min-width: 320px; } - &.bottom-divider { border-bottom: 1px solid var(--divider-color); } - &.top-divider { border-top: 1px solid var(--divider-color); } + &.bottom-divider { border-bottom: 1px solid var(--theme-divider-color); } + &.top-divider { border-top: 1px solid var(--theme-divider-color); } .header-row { display: flex; align-items: center; @@ -214,7 +214,7 @@ bottom: 1rem; left: 0; width: 0; - border-left: 1px solid var(--divider-color); + border-left: 1px solid var(--theme-divider-color); } &.float { @@ -226,8 +226,8 @@ min-width: 0; max-width: 320px; height: 100%; - background-color: var(--board-card-bg-color); - border-left: 1px solid var(--divider-color); + background-color: var(--theme-list-row-color); + border-left: 1px solid var(--theme-divider-color); border-bottom-right-radius: .45rem; box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); transition: box-shadow 150ms ease 0s, transform 150ms cubic-bezier(0.175, 0.885, 0.32, 1.275); diff --git a/packages/theme/styles/popups.scss b/packages/theme/styles/popups.scss index c94433d4ee..b221df628b 100644 --- a/packages/theme/styles/popups.scss +++ b/packages/theme/styles/popups.scss @@ -422,7 +422,8 @@ flex-direction: column; padding: .5rem; min-height: 22rem; - background: var(--popup-bg-color); + background: var(--theme-list-row-color); + border: 1px solid var(--theme-divider-color); border-radius: .5rem; box-shadow: var(--popup-shadow); diff --git a/packages/ui/src/colors.ts b/packages/ui/src/colors.ts index d755b85b8b..fe1a07a043 100644 --- a/packages/ui/src/colors.ts +++ b/packages/ui/src/colors.ts @@ -106,3 +106,58 @@ export function numberToRGB (color: number, alpha?: number): string { return `rgba(${r}, ${g}, ${b}, ${alpha === undefined ? '1' : alpha})` } + +/** + * @public + */ +export function hsvToRGB (h: number, s: number, v: number): { r: number, g: number, b: number, rgb: string } { + let r: number = 0 + let g: number = 0 + let b: number = 0 + const i = Math.floor(h * 6) + const f = h * 6 - i + const p = v * (1 - s) + const q = v * (1 - f * s) + const t = v * (1 - (1 - f) * s) + switch (i % 6) { + case 0: + r = v + g = t + b = p + break + case 1: + r = q + g = v + b = p + break + case 2: + r = p + g = v + b = t + break + case 3: + r = p + g = q + b = v + break + case 4: + r = t + g = p + b = v + break + case 5: + r = v + g = p + b = q + break + } + r = Math.round(r * 255) + g = Math.round(g * 255) + b = Math.round(b * 255) + return { + r, + g, + b, + rgb: '#' + r.toString(16) + g.toString(16) + b.toString(16) + } +} diff --git a/packages/ui/src/components/ActionIcon.svelte b/packages/ui/src/components/ActionIcon.svelte index 5b721c27b3..7b81096557 100644 --- a/packages/ui/src/components/ActionIcon.svelte +++ b/packages/ui/src/components/ActionIcon.svelte @@ -15,6 +15,7 @@ -