@ramathibodi/nuxt-commons 0.1.74 → 0.1.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +115 -115
- package/dist/module.json +1 -1
- package/dist/runtime/components/Alert.vue +58 -58
- package/dist/runtime/components/BarcodeReader.vue +130 -130
- package/dist/runtime/components/ExportCSV.vue +110 -110
- package/dist/runtime/components/FileBtn.vue +79 -79
- package/dist/runtime/components/ImportCSV.vue +151 -151
- package/dist/runtime/components/MrzReader.vue +168 -168
- package/dist/runtime/components/SplitterPanel.vue +67 -67
- package/dist/runtime/components/TabsGroup.vue +39 -39
- package/dist/runtime/components/TextBarcode.vue +66 -66
- package/dist/runtime/components/device/IdCardButton.vue +95 -95
- package/dist/runtime/components/device/IdCardWebSocket.vue +207 -207
- package/dist/runtime/components/device/Scanner.vue +350 -350
- package/dist/runtime/components/dialog/Confirm.vue +112 -112
- package/dist/runtime/components/dialog/Host.vue +88 -88
- package/dist/runtime/components/dialog/Index.vue +84 -84
- package/dist/runtime/components/dialog/Loading.vue +51 -51
- package/dist/runtime/components/dialog/default/Confirm.vue +112 -112
- package/dist/runtime/components/dialog/default/Loading.vue +60 -60
- package/dist/runtime/components/dialog/default/Notify.vue +82 -82
- package/dist/runtime/components/dialog/default/Printing.vue +46 -46
- package/dist/runtime/components/dialog/default/VerifyUser.vue +144 -144
- package/dist/runtime/components/document/Form.vue +50 -50
- package/dist/runtime/components/document/TemplateBuilder.vue +536 -536
- package/dist/runtime/components/form/ActionPad.vue +156 -156
- package/dist/runtime/components/form/Birthdate.vue +116 -116
- package/dist/runtime/components/form/CheckboxGroup.vue +99 -99
- package/dist/runtime/components/form/CodeEditor.vue +45 -45
- package/dist/runtime/components/form/Date.vue +270 -270
- package/dist/runtime/components/form/DateTime.vue +220 -220
- package/dist/runtime/components/form/Dialog.vue +178 -178
- package/dist/runtime/components/form/EditPad.vue +157 -157
- package/dist/runtime/components/form/File.vue +295 -295
- package/dist/runtime/components/form/Hidden.vue +44 -44
- package/dist/runtime/components/form/Iterator.vue +538 -538
- package/dist/runtime/components/form/Login.vue +143 -143
- package/dist/runtime/components/form/Pad.vue +399 -399
- package/dist/runtime/components/form/SignPad.vue +226 -226
- package/dist/runtime/components/form/System.vue +34 -34
- package/dist/runtime/components/form/Table.vue +391 -391
- package/dist/runtime/components/form/TableData.vue +236 -236
- package/dist/runtime/components/form/Time.vue +177 -177
- package/dist/runtime/components/form/images/Capture.vue +245 -245
- package/dist/runtime/components/form/images/Edit.vue +133 -133
- package/dist/runtime/components/form/images/Field.vue +331 -331
- package/dist/runtime/components/form/images/Pad.vue +54 -54
- package/dist/runtime/components/label/Date.vue +37 -37
- package/dist/runtime/components/label/DateAgo.vue +102 -102
- package/dist/runtime/components/label/DateCount.vue +152 -152
- package/dist/runtime/components/label/Field.vue +111 -111
- package/dist/runtime/components/label/FormatMoney.vue +37 -37
- package/dist/runtime/components/label/Mask.vue +46 -46
- package/dist/runtime/components/label/Object.vue +21 -21
- package/dist/runtime/components/master/Autocomplete.vue +89 -89
- package/dist/runtime/components/master/Combobox.vue +88 -88
- package/dist/runtime/components/master/RadioGroup.vue +90 -90
- package/dist/runtime/components/master/Select.vue +70 -70
- package/dist/runtime/components/master/label.vue +55 -55
- package/dist/runtime/components/model/Autocomplete.vue +91 -91
- package/dist/runtime/components/model/Combobox.vue +90 -90
- package/dist/runtime/components/model/Pad.vue +114 -114
- package/dist/runtime/components/model/Select.vue +78 -84
- package/dist/runtime/components/model/Table.vue +370 -370
- package/dist/runtime/components/model/iterator.vue +497 -497
- package/dist/runtime/components/model/label.vue +58 -58
- package/dist/runtime/components/pdf/Print.vue +75 -75
- package/dist/runtime/components/pdf/View.vue +146 -146
- package/dist/runtime/composables/dialog.d.ts +1 -1
- package/dist/runtime/composables/graphql.d.ts +1 -1
- package/dist/runtime/composables/graphqlModel.d.ts +9 -9
- package/dist/runtime/composables/graphqlModelItem.d.ts +7 -7
- package/dist/runtime/composables/graphqlModelOperation.d.ts +6 -6
- package/dist/runtime/composables/userPermission.d.ts +1 -1
- package/dist/runtime/labs/Calendar.vue +99 -99
- package/dist/runtime/labs/form/EditMobile.vue +152 -152
- package/dist/runtime/labs/form/TextFieldMask.vue +43 -43
- package/dist/runtime/plugins/clientConfig.d.ts +1 -1
- package/dist/runtime/plugins/default.d.ts +1 -1
- package/dist/runtime/plugins/dialogManager.d.ts +1 -1
- package/dist/runtime/plugins/permission.d.ts +1 -1
- package/dist/runtime/types/alert.d.ts +11 -11
- package/dist/runtime/types/clientConfig.d.ts +13 -13
- package/dist/runtime/types/dialogManager.d.ts +35 -35
- package/dist/runtime/types/formDialog.d.ts +5 -5
- package/dist/runtime/types/graphqlOperation.d.ts +23 -23
- package/dist/runtime/types/menu.d.ts +31 -31
- package/dist/runtime/types/modules.d.ts +7 -7
- package/dist/runtime/types/permission.d.ts +13 -13
- package/package.json +131 -131
- package/scripts/enrich-vue-docs-from-ai.mjs +197 -197
- package/scripts/generate-ai-summary.mjs +321 -321
- package/scripts/generate-composables-md.mjs +129 -129
- package/scripts/postInstall.cjs +70 -70
- package/templates/.codegen/codegen.ts +32 -32
- package/templates/.codegen/plugin-schema-object.js +161 -161
|
@@ -1,136 +1,136 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
/**
|
|
3
|
-
* FormImagesEdit handles image capture, editing, preview, and value synchronization for schema-driven form image fields.
|
|
4
|
-
* This doc block is consumed by vue-docgen for generated API documentation.
|
|
5
|
-
*/
|
|
6
|
-
import {computed, ref} from 'vue'
|
|
7
|
-
import Cropper from 'cropperjs'
|
|
8
|
-
import 'cropperjs/dist/cropper.css'
|
|
9
|
-
import type {ImageFormat} from "exif-rotate-js"
|
|
10
|
-
|
|
11
|
-
interface Props {
|
|
12
|
-
imageFormat?: ImageFormat // Output image MIME/encoding format for capture or editing.
|
|
13
|
-
maxHeight?: string | number // Maximum height constraint for previews, dialogs, or editors.
|
|
14
|
-
maxWidth?: string | number // Maximum width constraint for previews, dialogs, or editors.
|
|
15
|
-
aspectRatio?: number // Target aspect ratio used while cropping or capturing images.
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Public props accepted by FormImagesEdit.
|
|
20
|
-
* Document each prop field with intent, defaults, and side effects for clear generated docs.
|
|
21
|
-
*/
|
|
22
|
-
const props = withDefaults(defineProps<Props>(), {
|
|
23
|
-
imageFormat: "image/jpeg",
|
|
24
|
-
maxWidth: 1024
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
const imageData = defineModel<string>()
|
|
28
|
-
/**
|
|
29
|
-
* Custom events emitted by FormImagesEdit.
|
|
30
|
-
* Parents can listen to these events to react to user actions and internal state changes.
|
|
31
|
-
*/
|
|
32
|
-
const emit = defineEmits(['close'])
|
|
33
|
-
|
|
34
|
-
const cropper = ref<Cropper>()
|
|
35
|
-
const imageRef = ref<HTMLImageElement>()
|
|
36
|
-
const dragMode = ref<string>("none")
|
|
37
|
-
|
|
38
|
-
function loadCropper() {
|
|
39
|
-
if (cropper.value) cropper.value?.destroy()
|
|
40
|
-
if (imageRef.value) {
|
|
41
|
-
cropper.value = new Cropper(<HTMLImageElement>imageRef.value,{
|
|
42
|
-
aspectRatio: props.aspectRatio,
|
|
43
|
-
autoCrop:false,
|
|
44
|
-
autoCropArea:1,
|
|
45
|
-
})
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const setDragMode = (mode: "none"|"crop"|"move") => {
|
|
50
|
-
cropper.value?.setDragMode(mode)
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const rotateLeft90 = () => cropper.value?.rotate(-90)
|
|
54
|
-
const rotateLeft = () => cropper.value?.rotate(-5)
|
|
55
|
-
const rotateRight = () => cropper.value?.rotate(5)
|
|
56
|
-
const rotateRight90 = () => cropper.value?.rotate(90)
|
|
57
|
-
const flipHorizontal = () => cropper.value?.scaleX(cropper.value.getData().scaleX * -1)
|
|
58
|
-
const flipVertical = () => cropper.value?.scaleY(cropper.value.getData().scaleY * -1)
|
|
59
|
-
const zoomIn = () => cropper.value?.zoom(0.1)
|
|
60
|
-
const zoomOut = () => cropper.value?.zoom(-0.1)
|
|
61
|
-
const moveUp = () => cropper.value?.move(0, -10)
|
|
62
|
-
const moveDown = () => cropper.value?.move(0, 10)
|
|
63
|
-
const moveLeft = () => cropper.value?.move(-10, 0)
|
|
64
|
-
const moveRight = () => cropper.value?.move(10, 0)
|
|
65
|
-
const accept = () => {
|
|
66
|
-
const croppedCanvas = cropper.value?.getCroppedCanvas()
|
|
67
|
-
imageData.value = croppedCanvas?.toDataURL(props.imageFormat,1)
|
|
68
|
-
}
|
|
69
|
-
const close = () => {
|
|
70
|
-
emit('close');
|
|
71
|
-
}
|
|
72
|
-
const reset = () => {
|
|
73
|
-
cropper.value?.reset()
|
|
74
|
-
cropper.value?.clear()
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
const computedMaxWidth = computed(() => {
|
|
78
|
-
if (typeof props.maxWidth === 'number') {
|
|
79
|
-
return `${props.maxWidth}px`
|
|
80
|
-
} else if (!isNaN(Number(props.maxWidth))) {
|
|
81
|
-
return `${props.maxWidth}px`
|
|
82
|
-
}
|
|
83
|
-
return props.maxWidth
|
|
84
|
-
})
|
|
85
|
-
|
|
86
|
-
const computedMaxHeight = computed(() => {
|
|
87
|
-
if (typeof props.maxHeight === 'number') {
|
|
88
|
-
return `${props.maxHeight}px`
|
|
89
|
-
} else if (!isNaN(Number(props.maxHeight))) {
|
|
90
|
-
return `${props.maxHeight}px`
|
|
91
|
-
}
|
|
92
|
-
return props.maxHeight
|
|
93
|
-
})
|
|
94
|
-
</script>
|
|
95
|
-
<template>
|
|
96
|
-
<div :style="{maxWidth:computedMaxWidth,maxHeight:computedMaxHeight}">
|
|
97
|
-
<v-card>
|
|
98
|
-
<v-toolbar color="primary" dark>
|
|
99
|
-
<v-btn-toggle v-model="dragMode" class="ml-1">
|
|
100
|
-
<v-btn value="move" icon="mdi mdi-cursor-move" @click="setDragMode('move')"></v-btn>
|
|
101
|
-
<v-btn value="crop" icon="mdi mdi-crop" @click="setDragMode('crop')"></v-btn>
|
|
102
|
-
</v-btn-toggle>
|
|
103
|
-
<v-btn-group class="ml-1">
|
|
104
|
-
<v-btn value="rotateLeft" icon="mdi mdi-rotate-left-variant" @click="rotateLeft90"></v-btn>
|
|
105
|
-
<v-btn value="rotateRight" icon="mdi mdi-rotate-left" @click="rotateLeft"></v-btn>
|
|
106
|
-
<v-btn value="rotateRight" icon="mdi mdi-rotate-right" @click="rotateRight"></v-btn>
|
|
107
|
-
<v-btn value="rotateRight" icon="mdi mdi-rotate-right-variant" @click="rotateRight90"></v-btn>
|
|
108
|
-
</v-btn-group>
|
|
109
|
-
<v-btn-group class="ml-1">
|
|
110
|
-
<v-btn value="flipHorizontal" icon="mdi mdi-flip-horizontal" @click="flipHorizontal"></v-btn>
|
|
111
|
-
<v-btn value="flipVertical" icon="mdi mdi-flip-vertical" @click="flipVertical"></v-btn>
|
|
112
|
-
</v-btn-group>
|
|
113
|
-
<v-btn-group class="ml-1">
|
|
114
|
-
<v-btn value="flipHorizontal" icon="mdi mdi-magnify-plus-outline" @click="zoomIn"></v-btn>
|
|
115
|
-
<v-btn value="flipVertical" icon="mdi mdi-magnify-minus-outline" @click="zoomOut"></v-btn>
|
|
116
|
-
</v-btn-group>
|
|
117
|
-
<v-btn-group class="ml-1">
|
|
118
|
-
<v-btn value="moveUp" icon="mdi mdi-arrow-up" @click="moveUp"></v-btn>
|
|
119
|
-
<v-btn value="moveDown" icon="mdi mdi-arrow-down" @click="moveDown"></v-btn>
|
|
120
|
-
<v-btn value="moveLeft" icon="mdi mdi-arrow-left" @click="moveLeft"></v-btn>
|
|
121
|
-
<v-btn value="moveRight" icon="mdi mdi-arrow-right" @click="moveRight"></v-btn>
|
|
122
|
-
</v-btn-group>
|
|
123
|
-
<v-spacer></v-spacer>
|
|
124
|
-
<v-btn icon="mdi mdi-refresh" @click="reset"></v-btn>
|
|
125
|
-
<v-btn icon="mdi mdi-check" @click="accept"></v-btn>
|
|
126
|
-
<v-btn icon="mdi mdi-close" @click="close"></v-btn>
|
|
127
|
-
</v-toolbar>
|
|
128
|
-
<v-card-text class="ma-0 pa-0">
|
|
129
|
-
<img ref="imageRef" :src="imageData" alt="" @load="loadCropper" style="display: block; max-width: 100%">
|
|
130
|
-
</v-card-text>
|
|
131
|
-
</v-card>
|
|
132
|
-
</div>
|
|
133
|
-
</template>
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
/**
|
|
3
|
+
* FormImagesEdit handles image capture, editing, preview, and value synchronization for schema-driven form image fields.
|
|
4
|
+
* This doc block is consumed by vue-docgen for generated API documentation.
|
|
5
|
+
*/
|
|
6
|
+
import {computed, ref} from 'vue'
|
|
7
|
+
import Cropper from 'cropperjs'
|
|
8
|
+
import 'cropperjs/dist/cropper.css'
|
|
9
|
+
import type {ImageFormat} from "exif-rotate-js"
|
|
10
|
+
|
|
11
|
+
interface Props {
|
|
12
|
+
imageFormat?: ImageFormat // Output image MIME/encoding format for capture or editing.
|
|
13
|
+
maxHeight?: string | number // Maximum height constraint for previews, dialogs, or editors.
|
|
14
|
+
maxWidth?: string | number // Maximum width constraint for previews, dialogs, or editors.
|
|
15
|
+
aspectRatio?: number // Target aspect ratio used while cropping or capturing images.
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Public props accepted by FormImagesEdit.
|
|
20
|
+
* Document each prop field with intent, defaults, and side effects for clear generated docs.
|
|
21
|
+
*/
|
|
22
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
23
|
+
imageFormat: "image/jpeg",
|
|
24
|
+
maxWidth: 1024
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
const imageData = defineModel<string>()
|
|
28
|
+
/**
|
|
29
|
+
* Custom events emitted by FormImagesEdit.
|
|
30
|
+
* Parents can listen to these events to react to user actions and internal state changes.
|
|
31
|
+
*/
|
|
32
|
+
const emit = defineEmits(['close'])
|
|
33
|
+
|
|
34
|
+
const cropper = ref<Cropper>()
|
|
35
|
+
const imageRef = ref<HTMLImageElement>()
|
|
36
|
+
const dragMode = ref<string>("none")
|
|
37
|
+
|
|
38
|
+
function loadCropper() {
|
|
39
|
+
if (cropper.value) cropper.value?.destroy()
|
|
40
|
+
if (imageRef.value) {
|
|
41
|
+
cropper.value = new Cropper(<HTMLImageElement>imageRef.value,{
|
|
42
|
+
aspectRatio: props.aspectRatio,
|
|
43
|
+
autoCrop:false,
|
|
44
|
+
autoCropArea:1,
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const setDragMode = (mode: "none"|"crop"|"move") => {
|
|
50
|
+
cropper.value?.setDragMode(mode)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const rotateLeft90 = () => cropper.value?.rotate(-90)
|
|
54
|
+
const rotateLeft = () => cropper.value?.rotate(-5)
|
|
55
|
+
const rotateRight = () => cropper.value?.rotate(5)
|
|
56
|
+
const rotateRight90 = () => cropper.value?.rotate(90)
|
|
57
|
+
const flipHorizontal = () => cropper.value?.scaleX(cropper.value.getData().scaleX * -1)
|
|
58
|
+
const flipVertical = () => cropper.value?.scaleY(cropper.value.getData().scaleY * -1)
|
|
59
|
+
const zoomIn = () => cropper.value?.zoom(0.1)
|
|
60
|
+
const zoomOut = () => cropper.value?.zoom(-0.1)
|
|
61
|
+
const moveUp = () => cropper.value?.move(0, -10)
|
|
62
|
+
const moveDown = () => cropper.value?.move(0, 10)
|
|
63
|
+
const moveLeft = () => cropper.value?.move(-10, 0)
|
|
64
|
+
const moveRight = () => cropper.value?.move(10, 0)
|
|
65
|
+
const accept = () => {
|
|
66
|
+
const croppedCanvas = cropper.value?.getCroppedCanvas()
|
|
67
|
+
imageData.value = croppedCanvas?.toDataURL(props.imageFormat,1)
|
|
68
|
+
}
|
|
69
|
+
const close = () => {
|
|
70
|
+
emit('close');
|
|
71
|
+
}
|
|
72
|
+
const reset = () => {
|
|
73
|
+
cropper.value?.reset()
|
|
74
|
+
cropper.value?.clear()
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const computedMaxWidth = computed(() => {
|
|
78
|
+
if (typeof props.maxWidth === 'number') {
|
|
79
|
+
return `${props.maxWidth}px`
|
|
80
|
+
} else if (!isNaN(Number(props.maxWidth))) {
|
|
81
|
+
return `${props.maxWidth}px`
|
|
82
|
+
}
|
|
83
|
+
return props.maxWidth
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
const computedMaxHeight = computed(() => {
|
|
87
|
+
if (typeof props.maxHeight === 'number') {
|
|
88
|
+
return `${props.maxHeight}px`
|
|
89
|
+
} else if (!isNaN(Number(props.maxHeight))) {
|
|
90
|
+
return `${props.maxHeight}px`
|
|
91
|
+
}
|
|
92
|
+
return props.maxHeight
|
|
93
|
+
})
|
|
94
|
+
</script>
|
|
95
|
+
<template>
|
|
96
|
+
<div :style="{maxWidth:computedMaxWidth,maxHeight:computedMaxHeight}">
|
|
97
|
+
<v-card>
|
|
98
|
+
<v-toolbar color="primary" dark>
|
|
99
|
+
<v-btn-toggle v-model="dragMode" class="ml-1">
|
|
100
|
+
<v-btn value="move" icon="mdi mdi-cursor-move" @click="setDragMode('move')"></v-btn>
|
|
101
|
+
<v-btn value="crop" icon="mdi mdi-crop" @click="setDragMode('crop')"></v-btn>
|
|
102
|
+
</v-btn-toggle>
|
|
103
|
+
<v-btn-group class="ml-1">
|
|
104
|
+
<v-btn value="rotateLeft" icon="mdi mdi-rotate-left-variant" @click="rotateLeft90"></v-btn>
|
|
105
|
+
<v-btn value="rotateRight" icon="mdi mdi-rotate-left" @click="rotateLeft"></v-btn>
|
|
106
|
+
<v-btn value="rotateRight" icon="mdi mdi-rotate-right" @click="rotateRight"></v-btn>
|
|
107
|
+
<v-btn value="rotateRight" icon="mdi mdi-rotate-right-variant" @click="rotateRight90"></v-btn>
|
|
108
|
+
</v-btn-group>
|
|
109
|
+
<v-btn-group class="ml-1">
|
|
110
|
+
<v-btn value="flipHorizontal" icon="mdi mdi-flip-horizontal" @click="flipHorizontal"></v-btn>
|
|
111
|
+
<v-btn value="flipVertical" icon="mdi mdi-flip-vertical" @click="flipVertical"></v-btn>
|
|
112
|
+
</v-btn-group>
|
|
113
|
+
<v-btn-group class="ml-1">
|
|
114
|
+
<v-btn value="flipHorizontal" icon="mdi mdi-magnify-plus-outline" @click="zoomIn"></v-btn>
|
|
115
|
+
<v-btn value="flipVertical" icon="mdi mdi-magnify-minus-outline" @click="zoomOut"></v-btn>
|
|
116
|
+
</v-btn-group>
|
|
117
|
+
<v-btn-group class="ml-1">
|
|
118
|
+
<v-btn value="moveUp" icon="mdi mdi-arrow-up" @click="moveUp"></v-btn>
|
|
119
|
+
<v-btn value="moveDown" icon="mdi mdi-arrow-down" @click="moveDown"></v-btn>
|
|
120
|
+
<v-btn value="moveLeft" icon="mdi mdi-arrow-left" @click="moveLeft"></v-btn>
|
|
121
|
+
<v-btn value="moveRight" icon="mdi mdi-arrow-right" @click="moveRight"></v-btn>
|
|
122
|
+
</v-btn-group>
|
|
123
|
+
<v-spacer></v-spacer>
|
|
124
|
+
<v-btn icon="mdi mdi-refresh" @click="reset"></v-btn>
|
|
125
|
+
<v-btn icon="mdi mdi-check" @click="accept"></v-btn>
|
|
126
|
+
<v-btn icon="mdi mdi-close" @click="close"></v-btn>
|
|
127
|
+
</v-toolbar>
|
|
128
|
+
<v-card-text class="ma-0 pa-0">
|
|
129
|
+
<img ref="imageRef" :src="imageData" alt="" @load="loadCropper" style="display: block; max-width: 100%">
|
|
130
|
+
</v-card-text>
|
|
131
|
+
</v-card>
|
|
132
|
+
</div>
|
|
133
|
+
</template>
|
|
134
134
|
<style>
|
|
135
135
|
.cropper-bg{background-repeat:repeat!important}
|
|
136
136
|
</style>
|