From b2edbadf054fc1f52ca118c983baa0da2f798b2a Mon Sep 17 00:00:00 2001 From: Alexander Platov Date: Tue, 11 Jul 2023 13:27:49 +0300 Subject: [PATCH] TSK-336: mobile UI adaptation (#3492) Signed-off-by: Alexander Platov --- .../src/components/ReferenceInput.svelte | 10 +- .../src/components/StyledTextEditor.svelte | 15 +-- packages/theme/styles/_layouts.scss | 2 +- packages/theme/styles/button.scss | 9 +- packages/ui/src/components/Button.svelte | 19 ++- .../src/components/DropdownLabelsIntl.svelte | 5 +- .../components/DropdownLabelsPopupIntl.svelte | 2 +- .../ui/src/components/ModeSelector.svelte | 1 + packages/ui/src/components/Panel.svelte | 16 ++- packages/ui/src/components/TabList.svelte | 111 +++++++++++------- .../ui/src/components/internal/Root.svelte | 3 +- packages/ui/src/types.ts | 3 + packages/ui/src/utils.ts | 10 +- .../src/components/AssignedTasks.svelte | 2 +- .../components/issues/edit/EditIssue.svelte | 8 +- .../src/components/ViewOptionsButton.svelte | 1 + .../components/ViewletSettingButton.svelte | 1 + .../src/components/list/ListItem.svelte | 38 ++++-- 18 files changed, 167 insertions(+), 89 deletions(-) diff --git a/packages/text-editor/src/components/ReferenceInput.svelte b/packages/text-editor/src/components/ReferenceInput.svelte index c745bfefb6..dfacb1d929 100644 --- a/packages/text-editor/src/components/ReferenceInput.svelte +++ b/packages/text-editor/src/components/ReferenceInput.svelte @@ -25,7 +25,9 @@ handler, registerFocus, showPopup, - tooltip + tooltip, + deviceOptionsStore as deviceInfo, + checkAdaptiveMatching } from '@hcengineering/ui' import { createEventDispatcher } from 'svelte' import { Completion } from '../Completion' @@ -73,6 +75,8 @@ let isEmpty = true $: setContent(content) + $: devSize = $deviceInfo.size + $: shrinkButtons = checkAdaptiveMatching(devSize, 'sm') function setContent (content: string) { textEditor?.setContent(content) @@ -379,7 +383,7 @@ {/if}
-
+
{#each actions as a}
{#if extraActions && extraActions.length > 0} -
+
{#each extraActions as a}
p === kind) + $: devSize = $deviceInfo.size + $: adaptive = adaptiveShrink !== null ? checkAdaptiveMatching(devSize, adaptiveShrink) : false + onMount(() => { if (focus && input) { input.focus() @@ -102,7 +115,7 @@ use:tooltip={showTooltip} bind:this={input} class="antiButton {kind} {size} jf-{justify} sh-{shape ?? 'no-shape'} bs-{borderStyle}" - class:only-icon={iconOnly} + class:only-icon={iconOnly || adaptive} class:no-focus={noFocus} class:accent class:highlight @@ -138,7 +151,7 @@
{/if} - {#if label} + {#if label && !adaptive} diff --git a/packages/ui/src/components/DropdownLabelsIntl.svelte b/packages/ui/src/components/DropdownLabelsIntl.svelte index 24a6b7ff40..3165488310 100644 --- a/packages/ui/src/components/DropdownLabelsIntl.svelte +++ b/packages/ui/src/components/DropdownLabelsIntl.svelte @@ -27,10 +27,11 @@ export let icon: Asset | AnySvelteComponent | undefined = undefined export let label: IntlString = ui.string.DropdownDefaultLabel + export let params: Record = {} export let items: DropdownIntlItem[] export let selected: DropdownIntlItem['id'] | undefined = undefined export let disabled: boolean = false - export let kind: ButtonKind = 'no-border' + export let kind: ButtonKind = 'regular' export let size: ButtonSize = 'small' export let justify: 'left' | 'center' = 'center' export let width: string | undefined = undefined @@ -86,7 +87,7 @@ on:click={openPopup} > - diff --git a/packages/ui/src/components/DropdownLabelsPopupIntl.svelte b/packages/ui/src/components/DropdownLabelsPopupIntl.svelte index 84d69f0257..7fa57832bf 100644 --- a/packages/ui/src/components/DropdownLabelsPopupIntl.svelte +++ b/packages/ui/src/components/DropdownLabelsPopupIntl.svelte @@ -50,7 +50,7 @@ dispatch('close', item.id) }} > -
+
{#if item.id === selected}{/if}
diff --git a/packages/ui/src/components/ModeSelector.svelte b/packages/ui/src/components/ModeSelector.svelte index bcf10dc4cf..5ef71abdfe 100644 --- a/packages/ui/src/components/ModeSelector.svelte +++ b/packages/ui/src/components/ModeSelector.svelte @@ -19,6 +19,7 @@ items={modeList} selected={props.mode} kind={'separated'} + adaptiveShrink={'sm'} on:select={(result) => { if (result.detail !== undefined && result.detail.action) result.detail.action() }} diff --git a/packages/ui/src/components/Panel.svelte b/packages/ui/src/components/Panel.svelte index 166ad3c033..1bf3393cba 100644 --- a/packages/ui/src/components/Panel.svelte +++ b/packages/ui/src/components/Panel.svelte @@ -14,7 +14,7 @@ --> {#if items.length > 0} -
- {#each items as item, i} - -
{ - if (multiselect) { - if (Array.isArray(selected)) { - if (selected.includes(item.id)) selected = selected.filter((it) => it !== item.id) - else selected.push(item.id) - } - } else selected = item.id - dispatch('select', item) - items = items - }} - > - {#if item.icon} -
- -
- {:else if item.color} -
- {/if} - {#if item.label || item.labelIntl} - - {#if item.label} - {item.label} - {:else if item.labelIntl} - - {/if} -
- {/each} -
+ {#if adaptive} + { + const item = items.filter((it) => it.id === e.detail)[0] + if (Array.isArray(selected)) selected[0] = item.id + else selected = item.id + dispatch('select', item) + }} + /> + {:else} +
+ {#each items as item, i} + +
{ + if (multiselect) { + if (Array.isArray(selected)) { + if (selected.includes(item.id)) selected = selected.filter((it) => it !== item.id) + else selected.push(item.id) + } + } else selected = item.id + dispatch('select', item) + items = items + }} + > + {#if item.icon} +
+ +
+ {:else if item.color} +
+ {/if} + {#if item.label || item.labelIntl} + + {#if item.label} + {item.label} + {:else if item.labelIntl} + + {/if} +
+ {/each} +
+ {/if} {/if}