@vc-shell/framework 1.1.0-alpha.3 → 1.1.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/composables/index.ts +18 -17
- package/core/composables/useDashboard/index.ts +19 -0
- package/core/composables/{useGlobalSearch.ts → useGlobalSearch/index.ts} +3 -5
- package/core/composables/useWidgets/index.ts +19 -18
- package/core/plugins/modularity/loader.ts +2 -1
- package/core/services/dashboard-service.ts +121 -0
- package/core/services/widget-service.ts +1 -4
- package/dist/core/composables/index.d.ts +1 -0
- package/dist/core/composables/index.d.ts.map +1 -1
- package/dist/core/composables/useDashboard/index.d.ts +5 -0
- package/dist/core/composables/useDashboard/index.d.ts.map +1 -0
- package/dist/core/composables/{useGlobalSearch.d.ts → useGlobalSearch/index.d.ts} +1 -1
- package/dist/core/composables/useGlobalSearch/index.d.ts.map +1 -0
- package/dist/core/plugins/modularity/loader.d.ts.map +1 -1
- package/dist/core/services/dashboard-service.d.ts +33 -0
- package/dist/core/services/dashboard-service.d.ts.map +1 -0
- package/dist/core/services/widget-service.d.ts.map +1 -1
- package/dist/framework.js +235 -225
- package/dist/{index-Bu12RZTu.js → index-8LELHzw9.js} +1 -1
- package/dist/{index-Bwl2ND2Q.js → index-9lJxZE5w.js} +1 -1
- package/dist/{index-CJi-BbTb.js → index-B1YR_MYV.js} +1 -1
- package/dist/{index-BhdwVgUw.js → index-BA98L1jI.js} +1 -1
- package/dist/{index-NdrUF1u3.js → index-BAeTsi-X.js} +1 -1
- package/dist/{index-CbRqPQTw.js → index-BBYyHeYA.js} +1 -1
- package/dist/{index-CsaYfhir.js → index-BrUitdDo.js} +1 -1
- package/dist/{index-CZ_pj3nW.js → index-BuO5ByG9.js} +1 -1
- package/dist/{index-DFPb-jDP.js → index-CJ5I7vTn.js} +1 -1
- package/dist/{index-BdoAu2fz.js → index-CWKrD2Cd.js} +1 -1
- package/dist/{index-DVaMW7gL.js → index-Cf9Tz1ql.js} +1 -1
- package/dist/{index-B89uIUkS.js → index-CrxFDC2b.js} +1 -1
- package/dist/{index-BcQiBkO6.js → index-D1JchciU.js} +1 -1
- package/dist/{index-CEvuTGIu.js → index-DLtsQ_PJ.js} +31254 -31134
- package/dist/{index-COjjAS6v.js → index-DVljTjbf.js} +1 -1
- package/dist/{index-DjQ6Ffv8.js → index-RwX3kiZh.js} +28 -28
- package/dist/{index-S9Ht7s3i.js → index-xLYzNPa7.js} +1 -1
- package/dist/index.css +1 -1
- package/dist/injection-keys.d.ts +28 -0
- package/dist/injection-keys.d.ts.map +1 -1
- package/dist/shared/components/dashboard-widget-card/dashboard-widget-card.vue.d.ts +25 -0
- package/dist/shared/components/dashboard-widget-card/dashboard-widget-card.vue.d.ts.map +1 -0
- package/dist/shared/components/dashboard-widget-card/index.d.ts +2 -0
- package/dist/shared/components/dashboard-widget-card/index.d.ts.map +1 -0
- package/dist/shared/components/draggable-dashboard/DraggableDashboard.vue.d.ts +6 -0
- package/dist/shared/components/draggable-dashboard/DraggableDashboard.vue.d.ts.map +1 -0
- package/dist/shared/components/draggable-dashboard/_internal/DashboardWidget.vue.d.ts +20 -0
- package/dist/shared/components/draggable-dashboard/_internal/DashboardWidget.vue.d.ts.map +1 -0
- package/dist/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.d.ts +354 -0
- package/dist/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.d.ts.map +1 -0
- package/dist/shared/components/draggable-dashboard/composables/useDashboardGrid.d.ts +12 -0
- package/dist/shared/components/draggable-dashboard/composables/useDashboardGrid.d.ts.map +1 -0
- package/dist/shared/components/draggable-dashboard/index.d.ts +2 -0
- package/dist/shared/components/draggable-dashboard/index.d.ts.map +1 -0
- package/dist/shared/components/draggable-dashboard/types.d.ts +80 -0
- package/dist/shared/components/draggable-dashboard/types.d.ts.map +1 -0
- package/dist/shared/components/index.d.ts +2 -0
- package/dist/shared/components/index.d.ts.map +1 -1
- package/dist/shared/components/user-dropdown-button/_internal/user-info.vue.d.ts.map +1 -1
- package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts.map +1 -1
- package/dist/shared/composables/useMenuExpanded.d.ts +2 -0
- package/dist/shared/composables/useMenuExpanded.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts +0 -41
- package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/common/templates.d.ts +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/common/templates.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts +2 -25
- package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts.map +1 -1
- package/dist/tailwind.config.d.ts +1 -81
- package/dist/tailwind.config.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/ui/components/atoms/vc-button/vc-button.stories.d.ts +169 -734
- package/dist/ui/components/atoms/vc-button/vc-button.stories.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts +18 -2
- package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-card/index.d.ts +2 -0
- package/dist/ui/components/atoms/vc-card/index.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts +12 -0
- package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts +2 -0
- package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue.d.ts +18 -0
- package/dist/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue.d.ts.map +1 -0
- package/dist/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue.d.ts +18 -0
- package/dist/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue.d.ts.map +1 -0
- package/dist/ui/components/atoms/vc-icon/icons/index.d.ts +2 -0
- package/dist/ui/components/atoms/vc-icon/icons/index.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.d.ts +2 -0
- package/dist/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts +0 -1
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue.d.ts +2 -1
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/vc-app.stories.d.ts +13 -67
- package/dist/ui/components/organisms/vc-app/vc-app.stories.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts +5 -65
- package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/{vc-table-header/vc-table-header.vue.d.ts → vc-table-columns-header/vc-table-columns-header.vue.d.ts} +1 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-columns-header/vc-table-columns-header.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-header/vc-table-header.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue.d.ts +33 -3
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableRowReorder.d.ts.map +1 -1
- package/package.json +10 -5
- package/shared/components/dashboard-widget-card/dashboard-widget-card.vue +67 -0
- package/shared/components/dashboard-widget-card/index.ts +1 -0
- package/shared/components/draggable-dashboard/DraggableDashboard.vue +369 -0
- package/shared/components/draggable-dashboard/_internal/DashboardWidget.vue +133 -0
- package/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.ts +547 -0
- package/shared/components/draggable-dashboard/composables/useDashboardGrid.ts +250 -0
- package/shared/components/draggable-dashboard/index.ts +1 -0
- package/shared/components/draggable-dashboard/types.ts +91 -0
- package/shared/components/index.ts +2 -0
- package/shared/components/user-dropdown-button/_internal/user-info.vue +25 -12
- package/shared/components/user-dropdown-button/user-dropdown-button.vue +3 -3
- package/shared/composables/useMenuExpanded.ts +24 -0
- package/shared/modules/assets/components/assets-details/assets-details.vue +1 -1
- package/shared/modules/dynamic/components/fields/storybook/Button.stories.ts +186 -247
- package/shared/modules/dynamic/components/fields/storybook/Card.stories.ts +175 -176
- package/shared/modules/dynamic/components/fields/storybook/common/templates.ts +8 -8
- package/shared/modules/dynamic/pages/dynamic-blade-list.vue +153 -187
- package/tailwind.config.ts +127 -126
- package/ui/components/atoms/vc-button/vc-button.stories.ts +1 -16
- package/ui/components/atoms/vc-button/vc-button.vue +74 -63
- package/ui/components/atoms/vc-card/vc-card.stories.ts +102 -102
- package/ui/components/atoms/vc-card/vc-card.vue +164 -159
- package/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue +22 -0
- package/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue +16 -0
- package/ui/components/atoms/vc-icon/icons/index.ts +2 -0
- package/ui/components/molecules/vc-field/vc-field.vue +1 -1
- package/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.ts +12 -1
- package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarContent.vue +1 -2
- package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarHeader.vue +1 -1
- package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarOverlay.vue +0 -1
- package/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue +274 -112
- package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue +81 -37
- package/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue +7 -5
- package/ui/components/organisms/vc-app/vc-app.vue +26 -15
- package/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue +5 -7
- package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/{vc-table-header/vc-table-header.vue → vc-table-columns-header/vc-table-columns-header.vue} +23 -21
- package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-row/vc-table-row.vue +1 -0
- package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/vc-table-desktop-view.vue +1 -1
- package/ui/components/organisms/vc-table/_internal/vc-table-header/vc-table-header.vue +12 -1
- package/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue +45 -2
- package/ui/components/organisms/vc-table/composables/useTableColumnReorder.ts +5 -5
- package/ui/components/organisms/vc-table/composables/useTableColumnResize.ts +1 -1
- package/ui/components/organisms/vc-table/composables/useTableRowReorder.ts +1 -0
- package/core/services/toolbarbus-service.ts +0 -34
- package/dist/core/composables/useGlobalSearch.d.ts.map +0 -1
- package/dist/core/services/toolbarbus-service.d.ts +0 -10
- package/dist/core/services/toolbarbus-service.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-app/composables/useToolbarSlots.d.ts +0 -5
- package/dist/ui/components/organisms/vc-app/composables/useToolbarSlots.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-header/vc-table-header.vue.d.ts.map +0 -1
- package/ui/components/organisms/vc-app/composables/useToolbarSlots.ts +0 -37
|
@@ -1,100 +1,131 @@
|
|
|
1
1
|
<template>
|
|
2
|
+
<div
|
|
3
|
+
v-if="$isDesktop.value"
|
|
4
|
+
class="vc-app-bar--padding"
|
|
5
|
+
:class="{
|
|
6
|
+
'vc-app-bar--padding-expanded': state.isSidebarExpanded,
|
|
7
|
+
}"
|
|
8
|
+
></div>
|
|
2
9
|
<div
|
|
3
10
|
class="vc-app-bar"
|
|
4
11
|
:class="{
|
|
5
12
|
'vc-app-bar--mobile': $isMobile.value,
|
|
6
|
-
'vc-app-bar--
|
|
13
|
+
'vc-app-bar--desktop': $isDesktop.value,
|
|
14
|
+
'vc-app-bar--collapsed': !state.isSidebarExpanded && $isDesktop.value,
|
|
15
|
+
'vc-app-bar--hover-expanded': $isDesktop.value && isHoverExpanded,
|
|
16
|
+
'vc-app-bar--hover-collapsed': $isDesktop.value && !state.isSidebarExpanded && !isHoverExpanded,
|
|
7
17
|
}"
|
|
18
|
+
@mouseenter="$isDesktop.value && !state.isSidebarExpanded && handleHoverExpand(true)"
|
|
19
|
+
@mouseleave="$isDesktop.value && !state.isSidebarExpanded && handleHoverExpand(false)"
|
|
8
20
|
>
|
|
9
21
|
<div
|
|
10
|
-
|
|
11
|
-
class="
|
|
12
|
-
|
|
22
|
+
class="vc-app-bar__wrap"
|
|
23
|
+
:class="{
|
|
24
|
+
'vc-app-bar__wrap--mobile-expanded': $isMobile.value && state.isSidebarExpanded,
|
|
25
|
+
'vc-app-bar__wrap--desktop-collapsed': $isDesktop.value && !state.isSidebarExpanded,
|
|
26
|
+
'vc-app-bar__wrap--desktop-expanded': $isDesktop.value && state.isSidebarExpanded,
|
|
27
|
+
'vc-app-bar__wrap--hover-expanded': $isDesktop.value && isHoverExpanded && !state.isSidebarExpanded,
|
|
28
|
+
'vc-app-bar__wrap--hover-collapsed': $isDesktop.value && !isHoverExpanded && !state.isSidebarExpanded,
|
|
29
|
+
}"
|
|
13
30
|
>
|
|
14
|
-
<div
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
31
|
+
<div
|
|
32
|
+
v-if="!$isMobile.value"
|
|
33
|
+
class="vc-app-bar__collapse-button"
|
|
34
|
+
@click="toggleSidebar"
|
|
35
|
+
>
|
|
36
|
+
<div class="vc-app-bar__collapse-button-wrap">
|
|
37
|
+
<Transition name="rotate">
|
|
38
|
+
<VcIcon
|
|
39
|
+
v-show="true"
|
|
40
|
+
class="vc-app-bar__collapse-button-icon"
|
|
41
|
+
:icon="ChevronLeftIcon"
|
|
42
|
+
size="xs"
|
|
43
|
+
:class="{ 'rotate-180': !state.isSidebarExpanded }"
|
|
44
|
+
/>
|
|
45
|
+
</Transition>
|
|
46
|
+
</div>
|
|
20
47
|
</div>
|
|
21
|
-
</div>
|
|
22
48
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
:expanded="state.isSidebarExpanded"
|
|
30
|
-
@logo:click="$emit('logo:click')"
|
|
31
|
-
@toggle-menu="toggleMenu"
|
|
49
|
+
<div
|
|
50
|
+
class="vc-app-bar__wrapper"
|
|
51
|
+
:class="{
|
|
52
|
+
'vc-app-bar__wrapper--mobile': $isMobile.value,
|
|
53
|
+
'vc-app-bar__wrapper--hover-collapsed': $isDesktop.value && !isHoverExpanded && !state.isSidebarExpanded,
|
|
54
|
+
}"
|
|
32
55
|
>
|
|
33
|
-
<
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
56
|
+
<AppBarHeader
|
|
57
|
+
:logo="logo"
|
|
58
|
+
:expanded="state.isSidebarExpanded || isHoverExpanded"
|
|
59
|
+
class="vc-app-bar__header"
|
|
60
|
+
:class="{
|
|
61
|
+
'vc-app-bar__header--hover-expanded': $isDesktop.value && isHoverExpanded && !state.isSidebarExpanded,
|
|
62
|
+
'vc-app-bar__header--collapsed': $isDesktop.value && !state.isSidebarExpanded && !isHoverExpanded,
|
|
63
|
+
}"
|
|
64
|
+
@logo:click="$emit('logo:click')"
|
|
65
|
+
@toggle-menu="toggleMenu"
|
|
39
66
|
>
|
|
40
|
-
<
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
:is="overlayContent"
|
|
51
|
-
v-bind="overlayProps"
|
|
52
|
-
/>
|
|
53
|
-
</AppBarOverlay>
|
|
54
|
-
|
|
55
|
-
<MenuSidebar
|
|
56
|
-
v-if="state.isMenuOpen"
|
|
57
|
-
:is-opened="state.isMenuOpen"
|
|
58
|
-
:expanded="state.isSidebarExpanded"
|
|
59
|
-
@update:is-opened="handleMenuClose"
|
|
60
|
-
>
|
|
61
|
-
<template #toolbar>
|
|
62
|
-
<slot name="notifications-dropdown" />
|
|
63
|
-
<slot name="toolbar" />
|
|
64
|
-
</template>
|
|
65
|
-
<template #navmenu>
|
|
66
|
-
<slot name="navmenu" />
|
|
67
|
-
</template>
|
|
68
|
-
<template #user-dropdown>
|
|
69
|
-
<slot name="user-dropdown" />
|
|
70
|
-
</template>
|
|
71
|
-
<template #app-switcher>
|
|
72
|
-
<slot name="app-switcher" />
|
|
73
|
-
</template>
|
|
74
|
-
<template #active-content>
|
|
75
|
-
<div
|
|
76
|
-
v-if="shouldShowInMenu"
|
|
77
|
-
:class="['vc-app-bar__menu-dropdowns', { 'vc-app-bar__menu-dropdowns--mobile': $isMobile.value }]"
|
|
67
|
+
<template #notifications>
|
|
68
|
+
<slot name="notifications-dropdown" />
|
|
69
|
+
</template>
|
|
70
|
+
</AppBarHeader>
|
|
71
|
+
|
|
72
|
+
<Transition name="overlay">
|
|
73
|
+
<AppBarOverlay
|
|
74
|
+
v-if="shouldShowOverlay"
|
|
75
|
+
:is-sidebar-mode="state.isMenuOpen"
|
|
76
|
+
:expanded="state.isSidebarExpanded"
|
|
78
77
|
>
|
|
79
78
|
<component
|
|
80
79
|
:is="overlayContent"
|
|
81
|
-
v-bind="overlayProps
|
|
80
|
+
v-bind="overlayProps"
|
|
82
81
|
/>
|
|
83
|
-
</
|
|
84
|
-
</
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
<
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
82
|
+
</AppBarOverlay>
|
|
83
|
+
</Transition>
|
|
84
|
+
|
|
85
|
+
<MenuSidebar
|
|
86
|
+
v-if="state.isMenuOpen"
|
|
87
|
+
:is-opened="state.isMenuOpen"
|
|
88
|
+
:expanded="state.isSidebarExpanded"
|
|
89
|
+
@update:is-opened="handleMenuClose"
|
|
90
|
+
>
|
|
91
|
+
<template #toolbar>
|
|
92
|
+
<slot name="notifications-dropdown" />
|
|
93
|
+
<slot name="toolbar" />
|
|
94
|
+
</template>
|
|
95
|
+
<template #navmenu>
|
|
96
|
+
<slot name="navmenu" />
|
|
97
|
+
</template>
|
|
98
|
+
<template #user-dropdown>
|
|
99
|
+
<slot name="user-dropdown" />
|
|
100
|
+
</template>
|
|
101
|
+
<template #app-switcher>
|
|
102
|
+
<slot name="app-switcher" />
|
|
103
|
+
</template>
|
|
104
|
+
<template #active-content>
|
|
105
|
+
<div
|
|
106
|
+
v-if="shouldShowInMenu"
|
|
107
|
+
:class="['vc-app-bar__menu-dropdowns', { 'vc-app-bar__menu-dropdowns--mobile': $isMobile.value }]"
|
|
108
|
+
>
|
|
109
|
+
<component
|
|
110
|
+
:is="overlayContent"
|
|
111
|
+
v-bind="overlayProps || {}"
|
|
112
|
+
/>
|
|
113
|
+
</div>
|
|
114
|
+
</template>
|
|
115
|
+
</MenuSidebar>
|
|
116
|
+
|
|
117
|
+
<AppBarContent
|
|
118
|
+
v-if="$isDesktop.value"
|
|
119
|
+
:expanded="state.isSidebarExpanded"
|
|
120
|
+
>
|
|
121
|
+
<template #navmenu>
|
|
122
|
+
<slot name="navmenu" />
|
|
123
|
+
</template>
|
|
124
|
+
<template #user-dropdown>
|
|
125
|
+
<slot name="user-dropdown" />
|
|
126
|
+
</template>
|
|
127
|
+
</AppBarContent>
|
|
128
|
+
</div>
|
|
98
129
|
</div>
|
|
99
130
|
</div>
|
|
100
131
|
</template>
|
|
@@ -128,18 +159,22 @@ interface Slots {
|
|
|
128
159
|
"app-switcher": () => void;
|
|
129
160
|
navmenu: () => void;
|
|
130
161
|
"user-dropdown": () => void;
|
|
131
|
-
"logo:append": () => void;
|
|
132
162
|
}
|
|
133
163
|
|
|
134
|
-
defineProps<Props>();
|
|
164
|
+
const props = defineProps<Props>();
|
|
135
165
|
defineEmits<Emits>();
|
|
136
166
|
defineSlots<Slots>();
|
|
137
167
|
|
|
138
|
-
const {
|
|
168
|
+
const {
|
|
169
|
+
state,
|
|
170
|
+
toggleSidebar,
|
|
171
|
+
toggleMenu: toggleMenuState,
|
|
172
|
+
closeAll,
|
|
173
|
+
toggleHoverExpanded,
|
|
174
|
+
isHoverExpanded,
|
|
175
|
+
} = useAppMenuState();
|
|
139
176
|
const { overlayContent, overlayProps, hideContent, isOverlayed } = useAppBarOverlay();
|
|
140
177
|
|
|
141
|
-
const menuButtonRef = ref<HTMLElement | null>(null);
|
|
142
|
-
|
|
143
178
|
// Provide appMenuState для дочерних компонентов
|
|
144
179
|
provide("appMenuState", { closeAll });
|
|
145
180
|
|
|
@@ -157,9 +192,9 @@ const handleMenuClose = (value: boolean) => {
|
|
|
157
192
|
}
|
|
158
193
|
};
|
|
159
194
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
195
|
+
// Simple hover effect processing
|
|
196
|
+
const handleHoverExpand = (shouldExpand?: boolean) => {
|
|
197
|
+
toggleHoverExpanded(shouldExpand);
|
|
163
198
|
};
|
|
164
199
|
|
|
165
200
|
const shouldShowOverlay = computed(() => {
|
|
@@ -174,20 +209,21 @@ const shouldShowInMenu = computed(() => {
|
|
|
174
209
|
<style lang="scss">
|
|
175
210
|
:root {
|
|
176
211
|
// Sizes
|
|
177
|
-
--app-bar-height:
|
|
178
|
-
--app-bar-collapsed-height: 94px;
|
|
212
|
+
--app-bar-height: 94px;
|
|
179
213
|
--app-bar-mobile-height: 58px;
|
|
180
214
|
--app-bar-width: 246px;
|
|
181
215
|
--app-bar-mobile-width: 300px;
|
|
182
216
|
--app-bar-collapsed-width: 76px;
|
|
183
217
|
--app-bar-padding: 18px;
|
|
184
218
|
--app-bar-padding-mobile: 28px;
|
|
219
|
+
--app-bar-shadow: 0 16px 10px 0 rgba(0, 0, 0, 0.14);
|
|
185
220
|
|
|
186
221
|
// Logo
|
|
187
222
|
--app-bar-logo-width: 125px;
|
|
188
223
|
--app-bar-logo-height: 46px;
|
|
189
224
|
--app-bar-logo-mobile-width: 46px;
|
|
190
225
|
--app-bar-logo-mobile-height: 46px;
|
|
226
|
+
|
|
191
227
|
// Collapse button
|
|
192
228
|
--app-bar-collapse-button-width: 26px;
|
|
193
229
|
--app-bar-collapse-button-height: 26px;
|
|
@@ -205,30 +241,111 @@ const shouldShowInMenu = computed(() => {
|
|
|
205
241
|
--app-bar-burger: var(--primary-500);
|
|
206
242
|
|
|
207
243
|
// Transition
|
|
208
|
-
--app-bar-transition-duration:
|
|
209
|
-
--app-bar-transition-
|
|
244
|
+
--app-bar-transition-duration: 200ms;
|
|
245
|
+
--app-bar-hover-transition-duration: 250ms;
|
|
246
|
+
--app-bar-hover-leave-duration: 400ms;
|
|
247
|
+
--app-bar-hover-transition-timing-function: cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
210
248
|
}
|
|
211
249
|
|
|
212
250
|
.vc-app-bar {
|
|
213
251
|
@apply tw-relative tw-flex tw-flex-col;
|
|
214
|
-
|
|
252
|
+
// transition-property: width, transform, box-shadow;
|
|
253
|
+
// transition-timing-function: var(--app-bar-hover-transition-timing-function);
|
|
254
|
+
// transition-duration: var(--app-bar-hover-transition-duration);
|
|
215
255
|
background-color: var(--app-bar-background);
|
|
216
|
-
|
|
256
|
+
// border-right: 1px solid var(--app-bar-border);
|
|
257
|
+
|
|
258
|
+
z-index: 10000;
|
|
259
|
+
|
|
260
|
+
&--desktop {
|
|
261
|
+
position: fixed;
|
|
262
|
+
top: 0;
|
|
263
|
+
left: 0;
|
|
264
|
+
bottom: 0;
|
|
265
|
+
width: var(--app-bar-width);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
&--mobile {
|
|
269
|
+
@apply tw-w-full;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
&--padding {
|
|
273
|
+
@apply tw-w-[var(--app-bar-collapsed-width)];
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
&--padding-expanded {
|
|
277
|
+
@apply tw-w-[var(--app-bar-width)];
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
&--collapsed {
|
|
281
|
+
width: var(--app-bar-collapsed-width);
|
|
282
|
+
transition:
|
|
283
|
+
width var(--app-bar-hover-transition-duration) var(--app-bar-hover-transition-timing-function),
|
|
284
|
+
transform var(--app-bar-hover-transition-duration) var(--app-bar-hover-transition-timing-function);
|
|
285
|
+
|
|
286
|
+
&:not(.vc-app-bar--hover-expanded) {
|
|
287
|
+
~ .vc-app-content {
|
|
288
|
+
margin-left: var(--app-bar-collapsed-width);
|
|
289
|
+
transition: margin-left var(--app-bar-hover-transition-duration) var(--app-bar-hover-transition-timing-function);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
&--hover-expanded {
|
|
295
|
+
width: var(--app-bar-width) !important;
|
|
296
|
+
transition-duration: var(--app-bar-hover-transition-duration);
|
|
297
|
+
|
|
298
|
+
.vc-app-bar__wrap {
|
|
299
|
+
width: var(--app-bar-width);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
&--hover-collapsed {
|
|
304
|
+
transition-duration: var(--app-bar-hover-leave-duration);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
&__wrap {
|
|
308
|
+
@apply tw-h-full tw-relative;
|
|
309
|
+
transition-property: width, transform, box-shadow;
|
|
310
|
+
transition-timing-function: var(--app-bar-hover-transition-timing-function);
|
|
311
|
+
transition-duration: var(--app-bar-hover-transition-duration);
|
|
312
|
+
|
|
313
|
+
&--desktop-collapsed {
|
|
314
|
+
width: var(--app-bar-collapsed-width);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
&--desktop-expanded {
|
|
318
|
+
width: var(--app-bar-width);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
&--hover-expanded {
|
|
322
|
+
@apply tw-fixed tw-top-0 tw-left-0 tw-h-full tw-z-[100];
|
|
323
|
+
width: var(--app-bar-width) !important;
|
|
324
|
+
box-shadow: var(--app-bar-shadow);
|
|
325
|
+
background-color: var(--app-bar-background);
|
|
326
|
+
transition-duration: var(--app-bar-hover-transition-duration);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
&--hover-collapsed {
|
|
330
|
+
transition-duration: var(--app-bar-hover-leave-duration);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
217
333
|
|
|
218
334
|
&__collapse-button {
|
|
219
|
-
@apply tw-absolute tw-right-[-
|
|
335
|
+
@apply tw-absolute tw-right-[-13px] tw-top-[50%] tw-translate-y-[-50%] tw-flex tw-items-center tw-justify-center tw-cursor-pointer tw-z-[12];
|
|
220
336
|
width: var(--app-bar-collapse-button-width);
|
|
221
337
|
height: var(--app-bar-collapse-button-height);
|
|
222
338
|
border-radius: var(--app-bar-collapse-button-border-radius);
|
|
223
339
|
background-color: var(--app-bar-background);
|
|
224
340
|
border: 1px solid var(--app-bar-border);
|
|
341
|
+
opacity: 0;
|
|
342
|
+
transition: opacity var(--app-bar-hover-transition-duration) var(--app-bar-hover-transition-timing-function);
|
|
225
343
|
|
|
226
344
|
&-wrap {
|
|
227
345
|
@apply tw-flex tw-items-center tw-justify-center;
|
|
228
346
|
}
|
|
229
347
|
|
|
230
348
|
&-icon {
|
|
231
|
-
@apply tw-transition-transform tw-duration-300;
|
|
232
349
|
color: var(--app-bar-button);
|
|
233
350
|
}
|
|
234
351
|
}
|
|
@@ -237,39 +354,84 @@ const shouldShowInMenu = computed(() => {
|
|
|
237
354
|
@apply tw-opacity-100;
|
|
238
355
|
}
|
|
239
356
|
|
|
240
|
-
&--collapsed {
|
|
241
|
-
width: var(--app-bar-collapsed-width);
|
|
242
|
-
|
|
243
|
-
.vc-app-bar__collapse-button svg {
|
|
244
|
-
@apply tw-rotate-180;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
357
|
&__logo {
|
|
249
358
|
@apply tw-cursor-pointer tw-mx-2;
|
|
250
359
|
max-width: var(--app-bar-logo-width);
|
|
251
360
|
max-height: var(--app-bar-logo-height);
|
|
361
|
+
transition:
|
|
362
|
+
opacity var(--app-bar-hover-transition-duration) var(--app-bar-hover-transition-timing-function),
|
|
363
|
+
transform var(--app-bar-hover-transition-duration) var(--app-bar-hover-transition-timing-function);
|
|
252
364
|
}
|
|
253
365
|
|
|
254
366
|
&__title {
|
|
255
367
|
@apply tw-font-medium;
|
|
256
368
|
color: var(--app-bar-product-name);
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
@apply tw-w-full;
|
|
369
|
+
transition:
|
|
370
|
+
opacity var(--app-bar-hover-transition-duration) var(--app-bar-hover-transition-timing-function),
|
|
371
|
+
transform var(--app-bar-hover-transition-duration) var(--app-bar-hover-transition-timing-function);
|
|
261
372
|
}
|
|
262
373
|
|
|
263
374
|
&__wrapper {
|
|
264
375
|
@apply tw-h-full tw-relative;
|
|
265
|
-
|
|
266
|
-
// &--mobile {
|
|
267
|
-
// height: var(--app-bar-mobile-height);
|
|
268
|
-
// }
|
|
376
|
+
transition: opacity var(--app-bar-hover-transition-duration) var(--app-bar-hover-transition-timing-function);
|
|
269
377
|
}
|
|
270
378
|
|
|
271
379
|
&__menu-dropdowns {
|
|
272
380
|
@apply tw-overflow-auto tw-max-h-[250px];
|
|
273
381
|
}
|
|
382
|
+
|
|
383
|
+
&__header {
|
|
384
|
+
transition-property: all, width, transform;
|
|
385
|
+
transition-timing-function: var(--app-bar-hover-transition-timing-function);
|
|
386
|
+
transition-duration: var(--app-bar-hover-transition-duration);
|
|
387
|
+
|
|
388
|
+
&--collapsed {
|
|
389
|
+
@apply tw-w-[var(--app-bar-collapsed-width)];
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
&--hover-expanded {
|
|
393
|
+
@apply tw-w-[var(--app-bar-width)];
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
&--hover-collapsed {
|
|
397
|
+
transition-duration: var(--app-bar-hover-leave-duration);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
.overlay-enter-active,
|
|
403
|
+
.overlay-leave-active,
|
|
404
|
+
.menu-enter-active,
|
|
405
|
+
.menu-leave-active {
|
|
406
|
+
transition:
|
|
407
|
+
opacity var(--app-bar-hover-transition-duration) var(--app-bar-hover-transition-timing-function),
|
|
408
|
+
transform var(--app-bar-hover-transition-duration) var(--app-bar-hover-transition-timing-function);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
.overlay-enter-from,
|
|
412
|
+
.menu-enter-from {
|
|
413
|
+
opacity: 0;
|
|
414
|
+
transform: translateY(-10px);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
.overlay-leave-to,
|
|
418
|
+
.menu-leave-to {
|
|
419
|
+
opacity: 0;
|
|
420
|
+
transform: translateY(10px);
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
.rotate-enter-active,
|
|
424
|
+
.rotate-leave-active {
|
|
425
|
+
transition: transform var(--app-bar-hover-transition-duration) var(--app-bar-hover-transition-timing-function);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
.rotate-180 {
|
|
429
|
+
transform: rotate(180deg);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
// Анимация контента
|
|
433
|
+
.vc-app-content {
|
|
434
|
+
margin-left: var(--app-bar-width);
|
|
435
|
+
transition: margin-left var(--app-bar-hover-transition-duration) var(--app-bar-hover-transition-timing-function);
|
|
274
436
|
}
|
|
275
437
|
</style>
|