@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,110 +1,110 @@
1
- <script lang="ts" setup>
2
- /**
3
- * ExportCSV exports array data to spreadsheet files, flattening nested fields before file generation.
4
- * This doc block is consumed by vue-docgen for generated API documentation.
5
- */
6
- import { ref } from 'vue'
7
- import * as XLSX from 'xlsx'
8
- import { VBtn } from 'vuetify/components/VBtn'
9
- import { useAlert } from '../composables/alert'
10
-
11
- interface ExportButtonProps extends /* @vue-ignore */ InstanceType<typeof VBtn['$props']> {
12
- fileName?: string // File name used when downloading or printing generated files.
13
- sheetName?: string // Configuration option used by ExportCSV.
14
- modelValue?: object[] // Bound value for v-model synchronization with the parent component.
15
- stringFields?: Array<string> // Field paths that must stay as string values (no nested object conversion).
16
- tooltip?: string | Record<string,any> | undefined // Tooltip text or config object shown for the action control.
17
- }
18
-
19
- /**
20
- * Public props accepted by ExportCSV.
21
- * Document each prop field with intent, defaults, and side effects for clear generated docs.
22
- */
23
- const props = withDefaults(defineProps<ExportButtonProps>(), {
24
- fileName: 'download',
25
- sheetName: 'Sheet1',
26
- stringFields: ()=>[],
27
- tooltip: ()=>({text: 'Export', location: 'bottom'}),
28
- })
29
-
30
- const alert = useAlert()
31
- const loading = ref(false)
32
-
33
- /**
34
- * Triggers file export
35
- */
36
- function exportFile() {
37
- if (props.modelValue && Array.isArray(props.modelValue) && props.modelValue.length > 0) {
38
- loading.value = true
39
-
40
- try {
41
- const workbook = XLSX.utils.book_new()
42
- const worksheet = XLSX.utils.json_to_sheet(flattenNestedFields(props.modelValue))
43
- const fileName = `${props.fileName}.xlsx`
44
-
45
- XLSX.utils.book_append_sheet(workbook, worksheet, props.sheetName)
46
- XLSX.writeFile(workbook, fileName)
47
- } catch (error: any) {
48
- alert?.addAlert({ message: `Export failed: ${error.message}`, alertType: 'error' })
49
- } finally {
50
- loading.value = false
51
- }
52
- } else {
53
- alert?.addAlert({ message: 'Invalid or no data to export', alertType: 'error' })
54
- }
55
- }
56
-
57
- /**
58
- * Recursively flattens nested fields for export
59
- * @param items - Array of objects to flatten
60
- */
61
- function flattenNestedFields(items: any[]) {
62
- return items.map((item: any) => {
63
- return flattenObject(item)
64
- })
65
- }
66
-
67
- /**
68
- * Recursively flattens an object, converting nested keys into dot-separated keys
69
- * @param obj - Object to flatten
70
- * @param parentKey - Parent key (for recursion)
71
- * @param separator - Separator for nested keys
72
- */
73
- function flattenObject(obj: any, parentKey = '', separator = '.') {
74
- return Object.keys(obj).reduce((acc: any, key: string) => {
75
- const newKey = parentKey ? `${parentKey}${separator}${key}` : key
76
- const value = obj[key]
77
-
78
- if (value && typeof value === 'object' && !Array.isArray(value) && !props.stringFields.includes(newKey)) {
79
- Object.assign(acc, flattenObject(value, newKey, separator))
80
- } else {
81
- acc[newKey] = typeof value === 'object' ? JSON.stringify(value) : value
82
- }
83
-
84
- return acc
85
- }, {})
86
- }
87
- </script>
88
-
89
- <template>
90
- <VBtn
91
- v-bind="$attrs"
92
- color="primary"
93
- :loading="loading"
94
- :disabled="loading"
95
- text="Export CSV"
96
- @click="exportFile"
97
- v-tooltip="props.tooltip"
98
- >
99
- <template
100
- v-for="(_, name, index) in ($slots as {})"
101
- :key="index"
102
- #[name]="slotData"
103
- >
104
- <slot
105
- :name="name"
106
- v-bind="((slotData || {}) as object)"
107
- />
108
- </template>
109
- </VBtn>
110
- </template>
1
+ <script lang="ts" setup>
2
+ /**
3
+ * ExportCSV exports array data to spreadsheet files, flattening nested fields before file generation.
4
+ * This doc block is consumed by vue-docgen for generated API documentation.
5
+ */
6
+ import { ref } from 'vue'
7
+ import * as XLSX from 'xlsx'
8
+ import { VBtn } from 'vuetify/components/VBtn'
9
+ import { useAlert } from '../composables/alert'
10
+
11
+ interface ExportButtonProps extends /* @vue-ignore */ InstanceType<typeof VBtn['$props']> {
12
+ fileName?: string // File name used when downloading or printing generated files.
13
+ sheetName?: string // Configuration option used by ExportCSV.
14
+ modelValue?: object[] // Bound value for v-model synchronization with the parent component.
15
+ stringFields?: Array<string> // Field paths that must stay as string values (no nested object conversion).
16
+ tooltip?: string | Record<string,any> | undefined // Tooltip text or config object shown for the action control.
17
+ }
18
+
19
+ /**
20
+ * Public props accepted by ExportCSV.
21
+ * Document each prop field with intent, defaults, and side effects for clear generated docs.
22
+ */
23
+ const props = withDefaults(defineProps<ExportButtonProps>(), {
24
+ fileName: 'download',
25
+ sheetName: 'Sheet1',
26
+ stringFields: ()=>[],
27
+ tooltip: ()=>({text: 'Export', location: 'bottom'}),
28
+ })
29
+
30
+ const alert = useAlert()
31
+ const loading = ref(false)
32
+
33
+ /**
34
+ * Triggers file export
35
+ */
36
+ function exportFile() {
37
+ if (props.modelValue && Array.isArray(props.modelValue) && props.modelValue.length > 0) {
38
+ loading.value = true
39
+
40
+ try {
41
+ const workbook = XLSX.utils.book_new()
42
+ const worksheet = XLSX.utils.json_to_sheet(flattenNestedFields(props.modelValue))
43
+ const fileName = `${props.fileName}.xlsx`
44
+
45
+ XLSX.utils.book_append_sheet(workbook, worksheet, props.sheetName)
46
+ XLSX.writeFile(workbook, fileName)
47
+ } catch (error: any) {
48
+ alert?.addAlert({ message: `Export failed: ${error.message}`, alertType: 'error' })
49
+ } finally {
50
+ loading.value = false
51
+ }
52
+ } else {
53
+ alert?.addAlert({ message: 'Invalid or no data to export', alertType: 'error' })
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Recursively flattens nested fields for export
59
+ * @param items - Array of objects to flatten
60
+ */
61
+ function flattenNestedFields(items: any[]) {
62
+ return items.map((item: any) => {
63
+ return flattenObject(item)
64
+ })
65
+ }
66
+
67
+ /**
68
+ * Recursively flattens an object, converting nested keys into dot-separated keys
69
+ * @param obj - Object to flatten
70
+ * @param parentKey - Parent key (for recursion)
71
+ * @param separator - Separator for nested keys
72
+ */
73
+ function flattenObject(obj: any, parentKey = '', separator = '.') {
74
+ return Object.keys(obj).reduce((acc: any, key: string) => {
75
+ const newKey = parentKey ? `${parentKey}${separator}${key}` : key
76
+ const value = obj[key]
77
+
78
+ if (value && typeof value === 'object' && !Array.isArray(value) && !props.stringFields.includes(newKey)) {
79
+ Object.assign(acc, flattenObject(value, newKey, separator))
80
+ } else {
81
+ acc[newKey] = typeof value === 'object' ? JSON.stringify(value) : value
82
+ }
83
+
84
+ return acc
85
+ }, {})
86
+ }
87
+ </script>
88
+
89
+ <template>
90
+ <VBtn
91
+ v-bind="$attrs"
92
+ color="primary"
93
+ :loading="loading"
94
+ :disabled="loading"
95
+ text="Export CSV"
96
+ @click="exportFile"
97
+ v-tooltip="props.tooltip"
98
+ >
99
+ <template
100
+ v-for="(_, name, index) in ($slots as {})"
101
+ :key="index"
102
+ #[name]="slotData"
103
+ >
104
+ <slot
105
+ :name="name"
106
+ v-bind="((slotData || {}) as object)"
107
+ />
108
+ </template>
109
+ </VBtn>
110
+ </template>
@@ -1,79 +1,79 @@
1
- <script lang="ts" setup>
2
- /**
3
- * FileBtn wraps file selection behavior into a reusable button interface that works with form and upload flows.
4
- * This doc block is consumed by vue-docgen for generated API documentation.
5
- */
6
- import {ref} from 'vue'
7
- import {VBtn} from 'vuetify/components/VBtn'
8
-
9
- interface Props extends /* @vue-ignore */ InstanceType<typeof VBtn['$props']> {
10
- accept?: string // Accepted file MIME types or extensions for file selection.
11
- multiple?: boolean // Allows selecting or uploading more than one file.
12
- iconOnly?: boolean // icon name/class used in UI rendering
13
- modelValue?: File | File[] | undefined // Bound value for v-model synchronization with the parent component.
14
- tooltip?: string | Record<string,any> | undefined // Tooltip text or config object shown for the action control.
15
- }
16
-
17
- /**
18
- * Public props accepted by FileBtn.
19
- * Document each prop field with intent, defaults, and side effects for clear generated docs.
20
- */
21
- const props = withDefaults(defineProps<Props>(), {
22
- multiple: false,
23
- accept: '*',
24
- tooltip: 'Upload File',
25
- })
26
-
27
- /**
28
- * Custom events emitted by FileBtn.
29
- * Parents can listen to these events to react to user actions and internal state changes.
30
- */
31
- const emit = defineEmits<{
32
- (event: 'update:modelValue', value: File | File[] | undefined): void
33
- }>()
34
-
35
- const fileInput = ref<HTMLInputElement>()
36
- const files = ref<File | File[]>()
37
-
38
- const openFileInput = () => {
39
- fileInput.value?.click()
40
- }
41
-
42
- const reset = () => {
43
- files.value = undefined
44
- }
45
-
46
- const emitFiles = () => {
47
- emit('update:modelValue', files.value)
48
- files.value = []
49
- }
50
-
51
- defineExpose({ reset })
52
- </script>
53
-
54
- <template>
55
- <v-btn
56
- v-bind="$attrs"
57
- @click="openFileInput"
58
- v-tooltip="tooltip"
59
- >
60
- <template
61
- v-for="(_, name, index) in ($slots as {})"
62
- :key="index"
63
- #[name]="slotData"
64
- >
65
- <slot
66
- :name="name"
67
- v-bind="((slotData || {}) as object)"
68
- />
69
- </template>
70
- </v-btn>
71
- <v-file-input
72
- ref="fileInput"
73
- v-model="files"
74
- @update:modelValue="emitFiles"
75
- :accept="props.accept"
76
- :multiple="props.multiple"
77
- style="display: none"
78
- />
79
- </template>
1
+ <script lang="ts" setup>
2
+ /**
3
+ * FileBtn wraps file selection behavior into a reusable button interface that works with form and upload flows.
4
+ * This doc block is consumed by vue-docgen for generated API documentation.
5
+ */
6
+ import {ref} from 'vue'
7
+ import {VBtn} from 'vuetify/components/VBtn'
8
+
9
+ interface Props extends /* @vue-ignore */ InstanceType<typeof VBtn['$props']> {
10
+ accept?: string // Accepted file MIME types or extensions for file selection.
11
+ multiple?: boolean // Allows selecting or uploading more than one file.
12
+ iconOnly?: boolean // icon name/class used in UI rendering
13
+ modelValue?: File | File[] | undefined // Bound value for v-model synchronization with the parent component.
14
+ tooltip?: string | Record<string,any> | undefined // Tooltip text or config object shown for the action control.
15
+ }
16
+
17
+ /**
18
+ * Public props accepted by FileBtn.
19
+ * Document each prop field with intent, defaults, and side effects for clear generated docs.
20
+ */
21
+ const props = withDefaults(defineProps<Props>(), {
22
+ multiple: false,
23
+ accept: '*',
24
+ tooltip: 'Upload File',
25
+ })
26
+
27
+ /**
28
+ * Custom events emitted by FileBtn.
29
+ * Parents can listen to these events to react to user actions and internal state changes.
30
+ */
31
+ const emit = defineEmits<{
32
+ (event: 'update:modelValue', value: File | File[] | undefined): void
33
+ }>()
34
+
35
+ const fileInput = ref<HTMLInputElement>()
36
+ const files = ref<File | File[]>()
37
+
38
+ const openFileInput = () => {
39
+ fileInput.value?.click()
40
+ }
41
+
42
+ const reset = () => {
43
+ files.value = undefined
44
+ }
45
+
46
+ const emitFiles = () => {
47
+ emit('update:modelValue', files.value)
48
+ files.value = []
49
+ }
50
+
51
+ defineExpose({ reset })
52
+ </script>
53
+
54
+ <template>
55
+ <v-btn
56
+ v-bind="$attrs"
57
+ @click="openFileInput"
58
+ v-tooltip="tooltip"
59
+ >
60
+ <template
61
+ v-for="(_, name, index) in ($slots as {})"
62
+ :key="index"
63
+ #[name]="slotData"
64
+ >
65
+ <slot
66
+ :name="name"
67
+ v-bind="((slotData || {}) as object)"
68
+ />
69
+ </template>
70
+ </v-btn>
71
+ <v-file-input
72
+ ref="fileInput"
73
+ v-model="files"
74
+ @update:modelValue="emitFiles"
75
+ :accept="props.accept"
76
+ :multiple="props.multiple"
77
+ style="display: none"
78
+ />
79
+ </template>