@vc-shell/framework 1.0.289 → 1.0.291

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 (178) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/core/composables/index.ts +1 -0
  3. package/core/composables/useTheme/index.ts +60 -0
  4. package/core/directives/loading/styles.css +6 -1
  5. package/dist/core/composables/index.d.ts +1 -0
  6. package/dist/core/composables/index.d.ts.map +1 -1
  7. package/dist/core/composables/useTheme/index.d.ts +11 -0
  8. package/dist/core/composables/useTheme/index.d.ts.map +1 -0
  9. package/dist/framework.js +27889 -27362
  10. package/dist/index.css +1 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/locales/en.json +6 -0
  13. package/dist/shared/components/app-bar-button/app-bar-button.vue.d.ts +56 -0
  14. package/dist/shared/components/app-bar-button/app-bar-button.vue.d.ts.map +1 -0
  15. package/dist/shared/components/app-bar-button/index.d.ts +2 -0
  16. package/dist/shared/components/app-bar-button/index.d.ts.map +1 -0
  17. package/dist/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts.map +1 -1
  18. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/index.d.ts.map +1 -1
  19. package/dist/shared/components/index.d.ts +3 -0
  20. package/dist/shared/components/index.d.ts.map +1 -1
  21. package/dist/shared/components/language-selector/language-selector.vue.d.ts.map +1 -1
  22. package/dist/shared/components/notification-dropdown/notification-dropdown.vue.d.ts.map +1 -1
  23. package/dist/shared/components/notification-template/notification-template.vue.d.ts.map +1 -1
  24. package/dist/shared/components/sidebar/index.d.ts +2 -0
  25. package/dist/shared/components/sidebar/index.d.ts.map +1 -0
  26. package/dist/shared/components/sidebar/sidebar.vue.d.ts +49 -0
  27. package/dist/shared/components/sidebar/sidebar.vue.d.ts.map +1 -0
  28. package/dist/shared/components/theme-selector/index.d.ts +2 -0
  29. package/dist/shared/components/theme-selector/index.d.ts.map +1 -0
  30. package/dist/shared/components/theme-selector/theme-selector.vue.d.ts +3 -0
  31. package/dist/shared/components/theme-selector/theme-selector.vue.d.ts.map +1 -0
  32. package/dist/shared/components/user-dropdown-button/index.d.ts +6 -0
  33. package/dist/shared/components/user-dropdown-button/index.d.ts.map +1 -1
  34. package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts +1 -0
  35. package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts.map +1 -1
  36. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts.map +1 -1
  37. package/dist/shared/modules/dynamic/types/index.d.ts +3 -0
  38. package/dist/shared/modules/dynamic/types/index.d.ts.map +1 -1
  39. package/dist/shared/pages/ChangePasswordPage/components/change-password/ChangePassword.vue.d.ts +16 -3
  40. package/dist/shared/pages/ChangePasswordPage/components/change-password/ChangePassword.vue.d.ts.map +1 -1
  41. package/dist/shared/pages/ChangePasswordPage/components/change-password/index.d.ts +7 -7
  42. package/dist/shared/pages/ChangePasswordPage/components/change-password/index.d.ts.map +1 -1
  43. package/dist/shared/pages/InvitePage/components/invite/Invite.vue.d.ts +24 -3
  44. package/dist/shared/pages/InvitePage/components/invite/Invite.vue.d.ts.map +1 -1
  45. package/dist/shared/pages/InvitePage/components/invite/index.d.ts +24 -1
  46. package/dist/shared/pages/InvitePage/components/invite/index.d.ts.map +1 -1
  47. package/dist/shared/pages/ResetPasswordPage/components/reset-password/ResetPassword.vue.d.ts +24 -3
  48. package/dist/shared/pages/ResetPasswordPage/components/reset-password/ResetPassword.vue.d.ts.map +1 -1
  49. package/dist/shared/pages/ResetPasswordPage/components/reset-password/index.d.ts +24 -1
  50. package/dist/shared/pages/ResetPasswordPage/components/reset-password/index.d.ts.map +1 -1
  51. package/dist/tailwind.config.d.ts +42 -15
  52. package/dist/tailwind.config.d.ts.map +1 -1
  53. package/dist/tsconfig.tsbuildinfo +1 -1
  54. package/dist/ui/components/atoms/vc-badge/vc-badge.vue.d.ts.map +1 -1
  55. package/dist/ui/components/atoms/vc-link/vc-link.vue.d.ts.map +1 -1
  56. package/dist/ui/components/atoms/vc-progress/vc-progress.vue.d.ts.map +1 -1
  57. package/dist/ui/components/atoms/vc-status/vc-status.vue.d.ts.map +1 -1
  58. package/dist/ui/components/atoms/vc-tooltip/vc-tooltip.vue.d.ts.map +1 -1
  59. package/dist/ui/components/atoms/vc-video/vc-video.vue.d.ts.map +1 -1
  60. package/dist/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue.d.ts.map +1 -1
  61. package/dist/ui/components/molecules/vc-checkbox/vc-checkbox.vue.d.ts.map +1 -1
  62. package/dist/ui/components/molecules/vc-field/_internal/vc-field-type/vc-field-type.vue.d.ts.map +1 -1
  63. package/dist/ui/components/molecules/vc-field/vc-field.vue.d.ts.map +1 -1
  64. package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts.map +1 -1
  65. package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts.map +1 -1
  66. package/dist/ui/components/molecules/vc-slider/vc-slider.vue.d.ts.map +1 -1
  67. 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
  68. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue.d.ts.map +1 -1
  69. package/dist/ui/components/organisms/vc-app/vc-app.stories.d.ts +26 -0
  70. package/dist/ui/components/organisms/vc-app/vc-app.stories.d.ts.map +1 -1
  71. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts +26 -0
  72. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts.map +1 -1
  73. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue.d.ts.map +1 -1
  74. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue.d.ts.map +1 -1
  75. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue.d.ts.map +1 -1
  76. package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-preview/vc-gallery-preview.vue.d.ts.map +1 -1
  77. package/dist/ui/components/organisms/vc-table/_internal/vc-table-add-new/vc-table-add-new.vue.d.ts.map +1 -1
  78. package/dist/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue.d.ts +1 -0
  79. package/dist/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue.d.ts.map +1 -1
  80. package/dist/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts.map +1 -1
  81. package/dist/ui/components/organisms/vc-table/_internal/vc-table-empty/vc-table-empty.vue.d.ts.map +1 -1
  82. package/dist/ui/components/organisms/vc-table/_internal/vc-table-filter/vc-table-filter.vue.d.ts +1 -0
  83. package/dist/ui/components/organisms/vc-table/_internal/vc-table-filter/vc-table-filter.vue.d.ts.map +1 -1
  84. package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-item/vc-table-mobile-item.vue.d.ts.map +1 -1
  85. package/dist/ui/components/organisms/vc-table/vc-table.stories.d.ts +15 -0
  86. package/dist/ui/components/organisms/vc-table/vc-table.stories.d.ts.map +1 -1
  87. package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts +3 -0
  88. package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
  89. package/package.json +4 -4
  90. package/shared/components/app-bar-button/app-bar-button.vue +169 -0
  91. package/shared/components/app-bar-button/index.ts +1 -0
  92. package/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue +138 -38
  93. package/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue +10 -1
  94. package/shared/components/blade-navigation/composables/useBladeNavigation/index.ts +55 -30
  95. package/shared/components/change-password/change-password.vue +7 -1
  96. package/shared/components/common/popup/vc-popup-error.vue +1 -1
  97. package/shared/components/common/popup/vc-popup-warning.vue +1 -1
  98. package/shared/components/index.ts +3 -0
  99. package/shared/components/language-selector/language-selector.vue +55 -39
  100. package/shared/components/notification-dropdown/_internal/notification/notification.vue +7 -1
  101. package/shared/components/notification-dropdown/notification-dropdown.vue +96 -83
  102. package/shared/components/notification-template/notification-template.vue +66 -22
  103. package/shared/components/notifications/styles/index.scss +1 -0
  104. package/shared/components/sidebar/index.ts +1 -0
  105. package/shared/components/sidebar/sidebar.vue +96 -0
  106. package/shared/components/theme-selector/index.ts +1 -0
  107. package/shared/components/theme-selector/theme-selector.vue +95 -0
  108. package/shared/components/user-dropdown-button/user-dropdown-button.vue +155 -86
  109. package/shared/modules/assets/components/assets-details/assets-details.vue +9 -2
  110. package/shared/modules/assets-manager/components/assets-manager/assets-manager.vue +16 -6
  111. package/shared/modules/dynamic/composables/useFilterBuilder/index.ts +1 -1
  112. package/shared/modules/dynamic/helpers/nodeBuilder.ts +1 -1
  113. package/shared/modules/dynamic/pages/dynamic-blade-form.vue +6 -2
  114. package/shared/modules/dynamic/pages/dynamic-blade-list.vue +16 -2
  115. package/shared/modules/dynamic/types/index.ts +3 -0
  116. package/shared/pages/ChangePasswordPage/components/change-password/ChangePassword.vue +14 -9
  117. package/shared/pages/InvitePage/components/invite/Invite.vue +59 -15
  118. package/shared/pages/LoginPage/components/login/Login.vue +78 -22
  119. package/shared/pages/ResetPasswordPage/components/reset-password/ResetPassword.vue +67 -15
  120. package/tailwind.config.ts +281 -15
  121. package/ui/components/atoms/vc-badge/vc-badge.vue +38 -23
  122. package/ui/components/atoms/vc-button/vc-button.vue +37 -34
  123. package/ui/components/atoms/vc-card/vc-card.vue +17 -11
  124. package/ui/components/atoms/vc-col/vc-col.vue +4 -6
  125. package/ui/components/atoms/vc-container/vc-container.vue +26 -8
  126. package/ui/components/atoms/vc-hint/vc-hint.vue +8 -2
  127. package/ui/components/atoms/vc-icon/vc-icon.vue +3 -3
  128. package/ui/components/atoms/vc-image/vc-image.vue +33 -9
  129. package/ui/components/atoms/vc-label/vc-label.vue +38 -9
  130. package/ui/components/atoms/vc-link/vc-link.vue +15 -8
  131. package/ui/components/atoms/vc-loading/vc-loading.vue +37 -8
  132. package/ui/components/atoms/vc-progress/vc-progress.vue +29 -21
  133. package/ui/components/atoms/vc-row/vc-row.vue +4 -2
  134. package/ui/components/atoms/vc-status/vc-status.vue +29 -20
  135. package/ui/components/atoms/vc-status-icon/vc-status-icon.vue +20 -3
  136. package/ui/components/atoms/vc-switch/vc-switch.vue +41 -17
  137. package/ui/components/atoms/vc-tooltip/vc-tooltip.vue +35 -9
  138. package/ui/components/atoms/vc-video/vc-video.vue +28 -6
  139. package/ui/components/atoms/vc-widget/vc-widget.vue +59 -28
  140. package/ui/components/molecules/vc-breadcrumbs/_internal/vc-breadcrumbs-item/vc-breadcrumbs-item.vue +29 -27
  141. package/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue +34 -11
  142. package/ui/components/molecules/vc-checkbox/vc-checkbox.vue +43 -21
  143. package/ui/components/molecules/vc-editor/vc-editor.vue +70 -32
  144. package/ui/components/molecules/vc-field/_internal/vc-field-type/vc-field-type.vue +32 -16
  145. package/ui/components/molecules/vc-field/vc-field.vue +36 -13
  146. package/ui/components/molecules/vc-file-upload/vc-file-upload.vue +75 -25
  147. package/ui/components/molecules/vc-input/vc-input.vue +279 -218
  148. package/ui/components/molecules/vc-input-currency/vc-input-currency.vue +24 -2
  149. package/ui/components/molecules/vc-multivalue/vc-multivalue.vue +102 -64
  150. package/ui/components/molecules/vc-notification/vc-notification.vue +40 -15
  151. package/ui/components/molecules/vc-pagination/vc-pagination.vue +19 -15
  152. package/ui/components/molecules/vc-radio-button/vc-radio-button.vue +18 -23
  153. package/ui/components/molecules/vc-rating/vc-rating.vue +9 -5
  154. package/ui/components/molecules/vc-select/vc-select.vue +211 -65
  155. package/ui/components/molecules/vc-slider/vc-slider.vue +32 -13
  156. package/ui/components/molecules/vc-textarea/vc-textarea.vue +17 -12
  157. package/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue +68 -14
  158. package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue +112 -122
  159. package/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue +213 -96
  160. package/ui/components/organisms/vc-app/vc-app.vue +41 -15
  161. package/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue +78 -30
  162. package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue +81 -59
  163. package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue +27 -13
  164. package/ui/components/organisms/vc-blade/vc-blade.vue +177 -46
  165. package/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue +40 -11
  166. package/ui/components/organisms/vc-gallery/_internal/vc-gallery-preview/vc-gallery-preview.vue +52 -18
  167. package/ui/components/organisms/vc-gallery/vc-gallery.vue +38 -6
  168. package/ui/components/organisms/vc-login-form/vc-login-form.vue +40 -14
  169. package/ui/components/organisms/vc-popup/vc-popup.vue +186 -44
  170. package/ui/components/organisms/vc-table/_internal/vc-table-add-new/vc-table-add-new.vue +25 -6
  171. package/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue +48 -12
  172. package/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue +130 -60
  173. package/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue +55 -7
  174. package/ui/components/organisms/vc-table/_internal/vc-table-counter/vc-table-counter.vue +17 -5
  175. package/ui/components/organisms/vc-table/_internal/vc-table-empty/vc-table-empty.vue +38 -6
  176. package/ui/components/organisms/vc-table/_internal/vc-table-filter/vc-table-filter.vue +111 -62
  177. package/ui/components/organisms/vc-table/_internal/vc-table-mobile-item/vc-table-mobile-item.vue +139 -46
  178. package/ui/components/organisms/vc-table/vc-table.vue +370 -128
@@ -1,60 +1,68 @@
1
1
  <template>
2
- <div
3
- class="vc-blade-toolbar-button"
4
- :class="{
5
- 'vc-blade-toolbar-button_disabled': disabled || isWaiting,
6
- 'tw-border-l tw-border-solid tw-border-[color:#eef0f2]': separator === 'left',
2
+ <VcTooltip
3
+ placement="bottom"
4
+ :offset="{
5
+ crossAxis: 0,
6
+ mainAxis: 0,
7
7
  }"
8
- :title="title"
9
- :data-test-id="id ?? 'vc-blade-toolbar-button'"
10
- @click="onClick"
11
8
  >
12
- <div ref="dropButtonRef">
13
- <div
14
- ref="bladeDropToggle"
15
- type="button"
16
- class="vc-blade-toolbar-button__wrap"
17
- >
18
- <VcIcon
19
- class="vc-blade-toolbar-button__icon"
20
- :icon="icon as string"
21
- size="m"
22
- ></VcIcon>
9
+ <template #tooltip>{{ title }}</template>
10
+ <div
11
+ class="vc-blade-toolbar-button"
12
+ :class="{
13
+ 'vc-blade-toolbar-button_disabled': disabled || isWaiting,
14
+ 'vc-blade-toolbar-button_separator-left': separator === 'left',
15
+ }"
16
+ :data-test-id="id ?? 'vc-blade-toolbar-button'"
17
+ @click="onClick"
18
+ >
19
+ <div ref="dropButtonRef">
23
20
  <div
24
- v-if="isExpanded"
25
- class="vc-blade-toolbar-button__title"
26
- >
27
- {{ title }}
28
- </div>
29
- </div>
30
- <teleport to="body">
31
- <div
32
- v-if="isDropActive"
33
- ref="bladeDropRef"
34
- class="vc-blade-toolbar-button__dropdown"
35
- :style="dropStyle"
21
+ ref="bladeDropToggle"
22
+ type="button"
23
+ class="vc-blade-toolbar-button__wrap"
36
24
  >
25
+ <VcIcon
26
+ class="vc-blade-toolbar-button__icon"
27
+ :icon="icon as string"
28
+ size="m"
29
+ ></VcIcon>
37
30
  <div
38
- v-for="(item, i) in dropdownItems"
39
- :key="i"
40
- class="vc-blade-toolbar-button__dropdown-item"
41
- @click="handleDropItemClick(item)"
31
+ v-if="isExpanded"
32
+ class="vc-blade-toolbar-button__title"
42
33
  >
43
- <VcIcon
44
- :icon="item.icon"
45
- class="vc-blade-toolbar-button__dropdown-item-icon"
46
- />
47
- {{ item.title }}
34
+ {{ title }}
48
35
  </div>
49
36
  </div>
50
- </teleport>
37
+ <teleport to="body">
38
+ <div
39
+ v-if="isDropActive"
40
+ ref="bladeDropRef"
41
+ class="vc-blade-toolbar-button__dropdown"
42
+ :style="dropStyle"
43
+ >
44
+ <div
45
+ v-for="(item, i) in dropdownItems"
46
+ :key="i"
47
+ class="vc-blade-toolbar-button__dropdown-item"
48
+ @click="handleDropItemClick(item)"
49
+ >
50
+ <VcIcon
51
+ :icon="item.icon"
52
+ class="vc-blade-toolbar-button__dropdown-item-icon"
53
+ />
54
+ {{ item.title }}
55
+ </div>
56
+ </div>
57
+ </teleport>
58
+ </div>
51
59
  </div>
52
- </div>
60
+ </VcTooltip>
53
61
  </template>
54
62
 
55
63
  <script lang="ts" setup>
56
64
  import { ref, computed, nextTick } from "vue";
57
- import { VcIcon } from "./../../../../../../";
65
+ import { VcIcon, VcTooltip } from "./../../../../../../";
58
66
  import { offset, computePosition, ComputePositionReturn } from "@floating-ui/vue";
59
67
  import { IBladeDropdownItem } from "./../../../../../../../../core/types";
60
68
 
@@ -146,17 +154,26 @@ function handleDropItemClick(item: IBladeDropdownItem) {
146
154
 
147
155
  <style lang="scss">
148
156
  :root {
149
- --blade-toolbar-button-title-color: #465769;
150
- --blade-toolbar-button-title-color-hover: #465769;
151
- --blade-toolbar-button-title-color-disabled: #9fa2a6;
157
+ --blade-toolbar-button-title-color: var(--base-text-color, var(--neutrals-950));
158
+ --blade-toolbar-button-title-color-hover: var(--base-text-color, var(--neutrals-950));
159
+ --blade-toolbar-button-title-color-disabled: var(--neutrals-400);
160
+
161
+ --blade-toolbar-button-icon-color: var(--primary-500);
162
+ --blade-toolbar-button-icon-color-hover: var(--primary-600);
163
+ --blade-toolbar-button-icon-color-disabled: var(--neutrals-400);
164
+
165
+ --blade-toolbar-button-background-color: var(--additional-50);
166
+ --blade-toolbar-button-background-color-hover: var(--additional-50);
167
+ --blade-toolbar-button-background-color-disabled: var(--additional-50);
152
168
 
153
- --blade-toolbar-button-icon-color: #319ed4;
154
- --blade-toolbar-button-icon-color-hover: #257fad;
155
- --blade-toolbar-button-icon-color-disabled: #d2d4d7;
169
+ --blade-toolbar-button-border-color: var(--base-border-color, var(--neutrals-200));
156
170
 
157
- --blade-toolbar-button-background-color: var(--blade-toolbar-background-color);
158
- --blade-toolbar-button-background-color-hover: var(--blade-toolbar-background-color);
159
- --blade-toolbar-button-background-color-disabled: var(--blade-toolbar-background-color);
171
+ --blade-toolbar-shadow-color: var(--secondary-200);
172
+ --blade-toolbar-shadow: 1px 1px 22px rgb(from var(--blade-toolbar-shadow-color) r g b / 20%);
173
+
174
+ --blade-toolbar-dropdown-background-color: var(--additional-50);
175
+ --blade-toolbar-dropdown-item-background-color: var(--additional-50);
176
+ --blade-toolbar-dropdown-item-text-color: var(--additional-950);
160
177
  }
161
178
 
162
179
  .vc-blade-toolbar-button {
@@ -167,7 +184,7 @@ function handleDropItemClick(item: IBladeDropdownItem) {
167
184
  }
168
185
 
169
186
  &__title {
170
- @apply tw-text-sm tw-whitespace-nowrap tw-mt-1 tw-text-[color:var(--blade-toolbar-button-title-color)];
187
+ @apply tw-text-xs tw-whitespace-nowrap tw-mt-1 tw-text-[color:var(--blade-toolbar-button-title-color)];
171
188
  }
172
189
 
173
190
  &__icon {
@@ -175,18 +192,19 @@ function handleDropItemClick(item: IBladeDropdownItem) {
175
192
  }
176
193
 
177
194
  &__dropdown {
178
- @apply tw-absolute tw-bg-white tw-z-[9999] tw-shadow-[1px_1px_22px_rgba(126,142,157,0.2)];
195
+ @apply tw-absolute tw-bg-[color:var(--blade-toolbar-dropdown-background-color)] tw-z-[9999] [box-shadow:var(--blade-toolbar-shadow)];
179
196
  }
180
197
 
181
198
  &__dropdown-item {
182
- @apply tw-p-3 tw-text-lg tw-text-black tw-border-l tw-border-solid
183
- tw-border-l-[#eef0f2] tw-border-b tw-border-b-[#eef0f2]
184
- tw-bg-white tw-cursor-pointer tw-flex tw-flex-row tw-items-center
185
- hover:tw-bg-[#eff7fc];
199
+ @apply tw-p-3 tw-text-lg tw-text-[color:var(--blade-toolbar-dropdown-item-text-color)] tw-border-l tw-border-solid
200
+ tw-border-l-[color:var(--blade-toolbar-button-border-color)] tw-border-b
201
+ tw-border-b-[color:var(--blade-toolbar-button-border-color)]
202
+ tw-bg-[color:var(--blade-toolbar-dropdown-item-background-color)] tw-cursor-pointer tw-flex tw-flex-row tw-items-center
203
+ hover:tw-bg-[color:var(--blade-toolbar-button-background-color-hover)];
186
204
  }
187
205
 
188
206
  &__dropdown-item-icon {
189
- @apply tw-text-[#a9bfd2] tw-mr-2;
207
+ @apply tw-text-[color:var(--blade-toolbar-button-icon-color)] tw-mr-2;
190
208
  }
191
209
 
192
210
  &:hover {
@@ -213,5 +231,9 @@ function handleDropItemClick(item: IBladeDropdownItem) {
213
231
  @apply tw-text-[color:var(--blade-toolbar-button-icon-color-disabled)];
214
232
  }
215
233
  }
234
+
235
+ &.vc-blade-toolbar-button_separator-left {
236
+ @apply tw-border-l tw-border-solid tw-border-[color:var(--blade-toolbar-button-border-color)];
237
+ }
216
238
  }
217
239
  </style>
@@ -1,10 +1,10 @@
1
1
  <template>
2
2
  <div
3
3
  v-if="isToolbarVisible()"
4
- class="tw-h-[var(--blade-toolbar-height)] tw-bg-[color:var(--blade-toolbar-background-color)] tw-border-b-[color:#eaedf3] tw-border-solid tw-border-b tw-flex tw-box-border tw-w-full tw-content-center tw-items-stretch tw-shrink-0"
5
- :class="{ '!tw-h-[var(--blade-toolbar-height-expanded)]': isExpanded }"
4
+ class="vc-blade-toolbar"
5
+ :class="{ 'vc-blade-toolbar--expanded': isExpanded }"
6
6
  >
7
- <div class="tw-grow tw-basis-0 tw-flex tw-content-start tw-items-center tw-overflow-x-auto tw-px-2">
7
+ <div class="vc-blade-toolbar__content">
8
8
  <template
9
9
  v-for="item in items"
10
10
  :key="item.id"
@@ -23,7 +23,7 @@
23
23
  </template>
24
24
  </div>
25
25
  <VcIcon
26
- class="tw-self-center tw-justify-self-center tw-text-[#a1c0d4] tw-cursor-pointer tw-mr-4 hover:tw-text-[#7ea8c4]"
26
+ class="vc-blade-toolbar__icon"
27
27
  :icon="`fas fa-chevron-${isExpanded ? 'up' : 'down'}`"
28
28
  @click="toggleToolbar"
29
29
  ></VcIcon>
@@ -32,9 +32,10 @@
32
32
 
33
33
  <script lang="ts" setup>
34
34
  import { IBladeToolbar } from "./../../../../../../core/types";
35
- import { ref, unref } from "vue";
35
+ import { unref } from "vue";
36
36
  import VcBladeToolbarButton from "./_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue";
37
37
  import { VcIcon } from "./../../../../";
38
+ import { useLocalStorage } from "@vueuse/core";
38
39
 
39
40
  export interface Props {
40
41
  items: IBladeToolbar[];
@@ -44,16 +45,10 @@ const props = withDefaults(defineProps<Props>(), {
44
45
  items: () => [],
45
46
  });
46
47
 
47
- const isExpanded = ref(true);
48
- try {
49
- isExpanded.value = localStorage.getItem("VC_BLADE_TOOLBAR_IS_EXPANDED") === "true";
50
- } catch (err) {
51
- isExpanded.value = true;
52
- }
48
+ const isExpanded = useLocalStorage("VC_BLADE_TOOLBAR_IS_EXPANDED", true);
53
49
 
54
50
  function toggleToolbar() {
55
51
  isExpanded.value = !isExpanded.value;
56
- localStorage.setItem("VC_BLADE_TOOLBAR_IS_EXPANDED", isExpanded.value.toString());
57
52
  }
58
53
 
59
54
  function isToolbarVisible() {
@@ -68,6 +63,25 @@ function isToolbarVisible() {
68
63
  :root {
69
64
  --blade-toolbar-height: 36px;
70
65
  --blade-toolbar-height-expanded: 50px;
71
- --blade-toolbar-background-color: #ffffff;
66
+ --blade-toolbar-background-color: var(--additional-50);
67
+ --blade-toolbar-border-color: var(--base-border-color, var(--neutrals-200));
68
+ --blade-toolbar-icon-color: var(--primary-500);
69
+ --blade-toolbar-icon-hover-color: var(--primary-600);
70
+ }
71
+
72
+ .vc-blade-toolbar {
73
+ @apply tw-h-[var(--blade-toolbar-height)] tw-bg-[color:var(--blade-toolbar-background-color)] tw-border-b-[color:var(--blade-toolbar-border-color)] tw-border-solid tw-border-b tw-flex tw-box-border tw-w-full tw-content-center tw-items-stretch tw-shrink-0;
74
+
75
+ &--expanded {
76
+ @apply tw-h-[var(--blade-toolbar-height-expanded)] #{!important};
77
+ }
78
+
79
+ &__content {
80
+ @apply tw-grow tw-basis-0 tw-flex tw-content-start tw-items-center tw-overflow-x-auto tw-px-2;
81
+ }
82
+
83
+ &__icon {
84
+ @apply tw-self-center tw-justify-self-center tw-text-[color:var(--blade-toolbar-icon-color)] tw-cursor-pointer tw-mr-4 hover:tw-text-[color:var(--blade-toolbar-icon-hover-color)];
85
+ }
72
86
  }
73
87
  </style>
@@ -1,13 +1,12 @@
1
1
  <template>
2
2
  <div
3
- class="vc-blade tw-relative tw-flex tw-shrink-0 tw-flex-col tw-bg-[color:var(--blade-background-color)] tw-rounded-[var(--blade-border-radius)] tw-shadow-[2px_2px_8px_rgba(54,84,117,0.14)] tw-my-4 tw-mx-2 tw-overflow-hidden tw-transition-[width] tw-duration-200"
3
+ class="vc-blade"
4
4
  :class="[
5
5
  $attrs.class,
6
6
  {
7
- '!tw-w-full': $isMobile.value,
8
- '!tw-w-full !tw-shrink': expanded,
9
- '!tw-absolute !tw-z-[2] !tw-top-0 !tw-bottom-0 !tw-left-0 ![width:-webkit-fill-available] !tw-shrink':
10
- maximized,
7
+ 'vc-blade--mobile': $isMobile.value,
8
+ 'vc-blade--expanded': expanded,
9
+ 'vc-blade--maximized': maximized,
11
10
  },
12
11
  ]"
13
12
  :style="{ width: typeof width === 'number' ? `${width}px` : width }"
@@ -15,7 +14,7 @@
15
14
  <!-- Init blade header -->
16
15
  <VcBladeHeader
17
16
  v-if="!$isMobile.value || closable"
18
- class="tw-shrink-0"
17
+ class="vc-blade__header"
19
18
  :maximized="maximized"
20
19
  :expandable="expandable"
21
20
  :closable="closable"
@@ -37,52 +36,51 @@
37
36
 
38
37
  <!-- Show error message -->
39
38
  <template v-if="error">
40
- <div class="tw-text-white tw-p-2 tw-flex tw-flex-row tw-items-center tw-bg-[color:var(--blade-color-error)]">
39
+ <div class="vc-blade__error">
41
40
  <VcIcon
42
41
  size="s"
43
42
  icon="fas fa-exclamation-triangle"
44
43
  />
45
- <div class="tw-line-clamp-1 tw-w-full tw-mx-2">{{ error }}</div>
44
+ <div class="vc-blade__error-text">{{ error }}</div>
46
45
  <VcButton
47
46
  text
48
- class="tw-shrink-0 tw-opacity-80 tw-text-white hover:!tw-opacity-100 hover:!tw-text-white"
47
+ class="vc-blade__error-button"
49
48
  @click="open()"
50
- >{{ t("COMPONENTS.ORGANISMS.VC_BLADE.SEE_DETAILS") }}</VcButton
51
49
  >
50
+ {{ t("COMPONENTS.ORGANISMS.VC_BLADE.SEE_DETAILS") }}
51
+ </VcButton>
52
52
  </div>
53
53
  </template>
54
54
 
55
55
  <!-- Unsaved changes -->
56
56
  <template v-if="typeof modified !== 'undefined' ? modified : false">
57
- <div
58
- class="tw-text-white tw-px-2 tw-py-1 tw-flex tw-flex-row tw-items-center tw-bg-[color:var(--blade-color-unsaved-changes)]"
59
- >
57
+ <div class="vc-blade__unsaved-changes">
60
58
  <VcIcon
61
59
  size="s"
62
60
  icon="fas fa-info-circle"
63
61
  />
64
- <div class="tw-line-clamp-1 tw-w-full tw-ml-2">{{ t("COMPONENTS.ORGANISMS.VC_BLADE.UNSAVED_CHANGES") }}</div>
62
+ <div class="vc-blade__unsaved-changes-text">
63
+ {{ t("COMPONENTS.ORGANISMS.VC_BLADE.UNSAVED_CHANGES") }}
64
+ </div>
65
65
  </div>
66
66
  </template>
67
67
 
68
68
  <!-- Set up blade toolbar -->
69
69
  <VcBladeToolbar
70
- class="tw-shrink-0"
70
+ class="vc-blade__toolbar"
71
71
  :items="toolbarItems"
72
72
  ></VcBladeToolbar>
73
73
 
74
- <div class="tw-flex-1 tw-overflow-auto">
74
+ <div class="vc-blade__content">
75
75
  <div
76
- class="tw-flex tw-flex-row tw-h-full"
77
- :class="{
78
- 'tw-flex-col': $isMobile.value,
79
- }"
76
+ class="vc-blade__main"
77
+ :class="{ 'vc-blade__main--mobile': $isMobile.value }"
80
78
  >
81
79
  <div
82
- class="tw-flex tw-flex-auto tw-flex-col"
80
+ class="vc-blade__slot"
83
81
  :class="{
84
- 'tw-w-0': $isDesktop.value,
85
- 'tw-h-0': $isMobile.value,
82
+ 'vc-blade__slot--desktop': $isDesktop.value,
83
+ 'vc-blade__slot--mobile': $isMobile.value,
86
84
  }"
87
85
  >
88
86
  <slot></slot>
@@ -91,20 +89,22 @@
91
89
  <div
92
90
  v-show="$slots['widgets'] && !isWidgetContainerEmpty"
93
91
  ref="widgetsRef"
94
- class="vc-blade__widgets tw-flex"
95
- :class="{
96
- 'tw-border-l tw-border-solid tw-border-l-[#eaedf3]': $isDesktop.value,
97
- 'tw-w-[var(--blade-widgets-width)] tw-flex-col': $isDesktop.value && !isExpanded,
98
- 'tw-w-[var(--blade-widgets-width-expanded)] tw-flex-col': $isDesktop.value && isExpanded,
99
- 'tw-w-auto tw-border-t tw-border-solid tw-border-t-[#eaedf3] tw-flex-row': $isMobile.value,
100
- }"
92
+ class="vc-blade__widgets"
93
+ :class="[
94
+ {
95
+ 'vc-blade__widgets--desktop': $isDesktop.value,
96
+ 'vc-blade__widgets--not-expanded': $isDesktop.value && !isExpanded,
97
+ 'vc-blade__widgets--expanded': $isDesktop.value && isExpanded,
98
+ 'vc-blade__widgets--mobile': $isMobile.value,
99
+ },
100
+ ]"
101
101
  >
102
102
  <div
103
103
  ref="widgetsContainerRef"
104
- class="vc-blade__widget-container tw-flex tw-overflow-y-auto"
104
+ class="vc-blade__widget-container"
105
105
  :class="{
106
- 'tw-flex-col tw-overflow-x-clip': $isDesktop.value,
107
- 'tw-flex-row': $isMobile.value,
106
+ 'vc-blade__widget-container--desktop': $isDesktop.value,
107
+ 'vc-blade__widget-container--mobile': $isMobile.value,
108
108
  }"
109
109
  >
110
110
  <slot
@@ -114,16 +114,16 @@
114
114
  </div>
115
115
 
116
116
  <div
117
- class="tw-flex tw-flex-auto"
117
+ class="vc-blade__widget-toggle"
118
118
  :class="{
119
- 'tw-flex-col tw-justify-end': $isDesktop.value,
120
- 'tw-w-12 tw-max-w-12 tw-bg-white tw-items-center tw-justify-center tw-px-4 tw-ml-auto': $isMobile.value,
119
+ 'vc-blade__widget-toggle--desktop': $isDesktop.value,
120
+ 'vc-blade__widget-toggle--mobile': $isMobile.value,
121
121
  }"
122
122
  >
123
123
  <VcIcon
124
- class="tw-self-center tw-justify-self-center tw-text-[#a1c0d4] tw-cursor-pointer hover:tw-text-[#7ea8c4]"
124
+ class="vc-blade__toggle-icon"
125
125
  :class="{
126
- 'tw-mb-4': $isDesktop.value,
126
+ 'vc-blade__toggle-icon--desktop': $isDesktop.value,
127
127
  }"
128
128
  :icon="`fas fa-chevron-${$isDesktop.value ? (isExpanded ? 'right' : 'left') : isExpanded ? 'up' : 'down'}`"
129
129
  @click="toggleWidgets"
@@ -183,11 +183,12 @@ defineSlots<{
183
183
  }>();
184
184
 
185
185
  defineEmits<Emits>();
186
+
186
187
  const attrs = useAttrs();
187
188
  const { maximized, error }: { maximized?: Ref<boolean>; error?: Ref<string> } = toRefs(reactive(attrs));
188
189
  const { t } = useI18n({ useScope: "global" });
189
- const widgetsRef = ref();
190
- const widgetsContainerRef = ref();
190
+ const widgetsRef = ref<HTMLElement | null>(null);
191
+ const widgetsContainerRef = ref<HTMLElement | null>(null);
191
192
 
192
193
  const isExpanded = useLocalStorage("VC_BLADE_WIDGETS_IS_EXPANDED", true);
193
194
 
@@ -203,13 +204,13 @@ const checkEmpty = (el: HTMLElement) => {
203
204
 
204
205
  onMounted(() => {
205
206
  if (widgetsRef.value) {
206
- checkEmpty(widgetsContainerRef.value);
207
+ checkEmpty(widgetsContainerRef.value!);
207
208
  }
208
209
  });
209
210
 
210
211
  onUpdated(() => {
211
212
  if (widgetsRef.value) {
212
- checkEmpty(widgetsContainerRef.value);
213
+ checkEmpty(widgetsContainerRef.value!);
213
214
  }
214
215
  });
215
216
 
@@ -226,14 +227,144 @@ const { open } = usePopup({
226
227
 
227
228
  <style lang="scss">
228
229
  :root {
229
- --blade-background-color: #ffffff;
230
+ --blade-background-color: var(--additional-50);
230
231
  --blade-border-radius: 6px;
231
- --blade-color-error: #f14e4e;
232
- --blade-color-unsaved-changes: #82a6bd;
233
- --blade-color-unsaved-changes: #82a6bd;
232
+ --blade-color-error: var(--base-error-color, var(--danger-500));
233
+ --blade-color-unsaved-changes: var(--secondary-600);
234
+
235
+ --blade-border-color: var(--base-border-color, var(--neutrals-200));
236
+ --blade-icon-color: var(--secondary-400);
237
+ --blade-icon-hover-color: var(--secondary-500);
234
238
 
235
239
  --blade-widgets-width: 50px;
236
240
  --blade-widgets-width-expanded: 120px;
241
+
242
+ --blade-shadow-color: var(--primary-700);
243
+ --blade-shadow: 2px 2px 8px rgb(from var(--blade-shadow-color) r g b / 14%);
244
+
245
+ --blade-text-color: var(--additional-50);
246
+ }
247
+
248
+ .vc-blade {
249
+ @apply tw-relative tw-flex tw-shrink-0 tw-flex-col [box-shadow:var(--blade-shadow)] tw-my-4 tw-mx-2 tw-overflow-hidden tw-transition-[width] tw-duration-200;
250
+ @apply tw-bg-[color:var(--blade-background-color)] tw-rounded-[var(--blade-border-radius)];
251
+
252
+ &--mobile {
253
+ @apply tw-w-full #{!important};
254
+ }
255
+
256
+ &--expanded {
257
+ @apply tw-w-full tw-shrink #{!important};
258
+ }
259
+
260
+ &--maximized {
261
+ @apply tw-absolute tw-z-[2] tw-top-0 tw-bottom-0 tw-left-0 tw-shrink #{!important};
262
+ width: -webkit-fill-available !important;
263
+ }
264
+
265
+ &__header {
266
+ @apply tw-shrink-0;
267
+ }
268
+
269
+ &__error {
270
+ @apply tw-text-[color:var(--blade-text-color)] tw-p-2 tw-flex tw-flex-row tw-items-center tw-bg-[color:var(--blade-color-error)];
271
+ }
272
+
273
+ &__error-text {
274
+ @apply tw-line-clamp-1 tw-w-full tw-mx-2;
275
+ }
276
+
277
+ &__error-button {
278
+ @apply tw-shrink-0 tw-opacity-80 tw-text-[color:var(--blade-text-color)] hover:tw-opacity-100 hover:tw-text-[color:var(--blade-text-color)];
279
+ }
280
+
281
+ &__unsaved-changes {
282
+ @apply tw-text-[color:var(--blade-text-color)] tw-px-2 tw-py-1 tw-flex tw-flex-row tw-items-center tw-bg-[color:var(--blade-color-unsaved-changes)];
283
+ }
284
+
285
+ &__unsaved-changes-text {
286
+ @apply tw-line-clamp-1 tw-w-full tw-ml-2;
287
+ }
288
+
289
+ &__toolbar {
290
+ @apply tw-shrink-0;
291
+ }
292
+
293
+ &__content {
294
+ @apply tw-flex-1 tw-overflow-auto;
295
+ }
296
+
297
+ &__main {
298
+ @apply tw-flex tw-flex-row tw-h-full;
299
+
300
+ &--mobile {
301
+ @apply tw-flex-col;
302
+ }
303
+ }
304
+
305
+ &__slot {
306
+ @apply tw-flex tw-flex-auto tw-flex-col;
307
+
308
+ &--desktop {
309
+ @apply tw-w-0;
310
+ }
311
+
312
+ &--mobile {
313
+ @apply tw-h-0;
314
+ }
315
+ }
316
+
317
+ &__widgets {
318
+ @apply tw-flex;
319
+
320
+ &--desktop {
321
+ @apply tw-border-l tw-border-solid tw-border-l-[color:var(--blade-border-color)];
322
+ }
323
+
324
+ &--not-expanded {
325
+ @apply tw-w-12 tw-flex-col;
326
+ }
327
+
328
+ &--expanded {
329
+ @apply tw-w-32 tw-flex-col;
330
+ }
331
+
332
+ &--mobile {
333
+ @apply tw-w-auto tw-border-t tw-border-solid tw-border-t-[color:var(--blade-border-color)] tw-flex-row;
334
+ }
335
+ }
336
+
337
+ &__widget-container {
338
+ @apply tw-flex tw-overflow-y-auto;
339
+
340
+ &--desktop {
341
+ @apply tw-flex-col tw-overflow-x-clip;
342
+ }
343
+
344
+ &--mobile {
345
+ @apply tw-flex-row;
346
+ }
347
+ }
348
+
349
+ &__widget-toggle {
350
+ @apply tw-flex tw-flex-auto;
351
+
352
+ &--desktop {
353
+ @apply tw-flex-col tw-justify-end;
354
+ }
355
+
356
+ &--mobile {
357
+ @apply tw-w-12 tw-max-w-12 tw-bg-[color:var(--blade-background-color)] tw-items-center tw-justify-center tw-px-4 tw-ml-auto;
358
+ }
359
+ }
360
+
361
+ &__toggle-icon {
362
+ @apply tw-self-center tw-justify-self-center tw-text-[color:var(--blade-icon-color)] tw-cursor-pointer hover:tw-text-[color:var(--blade-icon-hover-color)];
363
+ }
364
+
365
+ &__toggle-icon--desktop {
366
+ @apply tw-mb-4;
367
+ }
237
368
  }
238
369
 
239
370
  .vc-app_mobile .vc-blade {