sd-render 1.2.4 → 1.2.6
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/field-docs.html +573 -10
- package/package.json +1 -1
- package/{sd-lib-Cczl-l04.js → sd-lib-BG0UjdFl.js} +6451 -5011
- package/{sd-render-DETM6GzA.js → sd-render-DwCKOhLI.js} +1646 -1353
- package/sd-render.es.js +61 -58
- package/sd-render.style.css +1 -1
- package/types/src/components/form-render/SdFormRender.vue.d.ts +3 -0
- package/types/src/components/form-render/form-container/affix-render.vue.d.ts +7 -1
- package/types/src/components/form-render/form-field/alert-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/apexchart-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/autonumber-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/avatar-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/btn-editor-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/button-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/carousel-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/cascader-form-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/chart-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/checkbox-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/code-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/color-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/crop-upload-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/datagrid-form-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/datagrid-sql-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/date-input.vue.d.ts +556 -0
- package/types/src/components/form-render/form-field/date-range-input.vue.d.ts +556 -0
- package/types/src/components/form-render/form-field/divider-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/dropdown-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/dynamic-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/file-upload-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/group-list-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/html-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/html-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/icon-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/image-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/json-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/link-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/list-ui.vue.d.ts +3 -0
- package/types/src/components/form-render/form-field/masked-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/multiple-date.vue.d.ts +556 -0
- package/types/src/components/form-render/form-field/number-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/objectid-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/picture-upload-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/progress-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/qrcode-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/radio-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/radio-text-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/rate-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/record-ui.vue.d.ts +3 -0
- package/types/src/components/form-render/form-field/report-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/scan-code-ui.vue.d.ts +624 -0
- package/types/src/components/form-render/form-field/segmented-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/select-data-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/select-form-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/select-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/select-path-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/select-sql-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/side-menu-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/slider-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/statistic-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/step-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/svg-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/svg-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/switch-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/tags-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/text-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/text-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/textarea-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/time-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/time-range-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/time-select-input.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/tour-ui.vue.d.ts +1 -0
- package/types/src/components/form-render/form-field/vue-ui.vue.d.ts +454 -0
- package/types/src/components/form-render/mixins/CoreFieldMixin.d.ts +1 -0
- package/types/src/components/input3/SdCropImageInput.vue.d.ts +1 -1
- package/types/src/components/input3/SdHtmlEditor.vue.d.ts +5 -5
- package/types/src/components/input3/SdMaskedInput.vue.d.ts +2 -2
- package/types/src/components/input3/eltiptap/hooks/useCodeView.d.ts +7 -1
- package/types/src/components/input3/eltiptap/widget/ElementTiptap.vue.d.ts +5 -5
- package/types/src/components/input3/eltiptap/widget/MenuCommands/CommandButton.vue.d.ts +1 -1
- package/types/src/components/sdlib.d.ts +4 -1
- package/types/src/components/sdwidget/SDCustomContent.vue.d.ts +96 -0
- package/types/src/components/sdwidget/SDImportAndModified.vue.d.ts +1 -1
- package/types/src/components/sdwidget/SDImportData.vue.d.ts +1 -1
- package/types/src/components/sdwidget/SDImportMapData.vue.d.ts +1 -1
- package/types/src/components/sdwidget/SdCascaderForm.vue.d.ts +1 -1
- package/types/src/components/sdwidget/SdChart.vue.d.ts +282 -0
- package/types/src/components/sdwidget/SdCodeMirror.vue.d.ts +232 -0
- package/types/src/components/sdwidget/SdCrudForm.vue.d.ts +5 -1
- package/types/src/components/sdwidget/SdCrudGrid.vue.d.ts +2 -1
- package/types/src/components/sdwidget/SdCrudPopupForm.vue.d.ts +2 -2
- package/types/src/components/sdwidget/SdCrudPopupGrid.vue.d.ts +2 -2
- package/types/src/components/sdwidget/SdCrudSelect.vue.d.ts +2 -2
- package/types/src/components/sdwidget/SdCrudSelectSubForm.vue.d.ts +3 -2
- package/types/src/components/sdwidget/SdDataDicPopup.vue.d.ts +1 -1
- package/types/src/components/sdwidget/SdDatePickerBE.vue.d.ts +987 -0
- package/types/src/components/sdwidget/SdDynamicInput.vue.d.ts +4 -4
- package/types/src/components/sdwidget/SdExportData.vue.d.ts +1 -1
- package/types/src/components/sdwidget/SdFormErd.vue.d.ts +2 -2
- package/types/src/components/sdwidget/SdGrid.vue.d.ts +1 -1
- package/types/src/components/sdwidget/SdIcon.vue.d.ts +2 -2
- package/types/src/components/sdwidget/SdOptionsItems.vue.d.ts +1 -1
- package/types/src/components/sdwidget/SdScan.vue.d.ts +369 -0
- package/types/src/components/sdwidget/SdSelectPathData.vue.d.ts +2 -2
- package/types/src/components/sdwidget/SdSelectRemoteList.vue.d.ts +2 -2
- package/types/src/components/sdwidget/SdUiListView.vue.d.ts +15 -0
- package/types/src/components/sdwidget/SdUiMenu.vue.d.ts +2 -2
- package/types/src/components/sdwidget/SdUiRecordView.vue.d.ts +159 -1
- package/types/src/env.d.ts +3 -0
- package/types/src/types/SdForm.d.ts +1 -0
- package/types/src/components/input3/SdAceEditor.vue.d.ts +0 -233
|
@@ -8,14 +8,14 @@ type __VLS_Props = {
|
|
|
8
8
|
userState: any;
|
|
9
9
|
};
|
|
10
10
|
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
11
|
+
"update:modelValue": (...args: any[]) => void;
|
|
12
|
+
change: (...args: any[]) => void;
|
|
11
13
|
focus: (...args: any[]) => void;
|
|
12
14
|
blur: (...args: any[]) => void;
|
|
13
|
-
change: (...args: any[]) => void;
|
|
14
|
-
"update:modelValue": (...args: any[]) => void;
|
|
15
15
|
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
16
|
+
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
17
|
+
onChange?: ((...args: any[]) => any) | undefined;
|
|
16
18
|
onFocus?: ((...args: any[]) => any) | undefined;
|
|
17
19
|
onBlur?: ((...args: any[]) => any) | undefined;
|
|
18
|
-
onChange?: ((...args: any[]) => any) | undefined;
|
|
19
|
-
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
20
20
|
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
21
21
|
export default _default;
|
|
@@ -51,7 +51,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
51
51
|
handleOpen(): void;
|
|
52
52
|
handleCancel(): void;
|
|
53
53
|
handleClose(): Promise<void>;
|
|
54
|
-
}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("
|
|
54
|
+
}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("update:modelValue" | "change")[], "update:modelValue" | "change", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
55
55
|
modelValue: any;
|
|
56
56
|
dataProvider: {
|
|
57
57
|
type: PropType<SdProvider>;
|
|
@@ -26,8 +26,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
26
26
|
required: true;
|
|
27
27
|
};
|
|
28
28
|
}>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
29
|
-
change: (...args: any[]) => void;
|
|
30
29
|
"update:modelValue": (...args: any[]) => void;
|
|
30
|
+
change: (...args: any[]) => void;
|
|
31
31
|
}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
32
32
|
modelValue: any;
|
|
33
33
|
formId: {
|
|
@@ -54,8 +54,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
54
54
|
required: true;
|
|
55
55
|
};
|
|
56
56
|
}>> & Readonly<{
|
|
57
|
-
onChange?: ((...args: any[]) => any) | undefined;
|
|
58
57
|
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
58
|
+
onChange?: ((...args: any[]) => any) | undefined;
|
|
59
59
|
}>, {
|
|
60
60
|
modelValue: any;
|
|
61
61
|
fixApiUrl: string;
|
|
@@ -258,9 +258,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
258
258
|
};
|
|
259
259
|
}>> & Readonly<{}>, {
|
|
260
260
|
iconName: string;
|
|
261
|
-
readonly: boolean;
|
|
262
261
|
height: string | number;
|
|
263
262
|
popupWidth: string;
|
|
263
|
+
readonly: boolean;
|
|
264
264
|
maxHeight: string | number;
|
|
265
265
|
resizable: boolean;
|
|
266
266
|
addBtnEnable: boolean;
|
|
@@ -36,7 +36,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
36
36
|
}, {
|
|
37
37
|
handleChange(value: any): void;
|
|
38
38
|
remoteMethod(queryString: string): void;
|
|
39
|
-
}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("
|
|
39
|
+
}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("update:modelValue" | "change")[], "update:modelValue" | "change", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
40
40
|
modelValue: any;
|
|
41
41
|
elIcons: {
|
|
42
42
|
type: BooleanConstructor;
|
|
@@ -62,9 +62,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
62
62
|
onChange?: ((...args: any[]) => any) | undefined;
|
|
63
63
|
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
64
64
|
}>, {
|
|
65
|
-
placeholder: string;
|
|
66
65
|
disabled: boolean;
|
|
67
66
|
modelValue: any;
|
|
67
|
+
placeholder: string;
|
|
68
68
|
multiple: boolean;
|
|
69
69
|
allowCreate: boolean;
|
|
70
70
|
elIcons: boolean;
|
|
@@ -57,7 +57,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
57
57
|
};
|
|
58
58
|
readonly: BooleanConstructor;
|
|
59
59
|
}>> & Readonly<{}>, {
|
|
60
|
-
readonly: boolean;
|
|
61
60
|
modelValue: OptionType[];
|
|
61
|
+
readonly: boolean;
|
|
62
62
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
63
63
|
export default _default;
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import { PropType } from 'vue';
|
|
2
|
+
declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
3
|
+
/** โค้ดล่าสุดที่สแกนได้ (v-model) — optional convenience, ไม่จำเป็นต้องผูก */
|
|
4
|
+
modelValue: {
|
|
5
|
+
type: StringConstructor;
|
|
6
|
+
default: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* โปรไฟล์ hardware สำเร็จรูป — เซ็ตง่ายๆ ตัวเดียวจบ (override props react* ด้านล่าง):
|
|
10
|
+
* - 'keyboard' : scanner USB/Bluetooth ที่จำลองคีย์บอร์ด (ค่าเริ่มต้น)
|
|
11
|
+
* - 'paste' : scanner ในมือถือ/กล้อง ที่ paste ค่าเข้ามา
|
|
12
|
+
* - 'both' : รับทั้ง keyboard + paste
|
|
13
|
+
* - '' : ไม่ใช้ preset, คุมเองผ่าน props react* / options
|
|
14
|
+
*/
|
|
15
|
+
preset: {
|
|
16
|
+
type: PropType<"keyboard" | "paste" | "both" | "">;
|
|
17
|
+
default: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* จุดที่ผูก listener — รับได้ 3 แบบ:
|
|
21
|
+
* - 'document' (default) : ดักทั้งหน้า
|
|
22
|
+
* - CSS selector string : เช่น '#scan-zone' (ผูกที่ element นั้น, element ต้องถูก focus ถึงจะรับ keydown)
|
|
23
|
+
* - HTMLElement / Document object ตรงๆ
|
|
24
|
+
*/
|
|
25
|
+
target: {
|
|
26
|
+
type: PropType<string | HTMLElement | Document>;
|
|
27
|
+
default: string;
|
|
28
|
+
};
|
|
29
|
+
/** ปิดการทำงานชั่วคราว (detach listener) */
|
|
30
|
+
disabled: {
|
|
31
|
+
type: BooleanConstructor;
|
|
32
|
+
default: boolean;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* แสดงสถานะเล็กๆ ที่มุมจอ:
|
|
36
|
+
* - 'none' (default) : ซ่อนทุกอย่าง (headless ล้วน)
|
|
37
|
+
* - 'dot' : จุดเล็กๆ ล้วน บอกสถานะด้วยสี (พร้อม / กำลังสแกน / ปิด) — ย่อสุด
|
|
38
|
+
* - 'status' : จุด + ข้อความสถานะ (ไม่โชว์ value) — แบบย่อ บอกแค่สถานะ
|
|
39
|
+
* - 'badge' : จุด + ข้อความสถานะ + โค้ดล่าสุด — เต็ม
|
|
40
|
+
*/
|
|
41
|
+
indicator: {
|
|
42
|
+
type: PropType<"none" | "dot" | "status" | "badge">;
|
|
43
|
+
default: string;
|
|
44
|
+
};
|
|
45
|
+
/** ตำแหน่ง indicator */
|
|
46
|
+
indicatorPosition: {
|
|
47
|
+
type: PropType<"top-left" | "top-right" | "bottom-left" | "bottom-right">;
|
|
48
|
+
default: string;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* auto-hide indicator (วินาที) — หลังมีสถานะแสดง ถ้าเงียบครบ N วิ จะ fade หายไป
|
|
52
|
+
* แล้วโผล่กลับเมื่อมีสแกนใหม่. 0 = แสดงตลอด (ไม่หาย)
|
|
53
|
+
*/
|
|
54
|
+
indicatorTimeout: {
|
|
55
|
+
type: NumberConstructor;
|
|
56
|
+
default: number;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* แสดง indicator เฉพาะตอนสแกน "สำเร็จ" เท่านั้น
|
|
60
|
+
* - ไม่โผล่/ไม่เปลี่ยนเป็นสถานะ "กำลังสแกน" ระหว่างพิมพ์ (กันกวน)
|
|
61
|
+
* - error ก็ไม่แสดง
|
|
62
|
+
* เหมาะใช้คู่ indicatorTimeout > 0 = pop ป้ายเฉพาะตอนยิงผ่าน
|
|
63
|
+
*/
|
|
64
|
+
indicatorScanOnly: {
|
|
65
|
+
type: BooleanConstructor;
|
|
66
|
+
default: boolean;
|
|
67
|
+
};
|
|
68
|
+
/** ใช้ keyCodeMapper เสริมสำหรับอักขระพิเศษใน QR/URL (ปิดได้ถ้าต้องการ behavior เดิมของ lib) */
|
|
69
|
+
extendedCharset: {
|
|
70
|
+
type: BooleanConstructor;
|
|
71
|
+
default: boolean;
|
|
72
|
+
};
|
|
73
|
+
/** keyCode ที่ถือเป็น "จบการสแกน" (มักเป็น [13]=Enter หรือ [9]=Tab) */
|
|
74
|
+
suffixKeyCodes: {
|
|
75
|
+
type: PropType<number[]>;
|
|
76
|
+
default: () => number[];
|
|
77
|
+
};
|
|
78
|
+
/** keyCode ที่ถือเป็น "เริ่มการสแกน" */
|
|
79
|
+
prefixKeyCodes: {
|
|
80
|
+
type: PropType<number[]>;
|
|
81
|
+
default: () => never[];
|
|
82
|
+
};
|
|
83
|
+
/** ความยาวขั้นต่ำของโค้ด */
|
|
84
|
+
minLength: {
|
|
85
|
+
type: NumberConstructor;
|
|
86
|
+
default: number;
|
|
87
|
+
};
|
|
88
|
+
/** เวลาเฉลี่ยต่ออักขระ (ms) — มากกว่านี้ถือว่าเป็นการพิมพ์มือ ไม่ใช่สแกน */
|
|
89
|
+
avgTimeByChar: {
|
|
90
|
+
type: NumberConstructor;
|
|
91
|
+
default: number;
|
|
92
|
+
};
|
|
93
|
+
/** หน่วงก่อนเช็คว่าสแกนจบ (ms) */
|
|
94
|
+
timeBeforeScanTest: {
|
|
95
|
+
type: NumberConstructor;
|
|
96
|
+
default: number;
|
|
97
|
+
};
|
|
98
|
+
/** keyCode ปุ่มสแกน hardware (ถ้าปุ่มทำตัวเป็นคีย์) — false = ไม่มี */
|
|
99
|
+
scanButtonKeyCode: {
|
|
100
|
+
type: PropType<number | false>;
|
|
101
|
+
default: boolean;
|
|
102
|
+
};
|
|
103
|
+
scanButtonLongPressTime: {
|
|
104
|
+
type: NumberConstructor;
|
|
105
|
+
default: number;
|
|
106
|
+
};
|
|
107
|
+
/** ไม่ประมวลผลสแกนถ้า element ที่ focus อยู่ match selector/element นี้ (เช่น 'input, textarea') */
|
|
108
|
+
ignoreIfFocusOn: {
|
|
109
|
+
type: PropType<boolean | string | object | any[]>;
|
|
110
|
+
default: boolean;
|
|
111
|
+
};
|
|
112
|
+
stopPropagation: {
|
|
113
|
+
type: BooleanConstructor;
|
|
114
|
+
default: boolean;
|
|
115
|
+
};
|
|
116
|
+
preventDefault: {
|
|
117
|
+
type: BooleanConstructor;
|
|
118
|
+
default: boolean;
|
|
119
|
+
};
|
|
120
|
+
/** จับ event ใน capture phase (ก่อน listener ที่ลึกกว่าใน DOM) */
|
|
121
|
+
captureEvents: {
|
|
122
|
+
type: BooleanConstructor;
|
|
123
|
+
default: boolean;
|
|
124
|
+
};
|
|
125
|
+
/** ดักจาก keyboard (scanner USB/BT ที่จำลองคีย์บอร์ด) */
|
|
126
|
+
reactToKeydown: {
|
|
127
|
+
type: BooleanConstructor;
|
|
128
|
+
default: boolean;
|
|
129
|
+
};
|
|
130
|
+
/** ดักจาก paste (scanner ในมือถือ / กล้อง ที่ paste ค่า) */
|
|
131
|
+
reactToPaste: {
|
|
132
|
+
type: BooleanConstructor;
|
|
133
|
+
default: boolean;
|
|
134
|
+
};
|
|
135
|
+
/** จำนวน item ต่อการสแกน 1 ครั้ง */
|
|
136
|
+
singleScanQty: {
|
|
137
|
+
type: NumberConstructor;
|
|
138
|
+
default: number;
|
|
139
|
+
};
|
|
140
|
+
/** override keyCodeMapper เอง (สำคัญกว่า extendedCharset) */
|
|
141
|
+
keyCodeMapper: {
|
|
142
|
+
type: PropType<(e: KeyboardEvent) => string | number | null>;
|
|
143
|
+
default: null;
|
|
144
|
+
};
|
|
145
|
+
/** escape-hatch — option object ดิบของ onScan.js, merge ทับ props ทั้งหมด (priority สูงสุด) */
|
|
146
|
+
options: {
|
|
147
|
+
type: PropType<Record<string, any>>;
|
|
148
|
+
default: () => {};
|
|
149
|
+
};
|
|
150
|
+
}>, {}, {
|
|
151
|
+
attachedEl: HTMLElement | Document | null;
|
|
152
|
+
scanning: boolean;
|
|
153
|
+
lastCode: string;
|
|
154
|
+
flash: boolean;
|
|
155
|
+
indicatorVisible: boolean;
|
|
156
|
+
scanResetTimer: number | undefined;
|
|
157
|
+
flashTimer: number | undefined;
|
|
158
|
+
hideTimer: number | undefined;
|
|
159
|
+
}, {
|
|
160
|
+
statusState(): "ready" | "scanning" | "disabled";
|
|
161
|
+
statusLabel(): string;
|
|
162
|
+
indicatorTitle(): string;
|
|
163
|
+
/** indicator ควรแสดงตอนนี้ไหม — timeout<=0 แสดงตลอด, >0 แสดงเฉพาะตอนมี activity ล่าสุด */
|
|
164
|
+
indicatorShown(): boolean;
|
|
165
|
+
/** signature ของ option ที่ serializable ได้ — เปลี่ยนแล้ว reattach */
|
|
166
|
+
optionsKey(): string;
|
|
167
|
+
}, {
|
|
168
|
+
/** ประกอบ option object ส่งเข้า onScan.js — callback แปลงเป็น $emit */
|
|
169
|
+
buildOptions(): Record<string, any>;
|
|
170
|
+
/** ตั้งสถานะ "กำลังสแกน" + auto-reset ถ้าเงียบไป (สำหรับ indicator) */
|
|
171
|
+
markScanning(): void;
|
|
172
|
+
/** มี activity → แสดง indicator แล้วตั้งเวลา auto-hide (เฉพาะ indicatorTimeout > 0) */
|
|
173
|
+
pokeIndicator(): void;
|
|
174
|
+
handleScan(sCode: string, iQty: number): void;
|
|
175
|
+
/** แปลง target prop → DOM element จริง */
|
|
176
|
+
resolveTargetEl(): HTMLElement | Document | null;
|
|
177
|
+
attach(): void;
|
|
178
|
+
detach(): void;
|
|
179
|
+
reattach(): void;
|
|
180
|
+
/** จำลองการสแกน — string หรือ array ของ keyCode/event object (สำหรับเทส / trigger เอง) */
|
|
181
|
+
simulateScan(mStringOrArray: string | any[]): void;
|
|
182
|
+
/** อัปเดต option ระหว่างทาง (ไม่ reattach) — สำหรับ tune แบบ live */
|
|
183
|
+
applyOptions(opts: Record<string, any>): void;
|
|
184
|
+
getCurrentOptions(): Record<string, any> | null;
|
|
185
|
+
isScanning(): boolean;
|
|
186
|
+
}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("update:modelValue" | "paste" | "scan" | "scan-error" | "key-detect" | "key-process" | "scan-button-long-press")[], "update:modelValue" | "paste" | "scan" | "scan-error" | "key-detect" | "key-process" | "scan-button-long-press", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
187
|
+
/** โค้ดล่าสุดที่สแกนได้ (v-model) — optional convenience, ไม่จำเป็นต้องผูก */
|
|
188
|
+
modelValue: {
|
|
189
|
+
type: StringConstructor;
|
|
190
|
+
default: string;
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* โปรไฟล์ hardware สำเร็จรูป — เซ็ตง่ายๆ ตัวเดียวจบ (override props react* ด้านล่าง):
|
|
194
|
+
* - 'keyboard' : scanner USB/Bluetooth ที่จำลองคีย์บอร์ด (ค่าเริ่มต้น)
|
|
195
|
+
* - 'paste' : scanner ในมือถือ/กล้อง ที่ paste ค่าเข้ามา
|
|
196
|
+
* - 'both' : รับทั้ง keyboard + paste
|
|
197
|
+
* - '' : ไม่ใช้ preset, คุมเองผ่าน props react* / options
|
|
198
|
+
*/
|
|
199
|
+
preset: {
|
|
200
|
+
type: PropType<"keyboard" | "paste" | "both" | "">;
|
|
201
|
+
default: string;
|
|
202
|
+
};
|
|
203
|
+
/**
|
|
204
|
+
* จุดที่ผูก listener — รับได้ 3 แบบ:
|
|
205
|
+
* - 'document' (default) : ดักทั้งหน้า
|
|
206
|
+
* - CSS selector string : เช่น '#scan-zone' (ผูกที่ element นั้น, element ต้องถูก focus ถึงจะรับ keydown)
|
|
207
|
+
* - HTMLElement / Document object ตรงๆ
|
|
208
|
+
*/
|
|
209
|
+
target: {
|
|
210
|
+
type: PropType<string | HTMLElement | Document>;
|
|
211
|
+
default: string;
|
|
212
|
+
};
|
|
213
|
+
/** ปิดการทำงานชั่วคราว (detach listener) */
|
|
214
|
+
disabled: {
|
|
215
|
+
type: BooleanConstructor;
|
|
216
|
+
default: boolean;
|
|
217
|
+
};
|
|
218
|
+
/**
|
|
219
|
+
* แสดงสถานะเล็กๆ ที่มุมจอ:
|
|
220
|
+
* - 'none' (default) : ซ่อนทุกอย่าง (headless ล้วน)
|
|
221
|
+
* - 'dot' : จุดเล็กๆ ล้วน บอกสถานะด้วยสี (พร้อม / กำลังสแกน / ปิด) — ย่อสุด
|
|
222
|
+
* - 'status' : จุด + ข้อความสถานะ (ไม่โชว์ value) — แบบย่อ บอกแค่สถานะ
|
|
223
|
+
* - 'badge' : จุด + ข้อความสถานะ + โค้ดล่าสุด — เต็ม
|
|
224
|
+
*/
|
|
225
|
+
indicator: {
|
|
226
|
+
type: PropType<"none" | "dot" | "status" | "badge">;
|
|
227
|
+
default: string;
|
|
228
|
+
};
|
|
229
|
+
/** ตำแหน่ง indicator */
|
|
230
|
+
indicatorPosition: {
|
|
231
|
+
type: PropType<"top-left" | "top-right" | "bottom-left" | "bottom-right">;
|
|
232
|
+
default: string;
|
|
233
|
+
};
|
|
234
|
+
/**
|
|
235
|
+
* auto-hide indicator (วินาที) — หลังมีสถานะแสดง ถ้าเงียบครบ N วิ จะ fade หายไป
|
|
236
|
+
* แล้วโผล่กลับเมื่อมีสแกนใหม่. 0 = แสดงตลอด (ไม่หาย)
|
|
237
|
+
*/
|
|
238
|
+
indicatorTimeout: {
|
|
239
|
+
type: NumberConstructor;
|
|
240
|
+
default: number;
|
|
241
|
+
};
|
|
242
|
+
/**
|
|
243
|
+
* แสดง indicator เฉพาะตอนสแกน "สำเร็จ" เท่านั้น
|
|
244
|
+
* - ไม่โผล่/ไม่เปลี่ยนเป็นสถานะ "กำลังสแกน" ระหว่างพิมพ์ (กันกวน)
|
|
245
|
+
* - error ก็ไม่แสดง
|
|
246
|
+
* เหมาะใช้คู่ indicatorTimeout > 0 = pop ป้ายเฉพาะตอนยิงผ่าน
|
|
247
|
+
*/
|
|
248
|
+
indicatorScanOnly: {
|
|
249
|
+
type: BooleanConstructor;
|
|
250
|
+
default: boolean;
|
|
251
|
+
};
|
|
252
|
+
/** ใช้ keyCodeMapper เสริมสำหรับอักขระพิเศษใน QR/URL (ปิดได้ถ้าต้องการ behavior เดิมของ lib) */
|
|
253
|
+
extendedCharset: {
|
|
254
|
+
type: BooleanConstructor;
|
|
255
|
+
default: boolean;
|
|
256
|
+
};
|
|
257
|
+
/** keyCode ที่ถือเป็น "จบการสแกน" (มักเป็น [13]=Enter หรือ [9]=Tab) */
|
|
258
|
+
suffixKeyCodes: {
|
|
259
|
+
type: PropType<number[]>;
|
|
260
|
+
default: () => number[];
|
|
261
|
+
};
|
|
262
|
+
/** keyCode ที่ถือเป็น "เริ่มการสแกน" */
|
|
263
|
+
prefixKeyCodes: {
|
|
264
|
+
type: PropType<number[]>;
|
|
265
|
+
default: () => never[];
|
|
266
|
+
};
|
|
267
|
+
/** ความยาวขั้นต่ำของโค้ด */
|
|
268
|
+
minLength: {
|
|
269
|
+
type: NumberConstructor;
|
|
270
|
+
default: number;
|
|
271
|
+
};
|
|
272
|
+
/** เวลาเฉลี่ยต่ออักขระ (ms) — มากกว่านี้ถือว่าเป็นการพิมพ์มือ ไม่ใช่สแกน */
|
|
273
|
+
avgTimeByChar: {
|
|
274
|
+
type: NumberConstructor;
|
|
275
|
+
default: number;
|
|
276
|
+
};
|
|
277
|
+
/** หน่วงก่อนเช็คว่าสแกนจบ (ms) */
|
|
278
|
+
timeBeforeScanTest: {
|
|
279
|
+
type: NumberConstructor;
|
|
280
|
+
default: number;
|
|
281
|
+
};
|
|
282
|
+
/** keyCode ปุ่มสแกน hardware (ถ้าปุ่มทำตัวเป็นคีย์) — false = ไม่มี */
|
|
283
|
+
scanButtonKeyCode: {
|
|
284
|
+
type: PropType<number | false>;
|
|
285
|
+
default: boolean;
|
|
286
|
+
};
|
|
287
|
+
scanButtonLongPressTime: {
|
|
288
|
+
type: NumberConstructor;
|
|
289
|
+
default: number;
|
|
290
|
+
};
|
|
291
|
+
/** ไม่ประมวลผลสแกนถ้า element ที่ focus อยู่ match selector/element นี้ (เช่น 'input, textarea') */
|
|
292
|
+
ignoreIfFocusOn: {
|
|
293
|
+
type: PropType<boolean | string | object | any[]>;
|
|
294
|
+
default: boolean;
|
|
295
|
+
};
|
|
296
|
+
stopPropagation: {
|
|
297
|
+
type: BooleanConstructor;
|
|
298
|
+
default: boolean;
|
|
299
|
+
};
|
|
300
|
+
preventDefault: {
|
|
301
|
+
type: BooleanConstructor;
|
|
302
|
+
default: boolean;
|
|
303
|
+
};
|
|
304
|
+
/** จับ event ใน capture phase (ก่อน listener ที่ลึกกว่าใน DOM) */
|
|
305
|
+
captureEvents: {
|
|
306
|
+
type: BooleanConstructor;
|
|
307
|
+
default: boolean;
|
|
308
|
+
};
|
|
309
|
+
/** ดักจาก keyboard (scanner USB/BT ที่จำลองคีย์บอร์ด) */
|
|
310
|
+
reactToKeydown: {
|
|
311
|
+
type: BooleanConstructor;
|
|
312
|
+
default: boolean;
|
|
313
|
+
};
|
|
314
|
+
/** ดักจาก paste (scanner ในมือถือ / กล้อง ที่ paste ค่า) */
|
|
315
|
+
reactToPaste: {
|
|
316
|
+
type: BooleanConstructor;
|
|
317
|
+
default: boolean;
|
|
318
|
+
};
|
|
319
|
+
/** จำนวน item ต่อการสแกน 1 ครั้ง */
|
|
320
|
+
singleScanQty: {
|
|
321
|
+
type: NumberConstructor;
|
|
322
|
+
default: number;
|
|
323
|
+
};
|
|
324
|
+
/** override keyCodeMapper เอง (สำคัญกว่า extendedCharset) */
|
|
325
|
+
keyCodeMapper: {
|
|
326
|
+
type: PropType<(e: KeyboardEvent) => string | number | null>;
|
|
327
|
+
default: null;
|
|
328
|
+
};
|
|
329
|
+
/** escape-hatch — option object ดิบของ onScan.js, merge ทับ props ทั้งหมด (priority สูงสุด) */
|
|
330
|
+
options: {
|
|
331
|
+
type: PropType<Record<string, any>>;
|
|
332
|
+
default: () => {};
|
|
333
|
+
};
|
|
334
|
+
}>> & Readonly<{
|
|
335
|
+
onPaste?: ((...args: any[]) => any) | undefined;
|
|
336
|
+
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
337
|
+
onScan?: ((...args: any[]) => any) | undefined;
|
|
338
|
+
"onScan-error"?: ((...args: any[]) => any) | undefined;
|
|
339
|
+
"onKey-detect"?: ((...args: any[]) => any) | undefined;
|
|
340
|
+
"onKey-process"?: ((...args: any[]) => any) | undefined;
|
|
341
|
+
"onScan-button-long-press"?: ((...args: any[]) => any) | undefined;
|
|
342
|
+
}>, {
|
|
343
|
+
disabled: boolean;
|
|
344
|
+
modelValue: string;
|
|
345
|
+
target: string | Document | HTMLElement;
|
|
346
|
+
options: Record<string, any>;
|
|
347
|
+
indicatorPosition: "bottom-left" | "bottom-right" | "top-left" | "top-right";
|
|
348
|
+
preset: "" | "paste" | "both" | "keyboard";
|
|
349
|
+
indicator: "none" | "status" | "dot" | "badge";
|
|
350
|
+
indicatorTimeout: number;
|
|
351
|
+
indicatorScanOnly: boolean;
|
|
352
|
+
extendedCharset: boolean;
|
|
353
|
+
suffixKeyCodes: number[];
|
|
354
|
+
prefixKeyCodes: number[];
|
|
355
|
+
minLength: number;
|
|
356
|
+
avgTimeByChar: number;
|
|
357
|
+
timeBeforeScanTest: number;
|
|
358
|
+
scanButtonKeyCode: number | false;
|
|
359
|
+
scanButtonLongPressTime: number;
|
|
360
|
+
ignoreIfFocusOn: string | boolean | object | any[];
|
|
361
|
+
stopPropagation: boolean;
|
|
362
|
+
preventDefault: boolean;
|
|
363
|
+
captureEvents: boolean;
|
|
364
|
+
reactToKeydown: boolean;
|
|
365
|
+
reactToPaste: boolean;
|
|
366
|
+
singleScanQty: number;
|
|
367
|
+
keyCodeMapper: (e: KeyboardEvent) => string | number | null;
|
|
368
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
369
|
+
export default _default;
|
|
@@ -69,8 +69,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
69
69
|
default: boolean;
|
|
70
70
|
};
|
|
71
71
|
}>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
72
|
-
change: (...args: any[]) => void;
|
|
73
72
|
"update:modelValue": (...args: any[]) => void;
|
|
73
|
+
change: (...args: any[]) => void;
|
|
74
74
|
}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
75
75
|
modelValue: any;
|
|
76
76
|
disabled: {
|
|
@@ -142,8 +142,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
142
142
|
default: boolean;
|
|
143
143
|
};
|
|
144
144
|
}>> & Readonly<{
|
|
145
|
-
onChange?: ((...args: any[]) => any) | undefined;
|
|
146
145
|
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
146
|
+
onChange?: ((...args: any[]) => any) | undefined;
|
|
147
147
|
}>, {
|
|
148
148
|
path: string;
|
|
149
149
|
disabled: boolean;
|
|
@@ -155,7 +155,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
155
155
|
getDataAll(sdProvider: SdProvider, callback?: Function): Promise<void>;
|
|
156
156
|
getDataOne(sdProvider: SdProvider, callback?: Function): Promise<void>;
|
|
157
157
|
addRawData(data: any): void;
|
|
158
|
-
}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("
|
|
158
|
+
}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("update:modelValue" | "change" | "visibleChange" | "remoteMethod")[], "update:modelValue" | "change" | "visibleChange" | "remoteMethod", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
159
159
|
modelValue: any;
|
|
160
160
|
dataProvider: {
|
|
161
161
|
type: PropType<SdProvider>;
|
|
@@ -267,8 +267,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
267
267
|
onVisibleChange?: ((...args: any[]) => any) | undefined;
|
|
268
268
|
onRemoteMethod?: ((...args: any[]) => any) | undefined;
|
|
269
269
|
}>, {
|
|
270
|
-
placeholder: string;
|
|
271
270
|
modelValue: any;
|
|
271
|
+
placeholder: string;
|
|
272
272
|
multiple: boolean;
|
|
273
273
|
limit: number;
|
|
274
274
|
buildState: boolean;
|
|
@@ -211,6 +211,12 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
211
211
|
clickEvent: {
|
|
212
212
|
type: PropType<clickEventCallback>;
|
|
213
213
|
};
|
|
214
|
+
selectEvent: {
|
|
215
|
+
type: PropType<clickEventCallback>;
|
|
216
|
+
};
|
|
217
|
+
unselectEvent: {
|
|
218
|
+
type: PropType<clickEventCallback>;
|
|
219
|
+
};
|
|
214
220
|
customValue: {
|
|
215
221
|
type: {
|
|
216
222
|
(arrayLength: number): CustomValue[];
|
|
@@ -252,6 +258,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
252
258
|
optionData: any;
|
|
253
259
|
isInsert: boolean;
|
|
254
260
|
selectIndex: number;
|
|
261
|
+
selectedKey: any;
|
|
255
262
|
afterDeleteForm: any;
|
|
256
263
|
titleNameForm: string;
|
|
257
264
|
iconForm: string;
|
|
@@ -275,6 +282,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
275
282
|
colSpan(): () => number;
|
|
276
283
|
htmlValue(): (value: string, rawData: any) => string;
|
|
277
284
|
getParentFormId(): any;
|
|
285
|
+
backdropForm(): boolean;
|
|
278
286
|
}, {
|
|
279
287
|
changeParentId(parentId: string): void;
|
|
280
288
|
initSQL(): void;
|
|
@@ -296,6 +304,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
296
304
|
handleUpdate(row: any, index: number): void;
|
|
297
305
|
handleView(row: any, index: number): void;
|
|
298
306
|
handleClick(row: any, index: number): void;
|
|
307
|
+
isSelected(row: any): boolean;
|
|
299
308
|
handleDelete(row: any, index: number): void;
|
|
300
309
|
getValue(data: any, fieldName: string): any;
|
|
301
310
|
getSchema(fieldName: string): any;
|
|
@@ -506,6 +515,12 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
506
515
|
clickEvent: {
|
|
507
516
|
type: PropType<clickEventCallback>;
|
|
508
517
|
};
|
|
518
|
+
selectEvent: {
|
|
519
|
+
type: PropType<clickEventCallback>;
|
|
520
|
+
};
|
|
521
|
+
unselectEvent: {
|
|
522
|
+
type: PropType<clickEventCallback>;
|
|
523
|
+
};
|
|
509
524
|
customValue: {
|
|
510
525
|
type: {
|
|
511
526
|
(arrayLength: number): CustomValue[];
|
|
@@ -375,16 +375,16 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
375
375
|
buildState: boolean;
|
|
376
376
|
customValue: CustomValue[];
|
|
377
377
|
borderColor: string;
|
|
378
|
-
bgColor: string;
|
|
379
|
-
marginTop: number;
|
|
380
378
|
labelField: string;
|
|
381
379
|
pathField: string;
|
|
382
380
|
roleField: string;
|
|
383
381
|
subMenuField: string;
|
|
384
382
|
subMenuPrefix: string;
|
|
383
|
+
bgColor: string;
|
|
385
384
|
defaultActive: string;
|
|
386
385
|
menuWidth: number;
|
|
387
386
|
expandHeight: number;
|
|
387
|
+
marginTop: number;
|
|
388
388
|
borderDisable: boolean;
|
|
389
389
|
classInteraction: string;
|
|
390
390
|
uniqueOpened: boolean;
|