@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,178 +1,178 @@
1
- <script lang="ts" setup>
2
- /**
3
- * FormTime is a schema-driven form field component that binds model data, renders field UI, and emits normalized updates.
4
- * This doc block is consumed by vue-docgen for generated API documentation.
5
- */
6
- import { ref, watch, watchEffect, nextTick, defineExpose } from 'vue'
7
- import { VTextField } from 'vuetify/components/VTextField'
8
- import Datepicker from '@vuepic/vue-datepicker'
9
- import '@vuepic/vue-datepicker/dist/main.css'
10
- import { Datetime } from '../../utils/datetime'
11
-
12
- interface Props extends /* @vue-ignore */ InstanceType<typeof VTextField['$props']> {
13
- enableSeconds?: boolean // Includes seconds selector in the time picker.
14
- locale?: 'TH' | 'EN' // Locale used for date/time formatting and localized labels.
15
- pickerOnly?: boolean // forces value selection through picker interaction only
16
- modelValue?: string | null // Bound value for v-model synchronization with the parent component.
17
- }
18
-
19
- /**
20
- * Public props accepted by FormTime.
21
- * Document each prop field with intent, defaults, and side effects for clear generated docs.
22
- */
23
- const props = withDefaults(defineProps<Props>(), {
24
- locale: 'TH',
25
- pickerOnly: false,
26
- enableSeconds: false,
27
- })
28
-
29
- /**
30
- * Custom events emitted by FormTime.
31
- * Parents can listen to these events to react to user actions and internal state changes.
32
- */
33
- const emit = defineEmits(['update:modelValue'])
34
-
35
- const time = ref<string | null>(null)
36
- const tempTime = ref<string | null>(null)
37
- const isMenuOpen = ref(false)
38
- const isTextFieldFocused = ref(false)
39
- const isTextFieldTyped = ref(false)
40
-
41
- function onTextFieldFocus(event: Event) {
42
- isTextFieldFocused.value = true
43
- nextTick(() => {
44
- (event.target as HTMLInputElement).select()
45
- })
46
- }
47
-
48
- function onTextFieldTyped() {
49
- if (!isTextFieldTyped.value) {
50
- isTextFieldTyped.value = true
51
- isMenuOpen.value = false
52
- }
53
- }
54
-
55
- function onTextFieldBlur() {
56
- if (isTextFieldTyped.value) {
57
- setTime(tempTime.value)
58
- isTextFieldTyped.value = false
59
- }
60
- isTextFieldFocused.value = false
61
- }
62
-
63
- function onTextFieldEnterKey() {
64
- onTextFieldBlur()
65
- }
66
-
67
- function onTextFieldClear() {
68
- reset()
69
- }
70
-
71
- function reset() {
72
- time.value = null
73
- tempTime.value = null
74
- }
75
-
76
- function setTime(TimeString: string | null) {
77
- const dateTime = Datetime().fromStringTime(TimeString, undefined, props.locale)
78
- if (!dateTime.luxonDateTime.isValid) {
79
- tempTime.value = null
80
- time.value = null
81
- }
82
- else {
83
- time.value = dateTime.toFormat('HH:mm:ss', 'EN')
84
- tempTime.value = time.value
85
- }
86
- }
87
-
88
- function setDatePicker(DateString: string | null) {
89
- setTime(DateString)
90
- }
91
-
92
- watchEffect(() => {
93
- if (!isTextFieldFocused.value && time.value) {
94
- const dateTime = Datetime().fromString(time.value, undefined, props.locale)
95
- tempTime.value = dateTime.toFormat((props.enableSeconds) ? 'HH:mm:ss' : 'HH:mm', props.locale)
96
- }
97
- else {
98
- tempTime.value = time.value
99
- }
100
- })
101
-
102
- watch(time, (newValue) => {
103
- if (!isMenuOpen.value) emit('update:modelValue', newValue)
104
- })
105
-
106
- watch(isMenuOpen, () => {
107
- if (isMenuOpen.value && !time.value) {
108
- time.value = Datetime().now().toFormat((props.enableSeconds) ? 'HH:mm:ss' : 'HH:mm:00')
109
- }
110
- if (!isMenuOpen.value) emit('update:modelValue', time.value)
111
- })
112
-
113
- watch(() => props.modelValue, () => {
114
- setTime(props.modelValue || null)
115
- }, { immediate: true })
116
-
117
- function toggleMenuOpen(trigger: string) {
118
- if ((trigger === 'textField' && props.pickerOnly) || (trigger === 'icon' && !props.pickerOnly)) {
119
- if (!props.readonly) isMenuOpen.value = true
120
- }
121
- }
122
-
123
- const textFieldRef = ref<VTextField>()
124
- function validate() {
125
- textFieldRef.value?.validate()
126
- }
127
- function resetValidation() {
128
- textFieldRef.value?.resetValidation()
129
- }
130
-
131
- defineExpose({
132
- reset,validate,resetValidation, isValid: textFieldRef.value?.isValid
133
- })
134
- </script>
135
-
136
- <template>
137
- <v-menu
138
- v-model="isMenuOpen"
139
- :close-on-content-click="false"
140
- :open-on-click="false"
141
- >
142
- <template #activator="{ props }">
143
- <v-text-field
144
- ref="textFieldRef"
145
- v-model="tempTime"
146
- v-bind="$attrs"
147
- @focus="onTextFieldFocus"
148
- @blur="onTextFieldBlur"
149
- @keydown="onTextFieldTyped"
150
- @keyup.enter="onTextFieldEnterKey"
151
- @click:clear="onTextFieldClear"
152
- @click="toggleMenuOpen('textField')"
153
- >
154
- <template #append="{ isReadonly, isDisabled }">
155
- <v-icon
156
- :disabled="isReadonly.value || isDisabled.value"
157
- v-bind="props"
158
- @click="toggleMenuOpen('icon')"
159
- >
160
- fa:fa-regular fa-clock
161
- </v-icon>
162
- </template>
163
- </v-text-field>
164
- </template>
165
- <Datepicker
166
- v-model="time"
167
- model-type="HH:mm:ss"
168
- :enable-seconds="enableSeconds"
169
- minutes-grid-increment="1"
170
- time-picker
171
- auto-apply
172
- :close-on-auto-apply="false"
173
- inline
174
- :locale="locale"
175
- @update:model-value="setDatePicker"
176
- />
177
- </v-menu>
1
+ <script lang="ts" setup>
2
+ /**
3
+ * FormTime is a schema-driven form field component that binds model data, renders field UI, and emits normalized updates.
4
+ * This doc block is consumed by vue-docgen for generated API documentation.
5
+ */
6
+ import { ref, watch, watchEffect, nextTick, defineExpose } from 'vue'
7
+ import { VTextField } from 'vuetify/components/VTextField'
8
+ import Datepicker from '@vuepic/vue-datepicker'
9
+ import '@vuepic/vue-datepicker/dist/main.css'
10
+ import { Datetime } from '../../utils/datetime'
11
+
12
+ interface Props extends /* @vue-ignore */ InstanceType<typeof VTextField['$props']> {
13
+ enableSeconds?: boolean // Includes seconds selector in the time picker.
14
+ locale?: 'TH' | 'EN' // Locale used for date/time formatting and localized labels.
15
+ pickerOnly?: boolean // forces value selection through picker interaction only
16
+ modelValue?: string | null // Bound value for v-model synchronization with the parent component.
17
+ }
18
+
19
+ /**
20
+ * Public props accepted by FormTime.
21
+ * Document each prop field with intent, defaults, and side effects for clear generated docs.
22
+ */
23
+ const props = withDefaults(defineProps<Props>(), {
24
+ locale: 'TH',
25
+ pickerOnly: false,
26
+ enableSeconds: false,
27
+ })
28
+
29
+ /**
30
+ * Custom events emitted by FormTime.
31
+ * Parents can listen to these events to react to user actions and internal state changes.
32
+ */
33
+ const emit = defineEmits(['update:modelValue'])
34
+
35
+ const time = ref<string | null>(null)
36
+ const tempTime = ref<string | null>(null)
37
+ const isMenuOpen = ref(false)
38
+ const isTextFieldFocused = ref(false)
39
+ const isTextFieldTyped = ref(false)
40
+
41
+ function onTextFieldFocus(event: Event) {
42
+ isTextFieldFocused.value = true
43
+ nextTick(() => {
44
+ (event.target as HTMLInputElement).select()
45
+ })
46
+ }
47
+
48
+ function onTextFieldTyped() {
49
+ if (!isTextFieldTyped.value) {
50
+ isTextFieldTyped.value = true
51
+ isMenuOpen.value = false
52
+ }
53
+ }
54
+
55
+ function onTextFieldBlur() {
56
+ if (isTextFieldTyped.value) {
57
+ setTime(tempTime.value)
58
+ isTextFieldTyped.value = false
59
+ }
60
+ isTextFieldFocused.value = false
61
+ }
62
+
63
+ function onTextFieldEnterKey() {
64
+ onTextFieldBlur()
65
+ }
66
+
67
+ function onTextFieldClear() {
68
+ reset()
69
+ }
70
+
71
+ function reset() {
72
+ time.value = null
73
+ tempTime.value = null
74
+ }
75
+
76
+ function setTime(TimeString: string | null) {
77
+ const dateTime = Datetime().fromStringTime(TimeString, undefined, props.locale)
78
+ if (!dateTime.luxonDateTime.isValid) {
79
+ tempTime.value = null
80
+ time.value = null
81
+ }
82
+ else {
83
+ time.value = dateTime.toFormat('HH:mm:ss', 'EN')
84
+ tempTime.value = time.value
85
+ }
86
+ }
87
+
88
+ function setDatePicker(DateString: string | null) {
89
+ setTime(DateString)
90
+ }
91
+
92
+ watchEffect(() => {
93
+ if (!isTextFieldFocused.value && time.value) {
94
+ const dateTime = Datetime().fromString(time.value, undefined, props.locale)
95
+ tempTime.value = dateTime.toFormat((props.enableSeconds) ? 'HH:mm:ss' : 'HH:mm', props.locale)
96
+ }
97
+ else {
98
+ tempTime.value = time.value
99
+ }
100
+ })
101
+
102
+ watch(time, (newValue) => {
103
+ if (!isMenuOpen.value) emit('update:modelValue', newValue)
104
+ })
105
+
106
+ watch(isMenuOpen, () => {
107
+ if (isMenuOpen.value && !time.value) {
108
+ time.value = Datetime().now().toFormat((props.enableSeconds) ? 'HH:mm:ss' : 'HH:mm:00')
109
+ }
110
+ if (!isMenuOpen.value) emit('update:modelValue', time.value)
111
+ })
112
+
113
+ watch(() => props.modelValue, () => {
114
+ setTime(props.modelValue || null)
115
+ }, { immediate: true })
116
+
117
+ function toggleMenuOpen(trigger: string) {
118
+ if ((trigger === 'textField' && props.pickerOnly) || (trigger === 'icon' && !props.pickerOnly)) {
119
+ if (!props.readonly) isMenuOpen.value = true
120
+ }
121
+ }
122
+
123
+ const textFieldRef = ref<VTextField>()
124
+ function validate() {
125
+ textFieldRef.value?.validate()
126
+ }
127
+ function resetValidation() {
128
+ textFieldRef.value?.resetValidation()
129
+ }
130
+
131
+ defineExpose({
132
+ reset,validate,resetValidation, isValid: textFieldRef.value?.isValid
133
+ })
134
+ </script>
135
+
136
+ <template>
137
+ <v-menu
138
+ v-model="isMenuOpen"
139
+ :close-on-content-click="false"
140
+ :open-on-click="false"
141
+ >
142
+ <template #activator="{ props }">
143
+ <v-text-field
144
+ ref="textFieldRef"
145
+ v-model="tempTime"
146
+ v-bind="$attrs"
147
+ @focus="onTextFieldFocus"
148
+ @blur="onTextFieldBlur"
149
+ @keydown="onTextFieldTyped"
150
+ @keyup.enter="onTextFieldEnterKey"
151
+ @click:clear="onTextFieldClear"
152
+ @click="toggleMenuOpen('textField')"
153
+ >
154
+ <template #append="{ isReadonly, isDisabled }">
155
+ <v-icon
156
+ :disabled="isReadonly.value || isDisabled.value"
157
+ v-bind="props"
158
+ @click="toggleMenuOpen('icon')"
159
+ >
160
+ fa:fa-regular fa-clock
161
+ </v-icon>
162
+ </template>
163
+ </v-text-field>
164
+ </template>
165
+ <Datepicker
166
+ v-model="time"
167
+ model-type="HH:mm:ss"
168
+ :enable-seconds="enableSeconds"
169
+ minutes-grid-increment="1"
170
+ time-picker
171
+ auto-apply
172
+ :close-on-auto-apply="false"
173
+ inline
174
+ :locale="locale"
175
+ @update:model-value="setDatePicker"
176
+ />
177
+ </v-menu>
178
178
  </template>