+
+
{#if subtitle}
{subtitle}
{/if}
-
+
{value.name}
{#if value.archived}
@@ -35,14 +35,3 @@
-
-
diff --git a/packages/theme/styles/_colors.scss b/packages/theme/styles/_colors.scss
index 581a7dc28a..da50558f61 100644
--- a/packages/theme/styles/_colors.scss
+++ b/packages/theme/styles/_colors.scss
@@ -123,6 +123,7 @@
--theme-popup-color: #292938;
--theme-popup-hover: #32323F;
--theme-popup-divider: rgba(255, 255, 255, .1);
+ --theme-popup-header: #3A3A47;
--theme-popup-shadow: 0px 4px 4px rgba(0, 0, 0, 0.1); // Light
--theme-panel-color: #1A1A28;
--theme-calendar-today-color: #fff;
@@ -133,6 +134,7 @@
--theme-calendar-weekend-bgcolor: rgba(242, 153, 74, .05);
--theme-error-color: #eb5757;
+ --theme-warning-color: #f2994a;
--theme-lost-color: #eb5757;
--theme-won-color: #34DB80;
--theme-caret-color: #6e5ed2;
@@ -161,7 +163,6 @@
--accent-color: #d7d8db;
--caption-color: #f7f8f8;
--white-color: #fff;
- --warning-color: #f2994a;
--divider-color: #303236;
--divider-trans-color: rgba(255, 255, 255, .12);
@@ -284,6 +285,7 @@
--theme-popup-color: #FFFFFF;
--theme-popup-hover: #F5F5F5;
--theme-popup-divider: rgba(0, 0, 0, .1);
+ --theme-popup-header: #EBEBEB;
--theme-popup-shadow: 0px 4px 4px rgba(0, 0, 0, 0.1);
--theme-panel-color: #FFFFFF;
--theme-calendar-today-color: #000;
@@ -294,6 +296,7 @@
--theme-calendar-weekend-bgcolor: rgba(242, 153, 74, .1);
--theme-error-color: #eb5757; // Dark
+ --theme-warning-color: #f2994a; // Dark
--theme-lost-color: #eb5757; // Dark
--theme-won-color: #34DB80; // Dark
--theme-caret-color: #6e5ed2;
@@ -322,7 +325,6 @@
--theme-accent-color: rgba(0, 0, 0, .8);
--caption-color: #131416;
--white-color: #fff;
- --warning-color: #f2994a; // Dark
--divider-color: #e0e0e0;
--divider-trans-color: rgba(0, 0, 0, .12);
diff --git a/packages/theme/styles/_layouts.scss b/packages/theme/styles/_layouts.scss
index 0f8beb3dc1..181e11b378 100644
--- a/packages/theme/styles/_layouts.scss
+++ b/packages/theme/styles/_layouts.scss
@@ -268,21 +268,22 @@ input.search {
cursor: pointer;
.icon {
- color: var(--dark-color);
+ color: var(--theme-dark-color);
&.circle {
padding: .25rem;
background-color: var(--avatar-bg-color);
border-radius: 50%;
}
- &:not(.small-gap) { margin-right: .5rem; }
+ &:not(.small-gap, .medium-gap) { margin-right: .5rem; }
&.small-gap { margin-right: .25rem; }
+ &.medium-gap { margin-right: .375rem; }
}
.label {
min-width: 0;
font-weight: 500;
text-align: left;
- color: var(--accent-color);
+ color: var(--theme-content-color);
overflow: hidden;
visibility: visible;
@@ -306,19 +307,19 @@ input.search {
margin-left: .75rem;
}
&:hover {
- .icon { color: var(--caption-color); }
+ .icon { color: var(--theme-caption-color); }
.label {
- color: var(--caption-color);
+ color: var(--theme-caption-color);
&:not(.no-underline) { text-decoration: underline; }
}
.action { visibility: visible; }
}
&.not-selected {
- .label { color: var(--content-color); }
+ .label { color: var(--theme-dark-color); }
&:hover .label,
&:hover .icon {
- color: var(--accent-color);
+ color: var(--theme-content-color);
}
}
}
@@ -721,6 +722,7 @@ a.no-line {
}
.cursor-pointer { cursor: pointer; }
.cursor-default { cursor: default; }
+.cursor-inherit { cursor: inherit; }
.pointer-events-none { pointer-events: none; }
.select-text { user-select: text; }
@@ -844,6 +846,15 @@ a.no-line {
}
/* Backgrounds & Colors */
+.dark-hover-content-color {
+ color: var(--theme-dark-color);
+ &:hover { color: var(--theme-content-color); }
+}
+.content-hover-caption-color {
+ color: var(--theme-content-color);
+ &:hover { color: var(--theme-caption-color); }
+}
+
.background-body-color { background-color: var(--body-color); }
.background-accent-bg-color { background-color: var(--accent-bg-color); }
.background-highlight-select { background-color: var(--highlight-select); }
diff --git a/packages/theme/styles/popups.scss b/packages/theme/styles/popups.scss
index 721dbbcf5a..c3a7b9765d 100644
--- a/packages/theme/styles/popups.scss
+++ b/packages/theme/styles/popups.scss
@@ -117,7 +117,7 @@
.icon {
width: 1rem;
height: 1rem;
- color: var(--theme-caret-color);
+ color: var(--theme-dark-color);
}
.color {
width: .875rem;
@@ -138,20 +138,25 @@
overflow: hidden;
}
.check {
- display: flex;
- align-items: center;
- margin-right: .75rem;
+ flex-shrink: 0;
+ width: 1rem;
+ height: 1rem;
+ margin-right: .375rem;
+ color: var(--theme-caret-color);
}
.check-right { margin: 0 0 0 2rem; }
- &:not(.withList):focus,
+ &:not(.withList, .no-focus):focus,
&:not(.withList):hover {
- color: var(--theme-caption-color);
background-color: var(--theme-popup-hover);
+ }
+ &:not(.withList, .no-focus):focus,
+ &:not(.withList):hover,
+ &.selected,
+ &:hover {
+ color: var(--theme-caption-color);
.icon { color: var(--theme-content-color); }
}
- &.no-focus:not(.withList):focus { background-color: var(--theme-popup-hover); }
- &.no-focus:not(.withList):hover { background-color: var(--theme-popup-hover); }
}
.sticky-wrapper {
display: flex;
@@ -173,13 +178,13 @@
display: flex;
align-items: center;
justify-content: space-between;
- padding: .125rem .25rem;
+ padding: .375rem .25rem;
min-height: 1.5rem;
font-weight: 500;
font-size: .75rem;
text-align: left;
color: var(--theme-content-color);
- background-color: var(--theme-comp-header-color);
+ background-color: var(--theme-popup-header);
cursor: pointer;
.icon {
@@ -193,6 +198,10 @@
&.show + .menu-group { height: auto; }
}
}
+ .whereSelected {
+ height: 2px;
+ background-color: var(--theme-caret-color);
+ }
}
.antiPopup {
@@ -386,14 +395,18 @@
align-items: center;
flex-shrink: 0;
justify-content: flex-start;
- padding: .25rem .75rem;
+ padding: .25rem .5rem;
min-width: 0;
min-height: 2rem;
text-align: left;
color: var(--theme-content-color);
+ outline: none;
cursor: pointer;
- .icon { color: var(--theme-dark-color); }
+ .icon {
+ margin-right: .375rem;
+ color: var(--theme-dark-color);
+ }
&:focus .icon,
&.withHover:hover .icon,
&.withIconHover:hover .icon { color: var(--theme-caption-color); }
@@ -450,6 +463,7 @@
.notifyPopup .content .mention { margin-top: 0 !important; }
.helpAndSupportPopup {
+ height: 100%;
min-height: 100%;
min-width: 20rem;
}
diff --git a/packages/ui/src/components/ActionIcon.svelte b/packages/ui/src/components/ActionIcon.svelte
index 7b81096557..7c71aac9b8 100644
--- a/packages/ui/src/components/ActionIcon.svelte
+++ b/packages/ui/src/components/ActionIcon.svelte
@@ -48,34 +48,33 @@
cursor: pointer;
.icon {
- color: var(--dark-color);
+ color: var(--theme-halfcontent-color);
&.invisible {
opacity: 0;
}
}
&:hover .icon {
- color: var(--accent-color);
+ color: var(--theme-caption-color);
opacity: 1;
}
&:focus-visible {
- 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);
opacity: 1;
}
}
}
.small {
- width: 1.143em;
- height: 1.143em;
+ width: 1rem;
+ height: 1rem;
}
.medium {
- width: 1.429em;
- height: 1.429em;
+ width: 1.25rem;
+ height: 1.25rem;
}
.large {
- width: 1.715em;
- height: 1.715em;
+ width: 1.5rem;
+ height: 1.5rem;
}
diff --git a/packages/ui/src/components/Button.svelte b/packages/ui/src/components/Button.svelte
index ddf0fa1131..06ff95447f 100644
--- a/packages/ui/src/components/Button.svelte
+++ b/packages/ui/src/components/Button.svelte
@@ -234,6 +234,9 @@
border-top-right-radius: 0.25rem;
border-bottom-right-radius: 0.25rem;
}
+ &.sh-filter {
+ border-radius: 0 0 0.5rem 0.5rem;
+ }
&.bs-solid {
border-style: solid;
}
@@ -254,7 +257,12 @@
}
}
&:focus {
- box-shadow: 0 0 0 2px var(--primary-button-focused-border);
+ &:not(.sh-filter) {
+ box-shadow: 0 0 0 2px var(--primary-button-focused-border);
+ }
+ &.sh-filter {
+ border-color: var(--primary-button-focused-border);
+ }
}
&:disabled {
color: var(--theme-dark-color);
diff --git a/packages/ui/src/components/ColorPopup.svelte b/packages/ui/src/components/ColorPopup.svelte
index c863160565..5d5e1093d9 100644
--- a/packages/ui/src/components/ColorPopup.svelte
+++ b/packages/ui/src/components/ColorPopup.svelte
@@ -19,10 +19,13 @@
import { deviceOptionsStore, resizeObserver } from '..'
import { getPlatformColor } from '../colors'
import ListView from './ListView.svelte'
+ import Icon from './Icon.svelte'
+ import IconCheck from './icons/Check.svelte'
export let placeholder: IntlString | undefined = undefined
export let placeholderParam: any | undefined = undefined
export let searchable: boolean = false
+ export let selected: number | string | undefined = undefined
export let value: Array<{ id: number | string; color: number; label: string }>
let search: string = ''
@@ -92,11 +95,16 @@
{@const itemValue = objects[item]}
diff --git a/packages/ui/src/components/DropdownLabelsPopup.svelte b/packages/ui/src/components/DropdownLabelsPopup.svelte
index 65ae814d57..fb14656e1b 100644
--- a/packages/ui/src/components/DropdownLabelsPopup.svelte
+++ b/packages/ui/src/components/DropdownLabelsPopup.svelte
@@ -19,8 +19,9 @@
import { deviceOptionsStore, resizeObserver } from '..'
import plugin from '../plugin'
import type { DropdownTextItem } from '../types'
- import CheckBox from './CheckBox.svelte'
+ import IconCheck from './icons/Check.svelte'
import ListView from './ListView.svelte'
+ import Icon from './Icon.svelte'
export let placeholder: IntlString = plugin.string.SearchDots
export let items: DropdownTextItem[]
@@ -130,10 +131,12 @@
}
}}
>
- {item.label}
- {#if isSelected(selected, item)}
-
- {/if}
+
+ {#if isSelected(selected, item)}
+
+ {/if}
+
+ {item.label}
diff --git a/packages/ui/src/components/EmojiPopup.svelte b/packages/ui/src/components/EmojiPopup.svelte
index 26d53f0d43..09b85f51cd 100644
--- a/packages/ui/src/components/EmojiPopup.svelte
+++ b/packages/ui/src/components/EmojiPopup.svelte
@@ -131,7 +131,7 @@
handleScrollToCategory(category.id)}
>
@@ -140,7 +140,7 @@
{/each}
diff --git a/packages/ui/src/types.ts b/packages/ui/src/types.ts
index 6fb281addd..3e80394129 100644
--- a/packages/ui/src/types.ts
+++ b/packages/ui/src/types.ts
@@ -126,7 +126,7 @@ export type ButtonKind =
| 'list'
| 'list-header'
export type ButtonSize = 'inline' | 'small' | 'medium' | 'large' | 'x-large'
-export type ButtonShape = 'rectangle' | 'rectangle-left' | 'rectangle-right' | 'circle' | 'round' | undefined
+export type ButtonShape = 'rectangle' | 'rectangle-left' | 'rectangle-right' | 'circle' | 'round' | 'filter' | undefined
export type EditStyle = 'editbox' | 'large-style' | 'small-style' | 'search-style' | 'underline'
export interface PopupPositionElement {
getBoundingClientRect: () => DOMRect
diff --git a/plugins/chunter-resources/src/components/Message.svelte b/plugins/chunter-resources/src/components/Message.svelte
index 6522eeadc4..487c281163 100644
--- a/plugins/chunter-resources/src/components/Message.svelte
+++ b/plugins/chunter-resources/src/components/Message.svelte
@@ -299,7 +299,7 @@
diff --git a/plugins/tracker-resources/src/components/ComponentSelector.svelte b/plugins/tracker-resources/src/components/ComponentSelector.svelte
index 3a2836eeeb..677c825b93 100644
--- a/plugins/tracker-resources/src/components/ComponentSelector.svelte
+++ b/plugins/tracker-resources/src/components/ComponentSelector.svelte
@@ -122,16 +122,14 @@
icon={tracker.icon.Components}
disabled={!isEditable}
{loading}
+ notSelected={!value}
{short}
on:click={handleComponentEditorOpened}
- >
-
+ >
+
+
-
+
+
{/if}
diff --git a/plugins/tracker-resources/src/components/CreateIssue.svelte b/plugins/tracker-resources/src/components/CreateIssue.svelte
index 9e3b4b0961..f06d986997 100644
--- a/plugins/tracker-resources/src/components/CreateIssue.svelte
+++ b/plugins/tracker-resources/src/components/CreateIssue.svelte
@@ -561,7 +561,7 @@
kind={'secondary'}
size={'large'}
label={tracker.string.NoIssueTemplate}
- icon={tracker.icon.Issues}
+ icon={tracker.icon.IssueTemplates}
searchField={'title'}
allowDeselect={true}
showNavigate={false}
diff --git a/plugins/tracker-resources/src/components/components/ComponentStatusSelector.svelte b/plugins/tracker-resources/src/components/components/ComponentStatusSelector.svelte
index bad7240481..cf54436f4c 100644
--- a/plugins/tracker-resources/src/components/components/ComponentStatusSelector.svelte
+++ b/plugins/tracker-resources/src/components/components/ComponentStatusSelector.svelte
@@ -41,7 +41,11 @@
: tracker.string.Backlog
: undefined
- $: statusesInfo = defaultComponentStatuses.map((s) => ({ id: s, ...componentStatusAssets[s] }))
+ $: statusesInfo = defaultComponentStatuses.map((s) => ({
+ id: s,
+ isSelected: componentStatusAssets[s].label === selectedStatusLabel,
+ ...componentStatusAssets[s]
+ }))
const handleComponentStatusEditorOpened = (event: MouseEvent) => {
if (!isEditable) {
diff --git a/plugins/tracker-resources/src/components/issues/IssueNotification.svelte b/plugins/tracker-resources/src/components/issues/IssueNotification.svelte
index c0c8626cce..fb5d141adb 100644
--- a/plugins/tracker-resources/src/components/issues/IssueNotification.svelte
+++ b/plugins/tracker-resources/src/components/issues/IssueNotification.svelte
@@ -117,7 +117,7 @@
{params?.subTitlePostfix}
+
diff --git a/plugins/tracker-resources/src/components/issues/PriorityEditor.svelte b/plugins/tracker-resources/src/components/issues/PriorityEditor.svelte
index f9d66343ae..3fd4936913 100644
--- a/plugins/tracker-resources/src/components/issues/PriorityEditor.svelte
+++ b/plugins/tracker-resources/src/components/issues/PriorityEditor.svelte
@@ -42,7 +42,7 @@
const client = getClient()
const dispatch = createEventDispatcher()
- const prioritiesInfo = defaultPriorities.map((p) => ({ id: p, ...issuePriorities[p] }))
+ let selectedPriority: IssuePriority | undefined = value.priority
const handlePriorityEditorOpened = (event: MouseEvent) => {
event.stopPropagation()
@@ -64,12 +64,21 @@
return
}
+ selectedPriority = newPriority
dispatch('change', newPriority)
if ('_class' in value) {
await client.update(value, { priority: newPriority })
}
}
+
+ $: prioritiesInfo = defaultPriorities.map((p) => {
+ return {
+ id: p,
+ isSelected: selectedPriority === p,
+ ...issuePriorities[p]
+ }
+ })
{#if value}
diff --git a/plugins/tracker-resources/src/components/issues/timereport/EstimationStatsPresenter.svelte b/plugins/tracker-resources/src/components/issues/timereport/EstimationStatsPresenter.svelte
index a686fd3ad4..4ff6bc28c1 100644
--- a/plugins/tracker-resources/src/components/issues/timereport/EstimationStatsPresenter.svelte
+++ b/plugins/tracker-resources/src/components/issues/timereport/EstimationStatsPresenter.svelte
@@ -132,7 +132,7 @@
color: var(--theme-error-color) !important;
}
.showWarning {
- color: var(--warning-color) !important;
+ color: var(--theme-warning-color) !important;
}
.romColor {
color: var(--theme-content-color) !important;
diff --git a/plugins/tracker-resources/src/components/sprints/SprintSelector.svelte b/plugins/tracker-resources/src/components/sprints/SprintSelector.svelte
index 6a687c611d..3c698a5d09 100644
--- a/plugins/tracker-resources/src/components/sprints/SprintSelector.svelte
+++ b/plugins/tracker-resources/src/components/sprints/SprintSelector.svelte
@@ -73,19 +73,25 @@
selectedSprint = sprints.find((it) => it._id === newSprintId)
}
- const getSprintInfo = (rawSprints: Sprint[]) => {
+ const getSprintInfo = (rawSprints: Sprint[], sp: Sprint | undefined) => {
return [
- { id: null, icon: tracker.icon.Sprint, label: tracker.string.NoSprint },
+ {
+ id: null,
+ icon: tracker.icon.Sprint,
+ label: tracker.string.NoSprint,
+ isSelected: sp === undefined
+ },
...rawSprints.map((p) => ({
id: p._id,
icon: tracker.icon.Sprint,
text: p.label,
+ isSelected: sp ? p._id === sp._id : false,
category: sprintStatusAssets[p.status]
}))
]
}
- $: sprints = getSprintInfo(rawSprints)
+ $: sprints = getSprintInfo(rawSprints, selectedSprint)
const handleSprintEditorOpened = async (event: MouseEvent): Promise
=> {
event.stopPropagation()
@@ -138,15 +144,12 @@
{showTooltip}
icon={sprintIcon}
disabled={!isEditable}
+ notSelected={!value}
{short}
on:click={handleSprintEditorOpened}
>
-
+
diff --git a/plugins/tracker-resources/src/components/sprints/SprintStatusSelector.svelte b/plugins/tracker-resources/src/components/sprints/SprintStatusSelector.svelte
index 0c12e29822..19ae404c5d 100644
--- a/plugins/tracker-resources/src/components/sprints/SprintStatusSelector.svelte
+++ b/plugins/tracker-resources/src/components/sprints/SprintStatusSelector.svelte
@@ -40,7 +40,11 @@
: tracker.string.Planned
: undefined
- $: statusesInfo = defaultSprintStatuses.map((s) => ({ id: s, ...sprintStatusAssets[s] }))
+ $: statusesInfo = defaultSprintStatuses.map((s) => ({
+ id: s,
+ isSelected: sprintStatusAssets[s].label === selectedStatusLabel,
+ ...sprintStatusAssets[s]
+ }))
const handleSprintStatusEditorOpened = (event: MouseEvent) => {
if (!isEditable) {
diff --git a/plugins/tracker-resources/src/components/templates/EstimationEditor.svelte b/plugins/tracker-resources/src/components/templates/EstimationEditor.svelte
index 45b9f4ec11..4ad8e1013b 100644
--- a/plugins/tracker-resources/src/components/templates/EstimationEditor.svelte
+++ b/plugins/tracker-resources/src/components/templates/EstimationEditor.svelte
@@ -65,6 +65,7 @@
label={tracker.string.TimeSpendValue}
labelParams={{ value: value.estimation }}
icon={tracker.icon.Estimation}
+ notSelected={value.estimation === 0}
{justify}
{width}
{size}
diff --git a/plugins/view-resources/src/components/StringEditor.svelte b/plugins/view-resources/src/components/StringEditor.svelte
index c0ce18722c..4e0bdb7038 100644
--- a/plugins/view-resources/src/components/StringEditor.svelte
+++ b/plugins/view-resources/src/components/StringEditor.svelte
@@ -43,6 +43,7 @@
{size}
{justify}
{width}
+ notSelected={!value}
on:click={(ev) => {
if (!shown && !readonly) {
showPopup(EditBoxPopup, { value }, eventToHTMLElement(ev), (res) => {
@@ -57,9 +58,9 @@
>
{#if value}
- {value}
+ {value}
{:else}
-
+
{/if}
diff --git a/plugins/view-resources/src/components/StringPresenter.svelte b/plugins/view-resources/src/components/StringPresenter.svelte
index 03c96d8066..3275140bbc 100644
--- a/plugins/view-resources/src/components/StringPresenter.svelte
+++ b/plugins/view-resources/src/components/StringPresenter.svelte
@@ -18,6 +18,7 @@
import { LabelAndProps, LinkWrapper, tooltip } from '@hcengineering/ui'
export let value: string | string[] | undefined
+ export let oneLine: boolean = false
$: tooltipParams = getTooltip(value)
@@ -35,7 +36,7 @@
}
-
+
{#if Array.isArray(value)}
{#each value as str, i}
diff --git a/plugins/view-resources/src/components/filter/FilterTypePopup.svelte b/plugins/view-resources/src/components/filter/FilterTypePopup.svelte
index 245a5f9b11..738547c273 100644
--- a/plugins/view-resources/src/components/filter/FilterTypePopup.svelte
+++ b/plugins/view-resources/src/components/filter/FilterTypePopup.svelte
@@ -211,6 +211,8 @@
}
}
}
+
+ const elements: HTMLElement[] = []
-
+
{/if}
{/each}
diff --git a/plugins/view-resources/src/components/filter/ObjectFilter.svelte b/plugins/view-resources/src/components/filter/ObjectFilter.svelte
index 9434ea0bc4..bc0264d12a 100644
--- a/plugins/view-resources/src/components/filter/ObjectFilter.svelte
+++ b/plugins/view-resources/src/components/filter/ObjectFilter.svelte
@@ -19,7 +19,8 @@
import ui, {
addNotification,
Button,
- CheckBox,
+ Icon,
+ IconCheck,
deviceOptionsStore,
Label,
Loading,
@@ -189,12 +190,14 @@
}}
>
-
+
-
+ {#if isSelected(value, filter.value)}
+
+ {/if}
{#if value}
-
+
{:else}
{/if}
@@ -214,7 +217,7 @@
{/each}
+
{:else}
-
+
{@const action = actions[item]}
@@ -220,7 +221,7 @@
display: flex;
justify-content: flex-end;
align-items: flex-end;
- margin: 0 1rem;
+ margin: 0 0.5rem 0.5rem;
padding-top: 0.625rem;
}
.key-box {