@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,101 +1,113 @@
1
- <script lang="ts" setup>
2
- import { ref, watch, computed, type Ref } 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: 'Confirm',
18
- message: 'Do you want to proceed?',
19
- buttonTrueText: 'Ok',
20
- buttonFalseText: 'Cancel',
21
- type: 'primary',
22
- width: 'auto',
23
- })
24
-
25
- const emit = defineEmits<{
26
- (e: 'update:modelValue', value: boolean): void
27
- (e: 'resolve', value: boolean): void
28
- (e: 'reject', value: any): void
29
- }>()
30
-
31
- const dialogVisible: Ref<boolean> = ref(props.modelValue)
32
-
33
- watch(() => props.modelValue, (val) => {
34
- dialogVisible.value = val
35
- })
36
-
37
- watch(dialogVisible, (val) => {
38
- if (!val) emit('update:modelValue', false)
39
- })
40
-
41
- const txtConfirm = ref<string>('')
42
-
43
- const isDisabled = computed(() => {
44
- if (isUndefined(props.confirmData)) return false
45
- if (isEmpty(props.confirmData)) return true
46
- return !isEqual(txtConfirm.value, props.confirmData)
47
- })
48
-
49
- const handleResult = (result: boolean) => {
50
- dialogVisible.value = false
51
- emit('resolve', result) // emit back to dialog-manager
52
- }
53
- </script>
54
-
55
- <template>
56
- <v-row justify="center">
57
- <v-dialog
58
- v-model="dialogVisible"
59
- persistent
60
- :width="props.width"
61
- >
62
- <v-card>
63
- <v-toolbar
64
- :color="props.type"
65
- :title="props.title"
66
- />
67
- <v-card-text>{{ props.message }}</v-card-text>
68
- <v-card-text v-if="props.confirmData">
69
- <v-text-field
70
- v-model="txtConfirm"
71
- variant="underlined"
72
- >
73
- <template #label>
74
- <slot
75
- name="labelTextConfirm"
76
- :text="props.confirmData"
77
- />
78
- </template>
79
- </v-text-field>
80
- </v-card-text>
81
- <v-card-actions>
82
- <v-spacer />
83
- <v-btn
84
- variant="text"
85
- @click="handleResult(false)"
86
- >
87
- {{ props.buttonFalseText }}
88
- </v-btn>
89
- <v-btn
90
- :color="props.type"
91
- variant="text"
92
- :disabled="isDisabled"
93
- @click="handleResult(true)"
94
- >
95
- {{ props.buttonTrueText }}
96
- </v-btn>
97
- </v-card-actions>
98
- </v-card>
99
- </v-dialog>
100
- </v-row>
1
+ <script lang="ts" setup>
2
+ /**
3
+ * DialogDefaultConfirm is a default dialog content component used by the dialog host for common runtime prompts and feedback.
4
+ * This doc block is consumed by vue-docgen for generated API documentation.
5
+ */
6
+ import { ref, watch, computed, type Ref } 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 DialogDefaultConfirm.
22
+ * Document each prop field with intent, defaults, and side effects for clear generated docs.
23
+ */
24
+ const props = withDefaults(defineProps<DialogProps>(), {
25
+ title: 'Confirm',
26
+ message: 'Do you want to proceed?',
27
+ buttonTrueText: 'Ok',
28
+ buttonFalseText: 'Cancel',
29
+ type: 'primary',
30
+ width: 'auto',
31
+ })
32
+
33
+ /**
34
+ * Custom events emitted by DialogDefaultConfirm.
35
+ * Parents can listen to these events to react to user actions and internal state changes.
36
+ */
37
+ const emit = defineEmits<{
38
+ (e: 'update:modelValue', value: boolean): void
39
+ (e: 'resolve', value: boolean): void
40
+ (e: 'reject', value: any): void
41
+ }>()
42
+
43
+ const dialogVisible: Ref<boolean> = ref(props.modelValue)
44
+
45
+ watch(() => props.modelValue, (val) => {
46
+ dialogVisible.value = val
47
+ })
48
+
49
+ watch(dialogVisible, (val) => {
50
+ if (!val) emit('update:modelValue', false)
51
+ })
52
+
53
+ const txtConfirm = ref<string>('')
54
+
55
+ const isDisabled = computed(() => {
56
+ if (isUndefined(props.confirmData)) return false
57
+ if (isEmpty(props.confirmData)) return true
58
+ return !isEqual(txtConfirm.value, props.confirmData)
59
+ })
60
+
61
+ const handleResult = (result: boolean) => {
62
+ dialogVisible.value = false
63
+ emit('resolve', result) // emit back to dialog-manager
64
+ }
65
+ </script>
66
+
67
+ <template>
68
+ <v-row justify="center">
69
+ <v-dialog
70
+ v-model="dialogVisible"
71
+ persistent
72
+ :width="props.width"
73
+ >
74
+ <v-card>
75
+ <v-toolbar
76
+ :color="props.type"
77
+ :title="props.title"
78
+ />
79
+ <v-card-text>{{ props.message }}</v-card-text>
80
+ <v-card-text v-if="props.confirmData">
81
+ <v-text-field
82
+ v-model="txtConfirm"
83
+ variant="underlined"
84
+ >
85
+ <template #label>
86
+ <slot
87
+ name="labelTextConfirm"
88
+ :text="props.confirmData"
89
+ />
90
+ </template>
91
+ </v-text-field>
92
+ </v-card-text>
93
+ <v-card-actions>
94
+ <v-spacer />
95
+ <v-btn
96
+ variant="text"
97
+ @click="handleResult(false)"
98
+ >
99
+ {{ props.buttonFalseText }}
100
+ </v-btn>
101
+ <v-btn
102
+ :color="props.type"
103
+ variant="text"
104
+ :disabled="isDisabled"
105
+ @click="handleResult(true)"
106
+ >
107
+ {{ props.buttonTrueText }}
108
+ </v-btn>
109
+ </v-card-actions>
110
+ </v-card>
111
+ </v-dialog>
112
+ </v-row>
101
113
  </template>
@@ -1,48 +1,60 @@
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="400"
27
- class="rounded-xl"
28
- >
29
- <v-card :color="props.color || 'surface'" elevation="10" class="pa-4 rounded-xl">
30
- <v-card-title class="text-h6 text-center">
31
- <slot name="title">Please wait</slot>
32
- </v-card-title>
33
-
34
- <v-card-text class="text-center">
35
- <v-progress-circular
36
- indeterminate
37
- size="40"
38
- width="4"
39
- color="primary"
40
- class="mb-4"
41
- />
42
- <div>
43
- <slot>Loading data, please wait...</slot>
44
- </div>
45
- </v-card-text>
46
- </v-card>
47
- </v-dialog>
48
- </template>
1
+ <script setup lang="ts">
2
+ /**
3
+ * DialogDefaultLoading is a default dialog content component used by the dialog host for common runtime prompts and feedback.
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 DialogDefaultLoading.
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 DialogDefaultLoading.
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="400"
39
+ class="rounded-xl"
40
+ >
41
+ <v-card :color="props.color || 'surface'" elevation="10" class="pa-4 rounded-xl">
42
+ <v-card-title class="text-h6 text-center">
43
+ <slot name="title">Please wait</slot>
44
+ </v-card-title>
45
+
46
+ <v-card-text class="text-center">
47
+ <v-progress-circular
48
+ indeterminate
49
+ size="40"
50
+ width="4"
51
+ color="primary"
52
+ class="mb-4"
53
+ />
54
+ <div>
55
+ <slot>Loading data, please wait...</slot>
56
+ </div>
57
+ </v-card-text>
58
+ </v-card>
59
+ </v-dialog>
60
+ </template>
@@ -1,70 +1,82 @@
1
- <script lang="ts" setup>
2
- import { ref, watch, type Ref } from 'vue'
3
-
4
- interface DialogProps {
5
- title?: string
6
- modelValue: boolean
7
- message?: string
8
- buttonText?: string
9
- type?: 'primary' | 'success' | 'warning' | 'info' | 'error'
10
- width?: string
11
- }
12
-
13
- const props = withDefaults(defineProps<DialogProps>(), {
14
- title: 'Notice',
15
- message: 'Something happened.',
16
- buttonText: 'OK',
17
- type: 'primary',
18
- width: 'auto',
19
- })
20
-
21
- const emit = defineEmits<{
22
- (e: 'update:modelValue', value: boolean): void
23
- (e: 'resolve', value: boolean): void
24
- }>()
25
-
26
- const dialogVisible: Ref<boolean> = ref(props.modelValue)
27
-
28
- watch(() => props.modelValue, (val) => {
29
- dialogVisible.value = val
30
- })
31
-
32
- watch(dialogVisible, (val) => {
33
- if (!val) emit('update:modelValue', false)
34
- })
35
-
36
- const handleClose = () => {
37
- dialogVisible.value = false
38
- emit('resolve', true)
39
- }
40
- </script>
41
-
42
- <template>
43
- <v-row justify="center">
44
- <v-dialog
45
- v-model="dialogVisible"
46
- persistent
47
- :width="props.width"
48
- >
49
- <v-card>
50
- <v-toolbar
51
- :color="props.type"
52
- :title="props.title"
53
- density="compact"
54
- />
55
- <v-card-text class="text-body-2 text-center py-4">
56
- {{ props.message }}
57
- </v-card-text>
58
- <v-card-actions class="justify-center">
59
- <v-btn
60
- :color="props.type"
61
- variant="elevated"
62
- @click="handleClose"
63
- >
64
- {{ props.buttonText }}
65
- </v-btn>
66
- </v-card-actions>
67
- </v-card>
68
- </v-dialog>
69
- </v-row>
70
- </template>
1
+ <script lang="ts" setup>
2
+ /**
3
+ * DialogDefaultNotify is a default dialog content component used by the dialog host for common runtime prompts and feedback.
4
+ * This doc block is consumed by vue-docgen for generated API documentation.
5
+ */
6
+ import { ref, watch, type Ref } from 'vue'
7
+
8
+ interface DialogProps {
9
+ title?: string // Title text displayed in the component header or dialog.
10
+ modelValue: boolean // Bound value for v-model synchronization with the parent component.
11
+ message?: string // main message body shown in UI
12
+ buttonText?: string // Label text displayed on the primary action button.
13
+ type?: 'primary' | 'success' | 'warning' | 'info' | 'error' // visual variant controlling color and intent semantics
14
+ width?: string // dialog/component width in CSS-compatible units
15
+ }
16
+
17
+ /**
18
+ * Public props accepted by DialogDefaultNotify.
19
+ * Document each prop field with intent, defaults, and side effects for clear generated docs.
20
+ */
21
+ const props = withDefaults(defineProps<DialogProps>(), {
22
+ title: 'Notice',
23
+ message: 'Something happened.',
24
+ buttonText: 'OK',
25
+ type: 'primary',
26
+ width: 'auto',
27
+ })
28
+
29
+ /**
30
+ * Custom events emitted by DialogDefaultNotify.
31
+ * Parents can listen to these events to react to user actions and internal state changes.
32
+ */
33
+ const emit = defineEmits<{
34
+ (e: 'update:modelValue', value: boolean): void
35
+ (e: 'resolve', value: boolean): void
36
+ }>()
37
+
38
+ const dialogVisible: Ref<boolean> = ref(props.modelValue)
39
+
40
+ watch(() => props.modelValue, (val) => {
41
+ dialogVisible.value = val
42
+ })
43
+
44
+ watch(dialogVisible, (val) => {
45
+ if (!val) emit('update:modelValue', false)
46
+ })
47
+
48
+ const handleClose = () => {
49
+ dialogVisible.value = false
50
+ emit('resolve', true)
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
+ density="compact"
66
+ />
67
+ <v-card-text class="text-body-2 text-center py-4">
68
+ {{ props.message }}
69
+ </v-card-text>
70
+ <v-card-actions class="justify-center">
71
+ <v-btn
72
+ :color="props.type"
73
+ variant="elevated"
74
+ @click="handleClose"
75
+ >
76
+ {{ props.buttonText }}
77
+ </v-btn>
78
+ </v-card-actions>
79
+ </v-card>
80
+ </v-dialog>
81
+ </v-row>
82
+ </template>
@@ -1,35 +1,47 @@
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
- const props = defineProps<DialogProps>()
10
- const dialogVisible = ref(props.modelValue)
11
-
12
- watch(() => props.modelValue, (newValue) => {
13
- dialogVisible.value = newValue
14
- })
15
-
16
- watch(() => dialogVisible.value, (newValue) => {
17
- emit('update:modelValue', newValue)
18
- })
19
- </script>
20
-
21
- <template>
22
- <v-dialog
23
- v-model="dialogVisible"
24
- persistent
25
- max-width="320"
26
- class="rounded-lg"
27
- >
28
- <v-card :color="props.color || 'surface'" class="pa-3 rounded-lg d-flex flex-column align-center">
29
- <v-icon size="36" color="primary" class="mb-2">mdi mdi-printer</v-icon>
30
- <div class="text-center text-body-2">
31
- <slot>Preparing to print...</slot>
32
- </div>
33
- </v-card>
34
- </v-dialog>
1
+ <script setup lang="ts">
2
+ /**
3
+ * DialogDefaultPrinting is a default dialog content component used by the dialog host for common runtime prompts and feedback.
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 DialogDefaultPrinting.
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
+ * Public props accepted by DialogDefaultPrinting.
19
+ * Document each prop field with intent, defaults, and side effects for clear generated docs.
20
+ */
21
+ const props = defineProps<DialogProps>()
22
+ const dialogVisible = ref(props.modelValue)
23
+
24
+ watch(() => props.modelValue, (newValue) => {
25
+ dialogVisible.value = newValue
26
+ })
27
+
28
+ watch(() => dialogVisible.value, (newValue) => {
29
+ emit('update:modelValue', newValue)
30
+ })
31
+ </script>
32
+
33
+ <template>
34
+ <v-dialog
35
+ v-model="dialogVisible"
36
+ persistent
37
+ max-width="320"
38
+ class="rounded-lg"
39
+ >
40
+ <v-card :color="props.color || 'surface'" class="pa-3 rounded-lg d-flex flex-column align-center">
41
+ <v-icon size="36" color="primary" class="mb-2">mdi mdi-printer</v-icon>
42
+ <div class="text-center text-body-2">
43
+ <slot>Preparing to print...</slot>
44
+ </div>
45
+ </v-card>
46
+ </v-dialog>
35
47
  </template>