diff --git a/packages/presentation/src/components/breadcrumbs/Breadcrumbs.svelte b/packages/presentation/src/components/breadcrumbs/Breadcrumbs.svelte index 08377f5d78..f139f158b7 100644 --- a/packages/presentation/src/components/breadcrumbs/Breadcrumbs.svelte +++ b/packages/presentation/src/components/breadcrumbs/Breadcrumbs.svelte @@ -36,7 +36,7 @@ return { id: i, text: title } } }) - showPopup(SelectPopup, { value: items }, event.currentTarget) + showPopup(SelectPopup, { value: items, componentLink: true }, event.currentTarget) } </script> diff --git a/packages/ui/src/components/SelectPopup.svelte b/packages/ui/src/components/SelectPopup.svelte index 64a031498f..1a60130ca1 100644 --- a/packages/ui/src/components/SelectPopup.svelte +++ b/packages/ui/src/components/SelectPopup.svelte @@ -36,7 +36,8 @@ export let onSelect: ((value: SelectPopupValueType['id'], event?: Event) => void) | undefined = undefined export let showShadow: boolean = true export let embedded: boolean = false - export let loading = false + export let componentLink: boolean = false + export let loading: boolean = false let popupElement: HTMLDivElement | undefined = undefined let search: string = '' @@ -147,7 +148,7 @@ }} disabled={loading} > - <div class="flex-row-center flex-grow pointer-events-none"> + <div class="flex-row-center flex-grow" class:pointer-events-none={!componentLink}> {#if item.component} <div class="flex-grow clear-mins"><svelte:component this={item.component} {...item.props} /></div> {:else} diff --git a/plugins/drive-resources/src/components/DriveHeader.svelte b/plugins/drive-resources/src/components/DriveHeader.svelte deleted file mode 100644 index 203266a000..0000000000 --- a/plugins/drive-resources/src/components/DriveHeader.svelte +++ /dev/null @@ -1,53 +0,0 @@ -<!-- -// Copyright © 2024 Hardcore Engineering Inc. -// -// Licensed under the Eclipse Public License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. You may -// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// -// See the License for the specific language governing permissions and -// limitations under the License. ---> -<script lang="ts"> - import { type Drive } from '@hcengineering/drive' - import { Button, IconDetails, IconMoreH } from '@hcengineering/ui' - import { showMenu } from '@hcengineering/view-resources' - - import DrivePresenter from './DrivePresenter.svelte' - - export let object: Drive - export let asideShown: boolean = false -</script> - -<div class="popupPanel-title"> - <div class="popupPanel-title__content"> - <div class="title"> - <DrivePresenter value={object} shouldShowAvatar={false} disabled noUnderline /> - </div> - </div> - <div class="flex-row-center ml-3 no-print"> - <Button - icon={IconMoreH} - iconProps={{ size: 'medium' }} - kind={'icon'} - on:click={(ev) => { - showMenu(ev, { object }) - }} - /> - <div class="buttons-divider max-h-7 h-7 mx-2 no-print" /> - <Button - focusIndex={10008} - icon={IconDetails} - iconProps={{ size: 'medium', filled: asideShown }} - kind={'icon'} - selected={asideShown} - on:click={() => { - asideShown = !asideShown - }} - /> - </div> -</div> diff --git a/plugins/drive-resources/src/components/DrivePanel.svelte b/plugins/drive-resources/src/components/DrivePanel.svelte index 3ee16e12be..f96ca8ace0 100644 --- a/plugins/drive-resources/src/components/DrivePanel.svelte +++ b/plugins/drive-resources/src/components/DrivePanel.svelte @@ -16,10 +16,10 @@ import { type Ref } from '@hcengineering/core' import drive, { type Drive } from '@hcengineering/drive' import { createQuery } from '@hcengineering/presentation' - import { Separator } from '@hcengineering/ui' - import { DocAttributeBar } from '@hcengineering/view-resources' + import { Panel, Scroller, Button, IconMoreH } from '@hcengineering/ui' + import { DocAttributeBar, showMenu } from '@hcengineering/view-resources' - import DriveHeader from './DriveHeader.svelte' + import DrivePresenter from './DrivePresenter.svelte' import FolderBrowser from './FolderBrowser.svelte' export let _id: Ref<Drive> @@ -32,7 +32,6 @@ } let object: Drive | undefined = undefined - let asideShown = false const query = createQuery() $: query.query(drive.class.Drive, { _id }, (res) => { @@ -41,23 +40,30 @@ </script> {#if object} - <div class="popupPanel panel {kind}" class:embedded> - <DriveHeader {object} bind:asideShown /> - - <div class="popupPanel-body"> - <div class="popupPanel-body__main"> - <FolderBrowser space={object._id} parent={drive.ids.Root} /> + <Panel {embedded} allowClose={false} {kind} selectedAside={false}> + <svelte:fragment slot="title"> + <div class="title"> + <DrivePresenter value={object} shouldShowAvatar={false} disabled noUnderline /> </div> + </svelte:fragment> + <svelte:fragment slot="utils"> + <Button + icon={IconMoreH} + iconProps={{ size: 'medium' }} + kind={'icon'} + on:click={(ev) => { + showMenu(ev, { object }) + }} + /> + <div class="buttons-divider max-h-7 h-7 mx-2 no-print" /> + </svelte:fragment> + <svelte:fragment slot="aside"> + <Scroller> + <DocAttributeBar {object} {readonly} ignoreKeys={[]} /> + <div class="space-divider bottom" /> + </Scroller> + </svelte:fragment> - {#if asideShown} - <Separator name="aside" float={false} index={0} /> - <div class="popupPanel-body__aside no-print" class:shown={asideShown}> - <Separator name={'panel-aside'} float={true} index={0} /> - <div class="antiPanel-wrap__content"> - <DocAttributeBar {object} {readonly} ignoreKeys={[]} /> - </div> - </div> - {/if} - </div> - </div> + <FolderBrowser space={object._id} parent={drive.ids.Root} /> + </Panel> {/if} diff --git a/plugins/drive-resources/src/components/FolderHeader.svelte b/plugins/drive-resources/src/components/FolderHeader.svelte index 14136e8381..c3d44bfe3e 100644 --- a/plugins/drive-resources/src/components/FolderHeader.svelte +++ b/plugins/drive-resources/src/components/FolderHeader.svelte @@ -16,13 +16,11 @@ import { toIdMap, type Doc, type Ref } from '@hcengineering/core' import drive, { type Folder } from '@hcengineering/drive' import { getClient } from '@hcengineering/presentation' - import { Button, IconDetails, IconMoreH } from '@hcengineering/ui' - import { DocsNavigator, showMenu } from '@hcengineering/view-resources' + import { DocsNavigator } from '@hcengineering/view-resources' import FolderPresenter from './FolderPresenter.svelte' export let object: Folder - export let asideShown: boolean = false const client = getClient() @@ -50,32 +48,7 @@ } </script> -<div class="popupPanel-title"> - <div class="popupPanel-title__content"> - <DocsNavigator elements={parents} /> - <div class="title"> - <FolderPresenter value={object} shouldShowAvatar={false} disabled noUnderline /> - </div> - </div> - <div class="flex-row-center ml-3 no-print"> - <Button - icon={IconMoreH} - iconProps={{ size: 'medium' }} - kind={'icon'} - on:click={(ev) => { - showMenu(ev, { object }) - }} - /> - <div class="buttons-divider max-h-7 h-7 mx-2 no-print" /> - <Button - focusIndex={10008} - icon={IconDetails} - iconProps={{ size: 'medium', filled: asideShown }} - kind={'icon'} - selected={asideShown} - on:click={() => { - asideShown = !asideShown - }} - /> - </div> +<DocsNavigator elements={parents} /> +<div class="title"> + <FolderPresenter value={object} shouldShowAvatar={false} disabled noUnderline /> </div> diff --git a/plugins/drive-resources/src/components/FolderPanel.svelte b/plugins/drive-resources/src/components/FolderPanel.svelte index 79182d1e38..45cb80e2b8 100644 --- a/plugins/drive-resources/src/components/FolderPanel.svelte +++ b/plugins/drive-resources/src/components/FolderPanel.svelte @@ -16,8 +16,8 @@ import { type Ref } from '@hcengineering/core' import drive, { type Folder } from '@hcengineering/drive' import { createQuery } from '@hcengineering/presentation' - import { Separator } from '@hcengineering/ui' - import { DocAttributeBar } from '@hcengineering/view-resources' + import { Panel, Button, Scroller, IconMoreH } from '@hcengineering/ui' + import { DocAttributeBar, showMenu } from '@hcengineering/view-resources' import FolderHeader from './FolderHeader.svelte' import FolderBrowser from './FolderBrowser.svelte' @@ -32,7 +32,6 @@ } let object: Folder | undefined = undefined - let asideShown = false const query = createQuery() $: query.query(drive.class.Folder, { _id }, (res) => { @@ -41,23 +40,28 @@ </script> {#if object} - <div class="popupPanel panel {kind}" class:embedded> - <FolderHeader {object} bind:asideShown /> + <Panel {embedded} allowClose={false} {kind} selectedAside={false}> + <svelte:fragment slot="title"> + <FolderHeader {object} /> + </svelte:fragment> + <svelte:fragment slot="utils"> + <Button + icon={IconMoreH} + iconProps={{ size: 'medium' }} + kind={'icon'} + on:click={(ev) => { + showMenu(ev, { object }) + }} + /> + <div class="buttons-divider max-h-7 h-7 mx-2 no-print" /> + </svelte:fragment> + <svelte:fragment slot="aside"> + <Scroller> + <DocAttributeBar {object} {readonly} ignoreKeys={[]} /> + <div class="space-divider bottom" /> + </Scroller> + </svelte:fragment> - <div class="popupPanel-body"> - <div class="popupPanel-body__main"> - <FolderBrowser space={object.space} parent={object._id} {readonly} /> - </div> - - {#if asideShown} - <Separator name="aside" float={false} index={0} /> - <div class="popupPanel-body__aside no-print" class:shown={asideShown}> - <Separator name={'panel-aside'} float={true} index={0} /> - <div class="antiPanel-wrap__content"> - <DocAttributeBar {object} {readonly} ignoreKeys={[]} /> - </div> - </div> - {/if} - </div> - </div> + <FolderBrowser space={object.space} parent={object._id} {readonly} /> + </Panel> {/if}