diff --git a/packages/panel/src/components/Panel.svelte b/packages/panel/src/components/Panel.svelte index 7498f611fb..95faa055ff 100644 --- a/packages/panel/src/components/Panel.svelte +++ b/packages/panel/src/components/Panel.svelte @@ -19,7 +19,14 @@ import activity from '@hcengineering/activity' import { Doc } from '@hcengineering/core' - import { Component, deviceOptionsStore as deviceInfo, Panel, Scroller, resizeObserver } from '@hcengineering/ui' + import { + Component, + deviceOptionsStore as deviceInfo, + Panel, + Scroller, + resizeObserver, + HeaderAdaptive + } from '@hcengineering/ui' import type { ButtonItem } from '@hcengineering/ui' import { getResource } from '@hcengineering/platform' @@ -47,7 +54,7 @@ export let selectedAside: string | boolean = customAside ? customAside[0].id : isAside export let printHeader: boolean = true export let printAside: boolean = false - export let adaptive: 'default' | 'freezeActions' | 'doubleRow' | 'disabled' = 'disabled' + export let adaptive: HeaderAdaptive = 'disabled' export let hideBefore: boolean = false export let hideSearch: boolean = true export let hideActions: boolean = false diff --git a/packages/theme/styles/_layouts.scss b/packages/theme/styles/_layouts.scss index a5542c1bc5..f06a783b65 100644 --- a/packages/theme/styles/_layouts.scss +++ b/packages/theme/styles/_layouts.scss @@ -739,6 +739,7 @@ input.search { .min-h-11 { min-height: 2.75rem; } .min-h-12 { min-height: 3rem; } .min-h-13 { min-height: 3.25rem; } +.min-h-14 { min-height: 3.5rem; } .min-h-16 { min-height: 4rem; } .min-h-30 { min-height: 7.5rem; } .min-h-60 { min-height: 15rem; } diff --git a/packages/theme/styles/components.scss b/packages/theme/styles/components.scss index c597b3678a..142c807643 100644 --- a/packages/theme/styles/components.scss +++ b/packages/theme/styles/components.scss @@ -317,18 +317,14 @@ .hulyHeader-container { display: flex; align-items: center; + padding: 0 var(--spacing-2); width: 100%; min-width: 0; min-height: var(--spacing-6_5); - &:not(.clearPadding) { padding: var(--spacing-1_5) var(--spacing-2); } - &.clearPadding { - padding: 0 var(--spacing-2); - - & > .hulyHeader-row { - padding: 0; - min-height: var(--spacing-6_5); - } + &.clearPadding > .hulyHeader-row { + padding: 0; + min-height: var(--spacing-6_5); } &:not(.hideSeparator) { border-bottom: 1px solid var(--theme-divider-color); // var(--global-surface-02-BorderColor); @@ -390,15 +386,15 @@ min-height: 0; } .hulyHeader-titleGroup { - flex-grow: 1; user-select: text; cursor: auto; - + &.withDescription { flex-direction: column; } &:not(.withDescription) { align-items: center; gap: var(--spacing-0_5); } + &:not(.notGrow) { flex-grow: 1; } } .hulyHeader-buttonsGroup { align-items: center; @@ -428,6 +424,7 @@ color: var(--global-secondary-TextColor); } } + .hulyHeader-spaceFiller { flex: 1 1; } .hulyHotKey-item { margin-right: .625rem; } &.doubleRow { diff --git a/packages/ui/src/components/Header.svelte b/packages/ui/src/components/Header.svelte index aa7989836c..e775c6b949 100644 --- a/packages/ui/src/components/Header.svelte +++ b/packages/ui/src/components/Header.svelte @@ -20,14 +20,15 @@ IconClose, ButtonIcon, deviceOptionsStore as deviceInfo, - resizeObserver + resizeObserver, + HeaderAdaptive } from '..' export let type: 'type-aside' | 'type-popup' | 'type-component' | 'type-panel' = 'type-component' export let allowFullsize: boolean = false export let hideSeparator: boolean = false export let topIndent: boolean = false - export let adaptive: 'default' | 'freezeActions' | 'doubleRow' | 'disabled' = 'default' + export let adaptive: HeaderAdaptive = 'default' export let hideBefore: boolean = false export let hideDescription: boolean = false export let hideSearch: boolean = false @@ -40,7 +41,15 @@ const dispatch = createEventDispatcher() const closeButton: boolean = ['type-popup', 'type-aside'].some((v) => v === type) + let spaceFiller: HTMLElement let doubleRow: boolean = false + let doubleExtra: boolean = false + let extraWidth: number = 0 + let spaceWidth: number = 0 + $: _doubleRow = + adaptive === 'doubleRow' || + (adaptive !== 'disabled' && doubleRow) || + (adaptive === 'autoExtra' && (doubleRow || doubleExtra)) onMount(() => { if (closeButton) window.addEventListener('keydown', _close) @@ -65,13 +74,13 @@ else if (doubleRow && element.clientWidth > 768) doubleRow = false }} class="hulyHeader-container" - class:doubleRow={adaptive === 'doubleRow' || (adaptive !== 'disabled' && doubleRow)} + class:doubleRow={_doubleRow} class:topIndent class:clearPadding={$$slots.description} class:hideSeparator class:no-print={noPrint} > - {#if adaptive === 'doubleRow' || (adaptive !== 'disabled' && doubleRow)} + {#if _doubleRow}
{#if allowFullsize} -
+
{#if $$slots.description && !hideDescription}
@@ -98,7 +112,19 @@ {/if}
- {#if $$slots.actions && !hideActions && (adaptive === 'freezeActions' || adaptive === 'doubleRow')} + + {#if adaptive === 'autoExtra'} +
{ + if (spaceWidth !== element.clientWidth) spaceWidth = element.clientWidth + if (doubleExtra && element.clientWidth > extraWidth + 42) doubleExtra = false + }} + /> + {/if} + + {#if $$slots.actions && !hideActions && (adaptive === 'freezeActions' || adaptive === 'doubleRow' || adaptive === 'autoExtra')}
@@ -116,14 +142,20 @@
{/if} - {#if $$slots.actions && !hideActions && adaptive !== 'freezeActions' && adaptive !== 'doubleRow'} -
- + {#if $$slots.extra && !hideExtra && (adaptive === 'doubleRow' || adaptive === 'autoExtra')} +
{ + if (extraWidth !== element.clientWidth) extraWidth = element.clientWidth + }} + > +
{/if} - {#if $$slots.extra && !hideExtra && adaptive === 'doubleRow'} -
- + {#if $$slots.actions && !hideActions && !(adaptive === 'freezeActions' || adaptive === 'doubleRow' || adaptive === 'autoExtra')} +
+
{/if}
@@ -145,7 +177,12 @@ {/if} -
+
{#if $$slots.description && !hideDescription} @@ -153,12 +190,35 @@ {/if}
+ + {#if adaptive === 'autoExtra'} +
{ + if (spaceWidth !== element.clientWidth) spaceWidth = element.clientWidth + if (!doubleExtra && element.clientWidth <= 16) doubleExtra = true + }} + /> + {/if} + {#if $$slots.search && !hideSearch} {#if $$slots.actions && !hideActions}
{/if} {/if} + {#if $$slots.extra && !hideExtra} +
{ + if (extraWidth !== element.clientWidth) extraWidth = element.clientWidth + }} + > + +
+ {/if} {#if $$slots.actions && !hideActions}
diff --git a/packages/ui/src/components/Panel.svelte b/packages/ui/src/components/Panel.svelte index 3a689c3c4d..f7908b9b5f 100644 --- a/packages/ui/src/components/Panel.svelte +++ b/packages/ui/src/components/Panel.svelte @@ -24,7 +24,8 @@ Scroller, panelSeparators, ButtonItem, - Header + Header, + HeaderAdaptive } from '../../' import IconClose from './icons/Close.svelte' import IconDetails from './icons/Details.svelte' @@ -47,7 +48,7 @@ export let selectedAside: string | boolean = customAside ? customAside[0].id : isAside export let printHeader = true export let printAside = false - export let adaptive: 'default' | 'freezeActions' | 'doubleRow' | 'disabled' = 'default' + export let adaptive: HeaderAdaptive = 'default' export let hideBefore: boolean = false export let hideSearch: boolean = true export let hideActions: boolean = false diff --git a/packages/ui/src/components/TabList.svelte b/packages/ui/src/components/TabList.svelte index b4fc4b08f2..d19d627360 100644 --- a/packages/ui/src/components/TabList.svelte +++ b/packages/ui/src/components/TabList.svelte @@ -104,7 +104,7 @@
{/if} {#if item.label || item.labelIntl} - + {#if item.label} {item.label} {:else if item.labelIntl} diff --git a/packages/ui/src/components/Tabs.svelte b/packages/ui/src/components/Tabs.svelte index 4d5f6b7392..073246de73 100644 --- a/packages/ui/src/components/Tabs.svelte +++ b/packages/ui/src/components/Tabs.svelte @@ -21,7 +21,7 @@ export let selected = 0 export let padding: string | undefined = undefined export let noMargin: boolean = false - export let size: 'small' | 'medium' = 'medium' + export let size: 'small' | 'medium' | 'large' = 'medium' diff --git a/packages/ui/src/components/TabsControl.svelte b/packages/ui/src/components/TabsControl.svelte index 83726bedaa..05724d16aa 100644 --- a/packages/ui/src/components/TabsControl.svelte +++ b/packages/ui/src/components/TabsControl.svelte @@ -20,10 +20,10 @@ export let selected = 0 export let padding: string | undefined = undefined export let noMargin: boolean = false - export let size: 'small' | 'medium' = 'medium' + export let size: 'small' | 'medium' | 'large' = 'medium' -
+
{#each model as tab, i} @@ -69,6 +69,13 @@ height: 3.25rem; } } + &.large { + height: 3.5rem; + + .tab { + height: 3.5rem; + } + } .tab { height: 4.5rem; diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts index 92b88cb4e2..848610f51c 100644 --- a/packages/ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -34,6 +34,7 @@ export type { ButtonKind, ButtonSize, ButtonItem, + HeaderAdaptive, IconSize, TabItem, BreadcrumbItem, diff --git a/packages/ui/src/types.ts b/packages/ui/src/types.ts index 77603f17d8..555e14935f 100644 --- a/packages/ui/src/types.ts +++ b/packages/ui/src/types.ts @@ -190,6 +190,7 @@ export type EditStyle = | 'default-large' | 'ghost-large' | 'modern-ghost-large' +export type HeaderAdaptive = 'default' | 'freezeActions' | 'autoExtra' | 'doubleRow' | 'disabled' export interface ButtonItem { id: string diff --git a/plugins/chunter-resources/src/components/Header.svelte b/plugins/chunter-resources/src/components/Header.svelte index bc258f5980..cba93cc4f1 100644 --- a/plugins/chunter-resources/src/components/Header.svelte +++ b/plugins/chunter-resources/src/components/Header.svelte @@ -22,7 +22,8 @@ IconDetails, Label, SearchInput, - Header + Header, + HeaderAdaptive } from '@hcengineering/ui' import { createEventDispatcher } from 'svelte' import view from '@hcengineering/view' @@ -49,7 +50,7 @@ export let titleKind: 'default' | 'breadcrumbs' = 'default' export let withFilters: boolean = false export let filters: Ref[] = [] - export let adaptive: 'default' | 'freezeActions' | 'doubleRow' | 'disabled' = 'default' + export let adaptive: HeaderAdaptive = 'default' export let hideActions: boolean = false const client = getClient() diff --git a/plugins/controlled-documents-resources/src/components/EditDocPanel.svelte b/plugins/controlled-documents-resources/src/components/EditDocPanel.svelte index e9c79186a3..8d4edeb947 100644 --- a/plugins/controlled-documents-resources/src/components/EditDocPanel.svelte +++ b/plugins/controlled-documents-resources/src/components/EditDocPanel.svelte @@ -278,8 +278,9 @@ allowClose={withClose && !embedded} {embedded} printHeader={false} - adaptive={'doubleRow'} + adaptive={'autoExtra'} overflowExtra + hideSearch on:close on:select={(ev) => rightPanelTabChanged(ev.detail)} > @@ -413,7 +414,7 @@ {#if $editorMode === 'comparing'} {:else} - + {/if} diff --git a/plugins/controlled-documents-resources/src/components/document/right-panel/RightPanelTabHeader.svelte b/plugins/controlled-documents-resources/src/components/document/right-panel/RightPanelTabHeader.svelte index f957e3700c..077b5dfe73 100644 --- a/plugins/controlled-documents-resources/src/components/document/right-panel/RightPanelTabHeader.svelte +++ b/plugins/controlled-documents-resources/src/components/document/right-panel/RightPanelTabHeader.svelte @@ -18,7 +18,7 @@ import { rightPanelTabChanged } from '../../../stores/editors/document' -
+