@ramathibodi/nuxt-commons 0.1.73 → 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 (111) hide show
  1. package/README.md +115 -96
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +1 -0
  4. package/dist/runtime/components/Alert.vue +58 -54
  5. package/dist/runtime/components/BarcodeReader.vue +130 -122
  6. package/dist/runtime/components/ExportCSV.vue +110 -102
  7. package/dist/runtime/components/FileBtn.vue +79 -67
  8. package/dist/runtime/components/ImportCSV.vue +151 -139
  9. package/dist/runtime/components/MrzReader.vue +168 -0
  10. package/dist/runtime/components/SplitterPanel.vue +67 -59
  11. package/dist/runtime/components/TabsGroup.vue +39 -31
  12. package/dist/runtime/components/TextBarcode.vue +66 -54
  13. package/dist/runtime/components/device/IdCardButton.vue +95 -83
  14. package/dist/runtime/components/device/IdCardWebSocket.vue +207 -195
  15. package/dist/runtime/components/device/Scanner.vue +350 -338
  16. package/dist/runtime/components/dialog/Confirm.vue +112 -100
  17. package/dist/runtime/components/dialog/Host.vue +88 -84
  18. package/dist/runtime/components/dialog/Index.vue +84 -72
  19. package/dist/runtime/components/dialog/Loading.vue +51 -39
  20. package/dist/runtime/components/dialog/default/Confirm.vue +112 -100
  21. package/dist/runtime/components/dialog/default/Loading.vue +60 -48
  22. package/dist/runtime/components/dialog/default/Notify.vue +82 -70
  23. package/dist/runtime/components/dialog/default/Printing.vue +46 -34
  24. package/dist/runtime/components/dialog/default/VerifyUser.vue +144 -132
  25. package/dist/runtime/components/document/Form.vue +50 -42
  26. package/dist/runtime/components/document/TemplateBuilder.vue +536 -524
  27. package/dist/runtime/components/form/ActionPad.vue +156 -144
  28. package/dist/runtime/components/form/Birthdate.vue +116 -104
  29. package/dist/runtime/components/form/CheckboxGroup.vue +99 -87
  30. package/dist/runtime/components/form/CodeEditor.vue +45 -37
  31. package/dist/runtime/components/form/Date.vue +270 -258
  32. package/dist/runtime/components/form/DateTime.vue +220 -208
  33. package/dist/runtime/components/form/Dialog.vue +178 -166
  34. package/dist/runtime/components/form/EditPad.vue +157 -145
  35. package/dist/runtime/components/form/File.vue +295 -283
  36. package/dist/runtime/components/form/Hidden.vue +44 -32
  37. package/dist/runtime/components/form/Iterator.vue +538 -526
  38. package/dist/runtime/components/form/Login.vue +143 -131
  39. package/dist/runtime/components/form/Pad.vue +399 -387
  40. package/dist/runtime/components/form/SignPad.vue +226 -218
  41. package/dist/runtime/components/form/System.vue +34 -26
  42. package/dist/runtime/components/form/Table.vue +391 -379
  43. package/dist/runtime/components/form/TableData.vue +236 -224
  44. package/dist/runtime/components/form/Time.vue +177 -165
  45. package/dist/runtime/components/form/images/Capture.vue +245 -237
  46. package/dist/runtime/components/form/images/Edit.vue +133 -121
  47. package/dist/runtime/components/form/images/Field.vue +331 -320
  48. package/dist/runtime/components/form/images/Pad.vue +54 -42
  49. package/dist/runtime/components/label/Date.vue +37 -29
  50. package/dist/runtime/components/label/DateAgo.vue +102 -94
  51. package/dist/runtime/components/label/DateCount.vue +152 -144
  52. package/dist/runtime/components/label/Field.vue +111 -103
  53. package/dist/runtime/components/label/FormatMoney.vue +37 -29
  54. package/dist/runtime/components/label/Mask.vue +46 -38
  55. package/dist/runtime/components/label/Object.vue +21 -13
  56. package/dist/runtime/components/master/Autocomplete.vue +89 -81
  57. package/dist/runtime/components/master/Combobox.vue +88 -80
  58. package/dist/runtime/components/master/RadioGroup.vue +90 -78
  59. package/dist/runtime/components/master/Select.vue +70 -62
  60. package/dist/runtime/components/master/label.vue +55 -47
  61. package/dist/runtime/components/model/Autocomplete.vue +91 -79
  62. package/dist/runtime/components/model/Combobox.vue +90 -78
  63. package/dist/runtime/components/model/Pad.vue +114 -102
  64. package/dist/runtime/components/model/Select.vue +78 -72
  65. package/dist/runtime/components/model/Table.vue +370 -358
  66. package/dist/runtime/components/model/iterator.vue +497 -489
  67. package/dist/runtime/components/model/label.vue +58 -50
  68. package/dist/runtime/components/pdf/Print.vue +75 -63
  69. package/dist/runtime/components/pdf/View.vue +146 -134
  70. package/dist/runtime/composables/alert.d.ts +4 -0
  71. package/dist/runtime/composables/api.d.ts +4 -0
  72. package/dist/runtime/composables/dialog.d.ts +1 -1
  73. package/dist/runtime/composables/document/templateFormHidden.d.ts +4 -0
  74. package/dist/runtime/composables/graphql.d.ts +1 -1
  75. package/dist/runtime/composables/graphqlModel.d.ts +9 -9
  76. package/dist/runtime/composables/graphqlModelItem.d.ts +7 -7
  77. package/dist/runtime/composables/graphqlModelOperation.d.ts +6 -6
  78. package/dist/runtime/composables/localStorageModel.d.ts +4 -0
  79. package/dist/runtime/composables/lookupList.d.ts +4 -0
  80. package/dist/runtime/composables/menu.d.ts +4 -0
  81. package/dist/runtime/composables/useMrzReader.d.ts +48 -0
  82. package/dist/runtime/composables/useMrzReader.js +423 -0
  83. package/dist/runtime/composables/useTesseract.d.ts +16 -0
  84. package/dist/runtime/composables/useTesseract.js +45 -0
  85. package/dist/runtime/composables/userPermission.d.ts +1 -1
  86. package/dist/runtime/labs/Calendar.vue +99 -99
  87. package/dist/runtime/labs/form/EditMobile.vue +152 -152
  88. package/dist/runtime/labs/form/TextFieldMask.vue +43 -43
  89. package/dist/runtime/plugins/clientConfig.d.ts +1 -1
  90. package/dist/runtime/plugins/default.d.ts +1 -1
  91. package/dist/runtime/plugins/dialogManager.d.ts +1 -1
  92. package/dist/runtime/plugins/permission.d.ts +1 -1
  93. package/dist/runtime/types/alert.d.ts +11 -11
  94. package/dist/runtime/types/clientConfig.d.ts +13 -13
  95. package/dist/runtime/types/dialogManager.d.ts +35 -35
  96. package/dist/runtime/types/formDialog.d.ts +5 -5
  97. package/dist/runtime/types/graphqlOperation.d.ts +23 -23
  98. package/dist/runtime/types/menu.d.ts +31 -31
  99. package/dist/runtime/types/modules.d.ts +7 -7
  100. package/dist/runtime/types/permission.d.ts +13 -13
  101. package/dist/runtime/utils/asset.d.ts +2 -0
  102. package/dist/runtime/utils/asset.js +49 -0
  103. package/package.json +131 -122
  104. package/scripts/enrich-vue-docs-from-ai.mjs +197 -0
  105. package/scripts/generate-ai-summary.mjs +321 -0
  106. package/scripts/generate-composables-md.mjs +129 -0
  107. package/scripts/postInstall.cjs +70 -70
  108. package/templates/.codegen/codegen.ts +32 -32
  109. package/templates/.codegen/plugin-schema-object.js +161 -161
  110. package/templates/public/tesseract/mrz.traineddata.gz +0 -0
  111. package/templates/public/tesseract/ocrb.traineddata.gz +0 -0
@@ -1,100 +1,112 @@
1
- <script lang="ts" setup>
2
- import { type Ref, ref, watch, computed } from 'vue'
3
- import { isEqual, isUndefined, isEmpty } from 'lodash-es'
4
-
5
- interface DialogProps {
6
- title?: string
7
- modelValue: boolean
8
- message?: string
9
- buttonTrueText?: string
10
- buttonFalseText?: string
11
- type?: 'primary' | 'success' | 'warning' | 'info' | 'error'
12
- confirmData?: string
13
- width?: string
14
- }
15
-
16
- const props = withDefaults(defineProps<DialogProps>(), {
17
- title: 'ยืนยัน',
18
- message: 'ยืนยันทำรายการนี้',
19
- buttonTrueText: 'ตกลง',
20
- buttonFalseText: 'ยกเลิก',
21
- width: 'auto',
22
- })
23
-
24
- const emit = defineEmits<{
25
- (e: 'update:result', value: boolean): void
26
- (e: 'update:modelValue', value: boolean): void
27
- }>()
28
-
29
- const dialogVisible: Ref<boolean> = ref(false)
30
- dialogVisible.value = props.modelValue
31
- watch(
32
- () => props.modelValue,
33
- () => {
34
- dialogVisible.value = props.modelValue
35
- },
36
- )
37
-
38
- const txtConfirm = ref<string>()
39
-
40
- const isDisabled = computed(() => {
41
- if (isUndefined(props.confirmData)) return false
42
- if (isEmpty(props.confirmData)) return true
43
- return props.confirmData ? !isEqual(txtConfirm.value, props.confirmData) : false
44
- })
45
-
46
- const handleResult = (result: boolean) => {
47
- dialogVisible.value = false
48
- emit('update:modelValue', dialogVisible.value)
49
- emit('update:result', result)
50
- txtConfirm.value = ''
51
- }
52
- </script>
53
-
54
- <template>
55
- <v-row justify="center">
56
- <v-dialog
57
- v-model="dialogVisible"
58
- persistent
59
- :width="props.width"
60
- >
61
- <v-card>
62
- <v-toolbar
63
- :color="props.type"
64
- :title="props.title"
65
- />
66
- <v-card-text>{{ props.message }}</v-card-text>
67
- <v-card-text v-if="props.confirmData">
68
- <v-text-field
69
- v-model="txtConfirm"
70
- variant="underlined"
71
- >
72
- <template #label>
73
- <slot
74
- name="labelTextConfirm"
75
- :text="props.confirmData"
76
- />
77
- </template>
78
- </v-text-field>
79
- </v-card-text>
80
- <v-card-actions>
81
- <v-spacer />
82
- <v-btn
83
- variant="text"
84
- @click="handleResult(false)"
85
- >
86
- {{ props.buttonFalseText }}
87
- </v-btn>
88
- <v-btn
89
- :color="props.type"
90
- variant="text"
91
- :disabled="isDisabled"
92
- @click="handleResult(true)"
93
- >
94
- {{ props.buttonTrueText }}
95
- </v-btn>
96
- </v-card-actions>
97
- </v-card>
98
- </v-dialog>
99
- </v-row>
100
- </template>
1
+ <script lang="ts" setup>
2
+ /**
3
+ * DialogConfirm coordinates modal rendering and interactions for runtime dialog flows.
4
+ * This doc block is consumed by vue-docgen for generated API documentation.
5
+ */
6
+ import { type Ref, ref, watch, computed } from 'vue'
7
+ import { isEqual, isUndefined, isEmpty } from 'lodash-es'
8
+
9
+ interface DialogProps {
10
+ title?: string // Title text displayed in the component header or dialog.
11
+ modelValue: boolean // Bound value for v-model synchronization with the parent component.
12
+ message?: string // main message body shown in UI
13
+ buttonTrueText?: string // label for the confirm/primary action
14
+ buttonFalseText?: string // label for the cancel/secondary action
15
+ type?: 'primary' | 'success' | 'warning' | 'info' | 'error' // visual variant controlling color and intent semantics
16
+ confirmData?: string // confirmation text that users must type before continue
17
+ width?: string // dialog/component width in CSS-compatible units
18
+ }
19
+
20
+ /**
21
+ * Public props accepted by DialogConfirm.
22
+ * Document each prop field with intent, defaults, and side effects for clear generated docs.
23
+ */
24
+ const props = withDefaults(defineProps<DialogProps>(), {
25
+ title: 'ยืนยัน',
26
+ message: 'ยืนยันทำรายการนี้',
27
+ buttonTrueText: 'ตกลง',
28
+ buttonFalseText: 'ยกเลิก',
29
+ width: 'auto',
30
+ })
31
+
32
+ /**
33
+ * Custom events emitted by DialogConfirm.
34
+ * Parents can listen to these events to react to user actions and internal state changes.
35
+ */
36
+ const emit = defineEmits<{
37
+ (e: 'update:result', value: boolean): void
38
+ (e: 'update:modelValue', value: boolean): void
39
+ }>()
40
+
41
+ const dialogVisible: Ref<boolean> = ref(false)
42
+ dialogVisible.value = props.modelValue
43
+ watch(
44
+ () => props.modelValue,
45
+ () => {
46
+ dialogVisible.value = props.modelValue
47
+ },
48
+ )
49
+
50
+ const txtConfirm = ref<string>()
51
+
52
+ const isDisabled = computed(() => {
53
+ if (isUndefined(props.confirmData)) return false
54
+ if (isEmpty(props.confirmData)) return true
55
+ return props.confirmData ? !isEqual(txtConfirm.value, props.confirmData) : false
56
+ })
57
+
58
+ const handleResult = (result: boolean) => {
59
+ dialogVisible.value = false
60
+ emit('update:modelValue', dialogVisible.value)
61
+ emit('update:result', result)
62
+ txtConfirm.value = ''
63
+ }
64
+ </script>
65
+
66
+ <template>
67
+ <v-row justify="center">
68
+ <v-dialog
69
+ v-model="dialogVisible"
70
+ persistent
71
+ :width="props.width"
72
+ >
73
+ <v-card>
74
+ <v-toolbar
75
+ :color="props.type"
76
+ :title="props.title"
77
+ />
78
+ <v-card-text>{{ props.message }}</v-card-text>
79
+ <v-card-text v-if="props.confirmData">
80
+ <v-text-field
81
+ v-model="txtConfirm"
82
+ variant="underlined"
83
+ >
84
+ <template #label>
85
+ <slot
86
+ name="labelTextConfirm"
87
+ :text="props.confirmData"
88
+ />
89
+ </template>
90
+ </v-text-field>
91
+ </v-card-text>
92
+ <v-card-actions>
93
+ <v-spacer />
94
+ <v-btn
95
+ variant="text"
96
+ @click="handleResult(false)"
97
+ >
98
+ {{ props.buttonFalseText }}
99
+ </v-btn>
100
+ <v-btn
101
+ :color="props.type"
102
+ variant="text"
103
+ :disabled="isDisabled"
104
+ @click="handleResult(true)"
105
+ >
106
+ {{ props.buttonTrueText }}
107
+ </v-btn>
108
+ </v-card-actions>
109
+ </v-card>
110
+ </v-dialog>
111
+ </v-row>
112
+ </template>
@@ -1,84 +1,88 @@
1
- <script setup lang="ts">
2
- import {shallowReactive, onMounted} from 'vue'
3
- import {useDialog} from "../../composables/dialog"
4
- import type {DialogOpenResult} from "../../types/dialogManager";
5
-
6
- interface DialogEntry {
7
- id: number
8
- component: any
9
- props: Record<string, any>
10
- resolve: (val: any) => void
11
- reject: (val: any) => void
12
- }
13
-
14
- const dialogs = shallowReactive<DialogEntry[]>([])
15
- let idCounter = 0
16
-
17
- function open(component: any, inputProps: Record<string, any> = {}) : DialogOpenResult {
18
- const id = ++idCounter
19
-
20
- const promise = new Promise<any>((resolve,reject) => {
21
- const dialogProps = {
22
- ...inputProps,
23
- modelValue: true,
24
- 'onUpdate:modelValue': (v: boolean) => {
25
- if (!v) close(id, null)
26
- },
27
- onResolve: (val: any) => close(id, val),
28
- onReject: (val: any) => closeWithReject(id, val)
29
- }
30
-
31
- dialogs.push({
32
- id,
33
- component,
34
- props: dialogProps,
35
- resolve,
36
- reject
37
- })
38
- })
39
-
40
- const closeInstance = (val?: any) => {
41
- close(id,val)
42
- }
43
-
44
- const rejectInstance = (val?: any) => {
45
- closeWithReject(id,val)
46
- }
47
-
48
- return { id, promise, closeInstance, rejectInstance}
49
- }
50
-
51
- function close(id: number, val: any) {
52
- const index = dialogs.findIndex((d) => d.id === id)
53
- if (index !== -1) {
54
- dialogs[index].resolve(val)
55
- dialogs.splice(index, 1)
56
- }
57
- }
58
-
59
- function closeWithReject(id: number, val: any) {
60
- const index = dialogs.findIndex((d) => d.id === id)
61
- if (index !== -1) {
62
- dialogs[index].reject(val)
63
- dialogs.splice(index, 1)
64
- }
65
- }
66
-
67
- onMounted(() => {
68
- useDialog()?.setDialogHost(open, close)
69
- })
70
-
71
- defineExpose({ open, close })
72
- </script>
73
- <template>
74
- <Teleport to="body">
75
- <div>
76
- <component
77
- v-for="dialog in dialogs"
78
- :key="dialog.id"
79
- :is="dialog.component"
80
- v-bind="dialog.props"
81
- />
82
- </div>
83
- </Teleport>
84
- </template>
1
+ <script setup lang="ts">
2
+ /**
3
+ * DialogHost coordinates modal rendering and interactions for runtime dialog flows.
4
+ * This doc block is consumed by vue-docgen for generated API documentation.
5
+ */
6
+ import {shallowReactive, onMounted} from 'vue'
7
+ import {useDialog} from "../../composables/dialog"
8
+ import type {DialogOpenResult} from "../../types/dialogManager";
9
+
10
+ interface DialogEntry {
11
+ id: number
12
+ component: any
13
+ props: Record<string, any>
14
+ resolve: (val: any) => void
15
+ reject: (val: any) => void
16
+ }
17
+
18
+ const dialogs = shallowReactive<DialogEntry[]>([])
19
+ let idCounter = 0
20
+
21
+ function open(component: any, inputProps: Record<string, any> = {}) : DialogOpenResult {
22
+ const id = ++idCounter
23
+
24
+ const promise = new Promise<any>((resolve,reject) => {
25
+ const dialogProps = {
26
+ ...inputProps,
27
+ modelValue: true,
28
+ 'onUpdate:modelValue': (v: boolean) => {
29
+ if (!v) close(id, null)
30
+ },
31
+ onResolve: (val: any) => close(id, val),
32
+ onReject: (val: any) => closeWithReject(id, val)
33
+ }
34
+
35
+ dialogs.push({
36
+ id,
37
+ component,
38
+ props: dialogProps,
39
+ resolve,
40
+ reject
41
+ })
42
+ })
43
+
44
+ const closeInstance = (val?: any) => {
45
+ close(id,val)
46
+ }
47
+
48
+ const rejectInstance = (val?: any) => {
49
+ closeWithReject(id,val)
50
+ }
51
+
52
+ return { id, promise, closeInstance, rejectInstance}
53
+ }
54
+
55
+ function close(id: number, val: any) {
56
+ const index = dialogs.findIndex((d) => d.id === id)
57
+ if (index !== -1) {
58
+ dialogs[index].resolve(val)
59
+ dialogs.splice(index, 1)
60
+ }
61
+ }
62
+
63
+ function closeWithReject(id: number, val: any) {
64
+ const index = dialogs.findIndex((d) => d.id === id)
65
+ if (index !== -1) {
66
+ dialogs[index].reject(val)
67
+ dialogs.splice(index, 1)
68
+ }
69
+ }
70
+
71
+ onMounted(() => {
72
+ useDialog()?.setDialogHost(open, close)
73
+ })
74
+
75
+ defineExpose({ open, close })
76
+ </script>
77
+ <template>
78
+ <Teleport to="body">
79
+ <div>
80
+ <component
81
+ v-for="dialog in dialogs"
82
+ :key="dialog.id"
83
+ :is="dialog.component"
84
+ v-bind="dialog.props"
85
+ />
86
+ </div>
87
+ </Teleport>
88
+ </template>
@@ -1,72 +1,84 @@
1
- <script lang="ts" setup>
2
- import { computed } from 'vue'
3
-
4
- interface DialogProps {
5
- modelValue?: boolean
6
- title?: string
7
- message?: string
8
- type?: 'success' | 'error' | 'warning' | 'info'
9
- width?: number | string
10
- }
11
-
12
- const props = defineProps<DialogProps>()
13
- const emit = defineEmits(['update:modelValue'])
14
-
15
- const dialogIcon = computed(() => {
16
- switch (props.type) {
17
- case 'success':
18
- return 'mdi mdi-check-circle'
19
- case 'error':
20
- return 'mdi mdi-alert-circle'
21
- case 'warning':
22
- return 'mdi mdi-alert'
23
- case 'info':
24
- return 'mdi mdi-information-variant-circle'
25
- default:
26
- return ''
27
- }
28
- })
29
- </script>
30
-
31
- <template>
32
- <VDialog
33
- :model-value="modelValue"
34
- :width="width"
35
- max-width="800"
36
- @update:model-value="emit('update:modelValue', false)"
37
- >
38
- <VCard>
39
- <VToolbar :color="type">
40
- <VToolbarTitle>
41
- <VIcon :icon="dialogIcon" />
42
- {{ title }}
43
- </VToolbarTitle>
44
- <VBtn
45
- icon="mdi mdi-close"
46
- size="x-small"
47
- @click="emit('update:modelValue', false)"
48
- />
49
- </VToolbar>
50
- <VCardText>
51
- <slot>
52
- {{ message }}
53
- </slot>
54
- </VCardText>
55
- <VDivider />
56
- <VCardActions>
57
- <VBtn
58
- :color="type"
59
- block
60
- class="ma-auto"
61
- @click="emit('update:modelValue', false)"
62
- >
63
- ตกลง
64
- </VBtn>
65
- </VCardActions>
66
- </VCard>
67
- </VDialog>
68
- </template>
69
-
70
- <style lang="">
71
-
72
- </style>
1
+ <script lang="ts" setup>
2
+ /**
3
+ * DialogIndex coordinates modal rendering and interactions for runtime dialog flows.
4
+ * This doc block is consumed by vue-docgen for generated API documentation.
5
+ */
6
+ import { computed } from 'vue'
7
+
8
+ interface DialogProps {
9
+ modelValue?: boolean // Bound value for v-model synchronization with the parent component.
10
+ title?: string // Title text displayed in the component header or dialog.
11
+ message?: string // main message body shown in UI
12
+ type?: 'success' | 'error' | 'warning' | 'info' // visual variant controlling color and intent semantics
13
+ width?: number | string // dialog/component width in CSS-compatible units
14
+ }
15
+
16
+ /**
17
+ * Public props accepted by DialogIndex.
18
+ * Document each prop field with intent, defaults, and side effects for clear generated docs.
19
+ */
20
+ const props = defineProps<DialogProps>()
21
+ /**
22
+ * Custom events emitted by DialogIndex.
23
+ * Parents can listen to these events to react to user actions and internal state changes.
24
+ */
25
+ const emit = defineEmits(['update:modelValue'])
26
+
27
+ const dialogIcon = computed(() => {
28
+ switch (props.type) {
29
+ case 'success':
30
+ return 'mdi mdi-check-circle'
31
+ case 'error':
32
+ return 'mdi mdi-alert-circle'
33
+ case 'warning':
34
+ return 'mdi mdi-alert'
35
+ case 'info':
36
+ return 'mdi mdi-information-variant-circle'
37
+ default:
38
+ return ''
39
+ }
40
+ })
41
+ </script>
42
+
43
+ <template>
44
+ <VDialog
45
+ :model-value="modelValue"
46
+ :width="width"
47
+ max-width="800"
48
+ @update:model-value="emit('update:modelValue', false)"
49
+ >
50
+ <VCard>
51
+ <VToolbar :color="type">
52
+ <VToolbarTitle>
53
+ <VIcon :icon="dialogIcon" />
54
+ {{ title }}
55
+ </VToolbarTitle>
56
+ <VBtn
57
+ icon="mdi mdi-close"
58
+ size="x-small"
59
+ @click="emit('update:modelValue', false)"
60
+ />
61
+ </VToolbar>
62
+ <VCardText>
63
+ <slot>
64
+ {{ message }}
65
+ </slot>
66
+ </VCardText>
67
+ <VDivider />
68
+ <VCardActions>
69
+ <VBtn
70
+ :color="type"
71
+ block
72
+ class="ma-auto"
73
+ @click="emit('update:modelValue', false)"
74
+ >
75
+ ตกลง
76
+ </VBtn>
77
+ </VCardActions>
78
+ </VCard>
79
+ </VDialog>
80
+ </template>
81
+
82
+ <style lang="">
83
+
84
+ </style>
@@ -1,39 +1,51 @@
1
- <script setup lang="ts">
2
- import { ref, watch } from 'vue'
3
-
4
- interface DialogProps {
5
- modelValue: boolean
6
- color?: string
7
- }
8
- const emit = defineEmits(['update:modelValue'])
9
-
10
- const props = defineProps<DialogProps>()
11
- const dialogVisible = ref<boolean>(props.modelValue)
12
-
13
- watch(() => props.modelValue, (newValue) => {
14
- dialogVisible.value = newValue
15
- })
16
-
17
- watch(() => dialogVisible.value, (newValue) => {
18
- emit('update:modelValue', newValue)
19
- })
20
- </script>
21
-
22
- <template>
23
- <v-dialog
24
- v-model="dialogVisible"
25
- persistent
26
- max-width="500"
27
- >
28
- <v-card :color="props.color">
29
- <v-card-text>
30
- <v-row>
31
- <v-col class="text-center">
32
- <slot>กรุณารอสักครู่</slot>
33
- </v-col>
34
- </v-row>
35
- </v-card-text>
36
- <v-progress-linear indeterminate />
37
- </v-card>
38
- </v-dialog>
39
- </template>
1
+ <script setup lang="ts">
2
+ /**
3
+ * DialogLoading coordinates modal rendering and interactions for runtime dialog flows.
4
+ * This doc block is consumed by vue-docgen for generated API documentation.
5
+ */
6
+ import { ref, watch } from 'vue'
7
+
8
+ interface DialogProps {
9
+ modelValue: boolean // Bound value for v-model synchronization with the parent component.
10
+ color?: string // Vuetify color name applied to the visual element.
11
+ }
12
+ /**
13
+ * Custom events emitted by DialogLoading.
14
+ * Parents can listen to these events to react to user actions and internal state changes.
15
+ */
16
+ const emit = defineEmits(['update:modelValue'])
17
+
18
+ /**
19
+ * Public props accepted by DialogLoading.
20
+ * Document each prop field with intent, defaults, and side effects for clear generated docs.
21
+ */
22
+ const props = defineProps<DialogProps>()
23
+ const dialogVisible = ref<boolean>(props.modelValue)
24
+
25
+ watch(() => props.modelValue, (newValue) => {
26
+ dialogVisible.value = newValue
27
+ })
28
+
29
+ watch(() => dialogVisible.value, (newValue) => {
30
+ emit('update:modelValue', newValue)
31
+ })
32
+ </script>
33
+
34
+ <template>
35
+ <v-dialog
36
+ v-model="dialogVisible"
37
+ persistent
38
+ max-width="500"
39
+ >
40
+ <v-card :color="props.color">
41
+ <v-card-text>
42
+ <v-row>
43
+ <v-col class="text-center">
44
+ <slot>กรุณารอสักครู่</slot>
45
+ </v-col>
46
+ </v-row>
47
+ </v-card-text>
48
+ <v-progress-linear indeterminate />
49
+ </v-card>
50
+ </v-dialog>
51
+ </template>