@vc-shell/framework 1.0.234 → 1.0.236

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 (54) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/core/composables/useMenuService/index.ts +14 -10
  3. package/core/types/index.ts +5 -0
  4. package/dist/core/composables/useMenuService/index.d.ts.map +1 -1
  5. package/dist/core/types/index.d.ts +5 -0
  6. package/dist/core/types/index.d.ts.map +1 -1
  7. package/dist/framework.js +4534 -4488
  8. package/dist/index.css +1 -1
  9. package/dist/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts.map +1 -1
  10. package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts.map +1 -1
  11. package/dist/shared/modules/dynamic/types/index.d.ts +7 -0
  12. package/dist/shared/modules/dynamic/types/index.d.ts.map +1 -1
  13. package/dist/ui/components/atoms/vc-container/vc-container.vue.d.ts +2 -1
  14. package/dist/ui/components/atoms/vc-container/vc-container.vue.d.ts.map +1 -1
  15. package/dist/ui/components/atoms/vc-widget/vc-widget.vue.d.ts.map +1 -1
  16. package/dist/ui/components/molecules/vc-checkbox/index.d.ts +31 -0
  17. package/dist/ui/components/molecules/vc-checkbox/index.d.ts.map +1 -1
  18. package/dist/ui/components/molecules/vc-checkbox/vc-checkbox.stories.d.ts +310 -0
  19. package/dist/ui/components/molecules/vc-checkbox/vc-checkbox.stories.d.ts.map +1 -1
  20. package/dist/ui/components/molecules/vc-checkbox/vc-checkbox.vue.d.ts +5 -0
  21. package/dist/ui/components/molecules/vc-checkbox/vc-checkbox.vue.d.ts.map +1 -1
  22. package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.stories.d.ts +24 -0
  23. package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.stories.d.ts.map +1 -1
  24. package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts +4 -0
  25. package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts.map +1 -1
  26. 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
  27. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue.d.ts.map +1 -1
  28. package/dist/ui/components/organisms/vc-gallery/vc-gallery.stories.d.ts +12 -0
  29. package/dist/ui/components/organisms/vc-gallery/vc-gallery.stories.d.ts.map +1 -1
  30. package/dist/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts +4 -0
  31. package/dist/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts.map +1 -1
  32. package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
  33. package/package.json +4 -4
  34. package/shared/components/change-password/change-password.vue +3 -30
  35. package/shared/components/notification-template/notification-template.vue +1 -1
  36. package/shared/modules/assets-manager/components/assets-manager/assets-manager.vue +6 -16
  37. package/shared/modules/dynamic/components/fields/GalleryField.ts +11 -1
  38. package/shared/modules/dynamic/pages/dynamic-blade-form.vue +4 -4
  39. package/shared/modules/dynamic/types/index.ts +7 -0
  40. package/ui/components/atoms/vc-container/vc-container.vue +10 -29
  41. package/ui/components/atoms/vc-widget/vc-widget.vue +4 -1
  42. package/ui/components/molecules/vc-breadcrumbs/_internal/vc-breadcrumbs-item/vc-breadcrumbs-item.vue +1 -1
  43. package/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue +4 -1
  44. package/ui/components/molecules/vc-checkbox/vc-checkbox.vue +26 -9
  45. package/ui/components/molecules/vc-editor/vc-editor.vue +0 -18
  46. package/ui/components/molecules/vc-file-upload/vc-file-upload.vue +8 -2
  47. package/ui/components/molecules/vc-notification/vc-notification.vue +0 -22
  48. package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue +39 -25
  49. package/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue +13 -8
  50. package/ui/components/organisms/vc-blade/vc-blade.vue +2 -2
  51. package/ui/components/organisms/vc-gallery/vc-gallery.vue +5 -0
  52. package/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue +1 -1
  53. package/ui/components/organisms/vc-table/_internal/vc-table-mobile-item/vc-table-mobile-item.vue +1 -1
  54. package/ui/components/organisms/vc-table/vc-table.vue +49 -31
@@ -1,7 +1,12 @@
1
1
  <template>
2
2
  <div
3
3
  class="vc-checkbox"
4
- :class="{ 'vc-checkbox_disabled': disabled }"
4
+ :class="{
5
+ 'vc-checkbox_disabled': disabled,
6
+ 'vc-checkbox_size-small': size === 's',
7
+ 'vc-checkbox_size-medium': size === 'm',
8
+ 'vc-checkbox_size-large': size === 'l',
9
+ }"
5
10
  >
6
11
  <!-- Input label -->
7
12
  <VcLabel
@@ -66,13 +71,15 @@ export interface Props {
66
71
  falseValue?: boolean;
67
72
  label?: string;
68
73
  tooltip?: string;
74
+ size?: "s" | "m" | "l";
75
+ outline?: boolean;
69
76
  }
70
77
 
71
78
  export interface Emits {
72
79
  (event: "update:modelValue", value: boolean): void;
73
80
  }
74
81
 
75
- const props = withDefaults(defineProps<Props>(), { name: "Field", trueValue: true, falseValue: false });
82
+ const props = withDefaults(defineProps<Props>(), { name: "Field", trueValue: true, falseValue: false, size: "s" });
76
83
  const emit = defineEmits<Emits>();
77
84
 
78
85
  defineSlots<{
@@ -92,7 +99,9 @@ const value = computed({
92
99
 
93
100
  <style lang="scss">
94
101
  :root {
95
- --checkbox-size: 14px;
102
+ --checkbox-size-small: 14px;
103
+ --checkbox-size-medium: 18px;
104
+ --checkbox-size-large: 24px;
96
105
  --checkbox-border-radius: 2px;
97
106
  --checkbox-background-color: #ffffff;
98
107
  --checkbox-color-error: #f14e4e;
@@ -109,6 +118,14 @@ const value = computed({
109
118
  --checkbox-error: #f14e4e;
110
119
  }
111
120
 
121
+ $sizes: small, medium, large;
122
+
123
+ @each $size in $sizes {
124
+ .vc-checkbox_size-#{$size} {
125
+ --checkbox-size: var(--checkbox-size-#{$size});
126
+ }
127
+ }
128
+
112
129
  .vc-checkbox {
113
130
  input[type="checkbox"] {
114
131
  border-radius: 2px;
@@ -165,14 +182,14 @@ const value = computed({
165
182
  content: "";
166
183
  display: block;
167
184
  position: absolute;
168
- width: 5px;
169
- height: 9px;
170
- border: 2px solid var(--checkbox-background);
185
+ width: calc(var(--checkbox-size) * 0.35);
186
+ height: calc(var(--checkbox-size) * 0.6);
187
+ border: calc(var(--checkbox-size) * 0.1) solid var(--checkbox-background);
171
188
  border-top: 0;
172
189
  border-left: 0;
173
- left: 4px;
174
- top: 1px;
175
- transform: rotate(var(--r, 20deg));
190
+ left: calc(var(--checkbox-size) * 0.25);
191
+ top: calc(var(--checkbox-size) * 0.1);
192
+ transform: rotate(var(--r, 43deg));
176
193
  opacity: var(--checkbox-after-opacity, 0);
177
194
  transition:
178
195
  transform var(--checkbox-after-transform-duration, 0.3s) var(--checkbox-after-transform-ease, ease),
@@ -183,9 +183,6 @@ function onTextChange() {
183
183
  --editor-border-color: #d3dbe9;
184
184
  --editor-border-color-error: #f14e4e;
185
185
  --editor-placeholder-color: #a5a5a5;
186
-
187
- --editor-scroll-width: 8px;
188
- --editor-scroll-color-hover: #cce4f5;
189
186
  }
190
187
 
191
188
  .vc-editor {
@@ -194,21 +191,6 @@ function onTextChange() {
194
191
  }
195
192
 
196
193
  .quill-editor .ql-editor {
197
- &::-webkit-scrollbar {
198
- @apply tw-w-[var(--editor-scroll-width)] tw-bg-transparent;
199
- }
200
-
201
- &::-webkit-scrollbar-track {
202
- @apply tw-bg-transparent;
203
- }
204
-
205
- &::-webkit-scrollbar-thumb {
206
- @apply tw-bg-[color:var(--editor-scroll-color)]
207
- tw-rounded-[calc(var(--editor-scroll-width)/2)]
208
- tw-overflow-x-hidden
209
- hover:tw-bg-[color:var(--editor-scroll-color-hover)];
210
- }
211
-
212
194
  &.ql-blank:before {
213
195
  color: var(--textarea-placeholder-color);
214
196
  content: attr(data-placeholder);
@@ -24,10 +24,12 @@
24
24
  ></VcIcon>
25
25
 
26
26
  <div class="tw-text-[#9db0be] tw-text-center tw-text-lg tw-leading-lg tw-mt-4">
27
- <span>{{ t("COMPONENTS.MOLECULES.VC_FILE_UPLOAD.DRAG_HERE") }}</span
27
+ <span>{{ customText?.dragHere || t("COMPONENTS.MOLECULES.VC_FILE_UPLOAD.DRAG_HERE") }}</span
28
28
  >&nbsp;
29
29
  <br />
30
- <VcLink @click="toggleUploader">{{ t("COMPONENTS.MOLECULES.VC_FILE_UPLOAD.BROWSE") }}</VcLink>
30
+ <VcLink @click="toggleUploader">{{
31
+ customText?.browse || t("COMPONENTS.MOLECULES.VC_FILE_UPLOAD.BROWSE")
32
+ }}</VcLink>
31
33
  </div>
32
34
 
33
35
  <input
@@ -66,6 +68,10 @@ export interface Props {
66
68
  rules?: keyof IValidationRules | IValidationRules;
67
69
  name?: string;
68
70
  icon?: string;
71
+ customText?: {
72
+ dragHere: string;
73
+ browse: string;
74
+ };
69
75
  }
70
76
 
71
77
  export interface Emits {
@@ -129,11 +129,6 @@ function onMouseLeave() {
129
129
  --notification-error: #ef796f;
130
130
  --notification-success: #87b563;
131
131
  --notification-info: #bdd1df;
132
-
133
- --notification-scroll-color: #e1eff9;
134
- --notification-scroll-color-hover: #cce4f5;
135
- --notification-scroll-width: 8px;
136
- --notification-scroll-shadow: 0 3px 2px rgba(0, 0, 0, 0.1) inset, 0 -3px 2px rgba(0, 0, 0, 0.1) inset;
137
132
  }
138
133
 
139
134
  .vc-notification {
@@ -142,22 +137,5 @@ function onMouseLeave() {
142
137
  .vc-app_mobile {
143
138
  @apply tw-max-w-[80%];
144
139
  }
145
-
146
- &__content {
147
- &::-webkit-scrollbar {
148
- @apply tw-w-[var(--notification-scroll-width)] tw-bg-transparent;
149
- }
150
-
151
- &::-webkit-scrollbar-track {
152
- @apply tw-bg-transparent;
153
- }
154
-
155
- &::-webkit-scrollbar-thumb {
156
- @apply tw-bg-[color:var(--notification-scroll-color)]
157
- tw-rounded-[calc(var(--notification-scroll-width)/2)]
158
- tw-overflow-x-hidden
159
- hover:tw-bg-[color:var(--notification-scroll-color-hover)];
160
- }
161
- }
162
140
  }
163
141
  </style>
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div
3
- class="vc-app-menu-item"
3
+ class="vc-app-menu-item tw-flex"
4
4
  :class="[
5
5
  {
6
6
  'vc-app-menu-item_active': isMenuItemActive,
@@ -10,20 +10,12 @@
10
10
  ]"
11
11
  @click="onMenuItemClick"
12
12
  >
13
- <div
14
- class="vc-app-menu-item__handler"
15
- :class="{ 'vc-app-menu-item__handler_enabled': !sticky }"
16
- >
17
- <VcIcon
18
- icon="fas fa-ellipsis-v"
19
- size="m"
20
- />
21
- </div>
22
13
  <div
23
14
  v-if="icon"
24
- class="vc-app-menu-item__icon"
15
+ class="vc-app-menu-item__icon tw-w-[var(--app-menu-item-icon-width)]"
25
16
  >
26
17
  <VcIcon
18
+ class="tw-text-center"
27
19
  :icon="icon"
28
20
  size="m"
29
21
  />
@@ -43,8 +35,11 @@
43
35
  </div>
44
36
  <!-- Nested menu items -->
45
37
  <div
46
- v-show="isOpened && expand"
38
+ v-show="isOpened"
47
39
  class="vc-app-menu-item__child"
40
+ :class="{
41
+ '!tw-ml-0': !expand,
42
+ }"
48
43
  >
49
44
  <template
50
45
  v-for="(nested, i) in children"
@@ -60,12 +55,31 @@
60
55
  :class="[
61
56
  {
62
57
  'vc-app-menu-item__child-item_active': isActive(nested.url ?? ''),
58
+ 'tw-pl-[21px]': expand,
63
59
  },
64
- 'vc-app-menu-item__child-item',
60
+ 'vc-app-menu-item__child-item tw-min-w-0 tw-flex tw-w-full tw-h-[var(--app-menu-item-height)] tw-items-center',
65
61
  ]"
66
62
  @click="$emit('onClick', nested)"
67
63
  >
68
- {{ nested.title }}
64
+ <div
65
+ v-if="nested.icon"
66
+ class="vc-app-menu-item__icon tw-w-[var(--app-menu-item-icon-width)]"
67
+ :class="{
68
+ 'tw-p-0': !expand,
69
+ }"
70
+ >
71
+ <VcIcon
72
+ class="tw-text-center"
73
+ :icon="nested.icon"
74
+ size="m"
75
+ />
76
+ </div>
77
+ <p
78
+ v-if="expand"
79
+ class="tw-truncate tw-pl-[7px]"
80
+ >
81
+ {{ nested.title }}
82
+ </p>
69
83
  </div>
70
84
  </router-link>
71
85
  </template>
@@ -100,11 +114,7 @@ const isOpened = ref(false);
100
114
  const route = useRoute();
101
115
  const params = Object.fromEntries(Object.entries(route.params).filter(([key]) => key !== "pathMatch"));
102
116
 
103
- const isMenuItemActive = computed(
104
- () =>
105
- (isActive(props.url ?? "") && !props.children?.length) ||
106
- (!props.expand && isOpened.value && props.children?.some((x) => isActive(x.url ?? ""))),
107
- );
117
+ const isMenuItemActive = computed(() => isActive(props.url ?? "") && !props.children?.length);
108
118
 
109
119
  watch(
110
120
  () => route.path,
@@ -147,7 +157,7 @@ const isActive = (url: string) => {
147
157
  <style lang="scss">
148
158
  :root {
149
159
  --app-menu-item-height: 36px;
150
- --app-menu-item-icon-width: 20px;
160
+ --app-menu-item-icon-width: 22px;
151
161
  --app-menu-item-icon-color: #82a6bd;
152
162
  --app-menu-item-icon-color-active: #ffffff;
153
163
  --app-menu-item-handler-width: 10px;
@@ -165,7 +175,7 @@ const isActive = (url: string) => {
165
175
  .vc-app-menu-item {
166
176
  @apply tw-flex tw-items-center tw-w-full tw-h-[var(--app-menu-item-height)]
167
177
  tw-border-none
168
- tw-flex-nowrap tw-box-border tw-cursor-pointer tw-relative tw-uppercase tw-select-none;
178
+ tw-flex-nowrap tw-box-border tw-cursor-pointer tw-relative tw-uppercase tw-select-none tw-py-[4px] tw-px-[8px];
169
179
 
170
180
  &_active {
171
181
  @apply tw-bg-[color:var(--app-menu-item-background-color-active)]
@@ -196,7 +206,7 @@ const isActive = (url: string) => {
196
206
  &__icon {
197
207
  @apply tw-text-[color:var(--app-menu-item-icon-color)]
198
208
  tw-overflow-hidden tw-flex
199
- tw-justify-center tw-shrink-0 tw-transition-[color] tw-duration-200 tw-pr-[7px];
209
+ tw-justify-center tw-shrink-0 tw-transition-[color] tw-duration-200;
200
210
  }
201
211
 
202
212
  &_active &__icon {
@@ -207,7 +217,7 @@ const isActive = (url: string) => {
207
217
  @apply tw-truncate
208
218
  tw-text-lg
209
219
  tw-font-medium
210
- tw-pr-2
220
+ tw-pl-[7px]
211
221
  tw-text-[color:var(--app-menu-item-title-color)]
212
222
  [transition:color_0.2s_ease]
213
223
  tw-opacity-100 tw-w-full tw-flex tw-justify-between tw-items-center;
@@ -227,11 +237,11 @@ const isActive = (url: string) => {
227
237
  }
228
238
 
229
239
  &__child {
230
- @apply tw-ml-[32px] tw-gap-[4px] tw-mt-[4px] tw-flex tw-flex-col;
240
+ @apply tw-gap-[4px] tw-mt-[4px] tw-flex tw-flex-col;
231
241
  }
232
242
 
233
243
  &__child-item {
234
- @apply tw-cursor-pointer tw-w-fit tw-py-[4px] tw-px-[6px] tw-rounded-[4px]
244
+ @apply tw-cursor-pointer tw-w-fit tw-py-[4px] tw-px-[8px] tw-rounded-[4px]
235
245
  hover:tw-bg-[color:var(--app-menu-item-background-color-hover)]
236
246
  hover:tw-text-[color:var(--app-menu-item-title-color-active)];
237
247
 
@@ -240,6 +250,10 @@ const isActive = (url: string) => {
240
250
  tw-text-[color:var(--app-menu-item-title-color-active)] tw-font-bold
241
251
  hover:tw-bg-[color:var(--app-menu-item-background-color-active)]
242
252
  hover:tw-text-[color:var(--app-menu-item-title-color-active)];
253
+
254
+ .vc-app-menu-item__icon {
255
+ @apply tw-text-[color:var(--app-menu-item-icon-color-active)];
256
+ }
243
257
  }
244
258
  }
245
259
 
@@ -1,12 +1,12 @@
1
1
  <template>
2
2
  <div
3
3
  v-if="isMenuVisible"
4
- class="tw-relative tw-w-[var(--app-menu-width)] [transition:width_300ms_cubic-bezier(0.2,0,0,1)_0s] tw-pt-[22px]"
4
+ class="vc-app-menu tw-relative tw-w-[var(--app-menu-width)] [transition:width_300ms_cubic-bezier(0.2,0,0,1)_0s] tw-pt-[22px]"
5
5
  :class="{
6
6
  'vc-app-menu_mobile tw-hidden !tw-fixed !tw-left-0 !tw-top-0 !tw-w-full !tw-bottom-0 !tw-z-[9999]':
7
7
  $isMobile.value,
8
8
  '!tw-block': isMobileVisible,
9
- '!tw-w-[63px]': $isDesktop.value && !isExpanded,
9
+ '!tw-w-[var(--app-menu-width-collapse)]': $isDesktop.value && !isExpanded,
10
10
  }"
11
11
  @mouseenter="!isExpanded && expandOverHandler(true)"
12
12
  @mouseover="!isExpanded && expandOverHandler(true)"
@@ -22,7 +22,8 @@
22
22
  class="!tw-absolute vc-app-menu__inner tw-flex tw-flex-col tw-h-full [transition:width_300ms_cubic-bezier(0.2,0,0,1)_0s] tw-z-[9999] tw-top-0 tw-bottom-0 tw-bg-[color:var(--app-background)] tw-shadow-[inset_0px_2px_5px_0px_#3654751A]"
23
23
  :class="{
24
24
  'tw-left-0 tw-pt-[22px]': $isDesktop.value,
25
- '!tw-w-[63px] !tw-shadow-[inset_4px_2px_5px_0px_#3654751A]': $isDesktop.value && !isExpanded && !isExpandedOver,
25
+ '!tw-w-[var(--app-menu-width-collapse)] !tw-shadow-[inset_4px_2px_5px_0px_#3654751A]':
26
+ $isDesktop.value && !isExpanded && !isExpandedOver,
26
27
  'tw-w-[var(--app-menu-width)]': $isDesktop.value && (isExpanded || isExpandedOver),
27
28
  'tw-shadow-none': $isDesktop.value && isExpanded,
28
29
  }"
@@ -42,7 +43,7 @@
42
43
 
43
44
  <div
44
45
  v-if="$isDesktop.value"
45
- class="tw-pl-[21px] tw-pb-2"
46
+ class="tw-pl-[19px] tw-pb-2"
46
47
  >
47
48
  <button
48
49
  class="tw-p-[10px] tw-h-[var(--app-menu-item-height)] tw-rounded tw-text-[color:var(--app-menu-burger-color)] hover:tw-bg-[color:var(--app-menu-burger-background-color)]"
@@ -63,8 +64,8 @@
63
64
  <div
64
65
  class="tw-gap-[5px] tw-flex tw-flex-col tw-h-full"
65
66
  :class="{
66
- 'tw-px-[21px]': ($isDesktop.value && (isExpanded || isExpandedOver)) || $isMobile.value,
67
- 'tw-pl-[21px] tw-pr-[2px]': $isDesktop.value && !isExpanded && !isExpandedOver,
67
+ 'tw-px-[19px]': ($isDesktop.value && (isExpanded || isExpandedOver)) || $isMobile.value,
68
+ 'tw-pl-[19px] tw-pr-[4px]': $isDesktop.value && !isExpanded && !isExpandedOver,
68
69
  }"
69
70
  >
70
71
  <slot
@@ -79,7 +80,7 @@
79
80
  $hasAccess(item.permissions!) && (item.children?.some((child) => $hasAccess(child.permissions!)) ?? true)
80
81
  "
81
82
  :url="item.url"
82
- :icon="item.icon"
83
+ :icon="item.groupIcon || item.icon"
83
84
  :title="item.title as string"
84
85
  :children="item.children"
85
86
  :expand="$isDesktop.value ? isExpanded || isExpandedOver : true"
@@ -93,7 +94,7 @@
93
94
  </div>
94
95
  </VcContainer>
95
96
  <div
96
- class="tw-text-[color:var(--app-menu-version-color)] tw-text-xs tw-mt-auto tw-self-start tw-py-1 tw-pl-4"
97
+ class="tw-text-[color:var(--app-menu-version-color)] tw-text-xs tw-mt-auto tw-self-start tw-py-1 tw-pl-[22px]"
97
98
  @click="$emit('version:click')"
98
99
  >
99
100
  {{ version }}
@@ -154,6 +155,7 @@ defineExpose({
154
155
  <style lang="scss">
155
156
  :root {
156
157
  --app-menu-width: 230px;
158
+ --app-menu-width-collapse: 63px;
157
159
  --app-menu-background-color: #ffffff;
158
160
  --app-menu-version-color: #838d9a;
159
161
 
@@ -162,6 +164,9 @@ defineExpose({
162
164
  }
163
165
 
164
166
  .vc-app-menu {
167
+ ::-webkit-scrollbar {
168
+ display: none;
169
+ }
165
170
  &_mobile &__inner {
166
171
  @apply tw-absolute tw-z-[9999] tw-right-0 tw-top-0 tw-bottom-0 tw-w-[300px] tw-max-w-[60%] tw-bg-[color:var(--app-menu-background-color)];
167
172
  }
@@ -92,9 +92,9 @@
92
92
  >
93
93
  <div
94
94
  ref="widgetsContainerRef"
95
- class="vc-blade__widget-container tw-flex tw-overflow-auto"
95
+ class="vc-blade__widget-container tw-flex tw-overflow-y-auto"
96
96
  :class="{
97
- 'tw-flex-col': $isDesktop.value,
97
+ 'tw-flex-col tw-overflow-x-clip': $isDesktop.value,
98
98
  'tw-flex-row': $isMobile.value,
99
99
  }"
100
100
  >
@@ -44,6 +44,7 @@
44
44
  :rules="rules"
45
45
  :name="name"
46
46
  :loading="loading"
47
+ :custom-text="customText"
47
48
  @upload="onUpload"
48
49
  ></VcFileUpload>
49
50
  </div>
@@ -89,6 +90,10 @@ export interface Props {
89
90
  rules?: keyof IValidationRules | IValidationRules;
90
91
  name?: string;
91
92
  loading?: boolean;
93
+ customText?: {
94
+ dragHere: string;
95
+ browse: string;
96
+ };
92
97
  }
93
98
 
94
99
  export interface Emits {
@@ -3,7 +3,7 @@
3
3
  <div ref="referenceButton">
4
4
  <VcButton
5
5
  small
6
- icon="fas fa-bars"
6
+ icon="fas fa-th"
7
7
  @click.stop="isActive = !isActive"
8
8
  ></VcButton>
9
9
  </div>
@@ -19,7 +19,7 @@
19
19
  >
20
20
  <VcCheckbox :model-value="unref(isSelected ?? false)"></VcCheckbox>
21
21
  </div>
22
- <div class="tw-flex-1 tw-w-full">
22
+ <div class="tw-flex-1 tw-w-0">
23
23
  <div class="tw-flex tw-flex-col tw-h-full tw-border-b tw-border-solid tw-border-b-[#e3e7ec]">
24
24
  <slot></slot>
25
25
  </div>
@@ -4,7 +4,7 @@
4
4
  class="tw-relative tw-overflow-hidden tw-flex tw-flex-col tw-grow tw-basis-0 tw-border-[color:#eef0f2] tw-border-solid tw-border-t-0"
5
5
  >
6
6
  <div
7
- v-if="$isMobile.value && selection.length > 0"
7
+ v-if="$isMobile.value && (selection.length > 0 || allSelected)"
8
8
  class="tw-flex tw-flex-col"
9
9
  >
10
10
  <div
@@ -18,12 +18,17 @@
18
18
  @click.stop
19
19
  >{{ $t("COMPONENTS.ORGANISMS.VC_TABLE.SELECT_ALL_TRUNCATED") }}</VcCheckbox
20
20
  >
21
- {{ $t("COMPONENTS.ORGANISMS.VC_TABLE.SELECTED") }}: {{ selection.length }}
21
+ {{ $t("COMPONENTS.ORGANISMS.VC_TABLE.SELECTED") }}: {{ allSelected ? totalCount : selection.length }}
22
22
  </div>
23
23
 
24
24
  <VcButton
25
25
  text
26
- @click="() => (selection = [])"
26
+ @click="
27
+ () => {
28
+ selection = [];
29
+ allSelected = false;
30
+ }
31
+ "
27
32
  >{{ $t("COMPONENTS.ORGANISMS.VC_TABLE.CANCEL") }}</VcButton
28
33
  >
29
34
  </div>
@@ -216,12 +221,13 @@
216
221
  @click="handleHeaderClick(item)"
217
222
  >
218
223
  <div
219
- v-if="multiselect && index === 0 && isHeaderHover"
220
- class="tw-flex tw-pl-3 tw-items-center tw-justify-center tw-w-auto tw-bg-[#f9f9f9] tw-box-border tw-select-none tw-overflow-hidden tw-z-[1]"
224
+ v-if="multiselect && index === 0"
225
+ class="tw-flex tw-pl-5 tw-items-center tw-justify-center tw-w-auto tw-bg-[#f9f9f9] tw-box-border tw-select-none tw-overflow-hidden tw-z-[1] tw-shrink-0"
221
226
  >
222
227
  <div class="tw-flex tw-justify-center tw-items-center">
223
228
  <VcCheckbox
224
229
  v-model="headerCheckbox"
230
+ size="m"
225
231
  @click.stop
226
232
  ></VcCheckbox>
227
233
  </div>
@@ -341,7 +347,7 @@
341
347
  v-for="cell in filteredCols"
342
348
  :id="`${(typeof item === 'object' && 'id' in item && item.id) || itemIndex}_${cell.id}`"
343
349
  :key="`${(typeof item === 'object' && 'id' in item && item.id) || itemIndex}_${cell.id}`"
344
- class="tw-box-border tw-overflow-hidden tw-px-3 tw-flex-1 tw-flex tw-items-center"
350
+ class="tw-box-border tw-overflow-hidden tw-px-3 tw-flex-1 tw-flex tw-items-center tw-relative"
345
351
  :class="[cell.class]"
346
352
  :style="{ maxWidth: cell.width, width: cell.width }"
347
353
  >
@@ -638,32 +644,44 @@ const renderCellSlot = ({ item, cell, index }: { item: T; cell: ITableColumns; i
638
644
 
639
645
  const isRowSelected = selection.value.includes(item);
640
646
 
641
- if ((isFirstCell && selectedRowIndex.value === index) || (isRowSelected && isFirstCell)) {
642
- return h(
643
- "div",
644
- { onClick: (e) => e.stopPropagation() },
645
- h(VcCheckbox, {
646
- modelValue: selection.value.includes(item),
647
- "onUpdate:modelValue": (value: boolean) => {
648
- rowCheckbox(item);
649
- },
650
- }),
651
- );
652
- }
653
-
654
- if (!isSlotExist) {
655
- return h(VcTableCell, {
656
- cell,
657
- item: item as TableItem,
658
- index,
659
- editing: props.editing,
660
- onUpdate: (event) => {
661
- emit("onEditComplete", { event, index });
647
+ const checkboxComponent = h(
648
+ "div",
649
+ {
650
+ onClick: (e) => e.stopPropagation(),
651
+ class: "tw-absolute tw-z-10 tw-top-0 tw-bottom-0 tw-left-[20px] tw-right-0 tw-flex tw-items-center",
652
+ },
653
+ h(VcCheckbox, {
654
+ class: "",
655
+ size: "m",
656
+ modelValue: selection.value.includes(item),
657
+ "onUpdate:modelValue": (value: boolean) => {
658
+ rowCheckbox(item);
662
659
  },
663
- onBlur: (event) => emit("onCellBlur", event),
664
- });
665
- }
666
- return slots[`item_${cell.id}`]?.({ item, cell, index });
660
+ }),
661
+ );
662
+
663
+ const checkboxVisibilityHandler = (isFirstCell && selectedRowIndex.value === index) || (isRowSelected && isFirstCell);
664
+
665
+ return h("div", { class: "" }, [
666
+ checkboxVisibilityHandler ? checkboxComponent : undefined,
667
+ h(
668
+ "div",
669
+ { class: checkboxVisibilityHandler ? "tw-opacity-15" : "" },
670
+ !isSlotExist
671
+ ? h(VcTableCell, {
672
+ cell,
673
+
674
+ item: item as TableItem,
675
+ index,
676
+ editing: props.editing,
677
+ onUpdate: (event) => {
678
+ emit("onEditComplete", { event, index });
679
+ },
680
+ onBlur: (event) => emit("onCellBlur", event),
681
+ })
682
+ : slots[`item_${cell.id}`]?.({ item, cell, index }),
683
+ ),
684
+ ]);
667
685
  };
668
686
 
669
687
  const calculateElWidth = (id: string) => {