@finema/core 3.22.0 → 3.23.2
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/dist/module.d.mts +2 -0
- package/dist/module.json +2 -2
- package/dist/module.mjs +16 -2
- package/dist/runtime/components/App.vue +1 -1
- package/dist/runtime/components/DevToolsWindow/index.vue +1 -1
- package/dist/runtime/components/Dialog/index.d.vue.ts +1 -4
- package/dist/runtime/components/Dialog/index.vue +9 -10
- package/dist/runtime/components/Dialog/index.vue.d.ts +1 -4
- package/dist/runtime/components/Empty.d.vue.ts +0 -1
- package/dist/runtime/components/Empty.vue +6 -2
- package/dist/runtime/components/Empty.vue.d.ts +0 -1
- package/dist/runtime/components/FlexDeck/index.vue +86 -81
- package/dist/runtime/components/Form/FieldWrapper.vue +14 -14
- package/dist/runtime/components/Form/Fields.vue +10 -10
- package/dist/runtime/components/Form/InputCheckbox/index.vue +20 -19
- package/dist/runtime/components/Form/InputCheckboxGroup/index.vue +2 -1
- package/dist/runtime/components/Form/InputComponent/index.vue +2 -1
- package/dist/runtime/components/Form/InputCurrency/index.vue +51 -50
- package/dist/runtime/components/Form/InputDateTime/date_time_field.types.d.ts +1 -1
- package/dist/runtime/components/Form/InputDateTime/index.vue +69 -64
- package/dist/runtime/components/Form/InputDateTimeRange/date_range_time_field.types.d.ts +1 -1
- package/dist/runtime/components/Form/InputDateTimeRange/index.vue +62 -57
- package/dist/runtime/components/Form/InputMonth/index.vue +10 -5
- package/dist/runtime/components/Form/InputMonth/types.d.ts +1 -1
- package/dist/runtime/components/Form/InputNumber/index.vue +22 -21
- package/dist/runtime/components/Form/InputRadio/index.d.vue.ts +1 -1
- package/dist/runtime/components/Form/InputRadio/index.vue +2 -1
- package/dist/runtime/components/Form/InputRadio/index.vue.d.ts +1 -1
- package/dist/runtime/components/Form/InputRating/index.vue +2 -1
- package/dist/runtime/components/Form/InputSearch/index.vue +7 -2
- package/dist/runtime/components/Form/InputSelect/index.vue +112 -111
- package/dist/runtime/components/Form/InputSelectMultiple/index.vue +120 -119
- package/dist/runtime/components/Form/InputTags/index.vue +56 -55
- package/dist/runtime/components/Form/InputText/index.vue +88 -87
- package/dist/runtime/components/Form/InputTextarea/index.vue +20 -19
- package/dist/runtime/components/Form/InputTime/index.vue +45 -40
- package/dist/runtime/components/Form/InputTime/types.d.ts +1 -1
- package/dist/runtime/components/Form/InputToggle/index.vue +19 -18
- package/dist/runtime/components/Form/InputUploadDropzone/index.d.vue.ts +1 -4
- package/dist/runtime/components/Form/InputUploadDropzone/index.vue +40 -35
- package/dist/runtime/components/Form/InputUploadDropzone/index.vue.d.ts +1 -4
- package/dist/runtime/components/Form/InputUploadDropzone/types.d.ts +2 -2
- package/dist/runtime/components/Form/InputUploadDropzoneAuto/index.d.vue.ts +0 -5
- package/dist/runtime/components/Form/InputUploadDropzoneAuto/index.vue +63 -58
- package/dist/runtime/components/Form/InputUploadDropzoneAuto/index.vue.d.ts +0 -5
- package/dist/runtime/components/Form/InputUploadDropzoneAuto/types.d.ts +3 -3
- package/dist/runtime/components/Form/InputUploadDropzoneAutoMultiple/index.d.vue.ts +0 -5
- package/dist/runtime/components/Form/InputUploadDropzoneAutoMultiple/index.vue +69 -60
- package/dist/runtime/components/Form/InputUploadDropzoneAutoMultiple/index.vue.d.ts +0 -5
- package/dist/runtime/components/Form/InputUploadDropzoneAutoMultiple/types.d.ts +3 -3
- package/dist/runtime/components/Form/InputUploadImageAuto/index.d.vue.ts +1 -6
- package/dist/runtime/components/Form/InputUploadImageAuto/index.vue +63 -58
- package/dist/runtime/components/Form/InputUploadImageAuto/index.vue.d.ts +1 -6
- package/dist/runtime/components/Form/InputUploadImageAuto/types.d.ts +3 -3
- package/dist/runtime/components/Form/InputWYSIWYG/EditorImageUploadNode.vue +18 -18
- package/dist/runtime/components/Form/InputWYSIWYG/EditorLinkPopover.vue +65 -65
- package/dist/runtime/components/Form/InputWYSIWYG/README.md +96 -96
- package/dist/runtime/components/Form/InputWYSIWYG/index.vue +43 -42
- package/dist/runtime/components/Form/fileState/EmptyState.vue +21 -21
- package/dist/runtime/components/Form/fileState/FailedState.vue +37 -33
- package/dist/runtime/components/Form/fileState/LoadingState.vue +24 -24
- package/dist/runtime/components/Form/fileState/MultipleFilesState.d.vue.ts +4 -4
- package/dist/runtime/components/Form/fileState/MultipleFilesState.vue +79 -75
- package/dist/runtime/components/Form/fileState/MultipleFilesState.vue.d.ts +4 -4
- package/dist/runtime/components/Form/fileState/PreviewModal.vue +23 -23
- package/dist/runtime/components/Form/fileState/SuccessState.d.vue.ts +2 -2
- package/dist/runtime/components/Form/fileState/SuccessState.vue +8 -4
- package/dist/runtime/components/Form/fileState/SuccessState.vue.d.ts +2 -2
- package/dist/runtime/components/Form/fileState/useFilePicker.d.ts +34 -0
- package/dist/runtime/components/Form/fileState/useFilePicker.js +48 -0
- package/dist/runtime/components/Form/fileState/useFileState.d.ts +7 -9
- package/dist/runtime/components/Form/fileState/useFileState.js +40 -120
- package/dist/runtime/components/Form/fileState/useUploadImageState.d.ts +7 -8
- package/dist/runtime/components/Form/fileState/useUploadImageState.js +28 -300
- package/dist/runtime/components/Form/fileState/useUploadState.d.ts +11 -7
- package/dist/runtime/components/Form/fileState/useUploadState.js +58 -131
- package/dist/runtime/components/Form/fileState/useUploadStateMultiple.d.ts +12 -18
- package/dist/runtime/components/Form/fileState/useUploadStateMultiple.js +89 -222
- package/dist/runtime/components/Form/index.vue +5 -5
- package/dist/runtime/components/Form/types.d.ts +2 -0
- package/dist/runtime/components/Image.vue +28 -28
- package/dist/runtime/components/Loader.d.vue.ts +1 -0
- package/dist/runtime/components/Loader.vue.d.ts +1 -0
- package/dist/runtime/components/Table/Base.d.vue.ts +15 -1
- package/dist/runtime/components/Table/Base.vue +118 -118
- package/dist/runtime/components/Table/Base.vue.d.ts +15 -1
- package/dist/runtime/components/Table/ColumnDate.vue +1 -1
- package/dist/runtime/components/Table/ColumnDateTime.vue +1 -1
- package/dist/runtime/components/Table/ColumnImage.vue +4 -4
- package/dist/runtime/components/Table/ColumnText.d.vue.ts +2 -3
- package/dist/runtime/components/Table/ColumnText.vue +11 -11
- package/dist/runtime/components/Table/ColumnText.vue.d.ts +2 -3
- package/dist/runtime/components/Table/Pagination.vue +70 -67
- package/dist/runtime/components/Table/Simple.vue +19 -19
- package/dist/runtime/components/Table/index.d.vue.ts +1 -1
- package/dist/runtime/components/Table/index.vue +37 -33
- package/dist/runtime/components/Table/index.vue.d.ts +1 -1
- package/dist/runtime/composables/loaderList.d.ts +2 -1
- package/dist/runtime/composables/loaderList.js +2 -1
- package/dist/runtime/composables/loaderObject.d.ts +2 -1
- package/dist/runtime/composables/loaderObject.js +2 -1
- package/dist/runtime/composables/loaderPage.js +194 -344
- package/dist/runtime/composables/useConfig.js +4 -3
- package/dist/runtime/composables/useDialog.js +5 -1
- package/dist/runtime/composables/useForm.d.ts +1 -1
- package/dist/runtime/composables/useForm.js +1 -1
- package/dist/runtime/composables/useMessages.d.ts +10 -0
- package/dist/runtime/composables/useMessages.js +10 -0
- package/dist/runtime/helpers/apiPageHelper.d.ts +0 -1
- package/dist/runtime/helpers/uploadCore.d.ts +54 -0
- package/dist/runtime/helpers/uploadCore.js +84 -0
- package/dist/runtime/i18n/valibot.d.ts +5 -68
- package/dist/runtime/i18n/valibot.js +33 -29
- package/dist/runtime/locale/en.d.ts +2 -0
- package/dist/runtime/locale/en.js +42 -0
- package/dist/runtime/locale/index.d.ts +7 -0
- package/dist/runtime/locale/index.js +8 -0
- package/dist/runtime/locale/th.d.ts +43 -0
- package/dist/runtime/locale/th.js +42 -0
- package/dist/runtime/server/tsconfig.json +3 -3
- package/dist/runtime/utils/ParamHelper.js +1 -1
- package/dist/runtime/utils/StringHelper.js +1 -4
- package/dist/runtime/utils/TimeHelper.js +2 -2
- package/dist/runtime/utils/lodash.js +2 -2
- package/package.json +20 -12
package/dist/module.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as _nuxt_schema from '@nuxt/schema';
|
|
2
|
+
import { ICoreMessagesOverride } from '../dist/runtime/locale/index.js';
|
|
2
3
|
|
|
3
4
|
declare const core: {
|
|
4
5
|
limit_per_page: number;
|
|
@@ -15,6 +16,7 @@ declare const core: {
|
|
|
15
16
|
color: string;
|
|
16
17
|
time_zone: string;
|
|
17
18
|
locale: string;
|
|
19
|
+
messages: ICoreMessagesOverride;
|
|
18
20
|
};
|
|
19
21
|
|
|
20
22
|
interface ModuleOptions {
|
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import * as lodash from 'lodash-es';
|
|
|
4
4
|
import * as theme from '../dist/runtime/theme/index.js';
|
|
5
5
|
|
|
6
6
|
const name = "@finema/core";
|
|
7
|
-
const version = "3.
|
|
7
|
+
const version = "3.23.2";
|
|
8
8
|
|
|
9
9
|
const nuxtAppOptions = {
|
|
10
10
|
head: {
|
|
@@ -62,7 +62,9 @@ const core = {
|
|
|
62
62
|
site_name: "",
|
|
63
63
|
color: "#3675FB",
|
|
64
64
|
time_zone: "Asia/Bangkok",
|
|
65
|
-
locale: "th"
|
|
65
|
+
locale: "th",
|
|
66
|
+
// Override any text the kit renders by itself, e.g. { common: { confirm: 'ยืนยัน' } }
|
|
67
|
+
messages: {}
|
|
66
68
|
};
|
|
67
69
|
|
|
68
70
|
const module$1 = defineNuxtModule({
|
|
@@ -132,6 +134,17 @@ const module$1 = defineNuxtModule({
|
|
|
132
134
|
},
|
|
133
135
|
_nuxt.options.build
|
|
134
136
|
);
|
|
137
|
+
const isInstalledPackage = import.meta.url.includes("node_modules");
|
|
138
|
+
const runtimeOptimizeDeps = [
|
|
139
|
+
"date-fns",
|
|
140
|
+
"date-fns/locale/th",
|
|
141
|
+
"date-fns-tz",
|
|
142
|
+
"lodash-es",
|
|
143
|
+
"url-join",
|
|
144
|
+
"maska/vue",
|
|
145
|
+
"@vuepic/vue-datepicker",
|
|
146
|
+
"@vueuse/components"
|
|
147
|
+
].map((dep) => isInstalledPackage ? `${name} > ${dep}` : dep);
|
|
135
148
|
_nuxt.options.vite = defu(
|
|
136
149
|
{
|
|
137
150
|
resolve: {
|
|
@@ -153,6 +166,7 @@ const module$1 = defineNuxtModule({
|
|
|
153
166
|
"axios",
|
|
154
167
|
"tailwind-variants",
|
|
155
168
|
"@vueuse/core",
|
|
169
|
+
...runtimeOptimizeDeps,
|
|
156
170
|
"@nuxt/ui > prosemirror-state",
|
|
157
171
|
"@nuxt/ui > prosemirror-transform",
|
|
158
172
|
"@nuxt/ui > prosemirror-model",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
<script setup>
|
|
15
15
|
import { th } from "@nuxt/ui/locale";
|
|
16
|
-
import UApp from "#ui/components/App";
|
|
16
|
+
import UApp from "#ui/components/App.vue";
|
|
17
17
|
import { useHead } from "#imports";
|
|
18
18
|
import { useCoreConfig } from "#core/composables/useConfig";
|
|
19
19
|
import DevToolsWindow from "#core/components/DevToolsWindow/index.vue";
|
|
@@ -298,7 +298,7 @@ onMounted(() => {
|
|
|
298
298
|
const currentStyle = devToolsDynamicStyles.value;
|
|
299
299
|
Object.keys(currentStyle).forEach((key) => {
|
|
300
300
|
if (devToolsRef.value) {
|
|
301
|
-
devToolsRef.value.style[key] = currentStyle[key];
|
|
301
|
+
devToolsRef.value.style[key] = currentStyle[key] ?? "";
|
|
302
302
|
}
|
|
303
303
|
});
|
|
304
304
|
}
|
|
@@ -3,9 +3,6 @@ declare const __VLS_export: import("vue").DefineComponent<IDialogMetaItem, {}, {
|
|
|
3
3
|
close: (args_0: boolean) => any;
|
|
4
4
|
}, string, import("vue").PublicProps, Readonly<IDialogMetaItem> & Readonly<{
|
|
5
5
|
onClose?: ((args_0: boolean) => any) | undefined;
|
|
6
|
-
}>, {
|
|
7
|
-
confirmText: string;
|
|
8
|
-
cancelText: string;
|
|
9
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
6
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
10
7
|
declare const _default: typeof __VLS_export;
|
|
11
8
|
export default _default;
|
|
@@ -64,21 +64,20 @@ import { computed, useAttrs } from "vue";
|
|
|
64
64
|
import { useUiIconConfig, useUiConfig } from "../../composables/useConfig";
|
|
65
65
|
import { dialogTheme } from "#core/theme/dialog";
|
|
66
66
|
import { DialogType } from "#core/composables/useDialog";
|
|
67
|
+
import { useCoreMessages } from "#core/composables/useMessages";
|
|
67
68
|
const emits = defineEmits();
|
|
68
|
-
const props =
|
|
69
|
-
confirmText: "\u0E15\u0E01\u0E25\u0E07",
|
|
70
|
-
cancelText: "\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01"
|
|
71
|
-
});
|
|
69
|
+
const props = defineProps();
|
|
72
70
|
const attrs = useAttrs();
|
|
71
|
+
const {
|
|
72
|
+
messages
|
|
73
|
+
} = useCoreMessages();
|
|
73
74
|
const icons = useUiIconConfig("dialog");
|
|
74
75
|
const propsSafe = computed(() => {
|
|
75
|
-
|
|
76
|
-
return props;
|
|
77
|
-
}
|
|
76
|
+
const source = props.title ? props : attrs;
|
|
78
77
|
return {
|
|
79
|
-
...
|
|
80
|
-
cancelText:
|
|
81
|
-
confirmText:
|
|
78
|
+
...source,
|
|
79
|
+
cancelText: source.cancelText || messages.value.common.cancel,
|
|
80
|
+
confirmText: source.confirmText || messages.value.common.confirm
|
|
82
81
|
};
|
|
83
82
|
});
|
|
84
83
|
const getIcon = computed(() => {
|
|
@@ -3,9 +3,6 @@ declare const __VLS_export: import("vue").DefineComponent<IDialogMetaItem, {}, {
|
|
|
3
3
|
close: (args_0: boolean) => any;
|
|
4
4
|
}, string, import("vue").PublicProps, Readonly<IDialogMetaItem> & Readonly<{
|
|
5
5
|
onClose?: ((args_0: boolean) => any) | undefined;
|
|
6
|
-
}>, {
|
|
7
|
-
confirmText: string;
|
|
8
|
-
cancelText: string;
|
|
9
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
6
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
10
7
|
declare const _default: typeof __VLS_export;
|
|
11
8
|
export default _default;
|
|
@@ -7,7 +7,6 @@ type __VLS_Props = {
|
|
|
7
7
|
};
|
|
8
8
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
9
9
|
icon: string;
|
|
10
|
-
message: any;
|
|
11
10
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
12
11
|
declare const _default: typeof __VLS_export;
|
|
13
12
|
export default _default;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
:class="theme.message({
|
|
15
15
|
class: [ui?.message]
|
|
16
16
|
})"
|
|
17
|
-
v-html="message"
|
|
17
|
+
v-html="message ?? messages.common.empty"
|
|
18
18
|
/>
|
|
19
19
|
</div>
|
|
20
20
|
</template>
|
|
@@ -23,11 +23,15 @@
|
|
|
23
23
|
import { computed } from "vue";
|
|
24
24
|
import { useUiConfig } from "#core/composables/useConfig";
|
|
25
25
|
import { emptyTheme } from "#core/theme/empty";
|
|
26
|
+
import { useCoreMessages } from "#core/composables/useMessages";
|
|
26
27
|
const props = defineProps({
|
|
27
|
-
message: { type: null, required: false
|
|
28
|
+
message: { type: null, required: false },
|
|
28
29
|
icon: { type: String, required: false, default: "ph:table-thin" },
|
|
29
30
|
ui: { type: null, required: false },
|
|
30
31
|
class: { type: null, required: false }
|
|
31
32
|
});
|
|
32
33
|
const theme = computed(() => useUiConfig(emptyTheme, "empty")());
|
|
34
|
+
const {
|
|
35
|
+
messages
|
|
36
|
+
} = useCoreMessages();
|
|
33
37
|
</script>
|
|
@@ -7,7 +7,6 @@ type __VLS_Props = {
|
|
|
7
7
|
};
|
|
8
8
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
9
9
|
icon: string;
|
|
10
|
-
message: any;
|
|
11
10
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
12
11
|
declare const _default: typeof __VLS_export;
|
|
13
12
|
export default _default;
|
|
@@ -1,90 +1,93 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<div
|
|
4
|
-
v-if="options.isEnabledSearch"
|
|
5
|
-
class="mb-4 flex justify-end"
|
|
6
|
-
>
|
|
7
|
-
<Input
|
|
8
|
-
v-model="q"
|
|
9
|
-
icon="i-heroicons-magnifying-glass"
|
|
10
|
-
:placeholder="options.searchPlaceholder ||
|
|
11
|
-
/>
|
|
12
|
-
</div>
|
|
13
|
-
|
|
14
|
-
<div
|
|
15
|
-
v-if="options.pageOptions && options.isEnableInfiniteScroll"
|
|
16
|
-
class="mb-4 flex items-center justify-end"
|
|
17
|
-
>
|
|
18
|
-
<p class="text-xs text-gray-500">
|
|
19
|
-
{{ totalInnerRawData }}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
:
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
{{
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
:
|
|
75
|
-
:
|
|
76
|
-
:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
2
|
+
<div>
|
|
3
|
+
<div
|
|
4
|
+
v-if="options.isEnabledSearch"
|
|
5
|
+
class="mb-4 flex justify-end"
|
|
6
|
+
>
|
|
7
|
+
<Input
|
|
8
|
+
v-model="q"
|
|
9
|
+
icon="i-heroicons-magnifying-glass"
|
|
10
|
+
:placeholder="options.searchPlaceholder || messages.common.search"
|
|
11
|
+
/>
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
<div
|
|
15
|
+
v-if="options.pageOptions && options.isEnableInfiniteScroll"
|
|
16
|
+
class="mb-4 flex items-center justify-end"
|
|
17
|
+
>
|
|
18
|
+
<p class="text-xs text-gray-500">
|
|
19
|
+
{{ totalInnerRawData }} {{ messages.pagination.itemsOfTotal }}
|
|
20
|
+
{{ totalCountWithComma }} {{ messages.pagination.items }}
|
|
21
|
+
</p>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<slot
|
|
25
|
+
v-if="options.status.isSuccess && options.rawData.length === 0"
|
|
26
|
+
name="empty-state"
|
|
27
|
+
>
|
|
28
|
+
<Empty />
|
|
29
|
+
</slot>
|
|
30
|
+
|
|
31
|
+
<slot
|
|
32
|
+
v-else-if="options.status.isLoading"
|
|
33
|
+
name="loading-state"
|
|
34
|
+
>
|
|
35
|
+
<Loader
|
|
36
|
+
:loading="true"
|
|
37
|
+
/>
|
|
38
|
+
</slot>
|
|
39
|
+
<slot
|
|
40
|
+
v-else-if="options.status.isError"
|
|
41
|
+
name="error-state"
|
|
42
|
+
>
|
|
43
|
+
<div
|
|
44
|
+
class="
|
|
45
|
+
text-error-400 flex h-[200px] items-center justify-center text-2xl
|
|
46
|
+
"
|
|
47
|
+
>
|
|
48
|
+
{{ StringHelper.getError(options.status.errorData) }}
|
|
49
|
+
</div>
|
|
50
|
+
</slot>
|
|
51
|
+
|
|
52
|
+
<div
|
|
53
|
+
v-else
|
|
54
|
+
:class="containerClass"
|
|
55
|
+
>
|
|
56
|
+
<slot
|
|
57
|
+
v-for="(row, index) in displayData"
|
|
58
|
+
:key="index"
|
|
59
|
+
:row="row"
|
|
60
|
+
/>
|
|
61
|
+
<div ref="bottomEdgeElement" />
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
<div
|
|
65
|
+
v-if="options.pageOptions && !options.isEnableInfiniteScroll && !options.isHidePagination"
|
|
66
|
+
class="mt-4 flex justify-between px-3"
|
|
67
|
+
>
|
|
68
|
+
<p class="text-xs text-gray-500">
|
|
69
|
+
{{ pageBetween }} {{ messages.pagination.itemsOfTotal }}
|
|
70
|
+
{{ totalCountWithComma }} {{ messages.pagination.items }}
|
|
71
|
+
</p>
|
|
72
|
+
<Pagination
|
|
73
|
+
v-if="options.pageOptions.totalPage > 1"
|
|
74
|
+
:to="options.isRouteChange ? to : void 0"
|
|
75
|
+
:default-page="options.pageOptions?.currentPage || 1"
|
|
76
|
+
:items-per-page="options.pageOptions.limit"
|
|
77
|
+
:total="options.pageOptions.totalCount"
|
|
78
|
+
@update:page="onPageChange"
|
|
79
|
+
/>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
81
82
|
</template>
|
|
82
83
|
|
|
83
84
|
<script setup>
|
|
85
|
+
import { useCoreMessages } from "#core/composables/useMessages";
|
|
84
86
|
import { computed, ref, watch } from "vue";
|
|
85
87
|
import { useElementVisibility } from "@vueuse/core";
|
|
86
88
|
import { NumberHelper } from "#core/utils/NumberHelper";
|
|
87
|
-
import {
|
|
89
|
+
import { StringHelper } from "#core/utils/StringHelper";
|
|
90
|
+
import { _debounce, useRouter, useWatchChange, useWatchTrue } from "#imports";
|
|
88
91
|
import { useCoreConfig } from "#core/composables/useConfig";
|
|
89
92
|
import Empty from "#core/components/Empty.vue";
|
|
90
93
|
const emits = defineEmits(["pageChange", "search"]);
|
|
@@ -100,7 +103,6 @@ const props = defineProps({
|
|
|
100
103
|
});
|
|
101
104
|
defineSlots();
|
|
102
105
|
const coreConfig = useCoreConfig();
|
|
103
|
-
const appConfig = useAppConfig();
|
|
104
106
|
const router = useRouter();
|
|
105
107
|
const q = ref(props.options?.pageOptions.search ?? "");
|
|
106
108
|
const bottomEdgeElement = ref(null);
|
|
@@ -176,4 +178,7 @@ watch(targetElement, (value) => {
|
|
|
176
178
|
const onPageChange = (page2) => {
|
|
177
179
|
emits("pageChange", page2);
|
|
178
180
|
};
|
|
181
|
+
const {
|
|
182
|
+
messages
|
|
183
|
+
} = useCoreMessages();
|
|
179
184
|
</script>
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<FormField
|
|
3
|
-
:label="label"
|
|
4
|
-
:name="name"
|
|
5
|
-
:description="description"
|
|
6
|
-
:hint="hint"
|
|
7
|
-
:data-testid="name"
|
|
8
|
-
:help="help"
|
|
9
|
-
:error="errorMessage"
|
|
10
|
-
:required="!!required"
|
|
11
|
-
:ui="containerUi"
|
|
12
|
-
>
|
|
13
|
-
<slot />
|
|
14
|
-
</FormField>
|
|
2
|
+
<FormField
|
|
3
|
+
:label="label"
|
|
4
|
+
:name="name"
|
|
5
|
+
:description="description"
|
|
6
|
+
:hint="hint"
|
|
7
|
+
:data-testid="name"
|
|
8
|
+
:help="help"
|
|
9
|
+
:error="errorMessage"
|
|
10
|
+
:required="!!required"
|
|
11
|
+
:ui="containerUi"
|
|
12
|
+
>
|
|
13
|
+
<slot />
|
|
14
|
+
</FormField>
|
|
15
15
|
</template>
|
|
16
16
|
|
|
17
17
|
<script setup>
|
|
@@ -30,6 +30,6 @@ defineProps({
|
|
|
30
30
|
required: { type: Boolean, required: false },
|
|
31
31
|
help: { type: String, required: false },
|
|
32
32
|
ui: { type: null, required: false },
|
|
33
|
-
containerUi: { type:
|
|
33
|
+
containerUi: { type: Object, required: false }
|
|
34
34
|
});
|
|
35
35
|
</script>
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
</template>
|
|
21
21
|
|
|
22
22
|
<script setup>
|
|
23
|
-
import { computed } from "vue";
|
|
23
|
+
import { computed, defineAsyncComponent } from "vue";
|
|
24
24
|
import FormInputTextarea from "./InputTextarea/index.vue";
|
|
25
25
|
import FormInputText from "./InputText/index.vue";
|
|
26
26
|
import FormInputSearch from "./InputSearch/index.vue";
|
|
@@ -34,16 +34,7 @@ import FormInputSelectMultiple from "./InputSelectMultiple/index.vue";
|
|
|
34
34
|
import FormInputComponent from "./InputComponent/index.vue";
|
|
35
35
|
import FormInputRadio from "./InputRadio/index.vue";
|
|
36
36
|
import FormInputRating from "./InputRating/index.vue";
|
|
37
|
-
import FormInputDateTime from "./InputDateTime/index.vue";
|
|
38
|
-
import FormInputTime from "./InputTime/index.vue";
|
|
39
|
-
import FormInputMonth from "./InputMonth/index.vue";
|
|
40
|
-
import FormInputDateTimeRange from "./InputDateTimeRange/index.vue";
|
|
41
|
-
import FormInputUploadDropzoneAuto from "./InputUploadDropzoneAuto/index.vue";
|
|
42
|
-
import FormInputUploadDropzoneAutoMultiple from "./InputUploadDropzoneAutoMultiple/index.vue";
|
|
43
|
-
import FormInputUploadDropzone from "./InputUploadDropzone/index.vue";
|
|
44
|
-
import FormInputUploadImageAuto from "./InputUploadImageAuto/index.vue";
|
|
45
37
|
import FormInputTag from "./InputTags/index.vue";
|
|
46
|
-
import FormInputWYSIWYG from "./InputWYSIWYG/index.vue";
|
|
47
38
|
import { INPUT_TYPES } from "#core/components/Form/types";
|
|
48
39
|
import { formTheme } from "#core/theme/form";
|
|
49
40
|
import { useUiConfig } from "#core/composables/useConfig";
|
|
@@ -54,6 +45,15 @@ const props = defineProps({
|
|
|
54
45
|
class: { type: null, required: false },
|
|
55
46
|
ui: { type: null, required: false }
|
|
56
47
|
});
|
|
48
|
+
const FormInputDateTime = defineAsyncComponent(() => import("./InputDateTime/index.vue"));
|
|
49
|
+
const FormInputTime = defineAsyncComponent(() => import("./InputTime/index.vue"));
|
|
50
|
+
const FormInputMonth = defineAsyncComponent(() => import("./InputMonth/index.vue"));
|
|
51
|
+
const FormInputDateTimeRange = defineAsyncComponent(() => import("./InputDateTimeRange/index.vue"));
|
|
52
|
+
const FormInputUploadDropzoneAuto = defineAsyncComponent(() => import("./InputUploadDropzoneAuto/index.vue"));
|
|
53
|
+
const FormInputUploadDropzoneAutoMultiple = defineAsyncComponent(() => import("./InputUploadDropzoneAutoMultiple/index.vue"));
|
|
54
|
+
const FormInputUploadDropzone = defineAsyncComponent(() => import("./InputUploadDropzone/index.vue"));
|
|
55
|
+
const FormInputUploadImageAuto = defineAsyncComponent(() => import("./InputUploadImageAuto/index.vue"));
|
|
56
|
+
const FormInputWYSIWYG = defineAsyncComponent(() => import("./InputWYSIWYG/index.vue"));
|
|
57
57
|
const componentMap = {
|
|
58
58
|
[INPUT_TYPES.TEXT]: {
|
|
59
59
|
component: FormInputText,
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<FieldWrapper
|
|
3
|
-
v-bind="wrapperProps"
|
|
4
|
-
label=""
|
|
5
|
-
description=""
|
|
6
|
-
>
|
|
7
|
-
<Checkbox
|
|
8
|
-
:model-value="value"
|
|
9
|
-
:disabled="wrapperProps.disabled"
|
|
10
|
-
:name="name"
|
|
11
|
-
:label="label"
|
|
12
|
-
:description="description"
|
|
13
|
-
:required="required"
|
|
14
|
-
:variant="variant"
|
|
15
|
-
:indicator="indicator"
|
|
16
|
-
:ui="ui"
|
|
17
|
-
@update:modelValue="onChange"
|
|
18
|
-
/>
|
|
19
|
-
</FieldWrapper>
|
|
2
|
+
<FieldWrapper
|
|
3
|
+
v-bind="wrapperProps"
|
|
4
|
+
label=""
|
|
5
|
+
description=""
|
|
6
|
+
>
|
|
7
|
+
<Checkbox
|
|
8
|
+
:model-value="value"
|
|
9
|
+
:disabled="wrapperProps.disabled"
|
|
10
|
+
:name="name"
|
|
11
|
+
:label="label"
|
|
12
|
+
:description="description"
|
|
13
|
+
:required="required"
|
|
14
|
+
:variant="variant"
|
|
15
|
+
:indicator="indicator"
|
|
16
|
+
:ui="ui"
|
|
17
|
+
@update:modelValue="onChange"
|
|
18
|
+
/>
|
|
19
|
+
</FieldWrapper>
|
|
20
20
|
</template>
|
|
21
21
|
|
|
22
22
|
<script setup>
|
|
@@ -39,7 +39,8 @@ const props = defineProps({
|
|
|
39
39
|
readonly: { type: Boolean, required: false },
|
|
40
40
|
required: { type: Boolean, required: false },
|
|
41
41
|
help: { type: String, required: false },
|
|
42
|
-
ui: { type: null, required: false }
|
|
42
|
+
ui: { type: null, required: false },
|
|
43
|
+
containerUi: { type: null, required: false }
|
|
43
44
|
});
|
|
44
45
|
const {
|
|
45
46
|
value,
|
|
@@ -45,7 +45,8 @@ const props = defineProps({
|
|
|
45
45
|
readonly: { type: Boolean, required: false },
|
|
46
46
|
required: { type: Boolean, required: false },
|
|
47
47
|
help: { type: String, required: false },
|
|
48
|
-
ui: { type: null, required: false }
|
|
48
|
+
ui: { type: null, required: false },
|
|
49
|
+
containerUi: { type: null, required: false }
|
|
49
50
|
});
|
|
50
51
|
const {
|
|
51
52
|
value,
|
|
@@ -21,6 +21,7 @@ const props = defineProps({
|
|
|
21
21
|
readonly: { type: Boolean, required: false },
|
|
22
22
|
required: { type: Boolean, required: false },
|
|
23
23
|
help: { type: String, required: false },
|
|
24
|
-
ui: { type: null, required: false }
|
|
24
|
+
ui: { type: null, required: false },
|
|
25
|
+
containerUi: { type: null, required: false }
|
|
25
26
|
});
|
|
26
27
|
</script>
|
|
@@ -1,56 +1,56 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<FieldWrapper
|
|
3
|
-
v-bind="wrapperProps"
|
|
4
|
-
:error-message="undefined"
|
|
5
|
-
>
|
|
6
|
-
<div
|
|
2
|
+
<FieldWrapper
|
|
3
|
+
v-bind="wrapperProps"
|
|
4
|
+
:error-message="undefined"
|
|
5
|
+
>
|
|
6
|
+
<div
|
|
7
7
|
:class="['inline-flex w-full items-center -space-x-px rounded-lg ring-1', {
|
|
8
8
|
'ring-error': wrapperProps.errorMessage,
|
|
9
9
|
'ring-gray-300': !wrapperProps.errorMessage
|
|
10
|
-
}]"
|
|
11
|
-
>
|
|
12
|
-
<p class="pl-3 text-lg">
|
|
13
|
-
{{ currencySymbol }}
|
|
14
|
-
</p>
|
|
15
|
-
<InputNumber
|
|
16
|
-
:model-value="value.value"
|
|
17
|
-
:disabled="wrapperProps.disabled"
|
|
18
|
-
:name="name"
|
|
19
|
-
:placeholder="wrapperProps.placeholder"
|
|
20
|
-
:autofocus="!!autoFocus"
|
|
21
|
-
:readonly="readonly"
|
|
22
|
-
:min="min"
|
|
23
|
-
:max="max"
|
|
24
|
-
:step="step"
|
|
25
|
-
:format-options="formatOptions"
|
|
26
|
-
:increment="false"
|
|
27
|
-
:decrement="false"
|
|
28
|
-
variant="none"
|
|
29
|
-
@update:model-value="onAmountChange"
|
|
30
|
-
/>
|
|
31
|
-
<Select
|
|
32
|
-
:model-value="value.currency"
|
|
33
|
-
:items="options"
|
|
34
|
-
:disabled="wrapperProps.disabled"
|
|
35
|
-
value-key="value"
|
|
36
|
-
label-key="label"
|
|
37
|
-
variant="none"
|
|
38
|
-
size="xl"
|
|
39
|
-
class="cursor-pointer"
|
|
40
|
-
@update:model-value="onCurrencyChange"
|
|
41
|
-
>
|
|
42
|
-
<template #default="{ modelValue }">
|
|
43
|
-
{{ options.find((item) => item.value === modelValue)?.label || modelValue }}
|
|
44
|
-
</template>
|
|
45
|
-
</Select>
|
|
46
|
-
</div>
|
|
47
|
-
<p
|
|
48
|
-
v-if="wrapperProps.errorMessage"
|
|
49
|
-
class="text-error mt-2"
|
|
50
|
-
>
|
|
51
|
-
{{ wrapperProps.errorMessage }}
|
|
52
|
-
</p>
|
|
53
|
-
</FieldWrapper>
|
|
10
|
+
}]"
|
|
11
|
+
>
|
|
12
|
+
<p class="pl-3 text-lg">
|
|
13
|
+
{{ currencySymbol }}
|
|
14
|
+
</p>
|
|
15
|
+
<InputNumber
|
|
16
|
+
:model-value="value.value"
|
|
17
|
+
:disabled="wrapperProps.disabled"
|
|
18
|
+
:name="name"
|
|
19
|
+
:placeholder="wrapperProps.placeholder"
|
|
20
|
+
:autofocus="!!autoFocus"
|
|
21
|
+
:readonly="readonly"
|
|
22
|
+
:min="min"
|
|
23
|
+
:max="max"
|
|
24
|
+
:step="step"
|
|
25
|
+
:format-options="formatOptions"
|
|
26
|
+
:increment="false"
|
|
27
|
+
:decrement="false"
|
|
28
|
+
variant="none"
|
|
29
|
+
@update:model-value="onAmountChange"
|
|
30
|
+
/>
|
|
31
|
+
<Select
|
|
32
|
+
:model-value="value.currency"
|
|
33
|
+
:items="options"
|
|
34
|
+
:disabled="wrapperProps.disabled"
|
|
35
|
+
value-key="value"
|
|
36
|
+
label-key="label"
|
|
37
|
+
variant="none"
|
|
38
|
+
size="xl"
|
|
39
|
+
class="cursor-pointer"
|
|
40
|
+
@update:model-value="onCurrencyChange"
|
|
41
|
+
>
|
|
42
|
+
<template #default="{ modelValue }">
|
|
43
|
+
{{ options.find((item) => item.value === modelValue)?.label || modelValue }}
|
|
44
|
+
</template>
|
|
45
|
+
</Select>
|
|
46
|
+
</div>
|
|
47
|
+
<p
|
|
48
|
+
v-if="wrapperProps.errorMessage"
|
|
49
|
+
class="text-error mt-2"
|
|
50
|
+
>
|
|
51
|
+
{{ wrapperProps.errorMessage }}
|
|
52
|
+
</p>
|
|
53
|
+
</FieldWrapper>
|
|
54
54
|
</template>
|
|
55
55
|
|
|
56
56
|
<script setup>
|
|
@@ -90,7 +90,8 @@ const props = defineProps({
|
|
|
90
90
|
readonly: { type: Boolean, required: false },
|
|
91
91
|
required: { type: Boolean, required: false },
|
|
92
92
|
help: { type: String, required: false },
|
|
93
|
-
ui: { type: null, required: false }
|
|
93
|
+
ui: { type: null, required: false },
|
|
94
|
+
containerUi: { type: null, required: false }
|
|
94
95
|
});
|
|
95
96
|
const {
|
|
96
97
|
value,
|