@ramathibodi/nuxt-commons 0.1.73 → 0.1.75
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/README.md +115 -96
- package/dist/module.json +1 -1
- package/dist/module.mjs +1 -0
- package/dist/runtime/components/Alert.vue +58 -54
- package/dist/runtime/components/BarcodeReader.vue +130 -122
- package/dist/runtime/components/ExportCSV.vue +110 -102
- package/dist/runtime/components/FileBtn.vue +79 -67
- package/dist/runtime/components/ImportCSV.vue +151 -139
- package/dist/runtime/components/MrzReader.vue +168 -0
- package/dist/runtime/components/SplitterPanel.vue +67 -59
- package/dist/runtime/components/TabsGroup.vue +39 -31
- package/dist/runtime/components/TextBarcode.vue +66 -54
- package/dist/runtime/components/device/IdCardButton.vue +95 -83
- package/dist/runtime/components/device/IdCardWebSocket.vue +207 -195
- package/dist/runtime/components/device/Scanner.vue +350 -338
- package/dist/runtime/components/dialog/Confirm.vue +112 -100
- package/dist/runtime/components/dialog/Host.vue +88 -84
- package/dist/runtime/components/dialog/Index.vue +84 -72
- package/dist/runtime/components/dialog/Loading.vue +51 -39
- package/dist/runtime/components/dialog/default/Confirm.vue +112 -100
- package/dist/runtime/components/dialog/default/Loading.vue +60 -48
- package/dist/runtime/components/dialog/default/Notify.vue +82 -70
- package/dist/runtime/components/dialog/default/Printing.vue +46 -34
- package/dist/runtime/components/dialog/default/VerifyUser.vue +144 -132
- package/dist/runtime/components/document/Form.vue +50 -42
- package/dist/runtime/components/document/TemplateBuilder.vue +536 -524
- package/dist/runtime/components/form/ActionPad.vue +156 -144
- package/dist/runtime/components/form/Birthdate.vue +116 -104
- package/dist/runtime/components/form/CheckboxGroup.vue +99 -87
- package/dist/runtime/components/form/CodeEditor.vue +45 -37
- package/dist/runtime/components/form/Date.vue +270 -258
- package/dist/runtime/components/form/DateTime.vue +220 -208
- package/dist/runtime/components/form/Dialog.vue +178 -166
- package/dist/runtime/components/form/EditPad.vue +157 -145
- package/dist/runtime/components/form/File.vue +295 -283
- package/dist/runtime/components/form/Hidden.vue +44 -32
- package/dist/runtime/components/form/Iterator.vue +538 -526
- package/dist/runtime/components/form/Login.vue +143 -131
- package/dist/runtime/components/form/Pad.vue +399 -387
- package/dist/runtime/components/form/SignPad.vue +226 -218
- package/dist/runtime/components/form/System.vue +34 -26
- package/dist/runtime/components/form/Table.vue +391 -379
- package/dist/runtime/components/form/TableData.vue +236 -224
- package/dist/runtime/components/form/Time.vue +177 -165
- package/dist/runtime/components/form/images/Capture.vue +245 -237
- package/dist/runtime/components/form/images/Edit.vue +133 -121
- package/dist/runtime/components/form/images/Field.vue +331 -320
- package/dist/runtime/components/form/images/Pad.vue +54 -42
- package/dist/runtime/components/label/Date.vue +37 -29
- package/dist/runtime/components/label/DateAgo.vue +102 -94
- package/dist/runtime/components/label/DateCount.vue +152 -144
- package/dist/runtime/components/label/Field.vue +111 -103
- package/dist/runtime/components/label/FormatMoney.vue +37 -29
- package/dist/runtime/components/label/Mask.vue +46 -38
- package/dist/runtime/components/label/Object.vue +21 -13
- package/dist/runtime/components/master/Autocomplete.vue +89 -81
- package/dist/runtime/components/master/Combobox.vue +88 -80
- package/dist/runtime/components/master/RadioGroup.vue +90 -78
- package/dist/runtime/components/master/Select.vue +70 -62
- package/dist/runtime/components/master/label.vue +55 -47
- package/dist/runtime/components/model/Autocomplete.vue +91 -79
- package/dist/runtime/components/model/Combobox.vue +90 -78
- package/dist/runtime/components/model/Pad.vue +114 -102
- package/dist/runtime/components/model/Select.vue +78 -72
- package/dist/runtime/components/model/Table.vue +370 -358
- package/dist/runtime/components/model/iterator.vue +497 -489
- package/dist/runtime/components/model/label.vue +58 -50
- package/dist/runtime/components/pdf/Print.vue +75 -63
- package/dist/runtime/components/pdf/View.vue +146 -134
- package/dist/runtime/composables/alert.d.ts +4 -0
- package/dist/runtime/composables/api.d.ts +4 -0
- package/dist/runtime/composables/dialog.d.ts +1 -1
- package/dist/runtime/composables/document/templateFormHidden.d.ts +4 -0
- package/dist/runtime/composables/graphql.d.ts +1 -1
- package/dist/runtime/composables/graphqlModel.d.ts +9 -9
- package/dist/runtime/composables/graphqlModelItem.d.ts +7 -7
- package/dist/runtime/composables/graphqlModelOperation.d.ts +6 -6
- package/dist/runtime/composables/localStorageModel.d.ts +4 -0
- package/dist/runtime/composables/lookupList.d.ts +4 -0
- package/dist/runtime/composables/menu.d.ts +4 -0
- package/dist/runtime/composables/useMrzReader.d.ts +48 -0
- package/dist/runtime/composables/useMrzReader.js +423 -0
- package/dist/runtime/composables/useTesseract.d.ts +16 -0
- package/dist/runtime/composables/useTesseract.js +45 -0
- package/dist/runtime/composables/userPermission.d.ts +1 -1
- package/dist/runtime/labs/Calendar.vue +99 -99
- package/dist/runtime/labs/form/EditMobile.vue +152 -152
- package/dist/runtime/labs/form/TextFieldMask.vue +43 -43
- package/dist/runtime/plugins/clientConfig.d.ts +1 -1
- package/dist/runtime/plugins/default.d.ts +1 -1
- package/dist/runtime/plugins/dialogManager.d.ts +1 -1
- package/dist/runtime/plugins/permission.d.ts +1 -1
- package/dist/runtime/types/alert.d.ts +11 -11
- package/dist/runtime/types/clientConfig.d.ts +13 -13
- package/dist/runtime/types/dialogManager.d.ts +35 -35
- package/dist/runtime/types/formDialog.d.ts +5 -5
- package/dist/runtime/types/graphqlOperation.d.ts +23 -23
- package/dist/runtime/types/menu.d.ts +31 -31
- package/dist/runtime/types/modules.d.ts +7 -7
- package/dist/runtime/types/permission.d.ts +13 -13
- package/dist/runtime/utils/asset.d.ts +2 -0
- package/dist/runtime/utils/asset.js +49 -0
- package/package.json +131 -122
- package/scripts/enrich-vue-docs-from-ai.mjs +197 -0
- package/scripts/generate-ai-summary.mjs +321 -0
- package/scripts/generate-composables-md.mjs +129 -0
- package/scripts/postInstall.cjs +70 -70
- package/templates/.codegen/codegen.ts +32 -32
- package/templates/.codegen/plugin-schema-object.js +161 -161
- package/templates/public/tesseract/mrz.traineddata.gz +0 -0
- package/templates/public/tesseract/ocrb.traineddata.gz +0 -0
|
@@ -1,43 +1,55 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* FormImagesPad handles image capture, editing, preview, and value synchronization for schema-driven form image fields.
|
|
4
|
+
* This doc block is consumed by vue-docgen for generated API documentation.
|
|
5
|
+
*/
|
|
6
|
+
import { onMounted, nextTick } from 'vue';
|
|
7
|
+
import Painterro from 'painterro';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Public props accepted by FormImagesPad.
|
|
11
|
+
* Document each prop field with intent, defaults, and side effects for clear generated docs.
|
|
12
|
+
*/
|
|
13
|
+
const props = defineProps({
|
|
14
|
+
modelValue: String
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Custom events emitted by FormImagesPad.
|
|
19
|
+
* Parents can listen to these events to react to user actions and internal state changes.
|
|
20
|
+
*/
|
|
21
|
+
const emit = defineEmits(['update:modelValue', 'closedDialog'])
|
|
22
|
+
|
|
23
|
+
const setting = {
|
|
24
|
+
id: "painterroContainer",
|
|
25
|
+
defaultTool: 'brush',
|
|
26
|
+
toolbarPosition: 'top',
|
|
27
|
+
toolbarHeightPx: '50',
|
|
28
|
+
pixelizePixelSize: '5%',
|
|
29
|
+
hiddenTools: [
|
|
30
|
+
'resize',
|
|
31
|
+
'redo',
|
|
32
|
+
'bucket',
|
|
33
|
+
'clear',
|
|
34
|
+
'settings',
|
|
35
|
+
],
|
|
36
|
+
saveHandler: function (image:any, done:any) {
|
|
37
|
+
emit('update:modelValue', image.asDataURL())
|
|
38
|
+
emit('closedDialog', false)
|
|
39
|
+
done(true)
|
|
40
|
+
},
|
|
41
|
+
onClose: function () {
|
|
42
|
+
emit('closedDialog', false)
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
onMounted(async () => {
|
|
47
|
+
await nextTick();
|
|
48
|
+
props.modelValue != "" ? Painterro(setting).show(props.modelValue) : Painterro(setting).show()
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
</script>
|
|
52
|
+
|
|
53
|
+
<template>
|
|
54
|
+
<div id="painterroContainer" style="width: 100%; height: 100dvh;"></div>
|
|
43
55
|
</template>
|
|
@@ -1,29 +1,37 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
/**
|
|
3
|
+
* LabelDate renders read-only label output with formatting logic for display-oriented model values.
|
|
4
|
+
* This doc block is consumed by vue-docgen for generated API documentation.
|
|
5
|
+
*/
|
|
6
|
+
import { computed } from 'vue'
|
|
7
|
+
import { type dateFormat, type dateTimeFormat, Datetime } from '../../utils/datetime'
|
|
8
|
+
|
|
9
|
+
interface Props {
|
|
10
|
+
modelValue?: string // Bound value for v-model synchronization with the parent component.
|
|
11
|
+
locale?: 'TH' | 'EN' // Locale used for date/time formatting and localized labels.
|
|
12
|
+
fromFormat?: string // Input format used to parse incoming string values.
|
|
13
|
+
format?: dateFormat | dateTimeFormat | string // Output format used when converting the value for display or emit.
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Public props accepted by LabelDate.
|
|
18
|
+
* Document each prop field with intent, defaults, and side effects for clear generated docs.
|
|
19
|
+
*/
|
|
20
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
21
|
+
locale: 'TH',
|
|
22
|
+
format: 'shortDate',
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
const formattedDate = computed(() => {
|
|
26
|
+
if (!props.modelValue) {
|
|
27
|
+
return null
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const dateTime = Datetime().fromString(props.modelValue, props.fromFormat)
|
|
31
|
+
return dateTime.luxonDateTime.isValid ? dateTime.toFormat(props.format, props.locale) : props.modelValue
|
|
32
|
+
})
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<template>
|
|
36
|
+
{{ formattedDate }}
|
|
37
|
+
</template>
|
|
@@ -1,95 +1,103 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
years: '
|
|
39
|
-
months: '
|
|
40
|
-
days: '
|
|
41
|
-
hours: '
|
|
42
|
-
minutes: '
|
|
43
|
-
seconds: '
|
|
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
|
-
const value = Math.floor(diff[
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* LabelDateAgo renders read-only label output with formatting logic for display-oriented model values.
|
|
4
|
+
* This doc block is consumed by vue-docgen for generated API documentation.
|
|
5
|
+
*/
|
|
6
|
+
import { DateTime } from "luxon";
|
|
7
|
+
import { computed } from "vue";
|
|
8
|
+
|
|
9
|
+
type Unit = 'years' | 'months' | 'days' | 'hours' | 'minutes' | 'seconds';
|
|
10
|
+
type Locale = 'th' | 'en' | 'en-US' | 'th-TH';
|
|
11
|
+
|
|
12
|
+
interface Props {
|
|
13
|
+
modelValue: DateTime; // Bound value for v-model synchronization with the parent component.
|
|
14
|
+
endDate?: DateTime; // date value used by component logic and display
|
|
15
|
+
locale?: Locale; // Locale used for date/time formatting and localized labels.
|
|
16
|
+
showSuffix?: boolean; // Appends relative-time suffix text like "ago" or "in".
|
|
17
|
+
units?: Unit[]; // Time units allowed in relative date calculations.
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Public props accepted by LabelDateAgo.
|
|
22
|
+
* Document each prop field with intent, defaults, and side effects for clear generated docs.
|
|
23
|
+
*/
|
|
24
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
25
|
+
locale: 'th',
|
|
26
|
+
showSuffix: true
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
// Fallback map: map complex locale (e.g., en-US) to base (e.g., en)
|
|
30
|
+
const normalizeLocale = (locale: Locale): 'en' | 'th' => {
|
|
31
|
+
if (locale.startsWith('en')) return 'en';
|
|
32
|
+
if (locale.startsWith('th')) return 'th';
|
|
33
|
+
return 'th'; // default fallback
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const localizedLabels: Record<'en' | 'th', Record<Unit, string>> = {
|
|
37
|
+
en: {
|
|
38
|
+
years: 'years',
|
|
39
|
+
months: 'months',
|
|
40
|
+
days: 'days',
|
|
41
|
+
hours: 'hours',
|
|
42
|
+
minutes: 'minutes',
|
|
43
|
+
seconds: 'seconds',
|
|
44
|
+
},
|
|
45
|
+
th: {
|
|
46
|
+
years: 'ปี',
|
|
47
|
+
months: 'เดือน',
|
|
48
|
+
days: 'วัน',
|
|
49
|
+
hours: 'ชั่วโมง',
|
|
50
|
+
minutes: 'นาที',
|
|
51
|
+
seconds: 'วินาที',
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const localizedSuffix: Record<'en' | 'th', string> = {
|
|
56
|
+
en: 'ago',
|
|
57
|
+
th: 'ที่ผ่านมา',
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const outputText = computed(() => {
|
|
61
|
+
const base = props.endDate ?? DateTime.now(); // 👈 ใช้ baseDate ถ้ามี ไม่งั้น fallback เป็น now
|
|
62
|
+
const baseLocale = normalizeLocale(props.locale);
|
|
63
|
+
|
|
64
|
+
const units: Unit[] = props.units?.length
|
|
65
|
+
? props.units
|
|
66
|
+
: ['years', 'months', 'days', 'hours', 'minutes', 'seconds'];
|
|
67
|
+
|
|
68
|
+
const diff = base.diff(props.modelValue, units).toObject();
|
|
69
|
+
|
|
70
|
+
// แสดงแบบ single unit
|
|
71
|
+
if (!props.units) {
|
|
72
|
+
const foundUnit = units.find(unit => (diff[unit] ?? 0) >= 1);
|
|
73
|
+
const value = Math.floor(diff[foundUnit!] ?? 0);
|
|
74
|
+
const label = localizedLabels[baseLocale][foundUnit!];
|
|
75
|
+
const suffix = props.showSuffix ? localizedSuffix[baseLocale] : '';
|
|
76
|
+
return `${value} ${label}${suffix}`;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// แสดงหลาย unit
|
|
80
|
+
const parts = units.map(unit => {
|
|
81
|
+
const value = Math.floor(diff[unit] ?? 0);
|
|
82
|
+
if (value > 0) {
|
|
83
|
+
const label = localizedLabels[baseLocale][unit];
|
|
84
|
+
return `${value} ${label}`;
|
|
85
|
+
}
|
|
86
|
+
return '';
|
|
87
|
+
}).filter(Boolean);
|
|
88
|
+
|
|
89
|
+
if (parts.length === 0) {
|
|
90
|
+
const lastUnit = units.at(-1)!;
|
|
91
|
+
const label = localizedLabels[baseLocale][lastUnit];
|
|
92
|
+
const suffix = props.showSuffix ? localizedSuffix[baseLocale] : '';
|
|
93
|
+
return `0 ${label}${suffix}`;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const suffix = props.showSuffix ? localizedSuffix[baseLocale] : '';
|
|
97
|
+
return `${parts.join(' ')}${suffix}`;
|
|
98
|
+
});
|
|
99
|
+
</script>
|
|
100
|
+
|
|
101
|
+
<template>
|
|
102
|
+
<span>{{ outputText }}</span>
|
|
95
103
|
</template>
|