@vc-shell/framework 1.0.219 → 1.0.221
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 +26 -0
- package/core/types/index.ts +6 -0
- package/dist/core/types/index.d.ts +6 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/framework.js +14196 -13907
- package/dist/index.css +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/locales/en.json +2 -1
- package/dist/shared/components/app-switcher/composables/useAppSwitcher/index.d.ts.map +1 -1
- package/dist/shared/components/blade-navigation/composables/useBladeNavigation/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/SchemaRender.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/SchemaRender.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Button.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/Button.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Card.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/Card.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/InputField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/InputField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/RadioButtonGroup.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/RadioButtonGroup.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Table.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/Table.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/props.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/props.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/Checkbox.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/Checkbox.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/ContentField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/ContentField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/EditorField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/EditorField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.d.ts +6 -15
- package/dist/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/GalleryField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/GalleryField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/ImageField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/ImageField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.d.ts +15 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/InputField.stories.d.ts +15 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/InputField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.d.ts +15 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/RadioButtonGroup.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/RadioButtonGroup.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/RatingField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/RatingField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/SelectField.stories.d.ts +15 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/SelectField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/StatusField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/StatusField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/TextareaField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/TextareaField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/VideoField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/VideoField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/pages/DynamicRender.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/pages/DynamicRender.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/composables/useTableTemplates/index.d.ts +1 -0
- package/dist/shared/modules/dynamic/composables/useTableTemplates/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/composables/useToolbarReducer/index.d.ts +1 -1
- package/dist/shared/modules/dynamic/composables/useToolbarReducer/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/factories/types/index.d.ts +2 -2
- package/dist/shared/modules/dynamic/factories/types/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts +2 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts +2 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/types/index.d.ts +70 -20
- package/dist/shared/modules/dynamic/types/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/types/models.d.ts +1 -1
- package/dist/shared/modules/dynamic/types/models.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/ui/components/atoms/index.d.ts +1 -0
- package/dist/ui/components/atoms/index.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts +6 -0
- package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-label/vc-label.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-status/vc-status.stories.d.ts +7 -7
- package/dist/ui/components/atoms/vc-status/vc-status.vue.d.ts +2 -2
- package/dist/ui/components/atoms/vc-status/vc-status.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-tooltip/index.d.ts +2 -0
- package/dist/ui/components/atoms/vc-tooltip/index.d.ts.map +1 -0
- package/dist/ui/components/atoms/vc-tooltip/vc-tooltip.vue.d.ts +41 -0
- package/dist/ui/components/atoms/vc-tooltip/vc-tooltip.vue.d.ts.map +1 -0
- package/dist/ui/components/molecules/vc-input/vc-input.stories.d.ts +6 -0
- package/dist/ui/components/molecules/vc-input/vc-input.stories.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts +3 -0
- package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.stories.d.ts +30 -16
- package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.stories.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.vue.d.ts +35 -0
- package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.stories.d.ts +63 -63
- package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.vue.d.ts +9 -9
- package/dist/ui/components/molecules/vc-select/vc-select.stories.d.ts +90 -90
- package/dist/ui/components/molecules/vc-select/vc-select.vue.d.ts +9 -9
- package/dist/ui/components/molecules/vc-select/vc-select.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue.d.ts +1 -0
- 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
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-add-new/vc-table-add-new.vue.d.ts +26 -0
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-add-new/vc-table-add-new.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts +10 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/vc-table.stories.d.ts +315 -15
- package/dist/ui/components/organisms/vc-table/vc-table.stories.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts +63 -3
- package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
- package/package.json +4 -4
- package/shared/components/app-switcher/composables/useAppSwitcher/index.ts +0 -2
- package/shared/components/blade-navigation/composables/useBladeNavigation/index.ts +1 -2
- package/shared/modules/dynamic/components/fields/Button.ts +5 -3
- package/shared/modules/dynamic/components/fields/Fieldset.ts +2 -19
- package/shared/modules/dynamic/components/fields/InputCurrency.ts +18 -2
- package/shared/modules/dynamic/components/fields/InputField.ts +5 -1
- package/shared/modules/dynamic/components/fields/MultivalueField.ts +4 -1
- package/shared/modules/dynamic/components/fields/SelectField.ts +4 -1
- package/shared/modules/dynamic/components/fields/Table.ts +52 -6
- package/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.ts +1 -63
- package/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.ts +14 -0
- package/shared/modules/dynamic/components/fields/storybook/InputField.stories.ts +14 -0
- package/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.ts +14 -0
- package/shared/modules/dynamic/components/fields/storybook/SelectField.stories.ts +13 -0
- package/shared/modules/dynamic/composables/useTableTemplates/index.ts +2 -0
- package/shared/modules/dynamic/composables/useToolbarReducer/index.ts +30 -17
- package/shared/modules/dynamic/factories/types/index.ts +5 -2
- package/shared/modules/dynamic/pages/dynamic-blade-form.vue +1 -1
- package/shared/modules/dynamic/pages/dynamic-blade-list.vue +3 -1
- package/shared/modules/dynamic/types/index.ts +78 -26
- package/shared/modules/dynamic/types/models.ts +3 -1
- package/ui/components/atoms/index.ts +1 -0
- package/ui/components/atoms/vc-label/vc-label.vue +10 -29
- package/ui/components/atoms/vc-status/vc-status.vue +6 -3
- package/ui/components/atoms/vc-tooltip/index.ts +1 -0
- package/ui/components/atoms/vc-tooltip/vc-tooltip.vue +57 -0
- package/ui/components/molecules/vc-input/vc-input.vue +7 -3
- package/ui/components/molecules/vc-input-currency/vc-input-currency.vue +53 -1
- package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue +5 -1
- package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue +1 -0
- package/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue +1 -0
- package/ui/components/organisms/vc-table/_internal/vc-table-add-new/vc-table-add-new.vue +46 -0
- package/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue +108 -23
- package/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue +6 -2
- package/ui/components/organisms/vc-table/vc-table.vue +156 -70
|
@@ -99,6 +99,14 @@ export default {
|
|
|
99
99
|
},
|
|
100
100
|
},
|
|
101
101
|
},
|
|
102
|
+
hint: {
|
|
103
|
+
description: "Hint text to be displayed below the input.",
|
|
104
|
+
table: {
|
|
105
|
+
type: {
|
|
106
|
+
summary: "string",
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
},
|
|
102
110
|
},
|
|
103
111
|
parameters: {
|
|
104
112
|
docs: {
|
|
@@ -139,6 +147,12 @@ WithPlaceholder.args = {
|
|
|
139
147
|
placeholder: "Input placeholder",
|
|
140
148
|
};
|
|
141
149
|
|
|
150
|
+
export const WithHint = Template.bind({});
|
|
151
|
+
WithHint.args = {
|
|
152
|
+
label: "Input label",
|
|
153
|
+
hint: "Input hint",
|
|
154
|
+
};
|
|
155
|
+
|
|
142
156
|
export const WithPrepend: StoryFn<InputSchema> = (args) => ({
|
|
143
157
|
components: { page },
|
|
144
158
|
setup() {
|
|
@@ -134,6 +134,14 @@ export default {
|
|
|
134
134
|
},
|
|
135
135
|
},
|
|
136
136
|
},
|
|
137
|
+
hint: {
|
|
138
|
+
description: "Hint text to be displayed below the input.",
|
|
139
|
+
table: {
|
|
140
|
+
type: {
|
|
141
|
+
summary: "string",
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
},
|
|
137
145
|
},
|
|
138
146
|
parameters: {
|
|
139
147
|
docs: {
|
|
@@ -161,6 +169,12 @@ Template.args = {
|
|
|
161
169
|
placeholder: "Write something and press Enter",
|
|
162
170
|
};
|
|
163
171
|
|
|
172
|
+
export const WithHint = Template.bind({});
|
|
173
|
+
WithHint.args = {
|
|
174
|
+
placeholder: "Write something and press Enter",
|
|
175
|
+
hint: "I am a hint",
|
|
176
|
+
};
|
|
177
|
+
|
|
164
178
|
export const NumberInput: StoryFn<MultivalueSchema> = (args) => ({
|
|
165
179
|
components: { page },
|
|
166
180
|
setup() {
|
|
@@ -183,6 +183,14 @@ export default {
|
|
|
183
183
|
},
|
|
184
184
|
},
|
|
185
185
|
},
|
|
186
|
+
hint: {
|
|
187
|
+
description: "Hint text to be displayed below the input.",
|
|
188
|
+
table: {
|
|
189
|
+
type: {
|
|
190
|
+
summary: "string",
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
},
|
|
186
194
|
},
|
|
187
195
|
parameters: {
|
|
188
196
|
docs: {
|
|
@@ -225,6 +233,11 @@ WithTooltip.args = {
|
|
|
225
233
|
tooltip: "Select tooltip",
|
|
226
234
|
};
|
|
227
235
|
|
|
236
|
+
export const WithHint = WithLabel.bind({});
|
|
237
|
+
WithHint.args = {
|
|
238
|
+
hint: "Select hint",
|
|
239
|
+
};
|
|
240
|
+
|
|
228
241
|
export const WithPlaceholder: StoryFn<SelectSchema> = (args) => ({
|
|
229
242
|
components: { page },
|
|
230
243
|
setup() {
|
|
@@ -7,6 +7,7 @@ export interface IUseTableTemplates {
|
|
|
7
7
|
mobileView: ConcreteComponent | undefined;
|
|
8
8
|
notFound: ConcreteComponent | undefined;
|
|
9
9
|
empty: ConcreteComponent | undefined;
|
|
10
|
+
footer: ConcreteComponent | undefined;
|
|
10
11
|
};
|
|
11
12
|
}
|
|
12
13
|
|
|
@@ -18,6 +19,7 @@ export const useTableTemplates = (
|
|
|
18
19
|
mobileView: resolveTemplateComponent("mobileTemplate"),
|
|
19
20
|
notFound: resolveTemplateComponent("notFoundTemplate"),
|
|
20
21
|
empty: resolveTemplateComponent("emptyTemplate"),
|
|
22
|
+
footer: resolveTemplateComponent("footerTemplate"),
|
|
21
23
|
});
|
|
22
24
|
|
|
23
25
|
function resolveTemplateComponent(name: keyof ListContentSchema): ShallowRef<ConcreteComponent> | undefined {
|
|
@@ -5,7 +5,7 @@ import { SettingsSchema, ToolbarSchema } from "../../types";
|
|
|
5
5
|
import { BaseBladeScope, DetailsBladeContext, ListBladeContext } from "../../factories/types";
|
|
6
6
|
import { useI18n } from "vue-i18n";
|
|
7
7
|
import { toValue } from "@vueuse/core";
|
|
8
|
-
import { UnwrapNestedRefs, computed, ref, ComputedRef } from "vue";
|
|
8
|
+
import { UnwrapNestedRefs, computed, ref, ComputedRef, unref } from "vue";
|
|
9
9
|
|
|
10
10
|
export const useToolbarReducer = (args: {
|
|
11
11
|
defaultToolbarSchema: SettingsSchema["toolbar"];
|
|
@@ -13,7 +13,7 @@ export const useToolbarReducer = (args: {
|
|
|
13
13
|
customToolbarConfig: BaseBladeScope["toolbarOverrides"];
|
|
14
14
|
context: UnwrapNestedRefs<DetailsBladeContext> | UnwrapNestedRefs<ListBladeContext>;
|
|
15
15
|
scope: ComputedRef<BaseBladeScope> | undefined;
|
|
16
|
-
}): UnwrapNestedRefs<ComputedRef<(IBladeToolbar & ToolbarSchema)[]>> | undefined => {
|
|
16
|
+
}): UnwrapNestedRefs<ComputedRef<(IBladeToolbar & ToolbarSchema)[] | IBladeToolbar[] | undefined>> | undefined => {
|
|
17
17
|
if (!args) return;
|
|
18
18
|
|
|
19
19
|
const { t } = useI18n({ useScope: "global" });
|
|
@@ -27,10 +27,21 @@ export const useToolbarReducer = (args: {
|
|
|
27
27
|
return computed(() => {
|
|
28
28
|
if (args.defaultToolbarSchema?.length !== 0) {
|
|
29
29
|
return args.defaultToolbarSchema?.reduce((acc, curr) => {
|
|
30
|
-
const toolbarItemCtx = toolbarMethodsMerge.value[
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
if (toolbarItemCtx) {
|
|
30
|
+
const toolbarItemCtx = toolbarMethodsMerge.value[curr.method as keyof typeof toolbarMethodsMerge.value] as
|
|
31
|
+
| IBladeToolbar
|
|
32
|
+
| IBladeToolbar[];
|
|
33
|
+
if (toolbarItemCtx && Array.isArray(toolbarItemCtx)) {
|
|
34
|
+
return acc.concat(
|
|
35
|
+
toolbarItemCtx.map((item) => {
|
|
36
|
+
return {
|
|
37
|
+
...curr,
|
|
38
|
+
...item,
|
|
39
|
+
title: t(curr.title || unref<string>(item.title ?? "")) as string,
|
|
40
|
+
};
|
|
41
|
+
}),
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
if (toolbarItemCtx && typeof toolbarItemCtx === "object") {
|
|
34
45
|
const context =
|
|
35
46
|
typeof toolbarItemCtx === "function"
|
|
36
47
|
? {
|
|
@@ -46,7 +57,8 @@ export const useToolbarReducer = (args: {
|
|
|
46
57
|
acc.push({
|
|
47
58
|
...curr,
|
|
48
59
|
...context,
|
|
49
|
-
|
|
60
|
+
icon: curr.icon || toolbarItemCtx.icon,
|
|
61
|
+
title: t(curr.title || unref<string>(toolbarItemCtx.title ?? "")) as string,
|
|
50
62
|
});
|
|
51
63
|
}
|
|
52
64
|
|
|
@@ -54,17 +66,18 @@ export const useToolbarReducer = (args: {
|
|
|
54
66
|
}, [] as IBladeToolbar[]);
|
|
55
67
|
}
|
|
56
68
|
|
|
57
|
-
|
|
58
|
-
|
|
69
|
+
// TODO remove redundant code if not needed
|
|
70
|
+
// if (args.scope && toValue(toValue(args.scope)?.toolbarOverrides)) {
|
|
71
|
+
// const toolbarOverrides: BaseBladeScope["toolbarOverrides"] = toValue(toValue(args.scope)?.toolbarOverrides);
|
|
59
72
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
73
|
+
// if (Array.isArray(toolbarOverrides)) {
|
|
74
|
+
// return toolbarOverrides;
|
|
75
|
+
// } else if (typeof toolbarOverrides === "function") {
|
|
76
|
+
// return toolbarOverrides(args.context);
|
|
77
|
+
// } else if (typeof toolbarOverrides === "object") {
|
|
78
|
+
// return Object.values(toolbarOverrides);
|
|
79
|
+
// }
|
|
80
|
+
// }
|
|
68
81
|
|
|
69
82
|
return [];
|
|
70
83
|
});
|
|
@@ -69,7 +69,10 @@ export interface UseList<
|
|
|
69
69
|
|
|
70
70
|
export interface BaseBladeScope {
|
|
71
71
|
[x: string]: any;
|
|
72
|
-
toolbarOverrides?:
|
|
72
|
+
toolbarOverrides?:
|
|
73
|
+
| MaybeRef<{ [x: string]: IBladeToolbar | IBladeToolbar[] | MaybeRef<IBladeToolbar> | MaybeRef<IBladeToolbar[]> }>
|
|
74
|
+
| ((...args: any[]) => any)
|
|
75
|
+
| MaybeRef<IBladeToolbar[]>;
|
|
73
76
|
}
|
|
74
77
|
|
|
75
78
|
export interface ListBaseBladeScope<Item = Record<string, any>, Query = Record<string, any>> extends BaseBladeScope {
|
|
@@ -94,7 +97,7 @@ export type TListItemClickArgs<Item extends Record<string, any> = Record<string,
|
|
|
94
97
|
> & { item?: Item | undefined };
|
|
95
98
|
|
|
96
99
|
export interface DetailsBaseBladeScope extends BaseBladeScope {
|
|
97
|
-
disabled?: ComputedRef<boolean | undefined> | Ref<boolean | undefined
|
|
100
|
+
disabled?: ComputedRef<boolean | undefined> | Ref<boolean | undefined> | boolean;
|
|
98
101
|
multilanguage?: {
|
|
99
102
|
loading: ComputedRef<boolean>;
|
|
100
103
|
currentLocale: Ref<string>;
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
:width="settings?.width || '50%'"
|
|
8
8
|
:toolbar-items="toolbarComputed"
|
|
9
9
|
:title="title"
|
|
10
|
-
:modified="
|
|
10
|
+
:modified="isBladeEditable ? isFormModified : undefined"
|
|
11
11
|
@close="$emit('close:blade')"
|
|
12
12
|
@expand="$emit('expand:blade')"
|
|
13
13
|
@collapse="$emit('collapse:blade')"
|
|
@@ -620,7 +620,9 @@ function actionBuilder(item: (typeof items.value)[number]): IActionBuilderResult
|
|
|
620
620
|
clickHandler: async (itemVal: (typeof items.value)[number]) => {
|
|
621
621
|
try {
|
|
622
622
|
if (isRef(toolbarComputed) && toolbarComputed.value && toolbarComputed.value.length > 0) {
|
|
623
|
-
const toolbarItem = toolbarComputed.value.find(
|
|
623
|
+
const toolbarItem = toolbarComputed.value.find(
|
|
624
|
+
(x) => ("method" in x && x.method === action.method) ?? false,
|
|
625
|
+
);
|
|
624
626
|
selectedIds.value = [itemVal.id];
|
|
625
627
|
if (toolbarItem) {
|
|
626
628
|
await toolbarItem.clickHandler?.();
|
|
@@ -61,8 +61,8 @@ export type IViewComponentName = "DynamicBladeForm" | "DynamicBladeList";
|
|
|
61
61
|
|
|
62
62
|
export type ToolbarSchema = {
|
|
63
63
|
id: string;
|
|
64
|
-
title
|
|
65
|
-
icon
|
|
64
|
+
title?: string;
|
|
65
|
+
icon?: string;
|
|
66
66
|
method: string;
|
|
67
67
|
};
|
|
68
68
|
|
|
@@ -149,7 +149,6 @@ export interface ListContentSchema {
|
|
|
149
149
|
multiselect?: boolean;
|
|
150
150
|
header?: boolean;
|
|
151
151
|
footer?: boolean;
|
|
152
|
-
editable?: boolean;
|
|
153
152
|
columns?: (Omit<ITableColumns, "visible"> & {
|
|
154
153
|
id: string;
|
|
155
154
|
title: string;
|
|
@@ -157,6 +156,14 @@ export interface ListContentSchema {
|
|
|
157
156
|
alwaysVisible?: boolean;
|
|
158
157
|
type?: string;
|
|
159
158
|
customTemplate?: GridTemplateOverride;
|
|
159
|
+
/** Additional method that is called when the focus is lost from the cell when editing.
|
|
160
|
+
* @description Method should be defined in the blade `scope`.
|
|
161
|
+
* @argument ({ row: number, field: string })
|
|
162
|
+
* @type {{ method: string }}
|
|
163
|
+
*/
|
|
164
|
+
onCellBlur?: {
|
|
165
|
+
method: string;
|
|
166
|
+
};
|
|
160
167
|
visible?:
|
|
161
168
|
| boolean
|
|
162
169
|
| {
|
|
@@ -167,14 +174,15 @@ export interface ListContentSchema {
|
|
|
167
174
|
// TODO Add to documentation
|
|
168
175
|
selectAll?: boolean;
|
|
169
176
|
// TODO Add to documentation
|
|
170
|
-
actions?: (
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
177
|
+
actions?: (Partial<TableSchema> &
|
|
178
|
+
Required<Pick<ToolbarSchema, "title" | "icon">> & {
|
|
179
|
+
position: "right" | "left";
|
|
180
|
+
type: "danger" | "success";
|
|
181
|
+
disabled?: {
|
|
182
|
+
method: string;
|
|
183
|
+
};
|
|
174
184
|
method: string;
|
|
175
|
-
};
|
|
176
|
-
method: string;
|
|
177
|
-
})[];
|
|
185
|
+
})[];
|
|
178
186
|
mobileTemplate?: {
|
|
179
187
|
component: string;
|
|
180
188
|
};
|
|
@@ -184,6 +192,9 @@ export interface ListContentSchema {
|
|
|
184
192
|
emptyTemplate?: {
|
|
185
193
|
component: string;
|
|
186
194
|
};
|
|
195
|
+
footerTemplate?: {
|
|
196
|
+
component: string;
|
|
197
|
+
};
|
|
187
198
|
}
|
|
188
199
|
export interface FormContentSchema {
|
|
189
200
|
id: string;
|
|
@@ -330,6 +341,10 @@ export interface SelectSchema extends SchemaBase {
|
|
|
330
341
|
* @type {boolean}
|
|
331
342
|
*/
|
|
332
343
|
multiple?: boolean;
|
|
344
|
+
/**
|
|
345
|
+
* Text below control.
|
|
346
|
+
*/
|
|
347
|
+
hint?: string;
|
|
333
348
|
}
|
|
334
349
|
|
|
335
350
|
export interface MultivalueSchema extends SchemaBase {
|
|
@@ -374,6 +389,10 @@ export interface MultivalueSchema extends SchemaBase {
|
|
|
374
389
|
customTemplate?: {
|
|
375
390
|
component: string;
|
|
376
391
|
};
|
|
392
|
+
/**
|
|
393
|
+
* Text below control.
|
|
394
|
+
*/
|
|
395
|
+
hint?: string;
|
|
377
396
|
}
|
|
378
397
|
|
|
379
398
|
export interface TextareaSchema extends SchemaBase {
|
|
@@ -439,6 +458,10 @@ export interface InputSchema extends SchemaBase {
|
|
|
439
458
|
* @type {number}
|
|
440
459
|
*/
|
|
441
460
|
maxlength?: number;
|
|
461
|
+
/**
|
|
462
|
+
* Text below control.
|
|
463
|
+
*/
|
|
464
|
+
hint?: string;
|
|
442
465
|
}
|
|
443
466
|
|
|
444
467
|
/**
|
|
@@ -548,7 +571,7 @@ export interface StatusSchema extends Pick<SchemaBase, "id" | "visibility" | "ho
|
|
|
548
571
|
extend?: boolean;
|
|
549
572
|
/**
|
|
550
573
|
* Status variant.
|
|
551
|
-
* @type {"info" | "warning" | "danger" | "success" | "light-danger"}
|
|
574
|
+
* @type {"info" | "info-dark" | "warning" | "danger" | "success" | "light-danger"}
|
|
552
575
|
*/
|
|
553
576
|
variant?: ComponentProps<typeof VcStatus>["variant"];
|
|
554
577
|
/**
|
|
@@ -621,6 +644,10 @@ export interface InputCurrencySchema extends Omit<SchemaBase, "multilanguage"> {
|
|
|
621
644
|
* @type {boolean}
|
|
622
645
|
*/
|
|
623
646
|
clearable?: boolean;
|
|
647
|
+
/**
|
|
648
|
+
* Text below control.
|
|
649
|
+
*/
|
|
650
|
+
hint?: string;
|
|
624
651
|
}
|
|
625
652
|
|
|
626
653
|
/**
|
|
@@ -830,19 +857,6 @@ export interface FieldsetSchema extends Pick<SchemaBase, "id" | "visibility" | "
|
|
|
830
857
|
* @type {ControlSchema[]}
|
|
831
858
|
*/
|
|
832
859
|
fields: ControlSchema[];
|
|
833
|
-
/**
|
|
834
|
-
* Method to call to remove field from the fieldset. When set - activates remove button.
|
|
835
|
-
*
|
|
836
|
-
* Used for property-based fieldsets.
|
|
837
|
-
*
|
|
838
|
-
* Allows to remove selected fieldset.
|
|
839
|
-
* @description Method should be defined in the blade `scope`.
|
|
840
|
-
* @argument {number} id - id of the field to remove
|
|
841
|
-
* @type {{ method: string }}
|
|
842
|
-
*/
|
|
843
|
-
remove?: {
|
|
844
|
-
method: string;
|
|
845
|
-
};
|
|
846
860
|
}
|
|
847
861
|
|
|
848
862
|
/**
|
|
@@ -867,7 +881,45 @@ export interface SwitchSchema extends Omit<SchemaBase, "placeholder" | "multilan
|
|
|
867
881
|
falseValue?: boolean;
|
|
868
882
|
}
|
|
869
883
|
|
|
870
|
-
export type TableSchema = Omit<ListContentSchema, "filter"> &
|
|
884
|
+
export type TableSchema = Omit<ListContentSchema, "filter"> &
|
|
885
|
+
Pick<SchemaBase, "id" | "property" | "visibility"> & {
|
|
886
|
+
/**
|
|
887
|
+
* Shows button to remove table row.
|
|
888
|
+
* Used when table is in editing mode.
|
|
889
|
+
*/
|
|
890
|
+
removeRowButton?: {
|
|
891
|
+
/**
|
|
892
|
+
* Determines whether the button should be shown or hidden.
|
|
893
|
+
*/
|
|
894
|
+
show: boolean;
|
|
895
|
+
/**
|
|
896
|
+
* Method to be called when the button is clicked.
|
|
897
|
+
* @description Method should be defined in the blade `scope`.
|
|
898
|
+
* @type {string}
|
|
899
|
+
*/
|
|
900
|
+
method: string;
|
|
901
|
+
};
|
|
902
|
+
/**
|
|
903
|
+
* Configuration for the add new row button in the table.
|
|
904
|
+
* Used when table is in editing mode.
|
|
905
|
+
*/
|
|
906
|
+
addNewRowButton?: {
|
|
907
|
+
/**
|
|
908
|
+
* The title of the button.
|
|
909
|
+
*/
|
|
910
|
+
title: string;
|
|
911
|
+
/**
|
|
912
|
+
* Determines whether the button should be shown or hidden.
|
|
913
|
+
*/
|
|
914
|
+
show: boolean;
|
|
915
|
+
/**
|
|
916
|
+
* Method to be called when the button is clicked.
|
|
917
|
+
* @description Method should be defined in the blade `scope`.
|
|
918
|
+
* @type {string}
|
|
919
|
+
*/
|
|
920
|
+
method: string;
|
|
921
|
+
};
|
|
922
|
+
};
|
|
871
923
|
|
|
872
924
|
/**
|
|
873
925
|
* Button schema interface.
|
|
@@ -883,7 +935,7 @@ export interface ButtonSchema extends Pick<SchemaBase, "id" | "disabled" | "visi
|
|
|
883
935
|
* Button inner text.
|
|
884
936
|
* @type {string}
|
|
885
937
|
*/
|
|
886
|
-
content
|
|
938
|
+
content?: string;
|
|
887
939
|
/**
|
|
888
940
|
* Small sized button.
|
|
889
941
|
* @type {boolean}
|
|
@@ -177,7 +177,9 @@ export type ISwitch = {
|
|
|
177
177
|
|
|
178
178
|
export type ITable = {
|
|
179
179
|
props: ComponentProps<typeof VcTable> | IControlBaseProps;
|
|
180
|
-
slots: Partial<
|
|
180
|
+
slots: Partial<
|
|
181
|
+
Pick<ComponentSlots<typeof VcTable>, `item_${string}` | "notfound" | "mobile-item" | "empty" | "footer">
|
|
182
|
+
>;
|
|
181
183
|
} & FieldOpts<typeof VcTable>;
|
|
182
184
|
|
|
183
185
|
export type IRating = {
|
|
@@ -14,24 +14,16 @@
|
|
|
14
14
|
v-if="$slots['tooltip']"
|
|
15
15
|
class="tw-grow tw-basis-0 tw-ml-1 tw-relative"
|
|
16
16
|
>
|
|
17
|
-
<
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
></VcIcon>
|
|
25
|
-
<teleport to="body">
|
|
26
|
-
<span
|
|
27
|
-
v-if="tooltipVisible"
|
|
28
|
-
ref="tooltipRef"
|
|
29
|
-
:style="floatingStyles"
|
|
30
|
-
class="tw-absolute tw-z-[101] tw-bg-white tw-border tw-border-solid tw-border-[color:#eef0f2] tw-shadow-[1px_1px_8px_rgba(126,142,157,0.25)] tw-rounded-[3px] tw-text-[color:#8e9daa] tw-font-normal tw-py-1 tw-px-2 tw-ml-4"
|
|
31
|
-
>
|
|
17
|
+
<VcTooltip placement="top-start">
|
|
18
|
+
<VcIcon
|
|
19
|
+
class="tw-text-[color:var(--label-tooltip-color)]"
|
|
20
|
+
:icon="tooltipIcon"
|
|
21
|
+
size="s"
|
|
22
|
+
></VcIcon>
|
|
23
|
+
<template #tooltip>
|
|
32
24
|
<slot name="tooltip"></slot>
|
|
33
|
-
</
|
|
34
|
-
</
|
|
25
|
+
</template>
|
|
26
|
+
</VcTooltip>
|
|
35
27
|
</span>
|
|
36
28
|
|
|
37
29
|
<div
|
|
@@ -44,9 +36,7 @@
|
|
|
44
36
|
</template>
|
|
45
37
|
|
|
46
38
|
<script lang="ts" setup>
|
|
47
|
-
import { VcIcon } from "./../../../components";
|
|
48
|
-
import { ref } from "vue";
|
|
49
|
-
import { useFloating, shift } from "@floating-ui/vue";
|
|
39
|
+
import { VcIcon, VcTooltip } from "./../../../components";
|
|
50
40
|
|
|
51
41
|
export interface Props {
|
|
52
42
|
required?: boolean;
|
|
@@ -63,15 +53,6 @@ defineSlots<{
|
|
|
63
53
|
default: void;
|
|
64
54
|
tooltip?: void;
|
|
65
55
|
}>();
|
|
66
|
-
|
|
67
|
-
const tooltipVisible = ref(false);
|
|
68
|
-
const tooltipIconRef = ref<HTMLElement | null>(null);
|
|
69
|
-
const tooltipRef = ref<HTMLElement | null>(null);
|
|
70
|
-
|
|
71
|
-
const { floatingStyles } = useFloating(tooltipIconRef, tooltipRef, {
|
|
72
|
-
placement: "top-start",
|
|
73
|
-
middleware: [shift()],
|
|
74
|
-
});
|
|
75
56
|
</script>
|
|
76
57
|
|
|
77
58
|
<style lang="scss">
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<!-- eslint-disable @typescript-eslint/no-explicit-any -->
|
|
10
10
|
<script lang="ts" setup>
|
|
11
11
|
export interface Props {
|
|
12
|
-
variant?: "info" | "warning" | "danger" | "success" | "light-danger";
|
|
12
|
+
variant?: "info" | "warning" | "danger" | "success" | "light-danger" | "info-dark";
|
|
13
13
|
outline?: boolean;
|
|
14
14
|
extend?: boolean;
|
|
15
15
|
}
|
|
@@ -27,7 +27,7 @@ defineSlots<{
|
|
|
27
27
|
<style lang="scss">
|
|
28
28
|
:root {
|
|
29
29
|
--status-padding: 4px 14px;
|
|
30
|
-
--status-padding-extended:
|
|
30
|
+
--status-padding-extended: 8px;
|
|
31
31
|
|
|
32
32
|
--status-border-radius: 2px;
|
|
33
33
|
--status-border-radius-extended: 4px;
|
|
@@ -47,9 +47,12 @@ defineSlots<{
|
|
|
47
47
|
|
|
48
48
|
--status-light-danger-color: #333333;
|
|
49
49
|
--status-light-danger-main-color: #ffefef;
|
|
50
|
+
|
|
51
|
+
--status-info-dark-color: #ffffff;
|
|
52
|
+
--status-info-dark-main-color: #82a6bd;
|
|
50
53
|
}
|
|
51
54
|
|
|
52
|
-
$variants: info, warning, danger, success, light-danger;
|
|
55
|
+
$variants: info, warning, danger, success, light-danger, info-dark;
|
|
53
56
|
|
|
54
57
|
.vc-status {
|
|
55
58
|
@apply tw-inline-block tw-rounded-[var(--status-border-radius)] tw-py-1 tw-px-3.5 tw-text-base tw-font-normal tw-whitespace-nowrap;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as VcTooltip } from "./vc-tooltip.vue";
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<div
|
|
4
|
+
ref="tooltipCompRef"
|
|
5
|
+
class="tw-inline-flex"
|
|
6
|
+
@mouseenter="tooltipVisible = true"
|
|
7
|
+
@mouseleave="tooltipVisible = false"
|
|
8
|
+
>
|
|
9
|
+
<slot></slot>
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
<teleport to="body">
|
|
13
|
+
<span
|
|
14
|
+
v-if="tooltipVisible"
|
|
15
|
+
ref="tooltipRef"
|
|
16
|
+
:style="floatingStyles"
|
|
17
|
+
class="tw-absolute tw-z-[101] tw-bg-white tw-border tw-border-solid tw-border-[color:#eef0f2] tw-shadow-[1px_1px_8px_rgba(126,142,157,0.25)] tw-rounded-[3px] tw-text-[color:#8e9daa] tw-font-normal tw-py-1 tw-px-2 tw-ml-4"
|
|
18
|
+
>
|
|
19
|
+
<slot name="tooltip"></slot>
|
|
20
|
+
</span>
|
|
21
|
+
</teleport>
|
|
22
|
+
</div>
|
|
23
|
+
</template>
|
|
24
|
+
|
|
25
|
+
<script lang="ts" setup>
|
|
26
|
+
import { useFloating, shift, Placement, offset } from "@floating-ui/vue";
|
|
27
|
+
import { ref } from "vue";
|
|
28
|
+
export interface Props {
|
|
29
|
+
placement?: Placement;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
33
|
+
placement: "bottom-end",
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
defineSlots<{
|
|
37
|
+
default: void;
|
|
38
|
+
tooltip?: void;
|
|
39
|
+
}>();
|
|
40
|
+
|
|
41
|
+
const tooltipVisible = ref(false);
|
|
42
|
+
const tooltipCompRef = ref<HTMLElement | null>(null);
|
|
43
|
+
const tooltipRef = ref<HTMLElement | null>(null);
|
|
44
|
+
|
|
45
|
+
const { floatingStyles } = useFloating(tooltipCompRef, tooltipRef, {
|
|
46
|
+
placement: props.placement,
|
|
47
|
+
middleware: [
|
|
48
|
+
offset({
|
|
49
|
+
crossAxis: 5,
|
|
50
|
+
mainAxis: 5,
|
|
51
|
+
}),
|
|
52
|
+
shift(),
|
|
53
|
+
],
|
|
54
|
+
});
|
|
55
|
+
</script>
|
|
56
|
+
|
|
57
|
+
<style lang="scss" scoped></style>
|
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
:teleport="$isDesktop.value ? 'body' : undefined"
|
|
91
91
|
class="vc-input__input"
|
|
92
92
|
@keydown="onKeyDown"
|
|
93
|
+
@blur="handleBlur"
|
|
93
94
|
></VueDatePicker>
|
|
94
95
|
</template>
|
|
95
96
|
<template v-else>
|
|
@@ -105,6 +106,7 @@
|
|
|
105
106
|
:max="maxDate"
|
|
106
107
|
class="vc-input__input"
|
|
107
108
|
@keydown="onKeyDown"
|
|
109
|
+
@blur="handleBlur"
|
|
108
110
|
/>
|
|
109
111
|
</template>
|
|
110
112
|
</slot>
|
|
@@ -208,11 +210,8 @@
|
|
|
208
210
|
<script lang="ts" setup>
|
|
209
211
|
import { computed, ref, unref, watch } from "vue";
|
|
210
212
|
import { VcLabel, VcIcon, VcHint } from "./../../";
|
|
211
|
-
import moment from "moment";
|
|
212
213
|
import VueDatePicker, { VueDatePickerProps } from "@vuepic/vue-datepicker";
|
|
213
214
|
import "@vuepic/vue-datepicker/dist/main.css";
|
|
214
|
-
import * as Locales from "date-fns/locale";
|
|
215
|
-
import { Locale } from "date-fns";
|
|
216
215
|
|
|
217
216
|
export interface Props {
|
|
218
217
|
/**
|
|
@@ -317,6 +316,7 @@ export interface Emits {
|
|
|
317
316
|
* Emitted when the component needs to change the model; Is also used by v-model
|
|
318
317
|
*/
|
|
319
318
|
(event: "update:modelValue", value: string | number | Date | null | undefined): void;
|
|
319
|
+
(event: "blur", value: Event): void;
|
|
320
320
|
}
|
|
321
321
|
|
|
322
322
|
const props = withDefaults(defineProps<Props>(), {
|
|
@@ -500,6 +500,10 @@ function onReset() {
|
|
|
500
500
|
temp.value = null;
|
|
501
501
|
emit("update:modelValue", null);
|
|
502
502
|
}
|
|
503
|
+
|
|
504
|
+
function handleBlur(e: Event) {
|
|
505
|
+
emit("blur", e);
|
|
506
|
+
}
|
|
503
507
|
</script>
|
|
504
508
|
|
|
505
509
|
<style lang="scss">
|