@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.
Files changed (156) hide show
  1. package/core/composables/index.ts +18 -17
  2. package/core/composables/useDashboard/index.ts +19 -0
  3. package/core/composables/{useGlobalSearch.ts → useGlobalSearch/index.ts} +3 -5
  4. package/core/composables/useWidgets/index.ts +19 -18
  5. package/core/plugins/modularity/loader.ts +2 -1
  6. package/core/services/dashboard-service.ts +121 -0
  7. package/core/services/widget-service.ts +1 -4
  8. package/dist/core/composables/index.d.ts +1 -0
  9. package/dist/core/composables/index.d.ts.map +1 -1
  10. package/dist/core/composables/useDashboard/index.d.ts +5 -0
  11. package/dist/core/composables/useDashboard/index.d.ts.map +1 -0
  12. package/dist/core/composables/{useGlobalSearch.d.ts → useGlobalSearch/index.d.ts} +1 -1
  13. package/dist/core/composables/useGlobalSearch/index.d.ts.map +1 -0
  14. package/dist/core/plugins/modularity/loader.d.ts.map +1 -1
  15. package/dist/core/services/dashboard-service.d.ts +33 -0
  16. package/dist/core/services/dashboard-service.d.ts.map +1 -0
  17. package/dist/core/services/widget-service.d.ts.map +1 -1
  18. package/dist/framework.js +235 -225
  19. package/dist/{index-Bu12RZTu.js → index-8LELHzw9.js} +1 -1
  20. package/dist/{index-Bwl2ND2Q.js → index-9lJxZE5w.js} +1 -1
  21. package/dist/{index-CJi-BbTb.js → index-B1YR_MYV.js} +1 -1
  22. package/dist/{index-BhdwVgUw.js → index-BA98L1jI.js} +1 -1
  23. package/dist/{index-NdrUF1u3.js → index-BAeTsi-X.js} +1 -1
  24. package/dist/{index-CbRqPQTw.js → index-BBYyHeYA.js} +1 -1
  25. package/dist/{index-CsaYfhir.js → index-BrUitdDo.js} +1 -1
  26. package/dist/{index-CZ_pj3nW.js → index-BuO5ByG9.js} +1 -1
  27. package/dist/{index-DFPb-jDP.js → index-CJ5I7vTn.js} +1 -1
  28. package/dist/{index-BdoAu2fz.js → index-CWKrD2Cd.js} +1 -1
  29. package/dist/{index-DVaMW7gL.js → index-Cf9Tz1ql.js} +1 -1
  30. package/dist/{index-B89uIUkS.js → index-CrxFDC2b.js} +1 -1
  31. package/dist/{index-BcQiBkO6.js → index-D1JchciU.js} +1 -1
  32. package/dist/{index-CEvuTGIu.js → index-DLtsQ_PJ.js} +31254 -31134
  33. package/dist/{index-COjjAS6v.js → index-DVljTjbf.js} +1 -1
  34. package/dist/{index-DjQ6Ffv8.js → index-RwX3kiZh.js} +28 -28
  35. package/dist/{index-S9Ht7s3i.js → index-xLYzNPa7.js} +1 -1
  36. package/dist/index.css +1 -1
  37. package/dist/injection-keys.d.ts +28 -0
  38. package/dist/injection-keys.d.ts.map +1 -1
  39. package/dist/shared/components/dashboard-widget-card/dashboard-widget-card.vue.d.ts +25 -0
  40. package/dist/shared/components/dashboard-widget-card/dashboard-widget-card.vue.d.ts.map +1 -0
  41. package/dist/shared/components/dashboard-widget-card/index.d.ts +2 -0
  42. package/dist/shared/components/dashboard-widget-card/index.d.ts.map +1 -0
  43. package/dist/shared/components/draggable-dashboard/DraggableDashboard.vue.d.ts +6 -0
  44. package/dist/shared/components/draggable-dashboard/DraggableDashboard.vue.d.ts.map +1 -0
  45. package/dist/shared/components/draggable-dashboard/_internal/DashboardWidget.vue.d.ts +20 -0
  46. package/dist/shared/components/draggable-dashboard/_internal/DashboardWidget.vue.d.ts.map +1 -0
  47. package/dist/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.d.ts +354 -0
  48. package/dist/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.d.ts.map +1 -0
  49. package/dist/shared/components/draggable-dashboard/composables/useDashboardGrid.d.ts +12 -0
  50. package/dist/shared/components/draggable-dashboard/composables/useDashboardGrid.d.ts.map +1 -0
  51. package/dist/shared/components/draggable-dashboard/index.d.ts +2 -0
  52. package/dist/shared/components/draggable-dashboard/index.d.ts.map +1 -0
  53. package/dist/shared/components/draggable-dashboard/types.d.ts +80 -0
  54. package/dist/shared/components/draggable-dashboard/types.d.ts.map +1 -0
  55. package/dist/shared/components/index.d.ts +2 -0
  56. package/dist/shared/components/index.d.ts.map +1 -1
  57. package/dist/shared/components/user-dropdown-button/_internal/user-info.vue.d.ts.map +1 -1
  58. package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts.map +1 -1
  59. package/dist/shared/composables/useMenuExpanded.d.ts +2 -0
  60. package/dist/shared/composables/useMenuExpanded.d.ts.map +1 -1
  61. package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts +0 -41
  62. package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts.map +1 -1
  63. package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts.map +1 -1
  64. package/dist/shared/modules/dynamic/components/fields/storybook/common/templates.d.ts +1 -1
  65. package/dist/shared/modules/dynamic/components/fields/storybook/common/templates.d.ts.map +1 -1
  66. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts +2 -25
  67. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts.map +1 -1
  68. package/dist/tailwind.config.d.ts +1 -81
  69. package/dist/tailwind.config.d.ts.map +1 -1
  70. package/dist/tsconfig.tsbuildinfo +1 -1
  71. package/dist/ui/components/atoms/vc-button/vc-button.stories.d.ts +169 -734
  72. package/dist/ui/components/atoms/vc-button/vc-button.stories.d.ts.map +1 -1
  73. package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts +18 -2
  74. package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts.map +1 -1
  75. package/dist/ui/components/atoms/vc-card/index.d.ts +2 -0
  76. package/dist/ui/components/atoms/vc-card/index.d.ts.map +1 -1
  77. package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts +12 -0
  78. package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts.map +1 -1
  79. package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts +2 -0
  80. package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts.map +1 -1
  81. package/dist/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue.d.ts +18 -0
  82. package/dist/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue.d.ts.map +1 -0
  83. package/dist/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue.d.ts +18 -0
  84. package/dist/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue.d.ts.map +1 -0
  85. package/dist/ui/components/atoms/vc-icon/icons/index.d.ts +2 -0
  86. package/dist/ui/components/atoms/vc-icon/icons/index.d.ts.map +1 -1
  87. package/dist/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.d.ts +2 -0
  88. package/dist/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.d.ts.map +1 -1
  89. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts +0 -1
  90. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts.map +1 -1
  91. 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
  92. 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
  93. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue.d.ts.map +1 -1
  94. package/dist/ui/components/organisms/vc-app/vc-app.stories.d.ts +13 -67
  95. package/dist/ui/components/organisms/vc-app/vc-app.stories.d.ts.map +1 -1
  96. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts +5 -65
  97. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts.map +1 -1
  98. package/dist/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue.d.ts.map +1 -1
  99. 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
  100. 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
  101. package/dist/ui/components/organisms/vc-table/_internal/vc-table-header/vc-table-header.vue.d.ts.map +1 -1
  102. package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue.d.ts +33 -3
  103. package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue.d.ts.map +1 -1
  104. package/dist/ui/components/organisms/vc-table/composables/useTableRowReorder.d.ts.map +1 -1
  105. package/package.json +10 -5
  106. package/shared/components/dashboard-widget-card/dashboard-widget-card.vue +67 -0
  107. package/shared/components/dashboard-widget-card/index.ts +1 -0
  108. package/shared/components/draggable-dashboard/DraggableDashboard.vue +369 -0
  109. package/shared/components/draggable-dashboard/_internal/DashboardWidget.vue +133 -0
  110. package/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.ts +547 -0
  111. package/shared/components/draggable-dashboard/composables/useDashboardGrid.ts +250 -0
  112. package/shared/components/draggable-dashboard/index.ts +1 -0
  113. package/shared/components/draggable-dashboard/types.ts +91 -0
  114. package/shared/components/index.ts +2 -0
  115. package/shared/components/user-dropdown-button/_internal/user-info.vue +25 -12
  116. package/shared/components/user-dropdown-button/user-dropdown-button.vue +3 -3
  117. package/shared/composables/useMenuExpanded.ts +24 -0
  118. package/shared/modules/assets/components/assets-details/assets-details.vue +1 -1
  119. package/shared/modules/dynamic/components/fields/storybook/Button.stories.ts +186 -247
  120. package/shared/modules/dynamic/components/fields/storybook/Card.stories.ts +175 -176
  121. package/shared/modules/dynamic/components/fields/storybook/common/templates.ts +8 -8
  122. package/shared/modules/dynamic/pages/dynamic-blade-list.vue +153 -187
  123. package/tailwind.config.ts +127 -126
  124. package/ui/components/atoms/vc-button/vc-button.stories.ts +1 -16
  125. package/ui/components/atoms/vc-button/vc-button.vue +74 -63
  126. package/ui/components/atoms/vc-card/vc-card.stories.ts +102 -102
  127. package/ui/components/atoms/vc-card/vc-card.vue +164 -159
  128. package/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue +22 -0
  129. package/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue +16 -0
  130. package/ui/components/atoms/vc-icon/icons/index.ts +2 -0
  131. package/ui/components/molecules/vc-field/vc-field.vue +1 -1
  132. package/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.ts +12 -1
  133. package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarContent.vue +1 -2
  134. package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarHeader.vue +1 -1
  135. package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarOverlay.vue +0 -1
  136. package/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue +274 -112
  137. package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue +81 -37
  138. package/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue +7 -5
  139. package/ui/components/organisms/vc-app/vc-app.vue +26 -15
  140. package/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue +5 -7
  141. 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
  142. package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-row/vc-table-row.vue +1 -0
  143. package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/vc-table-desktop-view.vue +1 -1
  144. package/ui/components/organisms/vc-table/_internal/vc-table-header/vc-table-header.vue +12 -1
  145. package/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue +45 -2
  146. package/ui/components/organisms/vc-table/composables/useTableColumnReorder.ts +5 -5
  147. package/ui/components/organisms/vc-table/composables/useTableColumnResize.ts +1 -1
  148. package/ui/components/organisms/vc-table/composables/useTableRowReorder.ts +1 -0
  149. package/core/services/toolbarbus-service.ts +0 -34
  150. package/dist/core/composables/useGlobalSearch.d.ts.map +0 -1
  151. package/dist/core/services/toolbarbus-service.d.ts +0 -10
  152. package/dist/core/services/toolbarbus-service.d.ts.map +0 -1
  153. package/dist/ui/components/organisms/vc-app/composables/useToolbarSlots.d.ts +0 -5
  154. package/dist/ui/components/organisms/vc-app/composables/useToolbarSlots.d.ts.map +0 -1
  155. 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
  156. package/ui/components/organisms/vc-app/composables/useToolbarSlots.ts +0 -37
@@ -1,102 +1,102 @@
1
- import type { Meta, StoryFn } from "@storybook/vue3";
2
- import { VcCard } from ".";
3
- import { VcInput, VcCol, VcButton } from "./../../";
4
-
5
- const VARIANT = ["default", "success", "danger"];
6
-
7
- export default {
8
- title: "atoms/VcCard",
9
- component: VcCard,
10
- args: {
11
- header: "Card Title",
12
- variant: "default",
13
- default: "Text",
14
- },
15
- argTypes: {
16
- default: {
17
- control: "radio",
18
- options: ["Text", "Component"],
19
- mapping: {
20
- Text: "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Inventore sed consequuntur error repudiandae numquam deserunt quisquam repellat libero asperiores earum nam nobis, culpa ratione quam perferendis esse, cupiditate neque quas!",
21
- Component: VcInput,
22
- },
23
- },
24
- header: { control: "text" },
25
- icon: { control: "text" },
26
- isCollapsable: { control: "boolean" },
27
- isCollapsed: { control: "boolean" },
28
- variant: {
29
- control: "radio",
30
- options: VARIANT,
31
- table: {
32
- type: {
33
- summary: VARIANT.join(" | "),
34
- },
35
- },
36
- },
37
- fill: { control: "boolean" },
38
- },
39
- } satisfies Meta<typeof VcCard>;
40
-
41
- export const Template: StoryFn<typeof VcCard> = (args) => ({
42
- components: { VcCard, VcInput, VcCol },
43
- setup() {
44
- return { args };
45
- },
46
- template: `
47
- <vc-card v-bind="args">
48
- <template v-if="typeof args.default === 'string'">
49
- <p class="tw-p-4">{{args.default}}</p>
50
- </template>
51
- <template v-else>
52
- <component class="tw-p-4" :is="args.default" label="Input Field" placeholder="Input some text" />
53
- </template>
54
-
55
- </vc-card>`,
56
- });
57
-
58
- export const Header = Template.bind({});
59
- Header.args = { header: "Card Title" };
60
-
61
- export const Icon = Template.bind({});
62
- Icon.args = { icon: "fas fa-warehouse" };
63
-
64
- export const Collapsable = Template.bind({});
65
- Collapsable.args = { isCollapsable: true };
66
-
67
- export const Collapsed = Template.bind({});
68
- Collapsed.args = { isCollapsable: true, isCollapsed: true };
69
-
70
- export const Fill = Template.bind({});
71
- Fill.args = { fill: true, header: "Card Title" };
72
-
73
- export const Actions: StoryFn<typeof VcCard> = (args) => ({
74
- components: {
75
- VcCard,
76
- VcButton,
77
- },
78
- setup: () => ({ args }),
79
- template: `
80
- <vc-card :variant="variant" header="Card Title">
81
- <p class="tw-p-4">{{args.default}}</p>
82
-
83
- <template #actions>
84
- <VcButton variant="danger">Action button</VcButton>
85
- </template>
86
- </vc-card>
87
- `,
88
- });
89
-
90
- export const Variants: StoryFn<typeof VcCard> = (args) => ({
91
- components: {
92
- VcCard,
93
- },
94
- setup: () => ({ variants: VARIANT, args }),
95
- template: `
96
- <div class="tw-space-x-8 tw-flex tw-flex-row">
97
- <vc-card v-for="variant in variants" :variant="variant" header="Card Title">
98
- <p class="tw-p-4">{{args.default}}</p>
99
- </vc-card>
100
- </div>
101
- `,
102
- });
1
+ import type { Meta, StoryFn } from "@storybook/vue3";
2
+ import { VcCard } from ".";
3
+ import { VcInput, VcCol, VcButton } from "./../../";
4
+
5
+ const VARIANT = ["default", "success", "danger"];
6
+
7
+ export default {
8
+ title: "atoms/VcCard",
9
+ component: VcCard,
10
+ args: {
11
+ header: "Card Title",
12
+ variant: "default",
13
+ default: "Text",
14
+ },
15
+ argTypes: {
16
+ default: {
17
+ control: "radio",
18
+ options: ["Text", "Component"],
19
+ mapping: {
20
+ Text: "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Inventore sed consequuntur error repudiandae numquam deserunt quisquam repellat libero asperiores earum nam nobis, culpa ratione quam perferendis esse, cupiditate neque quas!",
21
+ Component: VcInput,
22
+ },
23
+ },
24
+ header: { control: "text" },
25
+ icon: { control: "text" },
26
+ isCollapsable: { control: "boolean" },
27
+ isCollapsed: { control: "boolean" },
28
+ variant: {
29
+ control: "radio",
30
+ options: VARIANT,
31
+ table: {
32
+ type: {
33
+ summary: VARIANT.join(" | "),
34
+ },
35
+ },
36
+ },
37
+ fill: { control: "boolean" },
38
+ },
39
+ } satisfies Meta<typeof VcCard>;
40
+
41
+ export const Template: StoryFn<typeof VcCard> = (args) => ({
42
+ components: { VcCard, VcInput, VcCol },
43
+ setup() {
44
+ return { args };
45
+ },
46
+ template: `
47
+ <vc-card v-bind="args">
48
+ <template v-if="typeof args.default === 'string'">
49
+ <p class="tw-p-4">{{args.default}}</p>
50
+ </template>
51
+ <template v-else>
52
+ <component class="tw-p-4" :is="args.default" label="Input Field" placeholder="Input some text" />
53
+ </template>
54
+
55
+ </vc-card>`,
56
+ });
57
+
58
+ export const Header = Template.bind({});
59
+ Header.args = { header: "Card Title" };
60
+
61
+ export const Icon = Template.bind({});
62
+ Icon.args = { icon: "fas fa-warehouse" };
63
+
64
+ export const Collapsable = Template.bind({});
65
+ Collapsable.args = { isCollapsable: true };
66
+
67
+ export const Collapsed = Template.bind({});
68
+ Collapsed.args = { isCollapsable: true, isCollapsed: true };
69
+
70
+ export const Fill = Template.bind({});
71
+ Fill.args = { fill: true, header: "Card Title" };
72
+
73
+ export const Actions: StoryFn<typeof VcCard> = (args) => ({
74
+ components: {
75
+ VcCard,
76
+ VcButton,
77
+ },
78
+ setup: () => ({ args }),
79
+ template: `
80
+ <vc-card :variant="variant" header="Card Title">
81
+ <p class="tw-p-4">{{args.default}}</p>
82
+
83
+ <template #actions>
84
+ <VcButton variant="primary">Action button</VcButton>
85
+ </template>
86
+ </vc-card>
87
+ `,
88
+ });
89
+
90
+ export const Variants: StoryFn<typeof VcCard> = (args) => ({
91
+ components: {
92
+ VcCard,
93
+ },
94
+ setup: () => ({ variants: VARIANT, args }),
95
+ template: `
96
+ <div class="tw-space-x-8 tw-flex tw-flex-row">
97
+ <vc-card v-for="variant in variants" :variant="variant" header="Card Title">
98
+ <p class="tw-p-4">{{args.default}}</p>
99
+ </vc-card>
100
+ </div>
101
+ `,
102
+ });
@@ -1,159 +1,164 @@
1
- <template>
2
- <div
3
- class="vc-card"
4
- :class="[{ 'vc-card_collapsable': isCollapsable }, `vc-card_${variant}`]"
5
- >
6
- <div
7
- v-if="header"
8
- class="vc-card__header"
9
- @click="onHeaderClick"
10
- >
11
- <VcIcon
12
- v-if="icon"
13
- class="vc-card__icon"
14
- :icon="icon"
15
- size="xl"
16
- ></VcIcon>
17
- <div class="vc-card__title">{{ header }}</div>
18
- <div
19
- v-if="$slots['actions']"
20
- class="vc-card__actions"
21
- >
22
- <slot name="actions"></slot>
23
- </div>
24
- <VcIcon
25
- v-if="isCollapsable"
26
- class="vc-card__collapse"
27
- :icon="`fas fa-chevron-${isCollapsedInternal ? 'down' : 'up'}`"
28
- size="s"
29
- ></VcIcon>
30
- </div>
31
- <transition name="fade">
32
- <div
33
- v-show="!isCollapsedInternal"
34
- :class="[{ 'tw-flex': fill }, 'vc-card__body']"
35
- >
36
- <slot></slot>
37
- </div>
38
- </transition>
39
- </div>
40
- </template>
41
- <!-- eslint-disable @typescript-eslint/no-explicit-any -->
42
- <script lang="ts" setup>
43
- import { VcIcon } from "./../vc-icon";
44
- import { ref, watch } from "vue";
45
-
46
- export interface Props {
47
- header?: string;
48
- icon?: string;
49
- isCollapsable?: boolean;
50
- isCollapsed?: boolean;
51
- /**
52
- * Card content will fill the available space
53
- */
54
- fill?: boolean;
55
- variant?: "default" | "success" | "danger";
56
- }
57
-
58
- export interface Emits {
59
- (event: "header:click"): void;
60
- (event: "state:collapsed", isCollapsedState: boolean): void;
61
- }
62
-
63
- const props = withDefaults(defineProps<Props>(), {
64
- variant: "default",
65
- });
66
-
67
- const emit = defineEmits<Emits>();
68
-
69
- defineSlots<{
70
- default: (props?: any) => any;
71
- actions: (props?: any) => any;
72
- }>();
73
-
74
- const isCollapsedInternal = ref();
75
-
76
- function onHeaderClick() {
77
- if (props.isCollapsable) {
78
- isCollapsedInternal.value = !isCollapsedInternal.value;
79
- emit("state:collapsed", isCollapsedInternal.value);
80
- }
81
- emit("header:click");
82
- }
83
-
84
- watch(
85
- () => props.isCollapsed,
86
- (value) => {
87
- isCollapsedInternal.value = value;
88
- },
89
- {
90
- immediate: true,
91
- },
92
- );
93
- </script>
94
-
95
- <style lang="scss">
96
- :root {
97
- --card-background: var(--additional-50);
98
- --card-border-radius: 6px;
99
- --card-header-background: var(--secondary-50);
100
- --card-header-color: var(--base-text-color, var(--secondary-950));
101
-
102
- --card-header-background-success: var(--success-100);
103
- --card-header-background-danger: var(--danger-100);
104
-
105
- --card-header-color-success: var(--success-600);
106
- --card-header-color-danger: var(--danger-600);
107
-
108
- --card-header-padding-hor: 24px;
109
- --card-header-padding-vert: 17px;
110
-
111
- --card-border-color: var(--base-border-color, var(--neutrals-200));
112
- }
113
-
114
- $variants: success, danger;
115
-
116
- .vc-card {
117
- @apply tw-bg-[color:var(--card-background)] tw-border
118
- tw-border-[color:var(--card-border-color)] tw-border-solid tw-box-border
119
- tw-rounded-[var(--card-border-radius)] tw-overflow-hidden
120
- tw-flex-grow tw-flex tw-flex-col;
121
-
122
- &__header {
123
- @apply tw-bg-[color:var(--card-header-background)] tw-px-[var(--card-header-padding-hor)] tw-py-[var(--card-header-padding-vert)] tw-flex tw-items-center tw-content-between tw-w-full tw-box-border;
124
- }
125
-
126
- &_collapsable &__header {
127
- @apply tw-cursor-pointer;
128
- }
129
-
130
- &__title {
131
- @apply tw-normal-case tw-flex-grow
132
- tw-text-[color:var(--card-header-color)]
133
- tw-text-sm tw-font-bold;
134
- }
135
-
136
- &__icon {
137
- @apply tw-text-[color:var(--card-header-color)] tw-mr-3;
138
- }
139
-
140
- &__collapse {
141
- @apply tw-text-[color:var(--card-header-color)] tw-ml-3;
142
- }
143
-
144
- &__body {
145
- @apply tw-flex-grow tw-box-border tw-flex-col;
146
- }
147
-
148
- @each $variant in $variants {
149
- &_#{$variant} {
150
- .vc-card__header {
151
- @apply tw-bg-[color:var(--card-header-background-#{$variant})];
152
- }
153
- .vc-card__title {
154
- @apply tw-text-[color:var(--card-header-color-#{$variant})];
155
- }
156
- }
157
- }
158
- }
159
- </style>
1
+ <template>
2
+ <div
3
+ class="vc-card"
4
+ :class="[{ 'vc-card_collapsable': isCollapsable }, `vc-card_${variant}`]"
5
+ >
6
+ <div
7
+ v-if="header"
8
+ class="vc-card__header"
9
+ @click="onHeaderClick"
10
+ >
11
+ <slot name="header">
12
+ <div>
13
+ <VcIcon
14
+ v-if="icon"
15
+ class="vc-card__icon"
16
+ :icon="icon"
17
+ size="xl"
18
+ ></VcIcon>
19
+ <div class="vc-card__title">{{ header }}</div>
20
+ </div>
21
+ </slot>
22
+ <div
23
+ v-if="$slots['actions']"
24
+ class="vc-card__actions"
25
+ >
26
+ <slot name="actions"></slot>
27
+ </div>
28
+ <VcIcon
29
+ v-if="isCollapsable"
30
+ class="vc-card__collapse"
31
+ :icon="`fas fa-chevron-${isCollapsedInternal ? 'down' : 'up'}`"
32
+ size="s"
33
+ ></VcIcon>
34
+ </div>
35
+ <transition name="fade">
36
+ <div
37
+ v-show="!isCollapsedInternal"
38
+ :class="[{ 'tw-flex': fill }, 'vc-card__body']"
39
+ >
40
+ <slot></slot>
41
+ </div>
42
+ </transition>
43
+ </div>
44
+ </template>
45
+ <!-- eslint-disable @typescript-eslint/no-explicit-any -->
46
+ <script lang="ts" setup>
47
+ import { VcIcon } from "./../vc-icon";
48
+ import { ref, watch } from "vue";
49
+
50
+ export interface Props {
51
+ header?: string;
52
+ icon?: string;
53
+ isCollapsable?: boolean;
54
+ isCollapsed?: boolean;
55
+ /**
56
+ * Card content will fill the available space
57
+ */
58
+ fill?: boolean;
59
+ variant?: "default" | "success" | "danger";
60
+ }
61
+
62
+ export interface Emits {
63
+ (event: "header:click"): void;
64
+ (event: "state:collapsed", isCollapsedState: boolean): void;
65
+ }
66
+
67
+ const props = withDefaults(defineProps<Props>(), {
68
+ variant: "default",
69
+ });
70
+
71
+ const emit = defineEmits<Emits>();
72
+
73
+ defineSlots<{
74
+ default: (props?: any) => any;
75
+ actions: (props?: any) => any;
76
+ header: (props?: any) => any;
77
+ }>();
78
+
79
+ const isCollapsedInternal = ref();
80
+
81
+ function onHeaderClick() {
82
+ if (props.isCollapsable) {
83
+ isCollapsedInternal.value = !isCollapsedInternal.value;
84
+ emit("state:collapsed", isCollapsedInternal.value);
85
+ }
86
+ emit("header:click");
87
+ }
88
+
89
+ watch(
90
+ () => props.isCollapsed,
91
+ (value) => {
92
+ isCollapsedInternal.value = value;
93
+ },
94
+ {
95
+ immediate: true,
96
+ },
97
+ );
98
+ </script>
99
+
100
+ <style lang="scss">
101
+ :root {
102
+ --card-background: var(--additional-50);
103
+ --card-border-radius: 6px;
104
+ --card-header-background: var(--secondary-50);
105
+ --card-header-color: var(--base-text-color, var(--secondary-950));
106
+
107
+ --card-header-background-success: var(--success-100);
108
+ --card-header-background-danger: var(--danger-100);
109
+
110
+ --card-header-color-success: var(--success-600);
111
+ --card-header-color-danger: var(--danger-600);
112
+
113
+ --card-header-padding-hor: 24px;
114
+ --card-header-padding-vert: 17px;
115
+
116
+ --card-border-color: var(--base-border-color, var(--neutrals-200));
117
+ }
118
+
119
+ $variants: success, danger;
120
+
121
+ .vc-card {
122
+ @apply tw-bg-[color:var(--card-background)] tw-border
123
+ tw-border-[color:var(--card-border-color)] tw-border-solid tw-box-border
124
+ tw-rounded-[var(--card-border-radius)] tw-overflow-hidden
125
+ tw-flex-grow tw-flex tw-flex-col;
126
+
127
+ &__header {
128
+ @apply tw-border-b tw-border-[color:var(--card-border-color)] tw-border-solid tw-bg-[color:var(--card-header-background)] tw-px-[var(--card-header-padding-hor)] tw-py-[var(--card-header-padding-vert)] tw-flex tw-items-center tw-content-between tw-w-full tw-box-border;
129
+ }
130
+
131
+ &_collapsable &__header {
132
+ @apply tw-cursor-pointer;
133
+ }
134
+
135
+ &__title {
136
+ @apply tw-normal-case tw-flex-grow
137
+ tw-text-[color:var(--card-header-color)]
138
+ tw-text-sm tw-font-bold;
139
+ }
140
+
141
+ &__icon {
142
+ @apply tw-text-[color:var(--card-header-color)] tw-mr-3;
143
+ }
144
+
145
+ &__collapse {
146
+ @apply tw-text-[color:var(--card-header-color)] tw-ml-3;
147
+ }
148
+
149
+ &__body {
150
+ @apply tw-flex-grow tw-box-border tw-flex-col;
151
+ }
152
+
153
+ @each $variant in $variants {
154
+ &_#{$variant} {
155
+ .vc-card__header {
156
+ @apply tw-bg-[color:var(--card-header-background-#{$variant})];
157
+ }
158
+ .vc-card__title {
159
+ @apply tw-text-[color:var(--card-header-color-#{$variant})];
160
+ }
161
+ }
162
+ }
163
+ }
164
+ </style>
@@ -0,0 +1,22 @@
1
+
2
+ <template>
3
+ <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" :width="width" :height="height">
4
+ <path d="M17 18C17 18.5523 17.4477 19 18 19C18.5523 19 19 18.5523 19 18C19 17.4477 18.5523 17 18 17C17.4477 17 17 17.4477 17 18Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
5
+ <path d="M11 18C11 18.5523 11.4477 19 12 19C12.5523 19 13 18.5523 13 18C13 17.4477 12.5523 17 12 17C11.4477 17 11 17.4477 11 18Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
6
+ <path d="M5 18C5 18.5523 5.44772 19 6 19C6.55228 19 7 18.5523 7 18C7 17.4477 6.55228 17 6 17C5.44772 17 5 17.4477 5 18Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
7
+ <path d="M17 12C17 12.5523 17.4477 13 18 13C18.5523 13 19 12.5523 19 12C19 11.4477 18.5523 11 18 11C17.4477 11 17 11.4477 17 12Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
8
+ <path d="M11 12C11 12.5523 11.4477 13 12 13C12.5523 13 13 12.5523 13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
9
+ <path d="M5 12C5 12.5523 5.44772 13 6 13C6.55228 13 7 12.5523 7 12C7 11.4477 6.55228 11 6 11C5.44772 11 5 11.4477 5 12Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
10
+ <path d="M17 6C17 6.55228 17.4477 7 18 7C18.5523 7 19 6.55228 19 6C19 5.44772 18.5523 5 18 5C17.4477 5 17 5.44772 17 6Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
11
+ <path d="M11 6C11 6.55228 11.4477 7 12 7C12.5523 7 13 6.55228 13 6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
12
+ <path d="M5 6C5 6.55228 5.44772 7 6 7C6.55228 7 7 6.55228 7 6C7 5.44772 6.55228 5 6 5C5.44772 5 5 5.44772 5 6Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
13
+ </svg>
14
+
15
+ </template>
16
+
17
+ <script setup lang="ts">
18
+ defineProps<{
19
+ width?: number | string
20
+ height?: number | string
21
+ }>()
22
+ </script>
@@ -0,0 +1,16 @@
1
+
2
+ <template>
3
+ <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" :width="width" :height="height">
4
+ <path d="M8 22C8.55228 22 9 21.5523 9 21C9 20.4477 8.55228 20 8 20C7.44772 20 7 20.4477 7 21C7 21.5523 7.44772 22 8 22Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
5
+ <path d="M19 22C19.5523 22 20 21.5523 20 21C20 20.4477 19.5523 20 19 20C18.4477 20 18 20.4477 18 21C18 21.5523 18.4477 22 19 22Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
6
+ <path d="M2.0498 2.0498H4.0498L6.7098 14.4698C6.80738 14.9247 7.06048 15.3313 7.42552 15.6197C7.79056 15.908 8.24471 16.0602 8.7098 16.0498H18.4898C18.945 16.0491 19.3863 15.8931 19.7408 15.6076C20.0954 15.3222 20.3419 14.9243 20.4398 14.4798L22.0898 7.0498H5.1198" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
7
+ </svg>
8
+
9
+ </template>
10
+
11
+ <script setup lang="ts">
12
+ defineProps<{
13
+ width?: number | string
14
+ height?: number | string
15
+ }>()
16
+ </script>
@@ -10,10 +10,12 @@ export { default as CircleDotsIcon } from "./CircleDotsIcon.vue"
10
10
  export { default as CrossSignIcon } from "./CrossSignIcon.vue"
11
11
  export { default as DoubleArrowLeftIcon } from "./DoubleArrowLeftIcon.vue"
12
12
  export { default as DoubleArrowRightIcon } from "./DoubleArrowRightIcon.vue"
13
+ export { default as GridDotsIcon } from "./GridDotsIcon.vue"
13
14
  export { default as LogoutIcon } from "./LogoutIcon.vue"
14
15
  export { default as MenuBurgerIcon } from "./MenuBurgerIcon.vue"
15
16
  export { default as MinusSignIcon } from "./MinusSignIcon.vue"
16
17
  export { default as PlusSignIcon } from "./PlusSignIcon.vue"
17
18
  export { default as SearchIcon } from "./SearchIcon.vue"
18
19
  export { default as SettingsBoltIcon } from "./SettingsBoltIcon.vue"
20
+ export { default as ShoppingCardIcon } from "./ShoppingCardIcon.vue"
19
21
  export { default as VertDotsIcon } from "./VertDotsIcon.vue"
@@ -30,7 +30,7 @@
30
30
  <VcButton
31
31
  v-if="copyable"
32
32
  icon="far fa-copy"
33
- size="m"
33
+ icon-size="m"
34
34
  class="vc-field__copy-button"
35
35
  text
36
36
  @click="copy(modelValue)"
@@ -7,7 +7,12 @@ export interface AppMenuState {
7
7
  activeButtonId: string | null;
8
8
  }
9
9
 
10
- const { isExpanded: isSidebarExpanded, toggleExpanded: toggleSidebarExpanded } = useMenuExpanded();
10
+ const {
11
+ isExpanded: isSidebarExpanded,
12
+ toggleExpanded: toggleSidebarExpanded,
13
+ isHoverExpanded,
14
+ toggleHoverExpanded: toggleHoverExpandedFn,
15
+ } = useMenuExpanded();
11
16
 
12
17
  const state = ref<AppMenuState>({
13
18
  isSidebarExpanded,
@@ -20,6 +25,10 @@ export const useAppMenuState = () => {
20
25
  toggleSidebarExpanded();
21
26
  };
22
27
 
28
+ const toggleHoverExpanded = (shouldExpand?: boolean) => {
29
+ toggleHoverExpandedFn(shouldExpand);
30
+ };
31
+
23
32
  const toggleMenu = () => {
24
33
  state.value.isMenuOpen = !state.value.isMenuOpen;
25
34
  if (!state.value.isMenuOpen) {
@@ -44,6 +53,8 @@ export const useAppMenuState = () => {
44
53
  toggleSidebar,
45
54
  toggleMenu,
46
55
  setActiveButton,
56
+ toggleHoverExpanded,
57
+ isHoverExpanded,
47
58
  closeAll,
48
59
  };
49
60
  };
@@ -19,13 +19,12 @@ defineProps<{
19
19
  </script>
20
20
 
21
21
  <style lang="scss">
22
-
23
22
  .app-bar-content {
24
23
  @apply tw-flex tw-flex-col;
25
24
  height: calc(100% - var(--app-bar-height));
26
25
 
27
26
  &--collapsed {
28
- height: calc(100% - var(--app-bar-collapsed-height));
27
+ height: calc(100% - var(--app-bar-height));
29
28
  }
30
29
 
31
30
  &__main {
@@ -128,7 +128,7 @@ const hasUnread = computed(() => {
128
128
  @apply tw-flex tw-flex-row tw-items-center tw-justify-between tw-px-[var(--app-bar-padding)] tw-h-[var(--app-bar-height)] tw-py-[var(--app-bar-header-padding-top)];
129
129
 
130
130
  &--collapsed {
131
- @apply tw-flex-col tw-items-center tw-justify-between tw-border-0 tw-gap-[16px] tw-h-[var(--app-bar-collapsed-height)];
131
+ @apply tw-flex-col tw-items-center tw-justify-between tw-border-0 tw-gap-[16px];
132
132
  }
133
133
 
134
134
  &--mobile {