@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
@@ -1,301 +1,211 @@
1
- <script lang="ts" setup>
2
- /**
3
- * FormIterator 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 {computed, defineExpose, defineOptions, nextTick, ref, useAttrs, useSlots, useTemplateRef, watch} from 'vue'
7
- import {omit} from 'lodash-es'
8
- import type {FormDialogCallback} from '../../types/formDialog'
9
- import {VDataIterator} from "vuetify/components/VDataIterator";
10
- import {VDataTable} from "vuetify/components/VDataTable";
11
- import {VInput} from 'vuetify/components/VInput'
12
- import {useDisplay} from 'vuetify'
13
-
1
+ <script setup>
2
+ import { computed, nextTick, ref, useAttrs, useSlots, useTemplateRef, watch } from "vue";
3
+ import { omit } from "lodash-es";
4
+ import { VDataIterator } from "vuetify/components/VDataIterator";
5
+ import { VDataTable } from "vuetify/components/VDataTable";
6
+ import { VInput } from "vuetify/components/VInput";
7
+ import { useDisplay } from "vuetify";
14
8
  defineOptions({
15
- inheritAttrs: false,
16
- })
17
-
18
- interface Props extends /* @vue-ignore */ InstanceType<typeof VDataIterator['$props']>,/* @vue-ignore */ InstanceType<typeof VDataTable['$props']> {
19
- title: string // Toolbar title shown above iterator/table view.
20
- noDataText?: string // Message shown when no rows are available to render.
21
- modelValue?: Record<string, any>[] // Parent-provided rows; component emits reordered/edited rows back via v-model.
22
- modelKey?: string // Row identity key used for edit/delete/move operations and table item-value.
23
- dialogFullscreen?: boolean // Opens item editor dialog in fullscreen mode by default.
24
- initialData?: Record<string, any> // Default payload merged into a new item before editing.
25
- toolbarColor?: string // Toolbar/action color theme token.
26
- importable?: boolean // Shows import action and allows creating rows from imported records.
27
- exportable?: boolean // Shows export action for the current iterator dataset.
28
- insertable?: boolean // Enables add/create action for new rows.
29
- searchable?: boolean // Shows search control and applies client-side filtering keyword.
30
-
31
- loading?: boolean // External loading state passed through to iterator/table rendering.
32
-
33
- viewSwitch?: boolean // Enables UI control that lets users switch between card iterator and table view.
34
- viewSwitchMultiple?: boolean // Allows multi-select behavior in view switch control when enabled.
35
-
36
- cols?: string | number | boolean // Base grid columns for iterator card items.
37
- xxl?: string | number | boolean // Card grid columns at `xxl` breakpoint.
38
- xl?: string | number | boolean // Card grid columns at `xl` breakpoint.
39
- lg?: string | number | boolean // Card grid columns at `lg` breakpoint.
40
- md?: string | number | boolean // Card grid columns at `md` breakpoint.
41
- sm?: string | number | boolean // Card grid columns at `sm` breakpoint.
42
- itemsPerPage?: string | number // Page size for iterator/table; supports `'all'` semantics.
43
-
44
- preferTable?: string | number | boolean // Global auto-switch rule: `true` always table, number means table when item count reaches threshold.
45
- preferTableXxl?: string | number | boolean // Breakpoint-specific override for `preferTable` at `xxl`.
46
- preferTableXl?: string | number | boolean // Breakpoint-specific override for `preferTable` at `xl`.
47
- preferTableLg?: string | number | boolean // Breakpoint-specific override for `preferTable` at `lg`.
48
- preferTableMd?: string | number | boolean // Breakpoint-specific override for `preferTable` at `md`.
49
- preferTableSm?: string | number | boolean // Breakpoint-specific override for `preferTable` at `sm`.
50
- }
51
-
52
- /**
53
- * Public props accepted by FormIterator.
54
- * Document each prop field with intent, defaults, and side effects for clear generated docs.
55
- */
56
- const props = withDefaults(defineProps<Props>(), {
57
- noDataText: 'ไม่พบข้อมูล',
58
- dialogFullscreen: false,
59
- modelKey: 'id',
60
- toolbarColor: 'primary',
61
- importable: true,
62
- exportable: true,
63
- insertable: true,
64
- searchable: true,
65
-
66
- loading: false,
67
-
68
- viewSwitch: false,
69
- viewSwitchMultiple:false,
70
-
71
- cols: 12,
72
- xxl: false,
73
- xl: false,
74
- lg: 2,
75
- md: 4,
76
- sm: 6,
77
- itemsPerPage: 12,
78
- })
79
-
80
- /**
81
- * Custom events emitted by FormIterator.
82
- * Parents can listen to these events to react to user actions and internal state changes.
83
- */
84
- const emit = defineEmits(['update:modelValue'])
85
-
86
- 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
+ dialogFullscreen: { type: Boolean, required: false, default: false },
17
+ initialData: { type: Object, required: false },
18
+ toolbarColor: { type: String, required: false, default: "primary" },
19
+ importable: { type: Boolean, required: false, default: true },
20
+ exportable: { type: Boolean, required: false, default: true },
21
+ insertable: { type: Boolean, required: false, default: true },
22
+ searchable: { type: Boolean, required: false, default: true },
23
+ loading: { type: Boolean, required: false, default: false },
24
+ viewSwitch: { type: Boolean, required: false, default: false },
25
+ viewSwitchMultiple: { type: Boolean, required: false, default: false },
26
+ cols: { type: [String, Number, Boolean], required: false, default: 12 },
27
+ xxl: { type: [String, Number, Boolean], required: false, default: false },
28
+ xl: { type: [String, Number, Boolean], required: false, default: false },
29
+ lg: { type: [String, Number, Boolean], required: false, default: 2 },
30
+ md: { type: [String, Number, Boolean], required: false, default: 4 },
31
+ sm: { type: [String, Number, Boolean], required: false, default: 6 },
32
+ itemsPerPage: { type: [String, Number], required: false, default: 12 },
33
+ preferTable: { type: [String, Number, Boolean], required: false },
34
+ preferTableXxl: { type: [String, Number, Boolean], required: false },
35
+ preferTableXl: { type: [String, Number, Boolean], required: false },
36
+ preferTableLg: { type: [String, Number, Boolean], required: false },
37
+ preferTableMd: { type: [String, Number, Boolean], required: false },
38
+ preferTableSm: { type: [String, Number, Boolean], required: false }
39
+ });
40
+ const emit = defineEmits(["update:modelValue"]);
41
+ const attrs = useAttrs();
87
42
  const plainAttrs = computed(() => {
88
- return omit(attrs, ['modelValue', 'onUpdate:modelValue'])
89
- })
90
-
91
- const inputRef = useTemplateRef<VInput>("inputRef")
92
-
93
- const slots = useSlots()
43
+ return omit(attrs, ["modelValue", "onUpdate:modelValue"]);
44
+ });
45
+ const inputRef = useTemplateRef("inputRef");
46
+ const slots = useSlots();
94
47
  const tableSlots = computed(() => {
95
- return omit(slots, ['item'])
96
- })
97
-
98
- const display = useDisplay()
99
- const isProgrammaticSet = ref(false)
100
- const userOverrodeView = ref(false)
101
-
102
- const viewType = ref<string[] | string>('iterator')
103
-
104
- function setViewTypeSafely(val: 'iterator' | 'table') {
105
- isProgrammaticSet.value = true
48
+ return omit(slots, ["item"]);
49
+ });
50
+ const display = useDisplay();
51
+ const isProgrammaticSet = ref(false);
52
+ const userOverrodeView = ref(false);
53
+ const viewType = ref("iterator");
54
+ function setViewTypeSafely(val) {
55
+ isProgrammaticSet.value = true;
106
56
  if (Array.isArray(viewType.value)) {
107
- viewType.value = [val]
57
+ viewType.value = [val];
108
58
  } else {
109
- viewType.value = val
59
+ viewType.value = val;
110
60
  }
111
- nextTick(() => { isProgrammaticSet.value = false })
61
+ nextTick(() => {
62
+ isProgrammaticSet.value = false;
63
+ });
112
64
  }
113
-
114
65
  watch(viewType, () => {
115
- if (!isProgrammaticSet.value) userOverrodeView.value = true
116
- })
117
-
118
- function parsePrefer(val: unknown): boolean | number {
119
- if (val === true) return true
120
- const n = Number(val)
121
- return Number.isFinite(n) && n > 0 ? n : false
66
+ if (!isProgrammaticSet.value) userOverrodeView.value = true;
67
+ });
68
+ function parsePrefer(val) {
69
+ if (val === true) return true;
70
+ const n = Number(val);
71
+ return Number.isFinite(n) && n > 0 ? n : false;
122
72
  }
123
-
124
- const computedPreferTable = computed<boolean | number>(() => {
125
- const bp = display.name?.value
126
- if (bp === 'xxl' && props.preferTableXxl !== undefined) return parsePrefer(props.preferTableXxl)
127
- if (bp === 'xl' && props.preferTableXl !== undefined) return parsePrefer(props.preferTableXl)
128
- if (bp === 'lg' && props.preferTableLg !== undefined) return parsePrefer(props.preferTableLg)
129
- if (bp === 'md' && props.preferTableMd !== undefined) return parsePrefer(props.preferTableMd)
130
- if (bp === 'sm' && props.preferTableSm !== undefined) return parsePrefer(props.preferTableSm)
131
- return parsePrefer(props.preferTable)
132
- })
133
-
134
- const items = ref<Record<string, any>[]>([])
135
- const search = ref<string>()
136
- const currentItem = ref<Record<string, any> | undefined>(undefined)
137
-
138
- function setSearch(keyword: string) {
139
- search.value = keyword
73
+ const computedPreferTable = computed(() => {
74
+ const bp = display.name?.value;
75
+ if (bp === "xxl" && props.preferTableXxl !== void 0) return parsePrefer(props.preferTableXxl);
76
+ if (bp === "xl" && props.preferTableXl !== void 0) return parsePrefer(props.preferTableXl);
77
+ if (bp === "lg" && props.preferTableLg !== void 0) return parsePrefer(props.preferTableLg);
78
+ if (bp === "md" && props.preferTableMd !== void 0) return parsePrefer(props.preferTableMd);
79
+ if (bp === "sm" && props.preferTableSm !== void 0) return parsePrefer(props.preferTableSm);
80
+ return parsePrefer(props.preferTable);
81
+ });
82
+ const items = ref([]);
83
+ const search = ref();
84
+ const currentItem = ref(void 0);
85
+ function setSearch(keyword) {
86
+ search.value = keyword;
140
87
  }
141
-
142
- const isDialogOpen = ref<boolean>(false)
143
-
88
+ const isDialogOpen = ref(false);
144
89
  watch(() => props.modelValue, (newValue) => {
145
- if (!Array.isArray(newValue) || !newValue.every(item => typeof item === 'object')) {
146
- items.value = []
147
- }
148
- else {
149
- let maxKey = 0
150
-
90
+ if (!Array.isArray(newValue) || !newValue.every((item) => typeof item === "object")) {
91
+ items.value = [];
92
+ } else {
93
+ let maxKey = 0;
151
94
  newValue.forEach((item) => {
152
95
  if (!item.hasOwnProperty(props.modelKey)) {
153
- maxKey = Math.max(maxKey, ...newValue.map(i => i[props.modelKey] || 0))
154
- item[props.modelKey] = maxKey + 1
96
+ maxKey = Math.max(maxKey, ...newValue.map((i) => i[props.modelKey] || 0));
97
+ item[props.modelKey] = maxKey + 1;
155
98
  }
156
- })
157
-
158
- items.value = newValue
99
+ });
100
+ items.value = newValue;
159
101
  }
160
- }, { immediate: true })
161
-
102
+ }, { immediate: true });
162
103
  watch(items, (newValue) => {
163
- emit('update:modelValue', newValue)
164
- }, { deep: true })
165
-
104
+ emit("update:modelValue", newValue);
105
+ }, { deep: true });
166
106
  watch(
167
- [() => items.value?.length, computedPreferTable, () => display.name?.value],
168
- ([len, prefer]) => {
169
- if (userOverrodeView.value) return // respect explicit user choice forever (until remount)
170
-
171
- let target: 'iterator' | 'table' = 'iterator'
172
- if (prefer === true) {
173
- target = 'table'
174
- } else if (typeof prefer === 'number') {
175
- if (Number(len) >= prefer) target = 'table'
176
- }
177
-
178
- if (!viewType.value?.includes(target)) setViewTypeSafely(target)
179
- },
180
- { immediate: true }
181
- )
182
-
183
- const itemsPerPageInternal = ref<string | number>()
107
+ [() => items.value?.length, computedPreferTable, () => display.name?.value],
108
+ ([len, prefer]) => {
109
+ if (userOverrodeView.value) return;
110
+ let target = "iterator";
111
+ if (prefer === true) {
112
+ target = "table";
113
+ } else if (typeof prefer === "number") {
114
+ if (Number(len) >= prefer) target = "table";
115
+ }
116
+ if (!viewType.value?.includes(target)) setViewTypeSafely(target);
117
+ },
118
+ { immediate: true }
119
+ );
120
+ const itemsPerPageInternal = ref();
184
121
  watch(() => props.itemsPerPage, (newValue) => {
185
- if (newValue.toString().toLowerCase() == 'all') itemsPerPageInternal.value = '-1'
186
- else if (newValue) itemsPerPageInternal.value = newValue
187
- }, { immediate: true })
188
-
189
- function createItem(item: Record<string, any>, callback?: FormDialogCallback) {
190
- if (items.value.length > 0) item[props.modelKey] = Math.max(...items.value.map(i => i[props.modelKey] || 0)) + 1
191
- else item[props.modelKey] = 1
192
-
193
- items.value.push(item)
194
-
195
- if (callback) callback.done()
122
+ if (newValue.toString().toLowerCase() == "all") itemsPerPageInternal.value = "-1";
123
+ else if (newValue) itemsPerPageInternal.value = newValue;
124
+ }, { immediate: true });
125
+ function createItem(item, callback) {
126
+ if (items.value.length > 0) item[props.modelKey] = Math.max(...items.value.map((i) => i[props.modelKey] || 0)) + 1;
127
+ else item[props.modelKey] = 1;
128
+ items.value.push(item);
129
+ if (callback) callback.done();
196
130
  }
197
-
198
- function importItems(importItems: Record<string, any>[], callback?: FormDialogCallback) {
199
- importItems.forEach((item) => {
200
- createItem(item)
201
- })
202
- if (callback) callback.done()
131
+ function importItems(importItems2, callback) {
132
+ importItems2.forEach((item) => {
133
+ createItem(item);
134
+ });
135
+ if (callback) callback.done();
203
136
  }
204
-
205
- function updateItem(newItem: Record<string, any>, callback?: FormDialogCallback) {
206
- const index = items.value.findIndex(item => item[props.modelKey] === newItem[props.modelKey])
207
-
137
+ function updateItem(newItem, callback) {
138
+ const index = items.value.findIndex((item) => item[props.modelKey] === newItem[props.modelKey]);
208
139
  if (index !== -1) {
209
- items.value[index] = newItem
140
+ items.value[index] = newItem;
210
141
  }
211
-
212
- if (callback) callback.done()
142
+ if (callback) callback.done();
213
143
  }
214
-
215
- function moveUpItem(currentItem: Record<string, any>, callback?: FormDialogCallback) {
216
- const index = items.value.findIndex(item => item[props.modelKey] === currentItem[props.modelKey])
217
-
144
+ function moveUpItem(currentItem2, callback) {
145
+ const index = items.value.findIndex((item) => item[props.modelKey] === currentItem2[props.modelKey]);
218
146
  if (index > 0) {
219
- const temp = items.value[index - 1]
220
- items.value[index - 1] = items.value[index]
221
- items.value[index] = temp
147
+ const temp = items.value[index - 1];
148
+ items.value[index - 1] = items.value[index];
149
+ items.value[index] = temp;
222
150
  }
223
-
224
- if (callback) callback.done()
151
+ if (callback) callback.done();
225
152
  }
226
-
227
- function moveDownItem(currentItem: Record<string, any>, callback?: FormDialogCallback) {
228
- const index = items.value.findIndex(item => item[props.modelKey] === currentItem[props.modelKey])
229
-
153
+ function moveDownItem(currentItem2, callback) {
154
+ const index = items.value.findIndex((item) => item[props.modelKey] === currentItem2[props.modelKey]);
230
155
  if (index >= 0 && index < items.value.length - 1) {
231
- const temp = items.value[index + 1]
232
- items.value[index + 1] = items.value[index]
233
- items.value[index] = temp
156
+ const temp = items.value[index + 1];
157
+ items.value[index + 1] = items.value[index];
158
+ items.value[index] = temp;
234
159
  }
235
-
236
- if (callback) callback.done()
160
+ if (callback) callback.done();
237
161
  }
238
-
239
- function moveToItem(currentItem: Record<string, any>, callback?: FormDialogCallback) {
240
- const index = items.value.findIndex(item => item[props.modelKey] === currentItem[props.modelKey]);
241
-
162
+ function moveToItem(currentItem2, callback) {
163
+ const index = items.value.findIndex((item) => item[props.modelKey] === currentItem2[props.modelKey]);
242
164
  if (index !== -1) {
243
165
  const newPosition = prompt("Enter the new position (0-based index):");
244
- const parsedPosition = parseInt(<string>newPosition, 10);
245
-
166
+ const parsedPosition = parseInt(newPosition, 10);
246
167
  if (isNaN(parsedPosition) || parsedPosition < 0 || parsedPosition >= items.value.length) {
247
168
  alert("Invalid position entered. Please enter a number between 0 and " + (items.value.length - 1));
248
- return
169
+ return;
249
170
  }
250
-
251
171
  const [temp] = items.value.splice(index, 1);
252
-
253
172
  items.value.splice(parsedPosition, 0, temp);
254
173
  }
255
-
256
174
  if (callback) callback.done();
257
175
  }
258
-
259
- function deleteItem(deleteItem: Record<string, any>, callback?: FormDialogCallback) {
260
- const index = items.value.findIndex(item => item[props.modelKey] === deleteItem[props.modelKey])
261
-
176
+ function deleteItem(deleteItem2, callback) {
177
+ const index = items.value.findIndex((item) => item[props.modelKey] === deleteItem2[props.modelKey]);
262
178
  if (index !== -1) {
263
- items.value.splice(index, 1)
179
+ items.value.splice(index, 1);
264
180
  }
265
-
266
- if (callback) callback.done()
181
+ if (callback) callback.done();
267
182
  }
268
-
269
- function openDialog(item?: object) {
270
- currentItem.value = item
183
+ function openDialog(item) {
184
+ currentItem.value = item;
271
185
  nextTick(() => {
272
- isDialogOpen.value = true
273
- })
186
+ isDialogOpen.value = true;
187
+ });
274
188
  }
275
-
276
- const operation = ref({ openDialog, createItem, updateItem, deleteItem, moveUpItem, moveDownItem,moveToItem,setSearch })
277
-
278
- const isValid = computed(()=>{
279
- return inputRef.value?.isValid
280
- })
281
-
282
- const errorMessages = computed(()=>{
283
- return inputRef.value?.errorMessages
284
- })
285
-
189
+ const operation = ref({ openDialog, createItem, updateItem, deleteItem, moveUpItem, moveDownItem, moveToItem, setSearch });
190
+ const isValid = computed(() => {
191
+ return inputRef.value?.isValid;
192
+ });
193
+ const errorMessages = computed(() => {
194
+ return inputRef.value?.errorMessages;
195
+ });
286
196
  defineExpose({
287
197
  errorMessages,
288
198
  isValid,
289
- reset: ()=>inputRef.value?.reset(),
290
- resetValidation : ()=>inputRef.value?.resetValidation(),
291
- validate : ()=>inputRef.value?.validate(),
199
+ reset: () => inputRef.value?.reset(),
200
+ resetValidation: () => inputRef.value?.resetValidation(),
201
+ validate: () => inputRef.value?.validate(),
292
202
  operation
293
- })
203
+ });
294
204
  </script>
295
205
 
296
206
  <template>
297
207
  <v-input v-model="items" v-bind="plainAttrs" ref="inputRef">
298
- <template #default="{isReadonly,isDisabled}">
208
+ <template #default="{ isReadonly, isDisabled }">
299
209
  <v-container fluid class="ma-0 pa-0">
300
210
  <v-card>
301
211
  <v-data-iterator
@@ -371,7 +281,7 @@ defineExpose({
371
281
  <v-row
372
282
  justify="end"
373
283
  class="ma-1"
374
- dense
284
+ density="compact"
375
285
  no-gutters
376
286
  align="center"
377
287
  >
@@ -442,13 +352,13 @@ defineExpose({
442
352
  >
443
353
  <!-- @ts-ignore -->
444
354
  <template
445
- v-for="(_, name, index) in (tableSlots as {})"
355
+ v-for="(_, name, index) in tableSlots"
446
356
  :key="index"
447
357
  #[name]="slotData"
448
358
  >
449
359
  <slot
450
360
  :name="name"
451
- v-bind="((slotData || {}) as object)"
361
+ v-bind="slotData || {}"
452
362
  :operation="operation"
453
363
  :isReadonly="isReadonly"
454
364
  :isDisabled="isDisabled"
@@ -458,9 +368,9 @@ defineExpose({
458
368
  v-if="!$slots['item.operation'] && !(isReadonly.value || isDisabled.value)"
459
369
  #item.operation="props"
460
370
  >
461
- <v-icon density="compact" :disabled="props.index==0" @click="moveUpItem(props.item)">mdi:mdi-arrow-up-thick</v-icon>
371
+ <v-icon density="compact" :disabled="props.index == 0" @click="moveUpItem(props.item)">mdi:mdi-arrow-up-thick</v-icon>
462
372
  <v-icon density="compact" @click="moveToItem(props.item)">fa:fas fa-arrow-right-to-bracket</v-icon>
463
- <v-icon density="compact" :disabled="props.index==items.length-1" @click="moveDownItem(props.item)">mdi:mdi-arrow-down-thick</v-icon>
373
+ <v-icon density="compact" :disabled="props.index == items.length - 1" @click="moveDownItem(props.item)">mdi:mdi-arrow-down-thick</v-icon>
464
374
  </template>
465
375
  <template
466
376
  v-if="!$slots['item.action'] && !(isReadonly.value || isDisabled.value)"
@@ -486,7 +396,7 @@ defineExpose({
486
396
  <v-row
487
397
  align-content="center"
488
398
  justify="end"
489
- dense
399
+ density="compact"
490
400
  >
491
401
  <v-spacer />
492
402
  <v-select