@ramathibodi/nuxt-commons 0.1.74 → 4.0.0

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 (243) hide show
  1. package/README.md +9 -2
  2. package/dist/module.json +4 -4
  3. package/dist/module.mjs +4 -4
  4. package/dist/runtime/bridges/authentication.d.ts +21 -0
  5. package/dist/runtime/bridges/authentication.js +20 -0
  6. package/dist/runtime/bridges/graphql.d.ts +17 -0
  7. package/dist/runtime/bridges/graphql.js +45 -0
  8. package/dist/runtime/components/Alert.d.vue.ts +3 -0
  9. package/dist/runtime/components/Alert.vue +17 -26
  10. package/dist/runtime/components/Alert.vue.d.ts +3 -0
  11. package/dist/runtime/components/BarcodeReader.d.vue.ts +9 -0
  12. package/dist/runtime/components/BarcodeReader.vue +56 -81
  13. package/dist/runtime/components/BarcodeReader.vue.d.ts +9 -0
  14. package/dist/runtime/components/ExportCSV.d.vue.ts +55 -0
  15. package/dist/runtime/components/ExportCSV.vue +39 -76
  16. package/dist/runtime/components/ExportCSV.vue.d.ts +55 -0
  17. package/dist/runtime/components/FileBtn.d.vue.ts +53 -0
  18. package/dist/runtime/components/FileBtn.vue +23 -50
  19. package/dist/runtime/components/FileBtn.vue.d.ts +53 -0
  20. package/dist/runtime/components/ImportCSV.d.vue.ts +52 -0
  21. package/dist/runtime/components/ImportCSV.vue +60 -111
  22. package/dist/runtime/components/ImportCSV.vue.d.ts +52 -0
  23. package/dist/runtime/components/MrzReader.d.vue.ts +19 -0
  24. package/dist/runtime/components/MrzReader.vue +69 -109
  25. package/dist/runtime/components/MrzReader.vue.d.ts +19 -0
  26. package/dist/runtime/components/SplitterPanel.d.vue.ts +15 -0
  27. package/dist/runtime/components/SplitterPanel.vue +18 -35
  28. package/dist/runtime/components/SplitterPanel.vue.d.ts +15 -0
  29. package/dist/runtime/components/TabsGroup.d.vue.ts +19 -0
  30. package/dist/runtime/components/TabsGroup.vue +8 -20
  31. package/dist/runtime/components/TabsGroup.vue.d.ts +19 -0
  32. package/dist/runtime/components/TextBarcode.d.vue.ts +12 -0
  33. package/dist/runtime/components/TextBarcode.vue +22 -45
  34. package/dist/runtime/components/TextBarcode.vue.d.ts +12 -0
  35. package/dist/runtime/components/device/IdCardButton.d.vue.ts +57 -0
  36. package/dist/runtime/components/device/IdCardButton.vue +30 -67
  37. package/dist/runtime/components/device/IdCardButton.vue.d.ts +57 -0
  38. package/dist/runtime/components/device/IdCardWebSocket.d.vue.ts +55 -0
  39. package/dist/runtime/components/device/IdCardWebSocket.vue +104 -165
  40. package/dist/runtime/components/device/IdCardWebSocket.vue.d.ts +55 -0
  41. package/dist/runtime/components/device/Scanner.d.vue.ts +66 -0
  42. package/dist/runtime/components/device/Scanner.vue +97 -178
  43. package/dist/runtime/components/device/Scanner.vue.d.ts +66 -0
  44. package/dist/runtime/components/dialog/Confirm.d.vue.ts +37 -0
  45. package/dist/runtime/components/dialog/Confirm.vue +30 -59
  46. package/dist/runtime/components/dialog/Confirm.vue.d.ts +37 -0
  47. package/dist/runtime/components/dialog/Host.d.vue.ts +9 -0
  48. package/dist/runtime/components/dialog/Host.vue +34 -57
  49. package/dist/runtime/components/dialog/Host.vue.d.ts +9 -0
  50. package/dist/runtime/components/dialog/Index.d.vue.ts +24 -0
  51. package/dist/runtime/components/dialog/Index.vue +20 -40
  52. package/dist/runtime/components/dialog/Index.vue.d.ts +24 -0
  53. package/dist/runtime/components/dialog/Loading.d.vue.ts +21 -0
  54. package/dist/runtime/components/dialog/Loading.vue +12 -29
  55. package/dist/runtime/components/dialog/Loading.vue.d.ts +21 -0
  56. package/dist/runtime/components/dialog/default/Confirm.d.vue.ts +40 -0
  57. package/dist/runtime/components/dialog/default/Confirm.vue +29 -62
  58. package/dist/runtime/components/dialog/default/Confirm.vue.d.ts +40 -0
  59. package/dist/runtime/components/dialog/default/Loading.d.vue.ts +23 -0
  60. package/dist/runtime/components/dialog/default/Loading.vue +12 -29
  61. package/dist/runtime/components/dialog/default/Loading.vue.d.ts +23 -0
  62. package/dist/runtime/components/dialog/default/Notify.d.vue.ts +23 -0
  63. package/dist/runtime/components/dialog/default/Notify.vue +19 -48
  64. package/dist/runtime/components/dialog/default/Notify.vue.d.ts +23 -0
  65. package/dist/runtime/components/dialog/default/Printing.d.vue.ts +21 -0
  66. package/dist/runtime/components/dialog/default/Printing.vue +13 -29
  67. package/dist/runtime/components/dialog/default/Printing.vue.d.ts +21 -0
  68. package/dist/runtime/components/dialog/default/VerifyUser.d.vue.ts +29 -0
  69. package/dist/runtime/components/dialog/default/VerifyUser.vue +44 -82
  70. package/dist/runtime/components/dialog/default/VerifyUser.vue.d.ts +29 -0
  71. package/dist/runtime/components/document/Form.d.vue.ts +9 -0
  72. package/dist/runtime/components/document/Form.vue +27 -42
  73. package/dist/runtime/components/document/Form.vue.d.ts +9 -0
  74. package/dist/runtime/components/document/TemplateBuilder.d.vue.ts +24 -0
  75. package/dist/runtime/components/document/TemplateBuilder.vue +154 -194
  76. package/dist/runtime/components/document/TemplateBuilder.vue.d.ts +24 -0
  77. package/dist/runtime/components/form/ActionPad.d.vue.ts +114 -0
  78. package/dist/runtime/components/form/ActionPad.vue +48 -85
  79. package/dist/runtime/components/form/ActionPad.vue.d.ts +114 -0
  80. package/dist/runtime/components/form/Birthdate.d.vue.ts +38 -0
  81. package/dist/runtime/components/form/Birthdate.vue +44 -76
  82. package/dist/runtime/components/form/Birthdate.vue.d.ts +38 -0
  83. package/dist/runtime/components/form/CheckboxGroup.d.vue.ts +41 -0
  84. package/dist/runtime/components/form/CheckboxGroup.vue +34 -64
  85. package/dist/runtime/components/form/CheckboxGroup.vue.d.ts +41 -0
  86. package/dist/runtime/components/form/CodeEditor.d.vue.ts +25 -0
  87. package/dist/runtime/components/form/CodeEditor.vue +18 -36
  88. package/dist/runtime/components/form/CodeEditor.vue.d.ts +25 -0
  89. package/dist/runtime/components/form/Date.d.vue.ts +86 -0
  90. package/dist/runtime/components/form/Date.vue +109 -162
  91. package/dist/runtime/components/form/Date.vue.d.ts +86 -0
  92. package/dist/runtime/components/form/DateTime.d.vue.ts +36 -0
  93. package/dist/runtime/components/form/DateTime.vue +94 -143
  94. package/dist/runtime/components/form/DateTime.vue.d.ts +36 -0
  95. package/dist/runtime/components/form/Dialog.d.vue.ts +69 -0
  96. package/dist/runtime/components/form/Dialog.vue +60 -96
  97. package/dist/runtime/components/form/Dialog.vue.d.ts +69 -0
  98. package/dist/runtime/components/form/EditPad.d.vue.ts +113 -0
  99. package/dist/runtime/components/form/EditPad.vue +49 -85
  100. package/dist/runtime/components/form/EditPad.vue.d.ts +113 -0
  101. package/dist/runtime/components/form/File.d.vue.ts +65 -0
  102. package/dist/runtime/components/form/File.vue +112 -186
  103. package/dist/runtime/components/form/File.vue.d.ts +65 -0
  104. package/dist/runtime/components/form/Hidden.d.vue.ts +12 -0
  105. package/dist/runtime/components/form/Hidden.vue +17 -34
  106. package/dist/runtime/components/form/Hidden.vue.d.ts +12 -0
  107. package/dist/runtime/components/form/Iterator.d.vue.ts +279 -0
  108. package/dist/runtime/components/form/Iterator.vue +162 -252
  109. package/dist/runtime/components/form/Iterator.vue.d.ts +279 -0
  110. package/dist/runtime/components/form/Login.d.vue.ts +32 -0
  111. package/dist/runtime/components/form/Login.vue +23 -55
  112. package/dist/runtime/components/form/Login.vue.d.ts +32 -0
  113. package/dist/runtime/components/form/Pad.d.vue.ts +674 -0
  114. package/dist/runtime/components/form/Pad.vue +166 -265
  115. package/dist/runtime/components/form/Pad.vue.d.ts +674 -0
  116. package/dist/runtime/components/form/SignPad.d.vue.ts +62 -0
  117. package/dist/runtime/components/form/SignPad.vue +80 -126
  118. package/dist/runtime/components/form/SignPad.vue.d.ts +62 -0
  119. package/dist/runtime/components/form/System.d.vue.ts +34 -0
  120. package/dist/runtime/components/form/System.vue +18 -32
  121. package/dist/runtime/components/form/System.vue.d.ts +34 -0
  122. package/dist/runtime/components/form/Table.d.vue.ts +221 -0
  123. package/dist/runtime/components/form/Table.vue +123 -182
  124. package/dist/runtime/components/form/Table.vue.d.ts +221 -0
  125. package/dist/runtime/components/form/TableData.d.vue.ts +102 -0
  126. package/dist/runtime/components/form/TableData.vue +109 -139
  127. package/dist/runtime/components/form/TableData.vue.d.ts +102 -0
  128. package/dist/runtime/components/form/Time.d.vue.ts +49 -0
  129. package/dist/runtime/components/form/Time.vue +64 -99
  130. package/dist/runtime/components/form/Time.vue.d.ts +49 -0
  131. package/dist/runtime/components/form/images/Capture.d.vue.ts +96 -0
  132. package/dist/runtime/components/form/images/Capture.vue +104 -147
  133. package/dist/runtime/components/form/images/Capture.vue.d.ts +96 -0
  134. package/dist/runtime/components/form/images/Edit.d.vue.ts +29 -0
  135. package/dist/runtime/components/form/images/Edit.vue +57 -81
  136. package/dist/runtime/components/form/images/Edit.vue.d.ts +29 -0
  137. package/dist/runtime/components/form/images/Field.d.vue.ts +27 -0
  138. package/dist/runtime/components/form/images/Field.vue +136 -205
  139. package/dist/runtime/components/form/images/Field.vue.d.ts +27 -0
  140. package/dist/runtime/components/form/images/Pad.d.vue.ts +13 -0
  141. package/dist/runtime/components/form/images/Pad.vue +23 -40
  142. package/dist/runtime/components/form/images/Pad.vue.d.ts +13 -0
  143. package/dist/runtime/components/label/Date.d.vue.ts +13 -0
  144. package/dist/runtime/components/label/Date.vue +13 -29
  145. package/dist/runtime/components/label/Date.vue.d.ts +13 -0
  146. package/dist/runtime/components/label/DateAgo.d.vue.ts +20 -0
  147. package/dist/runtime/components/label/DateAgo.vue +43 -75
  148. package/dist/runtime/components/label/DateAgo.vue.d.ts +20 -0
  149. package/dist/runtime/components/label/DateCount.d.vue.ts +22 -0
  150. package/dist/runtime/components/label/DateCount.vue +58 -105
  151. package/dist/runtime/components/label/DateCount.vue.d.ts +22 -0
  152. package/dist/runtime/components/label/Field.d.vue.ts +38 -0
  153. package/dist/runtime/components/label/Field.vue +18 -40
  154. package/dist/runtime/components/label/Field.vue.d.ts +38 -0
  155. package/dist/runtime/components/label/FormatMoney.d.vue.ts +12 -0
  156. package/dist/runtime/components/label/FormatMoney.vue +12 -28
  157. package/dist/runtime/components/label/FormatMoney.vue.d.ts +12 -0
  158. package/dist/runtime/components/label/Mask.d.vue.ts +10 -0
  159. package/dist/runtime/components/label/Mask.vue +21 -38
  160. package/dist/runtime/components/label/Mask.vue.d.ts +10 -0
  161. package/dist/runtime/components/label/Object.d.vue.ts +8 -0
  162. package/dist/runtime/components/label/Object.vue +10 -20
  163. package/dist/runtime/components/label/Object.vue.d.ts +8 -0
  164. package/dist/runtime/components/master/Autocomplete.d.vue.ts +70 -0
  165. package/dist/runtime/components/master/Autocomplete.vue +25 -34
  166. package/dist/runtime/components/master/Autocomplete.vue.d.ts +70 -0
  167. package/dist/runtime/components/master/Combobox.d.vue.ts +70 -0
  168. package/dist/runtime/components/master/Combobox.vue +26 -35
  169. package/dist/runtime/components/master/Combobox.vue.d.ts +70 -0
  170. package/dist/runtime/components/master/RadioGroup.d.vue.ts +51 -0
  171. package/dist/runtime/components/master/RadioGroup.vue +44 -59
  172. package/dist/runtime/components/master/RadioGroup.vue.d.ts +51 -0
  173. package/dist/runtime/components/master/Select.d.vue.ts +68 -0
  174. package/dist/runtime/components/master/Select.vue +25 -34
  175. package/dist/runtime/components/master/Select.vue.d.ts +68 -0
  176. package/dist/runtime/components/master/label.d.vue.ts +24 -0
  177. package/dist/runtime/components/master/label.vue +22 -42
  178. package/dist/runtime/components/master/label.vue.d.ts +24 -0
  179. package/dist/runtime/components/model/Autocomplete.d.vue.ts +82 -0
  180. package/dist/runtime/components/model/Autocomplete.vue +50 -49
  181. package/dist/runtime/components/model/Autocomplete.vue.d.ts +82 -0
  182. package/dist/runtime/components/model/Combobox.d.vue.ts +82 -0
  183. package/dist/runtime/components/model/Combobox.vue +51 -49
  184. package/dist/runtime/components/model/Combobox.vue.d.ts +82 -0
  185. package/dist/runtime/components/model/Pad.d.vue.ts +72 -0
  186. package/dist/runtime/components/model/Pad.vue +50 -65
  187. package/dist/runtime/components/model/Pad.vue.d.ts +72 -0
  188. package/dist/runtime/components/model/Select.d.vue.ts +72 -0
  189. package/dist/runtime/components/model/Select.vue +42 -44
  190. package/dist/runtime/components/model/Select.vue.d.ts +72 -0
  191. package/dist/runtime/components/model/Table.d.vue.ts +272 -0
  192. package/dist/runtime/components/model/Table.vue +121 -145
  193. package/dist/runtime/components/model/Table.vue.d.ts +272 -0
  194. package/dist/runtime/components/model/iterator.d.vue.ts +321 -0
  195. package/dist/runtime/components/model/iterator.vue +148 -183
  196. package/dist/runtime/components/model/iterator.vue.d.ts +321 -0
  197. package/dist/runtime/components/model/label.d.vue.ts +26 -0
  198. package/dist/runtime/components/model/label.vue +25 -43
  199. package/dist/runtime/components/model/label.vue.d.ts +26 -0
  200. package/dist/runtime/components/pdf/Print.d.vue.ts +17 -0
  201. package/dist/runtime/components/pdf/Print.vue +27 -50
  202. package/dist/runtime/components/pdf/Print.vue.d.ts +17 -0
  203. package/dist/runtime/components/pdf/View.d.vue.ts +52 -0
  204. package/dist/runtime/components/pdf/View.vue +58 -95
  205. package/dist/runtime/components/pdf/View.vue.d.ts +52 -0
  206. package/dist/runtime/composables/api.js +4 -2
  207. package/dist/runtime/composables/assetFile.js +4 -2
  208. package/dist/runtime/composables/dialog.d.ts +1 -1
  209. package/dist/runtime/composables/document/template.js +3 -3
  210. package/dist/runtime/composables/document/templateFormTable.js +1 -0
  211. package/dist/runtime/composables/graphql.d.ts +2 -2
  212. package/dist/runtime/composables/graphql.js +5 -5
  213. package/dist/runtime/composables/graphqlModel.d.ts +6 -6
  214. package/dist/runtime/composables/graphqlModelItem.d.ts +4 -4
  215. package/dist/runtime/composables/graphqlModelOperation.d.ts +6 -6
  216. package/dist/runtime/composables/graphqlModelOperation.js +2 -1
  217. package/dist/runtime/composables/graphqlOperation.js +5 -1
  218. package/dist/runtime/composables/hostAgentWs.d.ts +1 -1
  219. package/dist/runtime/composables/lookupListMaster.js +3 -3
  220. package/dist/runtime/composables/menu.js +2 -2
  221. package/dist/runtime/composables/userPermission.d.ts +1 -1
  222. package/dist/runtime/composables/utils/fuzzy.d.ts +2 -1
  223. package/dist/runtime/labs/Calendar.d.vue.ts +35 -0
  224. package/dist/runtime/labs/Calendar.vue +47 -75
  225. package/dist/runtime/labs/Calendar.vue.d.ts +35 -0
  226. package/dist/runtime/labs/form/EditMobile.d.vue.ts +12 -0
  227. package/dist/runtime/labs/form/EditMobile.vue +19 -36
  228. package/dist/runtime/labs/form/EditMobile.vue.d.ts +12 -0
  229. package/dist/runtime/labs/form/TextFieldMask.d.vue.ts +21 -0
  230. package/dist/runtime/labs/form/TextFieldMask.vue +19 -25
  231. package/dist/runtime/labs/form/TextFieldMask.vue.d.ts +21 -0
  232. package/dist/runtime/plugins/dialogManager.js +2 -2
  233. package/dist/runtime/plugins/permission.js +3 -3
  234. package/dist/runtime/types/bridge.d.ts +14 -0
  235. package/dist/runtime/utils/datetime.js +1 -1
  236. package/dist/types.d.mts +2 -6
  237. package/package.json +71 -58
  238. package/scripts/ci-release.mjs +125 -0
  239. package/scripts/release-version.mjs +68 -0
  240. package/scripts/release.mjs +49 -0
  241. package/dist/module.cjs +0 -5
  242. package/dist/module.d.ts +0 -8
  243. package/dist/types.d.ts +0 -7
@@ -0,0 +1,221 @@
1
+ /**
2
+ * FormTable is a schema-driven form field component that binds model data, renders field UI, and emits normalized updates.
3
+ * This doc block is consumed by vue-docgen for generated API documentation.
4
+ */
5
+ import { VDataTable } from 'vuetify/components/VDataTable';
6
+ import type { FormDialogCallback } from '../../types/formDialog.js';
7
+ import { type PersistSlimProps } from '../../composables/localStorageModel.js';
8
+ interface Props extends /* @vue-ignore */ InstanceType<typeof VDataTable['$props']> {
9
+ title: string;
10
+ noDataText?: string;
11
+ modelValue?: Record<string, any>[];
12
+ modelKey?: string;
13
+ dialogWidth?: string | number;
14
+ dialogMaxWidth?: string | number;
15
+ dialogHeight?: string | number;
16
+ dialogMaxHeight?: string | number;
17
+ dialogFullscreen?: boolean;
18
+ initialData?: Record<string, any>;
19
+ toolbarColor?: string;
20
+ importable?: boolean;
21
+ exportable?: boolean;
22
+ insertable?: boolean;
23
+ searchable?: boolean;
24
+ inputPad?: boolean;
25
+ inputPadOnly?: boolean;
26
+ saveAndStay?: boolean;
27
+ stringFields?: Array<string>;
28
+ }
29
+ /**
30
+ * Public props accepted by FormTable.
31
+ * Document each prop field with intent, defaults, and side effects for clear generated docs.
32
+ */
33
+ type __VLS_Props = Props & PersistSlimProps;
34
+ declare function setSearch(keyword: string): void;
35
+ declare function createItem(item: Record<string, any>, callback?: FormDialogCallback): void;
36
+ declare function updateItem(newItem: Record<string, any>, callback?: FormDialogCallback): void;
37
+ declare function moveUpItem(currentItem: Record<string, any>, callback?: FormDialogCallback): void;
38
+ declare function moveDownItem(currentItem: Record<string, any>, callback?: FormDialogCallback): void;
39
+ declare function moveToItem(currentItem: Record<string, any>, callback?: FormDialogCallback): void;
40
+ declare function deleteItem(deleteItem: Record<string, any>, callback?: FormDialogCallback): Promise<void>;
41
+ declare function openDialog(item?: object): void;
42
+ declare var __VLS_22: {
43
+ items: Record<string, any>[];
44
+ operation: {
45
+ openDialog: typeof openDialog;
46
+ createItem: typeof createItem;
47
+ updateItem: typeof updateItem;
48
+ deleteItem: typeof deleteItem;
49
+ moveUpItem: typeof moveUpItem;
50
+ moveDownItem: typeof moveDownItem;
51
+ moveToItem: typeof moveToItem;
52
+ setSearch: typeof setSearch;
53
+ };
54
+ }, __VLS_48: {}, __VLS_56: {
55
+ items: Record<string, any>[];
56
+ operation: {
57
+ openDialog: typeof openDialog;
58
+ createItem: typeof createItem;
59
+ updateItem: typeof updateItem;
60
+ deleteItem: typeof deleteItem;
61
+ moveUpItem: typeof moveUpItem;
62
+ moveDownItem: typeof moveDownItem;
63
+ moveToItem: typeof moveToItem;
64
+ setSearch: typeof setSearch;
65
+ };
66
+ }, __VLS_69: {
67
+ items: Record<string, any>[];
68
+ operation: {
69
+ openDialog: typeof openDialog;
70
+ createItem: typeof createItem;
71
+ updateItem: typeof updateItem;
72
+ deleteItem: typeof deleteItem;
73
+ moveUpItem: typeof moveUpItem;
74
+ moveDownItem: typeof moveDownItem;
75
+ moveToItem: typeof moveToItem;
76
+ setSearch: typeof setSearch;
77
+ };
78
+ }, __VLS_99: never, __VLS_100: {
79
+ operation: {
80
+ openDialog: typeof openDialog;
81
+ createItem: typeof createItem;
82
+ updateItem: typeof updateItem;
83
+ deleteItem: typeof deleteItem;
84
+ moveUpItem: typeof moveUpItem;
85
+ moveDownItem: typeof moveDownItem;
86
+ moveToItem: typeof moveToItem;
87
+ setSearch: typeof setSearch;
88
+ };
89
+ isReadonly: import("vue").ComputedRef<boolean>;
90
+ isDisabled: import("vue").ComputedRef<boolean>;
91
+ }, __VLS_153: any, __VLS_156: any, __VLS_159: any, __VLS_161: {
92
+ operation: {
93
+ openDialog: typeof openDialog;
94
+ createItem: typeof createItem;
95
+ updateItem: typeof updateItem;
96
+ deleteItem: typeof deleteItem;
97
+ moveUpItem: typeof moveUpItem;
98
+ moveDownItem: typeof moveDownItem;
99
+ moveToItem: typeof moveToItem;
100
+ setSearch: typeof setSearch;
101
+ };
102
+ isReadonly: import("vue").ComputedRef<boolean>;
103
+ isDisabled: import("vue").ComputedRef<boolean>;
104
+ }, __VLS_181: any;
105
+ type __VLS_Slots = {} & {
106
+ [K in NonNullable<typeof __VLS_99>]?: (props: typeof __VLS_100) => any;
107
+ } & {
108
+ header?: (props: typeof __VLS_22) => any;
109
+ } & {
110
+ title?: (props: typeof __VLS_48) => any;
111
+ } & {
112
+ search?: (props: typeof __VLS_56) => any;
113
+ } & {
114
+ toolbarItems?: (props: typeof __VLS_69) => any;
115
+ } & {
116
+ form?: (props: typeof __VLS_153) => any;
117
+ } & {
118
+ formTitle?: (props: typeof __VLS_156) => any;
119
+ } & {
120
+ formAction?: (props: typeof __VLS_159) => any;
121
+ } & {
122
+ inputPad?: (props: typeof __VLS_161) => any;
123
+ } & {
124
+ form?: (props: typeof __VLS_181) => any;
125
+ };
126
+ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<__VLS_Props>, {
127
+ noDataText: string;
128
+ dialogFullscreen: boolean;
129
+ modelKey: string;
130
+ toolbarColor: string;
131
+ importable: boolean;
132
+ exportable: boolean;
133
+ insertable: boolean;
134
+ searchable: boolean;
135
+ inputPad: boolean;
136
+ inputPadOnly: boolean;
137
+ saveAndStay: boolean;
138
+ stringFields: () => never[];
139
+ }>>, {
140
+ errorMessages: import("vue").ComputedRef<(string & string[]) | (readonly string[] & string[]) | undefined>;
141
+ isValid: import("vue").ComputedRef<boolean | null | undefined>;
142
+ reset: () => Promise<void> | undefined;
143
+ resetValidation: () => Promise<void> | undefined;
144
+ validate: () => Promise<string[]> | undefined;
145
+ operation: import("vue").Ref<{
146
+ openDialog: typeof openDialog;
147
+ createItem: typeof createItem;
148
+ updateItem: typeof updateItem;
149
+ deleteItem: typeof deleteItem;
150
+ moveUpItem: typeof moveUpItem;
151
+ moveDownItem: typeof moveDownItem;
152
+ moveToItem: typeof moveToItem;
153
+ setSearch: typeof setSearch;
154
+ }, {
155
+ openDialog: typeof openDialog;
156
+ createItem: typeof createItem;
157
+ updateItem: typeof updateItem;
158
+ deleteItem: typeof deleteItem;
159
+ moveUpItem: typeof moveUpItem;
160
+ moveDownItem: typeof moveDownItem;
161
+ moveToItem: typeof moveToItem;
162
+ setSearch: typeof setSearch;
163
+ } | {
164
+ openDialog: typeof openDialog;
165
+ createItem: typeof createItem;
166
+ updateItem: typeof updateItem;
167
+ deleteItem: typeof deleteItem;
168
+ moveUpItem: typeof moveUpItem;
169
+ moveDownItem: typeof moveDownItem;
170
+ moveToItem: typeof moveToItem;
171
+ setSearch: typeof setSearch;
172
+ }>;
173
+ items: import("vue").Ref<Record<string, any>[], Record<string, any>[]>;
174
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
175
+ "update:modelValue": (...args: any[]) => void;
176
+ "open:dialog": (...args: any[]) => void;
177
+ "close:dialog": (...args: any[]) => void;
178
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<__VLS_Props>, {
179
+ noDataText: string;
180
+ dialogFullscreen: boolean;
181
+ modelKey: string;
182
+ toolbarColor: string;
183
+ importable: boolean;
184
+ exportable: boolean;
185
+ insertable: boolean;
186
+ searchable: boolean;
187
+ inputPad: boolean;
188
+ inputPadOnly: boolean;
189
+ saveAndStay: boolean;
190
+ stringFields: () => never[];
191
+ }>>> & Readonly<{
192
+ "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
193
+ "onOpen:dialog"?: ((...args: any[]) => any) | undefined;
194
+ "onClose:dialog"?: ((...args: any[]) => any) | undefined;
195
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
196
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
197
+ declare const _default: typeof __VLS_export;
198
+ export default _default;
199
+ type __VLS_TypePropsToOption<T> = {
200
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
201
+ type: import('vue').PropType<Required<T>[K]>;
202
+ } : {
203
+ type: import('vue').PropType<T[K]>;
204
+ required: true;
205
+ };
206
+ };
207
+ type __VLS_WithDefaults<P, D> = {
208
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_PrettifyLocal<P[K] & {
209
+ default: D[K];
210
+ }> : P[K];
211
+ };
212
+ type __VLS_WithSlots<T, S> = T & {
213
+ new (): {
214
+ $slots: S;
215
+ };
216
+ };
217
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
218
+ [K in keyof T]: T[K];
219
+ } : {
220
+ [K in keyof T as K]: T[K];
221
+ }) & {};
@@ -1,228 +1,169 @@
1
- <script lang="ts" setup>
2
- /**
3
- * FormTable 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 {VDataTable} from 'vuetify/components/VDataTable'
7
- import {VInput} from 'vuetify/components/VInput'
8
- import {computed, defineOptions,defineExpose, nextTick, ref, useAttrs, watch, useTemplateRef} from 'vue'
9
- import {omit} from 'lodash-es'
10
- import {useDialog} from "../../composables/dialog"
11
- import type {FormDialogCallback} from '../../types/formDialog'
12
- import { useLocalStorageModel, type PersistSlimProps } from '../../composables/localStorageModel'
13
-
1
+ <script setup>
2
+ import { VDataTable } from "vuetify/components/VDataTable";
3
+ import { VInput } from "vuetify/components/VInput";
4
+ import { computed, nextTick, ref, useAttrs, watch, useTemplateRef } from "vue";
5
+ import { omit } from "lodash-es";
6
+ import { useDialog } from "../../composables/dialog";
7
+ import { useLocalStorageModel } from "../../composables/localStorageModel";
14
8
  defineOptions({
15
- inheritAttrs: false,
16
- })
17
-
18
- interface Props extends /* @vue-ignore */ InstanceType<typeof VDataTable['$props']> {
19
- title: string // Toolbar title and default export file name shown for this table section.
20
- noDataText?: string // Text rendered by the data table when `items` is empty after filtering/loading.
21
- modelValue?: Record<string, any>[] // Source rows from parent; component normalizes, mutates order, then emits updated rows.
22
- modelKey?: string // Unique row key used for update/delete/reorder; missing keys are auto-generated incrementally.
23
- dialogWidth?: string | number // Passed to row edit dialog width to control normal (non-fullscreen) modal size.
24
- dialogMaxWidth?: string | number // Upper width bound for the edit dialog on large screens.
25
- dialogHeight?: string | number // Passed to row edit dialog height to control vertical editing space.
26
- dialogMaxHeight?: string | number // Upper height bound for the edit dialog before internal scrolling.
27
- dialogFullscreen?: boolean // Default open mode for row editor dialog (`true` opens full screen).
28
- initialData?: Record<string, any> // Seed object merged into new rows before user input.
29
- toolbarColor?: string // Vuetify color applied to toolbar and default action buttons.
30
- importable?: boolean // Enables Import button and `@import` flow for adding multiple rows from file.
31
- exportable?: boolean // Enables Export button for current `items` dataset.
32
- insertable?: boolean // Enables Add button and creation flow for new rows.
33
- searchable?: boolean // Shows toolbar search input and binds keyword to table filtering.
34
- inputPad?: boolean // Enables embedded pad editing workflow instead of relying only on dialog.
35
- inputPadOnly?: boolean // Uses pad editor exclusively and skips dialog open/close behavior.
36
- saveAndStay?: boolean // Forwards to child editor to keep it open after save (batch editing).
37
- stringFields?: Array<string> // Dot-path fields preserved as string during import/export flattening and parsing.
38
- }
39
-
40
- /**
41
- * Public props accepted by FormTable.
42
- * Document each prop field with intent, defaults, and side effects for clear generated docs.
43
- */
44
- const props = withDefaults(defineProps<Props & PersistSlimProps>(), {
45
- noDataText: 'ไม่พบข้อมูล',
46
- dialogFullscreen: false,
47
- modelKey: 'id',
48
- toolbarColor: 'primary',
49
- importable: true,
50
- exportable: true,
51
- insertable: true,
52
- searchable: true,
53
- inputPad: false,
54
- inputPadOnly: false,
55
- saveAndStay: false,
56
- stringFields: ()=>[],
57
- })
58
-
59
- /**
60
- * Custom events emitted by FormTable.
61
- * Parents can listen to these events to react to user actions and internal state changes.
62
- */
63
- const emit = defineEmits(['update:modelValue','open:dialog','close:dialog'])
64
- const attrs = useAttrs()
9
+ inheritAttrs: false
10
+ });
11
+ const props = defineProps({
12
+ title: { type: String, required: true },
13
+ noDataText: { type: String, required: false, default: "\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25" },
14
+ modelValue: { type: Array, required: false },
15
+ modelKey: { type: String, required: false, default: "id" },
16
+ dialogWidth: { type: [String, Number], required: false },
17
+ dialogMaxWidth: { type: [String, Number], required: false },
18
+ dialogHeight: { type: [String, Number], required: false },
19
+ dialogMaxHeight: { type: [String, Number], required: false },
20
+ dialogFullscreen: { type: Boolean, required: false, default: false },
21
+ initialData: { type: Object, required: false },
22
+ toolbarColor: { type: String, required: false, default: "primary" },
23
+ importable: { type: Boolean, required: false, default: true },
24
+ exportable: { type: Boolean, required: false, default: true },
25
+ insertable: { type: Boolean, required: false, default: true },
26
+ searchable: { type: Boolean, required: false, default: true },
27
+ inputPad: { type: Boolean, required: false, default: false },
28
+ inputPadOnly: { type: Boolean, required: false, default: false },
29
+ saveAndStay: { type: Boolean, required: false, default: false },
30
+ stringFields: { type: Array, required: false, default: () => [] },
31
+ persist: { type: Boolean, required: false },
32
+ persistKey: { type: String, required: false },
33
+ persistPrefix: { type: String, required: false },
34
+ persistDebounce: { type: Number, required: false },
35
+ persistClearOnEmpty: { type: Boolean, required: false },
36
+ persistTtl: { type: Number, required: false },
37
+ persistEncrypt: { type: Boolean, required: false },
38
+ persistSecret: { type: String, required: false },
39
+ persistAlwaysHydrate: { type: Boolean, required: false }
40
+ });
41
+ const emit = defineEmits(["update:modelValue", "open:dialog", "close:dialog"]);
42
+ const attrs = useAttrs();
65
43
  const plainAttrs = computed(() => {
66
- return omit(attrs, ['modelValue', 'onUpdate:modelValue'])
67
- })
68
-
69
- const inputRef = useTemplateRef<VInput>("inputRef")
70
-
71
- const items = ref<Record<string, any>[]>([])
72
- const search = ref<string>()
73
- const currentItem = ref<Record<string, any> | undefined>(undefined)
74
-
75
- useLocalStorageModel(items,props)
76
-
77
- function setSearch(keyword: string) {
78
- search.value = keyword
44
+ return omit(attrs, ["modelValue", "onUpdate:modelValue"]);
45
+ });
46
+ const inputRef = useTemplateRef("inputRef");
47
+ const items = ref([]);
48
+ const search = ref();
49
+ const currentItem = ref(void 0);
50
+ useLocalStorageModel(items, props);
51
+ function setSearch(keyword) {
52
+ search.value = keyword;
79
53
  }
80
-
81
- const isDialogOpen = ref<boolean>(false)
82
-
54
+ const isDialogOpen = ref(false);
83
55
  watch(() => props.modelValue, (newValue) => {
84
- if (!Array.isArray(newValue) || !newValue.every(item => typeof item === 'object')) {
85
- items.value = []
86
- }
87
- else {
88
- let maxKey = 0
89
-
56
+ if (!Array.isArray(newValue) || !newValue.every((item) => typeof item === "object")) {
57
+ items.value = [];
58
+ } else {
59
+ let maxKey = 0;
90
60
  newValue.forEach((item) => {
91
61
  if (!item.hasOwnProperty(props.modelKey)) {
92
- maxKey = Math.max(maxKey, ...newValue.map(i => i[props.modelKey] || 0))
93
- item[props.modelKey] = maxKey + 1
62
+ maxKey = Math.max(maxKey, ...newValue.map((i) => i[props.modelKey] || 0));
63
+ item[props.modelKey] = maxKey + 1;
94
64
  }
95
- })
96
-
97
- items.value = newValue
65
+ });
66
+ items.value = newValue;
98
67
  }
99
- }, { immediate: true })
100
-
68
+ }, { immediate: true });
101
69
  watch(items, (newValue) => {
102
- emit('update:modelValue', newValue)
103
- }, { deep: true })
104
-
105
-
106
- function createItem(item: Record<string, any>, callback?: FormDialogCallback) {
107
- if (items.value.length > 0) item[props.modelKey] = Math.max(...items.value.map(i => i[props.modelKey] || 0)) + 1
108
- else item[props.modelKey] = 1
109
-
110
- items.value.push(item)
111
-
112
- if (callback && callback.setData) callback.setData(item)
113
- if (callback) callback.done()
70
+ emit("update:modelValue", newValue);
71
+ }, { deep: true });
72
+ function createItem(item, callback) {
73
+ if (items.value.length > 0) item[props.modelKey] = Math.max(...items.value.map((i) => i[props.modelKey] || 0)) + 1;
74
+ else item[props.modelKey] = 1;
75
+ items.value.push(item);
76
+ if (callback && callback.setData) callback.setData(item);
77
+ if (callback) callback.done();
114
78
  }
115
-
116
- function importItems(importItems: Record<string, any>[], callback?: FormDialogCallback) {
117
- importItems.forEach((item) => {
118
- createItem(item)
119
- })
120
- if (callback) callback.done()
79
+ function importItems(importItems2, callback) {
80
+ importItems2.forEach((item) => {
81
+ createItem(item);
82
+ });
83
+ if (callback) callback.done();
121
84
  }
122
-
123
- function updateItem(newItem: Record<string, any>, callback?: FormDialogCallback) {
124
- const index = items.value.findIndex(item => item[props.modelKey] === newItem[props.modelKey])
125
-
85
+ function updateItem(newItem, callback) {
86
+ const index = items.value.findIndex((item) => item[props.modelKey] === newItem[props.modelKey]);
126
87
  if (index !== -1) {
127
- items.value[index] = newItem
88
+ items.value[index] = newItem;
128
89
  }
129
-
130
- if (callback && callback.setData) callback.setData(newItem)
131
- if (callback) callback.done()
90
+ if (callback && callback.setData) callback.setData(newItem);
91
+ if (callback) callback.done();
132
92
  }
133
-
134
- function moveUpItem(currentItem: Record<string, any>, callback?: FormDialogCallback) {
135
- const index = items.value.findIndex(item => item[props.modelKey] === currentItem[props.modelKey])
136
-
93
+ function moveUpItem(currentItem2, callback) {
94
+ const index = items.value.findIndex((item) => item[props.modelKey] === currentItem2[props.modelKey]);
137
95
  if (index > 0) {
138
- const temp = items.value[index - 1]
139
- items.value[index - 1] = items.value[index]
140
- items.value[index] = temp
96
+ const temp = items.value[index - 1];
97
+ items.value[index - 1] = items.value[index];
98
+ items.value[index] = temp;
141
99
  }
142
-
143
- if (callback) callback.done()
100
+ if (callback) callback.done();
144
101
  }
145
-
146
- function moveDownItem(currentItem: Record<string, any>, callback?: FormDialogCallback) {
147
- const index = items.value.findIndex(item => item[props.modelKey] === currentItem[props.modelKey])
148
-
102
+ function moveDownItem(currentItem2, callback) {
103
+ const index = items.value.findIndex((item) => item[props.modelKey] === currentItem2[props.modelKey]);
149
104
  if (index >= 0 && index < items.value.length - 1) {
150
- const temp = items.value[index + 1]
151
- items.value[index + 1] = items.value[index]
152
- items.value[index] = temp
105
+ const temp = items.value[index + 1];
106
+ items.value[index + 1] = items.value[index];
107
+ items.value[index] = temp;
153
108
  }
154
-
155
- if (callback) callback.done()
109
+ if (callback) callback.done();
156
110
  }
157
-
158
- function moveToItem(currentItem: Record<string, any>, callback?: FormDialogCallback) {
159
- const index = items.value.findIndex(item => item[props.modelKey] === currentItem[props.modelKey]);
160
-
111
+ function moveToItem(currentItem2, callback) {
112
+ const index = items.value.findIndex((item) => item[props.modelKey] === currentItem2[props.modelKey]);
161
113
  if (index !== -1) {
162
114
  const newPosition = prompt("Enter the new position (0-based index):");
163
- const parsedPosition = parseInt(<string>newPosition, 10);
164
-
115
+ const parsedPosition = parseInt(newPosition, 10);
165
116
  if (isNaN(parsedPosition) || parsedPosition < 0 || parsedPosition >= items.value.length) {
166
117
  alert("Invalid position entered. Please enter a number between 0 and " + (items.value.length - 1));
167
- return
118
+ return;
168
119
  }
169
-
170
120
  const [temp] = items.value.splice(index, 1);
171
-
172
121
  items.value.splice(parsedPosition, 0, temp);
173
122
  }
174
-
175
123
  if (callback) callback.done();
176
124
  }
177
-
178
- async function deleteItem(deleteItem: Record<string, any>, callback?: FormDialogCallback) {
179
- const index = items.value.findIndex(item => item[props.modelKey] === deleteItem[props.modelKey])
180
-
125
+ async function deleteItem(deleteItem2, callback) {
126
+ const index = items.value.findIndex((item) => item[props.modelKey] === deleteItem2[props.modelKey]);
181
127
  if (index !== -1) {
182
- let confirm = await useDialog().confirm({message: "Do you want to delete record?"})
128
+ let confirm = await useDialog().confirm({ message: "Do you want to delete record?" });
183
129
  if (confirm) {
184
- items.value.splice(index, 1)
185
- if (callback) callback.done()
130
+ items.value.splice(index, 1);
131
+ if (callback) callback.done();
186
132
  }
187
133
  }
188
134
  }
189
-
190
- function openDialog(item?: object) {
191
- if (props.inputPadOnly) inputPadRef.value?.setOriginalData(item)
135
+ function openDialog(item) {
136
+ if (props.inputPadOnly) inputPadRef.value?.setOriginalData(item);
192
137
  else {
193
- currentItem.value = item
138
+ currentItem.value = item;
194
139
  nextTick(() => {
195
- isDialogOpen.value = true
196
- emit('open:dialog',item)
197
- })
140
+ isDialogOpen.value = true;
141
+ emit("open:dialog", item);
142
+ });
198
143
  }
199
144
  }
200
- const inputPadRef = ref()
201
-
202
- const operation = ref({ openDialog, createItem, updateItem, deleteItem, moveUpItem, moveDownItem,moveToItem,setSearch })
203
-
204
- const isValid = computed(()=>{
205
- return inputRef.value?.isValid
206
- })
207
-
208
- const errorMessages = computed(()=>{
209
- return inputRef.value?.errorMessages
210
- })
211
-
145
+ const inputPadRef = ref();
146
+ const operation = ref({ openDialog, createItem, updateItem, deleteItem, moveUpItem, moveDownItem, moveToItem, setSearch });
147
+ const isValid = computed(() => {
148
+ return inputRef.value?.isValid;
149
+ });
150
+ const errorMessages = computed(() => {
151
+ return inputRef.value?.errorMessages;
152
+ });
212
153
  defineExpose({
213
154
  errorMessages,
214
155
  isValid,
215
- reset: ()=>inputRef.value?.reset(),
216
- resetValidation : ()=>inputRef.value?.resetValidation(),
217
- validate : ()=>inputRef.value?.validate(),
156
+ reset: () => inputRef.value?.reset(),
157
+ resetValidation: () => inputRef.value?.resetValidation(),
158
+ validate: () => inputRef.value?.validate(),
218
159
  operation,
219
160
  items
220
- })
161
+ });
221
162
  </script>
222
163
 
223
164
  <template>
224
165
  <v-input v-model="items" v-bind="plainAttrs" ref="inputRef">
225
- <template #default="{isReadonly,isDisabled}">
166
+ <template #default="{ isReadonly, isDisabled }">
226
167
  <v-container fluid class="ma-0 pa-0">
227
168
  <v-card>
228
169
  <slot
@@ -234,7 +175,7 @@ defineExpose({
234
175
  <v-row
235
176
  justify="end"
236
177
  class="ma-1"
237
- dense
178
+ density="compact"
238
179
  no-gutters
239
180
  align="center"
240
181
  >
@@ -299,13 +240,13 @@ defineExpose({
299
240
  >
300
241
  <!-- @ts-ignore -->
301
242
  <template
302
- v-for="(_, name, index) in ($slots as {})"
243
+ v-for="(_, name, index) in $slots"
303
244
  :key="index"
304
245
  #[name]="slotData"
305
246
  >
306
247
  <slot
307
248
  :name="name"
308
- v-bind="((slotData || {}) as object)"
249
+ v-bind="slotData || {}"
309
250
  :operation="operation"
310
251
  :isReadonly="isReadonly"
311
252
  :isDisabled="isDisabled"
@@ -315,9 +256,9 @@ defineExpose({
315
256
  v-if="!$slots['item.operation'] && !(isReadonly.value || isDisabled.value)"
316
257
  #item.operation="props"
317
258
  >
318
- <v-icon density="compact" :disabled="props.index==0" @click="moveUpItem(props.item)">mdi:mdi-arrow-up-thick</v-icon>
259
+ <v-icon density="compact" :disabled="props.index == 0" @click="moveUpItem(props.item)">mdi:mdi-arrow-up-thick</v-icon>
319
260
  <v-icon density="compact" @click="moveToItem(props.item)">fa:fas fa-arrow-right-to-bracket</v-icon>
320
- <v-icon density="compact" :disabled="props.index==items.length-1" @click="moveDownItem(props.item)">mdi:mdi-arrow-down-thick</v-icon>
261
+ <v-icon density="compact" :disabled="props.index == items.length - 1" @click="moveDownItem(props.item)">mdi:mdi-arrow-down-thick</v-icon>
321
262
  </template>
322
263
  <template
323
264
  v-if="!$slots['item.action'] && !(isReadonly.value || isDisabled.value)"