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.
Files changed (110) hide show
  1. package/field-docs.html +573 -10
  2. package/package.json +1 -1
  3. package/{sd-lib-Cczl-l04.js → sd-lib-BG0UjdFl.js} +6451 -5011
  4. package/{sd-render-DETM6GzA.js → sd-render-DwCKOhLI.js} +1646 -1353
  5. package/sd-render.es.js +61 -58
  6. package/sd-render.style.css +1 -1
  7. package/types/src/components/form-render/SdFormRender.vue.d.ts +3 -0
  8. package/types/src/components/form-render/form-container/affix-render.vue.d.ts +7 -1
  9. package/types/src/components/form-render/form-field/alert-ui.vue.d.ts +1 -0
  10. package/types/src/components/form-render/form-field/apexchart-ui.vue.d.ts +1 -0
  11. package/types/src/components/form-render/form-field/autonumber-input.vue.d.ts +1 -0
  12. package/types/src/components/form-render/form-field/avatar-ui.vue.d.ts +1 -0
  13. package/types/src/components/form-render/form-field/btn-editor-input.vue.d.ts +1 -0
  14. package/types/src/components/form-render/form-field/button-ui.vue.d.ts +1 -0
  15. package/types/src/components/form-render/form-field/carousel-ui.vue.d.ts +1 -0
  16. package/types/src/components/form-render/form-field/cascader-form-input.vue.d.ts +1 -0
  17. package/types/src/components/form-render/form-field/chart-ui.vue.d.ts +1 -0
  18. package/types/src/components/form-render/form-field/checkbox-input.vue.d.ts +1 -0
  19. package/types/src/components/form-render/form-field/code-input.vue.d.ts +1 -0
  20. package/types/src/components/form-render/form-field/color-input.vue.d.ts +1 -0
  21. package/types/src/components/form-render/form-field/crop-upload-input.vue.d.ts +1 -0
  22. package/types/src/components/form-render/form-field/datagrid-form-ui.vue.d.ts +1 -0
  23. package/types/src/components/form-render/form-field/datagrid-sql-ui.vue.d.ts +1 -0
  24. package/types/src/components/form-render/form-field/date-input.vue.d.ts +556 -0
  25. package/types/src/components/form-render/form-field/date-range-input.vue.d.ts +556 -0
  26. package/types/src/components/form-render/form-field/divider-ui.vue.d.ts +1 -0
  27. package/types/src/components/form-render/form-field/dropdown-ui.vue.d.ts +1 -0
  28. package/types/src/components/form-render/form-field/dynamic-input.vue.d.ts +1 -0
  29. package/types/src/components/form-render/form-field/file-upload-input.vue.d.ts +1 -0
  30. package/types/src/components/form-render/form-field/group-list-input.vue.d.ts +1 -0
  31. package/types/src/components/form-render/form-field/html-input.vue.d.ts +1 -0
  32. package/types/src/components/form-render/form-field/html-ui.vue.d.ts +1 -0
  33. package/types/src/components/form-render/form-field/icon-input.vue.d.ts +1 -0
  34. package/types/src/components/form-render/form-field/image-ui.vue.d.ts +1 -0
  35. package/types/src/components/form-render/form-field/json-input.vue.d.ts +1 -0
  36. package/types/src/components/form-render/form-field/link-ui.vue.d.ts +1 -0
  37. package/types/src/components/form-render/form-field/list-ui.vue.d.ts +3 -0
  38. package/types/src/components/form-render/form-field/masked-input.vue.d.ts +1 -0
  39. package/types/src/components/form-render/form-field/multiple-date.vue.d.ts +556 -0
  40. package/types/src/components/form-render/form-field/number-input.vue.d.ts +1 -0
  41. package/types/src/components/form-render/form-field/objectid-input.vue.d.ts +1 -0
  42. package/types/src/components/form-render/form-field/picture-upload-input.vue.d.ts +1 -0
  43. package/types/src/components/form-render/form-field/progress-ui.vue.d.ts +1 -0
  44. package/types/src/components/form-render/form-field/qrcode-ui.vue.d.ts +1 -0
  45. package/types/src/components/form-render/form-field/radio-input.vue.d.ts +1 -0
  46. package/types/src/components/form-render/form-field/radio-text-input.vue.d.ts +1 -0
  47. package/types/src/components/form-render/form-field/rate-input.vue.d.ts +1 -0
  48. package/types/src/components/form-render/form-field/record-ui.vue.d.ts +3 -0
  49. package/types/src/components/form-render/form-field/report-ui.vue.d.ts +1 -0
  50. package/types/src/components/form-render/form-field/scan-code-ui.vue.d.ts +624 -0
  51. package/types/src/components/form-render/form-field/segmented-ui.vue.d.ts +1 -0
  52. package/types/src/components/form-render/form-field/select-data-input.vue.d.ts +1 -0
  53. package/types/src/components/form-render/form-field/select-form-input.vue.d.ts +1 -0
  54. package/types/src/components/form-render/form-field/select-input.vue.d.ts +1 -0
  55. package/types/src/components/form-render/form-field/select-path-input.vue.d.ts +1 -0
  56. package/types/src/components/form-render/form-field/select-sql-input.vue.d.ts +1 -0
  57. package/types/src/components/form-render/form-field/side-menu-ui.vue.d.ts +1 -0
  58. package/types/src/components/form-render/form-field/slider-input.vue.d.ts +1 -0
  59. package/types/src/components/form-render/form-field/statistic-ui.vue.d.ts +1 -0
  60. package/types/src/components/form-render/form-field/step-ui.vue.d.ts +1 -0
  61. package/types/src/components/form-render/form-field/svg-input.vue.d.ts +1 -0
  62. package/types/src/components/form-render/form-field/svg-ui.vue.d.ts +1 -0
  63. package/types/src/components/form-render/form-field/switch-input.vue.d.ts +1 -0
  64. package/types/src/components/form-render/form-field/tags-input.vue.d.ts +1 -0
  65. package/types/src/components/form-render/form-field/text-input.vue.d.ts +1 -0
  66. package/types/src/components/form-render/form-field/text-ui.vue.d.ts +1 -0
  67. package/types/src/components/form-render/form-field/textarea-input.vue.d.ts +1 -0
  68. package/types/src/components/form-render/form-field/time-input.vue.d.ts +1 -0
  69. package/types/src/components/form-render/form-field/time-range-input.vue.d.ts +1 -0
  70. package/types/src/components/form-render/form-field/time-select-input.vue.d.ts +1 -0
  71. package/types/src/components/form-render/form-field/tour-ui.vue.d.ts +1 -0
  72. package/types/src/components/form-render/form-field/vue-ui.vue.d.ts +454 -0
  73. package/types/src/components/form-render/mixins/CoreFieldMixin.d.ts +1 -0
  74. package/types/src/components/input3/SdCropImageInput.vue.d.ts +1 -1
  75. package/types/src/components/input3/SdHtmlEditor.vue.d.ts +5 -5
  76. package/types/src/components/input3/SdMaskedInput.vue.d.ts +2 -2
  77. package/types/src/components/input3/eltiptap/hooks/useCodeView.d.ts +7 -1
  78. package/types/src/components/input3/eltiptap/widget/ElementTiptap.vue.d.ts +5 -5
  79. package/types/src/components/input3/eltiptap/widget/MenuCommands/CommandButton.vue.d.ts +1 -1
  80. package/types/src/components/sdlib.d.ts +4 -1
  81. package/types/src/components/sdwidget/SDCustomContent.vue.d.ts +96 -0
  82. package/types/src/components/sdwidget/SDImportAndModified.vue.d.ts +1 -1
  83. package/types/src/components/sdwidget/SDImportData.vue.d.ts +1 -1
  84. package/types/src/components/sdwidget/SDImportMapData.vue.d.ts +1 -1
  85. package/types/src/components/sdwidget/SdCascaderForm.vue.d.ts +1 -1
  86. package/types/src/components/sdwidget/SdChart.vue.d.ts +282 -0
  87. package/types/src/components/sdwidget/SdCodeMirror.vue.d.ts +232 -0
  88. package/types/src/components/sdwidget/SdCrudForm.vue.d.ts +5 -1
  89. package/types/src/components/sdwidget/SdCrudGrid.vue.d.ts +2 -1
  90. package/types/src/components/sdwidget/SdCrudPopupForm.vue.d.ts +2 -2
  91. package/types/src/components/sdwidget/SdCrudPopupGrid.vue.d.ts +2 -2
  92. package/types/src/components/sdwidget/SdCrudSelect.vue.d.ts +2 -2
  93. package/types/src/components/sdwidget/SdCrudSelectSubForm.vue.d.ts +3 -2
  94. package/types/src/components/sdwidget/SdDataDicPopup.vue.d.ts +1 -1
  95. package/types/src/components/sdwidget/SdDatePickerBE.vue.d.ts +987 -0
  96. package/types/src/components/sdwidget/SdDynamicInput.vue.d.ts +4 -4
  97. package/types/src/components/sdwidget/SdExportData.vue.d.ts +1 -1
  98. package/types/src/components/sdwidget/SdFormErd.vue.d.ts +2 -2
  99. package/types/src/components/sdwidget/SdGrid.vue.d.ts +1 -1
  100. package/types/src/components/sdwidget/SdIcon.vue.d.ts +2 -2
  101. package/types/src/components/sdwidget/SdOptionsItems.vue.d.ts +1 -1
  102. package/types/src/components/sdwidget/SdScan.vue.d.ts +369 -0
  103. package/types/src/components/sdwidget/SdSelectPathData.vue.d.ts +2 -2
  104. package/types/src/components/sdwidget/SdSelectRemoteList.vue.d.ts +2 -2
  105. package/types/src/components/sdwidget/SdUiListView.vue.d.ts +15 -0
  106. package/types/src/components/sdwidget/SdUiMenu.vue.d.ts +2 -2
  107. package/types/src/components/sdwidget/SdUiRecordView.vue.d.ts +159 -1
  108. package/types/src/env.d.ts +3 -0
  109. package/types/src/types/SdForm.d.ts +1 -0
  110. 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, ("change" | "update:modelValue")[], "change" | "update:modelValue", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
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, ("change" | "update:modelValue")[], "change" | "update:modelValue", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
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, ("change" | "update:modelValue" | "visibleChange" | "remoteMethod")[], "change" | "update:modelValue" | "visibleChange" | "remoteMethod", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
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;