@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.
- package/CHANGELOG.md +31 -0
- package/core/composables/useMenuService/index.ts +14 -10
- package/core/types/index.ts +5 -0
- package/dist/core/composables/useMenuService/index.d.ts.map +1 -1
- package/dist/core/types/index.d.ts +5 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/framework.js +4534 -4488
- package/dist/index.css +1 -1
- package/dist/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/types/index.d.ts +7 -0
- package/dist/shared/modules/dynamic/types/index.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-container/vc-container.vue.d.ts +2 -1
- package/dist/ui/components/atoms/vc-container/vc-container.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-widget/vc-widget.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-checkbox/index.d.ts +31 -0
- package/dist/ui/components/molecules/vc-checkbox/index.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-checkbox/vc-checkbox.stories.d.ts +310 -0
- package/dist/ui/components/molecules/vc-checkbox/vc-checkbox.stories.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-checkbox/vc-checkbox.vue.d.ts +5 -0
- package/dist/ui/components/molecules/vc-checkbox/vc-checkbox.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.stories.d.ts +24 -0
- package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.stories.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts +4 -0
- package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-gallery/vc-gallery.stories.d.ts +12 -0
- package/dist/ui/components/organisms/vc-gallery/vc-gallery.stories.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts +4 -0
- package/dist/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
- package/package.json +4 -4
- package/shared/components/change-password/change-password.vue +3 -30
- package/shared/components/notification-template/notification-template.vue +1 -1
- package/shared/modules/assets-manager/components/assets-manager/assets-manager.vue +6 -16
- package/shared/modules/dynamic/components/fields/GalleryField.ts +11 -1
- package/shared/modules/dynamic/pages/dynamic-blade-form.vue +4 -4
- package/shared/modules/dynamic/types/index.ts +7 -0
- package/ui/components/atoms/vc-container/vc-container.vue +10 -29
- package/ui/components/atoms/vc-widget/vc-widget.vue +4 -1
- package/ui/components/molecules/vc-breadcrumbs/_internal/vc-breadcrumbs-item/vc-breadcrumbs-item.vue +1 -1
- package/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue +4 -1
- package/ui/components/molecules/vc-checkbox/vc-checkbox.vue +26 -9
- package/ui/components/molecules/vc-editor/vc-editor.vue +0 -18
- package/ui/components/molecules/vc-file-upload/vc-file-upload.vue +8 -2
- package/ui/components/molecules/vc-notification/vc-notification.vue +0 -22
- package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue +39 -25
- package/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue +13 -8
- package/ui/components/organisms/vc-blade/vc-blade.vue +2 -2
- package/ui/components/organisms/vc-gallery/vc-gallery.vue +5 -0
- package/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue +1 -1
- package/ui/components/organisms/vc-table/_internal/vc-table-mobile-item/vc-table-mobile-item.vue +1 -1
- 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="{
|
|
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:
|
|
169
|
-
height:
|
|
170
|
-
border:
|
|
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:
|
|
174
|
-
top:
|
|
175
|
-
transform: rotate(var(--r,
|
|
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
|
>
|
|
29
29
|
<br />
|
|
30
|
-
<VcLink @click="toggleUploader">{{
|
|
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
|
|
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
|
-
|
|
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:
|
|
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
|
|
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-
|
|
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-
|
|
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-[
|
|
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-[
|
|
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-[
|
|
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-[
|
|
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-[
|
|
67
|
-
'tw-pl-[
|
|
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-
|
|
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 {
|
package/ui/components/organisms/vc-table/_internal/vc-table-mobile-item/vc-table-mobile-item.vue
CHANGED
|
@@ -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-
|
|
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="
|
|
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
|
|
220
|
-
class="tw-flex tw-pl-
|
|
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
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
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
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
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) => {
|