@cedar-design/ui-vue 1.1.0 → 1.1.1

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 (298) hide show
  1. package/es/_components/field-presentation/EditorPanel.vue.mjs +1 -1
  2. package/es/_components/field-presentation/editor-pending.mjs +4 -0
  3. package/es/_components/field-presentation/with-field-presentation.mjs +33 -7
  4. package/es/_components/picker-field/PickerField.vue.mjs +6 -12
  5. package/es/_components/picker-field/range-labels.mjs +16 -0
  6. package/es/_components/selected-options/style/index.css +33 -15
  7. package/es/_components/selection-field/use-selection-session.mjs +1 -0
  8. package/es/_components/virtual-list-v2/VirtualList2.vue.mjs +21 -3
  9. package/es/_utils/modal-focus.mjs +9 -2
  10. package/es/_utils/modal-surface.mjs +9 -3
  11. package/es/anchor/style/index.css +1 -1
  12. package/es/auto-complete/auto-complete.mjs +2 -2
  13. package/es/auto-complete/presentation.mjs +1 -0
  14. package/es/auto-complete/props.mjs +2 -0
  15. package/es/auto-complete/style/index.css +7 -2
  16. package/es/back-top/style/index.css +1 -1
  17. package/es/button/base.mjs +6 -0
  18. package/es/button/index.mjs +8 -8
  19. package/es/button/style/index.css +1 -1
  20. package/es/card/Card.vue.mjs +46 -12
  21. package/es/carousel/style/index.css +1 -1
  22. package/es/cascader/CascaderMenu.vue.mjs +2 -2
  23. package/es/cascader/cascader-option.mjs +11 -6
  24. package/es/cascader/field-adapter.mjs +1 -0
  25. package/es/cascader/props.mjs +2 -0
  26. package/es/cascader/style/index.css +36 -9
  27. package/es/cascader/use-cascader-focus.mjs +9 -6
  28. package/es/cedar.css +187 -79
  29. package/es/cedar.esm.js +21694 -21413
  30. package/es/checkbox/base.mjs +6 -0
  31. package/es/checkbox/checkbox-group.vue.mjs +2 -2
  32. package/es/checkbox/index.mjs +1 -1
  33. package/es/checkbox/presentation.mjs +2 -2
  34. package/es/checkbox/style/index.css +1 -1
  35. package/es/countdown/use-countdown.mjs +7 -2
  36. package/es/date/DatePanelActions.vue.mjs +1 -1
  37. package/es/date/DateShortcuts.vue.mjs +1 -1
  38. package/es/date/picker/panels/Footer2.vue.mjs +1 -1
  39. package/es/date/picker/panels/Shortcuts2.vue.mjs +1 -1
  40. package/es/date/picker/style/index.css +1 -1
  41. package/es/dialog/Dialog.vue.mjs +1 -1
  42. package/es/ellipsis/style/index.css +1 -1
  43. package/es/form/FormItem2.vue.mjs +35 -7
  44. package/es/form/FormItemLabel.vue.mjs +4 -3
  45. package/es/form/focus-explicit-label.mjs +28 -0
  46. package/es/form/style/index.css +1 -1
  47. package/es/input/base.mjs +7 -0
  48. package/es/input/index.mjs +16 -16
  49. package/es/layout/style/index.css +1 -1
  50. package/es/nav-menu/style/index.css +1 -1
  51. package/es/pagination/PageInput.vue.mjs +2 -2
  52. package/es/pagination/style/index.css +2 -2
  53. package/es/people-select/PeopleSelect.mjs +23 -50
  54. package/es/people-select/Person.vue.mjs +1 -1
  55. package/es/people-select/emits.mjs +1 -1
  56. package/es/people-select/people-select.mjs +6 -8
  57. package/es/people-select/presentation.mjs +3 -1
  58. package/es/people-select/props.mjs +9 -3
  59. package/es/people-select/selection.mjs +43 -0
  60. package/es/people-select/style/index.css +6 -0
  61. package/es/progress/style/index.css +2 -2
  62. package/es/radio/style/index.css +1 -1
  63. package/es/rate/style/index.css +1 -1
  64. package/es/ripple/index.mjs +57 -1
  65. package/es/scheduler/style/index.css +1 -1
  66. package/es/search/HistoryContent.vue.mjs +3 -3
  67. package/es/search/props.mjs +0 -1
  68. package/es/search/search.vue.mjs +1 -1
  69. package/es/select/props.mjs +2 -0
  70. package/es/select/select.mjs +10 -4
  71. package/es/select/style/index.css +22 -12
  72. package/es/select/use-select-controller.mjs +14 -2
  73. package/es/slider/Slider.vue.mjs +39 -21
  74. package/es/slider/SliderInput.vue.mjs +4 -2
  75. package/es/slider/style/index.css +2 -2
  76. package/es/steps/style/index.css +10 -10
  77. package/es/switch/Switch.vue.mjs +6 -1
  78. package/es/switch/style/index.css +1 -1
  79. package/es/table/structural-slot.mjs +17 -0
  80. package/es/table/style/index.css +2 -2
  81. package/es/table/table-tbody.mjs +2 -1
  82. package/es/table/table-td.mjs +3 -2
  83. package/es/table/table-th.mjs +3 -2
  84. package/es/table/table-thead.mjs +2 -1
  85. package/es/table/table-tr.mjs +3 -2
  86. package/es/table/table.mjs +22 -5
  87. package/es/tabs/style/index.css +1 -1
  88. package/es/time/picker/Panel2.vue.mjs +1 -1
  89. package/es/time/picker/RangePanel2.vue.mjs +1 -1
  90. package/es/tree/style/index.css +1 -1
  91. package/es/tree-select/panel.mjs +3 -1
  92. package/es/tree-select/presentation.mjs +1 -0
  93. package/es/tree-select/props.mjs +2 -0
  94. package/es/tree-select/style/index.css +49 -7
  95. package/es/trigger/interaction.mjs +1 -1
  96. package/es/trigger/popup-move-focus.mjs +6 -6
  97. package/es/trigger/position.mjs +41 -3
  98. package/es/trigger/positioner.mjs +28 -5
  99. package/es/trigger/trigger.mjs +1 -1
  100. package/es/upload/composables/use-upload-queue.mjs +9 -1
  101. package/es/upload/composables/use-uploader.mjs +31 -11
  102. package/es/upload/upload.vue.mjs +10 -2
  103. package/lib/_components/field-presentation/EditorPanel.vue.js +3 -3
  104. package/lib/_components/field-presentation/editor-pending.js +4 -0
  105. package/lib/_components/field-presentation/with-field-presentation.js +32 -6
  106. package/lib/_components/picker-field/PickerField.vue.js +6 -12
  107. package/lib/_components/picker-field/range-labels.js +16 -0
  108. package/lib/_components/selected-options/style/index.css +33 -15
  109. package/lib/_components/selection-field/use-selection-session.js +1 -0
  110. package/lib/_components/virtual-list-v2/VirtualList2.vue.js +20 -2
  111. package/lib/_utils/modal-focus.js +9 -2
  112. package/lib/_utils/modal-surface.js +9 -3
  113. package/lib/anchor/style/index.css +1 -1
  114. package/lib/auto-complete/auto-complete.js +2 -2
  115. package/lib/auto-complete/presentation.js +1 -0
  116. package/lib/auto-complete/props.js +2 -0
  117. package/lib/auto-complete/style/index.css +7 -2
  118. package/lib/back-top/style/index.css +1 -1
  119. package/lib/button/base.js +6 -0
  120. package/lib/button/index.js +4 -4
  121. package/lib/button/style/index.css +1 -1
  122. package/lib/card/Card.vue.js +47 -13
  123. package/lib/carousel/style/index.css +1 -1
  124. package/lib/cascader/CascaderMenu.vue.js +2 -2
  125. package/lib/cascader/cascader-option.js +11 -6
  126. package/lib/cascader/field-adapter.js +1 -0
  127. package/lib/cascader/props.js +2 -0
  128. package/lib/cascader/style/index.css +36 -9
  129. package/lib/cascader/use-cascader-focus.js +9 -6
  130. package/lib/cedar.cjs.js +1149 -738
  131. package/lib/cedar.css +187 -79
  132. package/lib/checkbox/base.js +6 -0
  133. package/lib/checkbox/index.js +4 -4
  134. package/lib/checkbox/presentation.js +2 -2
  135. package/lib/checkbox/style/index.css +1 -1
  136. package/lib/countdown/use-countdown.js +7 -2
  137. package/lib/date/DatePanelActions.vue.js +3 -3
  138. package/lib/date/DateShortcuts.vue.js +2 -2
  139. package/lib/date/picker/panels/Footer2.vue.js +2 -2
  140. package/lib/date/picker/panels/Shortcuts2.vue.js +2 -2
  141. package/lib/date/picker/style/index.css +1 -1
  142. package/lib/dialog/Dialog.vue.js +3 -3
  143. package/lib/ellipsis/style/index.css +1 -1
  144. package/lib/form/FormItem2.vue.js +35 -7
  145. package/lib/form/FormItemLabel.vue.js +3 -2
  146. package/lib/form/focus-explicit-label.js +28 -0
  147. package/lib/form/style/index.css +1 -1
  148. package/lib/input/base.js +7 -0
  149. package/lib/input/index.js +4 -4
  150. package/lib/layout/style/index.css +1 -1
  151. package/lib/nav-menu/style/index.css +1 -1
  152. package/lib/pagination/PageInput.vue.js +2 -2
  153. package/lib/pagination/style/index.css +2 -2
  154. package/lib/people-select/PeopleSelect.js +22 -49
  155. package/lib/people-select/Person.vue.js +3 -3
  156. package/lib/people-select/emits.js +1 -1
  157. package/lib/people-select/people-select.js +6 -8
  158. package/lib/people-select/presentation.js +3 -1
  159. package/lib/people-select/props.js +9 -3
  160. package/lib/people-select/selection.js +43 -0
  161. package/lib/people-select/style/index.css +6 -0
  162. package/lib/progress/style/index.css +2 -2
  163. package/lib/radio/style/index.css +1 -1
  164. package/lib/rate/style/index.css +1 -1
  165. package/lib/ripple/index.js +57 -1
  166. package/lib/scheduler/style/index.css +1 -1
  167. package/lib/search/HistoryContent.vue.js +4 -4
  168. package/lib/search/props.js +0 -1
  169. package/lib/search/search.vue.js +2 -2
  170. package/lib/select/props.js +2 -0
  171. package/lib/select/select.js +10 -4
  172. package/lib/select/style/index.css +22 -12
  173. package/lib/select/use-select-controller.js +14 -2
  174. package/lib/slider/Slider.vue.js +38 -20
  175. package/lib/slider/SliderInput.vue.js +4 -2
  176. package/lib/slider/style/index.css +2 -2
  177. package/lib/steps/style/index.css +10 -10
  178. package/lib/switch/Switch.vue.js +5 -0
  179. package/lib/switch/style/index.css +1 -1
  180. package/lib/table/structural-slot.js +17 -0
  181. package/lib/table/style/index.css +2 -2
  182. package/lib/table/table-tbody.js +2 -1
  183. package/lib/table/table-td.js +3 -2
  184. package/lib/table/table-th.js +3 -2
  185. package/lib/table/table-thead.js +2 -1
  186. package/lib/table/table-tr.js +3 -2
  187. package/lib/table/table.js +21 -4
  188. package/lib/tabs/style/index.css +1 -1
  189. package/lib/time/picker/Panel2.vue.js +2 -2
  190. package/lib/time/picker/RangePanel2.vue.js +2 -2
  191. package/lib/tree/style/index.css +1 -1
  192. package/lib/tree-select/panel.js +3 -1
  193. package/lib/tree-select/presentation.js +1 -0
  194. package/lib/tree-select/props.js +2 -0
  195. package/lib/tree-select/style/index.css +49 -7
  196. package/lib/trigger/popup-move-focus.js +6 -6
  197. package/lib/trigger/position.js +40 -2
  198. package/lib/trigger/positioner.js +27 -4
  199. package/lib/trigger/trigger.js +1 -1
  200. package/lib/upload/composables/use-upload-queue.js +9 -1
  201. package/lib/upload/composables/use-uploader.js +31 -11
  202. package/lib/upload/upload.vue.js +9 -1
  203. package/package.json +6 -6
  204. package/types/_components/field-presentation/editor-pending.d.ts +3 -0
  205. package/types/_components/field-presentation/with-field-presentation.d.ts +2 -0
  206. package/types/_components/picker-field/range-labels.d.ts +1 -0
  207. package/types/_utils/modal-focus.d.ts +1 -0
  208. package/types/auto-complete/auto-complete.d.ts +9 -0
  209. package/types/auto-complete/index.d.ts +30 -0
  210. package/types/auto-complete/presentation.d.ts +9 -0
  211. package/types/auto-complete/props.d.ts +5 -0
  212. package/types/button/base.d.ts +266 -0
  213. package/types/button/index.d.ts +5 -1
  214. package/types/cascader/Cascader.vue.d.ts +9 -0
  215. package/types/cascader/index.d.ts +30 -0
  216. package/types/cascader/presentation.d.ts +15 -0
  217. package/types/cascader/props.d.ts +5 -0
  218. package/types/cascader/use-cascader-controller.d.ts +4 -0
  219. package/types/checkbox/base.d.ts +361 -0
  220. package/types/checkbox/index.d.ts +5 -1
  221. package/types/date/picker/DateRangePicker.vue.d.ts +12 -496
  222. package/types/date/picker/DateRangePickerPanel.vue.d.ts +12 -496
  223. package/types/date/picker/Picker.vue.d.ts +12 -496
  224. package/types/date/picker/PickerPanel.vue.d.ts +12 -496
  225. package/types/date/picker/panels/Footer.vue.d.ts +3 -124
  226. package/types/date/picker/panels/Shortcuts.vue.d.ts +3 -124
  227. package/types/date/picker/panels/date/Index.vue.d.ts +3 -124
  228. package/types/date/picker/panels/week/Index.vue.d.ts +3 -124
  229. package/types/form/FormItemLabel.vue.d.ts +2 -2
  230. package/types/form/context.d.ts +1 -1
  231. package/types/form/focus-explicit-label.d.ts +2 -0
  232. package/types/input/base.d.ts +481 -0
  233. package/types/input/index.d.ts +5 -1
  234. package/types/people-select/PeopleSelect.d.ts +38 -16
  235. package/types/people-select/emits.d.ts +3 -2
  236. package/types/people-select/index.d.ts +135 -63
  237. package/types/people-select/people-select.d.ts +47 -16
  238. package/types/people-select/presentation.d.ts +46 -16
  239. package/types/people-select/props.d.ts +17 -6
  240. package/types/people-select/selection.d.ts +11 -0
  241. package/types/people-select/types.d.ts +5 -1
  242. package/types/popconfirm/Popconfirm.vue.d.ts +2 -0
  243. package/types/popconfirm/index.d.ts +8 -0
  244. package/types/select/index.d.ts +30 -0
  245. package/types/select/native-editor-owner.d.ts +1 -0
  246. package/types/select/props.d.ts +5 -0
  247. package/types/select/select.d.ts +9 -0
  248. package/types/select/use-select-controller.d.ts +5 -0
  249. package/types/slider/SliderInput.vue.d.ts +4 -0
  250. package/types/table/structural-slot.d.ts +3 -0
  251. package/types/table/table-operation-td.d.ts +2 -0
  252. package/types/time/picker/Panel.vue.d.ts +3 -124
  253. package/types/time/picker/RangePanel.vue.d.ts +6 -248
  254. package/types/time/presentation/TimePanelContent.vue.d.ts +9 -372
  255. package/types/transfer/Transfer.vue.d.ts +4 -0
  256. package/types/transfer/TransferView.vue.d.ts +2 -0
  257. package/types/transfer/index.d.ts +16 -0
  258. package/types/transfer/presentation.d.ts +4 -0
  259. package/types/tree/BaseNode.vue.d.ts +2 -0
  260. package/types/tree/TransitionNodeList.vue.d.ts +2 -0
  261. package/types/tree-select/TreeSelect.vue.d.ts +13 -0
  262. package/types/tree-select/index.d.ts +50 -0
  263. package/types/tree-select/presentation.d.ts +13 -0
  264. package/types/tree-select/props.d.ts +5 -0
  265. package/types/trigger/position.d.ts +1 -0
  266. package/types/typography/EditContent.vue.d.ts +6 -0
  267. package/types/upload/composables/use-upload-queue.d.ts +1 -0
  268. package/types/upload/composables/use-uploader.d.ts +2 -0
  269. package/types/upload/upload.vue.d.ts +3 -3
  270. package/umd/_components/selected-options/style/index.css +33 -15
  271. package/umd/anchor/style/index.css +1 -1
  272. package/umd/auto-complete/style/index.css +7 -2
  273. package/umd/back-top/style/index.css +1 -1
  274. package/umd/button/style/index.css +1 -1
  275. package/umd/carousel/style/index.css +1 -1
  276. package/umd/cascader/style/index.css +36 -9
  277. package/umd/cedar.css +187 -79
  278. package/umd/cedar.js +6 -6
  279. package/umd/checkbox/style/index.css +1 -1
  280. package/umd/date/picker/style/index.css +1 -1
  281. package/umd/ellipsis/style/index.css +1 -1
  282. package/umd/form/style/index.css +1 -1
  283. package/umd/layout/style/index.css +1 -1
  284. package/umd/nav-menu/style/index.css +1 -1
  285. package/umd/pagination/style/index.css +2 -2
  286. package/umd/people-select/style/index.css +6 -0
  287. package/umd/progress/style/index.css +2 -2
  288. package/umd/radio/style/index.css +1 -1
  289. package/umd/rate/style/index.css +1 -1
  290. package/umd/scheduler/style/index.css +1 -1
  291. package/umd/select/style/index.css +22 -12
  292. package/umd/slider/style/index.css +2 -2
  293. package/umd/steps/style/index.css +10 -10
  294. package/umd/switch/style/index.css +1 -1
  295. package/umd/table/style/index.css +2 -2
  296. package/umd/tabs/style/index.css +1 -1
  297. package/umd/tree/style/index.css +1 -1
  298. package/umd/tree-select/style/index.css +49 -7
package/lib/cedar.cjs.js CHANGED
@@ -2435,6 +2435,7 @@ function useSelectionSession(options) {
2435
2435
  if (options.blocked() || settled.value || pending.value || !options.open.value || options.valid?.(draft.value) === false) {
2436
2436
  return false;
2437
2437
  }
2438
+ error.value = "";
2438
2439
  const next = options.clone(draft.value);
2439
2440
  const run = ++epoch;
2440
2441
  const finish = (allowed) => {
@@ -3458,6 +3459,12 @@ const waves = /* @__PURE__ */ new WeakMap();
3458
3459
  function ownedRipples(element2) {
3459
3460
  return Array.from(element2.children).filter((child) => waves.has(child));
3460
3461
  }
3462
+ function stopObserverIfIdle(element2, state) {
3463
+ if (!state.tasker && !ownedRipples(element2).length) {
3464
+ state.migrationObserver?.disconnect();
3465
+ state.migrationObserver = void 0;
3466
+ }
3467
+ }
3461
3468
  function transitionTime(element2, property) {
3462
3469
  const style = element2.ownerDocument.defaultView?.getComputedStyle(element2);
3463
3470
  if (!style) {
@@ -3497,6 +3504,8 @@ function clearTasks(element2) {
3497
3504
  if (!state) {
3498
3505
  return;
3499
3506
  }
3507
+ state.migrationObserver?.disconnect();
3508
+ state.migrationObserver = void 0;
3500
3509
  state.timers.forEach((timer) => window.clearTimeout(timer));
3501
3510
  state.timers.clear();
3502
3511
  state.tasker = null;
@@ -3554,18 +3563,25 @@ function createRipple(event) {
3554
3563
  if (!_ripple) {
3555
3564
  return;
3556
3565
  }
3566
+ syncOwnerDocument(this);
3557
3567
  _ripple.removeRipple();
3558
3568
  if (_ripple.disabled || _ripple.tasker || !context$1.enableRipple) {
3559
3569
  return;
3560
3570
  }
3571
+ watchOwnerDuringGesture(this, _ripple);
3561
3572
  const task = () => {
3562
3573
  const current = () => this._ripple === _ripple && !_ripple.disabled && context$1.enableRipple;
3563
3574
  if (!current()) {
3575
+ if (this._ripple === _ripple) {
3576
+ _ripple.tasker = null;
3577
+ stopObserverIfIdle(this, _ripple);
3578
+ }
3564
3579
  return;
3565
3580
  }
3566
3581
  _ripple.tasker = null;
3567
3582
  const { x, y, centerX, centerY, size } = computeRippleStyles(this, event);
3568
3583
  if (!current()) {
3584
+ if (this._ripple === _ripple) clearTasks(this);
3569
3585
  return;
3570
3586
  }
3571
3587
  const ripple = this.ownerDocument.createElement("div");
@@ -3578,6 +3594,7 @@ function createRipple(event) {
3578
3594
  ripple.dataset.createdAt = String(performance.now());
3579
3595
  setStyles(this);
3580
3596
  if (!current()) {
3597
+ if (this._ripple === _ripple) clearTasks(this);
3581
3598
  return;
3582
3599
  }
3583
3600
  this.appendChild(ripple);
@@ -3585,6 +3602,7 @@ function createRipple(event) {
3585
3602
  waves.set(ripple, wave);
3586
3603
  const expansion = transitionTime(ripple, "transform");
3587
3604
  if (!current() || waves.get(ripple) !== wave) {
3605
+ if (!current() && this._ripple === _ripple) clearTasks(this);
3588
3606
  return;
3589
3607
  }
3590
3608
  wave.expandUntil += expansion;
@@ -3593,10 +3611,12 @@ function createRipple(event) {
3593
3611
  () => {
3594
3612
  const wave2 = waves.get(ripple);
3595
3613
  if (!wave2 || !current()) {
3614
+ if (!current() && this._ripple === _ripple) clearTasks(this);
3596
3615
  return;
3597
3616
  }
3598
3617
  const expansion2 = transitionTime(ripple, "transform");
3599
3618
  if (!current() || waves.get(ripple) !== wave2) {
3619
+ if (!current() && this._ripple === _ripple) clearTasks(this);
3600
3620
  return;
3601
3621
  }
3602
3622
  wave2.expandUntil = performance.now() + expansion2;
@@ -3616,6 +3636,7 @@ function removeRipple() {
3616
3636
  const task = () => {
3617
3637
  const ripples = ownedRipples(this);
3618
3638
  if (!ripples.length) {
3639
+ stopObserverIfIdle(this, _ripple);
3619
3640
  return;
3620
3641
  }
3621
3642
  const lastRipple = ripples[ripples.length - 1];
@@ -3640,7 +3661,10 @@ function removeRipple() {
3640
3661
  () => {
3641
3662
  waves.delete(lastRipple);
3642
3663
  lastRipple.remove();
3643
- if (!ownedRipples(this).length) restoreStyles(this);
3664
+ if (!ownedRipples(this).length) {
3665
+ restoreStyles(this);
3666
+ stopObserverIfIdle(this, _ripple);
3667
+ }
3644
3668
  },
3645
3669
  Math.max(MINIMUM_REMOVAL_DELAY, transitionTime(lastRipple, "opacity"))
3646
3670
  );
@@ -3659,6 +3683,7 @@ function forbidRippleTask() {
3659
3683
  _ripple.timers.delete(_ripple.tasker);
3660
3684
  }
3661
3685
  _ripple.tasker = null;
3686
+ stopObserverIfIdle(this, _ripple);
3662
3687
  }
3663
3688
  function createTouchRipple(event) {
3664
3689
  if (this._ripple) {
@@ -3694,6 +3719,9 @@ function removeKeyboardRipple(event) {
3694
3719
  }
3695
3720
  const releaseGroups = /* @__PURE__ */ new WeakMap();
3696
3721
  const releaseEvents = ["touchend", "mouseup", "touchcancel", "dragend"];
3722
+ function releaseOnMovedHost() {
3723
+ if (this._ripple && this._ripple.document !== this.ownerDocument) syncOwnerDocument(this);
3724
+ }
3697
3725
  function bindListeners(el) {
3698
3726
  const state = el._ripple;
3699
3727
  if (!state || state.listening || state.disabled) return;
@@ -3701,6 +3729,9 @@ function bindListeners(el) {
3701
3729
  el.addEventListener("touchstart", createTouchRipple, { passive: true });
3702
3730
  el.addEventListener("mousedown", createMouseRipple, { passive: true });
3703
3731
  el.addEventListener("touchmove", forbidRippleTask, { passive: true });
3732
+ el.addEventListener("mouseup", releaseOnMovedHost);
3733
+ el.addEventListener("touchend", releaseOnMovedHost);
3734
+ el.addEventListener("touchcancel", releaseOnMovedHost);
3704
3735
  el.addEventListener("dragstart", removeRipple, { passive: true });
3705
3736
  el.addEventListener("keydown", createKeyboardRipple);
3706
3737
  el.addEventListener("keyup", removeKeyboardRipple);
@@ -3732,6 +3763,9 @@ function unbindListeners(el) {
3732
3763
  el.removeEventListener("touchstart", createTouchRipple);
3733
3764
  el.removeEventListener("mousedown", createMouseRipple);
3734
3765
  el.removeEventListener("touchmove", forbidRippleTask);
3766
+ el.removeEventListener("mouseup", releaseOnMovedHost);
3767
+ el.removeEventListener("touchend", releaseOnMovedHost);
3768
+ el.removeEventListener("touchcancel", releaseOnMovedHost);
3735
3769
  el.removeEventListener("dragstart", removeRipple);
3736
3770
  const group = releaseGroups.get(state.document);
3737
3771
  if (group && group.hosts.delete(el) && !group.hosts.size) {
@@ -3742,6 +3776,28 @@ function unbindListeners(el) {
3742
3776
  releaseGroups.delete(state.document);
3743
3777
  }
3744
3778
  }
3779
+ function syncOwnerDocument(el) {
3780
+ const state = el._ripple;
3781
+ if (!state || state.document === el.ownerDocument) return;
3782
+ clearTasks(el);
3783
+ unbindListeners(el);
3784
+ state.document = el.ownerDocument;
3785
+ bindListeners(el);
3786
+ }
3787
+ function watchOwnerDuringGesture(el, state) {
3788
+ if (state.migrationObserver || typeof MutationObserver === "undefined") return;
3789
+ let connected = el.isConnected;
3790
+ const observer = new MutationObserver(() => {
3791
+ if (el._ripple !== state) return;
3792
+ if (state.document !== el.ownerDocument) syncOwnerDocument(el);
3793
+ else if (connected && !el.isConnected) clearTasks(el);
3794
+ else if (el.isConnected) connected = true;
3795
+ });
3796
+ const root = el.getRootNode();
3797
+ observer.observe(root, { childList: true, subtree: true });
3798
+ if (root !== state.document) observer.observe(state.document, { childList: true, subtree: true });
3799
+ state.migrationObserver = observer;
3800
+ }
3745
3801
  function mounted(el, binding) {
3746
3802
  el._ripple = {
3747
3803
  document: el.ownerDocument,
@@ -3761,6 +3817,7 @@ function unmounted(el) {
3761
3817
  delete el._ripple;
3762
3818
  }
3763
3819
  function updated(el, binding) {
3820
+ syncOwnerDocument(el);
3764
3821
  const newBinding = {
3765
3822
  color: binding.value?.color,
3766
3823
  disabled: binding.value?.disabled
@@ -4170,59 +4227,7 @@ const _sfc_main$35 = /* @__PURE__ */ vue.defineComponent({
4170
4227
  };
4171
4228
  }
4172
4229
  });
4173
- const _sfc_main$34 = /* @__PURE__ */ vue.defineComponent({
4174
- ...{
4175
- name: createNamespace$1("button-group").name
4176
- },
4177
- __name: "ButtonGroup",
4178
- props: buttonGroupProps,
4179
- setup(__props, { expose: __expose }) {
4180
- const { n: n2, classes: classes2 } = createNamespace$1("button-group");
4181
- const props2 = __props;
4182
- const { bindButtons } = useButtons();
4183
- const defaultSize = useButtonDefaultSize();
4184
- const buttonGroupProvider = {
4185
- elevation: vue.computed(() => props2.elevation),
4186
- status: vue.computed(() => props2.status),
4187
- size: vue.computed(() => props2.size ?? defaultSize.value),
4188
- variant: vue.computed(() => props2.variant),
4189
- color: vue.computed(() => props2.color),
4190
- textColor: vue.computed(() => props2.textColor),
4191
- disabled: vue.computed(() => props2.disabled),
4192
- stacked: vue.computed(() => props2.stacked),
4193
- vertical: vue.computed(() => props2.vertical)
4194
- };
4195
- bindButtons(buttonGroupProvider);
4196
- __expose({
4197
- buttonGroupProvider
4198
- });
4199
- return (_ctx, _cache) => {
4200
- return vue.openBlock(), vue.createElementBlock("div", {
4201
- role: "group",
4202
- class: vue.normalizeClass(
4203
- vue.unref(classes2)(
4204
- vue.unref(n2)(),
4205
- vue.unref(n2)("$--box"),
4206
- vue.unref(n2)(`--variant-${_ctx.variant}`),
4207
- [_ctx.vertical, vue.unref(n2)("--vertical"), vue.unref(n2)("--horizontal")],
4208
- [_ctx.variant === "default" && !_ctx.disabled, vue.unref(formatElevation)(_ctx.elevation, 2)]
4209
- )
4210
- )
4211
- }, [
4212
- vue.renderSlot(_ctx.$slots, "default")
4213
- ], 2);
4214
- };
4215
- }
4216
- });
4217
- const Button = withInstall(
4218
- _sfc_main$35,
4219
- Object.assign(_sfc_main$35, {
4220
- Group: _sfc_main$34
4221
- }),
4222
- { components: [_sfc_main$35, _sfc_main$34] }
4223
- );
4224
- const _ButtonComponent = Button;
4225
- const _ButtonGroupComponent = _sfc_main$34;
4230
+ const Button$1 = withPropsDefaultsSetter(_sfc_main$35, _sfc_main$35.props);
4226
4231
  const editorAuxiliaryActions = Symbol("editor-auxiliary-actions");
4227
4232
  const labelKey = Symbol("form-item-label");
4228
4233
  function provideFormItemLabel(options) {
@@ -4327,14 +4332,14 @@ const _hoisted_2$I = {
4327
4332
  role: "heading",
4328
4333
  "aria-level": "2"
4329
4334
  };
4330
- const _hoisted_3$n = ["aria-label", "disabled"];
4335
+ const _hoisted_3$o = ["aria-label", "disabled"];
4331
4336
  const _hoisted_4$f = ["inert"];
4332
4337
  const _hoisted_5$7 = {
4333
4338
  key: 1,
4334
4339
  role: "status"
4335
4340
  };
4336
4341
  const _hoisted_6$4 = ["aria-label", "disabled"];
4337
- const _sfc_main$33 = /* @__PURE__ */ vue.defineComponent({
4342
+ const _sfc_main$34 = /* @__PURE__ */ vue.defineComponent({
4338
4343
  ...{ name: createNamespace$1("field-editor-panel").name },
4339
4344
  __name: "EditorPanel",
4340
4345
  props: {
@@ -4413,7 +4418,7 @@ const _sfc_main$33 = /* @__PURE__ */ vue.defineComponent({
4413
4418
  "aria-label": vue.unref(closeText),
4414
4419
  disabled: __props.pending,
4415
4420
  onClick: _cache[0] || (_cache[0] = ($event) => !__props.pending && _ctx.$emit("cancel"))
4416
- }, " × ", 10, _hoisted_3$n)
4421
+ }, " × ", 10, _hoisted_3$o)
4417
4422
  ], 2)) : vue.createCommentVNode("", true),
4418
4423
  vue.createElementVNode("div", {
4419
4424
  ref_key: "bodyElement",
@@ -4438,7 +4443,7 @@ const _sfc_main$33 = /* @__PURE__ */ vue.defineComponent({
4438
4443
  }, [
4439
4444
  auxiliaryActions.value ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(auxiliaryActions.value), { key: 0 })) : vue.createCommentVNode("", true)
4440
4445
  ], 2),
4441
- __props.clearable ? (vue.openBlock(), vue.createBlock(vue.unref(Button), {
4446
+ __props.clearable ? (vue.openBlock(), vue.createBlock(vue.unref(Button$1), {
4442
4447
  key: 0,
4443
4448
  variant: "text",
4444
4449
  disabled: __props.disabled || __props.pending,
@@ -4451,7 +4456,7 @@ const _sfc_main$33 = /* @__PURE__ */ vue.defineComponent({
4451
4456
  ]),
4452
4457
  _: 1
4453
4458
  }, 8, ["disabled"])) : vue.createCommentVNode("", true),
4454
- __props.needConfirm ? (vue.openBlock(), vue.createBlock(vue.unref(Button), {
4459
+ __props.needConfirm ? (vue.openBlock(), vue.createBlock(vue.unref(Button$1), {
4455
4460
  key: 1,
4456
4461
  status: "primary",
4457
4462
  loading: __props.pending,
@@ -4515,9 +4520,9 @@ function useFormErrorDescription() {
4515
4520
  }
4516
4521
  const _hoisted_1$1w = ["aria-busy", "title"];
4517
4522
  const _hoisted_2$H = ["id", "role", "aria-readonly", "aria-disabled", "aria-describedby"];
4518
- const _hoisted_3$m = ["id", "disabled", "aria-label", "aria-describedby", "aria-expanded"];
4523
+ const _hoisted_3$n = ["id", "disabled", "aria-label", "aria-describedby", "aria-expanded"];
4519
4524
  const _hoisted_4$e = ["id", "aria-label", "aria-labelledby", "aria-describedby", "title"];
4520
- const _sfc_main$32 = /* @__PURE__ */ vue.defineComponent({
4525
+ const _sfc_main$33 = /* @__PURE__ */ vue.defineComponent({
4521
4526
  ...{
4522
4527
  name: createNamespace$1("field-reference").name,
4523
4528
  inheritAttrs: false
@@ -4592,7 +4597,7 @@ const _sfc_main$32 = /* @__PURE__ */ vue.defineComponent({
4592
4597
  ]
4593
4598
  }), [
4594
4599
  vue.createElementVNode("span", null, vue.toDisplayString(__props.text || __props.placeholder || "—"), 1)
4595
- ], 16, _hoisted_3$m)),
4600
+ ], 16, _hoisted_3$n)),
4596
4601
  vue.createVNode(_sfc_main$37, { loading: __props.loading }, null, 8, ["loading"]),
4597
4602
  !__props.disabled ? (vue.openBlock(), vue.createElementBlock("button", {
4598
4603
  key: 3,
@@ -4622,7 +4627,7 @@ const _sfc_main$32 = /* @__PURE__ */ vue.defineComponent({
4622
4627
  });
4623
4628
  const _hoisted_1$1v = ["aria-busy"];
4624
4629
  const _hoisted_2$G = ["dir", "aria-label", "aria-labelledby"];
4625
- const _sfc_main$31 = /* @__PURE__ */ vue.defineComponent({
4630
+ const _sfc_main$32 = /* @__PURE__ */ vue.defineComponent({
4626
4631
  ...{
4627
4632
  name: createNamespace$1("field-presentation").name,
4628
4633
  inheritAttrs: false
@@ -4924,7 +4929,7 @@ const _sfc_main$31 = /* @__PURE__ */ vue.defineComponent({
4924
4929
  class: vue.normalizeClass(vue.unref(n2)("anchor")),
4925
4930
  style: vue.normalizeStyle({ visibility: __props.open ? "hidden" : void 0 })
4926
4931
  }, [
4927
- vue.createVNode(_sfc_main$32, vue.mergeProps(_ctx.$attrs, {
4932
+ vue.createVNode(_sfc_main$33, vue.mergeProps(_ctx.$attrs, {
4928
4933
  id: __props.open && !__props.retainReferenceIdWhenOpen ? void 0 : _ctx.$attrs.id,
4929
4934
  ref_key: "reference",
4930
4935
  ref: reference,
@@ -4960,7 +4965,7 @@ const _sfc_main$31 = /* @__PURE__ */ vue.defineComponent({
4960
4965
  "aria-labelledby": typeof _ctx.$attrs["aria-labelledby"] === "string" ? _ctx.$attrs["aria-labelledby"] : void 0,
4961
4966
  "aria-modal": "false"
4962
4967
  }), [
4963
- vue.createVNode(_sfc_main$33, {
4968
+ vue.createVNode(_sfc_main$34, {
4964
4969
  ref_key: "panel",
4965
4970
  ref: panel2,
4966
4971
  compact: "",
@@ -4989,6 +4994,7 @@ const _sfc_main$31 = /* @__PURE__ */ vue.defineComponent({
4989
4994
  };
4990
4995
  }
4991
4996
  });
4997
+ const fieldEditorControlPending = Symbol("field-editor-control-pending");
4992
4998
  function cloneValue(value, seen = /* @__PURE__ */ new WeakMap()) {
4993
4999
  if (value instanceof Date) {
4994
5000
  return new Date(value.getTime());
@@ -5006,7 +5012,7 @@ function cloneValue(value, seen = /* @__PURE__ */ new WeakMap()) {
5006
5012
  }
5007
5013
  return result;
5008
5014
  }
5009
- function sameFieldValue(left, right, seen = /* @__PURE__ */ new WeakMap()) {
5015
+ function sameFieldValue(left, right, seen = /* @__PURE__ */ new WeakMap(), reverse = /* @__PURE__ */ new WeakMap()) {
5010
5016
  if (Object.is(left, right)) {
5011
5017
  return true;
5012
5018
  }
@@ -5022,12 +5028,16 @@ function sameFieldValue(left, right, seen = /* @__PURE__ */ new WeakMap()) {
5022
5028
  if (!Array.isArray(left) && Object.getPrototypeOf(left) !== Object.prototype) {
5023
5029
  return false;
5024
5030
  }
5025
- if (seen.get(left) === right) {
5026
- return true;
5031
+ if (seen.has(left) || reverse.has(right)) {
5032
+ return seen.get(left) === right && reverse.get(right) === left;
5027
5033
  }
5028
5034
  seen.set(left, right);
5035
+ reverse.set(right, left);
5029
5036
  const keys = Object.keys(left);
5030
- return keys.length === Object.keys(right).length && keys.every((key) => Object.prototype.hasOwnProperty.call(right, key) && sameFieldValue(left[key], right[key], seen));
5037
+ const result = keys.length === Object.keys(right).length && keys.every((key) => Object.prototype.hasOwnProperty.call(right, key) && sameFieldValue(left[key], right[key], seen, reverse));
5038
+ seen.delete(left);
5039
+ reverse.delete(right);
5040
+ return result;
5031
5041
  }
5032
5042
  function formatFieldValue(value) {
5033
5043
  if (value == null || value === "") {
@@ -5103,6 +5113,8 @@ function withFieldPresentation(Base2, adapter = {}) {
5103
5113
  readonly: vue.computed(() => props2.readonly ?? inputGroup?.readonly.value),
5104
5114
  size: vue.computed(() => props2.size ?? inputGroup?.size.value)
5105
5115
  });
5116
+ const editorControlPending = vue.ref(false);
5117
+ vue.provide(fieldEditorControlPending, editorControlPending);
5106
5118
  const inner = vue.shallowRef();
5107
5119
  const host = vue.ref();
5108
5120
  const localValue = vue.shallowRef(props2.defaultValue ?? props2.modelValue);
@@ -5223,9 +5235,22 @@ function withFieldPresentation(Base2, adapter = {}) {
5223
5235
  }
5224
5236
  }
5225
5237
  });
5238
+ const needConfirm = vue.computed(() => !adapter.selectionConfirmation || (props2.needConfirm ?? Boolean(props2.multiple)));
5239
+ const showConfirm = vue.computed(
5240
+ () => needConfirm.value || adapter.selectionConfirmation === "select" && !sameFieldValue(session.draft.value, value.value)
5241
+ );
5242
+ const completeSelection = () => {
5243
+ const candidate = cloneValue(session.draft.value);
5244
+ void Promise.resolve(session.commit()).then((accepted) => {
5245
+ if (!accepted && open2.value && !session.pending.value && sameFieldValue(session.draft.value, candidate)) {
5246
+ session.update(value.value);
5247
+ }
5248
+ });
5249
+ };
5226
5250
  const updateDraft = (next) => {
5227
5251
  if (open2.value && !blocked2.value) {
5228
5252
  session.update(next);
5253
+ if (adapter.selectionConfirmation === "update" && !needConfirm.value) completeSelection();
5229
5254
  }
5230
5255
  };
5231
5256
  const clearDraft = () => {
@@ -5234,6 +5259,7 @@ function withFieldPresentation(Base2, adapter = {}) {
5234
5259
  }
5235
5260
  const fallback = "uncheckedValue" in props2 ? props2.uncheckedValue : typeof props2.defaultValue === "boolean" ? false : Array.isArray(value.value) ? [] : props2.defaultValue;
5236
5261
  session.update(resolveEmptyValue(props2, fallback));
5262
+ if (!needConfirm.value) void session.commit();
5237
5263
  };
5238
5264
  const clearReference = async () => {
5239
5265
  if (blocked2.value || selectionPaused.value || session.pending.value) {
@@ -5251,8 +5277,10 @@ function withFieldPresentation(Base2, adapter = {}) {
5251
5277
  state.item?.resetValidation?.();
5252
5278
  };
5253
5279
  const confirm = async (event) => {
5280
+ if (editorControlPending.value) return false;
5254
5281
  inner.value?.blur?.();
5255
5282
  await vue.nextTick();
5283
+ if (editorControlPending.value) return false;
5256
5284
  return session.commit(event);
5257
5285
  };
5258
5286
  vue.watch(
@@ -5462,6 +5490,9 @@ function withFieldPresentation(Base2, adapter = {}) {
5462
5490
  (...args) => {
5463
5491
  if (event === "update:modelValue") {
5464
5492
  updateDraft(args[0]);
5493
+ } else if (event === "select" && adapter.selectionConfirmation === "select" && !needConfirm.value) {
5494
+ emit(event, ...args);
5495
+ void session.commit();
5465
5496
  } else if (adapter.commitEvents?.[event]) {
5466
5497
  if (open2.value && !blocked2.value && !session.pending.value) commitNotifications.set(event, args);
5467
5498
  } else if (event !== "change" && event !== "update:open" && event !== "open-change") {
@@ -5500,7 +5531,7 @@ function withFieldPresentation(Base2, adapter = {}) {
5500
5531
  const textProps = source && sourceKey ? { ...props2, [sourceKey]: source.options.value } : props2;
5501
5532
  const text = (adapter.text ?? formatFieldValue)(value.value, textProps);
5502
5533
  return vue.h(
5503
- _sfc_main$31,
5534
+ _sfc_main$32,
5504
5535
  {
5505
5536
  ...attrs,
5506
5537
  ...props2.textAlign ? {
@@ -5520,12 +5551,12 @@ function withFieldPresentation(Base2, adapter = {}) {
5520
5551
  open: open2.value,
5521
5552
  disabled: form.mergedDisabled.value,
5522
5553
  readonly: form.mergedReadonly.value,
5523
- needConfirm: true,
5554
+ needConfirm: showConfirm.value,
5524
5555
  clearable: props2.clearable && !selectionPaused.value,
5525
5556
  onClear: clearDraft,
5526
5557
  loading: Boolean(props2.loading || adapter.pauseSelectionWhileLoading && source?.loading.value),
5527
5558
  pending: session.pending.value,
5528
- confirmDisabled: selectionPaused.value || !validDraft(session.draft.value),
5559
+ confirmDisabled: editorControlPending.value || selectionPaused.value || !validDraft(session.draft.value),
5529
5560
  error: session.error.value || state.item?.message?.value,
5530
5561
  onOpen: setOpen,
5531
5562
  onEditorReady,
@@ -5589,7 +5620,7 @@ function withFieldPresentation(Base2, adapter = {}) {
5589
5620
  const selectionListStyle = Symbol("selection-list-style");
5590
5621
  const selectionEditorSurface = Symbol("selection-editor-surface");
5591
5622
  const mobile = false;
5592
- const _sfc_main$30 = /* @__PURE__ */ vue.defineComponent({
5623
+ const _sfc_main$31 = /* @__PURE__ */ vue.defineComponent({
5593
5624
  ...{ name: createNamespace$1("selection-editor").name },
5594
5625
  __name: "SelectionEditor",
5595
5626
  props: {
@@ -5820,7 +5851,7 @@ const VirtualListItem = /* @__PURE__ */ vue.defineComponent({
5820
5851
  };
5821
5852
  }
5822
5853
  });
5823
- const _sfc_main$2$ = vue.defineComponent({
5854
+ const _sfc_main$30 = vue.defineComponent({
5824
5855
  name: createNamespace$1("virtual-list").name,
5825
5856
  components: { VirtualListItem },
5826
5857
  props: {
@@ -5920,6 +5951,8 @@ const _sfc_main$2$ = vue.defineComponent({
5920
5951
  await vue.nextTick();
5921
5952
  updateViewport();
5922
5953
  });
5954
+ let retainedInlineOffset;
5955
+ let retainedScrollTop;
5923
5956
  let scrollRequest = 0;
5924
5957
  let commandedScroll;
5925
5958
  let mounted2 = false;
@@ -5930,10 +5963,25 @@ const _sfc_main$2$ = vue.defineComponent({
5930
5963
  vue.onMounted(() => {
5931
5964
  mounted2 = true;
5932
5965
  });
5933
- vue.onActivated(() => {
5934
- if (!disposed) active = true;
5966
+ vue.onActivated(async () => {
5967
+ if (disposed) return;
5968
+ active = true;
5969
+ const element2 = containerRef.value;
5970
+ const request = scrollRequest;
5971
+ const retained = retainedScrollTop;
5972
+ const retainedInline = retainedInlineOffset;
5973
+ retainedScrollTop = void 0;
5974
+ retainedInlineOffset = void 0;
5975
+ if (element2 && retainedInline !== void 0 && isCurrent(request, element2) && inlineScrollLeft(element2) === 0) setInlineScrollLeft(element2, retainedInline);
5976
+ await vue.nextTick();
5977
+ if (element2 && retained !== void 0 && isCurrent(request, element2) && element2.scrollTop === 0) {
5978
+ element2.scrollTop = retained;
5979
+ if (virtualEnabled.value) setStart(getStartByScroll(element2.scrollTop));
5980
+ }
5935
5981
  });
5936
5982
  vue.onDeactivated(() => {
5983
+ retainedScrollTop = scrollOffset.value;
5984
+ retainedInlineOffset = readingOffset;
5937
5985
  active = false;
5938
5986
  scrollRequest++;
5939
5987
  commandedScroll = void 0;
@@ -6035,6 +6083,7 @@ const _sfc_main$2$ = vue.defineComponent({
6035
6083
  if (isNumber(options)) {
6036
6084
  if (Number.isFinite(options)) {
6037
6085
  element2.scrollTop = Math.max(0, options);
6086
+ scrollOffset.value = element2.scrollTop;
6038
6087
  if (virtualEnabled.value) setStart(getStartByScroll(element2.scrollTop));
6039
6088
  }
6040
6089
  return;
@@ -6146,7 +6195,7 @@ function _sfc_render$13(_ctx, _cache, $props, $setup, $data, $options) {
6146
6195
  _: 3
6147
6196
  }, 40, ["class", "style", "onScroll"]);
6148
6197
  }
6149
- const VirtualList = /* @__PURE__ */ _export_sfc(_sfc_main$2$, [["render", _sfc_render$13]]);
6198
+ const VirtualList = /* @__PURE__ */ _export_sfc(_sfc_main$30, [["render", _sfc_render$13]]);
6150
6199
  function isValidTextInputMaxLength(value) {
6151
6200
  if (typeof value === "number") {
6152
6201
  return Number.isFinite(value) && value >= 0;
@@ -6393,7 +6442,7 @@ function useFieldGeometry(root, middle) {
6393
6442
  }
6394
6443
  const _hoisted_1$1u = ["for"];
6395
6444
  const _hoisted_2$F = ["aria-label"];
6396
- const _sfc_main$2_ = /* @__PURE__ */ vue.defineComponent({
6445
+ const _sfc_main$2$ = /* @__PURE__ */ vue.defineComponent({
6397
6446
  ...{ name: createNamespace$1("field-decorator").name },
6398
6447
  __name: "FieldDecorator",
6399
6448
  props: { ...fieldDecoratorProps, decorativeHint: Boolean },
@@ -6553,9 +6602,9 @@ const _sfc_main$2_ = /* @__PURE__ */ vue.defineComponent({
6553
6602
  };
6554
6603
  }
6555
6604
  });
6556
- const FieldDecorator = withInstall(_sfc_main$2_);
6605
+ const FieldDecorator = withInstall(_sfc_main$2$);
6557
6606
  const _FieldDecoratorComponent = FieldDecorator;
6558
- const _sfc_main$2Z = /* @__PURE__ */ vue.defineComponent({
6607
+ const _sfc_main$2_ = /* @__PURE__ */ vue.defineComponent({
6559
6608
  ...{ name: createNamespace$1("input-feedback").name },
6560
6609
  __name: "InputFeedback",
6561
6610
  props: {
@@ -6867,7 +6916,7 @@ function useInputValue(props2, emitUpdate, emitChange) {
6867
6916
  };
6868
6917
  }
6869
6918
  const _hoisted_1$1t = ["id", "aria-busy", "autocomplete", "value", "type", "disabled", "readonly", "placeholder", "aria-label", "aria-describedby", "aria-invalid", "autofocus", "enterkeyhint", "inputmode"];
6870
- const _sfc_main$2Y = /* @__PURE__ */ vue.defineComponent({
6919
+ const _sfc_main$2Z = /* @__PURE__ */ vue.defineComponent({
6871
6920
  ...{ name: createNamespace$1("input").name, inheritAttrs: false },
6872
6921
  __name: "input",
6873
6922
  props: inputProps,
@@ -7138,7 +7187,7 @@ const _sfc_main$2Y = /* @__PURE__ */ vue.defineComponent({
7138
7187
  onMousedown: handleMousedown,
7139
7188
  onClick: handleClick
7140
7189
  }), [
7141
- vue.createVNode(_sfc_main$31, {
7190
+ vue.createVNode(_sfc_main$32, {
7142
7191
  id: inputId.value,
7143
7192
  ref_key: "presentationRef",
7144
7193
  ref: presentationRef,
@@ -7240,7 +7289,7 @@ const _sfc_main$2Y = /* @__PURE__ */ vue.defineComponent({
7240
7289
  class: vue.normalizeClass(vue.unref(n2)("word-limit"))
7241
7290
  }, vue.toDisplayString(vue.unref(valueLength)) + "/" + vue.toDisplayString(vue.unref(maxLength)), 3)) : vue.createCommentVNode("", true),
7242
7291
  vue.renderSlot(_ctx.$slots, "suffix"),
7243
- vue.createVNode(_sfc_main$2Z, { status: vue.unref(feedback) }, null, 8, ["status"])
7292
+ vue.createVNode(_sfc_main$2_, { status: vue.unref(feedback) }, null, 8, ["status"])
7244
7293
  ]),
7245
7294
  key: "2"
7246
7295
  } : void 0
@@ -7260,164 +7309,7 @@ const _sfc_main$2Y = /* @__PURE__ */ vue.defineComponent({
7260
7309
  };
7261
7310
  }
7262
7311
  });
7263
- const _sfc_main$2X = /* @__PURE__ */ vue.defineComponent({
7264
- ...{ name: createNamespace$1("input-group").name },
7265
- __name: "InputGroup",
7266
- props: inputGroupProps,
7267
- setup(__props) {
7268
- const props2 = __props;
7269
- const { n: n2, classes: classes2 } = createNamespace$1("input-group");
7270
- const { group, mergedSize, mergedDisabled, mergedReadonly } = useInputForm(props2);
7271
- const mergedVariant = vue.computed(() => props2.variant ?? group?.variant.value ?? "filled");
7272
- vue.provide(inputGroupKey, {
7273
- size: mergedSize,
7274
- disabled: mergedDisabled,
7275
- readonly: mergedReadonly,
7276
- variant: mergedVariant,
7277
- hint: vue.computed(() => props2.hint ?? group?.hint.value)
7278
- });
7279
- return (_ctx, _cache) => {
7280
- return vue.openBlock(), vue.createElementBlock("div", {
7281
- class: vue.normalizeClass(vue.unref(classes2)(vue.unref(n2)(), vue.unref(n2)(`--size-${vue.unref(mergedSize)}`), vue.unref(n2)(`--variant-${mergedVariant.value}`), [vue.unref(mergedDisabled), vue.unref(n2)("--disabled")])),
7282
- role: "group"
7283
- }, [
7284
- vue.renderSlot(_ctx.$slots, "default")
7285
- ], 2);
7286
- };
7287
- }
7288
- });
7289
- const _sfc_main$2W = /* @__PURE__ */ vue.defineComponent({
7290
- ...{ name: createNamespace$1("input-group-label").name },
7291
- __name: "InputGroupLabel",
7292
- setup(__props) {
7293
- const { n: n2 } = createNamespace$1("input-group-label");
7294
- return (_ctx, _cache) => {
7295
- return vue.openBlock(), vue.createElementBlock("span", {
7296
- class: vue.normalizeClass(vue.unref(n2)())
7297
- }, [
7298
- vue.renderSlot(_ctx.$slots, "default")
7299
- ], 2);
7300
- };
7301
- }
7302
- });
7303
- const _hoisted_1$1s = ["disabled", "aria-label", "aria-pressed"];
7304
- const _sfc_main$2V = /* @__PURE__ */ vue.defineComponent({
7305
- ...{ name: createNamespace$1("input-password").name, inheritAttrs: false },
7306
- __name: "InputPassword",
7307
- props: inputPasswordProps,
7308
- emits: ["visibility-change", "update:visibility", "update:open", "update:modelValue", "input", "change", "press-enter", "keydown", "clear", "focus", "blur", "click"],
7309
- setup(__props, { expose: __expose, emit: __emit }) {
7310
- const props2 = __props;
7311
- const emit = __emit;
7312
- const { n: n2 } = createNamespace$1("input-password");
7313
- const { t } = useI18n();
7314
- const attrs = vue.useAttrs();
7315
- const slots = vue.useSlots();
7316
- const inputRef = vue.ref();
7317
- const localVisibility = vue.ref(props2.defaultVisibility);
7318
- const mergedVisible = vue.computed(() => props2.visibility ?? localVisibility.value);
7319
- const { mergedDisabled } = useInputForm(props2);
7320
- const forwardedSlots = vue.computed(() => Object.keys(slots).filter((name2) => name2 !== "suffix"));
7321
- const inputBindings = vue.computed(() => {
7322
- const fields = {};
7323
- for (const key of Object.keys(inputProps)) {
7324
- fields[key] = props2[key];
7325
- }
7326
- return { ...fields, ...attrs };
7327
- });
7328
- const inputListeners = {
7329
- "update:open": (...args) => emit("update:open", ...args),
7330
- "update:modelValue": (...args) => emit("update:modelValue", ...args),
7331
- input: (...args) => emit("input", ...args),
7332
- change: (...args) => emit("change", ...args),
7333
- "press-enter": (...args) => emit("press-enter", ...args),
7334
- keydown: (...args) => emit("keydown", ...args),
7335
- clear: (...args) => emit("clear", ...args),
7336
- focus: (...args) => emit("focus", ...args),
7337
- blur: (...args) => emit("blur", ...args),
7338
- click: (...args) => emit("click", ...args)
7339
- };
7340
- function toggleVisibility() {
7341
- if (mergedDisabled.value) {
7342
- return;
7343
- }
7344
- const nextValue = !mergedVisible.value;
7345
- localVisibility.value = nextValue;
7346
- emit("visibility-change", nextValue);
7347
- emit("update:visibility", nextValue);
7348
- }
7349
- function focus(options) {
7350
- inputRef.value?.focus(options);
7351
- }
7352
- function blur() {
7353
- inputRef.value?.blur();
7354
- }
7355
- function select() {
7356
- inputRef.value?.select();
7357
- }
7358
- __expose({ inputRef, focus, blur, select });
7359
- return (_ctx, _cache) => {
7360
- return vue.openBlock(), vue.createElementBlock("div", {
7361
- class: vue.normalizeClass(vue.unref(n2)())
7362
- }, [
7363
- vue.createVNode(_sfc_main$2Y, vue.mergeProps({
7364
- ref_key: "inputRef",
7365
- ref: inputRef
7366
- }, inputBindings.value, {
7367
- type: mergedVisible.value ? "text" : "password"
7368
- }, vue.toHandlers(inputListeners)), vue.createSlots({ _: 2 }, [
7369
- vue.renderList(forwardedSlots.value, (slotName) => {
7370
- return {
7371
- name: slotName,
7372
- fn: vue.withCtx((scope) => [
7373
- vue.renderSlot(_ctx.$slots, slotName, vue.normalizeProps(vue.guardReactiveProps(scope)))
7374
- ])
7375
- };
7376
- }),
7377
- _ctx.visibilityToggle || _ctx.$slots.suffix ? {
7378
- name: "suffix",
7379
- fn: vue.withCtx(() => [
7380
- _ctx.visibilityToggle ? (vue.openBlock(), vue.createElementBlock("button", {
7381
- key: 0,
7382
- type: "button",
7383
- class: vue.normalizeClass(vue.unref(n2)("toggle")),
7384
- disabled: vue.unref(mergedDisabled),
7385
- "aria-label": vue.unref(t)(mergedVisible.value ? "common.hidePassword" : "common.showPassword"),
7386
- "aria-pressed": mergedVisible.value,
7387
- onMousedown: _cache[0] || (_cache[0] = vue.withModifiers(() => {
7388
- }, ["prevent"])),
7389
- onClick: toggleVisibility
7390
- }, [
7391
- mergedVisible.value ? (vue.openBlock(), vue.createBlock(vue.unref(iconsVue.IconEyeInvisible), {
7392
- key: 0,
7393
- "aria-hidden": "true"
7394
- })) : (vue.openBlock(), vue.createBlock(vue.unref(iconsVue.IconEye), {
7395
- key: 1,
7396
- "aria-hidden": "true"
7397
- }))
7398
- ], 42, _hoisted_1$1s)) : vue.createCommentVNode("", true),
7399
- vue.renderSlot(_ctx.$slots, "suffix")
7400
- ]),
7401
- key: "0"
7402
- } : void 0
7403
- ]), 1040, ["type"])
7404
- ], 2);
7405
- };
7406
- }
7407
- });
7408
- const Input = withInstall(
7409
- _sfc_main$2Y,
7410
- Object.assign(_sfc_main$2Y, {
7411
- Password: _sfc_main$2V,
7412
- Group: _sfc_main$2X,
7413
- GroupLabel: _sfc_main$2W
7414
- }),
7415
- { components: [_sfc_main$2Y, _sfc_main$2X, _sfc_main$2V, _sfc_main$2W] }
7416
- );
7417
- const _InputComponent = Input;
7418
- const _InputPasswordComponent = _sfc_main$2V;
7419
- const _InputGroupComponent = _sfc_main$2X;
7420
- const _InputGroupLabelComponent = _sfc_main$2W;
7312
+ const SearchInput = withPropsDefaultsSetter(_sfc_main$2Z, inputProps);
7421
7313
  const KEYBOARD_KEY = {
7422
7314
  ENTER: "Enter",
7423
7315
  ESC: "Escape",
@@ -8056,7 +7948,7 @@ const useSelect = ({
8056
7948
  };
8057
7949
  };
8058
7950
  const { name: name$10 } = createNamespace$1("optgroup");
8059
- const _sfc_main$2U = vue.defineComponent({
7951
+ const _sfc_main$2Y = vue.defineComponent({
8060
7952
  name: name$10,
8061
7953
  props: {
8062
7954
  /**
@@ -8080,7 +7972,7 @@ const _sfc_main$2U = vue.defineComponent({
8080
7972
  };
8081
7973
  }
8082
7974
  });
8083
- const _hoisted_1$1r = ["aria-labelledby"];
7975
+ const _hoisted_1$1s = ["aria-labelledby"];
8084
7976
  const _hoisted_2$E = ["id"];
8085
7977
  function _sfc_render$12(_ctx, _cache, $props, $setup, $data, $options) {
8086
7978
  return vue.openBlock(), vue.createElementBlock("li", {
@@ -8103,9 +7995,9 @@ function _sfc_render$12(_ctx, _cache, $props, $setup, $data, $options) {
8103
7995
  }, [
8104
7996
  vue.renderSlot(_ctx.$slots, "default")
8105
7997
  ], 2)
8106
- ], 10, _hoisted_1$1r);
7998
+ ], 10, _hoisted_1$1s);
8107
7999
  }
8108
- const Optgroup = /* @__PURE__ */ _export_sfc(_sfc_main$2U, [["render", _sfc_render$12]]);
8000
+ const Optgroup = /* @__PURE__ */ _export_sfc(_sfc_main$2Y, [["render", _sfc_render$12]]);
8109
8001
  const isEqualObject = (obj, other) => {
8110
8002
  if (!obj || !other) {
8111
8003
  return false;
@@ -8186,6 +8078,8 @@ function blockFieldOpenClick(event) {
8186
8078
  const formControlVariants = ["filled", "outline", "standard"];
8187
8079
  const selectProps = {
8188
8080
  ...fieldLoadingProps,
8081
+ /** 弹出编辑是否需要确认;未设置时单选即提交,多选保留确认。 */
8082
+ needConfirm: { type: Boolean, default: void 0 },
8189
8083
  openTriggerTarget: openTriggerTargetProp,
8190
8084
  /** 异步候选加载器;显式 options 优先,组件管理加载和请求取消。 */
8191
8085
  /** 内置本地过滤是否区分大小写;自定义过滤函数优先。 */
@@ -8541,7 +8435,7 @@ const optionProps = {
8541
8435
  }
8542
8436
  };
8543
8437
  const { name: name$$ } = createNamespace$1("option");
8544
- const _sfc_main$2T = vue.defineComponent({
8438
+ const _sfc_main$2X = vue.defineComponent({
8545
8439
  name: name$$,
8546
8440
  components: {
8547
8441
  IconCheck: iconsVue.IconCheck
@@ -8696,7 +8590,7 @@ function _sfc_render$11(_ctx, _cache, $props, $setup, $data, $options) {
8696
8590
  [vue.vShow, _ctx.isValid]
8697
8591
  ]);
8698
8592
  }
8699
- const Option = /* @__PURE__ */ _export_sfc(_sfc_main$2T, [["render", _sfc_render$11]]);
8593
+ const Option = /* @__PURE__ */ _export_sfc(_sfc_main$2X, [["render", _sfc_render$11]]);
8700
8594
  function useEmptySlot() {
8701
8595
  const config = vue.inject(configProviderInjectionKey, void 0);
8702
8596
  return vue.computed(() => config?.slots.empty);
@@ -8765,8 +8659,8 @@ const emptyProps = {
8765
8659
  showIcon: { type: Boolean, default: true },
8766
8660
  showDescription: { type: Boolean, default: true }
8767
8661
  };
8768
- const _hoisted_1$1q = ["src", "alt"];
8769
- const _sfc_main$2S = /* @__PURE__ */ vue.defineComponent({
8662
+ const _hoisted_1$1r = ["src", "alt"];
8663
+ const _sfc_main$2W = /* @__PURE__ */ vue.defineComponent({
8770
8664
  ...{ name: createNamespace$1("empty").name },
8771
8665
  __name: "Empty",
8772
8666
  props: emptyProps,
@@ -8824,7 +8718,7 @@ const _sfc_main$2S = /* @__PURE__ */ vue.defineComponent({
8824
8718
  key: 0,
8825
8719
  src: _ctx.imageUrl,
8826
8720
  alt: _ctx.alt
8827
- }, null, 8, _hoisted_1$1q)) : (vue.openBlock(), vue.createBlock(vue.unref(iconEmpty.IconEmpty), { key: 1 }))
8721
+ }, null, 8, _hoisted_1$1r)) : (vue.openBlock(), vue.createBlock(vue.unref(iconEmpty.IconEmpty), { key: 1 }))
8828
8722
  ])
8829
8723
  ], 6)) : vue.createCommentVNode("", true),
8830
8724
  _ctx.showDescription ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -8845,7 +8739,7 @@ const _sfc_main$2S = /* @__PURE__ */ vue.defineComponent({
8845
8739
  };
8846
8740
  }
8847
8741
  });
8848
- const Empty$1 = withInstall(_sfc_main$2S, Object.assign(_sfc_main$2S, {}), { components: [_sfc_main$2S] });
8742
+ const Empty$1 = withInstall(_sfc_main$2W, Object.assign(_sfc_main$2W, {}), { components: [_sfc_main$2W] });
8849
8743
  const _EmptyComponent = Empty$1;
8850
8744
  const scrollbarProps = {
8851
8745
  /**
@@ -9060,7 +8954,7 @@ const ResizeObserver$2 = vue.defineComponent({
9060
8954
  };
9061
8955
  }
9062
8956
  });
9063
- const _sfc_main$2R = vue.defineComponent({
8957
+ const _sfc_main$2V = vue.defineComponent({
9064
8958
  name: createNamespace$1("thumb").name,
9065
8959
  props: {
9066
8960
  data: {
@@ -9295,10 +9189,10 @@ function _sfc_render$10(_ctx, _cache, $props, $setup, $data, $options) {
9295
9189
  ], 38)
9296
9190
  ], 34);
9297
9191
  }
9298
- const Thumb = /* @__PURE__ */ _export_sfc(_sfc_main$2R, [["render", _sfc_render$10]]);
9192
+ const Thumb = /* @__PURE__ */ _export_sfc(_sfc_main$2V, [["render", _sfc_render$10]]);
9299
9193
  const THUMB_MIN_SIZE = 20;
9300
9194
  const TRACK_SIZE = 15;
9301
- const _sfc_main$2Q = vue.defineComponent({
9195
+ const _sfc_main$2U = vue.defineComponent({
9302
9196
  name: createNamespace$1("scrollbar").name,
9303
9197
  components: {
9304
9198
  ResizeObserver: ResizeObserver$2,
@@ -9621,11 +9515,11 @@ function _sfc_render$$(_ctx, _cache, $props, $setup, $data, $options) {
9621
9515
  }, null, 8, ["data", "style", "both", "onScroll"])) : vue.createCommentVNode("", true)
9622
9516
  ], 6);
9623
9517
  }
9624
- const _Scrollbar = /* @__PURE__ */ _export_sfc(_sfc_main$2Q, [["render", _sfc_render$$]]);
9518
+ const _Scrollbar = /* @__PURE__ */ _export_sfc(_sfc_main$2U, [["render", _sfc_render$$]]);
9625
9519
  const Scrollbar = withInstall(_Scrollbar, Object.assign(_Scrollbar, {}), { components: [_Scrollbar] });
9626
9520
  const _ScrollbarComponent = Scrollbar;
9627
9521
  const { name: name$_ } = createNamespace$1("select-dropdown");
9628
- const _sfc_main$2P = vue.defineComponent({
9522
+ const _sfc_main$2T = vue.defineComponent({
9629
9523
  name: name$_,
9630
9524
  components: {
9631
9525
  ScrollbarComponent: Scrollbar,
@@ -9697,7 +9591,7 @@ const _sfc_main$2P = vue.defineComponent({
9697
9591
  };
9698
9592
  }
9699
9593
  });
9700
- const _hoisted_1$1p = ["id", "role", "aria-multiselectable"];
9594
+ const _hoisted_1$1q = ["id", "role", "aria-multiselectable"];
9701
9595
  const _hoisted_2$D = ["id", "role", "aria-multiselectable"];
9702
9596
  function _sfc_render$_(_ctx, _cache, $props, $setup, $data, $options) {
9703
9597
  const _component_loading = vue.resolveComponent("loading");
@@ -9731,7 +9625,7 @@ function _sfc_render$_(_ctx, _cache, $props, $setup, $data, $options) {
9731
9625
  "aria-multiselectable": _ctx.listboxId ? _ctx.multiple : void 0
9732
9626
  }, [
9733
9627
  vue.renderSlot(_ctx.$slots, "virtual-list")
9734
- ], 8, _hoisted_1$1p)) : vue.createCommentVNode("", true),
9628
+ ], 8, _hoisted_1$1q)) : vue.createCommentVNode("", true),
9735
9629
  !_ctx.virtualList ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.displayScrollbar ? "ScrollbarComponent" : "div"), vue.mergeProps(
9736
9630
  {
9737
9631
  key: 4,
@@ -9761,7 +9655,7 @@ function _sfc_render$_(_ctx, _cache, $props, $setup, $data, $options) {
9761
9655
  ], 2)) : vue.createCommentVNode("", true)
9762
9656
  ], 34);
9763
9657
  }
9764
- const SelectDropdown = /* @__PURE__ */ _export_sfc(_sfc_main$2P, [["render", _sfc_render$_]]);
9658
+ const SelectDropdown = /* @__PURE__ */ _export_sfc(_sfc_main$2T, [["render", _sfc_render$_]]);
9765
9659
  const TriggerPopup = vue.defineComponent({
9766
9660
  name: createNamespace$1("trigger-popup").name,
9767
9661
  inheritAttrs: false,
@@ -10069,12 +9963,21 @@ function getScrollElements(element2) {
10069
9963
  const visited = /* @__PURE__ */ new Set();
10070
9964
  while (root && !visited.has(root.ownerDocument)) {
10071
9965
  visited.add(root.ownerDocument);
10072
- let current = root.parentElement;
9966
+ const parent = (node) => {
9967
+ if (node.assignedSlot) return node.assignedSlot;
9968
+ if (node.parentElement) return node.parentElement;
9969
+ const tree = node.getRootNode();
9970
+ return tree.nodeType === 11 && "host" in tree ? tree.host : null;
9971
+ };
9972
+ let current = parent(root);
9973
+ const ancestors = /* @__PURE__ */ new Set();
10073
9974
  while (current && current !== current.ownerDocument.documentElement) {
9975
+ if (ancestors.has(current)) break;
9976
+ ancestors.add(current);
10074
9977
  const style = current.ownerDocument.defaultView?.getComputedStyle(current);
10075
9978
  const overflow = `${style?.overflow ?? ""}${style?.overflowX ?? ""}${style?.overflowY ?? ""}`;
10076
9979
  if (/(auto|scroll|overlay)/.test(overflow)) result.push(current);
10077
- current = current.parentElement;
9980
+ current = parent(current);
10078
9981
  }
10079
9982
  try {
10080
9983
  root = root.ownerDocument.defaultView?.frameElement ?? void 0;
@@ -10084,6 +9987,34 @@ function getScrollElements(element2) {
10084
9987
  }
10085
9988
  return result;
10086
9989
  }
9990
+ function getSlotChangeRoots(element2) {
9991
+ const roots = [];
9992
+ const visited = /* @__PURE__ */ new Set();
9993
+ let current = element2;
9994
+ while (current && !visited.has(current)) {
9995
+ visited.add(current);
9996
+ const parentShadow = current.parentElement?.shadowRoot;
9997
+ if (parentShadow) roots.push(parentShadow);
9998
+ if (current.assignedSlot) {
9999
+ current = current.assignedSlot;
10000
+ } else if (current.parentElement) {
10001
+ current = current.parentElement;
10002
+ } else {
10003
+ const tree = current.getRootNode();
10004
+ if (tree.nodeType === 11 && "host" in tree) {
10005
+ roots.push(tree);
10006
+ current = tree.host;
10007
+ } else {
10008
+ try {
10009
+ current = current.ownerDocument.defaultView?.frameElement;
10010
+ } catch {
10011
+ current = void 0;
10012
+ }
10013
+ }
10014
+ }
10015
+ }
10016
+ return roots;
10017
+ }
10087
10018
  function getScrollViews(element2) {
10088
10019
  const result = [];
10089
10020
  let document2 = element2?.ownerDocument;
@@ -10104,9 +10035,11 @@ function rafThrottle(callback, ownerView) {
10104
10035
  let frame;
10105
10036
  let frameView;
10106
10037
  let latest;
10038
+ let latestTarget;
10107
10039
  let generation = 0;
10108
10040
  const run = (event) => {
10109
10041
  latest = event;
10042
+ latestTarget = event?.currentTarget ?? event?.target;
10110
10043
  if (frame !== void 0) {
10111
10044
  return;
10112
10045
  }
@@ -10124,8 +10057,10 @@ function rafThrottle(callback, ownerView) {
10124
10057
  frame = void 0;
10125
10058
  frameView = void 0;
10126
10059
  const currentEvent = latest;
10060
+ const currentTarget = latestTarget;
10127
10061
  latest = void 0;
10128
- callback(currentEvent);
10062
+ latestTarget = void 0;
10063
+ callback(currentEvent, currentTarget);
10129
10064
  });
10130
10065
  };
10131
10066
  run.cancel = () => {
@@ -10136,6 +10071,7 @@ function rafThrottle(callback, ownerView) {
10136
10071
  frame = void 0;
10137
10072
  frameView = void 0;
10138
10073
  latest = void 0;
10074
+ latestTarget = void 0;
10139
10075
  };
10140
10076
  return run;
10141
10077
  }
@@ -10151,6 +10087,7 @@ function useTriggerPositioner(options, context2) {
10151
10087
  let scrollPositions = /* @__PURE__ */ new WeakMap();
10152
10088
  let windowPositions = /* @__PURE__ */ new WeakMap();
10153
10089
  let scrollViews = [];
10090
+ let slotRoots = [];
10154
10091
  function update() {
10155
10092
  const reference = context2.reference.value;
10156
10093
  const popup = context2.popup.value;
@@ -10239,10 +10176,10 @@ function useTriggerPositioner(options, context2) {
10239
10176
  }
10240
10177
  }
10241
10178
  const scrolling = rafThrottle(
10242
- (event) => {
10179
+ (_event, eventTarget) => {
10243
10180
  const shouldClose = options.scrollToClose || context2.globalScrollToClose.value;
10244
- if (shouldClose && event?.target) {
10245
- const target2 = event.target;
10181
+ if (shouldClose && eventTarget) {
10182
+ const target2 = eventTarget;
10246
10183
  const previous = scrollPositions.get(target2) ?? [
10247
10184
  target2.scrollTop,
10248
10185
  target2.scrollLeft
@@ -10287,11 +10224,26 @@ function useTriggerPositioner(options, context2) {
10287
10224
  for (const element2 of scrollElements)
10288
10225
  element2.removeEventListener("scroll", scrolling);
10289
10226
  for (const view of scrollViews) view.removeEventListener("scroll", onWindowScroll);
10227
+ for (const slot of slotRoots) slot.removeEventListener("slotchange", onSlotChange);
10228
+ slotRoots = [];
10290
10229
  scrollViews = [];
10291
10230
  scrollElements = [];
10292
10231
  scrollPositions = /* @__PURE__ */ new WeakMap();
10293
10232
  windowPositions = /* @__PURE__ */ new WeakMap();
10294
10233
  }
10234
+ function onSlotChange() {
10235
+ positionGeneration++;
10236
+ const reference = context2.reference.value;
10237
+ const popup = context2.popup.value;
10238
+ const nextElements = [.../* @__PURE__ */ new Set([...getScrollElements(reference), ...getScrollElements(popup)])];
10239
+ const nextViews = [.../* @__PURE__ */ new Set([...getScrollViews(reference), ...getScrollViews(popup)])];
10240
+ const nextRoots = [.../* @__PURE__ */ new Set([...getSlotChangeRoots(reference), ...getSlotChangeRoots(popup)])];
10241
+ function changed(before, after) {
10242
+ return before.length !== after.length || before.some((item, index) => item !== after[index]);
10243
+ }
10244
+ if (changed(scrollElements, nextElements) || changed(scrollViews, nextViews) || changed(slotRoots, nextRoots)) bindScroll();
10245
+ vue.nextTick(update);
10246
+ }
10295
10247
  function bindScroll() {
10296
10248
  unbindScroll();
10297
10249
  const reference = context2.reference.value;
@@ -10299,6 +10251,8 @@ function useTriggerPositioner(options, context2) {
10299
10251
  const active = options.updateAtScroll || options.scrollToClose || context2.globalUpdateAtScroll.value || context2.globalScrollToClose.value;
10300
10252
  if (!active || !reference || !popup || !context2.visible.value || suspended)
10301
10253
  return;
10254
+ slotRoots = [.../* @__PURE__ */ new Set([...getSlotChangeRoots(reference), ...getSlotChangeRoots(popup)])];
10255
+ for (const slot of slotRoots) slot.addEventListener("slotchange", onSlotChange);
10302
10256
  scrollElements = [
10303
10257
  .../* @__PURE__ */ new Set([
10304
10258
  ...getScrollElements(reference),
@@ -10511,19 +10465,19 @@ const shadowHostNames = /* @__PURE__ */ new Set(["article", "aside", "blockquote
10511
10465
  function mayHideShadow(element2) {
10512
10466
  return !element2.shadowRoot && (element2.localName.includes("-") || shadowHostNames.has(element2.localName));
10513
10467
  }
10514
- function documentChain(start) {
10468
+ function documentChain(start, allowPartial = false) {
10515
10469
  const documents = [start], frames = [];
10516
10470
  let current = start;
10517
10471
  try {
10518
10472
  while (current.defaultView && current.defaultView.parent !== current.defaultView) {
10519
10473
  const frame = current.defaultView.frameElement;
10520
- if (!frame) return void 0;
10474
+ if (!frame) return allowPartial ? { documents, frames } : void 0;
10521
10475
  frames.push(frame);
10522
10476
  current = frame.ownerDocument;
10523
10477
  documents.push(current);
10524
10478
  }
10525
10479
  } catch {
10526
- return void 0;
10480
+ return allowPartial ? { documents, frames } : void 0;
10527
10481
  }
10528
10482
  return { documents, frames };
10529
10483
  }
@@ -10532,7 +10486,7 @@ function canRestore(owner, destination, anchor, focused) {
10532
10486
  const current = owner.activeElement;
10533
10487
  return (!current || current === owner.body || current === owner.documentElement || current === anchor) && (current !== anchor || deepestActive(anchor) === focused);
10534
10488
  }
10535
- const from = documentChain(owner), to = documentChain(destination);
10489
+ const from = documentChain(owner, true), to = documentChain(destination, true);
10536
10490
  if (!from || !to) return false;
10537
10491
  const common = from.documents.find((doc) => to.documents.includes(doc));
10538
10492
  if (!common || !common.hasFocus()) return false;
@@ -10581,8 +10535,8 @@ function usePopupMoveFocus(target2, inline, popup, visible) {
10581
10535
  return (event) => {
10582
10536
  if (!moving || moving !== event.target || event.relatedTarget) return false;
10583
10537
  const owner = moving.ownerDocument;
10584
- const chain = documentChain(owner);
10585
- if (!chain) return false;
10538
+ const chain = documentChain(owner, true);
10539
+ if (!chain || !chain.documents[chain.documents.length - 1].hasFocus()) return false;
10586
10540
  return chain.documents.every((doc) => {
10587
10541
  const current = doc.activeElement;
10588
10542
  return !current || current === doc.body || current === doc.documentElement || current === moving || chain.frames.includes(current);
@@ -10801,7 +10755,7 @@ const _Trigger = /* @__PURE__ */ vue.defineComponent({
10801
10755
  });
10802
10756
  return () => {
10803
10757
  const referenceNodes = mergeFirstReferenceClass(slots.default?.() ?? [], visible.value ? props2.openedClass : void 0);
10804
- const contentNodes = slots.content?.() ?? [];
10758
+ const contentNodes = renderState.rendered.value ? slots.content?.() ?? [] : [];
10805
10759
  const hiddenByEmpty = props2.hideEmpty && isEmptyContent(contentNodes);
10806
10760
  nodes.value = referenceNodes;
10807
10761
  return vue.createVNode(vue.Fragment, null, [referenceNodes, vue.createVNode(vue.Teleport, {
@@ -10886,6 +10840,8 @@ const fieldPresentationProps = {
10886
10840
  };
10887
10841
  const autoCompleteProps = {
10888
10842
  ...fieldLoadingProps,
10843
+ /** 弹出编辑是否需要确认;默认选中候选项即提交,自定义文本通过确认提交。 */
10844
+ needConfirm: { type: Boolean, default: void 0 },
10889
10845
  searchDelay: { type: Number, default: 250 },
10890
10846
  /** 清空动作产生的模型值;省略保留原默认值。 */
10891
10847
  ...fieldPresentationProps,
@@ -11297,7 +11253,7 @@ const Base$8 = /* @__PURE__ */ vue.defineComponent({
11297
11253
  "aria-activedescendant": computedOpen.value && !loading.value && activeKey.value && enabledOptionKeys.value.includes(activeKey.value) && optionRefs.value[activeKey.value] ? getOptionId(activeKey.value) : void 0,
11298
11254
  autocomplete: "off"
11299
11255
  }));
11300
- const renderInput = (restAttrs) => vue.createVNode(Input, vue.mergeProps({
11256
+ const renderInput = (restAttrs) => vue.createVNode(SearchInput, vue.mergeProps({
11301
11257
  "loading": loading.value,
11302
11258
  "loadingMode": props2.loadingMode
11303
11259
  }, restAttrs, {
@@ -11385,6 +11341,7 @@ const Base$8 = /* @__PURE__ */ vue.defineComponent({
11385
11341
  }
11386
11342
  });
11387
11343
  const _AutoComplete = withFieldPresentation(Base$8, {
11344
+ selectionConfirmation: "select",
11388
11345
  methods: ["focus", "blur", "refresh"],
11389
11346
  defaultPresentation: defaultSelectionPresentation,
11390
11347
  intent: "input",
@@ -11395,7 +11352,7 @@ const _AutoComplete = withFieldPresentation(Base$8, {
11395
11352
  const editorAttrs = { ...attrs, style };
11396
11353
  delete editorAttrs.class;
11397
11354
  return vue.h(
11398
- _sfc_main$30,
11355
+ _sfc_main$31,
11399
11356
  { kind: "auto-complete" },
11400
11357
  () => vue.h(
11401
11358
  Base$8,
@@ -11496,12 +11453,12 @@ const avatarGroupProps = {
11496
11453
  /** 是否纵向堆叠 */
11497
11454
  vertical: Boolean
11498
11455
  };
11499
- const _hoisted_1$1o = ["role", "tabindex", "aria-label"];
11456
+ const _hoisted_1$1p = ["role", "tabindex", "aria-label"];
11500
11457
  const _hoisted_2$C = ["src", "alt"];
11501
- const _hoisted_3$l = ["role", "aria-label", "aria-hidden"];
11458
+ const _hoisted_3$m = ["role", "aria-label", "aria-hidden"];
11502
11459
  const _hoisted_4$d = ["src", "alt", "loading"];
11503
11460
  const _hoisted_5$6 = ["src", "alt"];
11504
- const _sfc_main$2O = /* @__PURE__ */ vue.defineComponent({
11461
+ const _sfc_main$2S = /* @__PURE__ */ vue.defineComponent({
11505
11462
  ...{ name: createNamespace$1("avatar").name, inheritAttrs: false },
11506
11463
  __name: "Avatar",
11507
11464
  props: avatarProps,
@@ -11664,7 +11621,7 @@ const _sfc_main$2O = /* @__PURE__ */ vue.defineComponent({
11664
11621
  "aria-hidden": props2.alt ? void 0 : true
11665
11622
  }, [
11666
11623
  vue.createVNode(vue.unref(iconImageClose.IconImageClose), { "aria-hidden": "true" })
11667
- ], 10, _hoisted_3$l))
11624
+ ], 10, _hoisted_3$m))
11668
11625
  ]) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
11669
11626
  vue.withDirectives(vue.createElementVNode("img", {
11670
11627
  src: props2.imageUrl,
@@ -11705,7 +11662,7 @@ const _sfc_main$2O = /* @__PURE__ */ vue.defineComponent({
11705
11662
  }, [
11706
11663
  vue.renderSlot(_ctx.$slots, "trigger-icon")
11707
11664
  ], 6)) : vue.createCommentVNode("", true)
11708
- ], 16, _hoisted_1$1o);
11665
+ ], 16, _hoisted_1$1p);
11709
11666
  };
11710
11667
  }
11711
11668
  });
@@ -11773,8 +11730,8 @@ const popoverProps = {
11773
11730
  /** 再次点击触发元素时关闭。 */
11774
11731
  closeOnClickReference: { type: Boolean, default: true }
11775
11732
  };
11776
- const _hoisted_1$1n = ["aria-labelledby"];
11777
- const _sfc_main$2N = /* @__PURE__ */ vue.defineComponent({
11733
+ const _hoisted_1$1o = ["aria-labelledby"];
11734
+ const _sfc_main$2R = /* @__PURE__ */ vue.defineComponent({
11778
11735
  ...{ name: createNamespace$1("popover").name, inheritAttrs: false },
11779
11736
  __name: "Popover",
11780
11737
  props: popoverProps,
@@ -11872,7 +11829,7 @@ const _sfc_main$2N = /* @__PURE__ */ vue.defineComponent({
11872
11829
  vue.createTextVNode(vue.toDisplayString(_ctx.content), 1)
11873
11830
  ])
11874
11831
  ], 2)
11875
- ], 16, _hoisted_1$1n)) : vue.createCommentVNode("", true)
11832
+ ], 16, _hoisted_1$1o)) : vue.createCommentVNode("", true)
11876
11833
  ]),
11877
11834
  default: vue.withCtx(() => [
11878
11835
  vue.renderSlot(_ctx.$slots, "default")
@@ -11882,10 +11839,10 @@ const _sfc_main$2N = /* @__PURE__ */ vue.defineComponent({
11882
11839
  };
11883
11840
  }
11884
11841
  });
11885
- const Popover = withInstall(_sfc_main$2N, Object.assign(_sfc_main$2N, {}), { components: [_sfc_main$2N] });
11842
+ const Popover = withInstall(_sfc_main$2R, Object.assign(_sfc_main$2R, {}), { components: [_sfc_main$2R] });
11886
11843
  const _PopoverComponent = Popover;
11887
11844
  const { name: name$Y, n: n$k, classes: classes$7 } = createNamespace$1("avatar-group");
11888
- const _sfc_main$2M = vue.defineComponent({
11845
+ const _sfc_main$2Q = vue.defineComponent({
11889
11846
  name: name$Y,
11890
11847
  props: avatarGroupProps,
11891
11848
  setup(props2, { slots }) {
@@ -11910,7 +11867,7 @@ const _sfc_main$2M = vue.defineComponent({
11910
11867
  );
11911
11868
  if (hidden.length) {
11912
11869
  const summary = vue.h(
11913
- _sfc_main$2O,
11870
+ _sfc_main$2S,
11914
11871
  { class: n$k("max-count-avatar"), role: "button", tabindex: 0, style: [props2.maxStyle, { zIndex: props2.zIndexAscend ? layerCount : 1 }] },
11915
11872
  { default: () => `+${hidden.length}` }
11916
11873
  );
@@ -11927,14 +11884,14 @@ const _sfc_main$2M = vue.defineComponent({
11927
11884
  }
11928
11885
  });
11929
11886
  const Avatar = withInstall(
11930
- _sfc_main$2O,
11931
- Object.assign(_sfc_main$2O, {
11932
- Group: _sfc_main$2M
11887
+ _sfc_main$2S,
11888
+ Object.assign(_sfc_main$2S, {
11889
+ Group: _sfc_main$2Q
11933
11890
  }),
11934
- { components: [_sfc_main$2O, _sfc_main$2M] }
11891
+ { components: [_sfc_main$2S, _sfc_main$2Q] }
11935
11892
  );
11936
11893
  const _AvatarComponent = Avatar;
11937
- const _AvatarGroupComponent = _sfc_main$2M;
11894
+ const _AvatarGroupComponent = _sfc_main$2Q;
11938
11895
  const easingNames = ["linear", "quartOut", "easeInOutCubic"];
11939
11896
  const backTopProps = {
11940
11897
  /** 浮层挂载容器,false 表示原地绝对定位。 */
@@ -12133,8 +12090,8 @@ function ease(progress, easing) {
12133
12090
  }
12134
12091
  return 1 - (1 - progress) ** 4;
12135
12092
  }
12136
- const _hoisted_1$1m = ["dir", "aria-label"];
12137
- const _sfc_main$2L = /* @__PURE__ */ vue.defineComponent({
12093
+ const _hoisted_1$1n = ["dir", "aria-label"];
12094
+ const _sfc_main$2P = /* @__PURE__ */ vue.defineComponent({
12138
12095
  ...{ name: createNamespace$1("back-top").name, inheritAttrs: false },
12139
12096
  __name: "BackTop",
12140
12097
  props: backTopProps,
@@ -12171,7 +12128,7 @@ const _sfc_main$2L = /* @__PURE__ */ vue.defineComponent({
12171
12128
  vue.renderSlot(_ctx.$slots, "default", {}, () => [
12172
12129
  vue.createVNode(vue.unref(iconsVue.IconToTop), { "aria-hidden": "true" })
12173
12130
  ])
12174
- ], 16, _hoisted_1$1m), [
12131
+ ], 16, _hoisted_1$1n), [
12175
12132
  [vue.vShow, vue.unref(visible)]
12176
12133
  ])
12177
12134
  ], 8, ["to", "disabled"]))
@@ -12179,7 +12136,7 @@ const _sfc_main$2L = /* @__PURE__ */ vue.defineComponent({
12179
12136
  };
12180
12137
  }
12181
12138
  });
12182
- const BackTop = withInstall(_sfc_main$2L, Object.assign(_sfc_main$2L, {}), { components: [_sfc_main$2L] });
12139
+ const BackTop = withInstall(_sfc_main$2P, Object.assign(_sfc_main$2P, {}), { components: [_sfc_main$2P] });
12183
12140
  const _BackTopComponent = BackTop;
12184
12141
  const badgeModes = ["floating", "inline"];
12185
12142
  const badgePositions = [
@@ -12239,7 +12196,7 @@ const badgeProps = {
12239
12196
  validator: (value) => badgeVariants.includes(value)
12240
12197
  }
12241
12198
  };
12242
- const _sfc_main$2K = /* @__PURE__ */ vue.defineComponent({
12199
+ const _sfc_main$2O = /* @__PURE__ */ vue.defineComponent({
12243
12200
  ...{ name: createNamespace$1("badge").name },
12244
12201
  __name: "Badge",
12245
12202
  props: badgeProps,
@@ -12345,7 +12302,7 @@ const _sfc_main$2K = /* @__PURE__ */ vue.defineComponent({
12345
12302
  };
12346
12303
  }
12347
12304
  });
12348
- const Badge = withInstall(_sfc_main$2K, Object.assign(_sfc_main$2K, {}), { components: [_sfc_main$2K] });
12305
+ const Badge = withInstall(_sfc_main$2O, Object.assign(_sfc_main$2O, {}), { components: [_sfc_main$2O] });
12349
12306
  const _BadgeComponent = Badge;
12350
12307
  const BREADCRUMB_BIND_BREADCRUMB_ITEM_KEY = Symbol("BREADCRUMB_BIND_BREADCRUMB_ITEM_KEY");
12351
12308
  function useBreadcrumbItems() {
@@ -12583,7 +12540,7 @@ const menuProps = {
12583
12540
  const menuInjectionKey = Symbol("Menu");
12584
12541
  const menuLevelKey = Symbol("MenuLevel");
12585
12542
  const menuRenderLevelKey = Symbol("MenuRenderLevel");
12586
- const _sfc_main$2J = /* @__PURE__ */ vue.defineComponent({
12543
+ const _sfc_main$2N = /* @__PURE__ */ vue.defineComponent({
12587
12544
  ...{ name: createNamespace$1("menu-panel").name },
12588
12545
  __name: "MenuPanel",
12589
12546
  props: { isEmpty: Boolean, bottomOffset: { type: Number, default: 0 }, elevation: { type: [Boolean, Number], default: true }, submenu: Boolean },
@@ -12693,7 +12650,7 @@ function useMenuSelection(options, emit) {
12693
12650
  };
12694
12651
  }
12695
12652
  const menuSelectionKey = Symbol("MenuSelection");
12696
- const _sfc_main$2I = /* @__PURE__ */ vue.defineComponent({
12653
+ const _sfc_main$2M = /* @__PURE__ */ vue.defineComponent({
12697
12654
  ...{ name: createNamespace$1("menu-option").name },
12698
12655
  __name: "MenuOption",
12699
12656
  props: props$3,
@@ -12943,7 +12900,7 @@ function useMenuLevel(visible, branch) {
12943
12900
  vue.onBeforeUnmount(() => unregister?.());
12944
12901
  return { level, activate: () => parent?.activate(branch) };
12945
12902
  }
12946
- const _sfc_main$2H = /* @__PURE__ */ vue.defineComponent({
12903
+ const _sfc_main$2L = /* @__PURE__ */ vue.defineComponent({
12947
12904
  ...{ name: createNamespace$1("menu-branch").name },
12948
12905
  __name: "MenuBranch",
12949
12906
  props: menuBranchProps,
@@ -13017,7 +12974,7 @@ const _sfc_main$2H = /* @__PURE__ */ vue.defineComponent({
13017
12974
  computedOpen.value = open22;
13018
12975
  }
13019
12976
  },
13020
- reference: () => vue.h(_sfc_main$2I, {
12977
+ reference: () => vue.h(_sfc_main$2M, {
13021
12978
  ...props2.option.props,
13022
12979
  value,
13023
12980
  option: props2.option,
@@ -13032,7 +12989,7 @@ const _sfc_main$2H = /* @__PURE__ */ vue.defineComponent({
13032
12989
  ...props2.renderers.hasIcon(props2.option) ? { icon: () => props2.renderers.icon(props2.option, active, props2.level) } : {},
13033
12990
  ...props2.renderers.hasExtra(props2.option) ? { suffix: () => props2.renderers.extra(props2.option, active, props2.level) } : {}
13034
12991
  }),
13035
- panelComponent: _sfc_main$2J,
12992
+ panelComponent: _sfc_main$2N,
13036
12993
  panelProps: { ref: panel2, submenu: true },
13037
12994
  items: () => slots.default?.()
13038
12995
  };
@@ -13084,7 +13041,7 @@ const MenuOptions = vue.defineComponent({
13084
13041
  vue.h("div", { class: `${getPrefixCls("menu-group")}-title` }, [renderers.label(option2, active, level)]),
13085
13042
  vue.h("ul", { role: "group", class: `${getPrefixCls("menu-group")}-list` }, node.children.map(renderNode))
13086
13043
  ]);
13087
- if (node.children.length) return vue.h(_sfc_main$2H, {
13044
+ if (node.children.length) return vue.h(_sfc_main$2L, {
13088
13045
  key,
13089
13046
  option: option2,
13090
13047
  fieldNames: props2.fieldNames,
@@ -13100,7 +13057,7 @@ const MenuOptions = vue.defineComponent({
13100
13057
  renderers
13101
13058
  })
13102
13059
  });
13103
- return vue.h(_sfc_main$2I, {
13060
+ return vue.h(_sfc_main$2M, {
13104
13061
  ...option2.props,
13105
13062
  key,
13106
13063
  value: node.value,
@@ -13117,7 +13074,7 @@ const MenuOptions = vue.defineComponent({
13117
13074
  };
13118
13075
  }
13119
13076
  });
13120
- const _sfc_main$2G = /* @__PURE__ */ vue.defineComponent({
13077
+ const _sfc_main$2K = /* @__PURE__ */ vue.defineComponent({
13121
13078
  ...{ name: createNamespace$1("menu").name },
13122
13079
  __name: "Menu",
13123
13080
  props: menuProps,
@@ -13192,7 +13149,7 @@ const _sfc_main$2G = /* @__PURE__ */ vue.defineComponent({
13192
13149
  onClosed: () => emit("closed"),
13193
13150
  onClickOutside: (event) => emit("click-outside", event)
13194
13151
  },
13195
- panelComponent: _sfc_main$2J,
13152
+ panelComponent: _sfc_main$2N,
13196
13153
  panelProps: { ref: panel2, elevation: props2.elevation },
13197
13154
  items: () => vue.h(MenuOptions, { options: props2.options, fieldNames: props2.fieldNames }, {
13198
13155
  label: slots["option-label"],
@@ -13228,11 +13185,11 @@ const _sfc_main$2G = /* @__PURE__ */ vue.defineComponent({
13228
13185
  };
13229
13186
  }
13230
13187
  });
13231
- const Menu = withInstall(_sfc_main$2G, Object.assign(_sfc_main$2G, {
13232
- Option: _sfc_main$2I
13233
- }), { components: [_sfc_main$2G, _sfc_main$2I] });
13188
+ const Menu = withInstall(_sfc_main$2K, Object.assign(_sfc_main$2K, {
13189
+ Option: _sfc_main$2M
13190
+ }), { components: [_sfc_main$2K, _sfc_main$2M] });
13234
13191
  const _MenuComponent = Menu;
13235
- const _MenuOptionComponent = _sfc_main$2I;
13192
+ const _MenuOptionComponent = _sfc_main$2M;
13236
13193
  const {
13237
13194
  name: name$X,
13238
13195
  n: n$j,
@@ -13361,7 +13318,7 @@ const BreadcrumbItem = /* @__PURE__ */ vue.defineComponent({
13361
13318
  "class": classes$6(n$j("dropdown-icon"), [dropdownVisible.value, n$j("--dropdown-icon-active")])
13362
13319
  }, null)])]);
13363
13320
  };
13364
- const renderDropdownContent = () => slots.droplist?.() ?? props2.droplist?.map((item) => vue.createVNode(_sfc_main$2I, {
13321
+ const renderDropdownContent = () => slots.droplist?.() ?? props2.droplist?.map((item) => vue.createVNode(_sfc_main$2M, {
13365
13322
  "value": item.path
13366
13323
  }, {
13367
13324
  default: () => [item.label]
@@ -13482,6 +13439,59 @@ const Breadcrumb = withInstall(_Breadcrumb, Object.assign(_Breadcrumb, {
13482
13439
  }), { components: [_Breadcrumb, BreadcrumbItem] });
13483
13440
  const _BreadcrumbComponent = Breadcrumb;
13484
13441
  const _BreadcrumbItemComponent = BreadcrumbItem;
13442
+ const _sfc_main$2J = /* @__PURE__ */ vue.defineComponent({
13443
+ ...{
13444
+ name: createNamespace$1("button-group").name
13445
+ },
13446
+ __name: "ButtonGroup",
13447
+ props: buttonGroupProps,
13448
+ setup(__props, { expose: __expose }) {
13449
+ const { n: n2, classes: classes2 } = createNamespace$1("button-group");
13450
+ const props2 = __props;
13451
+ const { bindButtons } = useButtons();
13452
+ const defaultSize = useButtonDefaultSize();
13453
+ const buttonGroupProvider = {
13454
+ elevation: vue.computed(() => props2.elevation),
13455
+ status: vue.computed(() => props2.status),
13456
+ size: vue.computed(() => props2.size ?? defaultSize.value),
13457
+ variant: vue.computed(() => props2.variant),
13458
+ color: vue.computed(() => props2.color),
13459
+ textColor: vue.computed(() => props2.textColor),
13460
+ disabled: vue.computed(() => props2.disabled),
13461
+ stacked: vue.computed(() => props2.stacked),
13462
+ vertical: vue.computed(() => props2.vertical)
13463
+ };
13464
+ bindButtons(buttonGroupProvider);
13465
+ __expose({
13466
+ buttonGroupProvider
13467
+ });
13468
+ return (_ctx, _cache) => {
13469
+ return vue.openBlock(), vue.createElementBlock("div", {
13470
+ role: "group",
13471
+ class: vue.normalizeClass(
13472
+ vue.unref(classes2)(
13473
+ vue.unref(n2)(),
13474
+ vue.unref(n2)("$--box"),
13475
+ vue.unref(n2)(`--variant-${_ctx.variant}`),
13476
+ [_ctx.vertical, vue.unref(n2)("--vertical"), vue.unref(n2)("--horizontal")],
13477
+ [_ctx.variant === "default" && !_ctx.disabled, vue.unref(formatElevation)(_ctx.elevation, 2)]
13478
+ )
13479
+ )
13480
+ }, [
13481
+ vue.renderSlot(_ctx.$slots, "default")
13482
+ ], 2);
13483
+ };
13484
+ }
13485
+ });
13486
+ const Button = withInstall(
13487
+ Button$1,
13488
+ Object.assign(Button$1, {
13489
+ Group: _sfc_main$2J
13490
+ }),
13491
+ { components: [Button$1, _sfc_main$2J] }
13492
+ );
13493
+ const _ButtonComponent = Button;
13494
+ const _ButtonGroupComponent = _sfc_main$2J;
13485
13495
  const calendarProps = {
13486
13496
  /**
13487
13497
  * @zh 绑定值
@@ -14137,12 +14147,12 @@ const NativeEditorOwner = vue.defineComponent({
14137
14147
  return () => slots.default?.();
14138
14148
  }
14139
14149
  });
14140
- const _hoisted_1$1l = ["aria-expanded", "aria-controls", "aria-label"];
14150
+ const _hoisted_1$1m = ["aria-expanded", "aria-controls", "aria-label"];
14141
14151
  const _hoisted_2$B = {
14142
14152
  key: 0,
14143
14153
  "aria-hidden": "true"
14144
14154
  };
14145
- const _hoisted_3$k = { role: "status" };
14155
+ const _hoisted_3$l = { role: "status" };
14146
14156
  const _hoisted_4$c = {
14147
14157
  key: 1,
14148
14158
  "aria-hidden": "true"
@@ -14156,7 +14166,7 @@ const _hoisted_7$2 = ["id", "aria-label"];
14156
14166
  const _hoisted_8$2 = ["disabled", "aria-label", "onClick"];
14157
14167
  const _hoisted_9$1 = ["aria-label"];
14158
14168
  const _hoisted_10$1 = ["disabled", "aria-label", "onClick"];
14159
- const _sfc_main$2F = /* @__PURE__ */ vue.defineComponent({
14169
+ const _sfc_main$2I = /* @__PURE__ */ vue.defineComponent({
14160
14170
  ...{ name: createNamespace$1("selected-options").name },
14161
14171
  __name: "SelectedOptions",
14162
14172
  props: {
@@ -14207,9 +14217,9 @@ const _sfc_main$2F = /* @__PURE__ */ vue.defineComponent({
14207
14217
  onClick: _cache[0] || (_cache[0] = ($event) => showSelected.value = !showSelected.value)
14208
14218
  }, [
14209
14219
  showSelected.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$B, "‹")) : vue.createCommentVNode("", true),
14210
- vue.createElementVNode("span", _hoisted_3$k, vue.toDisplayString(countText.value), 1),
14220
+ vue.createElementVNode("span", _hoisted_3$l, vue.toDisplayString(countText.value), 1),
14211
14221
  !showSelected.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$c, "›")) : vue.createCommentVNode("", true)
14212
- ], 10, _hoisted_1$1l)) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$5, vue.toDisplayString(countText.value), 1)),
14222
+ ], 10, _hoisted_1$1m)) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$5, vue.toDisplayString(countText.value), 1)),
14213
14223
  vue.createElementVNode("button", {
14214
14224
  type: "button",
14215
14225
  class: vue.normalizeClass(vue.unref(n2)("clear")),
@@ -14290,7 +14300,7 @@ const _sfc_main$2F = /* @__PURE__ */ vue.defineComponent({
14290
14300
  };
14291
14301
  }
14292
14302
  });
14293
- const _sfc_main$2E = /* @__PURE__ */ vue.defineComponent({
14303
+ const _sfc_main$2H = /* @__PURE__ */ vue.defineComponent({
14294
14304
  ...{ name: createNamespace$1("selection-menu-presentation").name },
14295
14305
  __name: "MenuPresentation",
14296
14306
  props: {
@@ -14372,9 +14382,9 @@ const tagProps = {
14372
14382
  round: { type: Boolean, default: false },
14373
14383
  textColor: String
14374
14384
  };
14375
- const _hoisted_1$1k = ["role", "aria-checked", "aria-disabled", "aria-busy", "tabindex"];
14385
+ const _hoisted_1$1l = ["role", "aria-checked", "aria-disabled", "aria-busy", "tabindex"];
14376
14386
  const _hoisted_2$A = ["aria-label", "onKeydown"];
14377
- const _sfc_main$2D = /* @__PURE__ */ vue.defineComponent({
14387
+ const _sfc_main$2G = /* @__PURE__ */ vue.defineComponent({
14378
14388
  ...{ name: createNamespace$1("tag").name, inheritAttrs: false },
14379
14389
  __name: "Tag",
14380
14390
  props: tagProps,
@@ -14519,14 +14529,14 @@ const _sfc_main$2D = /* @__PURE__ */ vue.defineComponent({
14519
14529
  }, [
14520
14530
  vue.createVNode(vue.unref(iconLoading.IconLoading))
14521
14531
  ], 2)) : vue.createCommentVNode("", true)
14522
- ], 16, _hoisted_1$1k)) : vue.createCommentVNode("", true)
14532
+ ], 16, _hoisted_1$1l)) : vue.createCommentVNode("", true)
14523
14533
  ]),
14524
14534
  _: 3
14525
14535
  }, 8, ["name"]);
14526
14536
  };
14527
14537
  }
14528
14538
  });
14529
- const Tag = withInstall(_sfc_main$2D, Object.assign(_sfc_main$2D, {}), { components: [_sfc_main$2D] });
14539
+ const Tag = withInstall(_sfc_main$2G, Object.assign(_sfc_main$2G, {}), { components: [_sfc_main$2G] });
14530
14540
  const _TagComponent = Tag;
14531
14541
  const selectionFieldProps = {
14532
14542
  openTriggerTarget: openTriggerTargetProp,
@@ -14596,7 +14606,7 @@ const tooltipProps = {
14596
14606
  /** 无内容时不创建提示浮层。 */
14597
14607
  hideEmpty: { type: Boolean, default: true }
14598
14608
  };
14599
- const _sfc_main$2C = /* @__PURE__ */ vue.defineComponent({
14609
+ const _sfc_main$2F = /* @__PURE__ */ vue.defineComponent({
14600
14610
  ...{ name: createNamespace$1("tooltip").name, inheritAttrs: false },
14601
14611
  __name: "Tooltip",
14602
14612
  props: tooltipProps,
@@ -14702,7 +14712,7 @@ let nextDirectiveId = 0;
14702
14712
  const TooltipComponent = vue.defineComponent({
14703
14713
  props: ["options", "reference", "onVisibility"],
14704
14714
  setup(props2) {
14705
- return () => vue.h(_sfc_main$2C, {
14715
+ return () => vue.h(_sfc_main$2F, {
14706
14716
  ...props2.options,
14707
14717
  reference: props2.reference,
14708
14718
  defaultOpen: true,
@@ -14794,7 +14804,7 @@ const vTooltip = {
14794
14804
  return binding.arg === "ellipsis" ? { class: "text-ellipsis" } : {};
14795
14805
  }
14796
14806
  };
14797
- const Tooltip = withInstall(_sfc_main$2C, Object.assign(_sfc_main$2C, {
14807
+ const Tooltip = withInstall(_sfc_main$2F, Object.assign(_sfc_main$2F, {
14798
14808
  directive: vTooltip
14799
14809
  }), {
14800
14810
  setup: (app) => {
@@ -14802,8 +14812,8 @@ const Tooltip = withInstall(_sfc_main$2C, Object.assign(_sfc_main$2C, {
14802
14812
  }
14803
14813
  });
14804
14814
  const _TooltipComponent = Tooltip;
14805
- const _hoisted_1$1j = ["tabindex", "role"];
14806
- const _sfc_main$2B = /* @__PURE__ */ vue.defineComponent({
14815
+ const _hoisted_1$1k = ["tabindex", "role"];
14816
+ const _sfc_main$2E = /* @__PURE__ */ vue.defineComponent({
14807
14817
  ...{ name: createNamespace$1("selection-tag-label").name },
14808
14818
  __name: "SelectionTagLabel",
14809
14819
  props: { disabled: Boolean },
@@ -14884,16 +14894,16 @@ const _sfc_main$2B = /* @__PURE__ */ vue.defineComponent({
14884
14894
  onKeydown: handleKeydown
14885
14895
  }, [
14886
14896
  vue.renderSlot(_ctx.$slots, "default")
14887
- ], 42, _hoisted_1$1j)
14897
+ ], 42, _hoisted_1$1k)
14888
14898
  ]),
14889
14899
  _: 3
14890
14900
  }, 8, ["open", "content", "disabled"]);
14891
14901
  };
14892
14902
  }
14893
14903
  });
14894
- const _hoisted_1$1i = ["id", "value", "placeholder", "disabled", "readonly", "aria-expanded", "aria-invalid", "aria-describedby", "aria-busy", "aria-autocomplete"];
14904
+ const _hoisted_1$1j = ["id", "value", "placeholder", "disabled", "readonly", "aria-expanded", "aria-invalid", "aria-describedby", "aria-busy", "aria-autocomplete"];
14895
14905
  const _hoisted_2$z = ["tabindex", "disabled", "aria-label", "aria-expanded", "aria-haspopup", "aria-controls"];
14896
- const _sfc_main$2A = /* @__PURE__ */ vue.defineComponent({
14906
+ const _sfc_main$2D = /* @__PURE__ */ vue.defineComponent({
14897
14907
  ...{ name: createNamespace$1("selection-field").name, inheritAttrs: false },
14898
14908
  __name: "SelectionField",
14899
14909
  props: selectionFieldProps,
@@ -15000,7 +15010,7 @@ const _sfc_main$2A = /* @__PURE__ */ vue.defineComponent({
15000
15010
  }
15001
15011
  __expose({ inputRef, focus, blur });
15002
15012
  return (_ctx, _cache) => {
15003
- return vue.openBlock(), vue.createBlock(_sfc_main$2_, vue.mergeProps(decoration.value, {
15013
+ return vue.openBlock(), vue.createBlock(_sfc_main$2$, vue.mergeProps(decoration.value, {
15004
15014
  "decorative-hint": "",
15005
15015
  class: vue.unref(classes2)(
15006
15016
  vue.unref(n2)(),
@@ -15063,7 +15073,7 @@ const _sfc_main$2A = /* @__PURE__ */ vue.defineComponent({
15063
15073
  onClose: ($event) => remove(item)
15064
15074
  }), {
15065
15075
  default: vue.withCtx(() => [
15066
- _ctx.tagNowrap || item.tagProps?.nowrap ? (vue.openBlock(), vue.createBlock(_sfc_main$2B, {
15076
+ _ctx.tagNowrap || item.tagProps?.nowrap ? (vue.openBlock(), vue.createBlock(_sfc_main$2E, {
15067
15077
  key: 0,
15068
15078
  disabled: _ctx.disabled
15069
15079
  }, {
@@ -15139,7 +15149,7 @@ const _sfc_main$2A = /* @__PURE__ */ vue.defineComponent({
15139
15149
  onCompositionstart: _cache[2] || (_cache[2] = ($event) => composing.value = true),
15140
15150
  onCompositionend: handleCompositionEnd,
15141
15151
  onKeydown: handleKeydown
15142
- }), null, 16, _hoisted_1$1i)
15152
+ }), null, 16, _hoisted_1$1j)
15143
15153
  ], 6)
15144
15154
  ]),
15145
15155
  _: 2
@@ -15533,6 +15543,7 @@ function useSelectController(props2, { emit }) {
15533
15543
  () => props2.modelValue !== void 0 ? props2.modelValue : _value.value
15534
15544
  );
15535
15545
  const deferred = vue.computed(() => editMode.value !== "direct");
15546
+ const needConfirm = vue.computed(() => props2.needConfirm ?? props2.multiple);
15536
15547
  const publish = (value) => {
15537
15548
  _value.value = value;
15538
15549
  emit("update:modelValue", value);
@@ -15754,6 +15765,10 @@ function useSelectController(props2, { emit }) {
15754
15765
  handleOpenChange(false);
15755
15766
  }
15756
15767
  }
15768
+ nativeOwner?.onSelect?.(ev);
15769
+ if (deferred.value && !needConfirm.value) {
15770
+ void session.commit(ev);
15771
+ }
15757
15772
  };
15758
15773
  const handleSearch = useFieldSearch(
15759
15774
  () => props2.searchDelay,
@@ -15793,6 +15808,9 @@ function useSelectController(props2, { emit }) {
15793
15808
  }
15794
15809
  const newKeys = computedValueObjects.value.map((item) => item.key).filter((_key) => _key !== key);
15795
15810
  session.update(getValueFromValueKeys(newKeys));
15811
+ if (deferred.value && !needConfirm.value) {
15812
+ void session.commit();
15813
+ }
15796
15814
  emit("remove", optionInfo?.value);
15797
15815
  };
15798
15816
  const clearSelection = (e) => {
@@ -15817,6 +15835,7 @@ function useSelectController(props2, { emit }) {
15817
15835
  clearedValue = [];
15818
15836
  }
15819
15837
  session.update(clearedValue);
15838
+ if (deferred.value && !needConfirm.value) void session.commit();
15820
15839
  updateInputValue("");
15821
15840
  if (!deferred.value) {
15822
15841
  eventHandlers.value?.onClear?.();
@@ -15922,7 +15941,9 @@ function useSelectController(props2, { emit }) {
15922
15941
  props: vue.shallowReactive(props2),
15923
15942
  listboxId,
15924
15943
  activeDescendant: vue.computed(() => computedOpen.value && !loading.value && activeKey.value && enabledOptionKeys.value.includes(activeKey.value) && (optionRefs.value[activeKey.value] || !props2.virtualListProps && optionInfoMap.get(activeKey.value)?.ref) ? getOptionId(activeKey.value) : void 0),
15925
- provideNativeEditorOwner: () => vue.provide(selectNativeEditorOwner, { source, selectedOptions: _selectedOption }),
15944
+ provideNativeEditorOwner: () => vue.provide(selectNativeEditorOwner, { source, selectedOptions: _selectedOption, onSelect: (event) => {
15945
+ if (!needConfirm.value) void session.commit(event);
15946
+ } }),
15926
15947
  loading,
15927
15948
  refresh: source.refresh,
15928
15949
  registerPresentation: presentationState.register,
@@ -15968,7 +15989,8 @@ function useSelectController(props2, { emit }) {
15968
15989
  handleDropdownReachBottom,
15969
15990
  session,
15970
15991
  deferred,
15971
- canConfirm
15992
+ canConfirm,
15993
+ needConfirm
15972
15994
  };
15973
15995
  }
15974
15996
  function _isSlot$b(s) {
@@ -16027,7 +16049,7 @@ const Select$1 = /* @__PURE__ */ vue.defineComponent({
16027
16049
  controller.handleKeyDown(event);
16028
16050
  }
16029
16051
  };
16030
- const renderEditor = () => vue.createVNode(_sfc_main$2F, {
16052
+ const renderEditor = () => vue.createVNode(_sfc_main$2I, {
16031
16053
  "open": controller.computedOpen,
16032
16054
  "multiple": props2.multiple,
16033
16055
  "items": controller.selectedItems.map((item) => ({
@@ -16042,7 +16064,7 @@ const Select$1 = /* @__PURE__ */ vue.defineComponent({
16042
16064
  "onRemove": (key) => controller.handleRemove(String(key)),
16043
16065
  "onClear": controller.clearSelection
16044
16066
  }, {
16045
- default: () => [(props2.filterable || props2.creatable) && vue.createVNode(Input, {
16067
+ default: () => [(props2.filterable || props2.creatable) && vue.createVNode(SearchInput, {
16046
16068
  "modelValue": controller.computedInputValue,
16047
16069
  "editMode": "direct",
16048
16070
  "hint": false,
@@ -16075,14 +16097,14 @@ const Select$1 = /* @__PURE__ */ vue.defineComponent({
16075
16097
  style,
16076
16098
  ...restAttrs
16077
16099
  } = attrs;
16078
- const Presentation = _sfc_main$2E;
16100
+ const Presentation = _sfc_main$2H;
16079
16101
  const text = controller.fieldItems.map((item) => {
16080
16102
  const raw = controller.optionInfoMap.get(String(item.key))?.raw;
16081
16103
  const formatted = raw && isFunction(props2.formatLabel) ? props2.formatLabel(raw) : item.label;
16082
16104
  return String(typeof formatted === "string" || typeof formatted === "number" ? formatted : item.label ?? "");
16083
16105
  }).join(props2.separator);
16084
16106
  if (controller.editMode !== "direct" || controller.readPretty) {
16085
- return vue.createVNode(_sfc_main$31, vue.mergeProps({
16107
+ return vue.createVNode(_sfc_main$32, vue.mergeProps({
16086
16108
  "loading": controller.loading,
16087
16109
  "ref": presentationRef,
16088
16110
  "style": props2.textAlign ? {
@@ -16108,7 +16130,7 @@ const Select$1 = /* @__PURE__ */ vue.defineComponent({
16108
16130
  "disabled": controller.mergedDisabled,
16109
16131
  "readonly": controller.mergedReadonly,
16110
16132
  "limit": props2.limit,
16111
- "needConfirm": controller.deferred,
16133
+ "needConfirm": controller.deferred && controller.needConfirm,
16112
16134
  "pending": controller.session.pending,
16113
16135
  "error": controller.session.error || controller.presentationError,
16114
16136
  "onOpen": controller.handleOpenChange,
@@ -16131,7 +16153,7 @@ const Select$1 = /* @__PURE__ */ vue.defineComponent({
16131
16153
  editMode: "direct",
16132
16154
  readPretty: false,
16133
16155
  beforeCommit: void 0,
16134
- open: void 0,
16156
+ open: controller.needConfirm ? void 0 : true,
16135
16157
  defaultOpen: true,
16136
16158
  modelValue: controller.session.value,
16137
16159
  disabled: controller.mergedDisabled || controller.session.pending,
@@ -16140,9 +16162,15 @@ const Select$1 = /* @__PURE__ */ vue.defineComponent({
16140
16162
  onKeydown: (event) => emit("keydown", event),
16141
16163
  onSearch: (...args) => emit("search", ...args),
16142
16164
  onChange: () => {
16165
+ },
16166
+ onClear: () => {
16167
+ if (!controller.needConfirm) void controller.session.commit();
16168
+ },
16169
+ onRemove: () => {
16170
+ if (!controller.needConfirm) void controller.session.commit();
16143
16171
  }
16144
16172
  }, slots)
16145
- }) : vue.createVNode(_sfc_main$30, {
16173
+ }) : vue.createVNode(_sfc_main$31, {
16146
16174
  "kind": "select"
16147
16175
  }, _isSlot$b(_slot = renderEditor()) ? _slot : {
16148
16176
  default: () => [_slot]
@@ -16153,7 +16181,7 @@ const Select$1 = /* @__PURE__ */ vue.defineComponent({
16153
16181
  return vue.createVNode(Presentation, {
16154
16182
  "controller": controller
16155
16183
  }, {
16156
- default: () => vue.createVNode(_sfc_main$2F, {
16184
+ default: () => vue.createVNode(_sfc_main$2I, {
16157
16185
  "open": controller.computedOpen,
16158
16186
  "multiple": props2.multiple,
16159
16187
  "items": controller.selectedItems.map((item) => ({
@@ -16175,7 +16203,7 @@ const Select$1 = /* @__PURE__ */ vue.defineComponent({
16175
16203
  reference: () => slots.trigger?.() ?? vue.createVNode("div", {
16176
16204
  "class": [classes2(n2()), className],
16177
16205
  "style": style
16178
- }, [vue.createVNode(_sfc_main$2A, vue.mergeProps({
16206
+ }, [vue.createVNode(_sfc_main$2D, vue.mergeProps({
16179
16207
  "ref": fieldRef,
16180
16208
  "openTriggerTarget": props2.openTriggerTarget,
16181
16209
  "showTags": props2.showTags,
@@ -16224,7 +16252,7 @@ const Select$1 = /* @__PURE__ */ vue.defineComponent({
16224
16252
  "arrow-icon": slots["arrow-icon"],
16225
16253
  "loading-icon": slots["loading-icon"],
16226
16254
  "search-icon": slots["search-icon"],
16227
- suffix: () => slots.suffix?.() ?? (controller.feedback ? vue.createVNode(_sfc_main$2Z, {
16255
+ suffix: () => slots.suffix?.() ?? (controller.feedback ? vue.createVNode(_sfc_main$2_, {
16228
16256
  "status": controller.feedback
16229
16257
  }, null) : null),
16230
16258
  "clear-icon": slots["clear-icon"]
@@ -16672,8 +16700,8 @@ function useRadioRegistration(navigation, item) {
16672
16700
  vue.onScopeDispose(stop);
16673
16701
  return vue.computed(() => navigation ? navigation.tabIndex(item) : item.disabled() ? void 0 : 0);
16674
16702
  }
16675
- const _hoisted_1$1h = ["name", "value", "checked", "disabled", "tabindex", "aria-label", "aria-readonly", "aria-describedby", "aria-invalid"];
16676
- const _sfc_main$2z = /* @__PURE__ */ vue.defineComponent({
16703
+ const _hoisted_1$1i = ["name", "value", "checked", "disabled", "tabindex", "aria-label", "aria-readonly", "aria-describedby", "aria-invalid"];
16704
+ const _sfc_main$2C = /* @__PURE__ */ vue.defineComponent({
16677
16705
  ...{ name: createNamespace$1("radio").name, inheritAttrs: false },
16678
16706
  __name: "radio",
16679
16707
  props: radioProps,
@@ -16819,7 +16847,7 @@ const _sfc_main$2z = /* @__PURE__ */ vue.defineComponent({
16819
16847
  (...args) => vue.unref(keyboard).keyup && vue.unref(keyboard).keyup(...args)),
16820
16848
  onFocus: handleFocus,
16821
16849
  onBlur: handleBlur
16822
- }), null, 16, _hoisted_1$1h),
16850
+ }), null, 16, _hoisted_1$1i),
16823
16851
  variant.value === "button" ? (vue.openBlock(), vue.createElementBlock("span", {
16824
16852
  key: 0,
16825
16853
  class: vue.normalizeClass(vue.unref(n2)("button-label"))
@@ -16868,9 +16896,9 @@ const _sfc_main$2z = /* @__PURE__ */ vue.defineComponent({
16868
16896
  };
16869
16897
  }
16870
16898
  });
16871
- const _Radio = withFieldPresentation(_sfc_main$2z, { methods: ["select", "focus", "blur"] });
16872
- const _hoisted_1$1g = ["aria-describedby", "aria-busy", "aria-label", "aria-disabled", "aria-readonly", "aria-invalid"];
16873
- const _sfc_main$2y = /* @__PURE__ */ vue.defineComponent({
16899
+ const _Radio = withFieldPresentation(_sfc_main$2C, { methods: ["select", "focus", "blur"] });
16900
+ const _hoisted_1$1h = ["aria-describedby", "aria-busy", "aria-label", "aria-disabled", "aria-readonly", "aria-invalid"];
16901
+ const _sfc_main$2B = /* @__PURE__ */ vue.defineComponent({
16874
16902
  ...{ name: createNamespace$1("radio-group").name, inheritAttrs: false },
16875
16903
  __name: "radio-group",
16876
16904
  props: radioGroupProps,
@@ -16952,11 +16980,11 @@ const _sfc_main$2y = /* @__PURE__ */ vue.defineComponent({
16952
16980
  _: 2
16953
16981
  }, 1032, ["value", "disabled", "readonly"]);
16954
16982
  }), 128)) : vue.renderSlot(_ctx.$slots, "default", { key: 1 })
16955
- ], 16, _hoisted_1$1g);
16983
+ ], 16, _hoisted_1$1h);
16956
16984
  };
16957
16985
  }
16958
16986
  });
16959
- const RadioGroup = withFieldPresentation(_sfc_main$2y, { text: optionValueText });
16987
+ const RadioGroup = withFieldPresentation(_sfc_main$2B, { text: optionValueText });
16960
16988
  const Radio = withInstall(
16961
16989
  _Radio,
16962
16990
  Object.assign(_Radio, {
@@ -17510,7 +17538,7 @@ const iconProps = {
17510
17538
  };
17511
17539
  const registeredPrefix = "C";
17512
17540
  const spinClass = "c-icon-spin";
17513
- const _sfc_main$2x = /* @__PURE__ */ vue.defineComponent({
17541
+ const _sfc_main$2A = /* @__PURE__ */ vue.defineComponent({
17514
17542
  ...{
17515
17543
  name: createNamespace$1("icon").name
17516
17544
  },
@@ -17655,7 +17683,7 @@ const _sfc_main$2x = /* @__PURE__ */ vue.defineComponent({
17655
17683
  };
17656
17684
  }
17657
17685
  });
17658
- const Icon = withInstall(_sfc_main$2x);
17686
+ const Icon = withInstall(_sfc_main$2A);
17659
17687
  const _IconComponent = Icon;
17660
17688
  const cardVariants = ["default", "outline", "tonal"];
17661
17689
  const cardSizes = ["sm", "md"];
@@ -17770,8 +17798,8 @@ const dividerProps = {
17770
17798
  validator: process.env.NODE_ENV !== "production" ? isValidDividerOpacity : void 0
17771
17799
  }
17772
17800
  };
17773
- const _hoisted_1$1f = ["aria-orientation"];
17774
- const _sfc_main$2w = /* @__PURE__ */ vue.defineComponent({
17801
+ const _hoisted_1$1g = ["aria-orientation"];
17802
+ const _sfc_main$2z = /* @__PURE__ */ vue.defineComponent({
17775
17803
  ...{ name: createNamespace$1("divider").name },
17776
17804
  __name: "Divider",
17777
17805
  props: dividerProps,
@@ -17876,11 +17904,11 @@ const _sfc_main$2w = /* @__PURE__ */ vue.defineComponent({
17876
17904
  class: vue.normalizeClass(vue.unref(n2)("text"))
17877
17905
  }, vue.toDisplayString(_ctx.description), 3)) : vue.createCommentVNode("", true)
17878
17906
  ])
17879
- ], 14, _hoisted_1$1f);
17907
+ ], 14, _hoisted_1$1g);
17880
17908
  };
17881
17909
  }
17882
17910
  });
17883
- const Divider = withInstall(_sfc_main$2w, Object.assign(_sfc_main$2w, {}), { components: [_sfc_main$2w] });
17911
+ const Divider = withInstall(_sfc_main$2z, Object.assign(_sfc_main$2z, {}), { components: [_sfc_main$2z] });
17884
17912
  const _DividerComponent = Divider;
17885
17913
  function useCardSize(size) {
17886
17914
  const { mergedSize } = useSize$1(vue.computed(size));
@@ -17890,11 +17918,11 @@ function useCardCloseLabel() {
17890
17918
  const { t } = useI18n();
17891
17919
  return vue.computed(() => t("common.close"));
17892
17920
  }
17893
- const _hoisted_1$1e = ["src", "alt"];
17921
+ const _hoisted_1$1f = ["src", "alt"];
17894
17922
  const _hoisted_2$y = ["inert", "aria-hidden"];
17895
- const _hoisted_3$j = ["inert", "aria-hidden"];
17923
+ const _hoisted_3$k = ["inert", "aria-hidden"];
17896
17924
  const RIPPLE_DELAY = 500;
17897
- const _sfc_main$2v = /* @__PURE__ */ vue.defineComponent({
17925
+ const _sfc_main$2y = /* @__PURE__ */ vue.defineComponent({
17898
17926
  ...{ name: createNamespace$1("card").name },
17899
17927
  __name: "Card",
17900
17928
  props: cardProps,
@@ -17970,6 +17998,29 @@ const _sfc_main$2v = /* @__PURE__ */ vue.defineComponent({
17970
17998
  const { onStackTop } = usePopupLayer(wantsFloating, zIndex, () => card.value?.ownerDocument, true);
17971
17999
  const available2 = () => active && !disposed;
17972
18000
  let openingWaiting = false;
18001
+ let cancelOpeningFrames;
18002
+ function waitForOwnerFrames(view) {
18003
+ cancelOpeningFrames?.();
18004
+ return new Promise((resolve) => {
18005
+ let handle;
18006
+ let settled = false;
18007
+ const finish = (completed) => {
18008
+ if (settled) return;
18009
+ settled = true;
18010
+ if (cancelOpeningFrames === cancel) cancelOpeningFrames = void 0;
18011
+ resolve(completed);
18012
+ };
18013
+ const cancel = () => {
18014
+ if (handle !== void 0) view.cancelAnimationFrame?.(handle);
18015
+ finish(false);
18016
+ };
18017
+ cancelOpeningFrames = cancel;
18018
+ handle = view.requestAnimationFrame(() => {
18019
+ if (settled) return;
18020
+ handle = view.requestAnimationFrame(() => finish(true));
18021
+ });
18022
+ });
18023
+ }
17973
18024
  let reducedMotion = false;
17974
18025
  let stopMotionTracking;
17975
18026
  function trackMotion(element2) {
@@ -18005,6 +18056,7 @@ const _sfc_main$2v = /* @__PURE__ */ vue.defineComponent({
18005
18056
  wantsFloating,
18006
18057
  (value) => {
18007
18058
  const token = ++generation;
18059
+ cancelOpeningFrames?.();
18008
18060
  if (!active) {
18009
18061
  if (!disposed && value) trackInactiveFocus();
18010
18062
  else {
@@ -18035,6 +18087,7 @@ const _sfc_main$2v = /* @__PURE__ */ vue.defineComponent({
18035
18087
  return;
18036
18088
  }
18037
18089
  const token = ++generation;
18090
+ cancelOpeningFrames?.();
18038
18091
  const element2 = card.value;
18039
18092
  let consumed = false;
18040
18093
  clearTimeout(floater.value ?? void 0);
@@ -18061,7 +18114,14 @@ const _sfc_main$2v = /* @__PURE__ */ vue.defineComponent({
18061
18114
  dropdownFloaterTop = floaterTop.value;
18062
18115
  dropdownFloaterLeft = floaterLeft.value;
18063
18116
  showFloatingButtons.value = true;
18064
- if (!reducedMotion) await sharedVue.doubleRaf();
18117
+ if (!reducedMotion) {
18118
+ const view = element2.ownerDocument.defaultView;
18119
+ if (view && typeof document !== "undefined" && element2.ownerDocument !== document && typeof view.requestAnimationFrame === "function") {
18120
+ if (!await waitForOwnerFrames(view)) return;
18121
+ } else {
18122
+ await sharedVue.doubleRaf();
18123
+ }
18124
+ }
18065
18125
  if (!current(token, element2) || !wantsFloating()) {
18066
18126
  return;
18067
18127
  }
@@ -18083,6 +18143,7 @@ const _sfc_main$2v = /* @__PURE__ */ vue.defineComponent({
18083
18143
  return;
18084
18144
  }
18085
18145
  const token = ++generation;
18146
+ cancelOpeningFrames?.();
18086
18147
  const element2 = card.value;
18087
18148
  let consumed = false;
18088
18149
  clearTimeout(dropper);
@@ -18171,6 +18232,7 @@ const _sfc_main$2v = /* @__PURE__ */ vue.defineComponent({
18171
18232
  }
18172
18233
  });
18173
18234
  function cleanup() {
18235
+ cancelOpeningFrames?.();
18174
18236
  openingWaiting = false;
18175
18237
  active = false;
18176
18238
  generation++;
@@ -18227,7 +18289,7 @@ const _sfc_main$2v = /* @__PURE__ */ vue.defineComponent({
18227
18289
  }),
18228
18290
  src: _ctx.src,
18229
18291
  alt: _ctx.alt
18230
- }, null, 14, _hoisted_1$1e)) : vue.createCommentVNode("", true)
18292
+ }, null, 14, _hoisted_1$1f)) : vue.createCommentVNode("", true)
18231
18293
  ]),
18232
18294
  vue.createElementVNode("div", {
18233
18295
  class: vue.normalizeClass(vue.unref(n2)("container"))
@@ -18316,7 +18378,7 @@ const _sfc_main$2v = /* @__PURE__ */ vue.defineComponent({
18316
18378
  })
18317
18379
  }, [
18318
18380
  vue.renderSlot(_ctx.$slots, "close-button", {}, () => [
18319
- vue.createVNode(vue.unref(Button), {
18381
+ vue.createVNode(vue.unref(Button$1), {
18320
18382
  "data-card-cover": "",
18321
18383
  class: vue.normalizeClass(vue.unref(classes2)(vue.unref(n2)("close-button"), vue.unref(n2)("$-elevation--6"))),
18322
18384
  "aria-label": props2.closeButtonAriaLabel ?? vue.unref(closeLabel),
@@ -18336,7 +18398,7 @@ const _sfc_main$2v = /* @__PURE__ */ vue.defineComponent({
18336
18398
  _: 1
18337
18399
  }, 8, ["class", "aria-label"])
18338
18400
  ])
18339
- ], 14, _hoisted_3$j)) : vue.createCommentVNode("", true)
18401
+ ], 14, _hoisted_3$k)) : vue.createCommentVNode("", true)
18340
18402
  ], 38),
18341
18403
  vue.createElementVNode("div", {
18342
18404
  class: vue.normalizeClass(vue.unref(n2)("holder")),
@@ -18351,7 +18413,7 @@ const _sfc_main$2v = /* @__PURE__ */ vue.defineComponent({
18351
18413
  };
18352
18414
  }
18353
18415
  });
18354
- const Card = withInstall(_sfc_main$2v, Object.assign(_sfc_main$2v, {}), { components: [_sfc_main$2v] });
18416
+ const Card = withInstall(_sfc_main$2y, Object.assign(_sfc_main$2y, {}), { components: [_sfc_main$2y] });
18355
18417
  const _CardComponent = Card;
18356
18418
  const carouselInjectionKey = Symbol("Carousel");
18357
18419
  function normalizeIndex(value, length, loop = false) {
@@ -18469,7 +18531,7 @@ function useCarouselLocale() {
18469
18531
  goto: (index) => String(t("carousel.goto")).replace("{index}", String(index))
18470
18532
  }));
18471
18533
  }
18472
- const _sfc_main$2u = /* @__PURE__ */ vue.defineComponent({
18534
+ const _sfc_main$2x = /* @__PURE__ */ vue.defineComponent({
18473
18535
  ...{ name: createNamespace$1("carousel").name, inheritAttrs: false },
18474
18536
  __name: "carousel",
18475
18537
  props: carouselProps,
@@ -19197,8 +19259,8 @@ const _sfc_main$2u = /* @__PURE__ */ vue.defineComponent({
19197
19259
  };
19198
19260
  }
19199
19261
  });
19200
- const _hoisted_1$1d = ["aria-label", "aria-hidden", "inert"];
19201
- const _sfc_main$2t = /* @__PURE__ */ vue.defineComponent({
19262
+ const _hoisted_1$1e = ["aria-label", "aria-hidden", "inert"];
19263
+ const _sfc_main$2w = /* @__PURE__ */ vue.defineComponent({
19202
19264
  ...{ name: createNamespace$1("carousel-item").name },
19203
19265
  __name: "CarouselItem",
19204
19266
  props: carouselItemProps,
@@ -19235,15 +19297,15 @@ const _sfc_main$2t = /* @__PURE__ */ vue.defineComponent({
19235
19297
  tabindex: "-1"
19236
19298
  }, [
19237
19299
  vue.renderSlot(_ctx.$slots, "default")
19238
- ], 14, _hoisted_1$1d);
19300
+ ], 14, _hoisted_1$1e);
19239
19301
  };
19240
19302
  }
19241
19303
  });
19242
- const Carousel = withInstall(_sfc_main$2u, Object.assign(_sfc_main$2u, { Item: _sfc_main$2t }), {
19243
- components: [_sfc_main$2u, _sfc_main$2t]
19304
+ const Carousel = withInstall(_sfc_main$2x, Object.assign(_sfc_main$2x, { Item: _sfc_main$2w }), {
19305
+ components: [_sfc_main$2x, _sfc_main$2w]
19244
19306
  });
19245
19307
  const _CarouselComponent = Carousel;
19246
- const _CarouselItemComponent = _sfc_main$2t;
19308
+ const _CarouselItemComponent = _sfc_main$2w;
19247
19309
  const checkboxGroupKey = Symbol("CheckboxGroup");
19248
19310
  const checkboxProps = {
19249
19311
  ...fieldPresentationProps,
@@ -19344,10 +19406,10 @@ function useChoiceForm(props2) {
19344
19406
  error: vue.toRef(props2, "error")
19345
19407
  });
19346
19408
  }
19347
- const _hoisted_1$1c = ["aria-disabled"];
19409
+ const _hoisted_1$1d = ["aria-disabled"];
19348
19410
  const _hoisted_2$x = ["name", "value", "checked", "indeterminate", "disabled", "aria-label", "aria-readonly", "aria-describedby", "aria-invalid"];
19349
- const _hoisted_3$i = ["aria-hidden"];
19350
- const _sfc_main$2s = /* @__PURE__ */ vue.defineComponent({
19411
+ const _hoisted_3$j = ["aria-hidden"];
19412
+ const _sfc_main$2v = /* @__PURE__ */ vue.defineComponent({
19351
19413
  ...{ name: createNamespace$1("checkbox").name, inheritAttrs: false },
19352
19414
  __name: "checkbox",
19353
19415
  props: checkboxProps,
@@ -19527,7 +19589,7 @@ const _sfc_main$2s = /* @__PURE__ */ vue.defineComponent({
19527
19589
  }, null, 2)
19528
19590
  ])
19529
19591
  ], 64))
19530
- ], 10, _hoisted_3$i)), [
19592
+ ], 10, _hoisted_3$j)), [
19531
19593
  [vue.unref(Ripple), { disabled: mergedDisabled.value || mergedReadonly.value || !_ctx.ripple }]
19532
19594
  ]),
19533
19595
  _ctx.$slots.default ? (vue.openBlock(), vue.createElementBlock("span", {
@@ -19536,115 +19598,12 @@ const _sfc_main$2s = /* @__PURE__ */ vue.defineComponent({
19536
19598
  }, [
19537
19599
  vue.renderSlot(_ctx.$slots, "default", { checked: vue.unref(checked) })
19538
19600
  ], 2)) : vue.createCommentVNode("", true)
19539
- ], 16, _hoisted_1$1c);
19540
- };
19541
- }
19542
- });
19543
- const _Checkbox = withFieldPresentation(_sfc_main$2s, { methods: ["toggle", "focus", "blur"] });
19544
- const _hoisted_1$1b = ["aria-describedby", "aria-busy", "aria-label", "aria-disabled"];
19545
- const _sfc_main$2r = /* @__PURE__ */ vue.defineComponent({
19546
- ...{ name: createNamespace$1("checkbox-group").name, inheritAttrs: false },
19547
- __name: "checkbox-group",
19548
- props: checkboxGroupProps,
19549
- emits: ["update:open", "open-change", "load-error", "update:modelValue", "change"],
19550
- setup(__props, { expose: __expose, emit: __emit }) {
19551
- const { n: n2, classes: classes2 } = createNamespace$1("checkbox-group");
19552
- const props2 = __props;
19553
- const { errorId, describe: describeError } = useFormErrorDescription();
19554
- const resolvedOrientation = vue.computed(() => props2.orientation === "vertical" ? "vertical" : "horizontal");
19555
- const slots = vue.useSlots();
19556
- const emit = __emit;
19557
- const { mergedDisabled, mergedReadonly, mergedError, eventHandlers } = useChoiceForm(props2);
19558
- const source = useOptionRequest(
19559
- () => props2.options,
19560
- () => mergedDisabled.value || mergedReadonly.value || !!props2.readPretty,
19561
- (error) => emit("load-error", error),
19562
- () => 0,
19563
- checkboxGroupProps
19564
- );
19565
- const { value: computedValue, commit: handleChange } = useChoiceState(
19566
- () => props2.modelValue === null ? [] : props2.modelValue,
19567
- props2.defaultValue,
19568
- (value, event) => {
19569
- emit("update:modelValue", value);
19570
- emit("change", value, event);
19571
- eventHandlers.value?.onChange?.(event);
19572
- },
19573
- () => mergedDisabled.value || mergedReadonly.value
19574
- );
19575
- const normalizedOptions = vue.computed(() => normalizeChoiceOptions(source.options.value, props2.fieldNames));
19576
- const isMaxed = vue.computed(() => computedValue.value.length >= choiceLimit(props2.max));
19577
- const { register: registerChoice, methods: methods2 } = useCheckboxGroupMethods(
19578
- () => computedValue.value,
19579
- handleChange,
19580
- () => mergedDisabled.value || mergedReadonly.value,
19581
- () => props2.max
19582
- );
19583
- vue.provide(
19584
- checkboxGroupKey,
19585
- vue.reactive({
19586
- registerChoice,
19587
- computedValue,
19588
- disabled: mergedDisabled,
19589
- readonly: mergedReadonly,
19590
- error: mergedError,
19591
- formErrorId: errorId,
19592
- isMaxed,
19593
- name: vue.computed(() => props2.name),
19594
- slots,
19595
- handleChange
19596
- })
19597
- );
19598
- __expose(methods2);
19599
- return (_ctx, _cache) => {
19600
- return vue.openBlock(), vue.createElementBlock("div", vue.mergeProps(_ctx.$attrs, {
19601
- "aria-describedby": vue.unref(describeError)(_ctx.$attrs["aria-describedby"]),
19602
- class: vue.unref(classes2)(vue.unref(n2)(), vue.unref(n2)(`--${resolvedOrientation.value}`)),
19603
- "aria-busy": vue.unref(source).loading.value || void 0,
19604
- role: "group",
19605
- "aria-label": _ctx.ariaLabel,
19606
- "aria-disabled": vue.unref(mergedDisabled) || void 0
19607
- }), [
19608
- props2.options !== void 0 ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(normalizedOptions.value, (option2) => {
19609
- return vue.openBlock(), vue.createBlock(vue.unref(_Checkbox), {
19610
- key: `${typeof option2.value}:${String(option2.value)}`,
19611
- "edit-mode": "direct",
19612
- value: option2.value,
19613
- disabled: option2.disabled,
19614
- readonly: option2.readonly,
19615
- indeterminate: option2.indeterminate
19616
- }, {
19617
- default: vue.withCtx(({ checked }) => [
19618
- vue.renderSlot(_ctx.$slots, "label", {
19619
- data: option2,
19620
- checked
19621
- }, () => [
19622
- vue.createVNode(vue.unref(ChoiceLabel), {
19623
- content: typeof option2.label === "function" ? option2.label(option2, checked) : option2.label
19624
- }, null, 8, ["content"])
19625
- ])
19626
- ]),
19627
- _: 2
19628
- }, 1032, ["value", "disabled", "readonly", "indeterminate"]);
19629
- }), 128)) : vue.renderSlot(_ctx.$slots, "default", { key: 1 })
19630
- ], 16, _hoisted_1$1b);
19601
+ ], 16, _hoisted_1$1d);
19631
19602
  };
19632
19603
  }
19633
19604
  });
19634
- const CheckboxGroup = withFieldPresentation(_sfc_main$2r, {
19635
- text: optionValueText,
19636
- methods: ["checkAll", "inverseAll"],
19637
- inactiveMethod: (_name, value) => Array.isArray(value) ? [...value] : []
19638
- });
19639
- const Checkbox = withInstall(
19640
- _Checkbox,
19641
- Object.assign(_Checkbox, {
19642
- Group: CheckboxGroup
19643
- }),
19644
- { components: [_Checkbox, CheckboxGroup] }
19645
- );
19646
- const _CheckboxComponent = Checkbox;
19647
- const _CheckboxGroupComponent = CheckboxGroup;
19605
+ const Checkbox$1 = withFieldPresentation(_sfc_main$2v, { methods: ["toggle", "focus", "blur"] });
19606
+ const _Checkbox = withPropsDefaultsSetter(Checkbox$1, Checkbox$1.props);
19648
19607
  const cascaderInjectionKey = Symbol("CedarCascader");
19649
19608
  function collectTreeLeaves(nodes, children, disabled = () => false, isLeaf = (node) => !children(node)?.length) {
19650
19609
  return nodes.flatMap((node) => disabled(node) ? [] : isLeaf(node) ? [node] : collectTreeLeaves(children(node) ?? [], children, disabled, isLeaf));
@@ -19794,6 +19753,8 @@ const getValidValues = (value, { multiple, pathMode }) => {
19794
19753
  const getOptionLabel = (option2) => {
19795
19754
  return option2.path.map((item) => item.label).join(" / ");
19796
19755
  };
19756
+ const INTERACTIVE_ROLES = /* @__PURE__ */ new Set(["button", "link", "checkbox", "radio", "switch", "textbox", "combobox", "menuitem", "menuitemcheckbox", "menuitemradio", "option", "treeitem", "gridcell", "slider", "spinbutton", "tab"]);
19757
+ const CONCRETE_ROLES = new Set("alert alertdialog application article banner blockquote button caption cell checkbox code columnheader combobox comment complementary contentinfo definition deletion directory document emphasis feed figure form generic grid gridcell group heading image img insertion link list listbox listitem log main mark marquee math menu menubar menuitem menuitemcheckbox menuitemradio meter navigation none note option paragraph presentation progressbar radio radiogroup region row rowgroup rowheader scrollbar search searchbox sectionfooter sectionheader separator slider spinbutton status strong suggestion subscript superscript switch tab table tablist tabpanel term textbox time timer toolbar tooltip tree treegrid treeitem doc-abstract doc-acknowledgments doc-afterword doc-appendix doc-backlink doc-biblioentry doc-bibliography doc-biblioref doc-chapter doc-colophon doc-conclusion doc-cover doc-credit doc-credits doc-dedication doc-endnote doc-endnotes doc-epigraph doc-epilogue doc-errata doc-example doc-footnote doc-foreword doc-glossary doc-glossref doc-index doc-introduction doc-noteref doc-notice doc-pagebreak doc-pagefooter doc-pageheader doc-pagelist doc-part doc-preface doc-prologue doc-pullquote doc-qna doc-subtitle doc-tip doc-toc graphics-document graphics-object graphics-symbol".split(" "));
19797
19758
  function ownsOptionClick(event) {
19798
19759
  if (event.defaultPrevented) return false;
19799
19760
  const boundary = event.currentTarget;
@@ -19811,7 +19772,10 @@ function ownsOptionClick(event) {
19811
19772
  if (item === boundary) break;
19812
19773
  const element2 = item;
19813
19774
  if (element2?.nodeType !== 1 || typeof element2.matches !== "function") continue;
19814
- if (element2.matches('li[data-cascader-key], button, a[href], input, select, textarea, summary, [contenteditable]:not([contenteditable="false"]), [role="button"], [role="link"], [role="checkbox"], [role="radio"], [role="switch"], [role="textbox"], [role="combobox"], [role="menuitem"], [role="menuitemcheckbox"], [role="menuitemradio"], [role="option"], [role="treeitem"], [role="gridcell"], [role="slider"], [role="spinbutton"], [role="tab"]')) return false;
19775
+ const primaryRole = element2.getAttribute("role")?.trim().split(/\s+/).find((role) => CONCRETE_ROLES.has(role));
19776
+ if (primaryRole && INTERACTIVE_ROLES.has(primaryRole)) return false;
19777
+ if (element2.hasAttribute("tabindex") && element2.tabIndex >= 0) return false;
19778
+ if (element2.matches('li[data-cascader-key], button, a[href], input, select, textarea, summary, audio[controls], video[controls], [contenteditable]:not([contenteditable="false"])')) return false;
19815
19779
  if (element2.matches("label") && (element2.htmlFor || element2.querySelector("input, button, select, textarea"))) return false;
19816
19780
  }
19817
19781
  return true;
@@ -19876,7 +19840,9 @@ const CascaderOption = /* @__PURE__ */ vue.defineComponent({
19876
19840
  },
19877
19841
  onMouseleave: (event) => {
19878
19842
  const element2 = event.currentTarget;
19879
- const focused = element2.ownerDocument.activeElement;
19843
+ const nodeRoot = element2.getRootNode();
19844
+ const focusRoot = "activeElement" in nodeRoot ? nodeRoot : element2.ownerDocument;
19845
+ const focused = focusRoot.activeElement;
19880
19846
  let focusedOption = focused?.closest("[data-cascader-key]");
19881
19847
  const panelSelector = `.${getPrefixCls("cascader")}-panel, .${getPrefixCls("cascader")}-editor-panel`;
19882
19848
  const panel2 = element2.closest(panelSelector);
@@ -19957,7 +19923,7 @@ const CascaderOption = /* @__PURE__ */ vue.defineComponent({
19957
19923
  }, events), [props2.multiple && vue.createVNode("span", {
19958
19924
  "class": `${prefixCls2}-checkbox`,
19959
19925
  "onClick": (event) => event.stopPropagation()
19960
- }, [vue.createVNode(Checkbox, {
19926
+ }, [vue.createVNode(_Checkbox, {
19961
19927
  "editMode": "direct",
19962
19928
  "uninjectGroupContext": true,
19963
19929
  "modelValue": Boolean(checkedStatus.value.checked),
@@ -19969,9 +19935,7 @@ const CascaderOption = /* @__PURE__ */ vue.defineComponent({
19969
19935
  if (props2.option.disabled || props2.option.selectionDisabled) {
19970
19936
  return;
19971
19937
  }
19972
- const task = handlePathChange(new Event("change"));
19973
19938
  cascaderCtx.onClickOption?.(props2.option, Boolean(checked));
19974
- return task;
19975
19939
  }
19976
19940
  }, null)]), vue.createVNode("div", {
19977
19941
  "class": `${prefixCls2}-label`
@@ -20342,9 +20306,11 @@ function useCascaderFocus(activeKey) {
20342
20306
  vue.onBeforeUnmount(() => cancelPendingFocus?.());
20343
20307
  return (root, option2, originPanel, panelSelector) => {
20344
20308
  const key = activeKey.value;
20345
- if (!key || !root.contains(option2) || root.ownerDocument.activeElement !== option2) return;
20346
- cancelPendingFocus?.();
20347
20309
  const document2 = root.ownerDocument;
20310
+ const nodeRoot = root.getRootNode();
20311
+ const focusRoot = "activeElement" in nodeRoot ? nodeRoot : document2;
20312
+ if (!key || !root.contains(option2) || focusRoot.activeElement !== option2) return;
20313
+ cancelPendingFocus?.();
20348
20314
  const view = document2.defaultView;
20349
20315
  if (!view) return;
20350
20316
  let observer;
@@ -20360,13 +20326,14 @@ function useCascaderFocus(activeKey) {
20360
20326
  if (cancelPendingFocus === cleanup) cancelPendingFocus = void 0;
20361
20327
  };
20362
20328
  const onFocus = (next) => {
20363
- if (next.target !== option2) cleanup();
20329
+ if (next.target !== option2 && !next.composedPath().includes(option2)) cleanup();
20364
20330
  };
20365
20331
  const attempt = () => {
20366
20332
  if (done) return;
20367
- const focused = document2.activeElement;
20368
- const lostToRemoval = !option2.isConnected && (focused === document2.body || focused === document2.documentElement);
20369
- if (!root.isConnected || activeKey.value !== key || focused !== option2 && !lostToRemoval) {
20333
+ const focused = focusRoot.activeElement;
20334
+ const docFocus = document2.activeElement;
20335
+ const lostToRemoval = !option2.isConnected && (docFocus === document2.body || docFocus === document2.documentElement) && (focused === null || focused === document2.body || focused === document2.documentElement);
20336
+ if (!root.isConnected || root.getRootNode() !== nodeRoot || activeKey.value !== key || focused !== option2 && !lostToRemoval) {
20370
20337
  cleanup();
20371
20338
  return;
20372
20339
  }
@@ -20505,7 +20472,7 @@ const useSelectedPath = (options, {
20505
20472
  navigateLevel
20506
20473
  };
20507
20474
  };
20508
- const _sfc_main$2q = vue.defineComponent({
20475
+ const _sfc_main$2u = vue.defineComponent({
20509
20476
  name: createNamespace$1("cascader-panel").name,
20510
20477
  components: {
20511
20478
  BaseCascaderPanel
@@ -20868,7 +20835,7 @@ function _sfc_render$Z(_ctx, _cache, $props, $setup, $data, $options) {
20868
20835
  } : void 0
20869
20836
  ]), 1032, ["display-columns", "selected-path", "active-key", "multiple", "total-level", "check-strictly", "onKeydown"]);
20870
20837
  }
20871
- const CascaderPanel = /* @__PURE__ */ _export_sfc(_sfc_main$2q, [["render", _sfc_render$Z]]);
20838
+ const CascaderPanel = /* @__PURE__ */ _export_sfc(_sfc_main$2u, [["render", _sfc_render$Z]]);
20872
20839
  function _isSlot$8(s) {
20873
20840
  return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !vue.isVNode(s);
20874
20841
  }
@@ -20977,9 +20944,9 @@ const CascaderSearchPanel = /* @__PURE__ */ vue.defineComponent({
20977
20944
  };
20978
20945
  }
20979
20946
  });
20980
- const _hoisted_1$1a = ["aria-label"];
20947
+ const _hoisted_1$1c = ["aria-label"];
20981
20948
  const _hoisted_2$w = ["aria-current", "onClick"];
20982
- const _sfc_main$2p = /* @__PURE__ */ vue.defineComponent({
20949
+ const _sfc_main$2t = /* @__PURE__ */ vue.defineComponent({
20983
20950
  ...{ name: createNamespace$1("cascader-editor-panel").name },
20984
20951
  __name: "CascaderEditorPanel",
20985
20952
  props: {
@@ -21040,7 +21007,7 @@ const _sfc_main$2p = /* @__PURE__ */ vue.defineComponent({
21040
21007
  vue.createTextVNode(" " + vue.toDisplayString(column.find((option2) => option2.key === __props.selectedPath[index])?.label || vue.unref(texts).select.value), 1)
21041
21008
  ], 10, _hoisted_2$w);
21042
21009
  }), 128))
21043
- ], 10, _hoisted_1$1a),
21010
+ ], 10, _hoisted_1$1c),
21044
21011
  vue.createElementVNode("div", {
21045
21012
  class: vue.normalizeClass(vue.unref(n2)("columns"))
21046
21013
  }, [
@@ -21089,7 +21056,7 @@ const _sfc_main$2p = /* @__PURE__ */ vue.defineComponent({
21089
21056
  };
21090
21057
  }
21091
21058
  });
21092
- const _sfc_main$2o = /* @__PURE__ */ vue.defineComponent({
21059
+ const _sfc_main$2s = /* @__PURE__ */ vue.defineComponent({
21093
21060
  ...{ name: createNamespace$1("cascader-menu").name },
21094
21061
  __name: "CascaderMenu",
21095
21062
  props: {
@@ -21115,7 +21082,7 @@ const _sfc_main$2o = /* @__PURE__ */ vue.defineComponent({
21115
21082
  } = vue.toRefs(__props.controller);
21116
21083
  const { multiple, checkStrictly, searchOptionOnlyLabel, virtualListProps } = vue.toRefs(__props.controller.props);
21117
21084
  return (_ctx, _cache) => {
21118
- return vue.openBlock(), vue.createBlock(_sfc_main$2F, {
21085
+ return vue.openBlock(), vue.createBlock(_sfc_main$2I, {
21119
21086
  open: __props.controller.computedOpen,
21120
21087
  multiple: vue.unref(multiple),
21121
21088
  items: __props.controller.fieldItems,
@@ -21124,7 +21091,7 @@ const _sfc_main$2o = /* @__PURE__ */ vue.defineComponent({
21124
21091
  onClear: __props.controller.clearSelection
21125
21092
  }, {
21126
21093
  default: vue.withCtx(() => [
21127
- __props.searchable ? (vue.openBlock(), vue.createBlock(vue.unref(Input), {
21094
+ __props.searchable ? (vue.openBlock(), vue.createBlock(vue.unref(SearchInput), {
21128
21095
  key: 0,
21129
21096
  "model-value": __props.controller.computedInputValue,
21130
21097
  "edit-mode": "direct",
@@ -21157,7 +21124,7 @@ const _sfc_main$2o = /* @__PURE__ */ vue.defineComponent({
21157
21124
  ]),
21158
21125
  key: "0"
21159
21126
  } : void 0
21160
- ]), 1040, ["options", "active-key", "multiple", "check-strictly", "loading", "path-label", "listbox-id", "listbox-label"])) : (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(editor) ? _sfc_main$2p : vue.unref(BaseCascaderPanel)), vue.mergeProps({
21127
+ ]), 1040, ["options", "active-key", "multiple", "check-strictly", "loading", "path-label", "listbox-id", "listbox-label"])) : (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(editor) ? _sfc_main$2t : vue.unref(BaseCascaderPanel)), vue.mergeProps({
21161
21128
  key: 2,
21162
21129
  id: optionsId,
21163
21130
  "display-columns": vue.unref(displayColumns),
@@ -21233,9 +21200,11 @@ const cascaderEmits = {
21233
21200
  */
21234
21201
  blur: (ev) => true
21235
21202
  };
21236
- const presentations = { inline: { component: _sfc_main$2E, deferred: (_multiple) => false } };
21203
+ const presentations = { inline: { component: _sfc_main$2H, deferred: (_multiple) => false } };
21237
21204
  const cascaderProps = {
21238
21205
  ...fieldLoadingProps,
21206
+ /** 弹出编辑是否需要确认;未设置时单选即提交,多选保留确认。 */
21207
+ needConfirm: { type: Boolean, default: void 0 },
21239
21208
  openTriggerTarget: openTriggerTargetProp,
21240
21209
  /** 内置本地过滤是否区分大小写;自定义过滤函数优先。 */
21241
21210
  caseSensitive: { type: Boolean, default: false },
@@ -22183,7 +22152,7 @@ function useCascaderController(props2, { emit, slots }) {
22183
22152
  totalLevel
22184
22153
  };
22185
22154
  }
22186
- const _sfc_main$2n = /* @__PURE__ */ vue.defineComponent({
22155
+ const _sfc_main$2r = /* @__PURE__ */ vue.defineComponent({
22187
22156
  ...{ name: createNamespace$1("cascader").name, inheritAttrs: false },
22188
22157
  __name: "Cascader",
22189
22158
  props: cascaderProps,
@@ -22253,7 +22222,7 @@ const _sfc_main$2n = /* @__PURE__ */ vue.defineComponent({
22253
22222
  return (_ctx, _cache) => {
22254
22223
  return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(presentations).inline.component), { controller }, {
22255
22224
  reference: vue.withCtx(() => [
22256
- vue.createVNode(_sfc_main$2A, vue.mergeProps({
22225
+ vue.createVNode(_sfc_main$2D, vue.mergeProps({
22257
22226
  ref_key: "fieldRef",
22258
22227
  ref: fieldRef,
22259
22228
  "loading-mode": _ctx.loadingMode,
@@ -22352,7 +22321,7 @@ const _sfc_main$2n = /* @__PURE__ */ vue.defineComponent({
22352
22321
  ]), 1040, ["loading-mode", "open-trigger-target", "open-trigger-tab-index", "show-tags", "separator", "text-align", "hint", "line", "text-color", "focus-color", "blur-color", "items", "input-value", "disabled", "readonly", "error", "multiple", "clearable", "searchable", "size", "variant", "open", "placeholder", "loading", "max-tag-count", "tag-nowrap", "aria-controls", "aria-haspopup", "aria-activedescendant", "onUpdate:inputValue", "onClear", "onFocus", "onBlur", "onRemove"])
22353
22322
  ]),
22354
22323
  default: vue.withCtx(() => [
22355
- vue.createVNode(_sfc_main$2o, {
22324
+ vue.createVNode(_sfc_main$2s, {
22356
22325
  controller,
22357
22326
  "keyboard-handler": handleFieldKeydown,
22358
22327
  "listbox-id": searchListMode.value ? searchListId : void 0
@@ -22372,7 +22341,7 @@ const _sfc_main$2n = /* @__PURE__ */ vue.defineComponent({
22372
22341
  };
22373
22342
  }
22374
22343
  });
22375
- const _sfc_main$2m = /* @__PURE__ */ vue.defineComponent({
22344
+ const _sfc_main$2q = /* @__PURE__ */ vue.defineComponent({
22376
22345
  ...{ name: createNamespace$1("cascader-editor").name },
22377
22346
  __name: "CascaderEditor",
22378
22347
  props: {
@@ -22427,12 +22396,12 @@ const _sfc_main$2m = /* @__PURE__ */ vue.defineComponent({
22427
22396
  { immediate: true }
22428
22397
  );
22429
22398
  return (_ctx, _cache) => {
22430
- return vue.openBlock(), vue.createBlock(_sfc_main$30, {
22399
+ return vue.openBlock(), vue.createBlock(_sfc_main$31, {
22431
22400
  kind: "cascader",
22432
22401
  onKeydown: handleEditorKeydown
22433
22402
  }, {
22434
22403
  default: vue.withCtx(() => [
22435
- vue.createVNode(_sfc_main$2o, {
22404
+ vue.createVNode(_sfc_main$2s, {
22436
22405
  controller,
22437
22406
  searchable: __props.options.filterable || __props.options.multiple
22438
22407
  }, vue.createSlots({ _: 2 }, [
@@ -22452,11 +22421,12 @@ const _sfc_main$2m = /* @__PURE__ */ vue.defineComponent({
22452
22421
  }
22453
22422
  });
22454
22423
  const cascaderFieldAdapter = {
22424
+ selectionConfirmation: "update",
22455
22425
  pauseSelectionWhileLoading: true,
22456
22426
  methods: ["focus", "blur", "refresh"],
22457
22427
  text: (value, props2) => optionValueText(value, { ...props2, showPathLabel: true }),
22458
22428
  editor: ({ props: props2, value, update, emit, slots, disabled, readonly }) => vue.h(
22459
- _sfc_main$2m,
22429
+ _sfc_main$2q,
22460
22430
  {
22461
22431
  options: { ...props2, disabled, readonly },
22462
22432
  modelValue: value,
@@ -22469,7 +22439,7 @@ const cascaderFieldAdapter = {
22469
22439
  slots
22470
22440
  )
22471
22441
  };
22472
- const _Cascader = withFieldPresentation(_sfc_main$2n, cascaderFieldAdapter);
22442
+ const _Cascader = withFieldPresentation(_sfc_main$2r, cascaderFieldAdapter);
22473
22443
  const Cascader = withInstall(
22474
22444
  _Cascader,
22475
22445
  Object.assign(_Cascader, {
@@ -22480,6 +22450,110 @@ const Cascader = withInstall(
22480
22450
  const cascaderPanelProps = CascaderPanel.props;
22481
22451
  const _CascaderComponent = Cascader;
22482
22452
  const _CascaderPanelComponent = CascaderPanel;
22453
+ const _hoisted_1$1b = ["aria-describedby", "aria-busy", "aria-label", "aria-disabled"];
22454
+ const _sfc_main$2p = /* @__PURE__ */ vue.defineComponent({
22455
+ ...{ name: createNamespace$1("checkbox-group").name, inheritAttrs: false },
22456
+ __name: "checkbox-group",
22457
+ props: checkboxGroupProps,
22458
+ emits: ["update:open", "open-change", "load-error", "update:modelValue", "change"],
22459
+ setup(__props, { expose: __expose, emit: __emit }) {
22460
+ const { n: n2, classes: classes2 } = createNamespace$1("checkbox-group");
22461
+ const props2 = __props;
22462
+ const { errorId, describe: describeError } = useFormErrorDescription();
22463
+ const resolvedOrientation = vue.computed(() => props2.orientation === "vertical" ? "vertical" : "horizontal");
22464
+ const slots = vue.useSlots();
22465
+ const emit = __emit;
22466
+ const { mergedDisabled, mergedReadonly, mergedError, eventHandlers } = useChoiceForm(props2);
22467
+ const source = useOptionRequest(
22468
+ () => props2.options,
22469
+ () => mergedDisabled.value || mergedReadonly.value || !!props2.readPretty,
22470
+ (error) => emit("load-error", error),
22471
+ () => 0,
22472
+ checkboxGroupProps
22473
+ );
22474
+ const { value: computedValue, commit: handleChange } = useChoiceState(
22475
+ () => props2.modelValue === null ? [] : props2.modelValue,
22476
+ props2.defaultValue,
22477
+ (value, event) => {
22478
+ emit("update:modelValue", value);
22479
+ emit("change", value, event);
22480
+ eventHandlers.value?.onChange?.(event);
22481
+ },
22482
+ () => mergedDisabled.value || mergedReadonly.value
22483
+ );
22484
+ const normalizedOptions = vue.computed(() => normalizeChoiceOptions(source.options.value, props2.fieldNames));
22485
+ const isMaxed = vue.computed(() => computedValue.value.length >= choiceLimit(props2.max));
22486
+ const { register: registerChoice, methods: methods2 } = useCheckboxGroupMethods(
22487
+ () => computedValue.value,
22488
+ handleChange,
22489
+ () => mergedDisabled.value || mergedReadonly.value,
22490
+ () => props2.max
22491
+ );
22492
+ vue.provide(
22493
+ checkboxGroupKey,
22494
+ vue.reactive({
22495
+ registerChoice,
22496
+ computedValue,
22497
+ disabled: mergedDisabled,
22498
+ readonly: mergedReadonly,
22499
+ error: mergedError,
22500
+ formErrorId: errorId,
22501
+ isMaxed,
22502
+ name: vue.computed(() => props2.name),
22503
+ slots,
22504
+ handleChange
22505
+ })
22506
+ );
22507
+ __expose(methods2);
22508
+ return (_ctx, _cache) => {
22509
+ return vue.openBlock(), vue.createElementBlock("div", vue.mergeProps(_ctx.$attrs, {
22510
+ "aria-describedby": vue.unref(describeError)(_ctx.$attrs["aria-describedby"]),
22511
+ class: vue.unref(classes2)(vue.unref(n2)(), vue.unref(n2)(`--${resolvedOrientation.value}`)),
22512
+ "aria-busy": vue.unref(source).loading.value || void 0,
22513
+ role: "group",
22514
+ "aria-label": _ctx.ariaLabel,
22515
+ "aria-disabled": vue.unref(mergedDisabled) || void 0
22516
+ }), [
22517
+ props2.options !== void 0 ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(normalizedOptions.value, (option2) => {
22518
+ return vue.openBlock(), vue.createBlock(vue.unref(Checkbox$1), {
22519
+ key: `${typeof option2.value}:${String(option2.value)}`,
22520
+ "edit-mode": "direct",
22521
+ value: option2.value,
22522
+ disabled: option2.disabled,
22523
+ readonly: option2.readonly,
22524
+ indeterminate: option2.indeterminate
22525
+ }, {
22526
+ default: vue.withCtx(({ checked }) => [
22527
+ vue.renderSlot(_ctx.$slots, "label", {
22528
+ data: option2,
22529
+ checked
22530
+ }, () => [
22531
+ vue.createVNode(vue.unref(ChoiceLabel), {
22532
+ content: typeof option2.label === "function" ? option2.label(option2, checked) : option2.label
22533
+ }, null, 8, ["content"])
22534
+ ])
22535
+ ]),
22536
+ _: 2
22537
+ }, 1032, ["value", "disabled", "readonly", "indeterminate"]);
22538
+ }), 128)) : vue.renderSlot(_ctx.$slots, "default", { key: 1 })
22539
+ ], 16, _hoisted_1$1b);
22540
+ };
22541
+ }
22542
+ });
22543
+ const CheckboxGroup = withFieldPresentation(_sfc_main$2p, {
22544
+ text: optionValueText,
22545
+ methods: ["checkAll", "inverseAll"],
22546
+ inactiveMethod: (_name, value) => Array.isArray(value) ? [...value] : []
22547
+ });
22548
+ const Checkbox = withInstall(
22549
+ _Checkbox,
22550
+ Object.assign(_Checkbox, {
22551
+ Group: CheckboxGroup
22552
+ }),
22553
+ { components: [_Checkbox, CheckboxGroup] }
22554
+ );
22555
+ const _CheckboxComponent = Checkbox;
22556
+ const _CheckboxGroupComponent = CheckboxGroup;
22483
22557
  const ROW_CONTEXT_KEY = Symbol("ROW_CONTEXT_KEY");
22484
22558
  const colBreakpoints = ["xs", "sm", "md", "lg", "xl", "xxl"];
22485
22559
  const isColCount = (value) => typeof value === "number" && Number.isInteger(value) && value >= 0 && value <= 24;
@@ -22546,7 +22620,7 @@ const colProps = {
22546
22620
  */
22547
22621
  flex: { type: [Number, String], validator: process.env.NODE_ENV !== "production" ? isColFlex : void 0 }
22548
22622
  };
22549
- const _sfc_main$2l = /* @__PURE__ */ vue.defineComponent({
22623
+ const _sfc_main$2o = /* @__PURE__ */ vue.defineComponent({
22550
22624
  ...{ name: createNamespace$1("col").name },
22551
22625
  __name: "Col",
22552
22626
  props: colProps,
@@ -22606,7 +22680,7 @@ const _sfc_main$2l = /* @__PURE__ */ vue.defineComponent({
22606
22680
  };
22607
22681
  }
22608
22682
  });
22609
- const Col = withInstall(_sfc_main$2l);
22683
+ const Col = withInstall(_sfc_main$2o);
22610
22684
  const _ColComponent = Col;
22611
22685
  const collapseKey = Symbol("collapseCtx");
22612
22686
  const expandIconPositions = ["left", "right"];
@@ -22663,7 +22737,7 @@ const collapseItemProps = {
22663
22737
  },
22664
22738
  destroyOnHide: Boolean
22665
22739
  };
22666
- const _sfc_main$2k = /* @__PURE__ */ vue.defineComponent({
22740
+ const _sfc_main$2n = /* @__PURE__ */ vue.defineComponent({
22667
22741
  ...{ name: createNamespace$1("collapse").name },
22668
22742
  __name: "Collapse",
22669
22743
  props: collapseProps,
@@ -22769,10 +22843,10 @@ const DefaultExpandIcon = vue.defineComponent({
22769
22843
  return () => vue.h(props2.position === "right" ? iconCaretLeft.IconCaretLeft : iconCaretRight.IconCaretRight, { class: n$g("expand-icon") });
22770
22844
  }
22771
22845
  });
22772
- const _hoisted_1$19 = ["role", "aria-level"];
22846
+ const _hoisted_1$1a = ["role", "aria-level"];
22773
22847
  const _hoisted_2$v = ["id", "tabindex", "aria-disabled", "aria-expanded", "aria-controls"];
22774
- const _hoisted_3$h = ["id", "role", "aria-labelledby"];
22775
- const _sfc_main$2j = /* @__PURE__ */ vue.defineComponent({
22848
+ const _hoisted_3$i = ["id", "role", "aria-labelledby"];
22849
+ const _sfc_main$2m = /* @__PURE__ */ vue.defineComponent({
22776
22850
  ...{ name: createNamespace$1("collapse-item").name },
22777
22851
  __name: "CollapseItem",
22778
22852
  props: collapseItemProps,
@@ -22914,7 +22988,7 @@ const _sfc_main$2j = /* @__PURE__ */ vue.defineComponent({
22914
22988
  ])
22915
22989
  ], 2)) : vue.createCommentVNode("", true)
22916
22990
  ], 42, _hoisted_2$v)
22917
- ], 10, _hoisted_1$19),
22991
+ ], 10, _hoisted_1$1a),
22918
22992
  _ctx.$slots.extra ? (vue.openBlock(), vue.createElementBlock("div", {
22919
22993
  key: 0,
22920
22994
  class: vue.normalizeClass(vue.unref(n2)("header-extra")),
@@ -22946,7 +23020,7 @@ const _sfc_main$2j = /* @__PURE__ */ vue.defineComponent({
22946
23020
  }, [
22947
23021
  vue.renderSlot(_ctx.$slots, "default")
22948
23022
  ], 2)) : vue.createCommentVNode("", true)
22949
- ], 10, _hoisted_3$h), [
23023
+ ], 10, _hoisted_3$i), [
22950
23024
  [vue.vShow, isExpanded.value]
22951
23025
  ])
22952
23026
  ]),
@@ -22956,11 +23030,11 @@ const _sfc_main$2j = /* @__PURE__ */ vue.defineComponent({
22956
23030
  };
22957
23031
  }
22958
23032
  });
22959
- const Collapse = withInstall(_sfc_main$2k, Object.assign(_sfc_main$2k, {
22960
- Item: _sfc_main$2j
22961
- }), { components: [_sfc_main$2k, _sfc_main$2j] });
23033
+ const Collapse = withInstall(_sfc_main$2n, Object.assign(_sfc_main$2n, {
23034
+ Item: _sfc_main$2m
23035
+ }), { components: [_sfc_main$2n, _sfc_main$2m] });
22962
23036
  const _CollapseComponent = Collapse;
22963
- const _CollapseItemComponent = _sfc_main$2j;
23037
+ const _CollapseItemComponent = _sfc_main$2m;
22964
23038
  const hsvToRgb = (h, s, v) => {
22965
23039
  const i = Math.floor(h * 6);
22966
23040
  const f = h * 6 - i;
@@ -23384,6 +23458,164 @@ const Palette = /* @__PURE__ */ vue.defineComponent({
23384
23458
  }, null)]);
23385
23459
  }
23386
23460
  });
23461
+ const _sfc_main$2l = /* @__PURE__ */ vue.defineComponent({
23462
+ ...{ name: createNamespace$1("input-group").name },
23463
+ __name: "InputGroup",
23464
+ props: inputGroupProps,
23465
+ setup(__props) {
23466
+ const props2 = __props;
23467
+ const { n: n2, classes: classes2 } = createNamespace$1("input-group");
23468
+ const { group, mergedSize, mergedDisabled, mergedReadonly } = useInputForm(props2);
23469
+ const mergedVariant = vue.computed(() => props2.variant ?? group?.variant.value ?? "filled");
23470
+ vue.provide(inputGroupKey, {
23471
+ size: mergedSize,
23472
+ disabled: mergedDisabled,
23473
+ readonly: mergedReadonly,
23474
+ variant: mergedVariant,
23475
+ hint: vue.computed(() => props2.hint ?? group?.hint.value)
23476
+ });
23477
+ return (_ctx, _cache) => {
23478
+ return vue.openBlock(), vue.createElementBlock("div", {
23479
+ class: vue.normalizeClass(vue.unref(classes2)(vue.unref(n2)(), vue.unref(n2)(`--size-${vue.unref(mergedSize)}`), vue.unref(n2)(`--variant-${mergedVariant.value}`), [vue.unref(mergedDisabled), vue.unref(n2)("--disabled")])),
23480
+ role: "group"
23481
+ }, [
23482
+ vue.renderSlot(_ctx.$slots, "default")
23483
+ ], 2);
23484
+ };
23485
+ }
23486
+ });
23487
+ const _sfc_main$2k = /* @__PURE__ */ vue.defineComponent({
23488
+ ...{ name: createNamespace$1("input-group-label").name },
23489
+ __name: "InputGroupLabel",
23490
+ setup(__props) {
23491
+ const { n: n2 } = createNamespace$1("input-group-label");
23492
+ return (_ctx, _cache) => {
23493
+ return vue.openBlock(), vue.createElementBlock("span", {
23494
+ class: vue.normalizeClass(vue.unref(n2)())
23495
+ }, [
23496
+ vue.renderSlot(_ctx.$slots, "default")
23497
+ ], 2);
23498
+ };
23499
+ }
23500
+ });
23501
+ const _hoisted_1$19 = ["disabled", "aria-label", "aria-pressed"];
23502
+ const _sfc_main$2j = /* @__PURE__ */ vue.defineComponent({
23503
+ ...{ name: createNamespace$1("input-password").name, inheritAttrs: false },
23504
+ __name: "InputPassword",
23505
+ props: inputPasswordProps,
23506
+ emits: ["visibility-change", "update:visibility", "update:open", "update:modelValue", "input", "change", "press-enter", "keydown", "clear", "focus", "blur", "click"],
23507
+ setup(__props, { expose: __expose, emit: __emit }) {
23508
+ const props2 = __props;
23509
+ const emit = __emit;
23510
+ const { n: n2 } = createNamespace$1("input-password");
23511
+ const { t } = useI18n();
23512
+ const attrs = vue.useAttrs();
23513
+ const slots = vue.useSlots();
23514
+ const inputRef = vue.ref();
23515
+ const localVisibility = vue.ref(props2.defaultVisibility);
23516
+ const mergedVisible = vue.computed(() => props2.visibility ?? localVisibility.value);
23517
+ const { mergedDisabled } = useInputForm(props2);
23518
+ const forwardedSlots = vue.computed(() => Object.keys(slots).filter((name2) => name2 !== "suffix"));
23519
+ const inputBindings = vue.computed(() => {
23520
+ const fields = {};
23521
+ for (const key of Object.keys(inputProps)) {
23522
+ fields[key] = props2[key];
23523
+ }
23524
+ return { ...fields, ...attrs };
23525
+ });
23526
+ const inputListeners = {
23527
+ "update:open": (...args) => emit("update:open", ...args),
23528
+ "update:modelValue": (...args) => emit("update:modelValue", ...args),
23529
+ input: (...args) => emit("input", ...args),
23530
+ change: (...args) => emit("change", ...args),
23531
+ "press-enter": (...args) => emit("press-enter", ...args),
23532
+ keydown: (...args) => emit("keydown", ...args),
23533
+ clear: (...args) => emit("clear", ...args),
23534
+ focus: (...args) => emit("focus", ...args),
23535
+ blur: (...args) => emit("blur", ...args),
23536
+ click: (...args) => emit("click", ...args)
23537
+ };
23538
+ function toggleVisibility() {
23539
+ if (mergedDisabled.value) {
23540
+ return;
23541
+ }
23542
+ const nextValue = !mergedVisible.value;
23543
+ localVisibility.value = nextValue;
23544
+ emit("visibility-change", nextValue);
23545
+ emit("update:visibility", nextValue);
23546
+ }
23547
+ function focus(options) {
23548
+ inputRef.value?.focus(options);
23549
+ }
23550
+ function blur() {
23551
+ inputRef.value?.blur();
23552
+ }
23553
+ function select() {
23554
+ inputRef.value?.select();
23555
+ }
23556
+ __expose({ inputRef, focus, blur, select });
23557
+ return (_ctx, _cache) => {
23558
+ return vue.openBlock(), vue.createElementBlock("div", {
23559
+ class: vue.normalizeClass(vue.unref(n2)())
23560
+ }, [
23561
+ vue.createVNode(_sfc_main$2Z, vue.mergeProps({
23562
+ ref_key: "inputRef",
23563
+ ref: inputRef
23564
+ }, inputBindings.value, {
23565
+ type: mergedVisible.value ? "text" : "password"
23566
+ }, vue.toHandlers(inputListeners)), vue.createSlots({ _: 2 }, [
23567
+ vue.renderList(forwardedSlots.value, (slotName) => {
23568
+ return {
23569
+ name: slotName,
23570
+ fn: vue.withCtx((scope) => [
23571
+ vue.renderSlot(_ctx.$slots, slotName, vue.normalizeProps(vue.guardReactiveProps(scope)))
23572
+ ])
23573
+ };
23574
+ }),
23575
+ _ctx.visibilityToggle || _ctx.$slots.suffix ? {
23576
+ name: "suffix",
23577
+ fn: vue.withCtx(() => [
23578
+ _ctx.visibilityToggle ? (vue.openBlock(), vue.createElementBlock("button", {
23579
+ key: 0,
23580
+ type: "button",
23581
+ class: vue.normalizeClass(vue.unref(n2)("toggle")),
23582
+ disabled: vue.unref(mergedDisabled),
23583
+ "aria-label": vue.unref(t)(mergedVisible.value ? "common.hidePassword" : "common.showPassword"),
23584
+ "aria-pressed": mergedVisible.value,
23585
+ onMousedown: _cache[0] || (_cache[0] = vue.withModifiers(() => {
23586
+ }, ["prevent"])),
23587
+ onClick: toggleVisibility
23588
+ }, [
23589
+ mergedVisible.value ? (vue.openBlock(), vue.createBlock(vue.unref(iconsVue.IconEyeInvisible), {
23590
+ key: 0,
23591
+ "aria-hidden": "true"
23592
+ })) : (vue.openBlock(), vue.createBlock(vue.unref(iconsVue.IconEye), {
23593
+ key: 1,
23594
+ "aria-hidden": "true"
23595
+ }))
23596
+ ], 42, _hoisted_1$19)) : vue.createCommentVNode("", true),
23597
+ vue.renderSlot(_ctx.$slots, "suffix")
23598
+ ]),
23599
+ key: "0"
23600
+ } : void 0
23601
+ ]), 1040, ["type"])
23602
+ ], 2);
23603
+ };
23604
+ }
23605
+ });
23606
+ const Input = withInstall(
23607
+ SearchInput,
23608
+ Object.assign(SearchInput, {
23609
+ Password: _sfc_main$2j,
23610
+ Group: _sfc_main$2l,
23611
+ GroupLabel: _sfc_main$2k
23612
+ }),
23613
+ { components: [SearchInput, _sfc_main$2l, _sfc_main$2j, _sfc_main$2k] }
23614
+ );
23615
+ const _InputComponent = Input;
23616
+ const _InputPasswordComponent = _sfc_main$2j;
23617
+ const _InputGroupComponent = _sfc_main$2l;
23618
+ const _InputGroupLabelComponent = _sfc_main$2k;
23387
23619
  const _hoisted_1$18 = ["disabled", "aria-label"];
23388
23620
  const _sfc_main$2i = /* @__PURE__ */ vue.defineComponent({
23389
23621
  __name: "InputNumberStep",
@@ -24146,7 +24378,7 @@ const _sfc_main$2h = /* @__PURE__ */ vue.defineComponent({
24146
24378
  }, [
24147
24379
  vue.renderSlot(_ctx.$slots, "suffix")
24148
24380
  ], 2)) : vue.createCommentVNode("", true),
24149
- vue.createVNode(_sfc_main$2Z, { status: vue.unref(feedback) }, null, 8, ["status"]),
24381
+ vue.createVNode(_sfc_main$2_, { status: vue.unref(feedback) }, null, 8, ["status"]),
24150
24382
  _ctx.mode === "embed" && !vue.unref(mergedReadonly) ? (vue.openBlock(), vue.createElementBlock("div", {
24151
24383
  key: 1,
24152
24384
  class: vue.normalizeClass(vue.unref(n2)("step"))
@@ -24295,7 +24527,7 @@ const InputRgb = /* @__PURE__ */ vue.defineComponent({
24295
24527
  const hsv = rgbToHsv(newRGB.r, newRGB.g, newRGB.b);
24296
24528
  props2.onHsvChange?.(hsv);
24297
24529
  };
24298
- return () => vue.createVNode(_sfc_main$2X, {
24530
+ return () => vue.createVNode(_sfc_main$2l, {
24299
24531
  "class": `${prefixCls2}-input-group`
24300
24532
  }, {
24301
24533
  default: () => [["r", "g", "b"].map((channel) => vue.createVNode(InputNumber, {
@@ -24381,7 +24613,7 @@ const InputHex = /* @__PURE__ */ vue.defineComponent({
24381
24613
  setHex(color.value.hex);
24382
24614
  }
24383
24615
  });
24384
- return () => vue.createVNode(_sfc_main$2X, {
24616
+ return () => vue.createVNode(_sfc_main$2l, {
24385
24617
  "class": `${prefixCls2}-input-group`
24386
24618
  }, {
24387
24619
  default: () => [vue.createVNode(Input, {
@@ -25370,9 +25602,12 @@ function useCountdown(props2, emit) {
25370
25602
  let resumeOnActivate = false;
25371
25603
  let generation = 0;
25372
25604
  let handle;
25373
- function display() {
25605
+ function updateDisplay() {
25374
25606
  timeData.value = splitTime(remaining);
25375
25607
  showTime.value = parseFormat(props2.format, timeData.value);
25608
+ }
25609
+ function display() {
25610
+ updateDisplay();
25376
25611
  emit("change", timeData.value);
25377
25612
  }
25378
25613
  function cancel() {
@@ -25409,9 +25644,11 @@ function useCountdown(props2, emit) {
25409
25644
  }
25410
25645
  function pause() {
25411
25646
  resumeOnActivate = false;
25412
- if (running) remaining = Math.max(0, deadline - performance.now());
25647
+ const wasRunning = running;
25648
+ if (wasRunning) remaining = Math.max(0, deadline - performance.now());
25413
25649
  running = false;
25414
25650
  cancel();
25651
+ if (wasRunning && mounted2) updateDisplay();
25415
25652
  }
25416
25653
  function reset() {
25417
25654
  if (!mounted2) return;
@@ -25792,7 +26029,7 @@ const _sfc_main$2c = /* @__PURE__ */ vue.defineComponent({
25792
26029
  selectNow: () => emit("select-now"),
25793
26030
  nowDisabled: __props.nowDisabled
25794
26031
  })), () => [
25795
- __props.showNow ? (vue.openBlock(), vue.createBlock(vue.unref(Button), {
26032
+ __props.showNow ? (vue.openBlock(), vue.createBlock(vue.unref(Button$1), {
25796
26033
  key: 0,
25797
26034
  variant: "text",
25798
26035
  disabled: __props.nowDisabled,
@@ -25803,7 +26040,7 @@ const _sfc_main$2c = /* @__PURE__ */ vue.defineComponent({
25803
26040
  ]),
25804
26041
  _: 1
25805
26042
  }, 8, ["disabled"])) : vue.createCommentVNode("", true),
25806
- __props.showConfirm ? (vue.openBlock(), vue.createBlock(vue.unref(Button), {
26043
+ __props.showConfirm ? (vue.openBlock(), vue.createBlock(vue.unref(Button$1), {
25807
26044
  key: 1,
25808
26045
  status: "primary",
25809
26046
  disabled: !__props.canConfirm,
@@ -25836,7 +26073,7 @@ const _sfc_main$2b = /* @__PURE__ */ vue.defineComponent({
25836
26073
  class: vue.normalizeClass(vue.unref(classes2)(vue.unref(n2)(), vue.unref(n2)(`--${__props.position}`)))
25837
26074
  }, [
25838
26075
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.shortcuts, (shortcut, index) => {
25839
- return vue.openBlock(), vue.createBlock(vue.unref(Button), {
26076
+ return vue.openBlock(), vue.createBlock(vue.unref(Button$1), {
25840
26077
  key: index,
25841
26078
  variant: "text",
25842
26079
  disabled: __props.blocked || shortcut.disabled,
@@ -26518,7 +26755,7 @@ function useDatePickerTransform$1() {
26518
26755
  const _sfc_main$2a = vue.defineComponent({
26519
26756
  name: createNamespace$1("date-picker-shortcuts").name,
26520
26757
  components: {
26521
- Button,
26758
+ Button: Button$1,
26522
26759
  RenderFunction
26523
26760
  },
26524
26761
  props: {
@@ -26681,7 +26918,7 @@ const _sfc_main$28 = vue.defineComponent({
26681
26918
  name: createNamespace$1("date-picker-footer").name,
26682
26919
  components: {
26683
26920
  Link,
26684
- Button
26921
+ Button: Button$1
26685
26922
  },
26686
26923
  props: {
26687
26924
  prefixCls: {
@@ -26829,7 +27066,7 @@ const _sfc_main$27 = vue.defineComponent({
26829
27066
  });
26830
27067
  const _hoisted_1$14 = ["aria-label", "disabled", "aria-hidden", "tabindex"];
26831
27068
  const _hoisted_2$t = ["aria-label", "disabled", "aria-hidden", "tabindex"];
26832
- const _hoisted_3$g = { key: 1 };
27069
+ const _hoisted_3$h = { key: 1 };
26833
27070
  const _hoisted_4$b = ["aria-label", "disabled", "aria-hidden", "tabindex"];
26834
27071
  const _hoisted_5$4 = ["aria-label", "disabled", "aria-hidden", "tabindex"];
26835
27072
  function _sfc_render$U(_ctx, _cache, $props, $setup, $data, $options) {
@@ -26883,7 +27120,7 @@ function _sfc_render$U(_ctx, _cache, $props, $setup, $data, $options) {
26883
27120
  class: vue.normalizeClass(`${_ctx.prefixCls}-header-label`),
26884
27121
  onClick: _cache[2] || (_cache[2] = () => _ctx.onLabelClick && _ctx.onLabelClick("year"))
26885
27122
  }, vue.toDisplayString(_ctx.year), 3)) : vue.createCommentVNode("", true),
26886
- _ctx.year && _ctx.month ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$g, "-")) : vue.createCommentVNode("", true),
27123
+ _ctx.year && _ctx.month ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$h, "-")) : vue.createCommentVNode("", true),
26887
27124
  _ctx.month ? (vue.openBlock(), vue.createElementBlock("button", {
26888
27125
  key: 2,
26889
27126
  type: "button",
@@ -27509,7 +27746,7 @@ const _sfc_main$23 = vue.defineComponent({
27509
27746
  name: createNamespace$1("time-picker-panel").name,
27510
27747
  components: {
27511
27748
  TimeColumn,
27512
- Button
27749
+ Button: Button$1
27513
27750
  },
27514
27751
  props: {
27515
27752
  min: String,
@@ -31463,9 +31700,19 @@ const pickerFieldProps = {
31463
31700
  },
31464
31701
  separator: { type: String, default: " ~ " }
31465
31702
  };
31703
+ function usePickerRangeLabels(kind) {
31704
+ const { i18nMessage } = useI18n();
31705
+ return vue.computed(() => {
31706
+ const legacy = i18nMessage.value.datePicker?.rangePlaceholder?.[kind()] ?? lang$1.datePicker.rangePlaceholder[kind()];
31707
+ return [
31708
+ i18nMessage.value.fieldPresentation?.rangeStart ?? legacy[0],
31709
+ i18nMessage.value.fieldPresentation?.rangeEnd ?? legacy[1]
31710
+ ];
31711
+ });
31712
+ }
31466
31713
  const _hoisted_1$11 = ["role", "aria-labelledby"];
31467
31714
  const _hoisted_2$r = ["id"];
31468
- const _hoisted_3$f = ["id", "value", "placeholder", "disabled", "readonly", "aria-expanded", "aria-invalid", "aria-describedby", "aria-haspopup", "onFocus", "onClick", "onBlur", "onInput", "onCompositionend", "onKeydown"];
31715
+ const _hoisted_3$g = ["id", "value", "placeholder", "disabled", "readonly", "aria-expanded", "aria-invalid", "aria-describedby", "aria-haspopup", "onFocus", "onClick", "onBlur", "onInput", "onCompositionend", "onKeydown"];
31469
31716
  const _hoisted_4$a = ["disabled", "aria-label", "aria-expanded", "aria-haspopup"];
31470
31717
  const _sfc_main$1R = /* @__PURE__ */ vue.defineComponent({
31471
31718
  ...{
@@ -31483,7 +31730,9 @@ const _sfc_main$1R = /* @__PURE__ */ vue.defineComponent({
31483
31730
  function inputAttributes(index) {
31484
31731
  const part = { ...props2.inputAttrs?.[index] ?? {} };
31485
31732
  for (const key of ["aria-label", "aria-labelledby"]) {
31486
- if (part[key] === void 0 || part[key] === null) delete part[key];
31733
+ if (part[key] === void 0 || part[key] === null) {
31734
+ delete part[key];
31735
+ }
31487
31736
  }
31488
31737
  const common = splitInputAttrs(attrs).native;
31489
31738
  const merged = vue.mergeProps(common, part);
@@ -31525,14 +31774,7 @@ const _sfc_main$1R = /* @__PURE__ */ vue.defineComponent({
31525
31774
  });
31526
31775
  const explicitRangeLabel = vue.computed(() => props2.range && formLabel?.value?.target ? groupLabelId.value : void 0);
31527
31776
  const endpointLabelId = (index) => `${generatedId}-range-endpoint-${index}`;
31528
- const { i18nMessage } = useI18n();
31529
- const endpointLabels = vue.computed(() => {
31530
- const legacy = i18nMessage.value.datePicker?.rangePlaceholder?.[props2.kind] ?? lang$1.datePicker.rangePlaceholder[props2.kind];
31531
- return [
31532
- i18nMessage.value.fieldPresentation?.rangeStart ?? legacy[0],
31533
- i18nMessage.value.fieldPresentation?.rangeEnd ?? legacy[1]
31534
- ];
31535
- });
31777
+ const endpointLabels = usePickerRangeLabels(() => props2.kind);
31536
31778
  const inputs = [];
31537
31779
  const activeIndex = useRangeFieldIndex(() => props2.disabledParts);
31538
31780
  const active = vue.ref(false);
@@ -31649,7 +31891,7 @@ const _sfc_main$1R = /* @__PURE__ */ vue.defineComponent({
31649
31891
  }
31650
31892
  __expose({ focus, blur, commit: (event) => commit(event, activeIndex.value) });
31651
31893
  return (_ctx, _cache) => {
31652
- return vue.openBlock(), vue.createBlock(_sfc_main$2_, vue.mergeProps({ ...vue.unref(splitInputAttrs)(_ctx.$attrs).root, ...decoration.value }, {
31894
+ return vue.openBlock(), vue.createBlock(_sfc_main$2$, vue.mergeProps({ ...vue.unref(splitInputAttrs)(_ctx.$attrs).root, ...decoration.value }, {
31653
31895
  "decorative-hint": "",
31654
31896
  class: vue.unref(n2)(),
31655
31897
  onClear: _cache[2] || (_cache[2] = ($event) => emit("clear", $event)),
@@ -31707,7 +31949,7 @@ const _sfc_main$1R = /* @__PURE__ */ vue.defineComponent({
31707
31949
  key: 2,
31708
31950
  id: endpointLabelId(index),
31709
31951
  hidden: ""
31710
- }, vue.toDisplayString(endpointLabels.value[index]), 9, _hoisted_2$r)) : vue.createCommentVNode("", true),
31952
+ }, vue.toDisplayString(vue.unref(endpointLabels)[index]), 9, _hoisted_2$r)) : vue.createCommentVNode("", true),
31711
31953
  vue.createElementVNode("input", vue.mergeProps({ ref_for: true }, inputAttributes(index), {
31712
31954
  id: props2.inputAttrs?.[index]?.id ?? (index === 0 ? controlId.value : controlId.value + "-" + index),
31713
31955
  ref_for: true,
@@ -31730,7 +31972,7 @@ const _sfc_main$1R = /* @__PURE__ */ vue.defineComponent({
31730
31972
  onCompositionstart: _cache[0] || (_cache[0] = ($event) => composing.value = true),
31731
31973
  onCompositionend: ($event) => handleCompositionEnd($event, index),
31732
31974
  onKeydown: ($event) => handleKeydown($event, index)
31733
- }), null, 16, _hoisted_3$f)
31975
+ }), null, 16, _hoisted_3$g)
31734
31976
  ], 64);
31735
31977
  }), 128))
31736
31978
  ])
@@ -32779,6 +33021,13 @@ function useModalFocus(root, active, isTop, lockScroll = () => true, ownerDocume
32779
33021
  element2 = target2;
32780
33022
  if (!target2.contains(target2.ownerDocument.activeElement)) target2.focus({ preventScroll: true });
32781
33023
  }
33024
+ function focusAfterEnter() {
33025
+ const doc = root()?.ownerDocument;
33026
+ const current = doc?.activeElement;
33027
+ if (!current || current === doc?.body || current === doc?.documentElement || previous.includes(current)) {
33028
+ focus();
33029
+ }
33030
+ }
32782
33031
  function restore() {
32783
33032
  const focused = owner?.activeElement;
32784
33033
  const target2 = previous.find(restorable);
@@ -32861,7 +33110,7 @@ function useModalFocus(root, active, isTop, lockScroll = () => true, ownerDocume
32861
33110
  unbind2();
32862
33111
  bind2();
32863
33112
  }
32864
- if (value) capture();
33113
+ if (value && (!captured || root() !== element2)) capture();
32865
33114
  }, { flush: "post" });
32866
33115
  vue.onMounted(() => {
32867
33116
  mounted2 = true;
@@ -32884,7 +33133,7 @@ function useModalFocus(root, active, isTop, lockScroll = () => true, ownerDocume
32884
33133
  unbind2();
32885
33134
  restore();
32886
33135
  });
32887
- return { focus, restore, trap };
33136
+ return { focus, focusAfterEnter, restore, trap };
32888
33137
  }
32889
33138
  function usePopupTransition(active, unmount, emit) {
32890
33139
  let live = false, suspended = false;
@@ -32965,7 +33214,7 @@ function useModalSurface(options) {
32965
33214
  mergedZIndex,
32966
33215
  modalDocument
32967
33216
  );
32968
- const { focus, restore } = useModalFocus(
33217
+ const { focus, focusAfterEnter, restore } = useModalFocus(
32969
33218
  () => options.root.value?.querySelector("[data-modal-focus-root]") ?? options.root.value,
32970
33219
  () => mergedOpen.value,
32971
33220
  onStackTop,
@@ -32973,7 +33222,13 @@ function useModalSurface(options) {
32973
33222
  modalDocument
32974
33223
  );
32975
33224
  vue.watch([popupContainerTarget, () => options.popupContainer() === false], () => {
32976
- vue.nextTick(focus);
33225
+ vue.nextTick(() => {
33226
+ const doc = modalDocument();
33227
+ const current = doc?.activeElement;
33228
+ if (!current || current === doc?.body || current === doc?.documentElement) {
33229
+ focus();
33230
+ }
33231
+ });
32977
33232
  }, { flush: "post" });
32978
33233
  useScrollLock(
32979
33234
  () => scrollLockTarget.value,
@@ -33047,7 +33302,7 @@ function useModalSurface(options) {
33047
33302
  vue.onBeforeUnmount(unbind2);
33048
33303
  function opened() {
33049
33304
  if (mergedOpen.value) {
33050
- focus();
33305
+ focusAfterEnter();
33051
33306
  transition.opened();
33052
33307
  }
33053
33308
  }
@@ -33397,7 +33652,7 @@ function useDialogDrag(options) {
33397
33652
  }
33398
33653
  const _hoisted_1$$ = ["dir"];
33399
33654
  const _hoisted_2$q = ["aria-busy", "aria-label"];
33400
- const _hoisted_3$e = ["aria-label"];
33655
+ const _hoisted_3$f = ["aria-label"];
33401
33656
  const _sfc_main$1I = /* @__PURE__ */ vue.defineComponent({
33402
33657
  ...{ name: createNamespace$1("dialog").name, inheritAttrs: false },
33403
33658
  __name: "Dialog",
@@ -33619,7 +33874,7 @@ const _sfc_main$1I = /* @__PURE__ */ vue.defineComponent({
33619
33874
  ]),
33620
33875
  _: 1
33621
33876
  })
33622
- ], 10, _hoisted_3$e)) : vue.createCommentVNode("", true)
33877
+ ], 10, _hoisted_3$f)) : vue.createCommentVNode("", true)
33623
33878
  ], 34)) : vue.createCommentVNode("", true),
33624
33879
  vue.createElementVNode("div", {
33625
33880
  class: vue.normalizeClass([`${vue.unref(prefixCls2)}-body`, _ctx.bodyClass]),
@@ -33641,7 +33896,7 @@ const _sfc_main$1I = /* @__PURE__ */ vue.defineComponent({
33641
33896
  confirm: handleConfirm,
33642
33897
  close: handleClose
33643
33898
  }, () => [
33644
- _ctx.cancelButton ? (vue.openBlock(), vue.createBlock(vue.unref(Button), vue.mergeProps({
33899
+ _ctx.cancelButton ? (vue.openBlock(), vue.createBlock(vue.unref(Button$1), vue.mergeProps({
33645
33900
  key: 0,
33646
33901
  variant: "text"
33647
33902
  }, _ctx.cancelButtonProps, {
@@ -33654,7 +33909,7 @@ const _sfc_main$1I = /* @__PURE__ */ vue.defineComponent({
33654
33909
  ]),
33655
33910
  _: 1
33656
33911
  }, 16, ["loading", "disabled"])) : vue.createCommentVNode("", true),
33657
- _ctx.confirmButton ? (vue.openBlock(), vue.createBlock(vue.unref(Button), vue.mergeProps({
33912
+ _ctx.confirmButton ? (vue.openBlock(), vue.createBlock(vue.unref(Button$1), vue.mergeProps({
33658
33913
  key: 1,
33659
33914
  variant: "text"
33660
33915
  }, _ctx.confirmButtonProps, {
@@ -33944,7 +34199,7 @@ function useDrawerTitleId(prefix) {
33944
34199
  }
33945
34200
  const _hoisted_1$_ = ["dir"];
33946
34201
  const _hoisted_2$p = ["aria-busy", "aria-label", "aria-labelledby"];
33947
- const _hoisted_3$d = ["id"];
34202
+ const _hoisted_3$e = ["id"];
33948
34203
  const _hoisted_4$9 = ["aria-label"];
33949
34204
  const _sfc_main$1H = /* @__PURE__ */ vue.defineComponent({
33950
34205
  ...{
@@ -34117,7 +34372,7 @@ const _sfc_main$1H = /* @__PURE__ */ vue.defineComponent({
34117
34372
  vue.renderSlot(_ctx.$slots, "title", {}, () => [
34118
34373
  vue.createTextVNode(vue.toDisplayString(_ctx.title), 1)
34119
34374
  ])
34120
- ], 10, _hoisted_3$d)) : vue.createCommentVNode("", true),
34375
+ ], 10, _hoisted_3$e)) : vue.createCommentVNode("", true),
34121
34376
  _ctx.closable ? (vue.openBlock(), vue.createElementBlock("button", {
34122
34377
  key: 1,
34123
34378
  type: "button",
@@ -35118,6 +35373,31 @@ const _sfc_main$1F = /* @__PURE__ */ vue.defineComponent({
35118
35373
  });
35119
35374
  const Row = withInstall(_sfc_main$1F);
35120
35375
  const _RowComponent = Row;
35376
+ function focusExplicitSlider(event) {
35377
+ if (event.defaultPrevented || event.button !== 0) return;
35378
+ const label = event.currentTarget;
35379
+ if (!label || label.nodeType !== 1 || label.tagName !== "LABEL") return;
35380
+ const origin = event.target;
35381
+ const interactive2 = origin?.nodeType === 1 ? origin.closest('a[href],button,input,select,textarea,[contenteditable]:not([contenteditable="false"]),[role="button"],[role="link"],[role="checkbox"],[role="radio"],[role="switch"],[role="textbox"],[role="combobox"],[role="slider"]') : null;
35382
+ if (interactive2 && interactive2 !== label && label.contains(interactive2)) return;
35383
+ const id = label.getAttribute("for");
35384
+ if (!id || label.control) return;
35385
+ const root = label.getRootNode();
35386
+ if (typeof root.getElementById !== "function") return;
35387
+ const target2 = root.getElementById(id);
35388
+ if (!target2) return;
35389
+ const previous = root.activeElement;
35390
+ const previousDocument = label.ownerDocument.activeElement;
35391
+ setTimeout(() => {
35392
+ if (event.defaultPrevented || !label.isConnected || label.getAttribute("for") !== id || root.getElementById(id) !== target2 || root.activeElement !== previous || label.ownerDocument.activeElement !== previousDocument) return;
35393
+ const sliders = target2.matches('[role="slider"]') ? [target2] : Array.from(target2.querySelectorAll('[role="slider"]'));
35394
+ if (sliders.length !== 1) return;
35395
+ const slider = sliders[0];
35396
+ if (target2 !== slider && !Array.from(target2.classList).some((name2) => name2.endsWith("-slider") && slider.classList.contains(`${name2}__thumb`))) return;
35397
+ if (slider.tabIndex < 0 || slider.getAttribute("aria-disabled") === "true" || slider.closest('[inert], [aria-hidden="true"]')) return;
35398
+ slider.focus();
35399
+ }, 0);
35400
+ }
35121
35401
  function resolveFormItemStatus(explicit, automatic) {
35122
35402
  return explicit ?? automatic;
35123
35403
  }
@@ -35155,7 +35435,7 @@ const _sfc_main$1E = /* @__PURE__ */ vue.defineComponent({
35155
35435
  ref_key: "labelRef",
35156
35436
  ref: labelRef,
35157
35437
  class: __props.labelClass
35158
- }, __props.attrs), {
35438
+ }, __props.attrs, { onClick: vue.unref(focusExplicitSlider) }), {
35159
35439
  default: vue.withCtx(() => [
35160
35440
  __props.required && __props.asteriskPosition === "start" ? (vue.openBlock(), vue.createElementBlock("strong", {
35161
35441
  key: 0,
@@ -35187,7 +35467,7 @@ const _sfc_main$1E = /* @__PURE__ */ vue.defineComponent({
35187
35467
  vue.createTextVNode(" " + vue.toDisplayString(__props.showColon ? ":" : ""), 1)
35188
35468
  ]),
35189
35469
  _: 3
35190
- }, 16, ["class"])),
35470
+ }, 16, ["class", "onClick"])),
35191
35471
  __props.tooltip ? (vue.openBlock(), vue.createBlock(vue.unref(Tooltip), {
35192
35472
  key: 0,
35193
35473
  content: __props.tooltip,
@@ -35483,14 +35763,38 @@ const _sfc_main$1C = vue.defineComponent({
35483
35763
  const isRequired = vue.computed(
35484
35764
  () => mergedRules.value.some((item) => item.required)
35485
35765
  );
35486
- const formItemCtx = props2.noStyle ? vue.inject(formItemInjectionKey, void 0) : void 0;
35487
- const updateValidateState = (field2, { status, message }) => {
35488
- validateStatus[field2] = status;
35489
- validateMessage[field2] = message;
35766
+ const formItemCtx = vue.inject(formItemInjectionKey, void 0);
35767
+ const feedbackOwner = Symbol("form-item-feedback");
35768
+ const feedbackSources = /* @__PURE__ */ new Map();
35769
+ const updateValidateState = (field2, { status, message }, owner = feedbackOwner) => {
35770
+ let sources = feedbackSources.get(field2);
35771
+ if (!sources) {
35772
+ sources = /* @__PURE__ */ new Map();
35773
+ feedbackSources.set(field2, sources);
35774
+ }
35775
+ if (status || message) {
35776
+ sources.delete(owner);
35777
+ sources.set(owner, { status, message });
35778
+ } else sources.delete(owner);
35779
+ let effective = { status: "", message: "" };
35780
+ for (const candidate of sources.values()) {
35781
+ const rank = candidate.status ? VALIDATE_STATUSES.indexOf(candidate.status) : -1;
35782
+ const currentRank = effective.status ? VALIDATE_STATUSES.indexOf(effective.status) : -1;
35783
+ if (rank >= currentRank) effective = candidate;
35784
+ }
35785
+ if (!sources.size) feedbackSources.delete(field2);
35786
+ validateStatus[field2] = effective.status;
35787
+ validateMessage[field2] = effective.message;
35490
35788
  if (props2.noStyle) {
35491
- formItemCtx?.updateValidateState(field2, { status, message });
35789
+ formItemCtx?.updateValidateState(field2, effective, feedbackOwner);
35492
35790
  }
35493
35791
  };
35792
+ vue.watch(() => props2.noStyle, (noStyle) => {
35793
+ if (!formItemCtx) return;
35794
+ for (const name2 of Object.keys(validateStatus)) {
35795
+ formItemCtx.updateValidateState(name2, noStyle ? { status: validateStatus[name2], message: validateMessage[name2] ?? "" } : { status: "", message: "" }, feedbackOwner);
35796
+ }
35797
+ }, { flush: "sync" });
35494
35798
  const computedFeedback = vue.computed(
35495
35799
  () => props2.feedback && computedValidateStatus.value ? computedValidateStatus.value : void 0
35496
35800
  );
@@ -35705,8 +36009,6 @@ const _sfc_main$1C = vue.defineComponent({
35705
36009
  validateDisabled.value = false;
35706
36010
  for (const name2 of Object.keys(validateStatus)) {
35707
36011
  updateValidateState(name2, { status: "", message: "" });
35708
- delete validateStatus[name2];
35709
- delete validateMessage[name2];
35710
36012
  }
35711
36013
  captureInitialValue();
35712
36014
  registerCurrentField();
@@ -35720,6 +36022,11 @@ const _sfc_main$1C = vue.defineComponent({
35720
36022
  active = false;
35721
36023
  fieldMounted = false;
35722
36024
  validation.invalidate();
36025
+ if (props2.noStyle && formItemCtx) {
36026
+ for (const name2 of Object.keys(validateStatus)) {
36027
+ formItemCtx.updateValidateState(name2, { status: "", message: "" }, feedbackOwner);
36028
+ }
36029
+ }
35723
36030
  unregisterCurrentField();
35724
36031
  });
35725
36032
  const cls = vue.computed(() => [
@@ -38252,7 +38559,7 @@ const _sfc_main$1s = vue.defineComponent({
38252
38559
  });
38253
38560
  const _hoisted_1$Q = ["src", "alt"];
38254
38561
  const _hoisted_2$m = ["disabled", "aria-label"];
38255
- const _hoisted_3$c = ["disabled", "aria-label"];
38562
+ const _hoisted_3$d = ["disabled", "aria-label"];
38256
38563
  function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) {
38257
38564
  const _component_ImagePreview = vue.resolveComponent("ImagePreview");
38258
38565
  return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
@@ -38344,7 +38651,7 @@ function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) {
38344
38651
  disabled: !_ctx.loop && _ctx.mergedCurrent === _ctx.previewImages.length - 1,
38345
38652
  "aria-label": _ctx.actionLabels.next,
38346
38653
  onClick: _cache[5] || (_cache[5] = (...args) => _ctx.next && _ctx.next(...args))
38347
- }, " › ", 10, _hoisted_3$c)) : vue.createCommentVNode("", true),
38654
+ }, " › ", 10, _hoisted_3$d)) : vue.createCommentVNode("", true),
38348
38655
  vue.renderSlot(_ctx.$slots, "indicator", {
38349
38656
  imageNumber: _ctx.mergedCurrent + 1,
38350
38657
  length: _ctx.previewImages.length
@@ -40584,7 +40891,7 @@ const _sfc_main$1k = /* @__PURE__ */ vue.defineComponent({
40584
40891
  });
40585
40892
  const _hoisted_1$N = ["inert"];
40586
40893
  const _hoisted_2$l = ["aria-expanded", "aria-label"];
40587
- const _hoisted_3$b = { key: 0 };
40894
+ const _hoisted_3$c = { key: 0 };
40588
40895
  const _hoisted_4$8 = { key: 1 };
40589
40896
  function _sfc_render$n(_ctx, _cache, $props, $setup, $data, $options) {
40590
40897
  const _component_IconLeft = vue.resolveComponent("IconLeft");
@@ -40617,7 +40924,7 @@ function _sfc_render$n(_ctx, _cache, $props, $setup, $data, $options) {
40617
40924
  onClick: _cache[1] || (_cache[1] = (...args) => _ctx.toggleTrigger && _ctx.toggleTrigger(...args))
40618
40925
  }, [
40619
40926
  vue.renderSlot(_ctx.$slots, "trigger", { collapsed: _ctx.localCollapsed }, () => [
40620
- !_ctx.arrowReversed ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$b, [
40927
+ !_ctx.arrowReversed ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$c, [
40621
40928
  !_ctx.localCollapsed ? (vue.openBlock(), vue.createBlock(_component_IconLeft, { key: 0 })) : (vue.openBlock(), vue.createBlock(_component_IconRight, { key: 1 }))
40622
40929
  ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$8, [
40623
40930
  _ctx.localCollapsed ? (vue.openBlock(), vue.createBlock(_component_IconLeft, { key: 0 })) : (vue.openBlock(), vue.createBlock(_component_IconRight, { key: 1 }))
@@ -41061,7 +41368,7 @@ const _sfc_main$1h = vue.defineComponent({
41061
41368
  });
41062
41369
  const _hoisted_1$L = ["id", "aria-label", "aria-describedby"];
41063
41370
  const _hoisted_2$k = ["aria-busy"];
41064
- const _hoisted_3$a = ["id"];
41371
+ const _hoisted_3$b = ["id"];
41065
41372
  function _sfc_render$m(_ctx, _cache, $props, $setup, $data, $options) {
41066
41373
  const _component_icon_info_circle_fill = vue.resolveComponent("icon-info-circle-fill");
41067
41374
  const _component_icon_check_circle_fill = vue.resolveComponent("icon-check-circle-fill");
@@ -41114,7 +41421,7 @@ function _sfc_render$m(_ctx, _cache, $props, $setup, $data, $options) {
41114
41421
  vue.renderSlot(_ctx.$slots, "content", {}, () => [
41115
41422
  vue.createTextVNode(vue.toDisplayString(_ctx.content), 1)
41116
41423
  ])
41117
- ], 10, _hoisted_3$a)
41424
+ ], 10, _hoisted_3$b)
41118
41425
  ], 10, _hoisted_2$k),
41119
41426
  vue.createElementVNode("div", {
41120
41427
  class: vue.normalizeClass(`${_ctx.prefixCls}-footer`)
@@ -41578,7 +41885,7 @@ const _sfc_main$1g = /* @__PURE__ */ vue.defineComponent({
41578
41885
  name: "suffix",
41579
41886
  fn: vue.withCtx(() => [
41580
41887
  vue.renderSlot(_ctx.$slots, "suffix"),
41581
- vue.createVNode(_sfc_main$2Z, { status: vue.unref(feedback) }, null, 8, ["status"])
41888
+ vue.createVNode(_sfc_main$2_, { status: vue.unref(feedback) }, null, 8, ["status"])
41582
41889
  ]),
41583
41890
  key: "2"
41584
41891
  } : void 0
@@ -46157,7 +46464,7 @@ const _sfc_main$19 = /* @__PURE__ */ vue.defineComponent({
46157
46464
  setup(__props, { emit: __emit }) {
46158
46465
  const emit = __emit;
46159
46466
  return (_ctx, _cache) => {
46160
- return vue.openBlock(), vue.createBlock(vue.unref(Input), {
46467
+ return vue.openBlock(), vue.createBlock(vue.unref(SearchInput), {
46161
46468
  "edit-mode": "direct",
46162
46469
  "model-value": __props.modelValue,
46163
46470
  size: __props.size,
@@ -46647,7 +46954,7 @@ const _sfc_main$14 = /* @__PURE__ */ vue.defineComponent({
46647
46954
  });
46648
46955
  const Paper = withInstall(_sfc_main$14);
46649
46956
  const _PaperComponent = Paper;
46650
- const identity = (value) => value === null || typeof value === "string";
46957
+ const identity = (value) => value === null || typeof value === "string" || Array.isArray(value) && value.every((id) => typeof id === "string");
46651
46958
  const peopleSelectEmits = {
46652
46959
  "update:modelValue": identity,
46653
46960
  "update:open": (open2) => typeof open2 === "boolean",
@@ -46724,7 +47031,7 @@ const _sfc_main$13 = /* @__PURE__ */ vue.defineComponent({
46724
47031
  }, ["stop"]))
46725
47032
  }, [
46726
47033
  vue.renderSlot(_ctx.$slots, "default", {}, () => [
46727
- __props.showPhone ? (vue.openBlock(), vue.createBlock(vue.unref(Button), {
47034
+ __props.showPhone ? (vue.openBlock(), vue.createBlock(vue.unref(Button$1), {
46728
47035
  key: 0,
46729
47036
  size: "xs",
46730
47037
  variant: "text",
@@ -46751,7 +47058,7 @@ const _sfc_main$13 = /* @__PURE__ */ vue.defineComponent({
46751
47058
  ])]),
46752
47059
  _: 1
46753
47060
  }, 8, ["disabled", "aria-label", "loading"])) : vue.createCommentVNode("", true),
46754
- __props.showChat ? (vue.openBlock(), vue.createBlock(vue.unref(Button), {
47061
+ __props.showChat ? (vue.openBlock(), vue.createBlock(vue.unref(Button$1), {
46755
47062
  key: 1,
46756
47063
  size: "xs",
46757
47064
  variant: "text",
@@ -46789,8 +47096,47 @@ const _sfc_main$13 = /* @__PURE__ */ vue.defineComponent({
46789
47096
  };
46790
47097
  }
46791
47098
  });
47099
+ function personIds(value) {
47100
+ return Array.isArray(value) ? value : value == null ? [] : [value];
47101
+ }
47102
+ function useSelectedPeople(props2, value, options) {
47103
+ const cache2 = vue.shallowRef(/* @__PURE__ */ new Map());
47104
+ vue.watch([options, value], () => {
47105
+ const next = /* @__PURE__ */ new Map();
47106
+ for (const id of personIds(value.value)) {
47107
+ const person = options.value.find((option2) => option2.value === id) ?? cache2.value.get(id);
47108
+ if (person) next.set(id, person);
47109
+ }
47110
+ cache2.value = next;
47111
+ }, { immediate: true, flush: "sync" });
47112
+ function resolve(id) {
47113
+ const current = options.value.find((option2) => option2.value === id);
47114
+ if (current) return current;
47115
+ if (typeof props2.fallbackOption === "function") return props2.fallbackOption(id);
47116
+ if (props2.fallbackOption !== false) {
47117
+ if (!props2.multiple && props2.label) return { ...cache2.value.get(id), value: id, label: props2.label };
47118
+ const cached = cache2.value.get(id);
47119
+ if (cached) return cached;
47120
+ }
47121
+ return { value: id, label: props2.fallbackOption === false ? props2.defaultText ?? "-" : !props2.multiple && props2.label || id || (props2.defaultText ?? "-") };
47122
+ }
47123
+ return {
47124
+ people: vue.computed(() => personIds(value.value).map(resolve)),
47125
+ resolve
47126
+ };
47127
+ }
47128
+ function peopleText(value, props2) {
47129
+ return personIds(value).map((id) => {
47130
+ const option2 = Array.isArray(props2.options) ? props2.options.find((person) => person.value === id) : void 0;
47131
+ if (option2) return option2.label;
47132
+ if (typeof props2.fallbackOption === "function") return props2.fallbackOption(id).label;
47133
+ return !props2.multiple && props2.label || id || (props2.defaultText ?? "-");
47134
+ }).join(", ");
47135
+ }
46792
47136
  const peopleSelectProps = {
46793
47137
  ...fieldLoadingProps,
47138
+ /** 弹出编辑是否需要确认;未设置时单选即提交,多选保留确认。 */
47139
+ needConfirm: { type: Boolean, default: void 0 },
46794
47140
  ...fieldPresentationProps,
46795
47141
  emptyValue: emptyValueProp(),
46796
47142
  /** Reactive display data for a selected value absent from options. */
@@ -46828,9 +47174,13 @@ const peopleSelectProps = {
46828
47174
  type: String,
46829
47175
  default: "-"
46830
47176
  },
46831
- modelValue: { type: String, default: void 0 },
46832
- /** 非受控初始选中人员标识,仅创建时读取。 */
46833
- defaultValue: { type: String, default: "" },
47177
+ multiple: selectProps.multiple,
47178
+ modelValue: { type: [String, Array], default: void 0 },
47179
+ /** 非受控初始选中人员 ID 或 ID 数组,仅创建时读取。 */
47180
+ defaultValue: {
47181
+ type: [String, Array],
47182
+ default: (props2) => props2.multiple ? [] : ""
47183
+ },
46834
47184
  isLabel: {
46835
47185
  type: Boolean,
46836
47186
  default: false
@@ -46854,12 +47204,7 @@ const Base$4 = /* @__PURE__ */ vue.defineComponent({
46854
47204
  name: name$r,
46855
47205
  inheritAttrs: false,
46856
47206
  props: peopleSelectProps,
46857
- emits: {
46858
- "update:modelValue": (value) => value === null || typeof value === "string",
46859
- change: (value) => value === null || typeof value === "string",
46860
- clear: () => true,
46861
- search: (query) => typeof query === "string"
46862
- },
47207
+ emits: peopleSelectEmits,
46863
47208
  setup(props2, {
46864
47209
  emit,
46865
47210
  attrs,
@@ -46885,10 +47230,10 @@ const Base$4 = /* @__PURE__ */ vue.defineComponent({
46885
47230
  ...option2
46886
47231
  })));
46887
47232
  const blocked2 = () => mergedDisabled.value || mergedReadonly.value || props2.loading;
46888
- const label = vue.computed(() => (Array.isArray(props2.options) ? props2.options : []).find((option2) => option2.value === value.value)?.label || props2.label || value.value || props2.defaultText);
47233
+ const label = vue.computed(() => peopleText(value.value, props2));
46889
47234
  const commit = (next) => {
46890
47235
  if (blocked2()) return;
46891
- const text = next === null ? null : typeof next === "string" ? next : "";
47236
+ const text = next === null ? null : props2.multiple ? Array.isArray(next) ? next.filter((id) => typeof id === "string") : [] : typeof next === "string" ? next : "";
46892
47237
  if (props2.modelValue === void 0) localValue.value = text;
46893
47238
  emit("update:modelValue", text);
46894
47239
  emit("change", text);
@@ -46899,6 +47244,7 @@ const Base$4 = /* @__PURE__ */ vue.defineComponent({
46899
47244
  name: props2.name
46900
47245
  }, {
46901
47246
  "placeholder": props2.placeholder,
47247
+ "multiple": props2.multiple,
46902
47248
  "clearable": props2.clearable,
46903
47249
  "emptyValue": props2.emptyValue,
46904
47250
  "filterable": props2.filterable,
@@ -46929,10 +47275,11 @@ const Base$4 = /* @__PURE__ */ vue.defineComponent({
46929
47275
  }
46930
47276
  });
46931
47277
  const Presented = withFieldPresentation(Base$4, {
47278
+ selectionConfirmation: "update",
46932
47279
  methods: ["focus", "blur"],
46933
- text: (value, props2) => props2.options?.find((option2) => option2.value === value)?.label || props2.label || value || props2.defaultText || "",
47280
+ text: peopleText,
46934
47281
  editor: ({ props: props2, attrs, value, update, emit, slots, disabled, readonly }) => vue.h(
46935
- _sfc_main$30,
47282
+ _sfc_main$31,
46936
47283
  { kind: "people-select" },
46937
47284
  () => vue.h(
46938
47285
  Base$4,
@@ -46981,44 +47328,16 @@ const _PeopleSelect = vue.defineComponent({
46981
47328
  const options = vue.computed(
46982
47329
  () => Array.isArray(props2.options) ? props2.options : source.data.value
46983
47330
  );
46984
- const selectedCache = vue.ref();
46985
- vue.watch(
46986
- [options, value],
46987
- () => {
46988
- const person = options.value.find(
46989
- (person2) => person2.value === value.value
46990
- );
46991
- if (person) selectedCache.value = person;
46992
- else if (selectedCache.value?.value !== value.value)
46993
- selectedCache.value = void 0;
46994
- },
46995
- { immediate: true }
46996
- );
46997
- const selected = vue.computed(() => {
46998
- const current = options.value.find(
46999
- (person) => person.value === value.value
47000
- );
47001
- if (current) return current;
47002
- if (typeof props2.fallbackOption === "function" && value.value != null) {
47003
- return props2.fallbackOption(value.value);
47004
- }
47005
- if (props2.fallbackOption !== false && props2.label)
47006
- return {
47007
- ...selectedCache.value,
47008
- value: value.value ?? "",
47009
- label: props2.label
47010
- };
47011
- if (props2.fallbackOption !== false && selectedCache.value?.value === value.value)
47012
- return selectedCache.value;
47013
- return {
47014
- value: value.value ?? "",
47015
- label: props2.fallbackOption === false ? props2.defaultText : props2.label || value.value || props2.defaultText
47016
- };
47331
+ const selection = useSelectedPeople(props2, value, options);
47332
+ const selected = vue.computed(() => selection.people.value[0] ?? {
47333
+ value: "",
47334
+ label: props2.label || props2.defaultText
47017
47335
  });
47018
47336
  const readScope = vue.computed(() => ({
47019
47337
  value: value.value,
47020
- text: emptyPolicy.isEmpty(value.value) ? emptyPolicy.emptyText.value : selected.value.label,
47021
- person: selected.value
47338
+ text: emptyPolicy.isEmpty(value.value) ? emptyPolicy.emptyText.value : selection.people.value.map((person) => person.label).join(", "),
47339
+ person: selected.value,
47340
+ ...props2.multiple ? { people: selection.people.value } : {}
47022
47341
  }));
47023
47342
  const childOptions = options;
47024
47343
  async function load(query) {
@@ -47054,15 +47373,15 @@ const _PeopleSelect = vue.defineComponent({
47054
47373
  if (emptyPolicy.isEmpty(value.value)) {
47055
47374
  return emptyPolicy.emptyText.value;
47056
47375
  }
47057
- const scope = {
47058
- person: selected.value,
47059
- disabled: form.mergedDisabled.value || !value.value || !!selected.value.disabled
47060
- };
47061
- const actions = slots.actions ? slots.actions(scope) : props2.renderActions?.(scope);
47062
- return vue.h(
47063
- _sfc_main$13,
47064
- {
47065
- person: selected.value,
47376
+ const renderPerson = (person) => {
47377
+ const scope = {
47378
+ person,
47379
+ disabled: form.mergedDisabled.value || !person.value || !!person.disabled
47380
+ };
47381
+ const actions = slots.actions ? slots.actions(scope) : props2.renderActions?.(scope);
47382
+ return vue.h(_sfc_main$13, {
47383
+ key: person.value,
47384
+ person,
47066
47385
  showAvatar: props2.showAvatar,
47067
47386
  disabled: scope.disabled,
47068
47387
  showPhone: props2.showPhone,
@@ -47070,9 +47389,9 @@ const _PeopleSelect = vue.defineComponent({
47070
47389
  call: props2.call,
47071
47390
  chat: props2.chat,
47072
47391
  onActionError: (error, action) => emit("action-error", error, action)
47073
- },
47074
- actions == null ? void 0 : { default: () => actions }
47075
- );
47392
+ }, actions == null ? void 0 : { default: () => actions });
47393
+ };
47394
+ return props2.multiple ? vue.h("span", { class: "c-people-select-people" }, selection.people.value.map(renderPerson)) : renderPerson(selected.value);
47076
47395
  };
47077
47396
  const personSlots = () => ({
47078
47397
  ...slots,
@@ -47094,8 +47413,8 @@ const _PeopleSelect = vue.defineComponent({
47094
47413
  ref: control,
47095
47414
  modelValue: value.value,
47096
47415
  options: childOptions.value,
47097
- label: selected.value.label,
47098
- fallbackOption: props2.fallbackOption === false ? false : () => selected.value,
47416
+ label: props2.multiple ? "" : selected.value.label,
47417
+ fallbackOption: props2.fallbackOption === false ? false : selection.resolve,
47099
47418
  loading: props2.loading || source.loading.value,
47100
47419
  filterOption: props2.filterOption ?? !remote.value,
47101
47420
  "onUpdate:modelValue": update,
@@ -47298,7 +47617,7 @@ function useProgressSize(size) {
47298
47617
  }
47299
47618
  const _hoisted_1$B = ["aria-valuenow", "aria-busy"];
47300
47619
  const _hoisted_2$h = ["viewBox"];
47301
- const _hoisted_3$9 = { key: 0 };
47620
+ const _hoisted_3$a = { key: 0 };
47302
47621
  const _hoisted_4$7 = ["offset", "stop-color"];
47303
47622
  const _hoisted_5$3 = ["cx", "cy", "r", "stroke-width"];
47304
47623
  const _hoisted_6$2 = ["cx", "cy", "r", "stroke-width", "stroke-dasharray", "stroke-dashoffset"];
@@ -47429,7 +47748,7 @@ const _sfc_main$12 = /* @__PURE__ */ vue.defineComponent({
47429
47748
  viewBox: `0 0 ${vue.unref(diameter)} ${vue.unref(diameter)}`,
47430
47749
  "aria-hidden": "true"
47431
47750
  }, [
47432
- gradient.value ? (vue.openBlock(), vue.createElementBlock("defs", _hoisted_3$9, [
47751
+ gradient.value ? (vue.openBlock(), vue.createElementBlock("defs", _hoisted_3$a, [
47433
47752
  vue.createElementVNode("linearGradient", {
47434
47753
  id: gradientId,
47435
47754
  x1: "0%",
@@ -47523,7 +47842,7 @@ const progressGroupProps = {
47523
47842
  };
47524
47843
  const _hoisted_1$A = ["aria-label", "data-orientation"];
47525
47844
  const _hoisted_2$g = ["aria-valuemax", "aria-valuenow", "aria-label", "tabindex", "aria-describedby", "onMouseenter", "onFocus"];
47526
- const _hoisted_3$8 = ["r", "stroke-width"];
47845
+ const _hoisted_3$9 = ["r", "stroke-width"];
47527
47846
  const _hoisted_4$6 = ["aria-valuemax", "aria-valuenow", "aria-label", "tabindex", "aria-describedby", "r", "stroke", "stroke-width", "stroke-dasharray", "stroke-dashoffset", "onFocus", "onMouseenter"];
47528
47847
  const _hoisted_5$2 = ["r", "stroke", "stroke-width", "stroke-dasharray", "stroke-dashoffset"];
47529
47848
  const _sfc_main$11 = /* @__PURE__ */ vue.defineComponent({
@@ -47745,7 +48064,7 @@ const _sfc_main$11 = /* @__PURE__ */ vue.defineComponent({
47745
48064
  fill: "none",
47746
48065
  "stroke-width": normalizedStrokeWidth.value,
47747
48066
  pathLength: "100"
47748
- }, null, 10, _hoisted_3$8),
48067
+ }, null, 10, _hoisted_3$9),
47749
48068
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(circleSegments.value, (item, index) => {
47750
48069
  return vue.openBlock(), vue.createElementBlock("circle", {
47751
48070
  key: index,
@@ -51315,7 +51634,7 @@ const _hoisted_1$t = {
51315
51634
  "aria-hidden": "true"
51316
51635
  };
51317
51636
  const _hoisted_2$f = ["title"];
51318
- const _hoisted_3$7 = ["title"];
51637
+ const _hoisted_3$8 = ["title"];
51319
51638
  const _hoisted_4$5 = ["dir"];
51320
51639
  const _sfc_main$V = /* @__PURE__ */ vue.defineComponent({
51321
51640
  ...{ name: createNamespace$1("scheduler-event").name },
@@ -51713,7 +52032,7 @@ const _sfc_main$V = /* @__PURE__ */ vue.defineComponent({
51713
52032
  onClick: _cache[4] || (_cache[4] = vue.withModifiers(() => {
51714
52033
  }, ["stop"])),
51715
52034
  onDragstart: _cache[5] || (_cache[5] = vue.withModifiers(($event) => begin($event, "start"), ["stop"]))
51716
- }, null, 42, _hoisted_3$7)) : vue.createCommentVNode("", true),
52035
+ }, null, 42, _hoisted_3$8)) : vue.createCommentVNode("", true),
51717
52036
  ghost.value ? (vue.openBlock(), vue.createBlock(vue.Teleport, {
51718
52037
  key: 2,
51719
52038
  to: "body"
@@ -53136,7 +53455,7 @@ const _sfc_main$S = /* @__PURE__ */ vue.defineComponent({
53136
53455
  });
53137
53456
  const _hoisted_1$p = ["aria-current", "data-scheduler-heading-date"];
53138
53457
  const _hoisted_2$d = ["data-scheduler-date", "data-scheduler-resource", "tabindex", "aria-disabled", "aria-label", "onDrop", "onClick", "onKeydown"];
53139
- const _hoisted_3$6 = ["aria-label"];
53458
+ const _hoisted_3$7 = ["aria-label"];
53140
53459
  const _hoisted_4$4 = ["onClickCapture", "onFocusin"];
53141
53460
  const _sfc_main$R = /* @__PURE__ */ vue.defineComponent({
53142
53461
  ...{ name: createNamespace$1("scheduler-time-grid").name },
@@ -53696,7 +54015,7 @@ const _sfc_main$R = /* @__PURE__ */ vue.defineComponent({
53696
54015
  }),
53697
54016
  role: "img",
53698
54017
  "aria-label": `${__props.messages.currentTime}: ${__props.now.toLocaleTimeString(__props.locale, { hour: "2-digit", minute: "2-digit", hour12: false })}`
53699
- }, null, 14, _hoisted_3$6)) : vue.createCommentVNode("", true),
54018
+ }, null, 14, _hoisted_3$7)) : vue.createCommentVNode("", true),
53700
54019
  vue.createElementVNode("div", {
53701
54020
  class: vue.normalizeClass(vue.unref(n2)("event-layer"))
53702
54021
  }, [
@@ -54452,7 +54771,7 @@ const _hoisted_2$c = {
54452
54771
  dir: "ltr",
54453
54772
  "aria-hidden": "true"
54454
54773
  };
54455
- const _hoisted_3$5 = {
54774
+ const _hoisted_3$6 = {
54456
54775
  dir: "ltr",
54457
54776
  "aria-hidden": "true"
54458
54777
  };
@@ -55534,7 +55853,7 @@ const _sfc_main$O = /* @__PURE__ */ vue.defineComponent({
55534
55853
  onClick: _cache[2] || (_cache[2] = ($event) => navigate(1))
55535
55854
  }, {
55536
55855
  default: vue.withCtx(() => [
55537
- vue.createElementVNode("span", _hoisted_3$5, vue.toDisplayString(vue.unref(isRtl) ? "‹" : "›"), 1)
55856
+ vue.createElementVNode("span", _hoisted_3$6, vue.toDisplayString(vue.unref(isRtl) ? "‹" : "›"), 1)
55538
55857
  ]),
55539
55858
  _: 1
55540
55859
  }, 8, ["disabled", "aria-label"]),
@@ -56632,7 +56951,7 @@ const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
56632
56951
  vue.createTextVNode(vue.toDisplayString(__props.settings.label), 1)
56633
56952
  ])
56634
56953
  ], 10, _hoisted_1$n)) : vue.createCommentVNode("", true),
56635
- vue.createVNode(vue.unref(Input), vue.mergeProps({
56954
+ vue.createVNode(vue.unref(SearchInput), vue.mergeProps({
56636
56955
  ref_key: "inputRef",
56637
56956
  ref: inputRef,
56638
56957
  loading: __props.settings.loading && __props.settings.loadingMode === "line",
@@ -56678,7 +56997,7 @@ const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
56678
56997
  key: "2"
56679
56998
  } : void 0
56680
56999
  ]), 1040, ["loading", "loading-mode", "model-value", "empty-value", "input-attrs", "error", "placeholder", "class", "onUpdate:modelValue", "onInput", "onChange", "onClear", "onPressEnter", "onBlur", "onFocus"]),
56681
- vue.createVNode(vue.unref(Button), {
57000
+ vue.createVNode(vue.unref(Button$1), {
56682
57001
  class: vue.normalizeClass(vue.unref(n2)("cancel")),
56683
57002
  variant: "text",
56684
57003
  disabled: __props.state.searchDisabled,
@@ -56989,7 +57308,7 @@ function useSearchInput(props2, popupActive, referenceAttrs = () => ({})) {
56989
57308
  }
56990
57309
  const _hoisted_1$m = ["aria-busy"];
56991
57310
  const _hoisted_2$a = ["for", "aria-hidden"];
56992
- const _hoisted_3$4 = ["disabled", "aria-label"];
57311
+ const _hoisted_3$5 = ["disabled", "aria-label"];
56993
57312
  const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({
56994
57313
  ...{ name: createNamespace$1("search").name, inheritAttrs: false },
56995
57314
  __name: "search",
@@ -57061,7 +57380,7 @@ const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({
57061
57380
  });
57062
57381
  __expose({ focus, blur });
57063
57382
  return (_ctx, _cache) => {
57064
- return vue.unref(readPretty) ? (vue.openBlock(), vue.createBlock(_sfc_main$31, {
57383
+ return vue.unref(readPretty) ? (vue.openBlock(), vue.createBlock(_sfc_main$32, {
57065
57384
  key: 0,
57066
57385
  "edit-mode": "direct",
57067
57386
  "read-pretty": true,
@@ -57086,7 +57405,7 @@ const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({
57086
57405
  class: vue.normalizeClass([vue.unref(classes2)(vue.unref(n2)(), vue.unref(n2)(`--${_ctx.shape}`)), vue.unref(attrs).class]),
57087
57406
  style: vue.normalizeStyle([{ background: _ctx.background }, vue.unref(attrs).style])
57088
57407
  }, [
57089
- vue.createVNode(_sfc_main$2X, {
57408
+ vue.createVNode(_sfc_main$2l, {
57090
57409
  size: vue.unref(mergedSize),
57091
57410
  disabled: vue.unref(mergedDisabled),
57092
57411
  readonly: vue.unref(mergedReadonly),
@@ -57123,7 +57442,7 @@ const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({
57123
57442
  }, {
57124
57443
  content: vue.withCtx(() => [
57125
57444
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.recentSearches, (item, index) => {
57126
- return vue.openBlock(), vue.createBlock(vue.unref(_sfc_main$2I), {
57445
+ return vue.openBlock(), vue.createBlock(vue.unref(_sfc_main$2M), {
57127
57446
  key: index,
57128
57447
  value: item,
57129
57448
  label: item
@@ -57131,7 +57450,7 @@ const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({
57131
57450
  }), 128))
57132
57451
  ]),
57133
57452
  default: vue.withCtx(() => [
57134
- vue.createVNode(_sfc_main$2Y, vue.mergeProps({
57453
+ vue.createVNode(_sfc_main$2Z, vue.mergeProps({
57135
57454
  loading: _ctx.loading && _ctx.loadingMode === "line",
57136
57455
  "loading-mode": _ctx.loadingMode
57137
57456
  }, fallthroughInputAttrs.value, {
@@ -57180,7 +57499,7 @@ const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({
57180
57499
  key: 2,
57181
57500
  name: _ctx.searchIcon
57182
57501
  }, null, 8, ["name"]))
57183
- ], 10, _hoisted_3$4)) : vue.createCommentVNode("", true),
57502
+ ], 10, _hoisted_3$5)) : vue.createCommentVNode("", true),
57184
57503
  vue.renderSlot(_ctx.$slots, "suffix")
57185
57504
  ]),
57186
57505
  _: 2
@@ -57203,7 +57522,7 @@ const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({
57203
57522
  ]),
57204
57523
  _: 3
57205
57524
  }, 8, ["open", "popup-container", "onUpdate:open", "onSelect"]),
57206
- vue.unref(effectiveShowAction) ? (vue.openBlock(), vue.createBlock(vue.unref(Button), vue.mergeProps({
57525
+ vue.unref(effectiveShowAction) ? (vue.openBlock(), vue.createBlock(vue.unref(Button$1), vue.mergeProps({
57207
57526
  key: 2,
57208
57527
  status: _ctx.searchButton ? "primary" : void 0,
57209
57528
  variant: _ctx.searchButton ? void 0 : "text"
@@ -57817,6 +58136,8 @@ const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({
57817
58136
  readonly: Boolean,
57818
58137
  error: Boolean,
57819
58138
  ariaLabel: [String, Array],
58139
+ ariaLabelledby: String,
58140
+ ariaDescribedby: String,
57820
58141
  ariaInvalid: { type: [String, Boolean], default: void 0 }
57821
58142
  },
57822
58143
  emits: ["change", "focus", "blur"],
@@ -57840,7 +58161,7 @@ const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({
57840
58161
  disabled: __props.disabled,
57841
58162
  readonly: __props.readonly,
57842
58163
  error: __props.error,
57843
- "input-attrs": { "aria-label": label(0), "aria-invalid": __props.ariaInvalid },
58164
+ "input-attrs": { "aria-label": label(0), "aria-labelledby": __props.ariaLabelledby, "aria-describedby": __props.ariaDescribedby, "aria-invalid": __props.ariaInvalid },
57844
58165
  onChange: _cache[0] || (_cache[0] = (value) => emit("change", 0, value ?? void 0)),
57845
58166
  onFocus: _cache[1] || (_cache[1] = ($event) => emit("focus")),
57846
58167
  onBlur: _cache[2] || (_cache[2] = ($event) => emit("blur"))
@@ -57854,7 +58175,7 @@ const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({
57854
58175
  disabled: __props.disabled,
57855
58176
  readonly: __props.readonly,
57856
58177
  error: __props.error,
57857
- "input-attrs": { "aria-label": label(1), "aria-invalid": __props.ariaInvalid },
58178
+ "input-attrs": { "aria-label": label(1), "aria-labelledby": __props.ariaLabelledby, "aria-describedby": __props.ariaDescribedby, "aria-invalid": __props.ariaInvalid },
57858
58179
  onChange: _cache[3] || (_cache[3] = (value) => emit("change", 1, value ?? void 0)),
57859
58180
  onFocus: _cache[4] || (_cache[4] = ($event) => emit("focus")),
57860
58181
  onBlur: _cache[5] || (_cache[5] = ($event) => emit("blur"))
@@ -57866,16 +58187,29 @@ const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({
57866
58187
  function useSliderForm(props2) {
57867
58188
  return useFormItem({ disabled: vue.computed(() => props2.disabled), error: vue.computed(() => props2.error), readonly: vue.computed(() => props2.readonly) });
57868
58189
  }
57869
- const _hoisted_1$k = ["tabindex", "aria-label", "aria-valuemin", "aria-valuemax", "aria-valuenow", "aria-valuetext", "aria-orientation", "aria-disabled", "aria-readonly", "aria-invalid", "aria-describedby", "onPointerdown", "onKeydown", "onFocus", "onMouseenter"];
57870
- const _hoisted_2$9 = ["id"];
58190
+ const _hoisted_1$k = ["role", "aria-labelledby"];
58191
+ const _hoisted_2$9 = ["tabindex", "aria-label", "aria-labelledby", "aria-valuemin", "aria-valuemax", "aria-valuenow", "aria-valuetext", "aria-orientation", "aria-disabled", "aria-readonly", "aria-invalid", "aria-describedby", "onPointerdown", "onKeydown", "onFocus", "onMouseenter"];
58192
+ const _hoisted_3$4 = ["id"];
57871
58193
  const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({
57872
- ...{ name: createNamespace$1("slider").name },
58194
+ ...{ name: createNamespace$1("slider").name, inheritAttrs: false },
57873
58195
  __name: "Slider",
57874
58196
  props: sliderProps,
57875
58197
  emits: ["update:modelValue", "change", "start", "end"],
57876
58198
  setup(__props, { expose: __expose, emit: __emit }) {
57877
58199
  const { n: n2, classes: classes2 } = createNamespace$1("slider");
57878
58200
  const props2 = __props;
58201
+ const attrs = vue.useAttrs();
58202
+ const formLabel = useFormItemLabel();
58203
+ const rangeGroupLabel = vue.computed(() => {
58204
+ const label = formLabel?.value;
58205
+ return props2.range && attrs.role == null && attrs["aria-labelledby"] == null && label?.target && label.target === attrs.id ? label.id : void 0;
58206
+ });
58207
+ const singleLabelledBy = vue.computed(() => {
58208
+ if (props2.range) return void 0;
58209
+ if (attrs["aria-labelledby"] != null) return attrs["aria-labelledby"];
58210
+ const label = formLabel?.value;
58211
+ return props2.ariaLabel == null && label?.target && label.target === attrs.id ? label.id : void 0;
58212
+ });
57879
58213
  const { describe: describeError } = useFormErrorDescription();
57880
58214
  const emit = __emit;
57881
58215
  const { mergedDisabled, mergedReadonly, mergedError, eventHandlers } = useSliderForm(props2);
@@ -58149,21 +58483,22 @@ const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({
58149
58483
  vue.onBeforeUnmount(cleanup);
58150
58484
  vue.onDeactivated(cleanup);
58151
58485
  return (_ctx, _cache) => {
58152
- return vue.openBlock(), vue.createElementBlock("div", {
58486
+ return vue.openBlock(), vue.createElementBlock("div", vue.mergeProps({
58153
58487
  ref_key: "root",
58154
- ref: root,
58155
- class: vue.normalizeClass(
58156
- vue.unref(classes2)(
58157
- vue.unref(n2)(),
58158
- vue.unref(n2)(`--${_ctx.orientation}`),
58159
- [isDisabled.value, vue.unref(n2)("--disabled")],
58160
- [vue.unref(mergedReadonly), vue.unref(n2)("--readonly")],
58161
- [vue.unref(mergedError), vue.unref(n2)("--error")],
58162
- [_ctx.marks, vue.unref(n2)("--marks")]
58163
- )
58488
+ ref: root
58489
+ }, _ctx.$attrs, {
58490
+ class: vue.unref(classes2)(
58491
+ vue.unref(n2)(),
58492
+ vue.unref(n2)(`--${_ctx.orientation}`),
58493
+ [isDisabled.value, vue.unref(n2)("--disabled")],
58494
+ [vue.unref(mergedReadonly), vue.unref(n2)("--readonly")],
58495
+ [vue.unref(mergedError), vue.unref(n2)("--error")],
58496
+ [_ctx.marks, vue.unref(n2)("--marks")]
58164
58497
  ),
58165
- style: vue.normalizeStyle(customStyle.value)
58166
- }, [
58498
+ style: customStyle.value,
58499
+ role: _ctx.$attrs.role ?? (_ctx.range && (rangeGroupLabel.value || typeof _ctx.$attrs["aria-labelledby"] === "string" && _ctx.$attrs["aria-labelledby"].trim()) ? "group" : void 0),
58500
+ "aria-labelledby": _ctx.$attrs["aria-labelledby"] ?? rangeGroupLabel.value
58501
+ }), [
58167
58502
  vue.createElementVNode("div", {
58168
58503
  ref_key: "track",
58169
58504
  ref: track,
@@ -58202,6 +58537,7 @@ const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({
58202
58537
  role: "slider",
58203
58538
  tabindex: isDisabled.value ? void 0 : 0,
58204
58539
  "aria-label": thumbLabel(index),
58540
+ "aria-labelledby": singleLabelledBy.value,
58205
58541
  "aria-valuemin": index === 1 && _ctx.range ? values.value[0] : bounds.value.min,
58206
58542
  "aria-valuemax": index === 0 ? values.value[1] : bounds.value.max,
58207
58543
  "aria-valuenow": values.value[index],
@@ -58231,8 +58567,8 @@ const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({
58231
58567
  id: `${tooltipId}-${index}`,
58232
58568
  class: vue.normalizeClass(vue.unref(n2)("tooltip")),
58233
58569
  role: "tooltip"
58234
- }, vue.toDisplayString(format(values.value[index])), 11, _hoisted_2$9)) : vue.createCommentVNode("", true)
58235
- ], 46, _hoisted_1$k);
58570
+ }, vue.toDisplayString(format(values.value[index])), 11, _hoisted_3$4)) : vue.createCommentVNode("", true)
58571
+ ], 46, _hoisted_2$9);
58236
58572
  }), 128))
58237
58573
  ], 34),
58238
58574
  _ctx.showInput ? (vue.openBlock(), vue.createBlock(_sfc_main$G, {
@@ -58246,12 +58582,14 @@ const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({
58246
58582
  readonly: vue.unref(mergedReadonly),
58247
58583
  error: vue.unref(mergedError),
58248
58584
  "aria-label": _ctx.ariaLabel,
58585
+ "aria-labelledby": singleLabelledBy.value,
58586
+ "aria-describedby": _ctx.$attrs["aria-describedby"],
58249
58587
  "aria-invalid": _ctx.$attrs["aria-invalid"],
58250
58588
  onChange: inputChange,
58251
58589
  onFocus: _cache[2] || (_cache[2] = ($event) => vue.unref(eventHandlers)?.onFocus?.()),
58252
58590
  onBlur: _cache[3] || (_cache[3] = ($event) => vue.unref(eventHandlers)?.onBlur?.())
58253
- }, null, 8, ["model-value", "min", "max", "step", "range", "disabled", "readonly", "error", "aria-label", "aria-invalid"])) : vue.createCommentVNode("", true)
58254
- ], 6);
58591
+ }, null, 8, ["model-value", "min", "max", "step", "range", "disabled", "readonly", "error", "aria-label", "aria-labelledby", "aria-describedby", "aria-invalid"])) : vue.createCommentVNode("", true)
58592
+ ], 16, _hoisted_1$k);
58255
58593
  };
58256
58594
  }
58257
58595
  });
@@ -58831,7 +59169,7 @@ const _sfc_main$D = /* @__PURE__ */ vue.defineComponent({
58831
59169
  const resize = () => menuRef.value?.resize();
58832
59170
  __expose({ open: open2, close: close2, resize });
58833
59171
  return (_ctx, _cache) => {
58834
- return vue.openBlock(), vue.createBlock(vue.unref(_sfc_main$34), {
59172
+ return vue.openBlock(), vue.createBlock(vue.unref(_sfc_main$2J), {
58835
59173
  class: vue.normalizeClass(vue.unref(n2)()),
58836
59174
  status: _ctx.status,
58837
59175
  size: _ctx.size,
@@ -59569,6 +59907,10 @@ const _sfc_main$A = /* @__PURE__ */ vue.defineComponent({
59569
59907
  const current = vue.computed(() => props2.modelValue === void 0 ? internal.value : props2.modelValue);
59570
59908
  const checked = vue.computed(() => current.value === props2.checkedValue);
59571
59909
  const pending = vue.ref(false);
59910
+ const editorPending = vue.inject(fieldEditorControlPending, void 0);
59911
+ vue.watch(pending, (value) => {
59912
+ if (editorPending) editorPending.value = value;
59913
+ }, { flush: "sync" });
59572
59914
  const busy = vue.computed(() => props2.loading || pending.value);
59573
59915
  const rippleKey = vue.ref(0);
59574
59916
  let active = true;
@@ -60958,6 +61300,19 @@ function forwardTableColumnSlot(slot) {
60958
61300
  };
60959
61301
  return { default: forward, _: 2 };
60960
61302
  }
61303
+ function firstStructuralNode(nodes) {
61304
+ if (Array.isArray(nodes)) {
61305
+ for (const node of nodes) {
61306
+ const result = firstStructuralNode(node);
61307
+ if (result) return result;
61308
+ }
61309
+ return void 0;
61310
+ }
61311
+ if (!vue.isVNode(nodes) || nodes.type === vue.Comment) return void 0;
61312
+ if (nodes.type === vue.Text && !String(nodes.children ?? "").trim()) return void 0;
61313
+ if (nodes.type === vue.Fragment && Array.isArray(nodes.children)) return firstStructuralNode(nodes.children);
61314
+ return nodes;
61315
+ }
60961
61316
  const {
60962
61317
  name: name$j
60963
61318
  } = createNamespace$1("thead");
@@ -60967,7 +61322,7 @@ const Thead = /* @__PURE__ */ vue.defineComponent({
60967
61322
  slots
60968
61323
  }) {
60969
61324
  return () => {
60970
- return vue.createVNode(slots.thead?.()[0] ?? "thead", null, {
61325
+ return vue.createVNode(firstStructuralNode(slots.thead?.()) ?? "thead", null, {
60971
61326
  default: slots.default
60972
61327
  });
60973
61328
  };
@@ -60982,7 +61337,7 @@ const Tbody = /* @__PURE__ */ vue.defineComponent({
60982
61337
  slots
60983
61338
  }) {
60984
61339
  return () => {
60985
- return vue.createVNode(slots.tbody?.()[0] ?? "tbody", null, {
61340
+ return vue.createVNode(firstStructuralNode(slots.tbody?.()) ?? "tbody", null, {
60986
61341
  default: slots.default
60987
61342
  });
60988
61343
  };
@@ -61020,10 +61375,10 @@ const Tr = /* @__PURE__ */ vue.defineComponent({
61020
61375
  [`${prefixCls2}-tr-checked`]: props2.checked
61021
61376
  }]);
61022
61377
  return () => {
61023
- return vue.createVNode(slots.tr?.({
61378
+ return vue.createVNode(firstStructuralNode(slots.tr?.({
61024
61379
  rowIndex: props2.rowIndex,
61025
61380
  record: props2.record?.raw
61026
- })[0] ?? "tr", {
61381
+ })) ?? "tr", {
61027
61382
  class: cls.value
61028
61383
  }, {
61029
61384
  default: () => {
@@ -61546,9 +61901,9 @@ const Th = /* @__PURE__ */ vue.defineComponent({
61546
61901
  const rowSpan = props2.column.rowSpan ?? 1;
61547
61902
  const resizeColumnName = typeof props2.column.title === "string" ? props2.column.title : props2.column.dataIndex;
61548
61903
  const translatedResizeLabel = t("table.resizeColumn", resizeColumnName);
61549
- const customHeader = props2.customHeader ?? slots.th?.({
61904
+ const customHeader = firstStructuralNode([props2.customHeader]) ?? firstStructuralNode(slots.th?.({
61550
61905
  column: props2.column
61551
- })[0];
61906
+ }));
61552
61907
  return vue.createVNode(customHeader ?? "th", {
61553
61908
  class: cls.value,
61554
61909
  style: style.value,
@@ -61796,11 +62151,11 @@ const Td = /* @__PURE__ */ vue.defineComponent({
61796
62151
  }, [renderContent2()])]);
61797
62152
  };
61798
62153
  return () => {
61799
- const customCell = slots.td?.({
62154
+ const customCell = firstStructuralNode(slots.td?.({
61800
62155
  record: props2.record?.raw,
61801
62156
  column: props2.column,
61802
62157
  rowIndex: props2.rowIndex ?? -1
61803
- })[0];
62158
+ }));
61804
62159
  const customHeaders = customCell?.props && Object.prototype.hasOwnProperty.call(customCell.props, "headers") && customCell.props.headers !== void 0 ? customCell.props.headers : props2.headers;
61805
62160
  return vue.createVNode(customCell ?? "td", {
61806
62161
  class: cls.value,
@@ -63634,9 +63989,10 @@ const _Table = /* @__PURE__ */ vue.defineComponent({
63634
63989
  const semanticId = `c-table-header-${vue.useId()}`;
63635
63990
  const visibleHeaderId = (row, index) => `${semanticId}-visible-${row}-${index}`;
63636
63991
  const visibleOperationId = (index) => `${semanticId}-visible-operation-${index}`;
63637
- const customHeaders = vue.computed(() => groupColumns.value.map((row) => row.map((column) => slots.th?.({
63992
+ const activeHeaderSlot = vue.shallowRef(slots.th);
63993
+ const customHeaders = vue.computed(() => groupColumns.value.map((row) => row.map((column) => firstStructuralNode(activeHeaderSlot.value?.({
63638
63994
  column
63639
- })?.[0])));
63995
+ })))));
63640
63996
  const explicitHeaderName = (value) => typeof value === "string" && value.trim() ? value : void 0;
63641
63997
  const semanticRows = (surface) => groupColumns.value.map((row, rowIndex) => [...rowIndex === 0 ? operations.value.map((_, index) => ({
63642
63998
  id: `${semanticId}-${surface}-operation-${index}`,
@@ -64252,13 +64608,27 @@ const _Table = /* @__PURE__ */ vue.defineComponent({
64252
64608
  }
64253
64609
  return Object.keys(result).length > 0 ? result : void 0;
64254
64610
  });
64611
+ const tableInstance = vue.getCurrentInstance();
64612
+ let slotSnapshot = [];
64613
+ const currentSlotSnapshot = () => {
64614
+ const incoming = tableInstance.vnode.children;
64615
+ const raw = incoming && !Array.isArray(incoming) && typeof incoming === "object" ? incoming : {};
64616
+ const next = Object.keys(raw).filter((key) => key !== "_" && key !== "$stable").sort().flatMap((key) => [key, raw[key]]);
64617
+ if (next.length !== slotSnapshot.length || next.some((value, index) => value !== slotSnapshot[index])) {
64618
+ slotSnapshot = next;
64619
+ activeHeaderSlot.value = slots.th;
64620
+ }
64621
+ return slotSnapshot;
64622
+ };
64255
64623
  const DeferredTable = /* @__PURE__ */ vue.defineComponent({
64256
64624
  props: {
64257
- rowSlotState: Number
64625
+ rowSlotState: Number,
64626
+ slotSnapshot: Array
64258
64627
  },
64259
64628
  setup: () => () => renderTable()
64260
64629
  });
64261
64630
  const render = () => {
64631
+ const snapshot = currentSlotSnapshot();
64262
64632
  if (slots.default) {
64263
64633
  let _slot;
64264
64634
  return vue.createVNode(ResizeObserver$1, {
@@ -64288,7 +64658,8 @@ const _Table = /* @__PURE__ */ vue.defineComponent({
64288
64658
  "aria-busy": loadingProps2.value.loading || void 0
64289
64659
  }, tableInteractionEvents), [children.value, vue.createVNode(_sfc_main$38, loadingProps2.value, {
64290
64660
  default: () => [props2.pagination !== false && (flattenData.value.length > 0 || sortedData.value.length > 0) && isPaginationTop.value && renderPaginationArea(), vue.createVNode(DeferredTable, {
64291
- "rowSlotState": (slots.tr ? 1 : 0) | (slots["expand-row"] ? 2 : 0)
64661
+ "rowSlotState": (slots.tr ? 1 : 0) | (slots["expand-row"] ? 2 : 0),
64662
+ "slotSnapshot": snapshot
64292
64663
  }, null), props2.pagination !== false && (flattenData.value.length > 0 || sortedData.value.length > 0) && !isPaginationTop.value && renderPaginationArea()]
64293
64664
  })])]
64294
64665
  });
@@ -66200,12 +66571,12 @@ const TableColumnHeaderAction = vue.defineComponent({
66200
66571
  };
66201
66572
  const options = () => {
66202
66573
  const items = [];
66203
- if (has("insert-left")) items.push(vue.h(_sfc_main$2I, { onClick: () => handleInsert("left") }, () => "向左插入列"));
66204
- if (has("insert-right")) items.push(vue.h(_sfc_main$2I, { onClick: () => handleInsert("right") }, () => "向右插入列"));
66574
+ if (has("insert-left")) items.push(vue.h(_sfc_main$2M, { onClick: () => handleInsert("left") }, () => "向左插入列"));
66575
+ if (has("insert-right")) items.push(vue.h(_sfc_main$2M, { onClick: () => handleInsert("right") }, () => "向右插入列"));
66205
66576
  if (has("freeze-left"))
66206
66577
  items.push(
66207
66578
  vue.h(
66208
- _sfc_main$2I,
66579
+ _sfc_main$2M,
66209
66580
  {
66210
66581
  disabled: props2.column?.fixed === "left",
66211
66582
  onClick: () => handleFreeze("left")
@@ -66216,7 +66587,7 @@ const TableColumnHeaderAction = vue.defineComponent({
66216
66587
  if (has("freeze-right"))
66217
66588
  items.push(
66218
66589
  vue.h(
66219
- _sfc_main$2I,
66590
+ _sfc_main$2M,
66220
66591
  {
66221
66592
  disabled: props2.column?.fixed === "right",
66222
66593
  onClick: () => handleFreeze("right")
@@ -66227,7 +66598,7 @@ const TableColumnHeaderAction = vue.defineComponent({
66227
66598
  if (has("unfreeze"))
66228
66599
  items.push(
66229
66600
  vue.h(
66230
- _sfc_main$2I,
66601
+ _sfc_main$2M,
66231
66602
  {
66232
66603
  disabled: !props2.column?.fixed,
66233
66604
  onClick: () => handleUnfreeze()
@@ -66235,8 +66606,8 @@ const TableColumnHeaderAction = vue.defineComponent({
66235
66606
  () => "取消冻结"
66236
66607
  )
66237
66608
  );
66238
- if (has("edit")) items.push(vue.h(_sfc_main$2I, { onClick: () => handleEdit() }, () => "编辑列"));
66239
- if (has("delete")) items.push(vue.h(_sfc_main$2I, { onClick: () => handleDelete() }, () => "删除列"));
66609
+ if (has("edit")) items.push(vue.h(_sfc_main$2M, { onClick: () => handleEdit() }, () => "编辑列"));
66610
+ if (has("delete")) items.push(vue.h(_sfc_main$2M, { onClick: () => handleDelete() }, () => "删除列"));
66240
66611
  return items;
66241
66612
  };
66242
66613
  return () => vue.h(
@@ -67770,7 +68141,7 @@ const _sfc_main$l = vue.defineComponent({
67770
68141
  name: name$8,
67771
68142
  components: {
67772
68143
  Panel: Panel$1,
67773
- Button
68144
+ Button: Button$1
67774
68145
  },
67775
68146
  inheritAttrs: false,
67776
68147
  props: {
@@ -71789,7 +72160,9 @@ const Panel = /* @__PURE__ */ vue.defineComponent({
71789
72160
  "aria-disabled": visibleNodeMap.value.get(key)?.disabled,
71790
72161
  "aria-expanded": status.isLeaf ? void 0 : status.expanded,
71791
72162
  "class": [`${prefixCls2}-option`, {
71792
- [`${prefixCls2}-option-active`]: key === activeKey.value
72163
+ [`${prefixCls2}-option-active`]: key === activeKey.value,
72164
+ [`${prefixCls2}-option-selected`]: status.selected || status.checked,
72165
+ [`${prefixCls2}-option-disabled`]: visibleNodeMap.value.get(key)?.disabled
71793
72166
  }],
71794
72167
  "onMouseenter": () => {
71795
72168
  if (visibleNodeMap.value.has(key) && !visibleNodeMap.value.get(key)?.disabled) activeKey.value = key;
@@ -71815,6 +72188,8 @@ const Panel = /* @__PURE__ */ vue.defineComponent({
71815
72188
  });
71816
72189
  const treeSelectProps = {
71817
72190
  ...fieldLoadingProps,
72191
+ /** 弹出编辑是否需要确认;未设置时单选即提交,多选保留确认。 */
72192
+ needConfirm: { type: Boolean, default: void 0 },
71818
72193
  openTriggerTarget: openTriggerTargetProp,
71819
72194
  /** 内置字段匹配是否区分大小写。 */
71820
72195
  caseSensitive: { type: Boolean, default: false },
@@ -72088,9 +72463,9 @@ const _sfc_main$7 = vue.defineComponent({
72088
72463
  name: createNamespace$1("tree-select").name,
72089
72464
  components: {
72090
72465
  Input,
72091
- SelectedOptions: _sfc_main$2F,
72466
+ SelectedOptions: _sfc_main$2I,
72092
72467
  Trigger,
72093
- SelectionField: _sfc_main$2A,
72468
+ SelectionField: _sfc_main$2D,
72094
72469
  Panel,
72095
72470
  Empty: Empty$1,
72096
72471
  Loading: _sfc_main$38
@@ -72371,7 +72746,7 @@ const _sfc_main$7 = vue.defineComponent({
72371
72746
  searchEnabled,
72372
72747
  texts,
72373
72748
  Trigger,
72374
- SelectedOptions: _sfc_main$2F,
72749
+ SelectedOptions: _sfc_main$2I,
72375
72750
  Input,
72376
72751
  EditorContent: vue.defineComponent({
72377
72752
  name: createNamespace$1("tree-select-editor-content").name,
@@ -72663,9 +73038,10 @@ function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
72663
73038
  }
72664
73039
  const Base$1 = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$3]]);
72665
73040
  const _TreeSelect = withFieldPresentation(Base$1, {
73041
+ selectionConfirmation: "update",
72666
73042
  pauseSelectionWhileLoading: true,
72667
73043
  editor: ({ props: props2, attrs, value, update, emit, slots, disabled, readonly }) => vue.h(
72668
- _sfc_main$30,
73044
+ _sfc_main$31,
72669
73045
  { kind: "tree-select" },
72670
73046
  () => vue.h(
72671
73047
  Base$1,
@@ -74079,10 +74455,13 @@ function useFilePicker(options) {
74079
74455
  function useUploadQueue(options) {
74080
74456
  const inner = vue.ref((options.defaultValue?.() ?? []).map((file) => ({ ...file })));
74081
74457
  const fileList = vue.computed(() => options.modelValue?.() ?? inner.value);
74458
+ let revision = 0;
74082
74459
  let pending;
74083
74460
  let pendingBase;
74084
74461
  const mutationList = () => pending && fileList.value === pendingBase ? pending : fileList.value;
74085
74462
  function commit(next, changed) {
74463
+ const currentRevision = ++revision;
74464
+ const startedActive = options.isActive?.() ?? true;
74086
74465
  pendingBase = fileList.value;
74087
74466
  pending = next;
74088
74467
  if (options.modelValue?.() === void 0) inner.value = next;
@@ -74093,7 +74472,7 @@ function useUploadQueue(options) {
74093
74472
  }
74094
74473
  });
74095
74474
  options.onUpdateModelValue?.(next);
74096
- options.onChange?.(next, changed);
74475
+ if (revision === currentRevision && (!startedActive || (options.isActive?.() ?? true))) options.onChange?.(next, changed);
74097
74476
  }
74098
74477
  function append(files) {
74099
74478
  if (files.length) commit([...mutationList(), ...files], files[0]);
@@ -74132,6 +74511,11 @@ function useUploadQueue(options) {
74132
74511
  }
74133
74512
  function reset() {
74134
74513
  if (fileList.value.length) commit([]);
74514
+ else {
74515
+ revision++;
74516
+ pending = void 0;
74517
+ pendingBase = void 0;
74518
+ }
74135
74519
  }
74136
74520
  return {
74137
74521
  fileList,
@@ -74146,6 +74530,7 @@ function useUploadQueue(options) {
74146
74530
  }
74147
74531
  function useUploader(options) {
74148
74532
  const feedback = usePendingFeedback();
74533
+ const preparation = usePendingFeedback();
74149
74534
  let active = true;
74150
74535
  let inactive = false;
74151
74536
  let generation = 0;
@@ -74163,7 +74548,8 @@ function useUploader(options) {
74163
74548
  modelValue: options.modelValue,
74164
74549
  defaultValue: options.defaultValue,
74165
74550
  onChange: options.onChange,
74166
- onUpdateModelValue: options.onUpdateModelValue
74551
+ onUpdateModelValue: options.onUpdateModelValue,
74552
+ isActive: () => active && !inactive
74167
74553
  });
74168
74554
  const replacementTarget = vue.ref();
74169
74555
  const metadataVersion = vue.ref(0);
@@ -74301,8 +74687,8 @@ function useUploader(options) {
74301
74687
  }
74302
74688
  function enqueue(files, rejected, previous) {
74303
74689
  const epoch = generation;
74304
- adding = adding.then(() => prepareFiles(files, rejected, epoch, previous)).catch(() => {
74305
- });
74690
+ adding = preparation.track(() => adding.then(() => prepareFiles(files, rejected, epoch, previous)).catch(() => {
74691
+ }));
74306
74692
  return adding;
74307
74693
  }
74308
74694
  async function prepareFiles(files, initialRejected, epoch, previous) {
@@ -74314,7 +74700,9 @@ function useUploader(options) {
74314
74700
  candidates = await feedback.track(() => options.beforeAdd(files));
74315
74701
  for (const file of files) if (!candidates.includes(file)) rejected.push({ file, reason: "before-add" });
74316
74702
  } catch {
74317
- reject([...rejected, ...files.map((file) => ({ file, reason: "before-add" }))]);
74703
+ if (valid(epoch)) {
74704
+ reject([...rejected, ...files.map((file) => ({ file, reason: "before-add" }))]);
74705
+ }
74318
74706
  return;
74319
74707
  }
74320
74708
  }
@@ -74385,7 +74773,15 @@ function useUploader(options) {
74385
74773
  return;
74386
74774
  }
74387
74775
  reject(rejected);
74776
+ if (!valid(epoch)) {
74777
+ items.forEach((item) => release(item.uid));
74778
+ return;
74779
+ }
74388
74780
  if (rejected.some((file) => file.reason === "max-files")) options.onExceed?.(candidates, queue.fileList.value);
74781
+ if (!valid(epoch)) {
74782
+ items.forEach((item) => release(item.uid));
74783
+ return;
74784
+ }
74389
74785
  if (!items.length) return;
74390
74786
  if (previous) {
74391
74787
  if (!sameTarget(previous)) {
@@ -74405,9 +74801,13 @@ function useUploader(options) {
74405
74801
  items.forEach((file) => pendingAuto.add(file.uid));
74406
74802
  if (previous) {
74407
74803
  queue.replace(previous, items[0]);
74804
+ if (!valid(epoch)) return;
74408
74805
  options.onReplace?.(items[0], previous);
74409
74806
  } else queue.append(items);
74410
- items.forEach((file) => options.onRead?.(vue.reactive(file)));
74807
+ for (const file of items) {
74808
+ if (!valid(epoch)) return;
74809
+ options.onRead?.(vue.reactive(file));
74810
+ }
74411
74811
  await vue.nextTick();
74412
74812
  }
74413
74813
  async function submit(file) {
@@ -74417,6 +74817,7 @@ function useUploader(options) {
74417
74817
  }
74418
74818
  async function uploadFile(file) {
74419
74819
  if (attempts.has(file.uid)) return;
74820
+ const epoch = generation;
74420
74821
  const attempt = {};
74421
74822
  attempts.set(file.uid, attempt);
74422
74823
  const current = () => active && !inactive && attempts.get(file.uid) === attempt && queue.fileList.value.some(
@@ -74467,7 +74868,7 @@ function useUploader(options) {
74467
74868
  status: changed.status,
74468
74869
  percent: changed.percent
74469
74870
  });
74470
- options.onProgress?.(changed, event);
74871
+ if (valid(epoch) && current()) options.onProgress?.(changed, event);
74471
74872
  };
74472
74873
  const handleSuccess = (response) => {
74473
74874
  if (!current()) return;
@@ -74483,7 +74884,7 @@ function useUploader(options) {
74483
74884
  percent: changed.percent,
74484
74885
  response
74485
74886
  });
74486
- options.onSuccess?.(changed);
74887
+ if (valid(epoch)) options.onSuccess?.(changed);
74487
74888
  };
74488
74889
  const handleError = (error) => {
74489
74890
  if (!current()) return;
@@ -74499,7 +74900,7 @@ function useUploader(options) {
74499
74900
  percent: changed.percent,
74500
74901
  error
74501
74902
  });
74502
- options.onError?.(changed);
74903
+ if (valid(epoch)) options.onError?.(changed);
74503
74904
  };
74504
74905
  const requestOptions = {
74505
74906
  action: options.action?.(),
@@ -74529,7 +74930,7 @@ function useUploader(options) {
74529
74930
  attempts.delete(file.uid);
74530
74931
  const changed = { ...item, status: "error", percent: 0, error };
74531
74932
  queue.patch(file.uid, changed);
74532
- options.onError?.(changed);
74933
+ if (valid(epoch)) options.onError?.(changed);
74533
74934
  }
74534
74935
  }
74535
74936
  function abort(file) {
@@ -74558,7 +74959,7 @@ function useUploader(options) {
74558
74959
  cancelAttempt(file.uid);
74559
74960
  pendingAuto.delete(file.uid);
74560
74961
  queue.remove(file);
74561
- options.onRemove?.(file);
74962
+ if (valid(epoch)) options.onRemove?.(file);
74562
74963
  } catch {
74563
74964
  } finally {
74564
74965
  if (removals.get(file.uid) === token) removals.delete(file.uid);
@@ -74581,8 +74982,9 @@ function useUploader(options) {
74581
74982
  });
74582
74983
  }
74583
74984
  function reset() {
74584
- feedback.cancel();
74585
74985
  if (disabled.value) return;
74986
+ feedback.cancel();
74987
+ preparation.cancel();
74586
74988
  generation++;
74587
74989
  replacementTarget.value = void 0;
74588
74990
  adding = Promise.resolve();
@@ -74623,6 +75025,8 @@ function useUploader(options) {
74623
75025
  });
74624
75026
  return {
74625
75027
  guardPending: feedback.pending,
75028
+ /** @internal Coordinates deferred field confirmation with file preparation. */
75029
+ editorPending: vue.computed(() => feedback.pending.value || preparation.pending.value),
74626
75030
  fileList: queue.fileList,
74627
75031
  maxReached,
74628
75032
  disabled,
@@ -74975,6 +75379,13 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
74975
75379
  }
74976
75380
  }
74977
75381
  });
75382
+ const editorPending = vue.inject(fieldEditorControlPending, void 0);
75383
+ vue.watch(uploader.editorPending, (value) => {
75384
+ if (editorPending) editorPending.value = value;
75385
+ }, { flush: "sync" });
75386
+ vue.onBeforeUnmount(() => {
75387
+ if (editorPending) editorPending.value = false;
75388
+ });
74978
75389
  const {
74979
75390
  fileList,
74980
75391
  maxReached,
@@ -75090,7 +75501,7 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
75090
75501
  class: vue.normalizeClass(vue.unref(n2)("input")),
75091
75502
  type: "file",
75092
75503
  accept: _ctx.accept,
75093
- capture: _ctx.capture,
75504
+ capture: _ctx.capture === false ? void 0 : _ctx.capture === true ? "" : _ctx.capture,
75094
75505
  multiple: !vue.unref(replacementTarget) && (_ctx.multiple || _ctx.directory),
75095
75506
  disabled: vue.unref(disabledState),
75096
75507
  webkitdirectory: !vue.unref(replacementTarget) && _ctx.directory || void 0,
@@ -76162,13 +76573,13 @@ const install = (app, options) => {
76162
76573
  const CedarVue = {
76163
76574
  ...components,
76164
76575
  AnchorLink,
76165
- AvatarGroup: _sfc_main$2M,
76576
+ AvatarGroup: _sfc_main$2Q,
76166
76577
  BreadcrumbItem,
76167
- ButtonGroup: _sfc_main$34,
76168
- CarouselItem: _sfc_main$2t,
76578
+ ButtonGroup: _sfc_main$2J,
76579
+ CarouselItem: _sfc_main$2w,
76169
76580
  CascaderPanel,
76170
76581
  CheckboxGroup,
76171
- CollapseItem: _sfc_main$2j,
76582
+ CollapseItem: _sfc_main$2m,
76172
76583
  DatePicker,
76173
76584
  DateRangePicker,
76174
76585
  DescriptionsItem,
@@ -76179,16 +76590,16 @@ const CedarVue = {
76179
76590
  ImagePreviewAction,
76180
76591
  ImagePreviewFn: previewImage,
76181
76592
  ImagePreviewGroup,
76182
- InputGroup: _sfc_main$2X,
76183
- InputGroupLabel: _sfc_main$2W,
76184
- InputPassword: _sfc_main$2V,
76593
+ InputGroup: _sfc_main$2l,
76594
+ InputGroupLabel: _sfc_main$2k,
76595
+ InputPassword: _sfc_main$2j,
76185
76596
  LayoutContent,
76186
76597
  LayoutFooter,
76187
76598
  LayoutHeader,
76188
76599
  LayoutSider,
76189
76600
  ListItem: _sfc_main$1i,
76190
76601
  MapSelect,
76191
- MenuOption: _sfc_main$2I,
76602
+ MenuOption: _sfc_main$2M,
76192
76603
  NavMenuItem,
76193
76604
  Optgroup,
76194
76605
  Option,
@@ -76562,25 +76973,25 @@ exports.Anchor = Anchor;
76562
76973
  exports.AnchorLink = AnchorLink;
76563
76974
  exports.AutoComplete = AutoComplete;
76564
76975
  exports.Avatar = Avatar;
76565
- exports.AvatarGroup = _sfc_main$2M;
76976
+ exports.AvatarGroup = _sfc_main$2Q;
76566
76977
  exports.BackTop = BackTop;
76567
76978
  exports.Badge = Badge;
76568
76979
  exports.Breadcrumb = _Breadcrumb;
76569
76980
  exports.BreadcrumbItem = BreadcrumbItem;
76570
76981
  exports.Button = Button;
76571
- exports.ButtonGroup = _sfc_main$34;
76982
+ exports.ButtonGroup = _sfc_main$2J;
76572
76983
  exports.COLUMN_MANAGER_STATE_VERSION = COLUMN_MANAGER_STATE_VERSION;
76573
76984
  exports.Calendar = Calendar;
76574
76985
  exports.Card = Card;
76575
76986
  exports.Carousel = Carousel;
76576
- exports.CarouselItem = _sfc_main$2t;
76987
+ exports.CarouselItem = _sfc_main$2w;
76577
76988
  exports.Cascader = Cascader;
76578
76989
  exports.CascaderPanel = CascaderPanel;
76579
76990
  exports.Checkbox = Checkbox;
76580
76991
  exports.CheckboxGroup = CheckboxGroup;
76581
76992
  exports.Col = Col;
76582
76993
  exports.Collapse = Collapse;
76583
- exports.CollapseItem = _sfc_main$2j;
76994
+ exports.CollapseItem = _sfc_main$2m;
76584
76995
  exports.Color = Color;
76585
76996
  exports.ColorPicker = ColorPicker;
76586
76997
  exports.ConfigProvider = ConfigProvider;
@@ -76614,10 +77025,10 @@ exports.ImagePreviewFn = previewImage;
76614
77025
  exports.ImagePreviewGroup = ImagePreviewGroup;
76615
77026
  exports.InfiniteScroll = InfiniteScroll;
76616
77027
  exports.Input = Input;
76617
- exports.InputGroup = _sfc_main$2X;
76618
- exports.InputGroupLabel = _sfc_main$2W;
77028
+ exports.InputGroup = _sfc_main$2l;
77029
+ exports.InputGroupLabel = _sfc_main$2k;
76619
77030
  exports.InputNumber = InputNumber;
76620
- exports.InputPassword = _sfc_main$2V;
77031
+ exports.InputPassword = _sfc_main$2j;
76621
77032
  exports.InputTag = InputTag;
76622
77033
  exports.Layout = Layout;
76623
77034
  exports.LayoutContent = LayoutContent;
@@ -76632,7 +77043,7 @@ exports.Map = Map$1;
76632
77043
  exports.MapSelect = MapSelect;
76633
77044
  exports.Mention = Mention;
76634
77045
  exports.Menu = Menu;
76635
- exports.MenuOption = _sfc_main$2I;
77046
+ exports.MenuOption = _sfc_main$2M;
76636
77047
  exports.Message = Message;
76637
77048
  exports.NavMenu = NavMenu;
76638
77049
  exports.NavMenuItem = NavMenuItem;