@sdata/web-vue 3.12.0 → 3.13.0

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 (108) hide show
  1. package/dist/sd.css +147 -15
  2. package/dist/sd.min.css +43 -1
  3. package/es/_components/picker/input-range.vue.d.ts +6 -7
  4. package/es/_components/picker/input-range.vue_vue_type_script_setup_true_lang.js +63 -46
  5. package/es/_components/picker/input.vue.d.ts +5 -6
  6. package/es/_components/picker/input.vue_vue_type_script_setup_true_lang.js +52 -35
  7. package/es/_hooks/use-readonly-tip.d.ts +11 -0
  8. package/es/_hooks/use-readonly-tip.js +66 -0
  9. package/es/auto-complete/auto-complete.d.ts +9 -0
  10. package/es/auto-complete/auto-complete.js +11 -1
  11. package/es/auto-complete/index.d.ts +15 -0
  12. package/es/button/button.vue.d.ts +16 -7
  13. package/es/button/button.vue_vue_type_script_setup_true_lang.js +57 -31
  14. package/es/button/index.d.ts +11 -0
  15. package/es/button/interface.d.ts +2 -0
  16. package/es/card/card.d.ts +312 -0
  17. package/es/card/card.js +39 -7
  18. package/es/card/index.d.ts +616 -0
  19. package/es/card/style/index.css +23 -0
  20. package/es/card/style/index.scss +31 -0
  21. package/es/cascader/cascader.vue.d.ts +9 -8
  22. package/es/cascader/cascader.vue_vue_type_script_setup_true_lang.js +149 -128
  23. package/es/cascader/types.d.ts +1 -0
  24. package/es/color-picker/color-picker.d.ts +9 -0
  25. package/es/color-picker/color-picker.js +33 -11
  26. package/es/color-picker/index.d.ts +15 -0
  27. package/es/config-provider/context.d.ts +9 -9
  28. package/es/copy/copy.vue_vue_type_script_setup_true_lang.js +1 -1
  29. package/es/date-picker/index.d.ts +3 -6
  30. package/es/date-picker/picker.vue.d.ts +2 -3
  31. package/es/date-picker/picker.vue_vue_type_script_setup_true_lang.js +5 -5
  32. package/es/date-picker/range-picker.vue.d.ts +2 -3
  33. package/es/date-picker/range-picker.vue_vue_type_script_setup_true_lang.js +4 -4
  34. package/es/drawer/drawer.vue_vue_type_script_setup_true_lang.js +3 -3
  35. package/es/empty/empty.js +1 -1
  36. package/es/file-previewer/file-previewer.vue_vue_type_script_setup_true_lang.js +1 -1
  37. package/es/image/image.vue_vue_type_script_setup_true_lang.js +1 -1
  38. package/es/image/preview-action.d.ts +7 -127
  39. package/es/image/preview.vue_vue_type_script_setup_true_lang.js +2 -2
  40. package/es/index.css +147 -15
  41. package/es/index.js +3 -3
  42. package/es/input/index.d.ts +6 -6
  43. package/es/input/input.d.ts +3 -3
  44. package/es/input/input.js +18 -6
  45. package/es/input-number/index.d.ts +9 -9
  46. package/es/input-number/input-number.d.ts +5 -5
  47. package/es/input-number/input-number.js +8 -8
  48. package/es/input-tag/index.d.ts +6 -6
  49. package/es/input-tag/input-tag.d.ts +3 -3
  50. package/es/input-tag/input-tag.js +16 -7
  51. package/es/locale/interface.d.ts +1 -0
  52. package/es/locale/lang/en-us.js +1 -0
  53. package/es/locale/lang/zh-cn.js +1 -0
  54. package/es/locale/lang/zh-tw.js +1 -0
  55. package/es/mention/index.d.ts +15 -0
  56. package/es/mention/mention.d.ts +9 -0
  57. package/es/mention/mention.js +12 -1
  58. package/es/menu/base-menu.vue_vue_type_script_setup_true_lang.js +1 -1
  59. package/es/modal/modal.vue_vue_type_script_setup_true_lang.js +3 -3
  60. package/es/pagination/pagination.js +1 -1
  61. package/es/popconfirm/popconfirm.vue_vue_type_script_setup_true_lang.js +2 -2
  62. package/es/popover/popover.vue_vue_type_script_setup_true_lang.js +1 -1
  63. package/es/rate/index.d.ts +6 -6
  64. package/es/rate/rate.d.ts +3 -3
  65. package/es/rate/rate.js +17 -7
  66. package/es/scrollbar/style/index.css +57 -15
  67. package/es/scrollbar/style/index.scss +63 -15
  68. package/es/sd-vue.js +3 -3
  69. package/es/secret/secret.vue_vue_type_script_setup_true_lang.js +1 -1
  70. package/es/select/index.d.ts +15 -0
  71. package/es/select/select.d.ts +9 -0
  72. package/es/select/select.js +28 -5
  73. package/es/style/normalize.scss +68 -0
  74. package/es/table/table-th.js +2 -2
  75. package/es/tabs/context.d.ts +2 -0
  76. package/es/tabs/index.d.ts +32 -0
  77. package/es/tabs/style/index.css +29 -0
  78. package/es/tabs/style/index.scss +38 -0
  79. package/es/tabs/tab-pane.vue.d.ts +4 -2
  80. package/es/tabs/tab-pane.vue_vue_type_script_setup_true_lang.js +19 -3
  81. package/es/tabs/tabs.d.ts +19 -0
  82. package/es/tabs/tabs.js +23 -2
  83. package/es/textarea/index.d.ts +15 -0
  84. package/es/textarea/textarea.vue.d.ts +11 -2
  85. package/es/textarea/textarea.vue_vue_type_script_setup_true_lang.js +71 -46
  86. package/es/time-picker/index.d.ts +3 -6
  87. package/es/time-picker/panel.vue_vue_type_script_setup_true_lang.js +1 -1
  88. package/es/time-picker/time-picker.vue.d.ts +2 -3
  89. package/es/time-picker/time-picker.vue_vue_type_script_setup_true_lang.js +8 -5
  90. package/es/toolbar/toolbar.vue_vue_type_script_setup_true_lang.js +1 -1
  91. package/es/tooltip/index.d.ts +8 -127
  92. package/es/tooltip/interface.d.ts +17 -0
  93. package/es/tooltip/tooltip.vue.d.ts +5 -88
  94. package/es/tooltip/tooltip.vue_vue_type_script_setup_true_lang.js +8 -69
  95. package/es/tour/tour.vue_vue_type_script_setup_true_lang.js +1 -1
  96. package/es/tree/tree.vue_vue_type_script_setup_true_lang.js +1 -1
  97. package/es/tree-select/tree-select.vue.d.ts +16 -10
  98. package/es/tree-select/tree-select.vue_vue_type_script_setup_true_lang.js +156 -133
  99. package/es/typography/base.js +1 -1
  100. package/es/upload/upload-button.js +1 -1
  101. package/es/verification-code/index.d.ts +15 -6
  102. package/es/verification-code/verification-code.d.ts +9 -3
  103. package/es/verification-code/verification-code.js +4 -1
  104. package/json/vetur-attributes.json +48 -7
  105. package/json/vetur-tags.json +17 -5
  106. package/json/web-types.json +99 -10
  107. package/package.json +1 -1
  108. package/es/style/base.scss +0 -18
@@ -23,7 +23,7 @@ declare const Input: {
23
23
  default: boolean;
24
24
  };
25
25
  readonly: {
26
- type: BooleanConstructor;
26
+ type: (StringConstructor | BooleanConstructor)[];
27
27
  default: boolean;
28
28
  };
29
29
  error: {
@@ -82,7 +82,7 @@ declare const Input: {
82
82
  }, import("vue").PublicProps, {
83
83
  type: "text" | "password";
84
84
  error: boolean;
85
- readonly: boolean;
85
+ readonly: string | boolean;
86
86
  disabled: boolean;
87
87
  defaultValue: string;
88
88
  allowClear: boolean;
@@ -116,7 +116,7 @@ declare const Input: {
116
116
  default: boolean;
117
117
  };
118
118
  readonly: {
119
- type: BooleanConstructor;
119
+ type: (StringConstructor | BooleanConstructor)[];
120
120
  default: boolean;
121
121
  };
122
122
  error: {
@@ -167,7 +167,7 @@ declare const Input: {
167
167
  }, {
168
168
  type: "text" | "password";
169
169
  error: boolean;
170
- readonly: boolean;
170
+ readonly: string | boolean;
171
171
  disabled: boolean;
172
172
  defaultValue: string;
173
173
  allowClear: boolean;
@@ -198,7 +198,7 @@ declare const Input: {
198
198
  default: boolean;
199
199
  };
200
200
  readonly: {
201
- type: BooleanConstructor;
201
+ type: (StringConstructor | BooleanConstructor)[];
202
202
  default: boolean;
203
203
  };
204
204
  error: {
@@ -257,7 +257,7 @@ declare const Input: {
257
257
  }, string, {
258
258
  type: "text" | "password";
259
259
  error: boolean;
260
- readonly: boolean;
260
+ readonly: string | boolean;
261
261
  disabled: boolean;
262
262
  defaultValue: string;
263
263
  allowClear: boolean;
@@ -18,7 +18,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
18
18
  default: boolean;
19
19
  };
20
20
  readonly: {
21
- type: BooleanConstructor;
21
+ type: (StringConstructor | BooleanConstructor)[];
22
22
  default: boolean;
23
23
  };
24
24
  error: {
@@ -84,7 +84,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
84
84
  default: boolean;
85
85
  };
86
86
  readonly: {
87
- type: BooleanConstructor;
87
+ type: (StringConstructor | BooleanConstructor)[];
88
88
  default: boolean;
89
89
  };
90
90
  error: {
@@ -129,7 +129,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
129
129
  }>, {
130
130
  type: "text" | "password";
131
131
  error: boolean;
132
- readonly: boolean;
132
+ readonly: string | boolean;
133
133
  disabled: boolean;
134
134
  defaultValue: string;
135
135
  allowClear: boolean;
package/es/input/input.js CHANGED
@@ -7,13 +7,18 @@ import IconClose from "../icon/icon-close/index.js";
7
7
  import { useAllowClear } from "../_hooks/use-allow-clear.js";
8
8
  import feedback_icon_default from "../_components/feedback-icon.js";
9
9
  import { useCursor } from "../_hooks/use-cursor.js";
10
+ import { isReadonlyModificationKey, useReadonlyTip, useReadonlyTipText } from "../_hooks/use-readonly-tip.js";
10
11
  import { useSize } from "../_hooks/use-size.js";
11
12
  import { INPUT_EVENTS } from "../_utils/constant.js";
12
13
  import { Enter } from "../_utils/keycode.js";
13
14
  import { omit } from "../_utils/omit.js";
14
15
  import pick from "../_utils/pick.js";
15
- import { computed, createTextVNode, createVNode, defineComponent, mergeProps, nextTick, ref, toRefs, watch } from "vue";
16
+ import Tooltip from "../tooltip/index.js";
17
+ import { computed, createTextVNode, createVNode, defineComponent, isVNode, mergeProps, nextTick, ref, toRef, toRefs, watch } from "vue";
16
18
  //#region components/input/input.tsx
19
+ function _isSlot(s) {
20
+ return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
21
+ }
17
22
  var input_default = /* @__PURE__ */ defineComponent({
18
23
  name: "Input",
19
24
  inheritAttrs: false,
@@ -59,7 +64,7 @@ var input_default = /* @__PURE__ */ defineComponent({
59
64
  * @en Whether it is read-only
60
65
  */
61
66
  readonly: {
62
- type: Boolean,
67
+ type: [Boolean, String],
63
68
  default: false
64
69
  },
65
70
  /**
@@ -198,6 +203,8 @@ var input_default = /* @__PURE__ */ defineComponent({
198
203
  const { mergedSize } = useSize(_mergedSize);
199
204
  const { mergedAllowClear } = useAllowClear(allowClear);
200
205
  const [recordCursor, setCursor] = useCursor(inputRef);
206
+ const { tipVisible, show: showReadonlyTip } = useReadonlyTip(toRef(props, "readonly"), mergedDisabled);
207
+ const readonlyTipText = useReadonlyTipText(toRef(props, "readonly"));
201
208
  const _value = ref(props.defaultValue);
202
209
  const computedValue = computed(() => {
203
210
  var _props$modelValue;
@@ -314,6 +321,7 @@ var input_default = /* @__PURE__ */ defineComponent({
314
321
  emit("clear", ev);
315
322
  };
316
323
  const handleKeyDown = (e) => {
324
+ if (props.readonly && !mergedDisabled.value && isReadonlyModificationKey(e)) showReadonlyTip();
317
325
  const keyCode = e.key || e.code;
318
326
  if (!isComposition.value && keyCode === Enter.key) {
319
327
  emitChange(computedValue.value, e);
@@ -354,7 +362,7 @@ var input_default = /* @__PURE__ */ defineComponent({
354
362
  "value": computedValue.value,
355
363
  "type": props.type,
356
364
  "placeholder": props.placeholder,
357
- "readonly": props.readonly,
365
+ "readonly": !!props.readonly,
358
366
  "disabled": mergedDisabled.value,
359
367
  "onInput": handleInput,
360
368
  "onKeydown": handleKeyDown,
@@ -380,12 +388,16 @@ var input_default = /* @__PURE__ */ defineComponent({
380
388
  ]);
381
389
  };
382
390
  const render = () => {
383
- if (slots.prepend || slots.append || props.prepend || props.append) return createVNode("span", mergeProps({ "class": outerCls.value }, wrapperAttrs.value), [
391
+ const node = slots.prepend || slots.append || props.prepend || props.append ? createVNode("span", mergeProps({ "class": outerCls.value }, wrapperAttrs.value), [
384
392
  (slots.prepend || props.prepend) && createVNode("span", { "class": `${prefixCls}-prepend` }, [slots.prepend ? slots.prepend() : props.prepend]),
385
393
  renderInput(true),
386
394
  (slots.append || props.append) && createVNode("span", { "class": `${prefixCls}-append` }, [slots.append ? slots.append() : props.append])
387
- ]);
388
- return renderInput();
395
+ ]) : renderInput();
396
+ return createVNode(Tooltip, {
397
+ "popupVisible": tipVisible.value,
398
+ "content": readonlyTipText.value,
399
+ "position": "top"
400
+ }, _isSlot(node) ? node : { default: () => [node] });
389
401
  };
390
402
  return {
391
403
  inputRef,
@@ -61,8 +61,8 @@ declare const InputNumber: {
61
61
  type: import("vue").PropType<"change" | "input">;
62
62
  default: string;
63
63
  };
64
- readOnly: {
65
- type: BooleanConstructor;
64
+ readonly: {
65
+ type: (StringConstructor | BooleanConstructor)[];
66
66
  default: boolean;
67
67
  };
68
68
  inputAttrs: {
@@ -92,6 +92,7 @@ declare const InputNumber: {
92
92
  keydown: (_ev: KeyboardEvent) => true;
93
93
  }, import("vue").PublicProps, {
94
94
  error: boolean;
95
+ readonly: string | boolean;
95
96
  disabled: boolean;
96
97
  allowClear: boolean;
97
98
  max: number;
@@ -100,7 +101,6 @@ declare const InputNumber: {
100
101
  min: number;
101
102
  hideButton: boolean;
102
103
  modelEvent: "change" | "input";
103
- readOnly: boolean;
104
104
  }, true, {}, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
105
105
  P: {};
106
106
  B: {};
@@ -162,8 +162,8 @@ declare const InputNumber: {
162
162
  type: import("vue").PropType<"change" | "input">;
163
163
  default: string;
164
164
  };
165
- readOnly: {
166
- type: BooleanConstructor;
165
+ readonly: {
166
+ type: (StringConstructor | BooleanConstructor)[];
167
167
  default: boolean;
168
168
  };
169
169
  inputAttrs: {
@@ -185,6 +185,7 @@ declare const InputNumber: {
185
185
  blur(): void;
186
186
  }, {
187
187
  error: boolean;
188
+ readonly: string | boolean;
188
189
  disabled: boolean;
189
190
  allowClear: boolean;
190
191
  max: number;
@@ -193,7 +194,6 @@ declare const InputNumber: {
193
194
  min: number;
194
195
  hideButton: boolean;
195
196
  modelEvent: "change" | "input";
196
- readOnly: boolean;
197
197
  }>;
198
198
  __isFragment?: never;
199
199
  __isTeleport?: never;
@@ -252,8 +252,8 @@ declare const InputNumber: {
252
252
  type: import("vue").PropType<"change" | "input">;
253
253
  default: string;
254
254
  };
255
- readOnly: {
256
- type: BooleanConstructor;
255
+ readonly: {
256
+ type: (StringConstructor | BooleanConstructor)[];
257
257
  default: boolean;
258
258
  };
259
259
  inputAttrs: {
@@ -283,6 +283,7 @@ declare const InputNumber: {
283
283
  keydown: (_ev: KeyboardEvent) => true;
284
284
  }, string, {
285
285
  error: boolean;
286
+ readonly: string | boolean;
286
287
  disabled: boolean;
287
288
  allowClear: boolean;
288
289
  max: number;
@@ -291,7 +292,6 @@ declare const InputNumber: {
291
292
  min: number;
292
293
  hideButton: boolean;
293
294
  modelEvent: "change" | "input";
294
- readOnly: boolean;
295
295
  }, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & {
296
296
  install: (app: App, options?: SDOptions) => void;
297
297
  };
@@ -55,8 +55,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
55
55
  type: PropType<"change" | "input">;
56
56
  default: string;
57
57
  };
58
- readOnly: {
59
- type: BooleanConstructor;
58
+ readonly: {
59
+ type: (StringConstructor | BooleanConstructor)[];
60
60
  default: boolean;
61
61
  };
62
62
  inputAttrs: {
@@ -130,8 +130,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
130
130
  type: PropType<"change" | "input">;
131
131
  default: string;
132
132
  };
133
- readOnly: {
134
- type: BooleanConstructor;
133
+ readonly: {
134
+ type: (StringConstructor | BooleanConstructor)[];
135
135
  default: boolean;
136
136
  };
137
137
  inputAttrs: {
@@ -147,6 +147,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
147
147
  "onUpdate:modelValue"?: ((_value: InputNumberValue) => any) | undefined;
148
148
  }>, {
149
149
  error: boolean;
150
+ readonly: string | boolean;
150
151
  disabled: boolean;
151
152
  allowClear: boolean;
152
153
  max: number;
@@ -155,6 +156,5 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
155
156
  min: number;
156
157
  hideButton: boolean;
157
158
  modelEvent: "change" | "input";
158
- readOnly: boolean;
159
159
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
160
160
  export default _default;
@@ -135,8 +135,8 @@ var input_number_default = /* @__PURE__ */ defineComponent({
135
135
  * @en Readonly
136
136
  * @version 2.33.1
137
137
  */
138
- readOnly: {
139
- type: Boolean,
138
+ readonly: {
139
+ type: [Boolean, String],
140
140
  default: false
141
141
  },
142
142
  /**
@@ -321,7 +321,7 @@ var input_number_default = /* @__PURE__ */ defineComponent({
321
321
  const handleStepButton = (event, method, needRepeat = false) => {
322
322
  var _inputRef$value;
323
323
  event.preventDefault();
324
- if (props.readOnly) return;
324
+ if (props.readonly) return;
325
325
  (_inputRef$value = inputRef.value) === null || _inputRef$value === void 0 || _inputRef$value.focus();
326
326
  nextStep(method, event);
327
327
  if (needRepeat) repeatTimer = window.setTimeout(() => event.target.dispatchEvent(event), repeatTimer ? SPEED : FIRST_DELAY);
@@ -364,10 +364,10 @@ var input_number_default = /* @__PURE__ */ defineComponent({
364
364
  };
365
365
  const keyDownHandler = getKeyDownHandler(new Map([[KEYBOARD_KEY.ARROW_UP, (ev) => {
366
366
  ev.preventDefault();
367
- !props.readOnly && nextStep("plus", ev);
367
+ !props.readonly && nextStep("plus", ev);
368
368
  }], [KEYBOARD_KEY.ARROW_DOWN, (ev) => {
369
369
  ev.preventDefault();
370
- !props.readOnly && nextStep("minus", ev);
370
+ !props.readonly && nextStep("minus", ev);
371
371
  }]]));
372
372
  const onKeyDown = (event) => {
373
373
  emit("keydown", event);
@@ -387,7 +387,7 @@ var input_number_default = /* @__PURE__ */ defineComponent({
387
387
  });
388
388
  const renderSuffix = () => {
389
389
  var _slots$suffix, _slots$plus, _slots$minus;
390
- if (props.readOnly) return null;
390
+ if (props.readonly) return null;
391
391
  return createVNode(Fragment, null, [slots.suffix && createVNode("div", { "class": `${prefixCls}-suffix` }, [(_slots$suffix = slots.suffix) === null || _slots$suffix === void 0 ? void 0 : _slots$suffix.call(slots)]), createVNode("div", { "class": `${prefixCls}-step` }, [createVNode("button", {
392
392
  "class": [`${prefixCls}-step-button`, { [`${prefixCls}-step-button-disabled`]: mergedDisabled.value || isMax.value }],
393
393
  "type": "button",
@@ -410,7 +410,7 @@ var input_number_default = /* @__PURE__ */ defineComponent({
410
410
  prefixCls,
411
411
  `${prefixCls}-mode-${props.mode}`,
412
412
  `${prefixCls}-size-${mergedSize.value}`,
413
- { [`${prefixCls}-readonly`]: props.readOnly }
413
+ { [`${prefixCls}-readonly`]: props.readonly }
414
414
  ]);
415
415
  const renderPrependButton = () => {
416
416
  return createVNode(Button, mergeProps({
@@ -458,7 +458,7 @@ var input_number_default = /* @__PURE__ */ defineComponent({
458
458
  "modelValue": _value.value,
459
459
  "placeholder": props.placeholder,
460
460
  "disabled": mergedDisabled.value,
461
- "readonly": props.readOnly,
461
+ "readonly": props.readonly,
462
462
  "error": props.error,
463
463
  "inputAttrs": _objectSpread2({
464
464
  "role": "spinbutton",
@@ -25,7 +25,7 @@ declare const InputTag: {
25
25
  default: boolean;
26
26
  };
27
27
  readonly: {
28
- type: BooleanConstructor;
28
+ type: (StringConstructor | BooleanConstructor)[];
29
29
  default: boolean;
30
30
  };
31
31
  allowClear: {
@@ -92,7 +92,7 @@ declare const InputTag: {
92
92
  blur: (_ev: FocusEvent) => true;
93
93
  }, import("vue").PublicProps, {
94
94
  error: boolean;
95
- readonly: boolean;
95
+ readonly: string | boolean;
96
96
  disabled: boolean;
97
97
  defaultValue: (string | number | import("./interface").TagData)[];
98
98
  allowClear: boolean;
@@ -137,7 +137,7 @@ declare const InputTag: {
137
137
  default: boolean;
138
138
  };
139
139
  readonly: {
140
- type: BooleanConstructor;
140
+ type: (StringConstructor | BooleanConstructor)[];
141
141
  default: boolean;
142
142
  };
143
143
  allowClear: {
@@ -194,7 +194,7 @@ declare const InputTag: {
194
194
  blur(): void;
195
195
  }, {
196
196
  error: boolean;
197
- readonly: boolean;
197
+ readonly: string | boolean;
198
198
  disabled: boolean;
199
199
  defaultValue: (string | number | import("./interface").TagData)[];
200
200
  allowClear: boolean;
@@ -236,7 +236,7 @@ declare const InputTag: {
236
236
  default: boolean;
237
237
  };
238
238
  readonly: {
239
- type: BooleanConstructor;
239
+ type: (StringConstructor | BooleanConstructor)[];
240
240
  default: boolean;
241
241
  };
242
242
  allowClear: {
@@ -303,7 +303,7 @@ declare const InputTag: {
303
303
  blur: (_ev: FocusEvent) => true;
304
304
  }, string, {
305
305
  error: boolean;
306
- readonly: boolean;
306
+ readonly: string | boolean;
307
307
  disabled: boolean;
308
308
  defaultValue: (string | number | import("./interface").TagData)[];
309
309
  allowClear: boolean;
@@ -24,7 +24,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
24
24
  default: boolean;
25
25
  };
26
26
  readonly: {
27
- type: BooleanConstructor;
27
+ type: (StringConstructor | BooleanConstructor)[];
28
28
  default: boolean;
29
29
  };
30
30
  allowClear: {
@@ -102,7 +102,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
102
102
  default: boolean;
103
103
  };
104
104
  readonly: {
105
- type: BooleanConstructor;
105
+ type: (StringConstructor | BooleanConstructor)[];
106
106
  default: boolean;
107
107
  };
108
108
  allowClear: {
@@ -153,7 +153,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
153
153
  onRemove?: ((_removed: string | number, _ev: Event) => any) | undefined;
154
154
  }>, {
155
155
  error: boolean;
156
- readonly: boolean;
156
+ readonly: string | boolean;
157
157
  disabled: boolean;
158
158
  defaultValue: (string | number | TagData)[];
159
159
  allowClear: boolean;
@@ -7,15 +7,17 @@ import icon_hover_default from "../_components/icon-hover.js";
7
7
  import IconClose from "../icon/icon-close/index.js";
8
8
  import { useAllowClear } from "../_hooks/use-allow-clear.js";
9
9
  import feedback_icon_default from "../_components/feedback-icon.js";
10
+ import { isReadonlyModificationKey, useReadonlyTip, useReadonlyTipText } from "../_hooks/use-readonly-tip.js";
10
11
  import { useSize } from "../_hooks/use-size.js";
11
12
  import { INPUT_EVENTS } from "../_utils/constant.js";
12
13
  import { Backspace, Enter } from "../_utils/keycode.js";
13
14
  import { omit } from "../_utils/omit.js";
14
15
  import pick from "../_utils/pick.js";
16
+ import Tooltip from "../tooltip/index.js";
15
17
  import Ellipsis from "../ellipsis/index.js";
16
18
  import Tag from "../tag/index.js";
17
19
  import { getValueData } from "./utils.js";
18
- import { TransitionGroup, computed, createVNode, defineComponent, isVNode, mergeProps, nextTick, onMounted, reactive, ref, toRefs, watch } from "vue";
20
+ import { TransitionGroup, computed, createVNode, defineComponent, isVNode, mergeProps, nextTick, onMounted, reactive, ref, toRef, toRefs, watch } from "vue";
19
21
  //#region components/input-tag/input-tag.tsx
20
22
  function _isSlot(s) {
21
23
  return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
@@ -84,7 +86,7 @@ var input_tag_default = /* @__PURE__ */ defineComponent({
84
86
  * @en Whether it is read-only mode
85
87
  */
86
88
  readonly: {
87
- type: Boolean,
89
+ type: [Boolean, String],
88
90
  default: false
89
91
  },
90
92
  /**
@@ -233,6 +235,8 @@ var input_tag_default = /* @__PURE__ */ defineComponent({
233
235
  });
234
236
  const { mergedSize } = useSize(_mergedSize);
235
237
  const { mergedAllowClear } = useAllowClear(allowClear);
238
+ const { tipVisible, show: showReadonlyTip } = useReadonlyTip(toRef(props, "readonly"), mergedDisabled);
239
+ const readonlyTipText = useReadonlyTipText(toRef(props, "readonly"));
236
240
  const mergedFieldNames = computed(() => _objectSpread2(_objectSpread2({}, DEFAULT_FIELD_NAMES), props.fieldNames));
237
241
  const _focused = ref(false);
238
242
  const _value = ref(props.defaultValue);
@@ -443,6 +447,7 @@ var input_tag_default = /* @__PURE__ */ defineComponent({
443
447
  return -1;
444
448
  };
445
449
  const handleKeyDown = (e) => {
450
+ if (props.readonly && !mergedDisabled.value && isReadonlyModificationKey(e)) showReadonlyTip();
446
451
  if (mergedDisabled.value || props.readonly) return;
447
452
  const keyCode = e.key || e.code;
448
453
  if (!isComposition.value && computedInputValue.value && keyCode === Enter.key) handlePressEnter(e);
@@ -515,9 +520,13 @@ var input_tag_default = /* @__PURE__ */ defineComponent({
515
520
  });
516
521
  });
517
522
  const isCompressedResponsiveTag = (index, value) => isResponsiveMaxTagCount.value && !isOverflowCounterTag(value) && hiddenTagCount.value > 0 && index === 0 && responsiveTagMaxWidth.value > 0;
518
- const render = () => {
523
+ const render = () => createVNode(Tooltip, {
524
+ "popupVisible": tipVisible.value,
525
+ "content": readonlyTipText.value,
526
+ "position": "top"
527
+ }, { default: () => {
519
528
  var _slots$suffix;
520
- return createVNode("span", mergeProps({
529
+ return [createVNode("span", mergeProps({
521
530
  "ref": wrapperRef,
522
531
  "class": cls.value,
523
532
  "onMousedown": handleMousedown
@@ -578,7 +587,7 @@ var input_tag_default = /* @__PURE__ */ defineComponent({
578
587
  "style": getInputStyle.value,
579
588
  "placeholder": valueData.value.length === 0 ? props.placeholder : void 0,
580
589
  "disabled": mergedDisabled.value,
581
- "readonly": props.readonly || props.disabledInput,
590
+ "readonly": !!(props.readonly || props.disabledInput),
582
591
  "onInput": handleInput,
583
592
  "onKeydown": handleKeyDown,
584
593
  "onFocus": handleFocus,
@@ -592,8 +601,8 @@ var input_tag_default = /* @__PURE__ */ defineComponent({
592
601
  onMousedown: (e) => e.stopPropagation()
593
602
  }), { default: () => [createVNode(IconClose, null, null)] }),
594
603
  (slots.suffix || Boolean(feedback.value)) && createVNode("span", { "class": `${prefixCls}-suffix` }, [(_slots$suffix = slots.suffix) === null || _slots$suffix === void 0 ? void 0 : _slots$suffix.call(slots), Boolean(feedback.value) && createVNode(feedback_icon_default, { "type": feedback.value }, null)])
595
- ]);
596
- };
604
+ ])];
605
+ } });
597
606
  return {
598
607
  inputRef,
599
608
  render
@@ -116,6 +116,7 @@ export interface ValidateMessage {
116
116
  }
117
117
  export interface SdLang {
118
118
  locale: string;
119
+ readonlyTip?: string;
119
120
  empty: {
120
121
  description: string;
121
122
  };
@@ -71,6 +71,7 @@ var calendarLang = {
71
71
  };
72
72
  var lang = {
73
73
  locale: "en-US",
74
+ readonlyTip: "Read-only mode",
74
75
  empty: { description: "No Data" },
75
76
  drawer: {
76
77
  okText: "Ok",
@@ -70,6 +70,7 @@ var calendarLang = {
70
70
  };
71
71
  var lang = {
72
72
  locale: "zh-CN",
73
+ readonlyTip: "当前为只读模式",
73
74
  empty: { description: "暂无数据" },
74
75
  drawer: {
75
76
  okText: "确定",
@@ -70,6 +70,7 @@ var calendarLang = {
70
70
  };
71
71
  var lang = {
72
72
  locale: "zh-TW",
73
+ readonlyTip: "目前為唯讀模式",
73
74
  empty: { description: "無資料" },
74
75
  drawer: {
75
76
  okText: "確認",
@@ -28,6 +28,10 @@ declare const Mention: {
28
28
  type: BooleanConstructor;
29
29
  default: boolean;
30
30
  };
31
+ readonly: {
32
+ type: (StringConstructor | BooleanConstructor)[];
33
+ default: boolean;
34
+ };
31
35
  allowClear: {
32
36
  type: BooleanConstructor;
33
37
  default: boolean;
@@ -57,6 +61,7 @@ declare const Mention: {
57
61
  }, import("vue").PublicProps, {
58
62
  type: "input" | "textarea";
59
63
  split: string;
64
+ readonly: string | boolean;
60
65
  data: (string | number | import("..").SelectOptionData | import("..").SelectOptionGroup)[];
61
66
  disabled: boolean;
62
67
  prefix: string | string[];
@@ -95,6 +100,10 @@ declare const Mention: {
95
100
  type: BooleanConstructor;
96
101
  default: boolean;
97
102
  };
103
+ readonly: {
104
+ type: (StringConstructor | BooleanConstructor)[];
105
+ default: boolean;
106
+ };
98
107
  allowClear: {
99
108
  type: BooleanConstructor;
100
109
  default: boolean;
@@ -116,6 +125,7 @@ declare const Mention: {
116
125
  }, {
117
126
  type: "input" | "textarea";
118
127
  split: string;
128
+ readonly: string | boolean;
119
129
  data: (string | number | import("..").SelectOptionData | import("..").SelectOptionGroup)[];
120
130
  disabled: boolean;
121
131
  prefix: string | string[];
@@ -151,6 +161,10 @@ declare const Mention: {
151
161
  type: BooleanConstructor;
152
162
  default: boolean;
153
163
  };
164
+ readonly: {
165
+ type: (StringConstructor | BooleanConstructor)[];
166
+ default: boolean;
167
+ };
154
168
  allowClear: {
155
169
  type: BooleanConstructor;
156
170
  default: boolean;
@@ -180,6 +194,7 @@ declare const Mention: {
180
194
  }, string, {
181
195
  type: "input" | "textarea";
182
196
  split: string;
197
+ readonly: string | boolean;
183
198
  data: (string | number | import("..").SelectOptionData | import("..").SelectOptionGroup)[];
184
199
  disabled: boolean;
185
200
  prefix: string | string[];
@@ -26,6 +26,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
26
26
  type: BooleanConstructor;
27
27
  default: boolean;
28
28
  };
29
+ readonly: {
30
+ type: (StringConstructor | BooleanConstructor)[];
31
+ default: boolean;
32
+ };
29
33
  allowClear: {
30
34
  type: BooleanConstructor;
31
35
  default: boolean;
@@ -70,6 +74,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
70
74
  type: BooleanConstructor;
71
75
  default: boolean;
72
76
  };
77
+ readonly: {
78
+ type: (StringConstructor | BooleanConstructor)[];
79
+ default: boolean;
80
+ };
73
81
  allowClear: {
74
82
  type: BooleanConstructor;
75
83
  default: boolean;
@@ -85,6 +93,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
85
93
  }>, {
86
94
  type: "input" | "textarea";
87
95
  split: string;
96
+ readonly: string | boolean;
88
97
  data: (string | number | SelectOptionData | SelectOptionGroup)[];
89
98
  disabled: boolean;
90
99
  prefix: string | string[];
@@ -4,11 +4,11 @@ import { getPrefixCls } from "../_utils/global-config.js";
4
4
  import { isFunction, isNull, isUndefined } from "../_utils/is.js";
5
5
  import resize_observer_default from "../_components/resize-observer.js";
6
6
  import { useAllowClear } from "../_hooks/use-allow-clear.js";
7
+ import Trigger from "../trigger/index.js";
7
8
  import Input from "../input/index.js";
8
9
  import { getKeyFromValue } from "../select/utils.js";
9
10
  import { useSelect } from "../select/hooks/use-select.js";
10
11
  import select_dropdown_default from "../select/select-dropdown.js";
11
- import Trigger from "../trigger/index.js";
12
12
  import { getSizeStyles } from "../textarea/utils.js";
13
13
  import Textarea from "../textarea/index.js";
14
14
  import { getLastMeasureIndex, getTextBeforeSelection, isValidSearch } from "./utils.js";
@@ -76,6 +76,14 @@ var mention_default = /* @__PURE__ */ defineComponent({
76
76
  default: false
77
77
  },
78
78
  /**
79
+ * @zh 是否为只读状态
80
+ * @en Whether it is read-only
81
+ */
82
+ readonly: {
83
+ type: [Boolean, String],
84
+ default: false
85
+ },
86
+ /**
79
87
  * @zh 是否允许清空输入框
80
88
  * @en Whether to allow the input to be cleared
81
89
  * @version 2.23.0
@@ -170,6 +178,7 @@ var mention_default = /* @__PURE__ */ defineComponent({
170
178
  const filterOption = ref(true);
171
179
  const handleInput = (value, e) => {
172
180
  var _eventHandlers$value, _eventHandlers$value$;
181
+ if (props.readonly) return;
173
182
  const text = getTextBeforeSelection(e.target);
174
183
  const lastMeasure = getLastMeasureIndex(text, props.prefix);
175
184
  if (lastMeasure.location > -1) {
@@ -308,6 +317,7 @@ var mention_default = /* @__PURE__ */ defineComponent({
308
317
  "allowClear": mergedAllowClear.value,
309
318
  "modelValue": computedValue.value,
310
319
  "disabled": mergedDisabled.value,
320
+ "readonly": props.readonly,
311
321
  "onInput": handleInput,
312
322
  "onClear": handleClear,
313
323
  "onFocus": onFocus,
@@ -347,6 +357,7 @@ var mention_default = /* @__PURE__ */ defineComponent({
347
357
  "allowClear": mergedAllowClear.value,
348
358
  "modelValue": computedValue.value,
349
359
  "disabled": mergedDisabled.value,
360
+ "readonly": props.readonly,
350
361
  "onInput": handleInput,
351
362
  "onClear": handleClear,
352
363
  "onFocus": onFocus,
@@ -2,8 +2,8 @@ import { _objectSpread2 } from "../_virtual/_@oxc-project_runtime@0.133.0/helper
2
2
  import { getPrefixCls } from "../_utils/global-config.js";
3
3
  import { isNumber, isObject } from "../_utils/is.js";
4
4
  import { omit } from "../_utils/omit.js";
5
- import useMergeState from "../_hooks/use-merge-state.js";
6
5
  import usePickSlots from "../_hooks/use-pick-slots.js";
6
+ import useMergeState from "../_hooks/use-merge-state.js";
7
7
  import { MenuInjectionKey } from "./context.js";
8
8
  import { provideLevel } from "./hooks/use-level.js";
9
9
  import useMenuDataCollector from "./hooks/use-menu-data-collector.js";