@ramathibodi/nuxt-commons 0.1.74 → 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.
Files changed (96) hide show
  1. package/README.md +115 -115
  2. package/dist/module.json +1 -1
  3. package/dist/runtime/components/Alert.vue +58 -58
  4. package/dist/runtime/components/BarcodeReader.vue +130 -130
  5. package/dist/runtime/components/ExportCSV.vue +110 -110
  6. package/dist/runtime/components/FileBtn.vue +79 -79
  7. package/dist/runtime/components/ImportCSV.vue +151 -151
  8. package/dist/runtime/components/MrzReader.vue +168 -168
  9. package/dist/runtime/components/SplitterPanel.vue +67 -67
  10. package/dist/runtime/components/TabsGroup.vue +39 -39
  11. package/dist/runtime/components/TextBarcode.vue +66 -66
  12. package/dist/runtime/components/device/IdCardButton.vue +95 -95
  13. package/dist/runtime/components/device/IdCardWebSocket.vue +207 -207
  14. package/dist/runtime/components/device/Scanner.vue +350 -350
  15. package/dist/runtime/components/dialog/Confirm.vue +112 -112
  16. package/dist/runtime/components/dialog/Host.vue +88 -88
  17. package/dist/runtime/components/dialog/Index.vue +84 -84
  18. package/dist/runtime/components/dialog/Loading.vue +51 -51
  19. package/dist/runtime/components/dialog/default/Confirm.vue +112 -112
  20. package/dist/runtime/components/dialog/default/Loading.vue +60 -60
  21. package/dist/runtime/components/dialog/default/Notify.vue +82 -82
  22. package/dist/runtime/components/dialog/default/Printing.vue +46 -46
  23. package/dist/runtime/components/dialog/default/VerifyUser.vue +144 -144
  24. package/dist/runtime/components/document/Form.vue +50 -50
  25. package/dist/runtime/components/document/TemplateBuilder.vue +536 -536
  26. package/dist/runtime/components/form/ActionPad.vue +156 -156
  27. package/dist/runtime/components/form/Birthdate.vue +116 -116
  28. package/dist/runtime/components/form/CheckboxGroup.vue +99 -99
  29. package/dist/runtime/components/form/CodeEditor.vue +45 -45
  30. package/dist/runtime/components/form/Date.vue +270 -270
  31. package/dist/runtime/components/form/DateTime.vue +220 -220
  32. package/dist/runtime/components/form/Dialog.vue +178 -178
  33. package/dist/runtime/components/form/EditPad.vue +157 -157
  34. package/dist/runtime/components/form/File.vue +295 -295
  35. package/dist/runtime/components/form/Hidden.vue +44 -44
  36. package/dist/runtime/components/form/Iterator.vue +538 -538
  37. package/dist/runtime/components/form/Login.vue +143 -143
  38. package/dist/runtime/components/form/Pad.vue +399 -399
  39. package/dist/runtime/components/form/SignPad.vue +226 -226
  40. package/dist/runtime/components/form/System.vue +34 -34
  41. package/dist/runtime/components/form/Table.vue +391 -391
  42. package/dist/runtime/components/form/TableData.vue +236 -236
  43. package/dist/runtime/components/form/Time.vue +177 -177
  44. package/dist/runtime/components/form/images/Capture.vue +245 -245
  45. package/dist/runtime/components/form/images/Edit.vue +133 -133
  46. package/dist/runtime/components/form/images/Field.vue +331 -331
  47. package/dist/runtime/components/form/images/Pad.vue +54 -54
  48. package/dist/runtime/components/label/Date.vue +37 -37
  49. package/dist/runtime/components/label/DateAgo.vue +102 -102
  50. package/dist/runtime/components/label/DateCount.vue +152 -152
  51. package/dist/runtime/components/label/Field.vue +111 -111
  52. package/dist/runtime/components/label/FormatMoney.vue +37 -37
  53. package/dist/runtime/components/label/Mask.vue +46 -46
  54. package/dist/runtime/components/label/Object.vue +21 -21
  55. package/dist/runtime/components/master/Autocomplete.vue +89 -89
  56. package/dist/runtime/components/master/Combobox.vue +88 -88
  57. package/dist/runtime/components/master/RadioGroup.vue +90 -90
  58. package/dist/runtime/components/master/Select.vue +70 -70
  59. package/dist/runtime/components/master/label.vue +55 -55
  60. package/dist/runtime/components/model/Autocomplete.vue +91 -91
  61. package/dist/runtime/components/model/Combobox.vue +90 -90
  62. package/dist/runtime/components/model/Pad.vue +114 -114
  63. package/dist/runtime/components/model/Select.vue +78 -84
  64. package/dist/runtime/components/model/Table.vue +370 -370
  65. package/dist/runtime/components/model/iterator.vue +497 -497
  66. package/dist/runtime/components/model/label.vue +58 -58
  67. package/dist/runtime/components/pdf/Print.vue +75 -75
  68. package/dist/runtime/components/pdf/View.vue +146 -146
  69. package/dist/runtime/composables/dialog.d.ts +1 -1
  70. package/dist/runtime/composables/graphql.d.ts +1 -1
  71. package/dist/runtime/composables/graphqlModel.d.ts +9 -9
  72. package/dist/runtime/composables/graphqlModelItem.d.ts +7 -7
  73. package/dist/runtime/composables/graphqlModelOperation.d.ts +6 -6
  74. package/dist/runtime/composables/userPermission.d.ts +1 -1
  75. package/dist/runtime/labs/Calendar.vue +99 -99
  76. package/dist/runtime/labs/form/EditMobile.vue +152 -152
  77. package/dist/runtime/labs/form/TextFieldMask.vue +43 -43
  78. package/dist/runtime/plugins/clientConfig.d.ts +1 -1
  79. package/dist/runtime/plugins/default.d.ts +1 -1
  80. package/dist/runtime/plugins/dialogManager.d.ts +1 -1
  81. package/dist/runtime/plugins/permission.d.ts +1 -1
  82. package/dist/runtime/types/alert.d.ts +11 -11
  83. package/dist/runtime/types/clientConfig.d.ts +13 -13
  84. package/dist/runtime/types/dialogManager.d.ts +35 -35
  85. package/dist/runtime/types/formDialog.d.ts +5 -5
  86. package/dist/runtime/types/graphqlOperation.d.ts +23 -23
  87. package/dist/runtime/types/menu.d.ts +31 -31
  88. package/dist/runtime/types/modules.d.ts +7 -7
  89. package/dist/runtime/types/permission.d.ts +13 -13
  90. package/package.json +131 -131
  91. package/scripts/enrich-vue-docs-from-ai.mjs +197 -197
  92. package/scripts/generate-ai-summary.mjs +321 -321
  93. package/scripts/generate-composables-md.mjs +129 -129
  94. package/scripts/postInstall.cjs +70 -70
  95. package/templates/.codegen/codegen.ts +32 -32
  96. package/templates/.codegen/plugin-schema-object.js +161 -161
@@ -1,55 +1,55 @@
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>
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>
55
55
  </template>
@@ -1,37 +1,37 @@
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
+ <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,103 +1,103 @@
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>
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>
103
103
  </template>