diff --git a/packages/presentation/lang/en.json b/packages/presentation/lang/en.json index 550a0d93b3..48dbcb2140 100644 --- a/packages/presentation/lang/en.json +++ b/packages/presentation/lang/en.json @@ -22,6 +22,7 @@ "NoMatchesInThis": "No matches in this {space}", "NoMatchesFound": "No matches found", "NotInThis": "Not in this {space}", + "Match": "Match", "Add": "Add", "Edit": "Edit", "DocumentPreview": "Preview", diff --git a/packages/presentation/lang/ru.json b/packages/presentation/lang/ru.json index ab991496ce..1c72ee82b7 100644 --- a/packages/presentation/lang/ru.json +++ b/packages/presentation/lang/ru.json @@ -22,6 +22,7 @@ "NoMatchesInThis": "В этом {space} совпадения не обнаружены", "NoMatchesFound": "Не найдено соответствий", "NotInThis": "Не в этом {space}", + "Match": "Совпадение", "Add": "Добавить", "Edit": "Редактировать", "DocumentPreview": "Предпросмотр", diff --git a/packages/presentation/src/plugin.ts b/packages/presentation/src/plugin.ts index 7ddf92fb7f..3d4f0b1067 100644 --- a/packages/presentation/src/plugin.ts +++ b/packages/presentation/src/plugin.ts @@ -62,6 +62,7 @@ export default plugin(presentationId, { NoMatchesInThis: '' as IntlString, NoMatchesFound: '' as IntlString, NotInThis: '' as IntlString, + Match: '' as IntlString, Add: '' as IntlString, Edit: '' as IntlString, DocumentPreview: '' as IntlString, diff --git a/packages/theme/styles/_layouts.scss b/packages/theme/styles/_layouts.scss index 2a68549229..97942a37fd 100644 --- a/packages/theme/styles/_layouts.scss +++ b/packages/theme/styles/_layouts.scss @@ -968,6 +968,9 @@ a.no-line { .content-color { color: var(--theme-content-color); } .caption-color { color: var(--theme-caption-color); } +.secondary-textColor { color: var(--global-secondary-TextColor) !important; } +.tertiary-textColor { color: var(--global-tertiary-TextColor) !important; } + .content-primary-color { color: var(--primary-button-color); } .red-color { color: var(--highlight-red); } .error-color { color: var(--theme-error-color); } diff --git a/packages/theme/styles/_lumia-colors.scss b/packages/theme/styles/_lumia-colors.scss index e95bff0860..a39c2340e7 100644 --- a/packages/theme/styles/_lumia-colors.scss +++ b/packages/theme/styles/_lumia-colors.scss @@ -48,6 +48,7 @@ --global-accent-TextColor: #4D7FF5; --global-focus-BorderColor: #2A59D6; --global-popover-ShadowColor: #0E131E59; + --global-modal-ShadowColor: #0E131E73; /** Buttons **/ --button-subtle-LabelColor: #fff; @@ -102,6 +103,7 @@ --global-accent-TextColor: #3566E2; --global-focus-BorderColor: #204DC8; --global-popover-ShadowColor: #0E131E1F; + --global-modal-ShadowColor: #0E131E14; /** Buttons **/ --button-subtle-LabelColor: #000; diff --git a/packages/theme/styles/_vars.scss b/packages/theme/styles/_vars.scss index a48d1f169f..d621e265a6 100644 --- a/packages/theme/styles/_vars.scss +++ b/packages/theme/styles/_vars.scss @@ -20,6 +20,7 @@ --spacing-0_5: 0.25rem; --spacing-0_75: 0.375rem; --spacing-1: 0.5rem; + --spacing-1_25: 0.625rem; --spacing-1_5: 0.75rem; --spacing-1_75: 0.875rem; --spacing-2: 1rem; @@ -63,4 +64,8 @@ --global-popover-ShadowSpread: 0; --global-popover-ShadowX: 0; --global-popover-ShadowY: 0.5rem; + --global-modal-ShadowBlur: 1.5rem; + --global-modal-ShadowSpread: 0.25rem; + --global-modal-ShadowX: 0; + --global-modal-ShadowY: 1.5rem; } diff --git a/packages/theme/styles/components.scss b/packages/theme/styles/components.scss index 5efd187f30..178a34c45c 100644 --- a/packages/theme/styles/components.scss +++ b/packages/theme/styles/components.scss @@ -173,7 +173,6 @@ border-top: 1px solid transparent; .hulyModal-content { - padding: var(--spacing-2) var(--spacing-1_5); height: 100%; &__titleGroup { @@ -222,14 +221,35 @@ flex-direction: row-reverse; flex-shrink: 0; gap: var(--spacing-1); - padding: var(--spacing-2) var(--spacing-2_5); border-top: 1px solid var(--theme-divider-color); // var(--global-surface-01-BorderColor); } - &.type-aside .hulyHeader-container { - border-radius: 0 var(--small-focus-BorderRadius) 0 0; + &.type-aside { + .hulyHeader-container { + border-radius: 0 var(--small-focus-BorderRadius) 0 0; - .hulyHeader-titleGroup { + .hulyHeader-buttonsGroup { + gap: var(--spacing-0_5); + } + } + .hulyModal-footer { + padding: var(--spacing-2) var(--spacing-2_5); + } + } + &.type-popup { + min-width: 45rem; + background-color: var(--theme-popup-color); // var(--global-surface-02-BackgroundColor); + border: 1px solid var(--theme-popup-divider); // var(--global-surface-02-BorderColor); + border-radius: var(--large-BorderRadius); + box-shadow: var(--global-modal-ShadowX) var(--global-modal-ShadowY) var(--global-modal-ShadowBlur) var(--global-modal-ShadowSpread) var(--global-popover-ShadowColor); + + .hulyModal-footer { + padding: var(--spacing-1_5); + } + } + &.type-aside, + &.type-popup { + .hulyHeader-container .hulyHeader-titleGroup { text-transform: uppercase; font-family: var(--font-family); font-weight: 500; @@ -238,9 +258,6 @@ line-height: 1rem; color: var(--global-secondary-TextColor); } - .hulyHeader-buttonsGroup { - gap: var(--spacing-0_5); - } } textarea { font-weight: 400 !important; @@ -255,6 +272,10 @@ color: var(--global-tertiary-TextColor); background-color: var(--global-ui-BackgroundColor); border-radius: var(--extra-small-BorderRadius); + + &.error { + color: var(--button-negative-loading-LabelColor); + } } .hulyHotKey-item { diff --git a/packages/theme/styles/popups.scss b/packages/theme/styles/popups.scss index 2c9ba246d6..34cce0f224 100644 --- a/packages/theme/styles/popups.scss +++ b/packages/theme/styles/popups.scss @@ -64,8 +64,12 @@ &:not(.small) { font-size: .875rem; } &.small { font-size: .75rem; } - &:not(.dark) { color: var(--global-on-accent-TextColor); } - &.dark { color: var(--global-secondary-TextColor); } + &:not(.dark) { + color: var(--global-primary-TextColor); // var(--global-on-accent-TextColor); + } + &.dark { + color: var(--theme-dark-color); // var(--global-secondary-TextColor); + } } &:hover { diff --git a/packages/theme/styles/tables.scss b/packages/theme/styles/tables.scss index 37a3f1156b..a78349fc25 100644 --- a/packages/theme/styles/tables.scss +++ b/packages/theme/styles/tables.scss @@ -41,6 +41,13 @@ width: var(--global-min-Size); height: var(--global-min-Size); } + .buttons-group { + display: flex; + align-items: center; + gap: var(--spacing-1); + min-width: 0; + min-height: 0; + } } .hulyTableAttr-content { display: flex; @@ -108,6 +115,10 @@ border-radius: var(--extra-small-BorderRadius); border: none; outline: none; + + &.drag { + cursor: grab !important; + } } &-icon { width: var(--global-min-Size); @@ -173,10 +184,11 @@ color: var(--global-primary-LinkColor); } } + &.options .hulyTableAttr-content__row, &.class .hulyTableAttr-content__row, &.task .hulyTableAttr-content__row { &.hovered, - &:hover { + &:not(.disableMouseOver):hover { background-color: var(--theme-table-header-color); // var(--global-surface-03-hover-BackgroundColor); } &.selected { @@ -195,6 +207,7 @@ } } } + &.options, &.class { padding: var(--spacing-1); @@ -203,12 +216,31 @@ padding: var(--spacing-1) var(--spacing-2) var(--spacing-1) var(--spacing-1); &.hovered .hulyTableAttr-content__row-arrow, - &:hover .hulyTableAttr-content__row-arrow, + &:not(.disableMouseOver):hover .hulyTableAttr-content__row-arrow, &.selected .hulyTableAttr-content__row-arrow { display: block; } } } + &.options .hulyTableAttr-content__row { + padding: var(--spacing-1); + min-height: var(--global-large-Size); + + &:not(.hovered) button.type-button-icon { + display: none; + } + &.disableMouseOver, + &-dragMenu { + cursor: default; + } + label.editbox-wrapper { + padding: 0 !important; + height: var(--global-extra-small-Size) !important; + } + &:hover button.type-button-icon { + display: inline-flex; + } + } &.task { .hulyTableAttr-content__row { gap: var(--spacing-1); diff --git a/packages/ui/src/components/ButtonBase.svelte b/packages/ui/src/components/ButtonBase.svelte index 3c69133620..e11404c931 100644 --- a/packages/ui/src/components/ButtonBase.svelte +++ b/packages/ui/src/components/ButtonBase.svelte @@ -14,7 +14,8 @@ --> @@ -44,6 +46,7 @@ class:inheritColor class:menu={hasMenu} disabled={loading || disabled} + use:tp={tooltip} on:click > {#if loading} @@ -299,6 +302,9 @@ } } } + & > * { + pointer-events: none; + } } @keyframes rotate { diff --git a/packages/ui/src/components/ButtonIcon.svelte b/packages/ui/src/components/ButtonIcon.svelte index c3d58f93f7..645b8b0a9a 100644 --- a/packages/ui/src/components/ButtonIcon.svelte +++ b/packages/ui/src/components/ButtonIcon.svelte @@ -14,7 +14,7 @@ --> diff --git a/packages/ui/src/components/Header.svelte b/packages/ui/src/components/Header.svelte index 3784369bca..57b199ae68 100644 --- a/packages/ui/src/components/Header.svelte +++ b/packages/ui/src/components/Header.svelte @@ -16,7 +16,7 @@ import { createEventDispatcher } from 'svelte' import { IconMaximize, IconMinimize, IconClose, ButtonIcon } from '..' - export let type: 'type-aside' | 'type-component' = 'type-component' + export let type: 'type-aside' | 'type-popup' | 'type-component' = 'type-component' export let minimize: boolean = false const dispatch = createEventDispatcher() @@ -41,8 +41,8 @@ {/if} - {#if type === 'type-aside'} -
+ {#if type !== 'type-component'} + {#if type !== 'type-popup'}
{/if}
Esc
dispatch('close')} /> {/if} diff --git a/packages/ui/src/components/Modal.svelte b/packages/ui/src/components/Modal.svelte index 27ed015cad..a210522dfd 100644 --- a/packages/ui/src/components/Modal.svelte +++ b/packages/ui/src/components/Modal.svelte @@ -20,11 +20,9 @@ import ButtonIcon from './ButtonIcon.svelte' import ButtonBase from './ButtonBase.svelte' import Scroller from './Scroller.svelte' - import IconDelete from './icons/Delete.svelte' - import IconCopy from './icons/Copy.svelte' import ui from '..' - export let type: 'type-aside' | 'type-component' + export let type: 'type-aside' | 'type-popup' | 'type-component' export let label: IntlString export let labelProps: any | undefined = undefined export let okAction: () => Promise | void @@ -49,26 +47,42 @@
- +
- {#if type === 'type-aside'} + {#if type !== 'type-component'} {/if}
diff --git a/packages/ui/src/components/ModernEditbox.svelte b/packages/ui/src/components/ModernEditbox.svelte index 8ac11d3a34..55b7230d34 100644 --- a/packages/ui/src/components/ModernEditbox.svelte +++ b/packages/ui/src/components/ModernEditbox.svelte @@ -4,7 +4,7 @@ // Licensed under the Eclipse Public License v2.0 (SPDX: EPL-2.0). // - import { createEventDispatcher } from 'svelte' + import { createEventDispatcher, onMount } from 'svelte' import { IntlString, translate } from '@hcengineering/platform' import Label from './Label.svelte' import { themeStore } from '..' @@ -17,6 +17,9 @@ export let error: boolean = false export let password: boolean = false export let limit: number = 0 + export let element: HTMLInputElement | undefined = undefined + export let autoFocus: boolean = false + export let width: string = '' const dispatch = createEventDispatcher() @@ -28,14 +31,23 @@ }) $: labeled = kind === 'default' && size === 'large' $: placeholder = labeled ? ' ' : placeholderStr + + onMount(() => { + if (autoFocus && element) { + autoFocus = false + element.focus() + } + })