@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
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, computed, ref, shallowRef, watch, nextTick, onBeforeUnmount, onDeactivated, onActivated, withDirectives, openBlock, createElementBlock, normalizeStyle, unref, normalizeClass, createElementVNode, renderSlot, createCommentVNode, toDisplayString, createBlock, createVNode, withModifiers, withCtx } from "vue";
2
2
  import { IconClose } from "@cedar-design/icons-vue";
3
3
  import { getRect, doubleRaf } from "@cedar-design/shared-vue";
4
- import { Button } from "../button/index.mjs";
4
+ import Button from "../button/base.mjs";
5
5
  import { useLock } from "../context/lock.mjs";
6
6
  import { useZIndex } from "../context/zIndex.mjs";
7
7
  import { Icon } from "../icon/index.mjs";
@@ -60,25 +60,25 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
60
60
  let stopInactiveFocusTracking;
61
61
  function trackInactiveFocus() {
62
62
  stopInactiveFocusTracking?.();
63
- const document = card.value?.ownerDocument;
64
- if (!document) return;
63
+ const document2 = card.value?.ownerDocument;
64
+ if (!document2) return;
65
65
  const remember = (target) => {
66
66
  const element = target;
67
- if (element && typeof element.focus === "function" && !card.value?.contains(element) && element !== document.body && element !== document.documentElement) {
67
+ if (element && typeof element.focus === "function" && !card.value?.contains(element) && element !== document2.body && element !== document2.documentElement) {
68
68
  returnFocus = element;
69
69
  }
70
70
  };
71
- remember(document.activeElement);
71
+ remember(document2.activeElement);
72
72
  const onFocus = (event) => remember(event.target);
73
- document.addEventListener("focusin", onFocus, true);
74
- stopInactiveFocusTracking = () => document.removeEventListener("focusin", onFocus, true);
73
+ document2.addEventListener("focusin", onFocus, true);
74
+ stopInactiveFocusTracking = () => document2.removeEventListener("focusin", onFocus, true);
75
75
  }
76
76
  function updateReturnFocus(open) {
77
- const document = card.value?.ownerDocument;
78
- if (!document) return;
79
- const focused = document.activeElement;
77
+ const document2 = card.value?.ownerDocument;
78
+ if (!document2) return;
79
+ const focused = document2.activeElement;
80
80
  if (open) {
81
- returnFocus = focused && focused !== document.body && focused !== document.documentElement ? focused : null;
81
+ returnFocus = focused && focused !== document2.body && focused !== document2.documentElement ? focused : null;
82
82
  return;
83
83
  }
84
84
  const target = returnFocus;
@@ -92,6 +92,29 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
92
92
  const { onStackTop } = usePopupLayer(wantsFloating, zIndex, () => card.value?.ownerDocument, true);
93
93
  const available = () => active && !disposed;
94
94
  let openingWaiting = false;
95
+ let cancelOpeningFrames;
96
+ function waitForOwnerFrames(view) {
97
+ cancelOpeningFrames?.();
98
+ return new Promise((resolve) => {
99
+ let handle;
100
+ let settled = false;
101
+ const finish = (completed) => {
102
+ if (settled) return;
103
+ settled = true;
104
+ if (cancelOpeningFrames === cancel) cancelOpeningFrames = void 0;
105
+ resolve(completed);
106
+ };
107
+ const cancel = () => {
108
+ if (handle !== void 0) view.cancelAnimationFrame?.(handle);
109
+ finish(false);
110
+ };
111
+ cancelOpeningFrames = cancel;
112
+ handle = view.requestAnimationFrame(() => {
113
+ if (settled) return;
114
+ handle = view.requestAnimationFrame(() => finish(true));
115
+ });
116
+ });
117
+ }
95
118
  let reducedMotion = false;
96
119
  let stopMotionTracking;
97
120
  function trackMotion(element) {
@@ -127,6 +150,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
127
150
  wantsFloating,
128
151
  (value) => {
129
152
  const token = ++generation;
153
+ cancelOpeningFrames?.();
130
154
  if (!active) {
131
155
  if (!disposed && value) trackInactiveFocus();
132
156
  else {
@@ -157,6 +181,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
157
181
  return;
158
182
  }
159
183
  const token = ++generation;
184
+ cancelOpeningFrames?.();
160
185
  const element = card.value;
161
186
  let consumed = false;
162
187
  clearTimeout(floater.value ?? void 0);
@@ -183,7 +208,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
183
208
  dropdownFloaterTop = floaterTop.value;
184
209
  dropdownFloaterLeft = floaterLeft.value;
185
210
  showFloatingButtons.value = true;
186
- if (!reducedMotion) await doubleRaf();
211
+ if (!reducedMotion) {
212
+ const view = element.ownerDocument.defaultView;
213
+ if (view && typeof document !== "undefined" && element.ownerDocument !== document && typeof view.requestAnimationFrame === "function") {
214
+ if (!await waitForOwnerFrames(view)) return;
215
+ } else {
216
+ await doubleRaf();
217
+ }
218
+ }
187
219
  if (!current(token, element) || !wantsFloating()) {
188
220
  return;
189
221
  }
@@ -205,6 +237,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
205
237
  return;
206
238
  }
207
239
  const token = ++generation;
240
+ cancelOpeningFrames?.();
208
241
  const element = card.value;
209
242
  let consumed = false;
210
243
  clearTimeout(dropper);
@@ -293,6 +326,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
293
326
  }
294
327
  });
295
328
  function cleanup() {
329
+ cancelOpeningFrames?.();
296
330
  openingWaiting = false;
297
331
  active = false;
298
332
  generation++;
@@ -28,7 +28,7 @@
28
28
  --c-carousel-card-opacity: 0.6;
29
29
  --c-carousel-focus-width: 2px;
30
30
  --c-carousel-focus-offset: 2px;
31
- --c-carousel-focus-color: var(--c-sys-color-content-brand);
31
+ --c-carousel-focus-color: var(--c-sys-color-action-primary);
32
32
  }
33
33
  .c-carousel {
34
34
  position: relative;
@@ -4,7 +4,7 @@ import { isolateEditorForm } from "../_components/field-presentation/form-bridge
4
4
  import { provideFormErrorDescriptionBoundary } from "../form/error-description.mjs";
5
5
  import { selectionEditorSurface } from "../_components/selected-options/context.mjs";
6
6
  import _sfc_main$1 from "../_components/selected-options/SelectedOptions.vue.mjs";
7
- import { Input } from "../input/index.mjs";
7
+ import SearchInput from "../input/base.mjs";
8
8
  import { createNamespace } from "../_utils/global-config.mjs";
9
9
  import BaseCascaderPanel from "./base-cascader-panel.mjs";
10
10
  import CascaderSearchPanel from "./cascader-search-panel.mjs";
@@ -44,7 +44,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
44
44
  onClear: __props.controller.clearSelection
45
45
  }, {
46
46
  default: withCtx(() => [
47
- __props.searchable ? (openBlock(), createBlock(unref(Input), {
47
+ __props.searchable ? (openBlock(), createBlock(unref(SearchInput), {
48
48
  key: 0,
49
49
  "model-value": __props.controller.computedInputValue,
50
50
  "edit-mode": "direct",
@@ -2,10 +2,12 @@ import { defineComponent, inject, useId, ref, computed, onDeactivated, onBeforeU
2
2
  import { IconCheck, IconLoading, IconRight } from "@cedar-design/icons-vue";
3
3
  import { isolateEditorForm } from "../_components/field-presentation/form-bridge.mjs";
4
4
  import { isFunction } from "../_utils/is.mjs";
5
- import { Checkbox } from "../checkbox/index.mjs";
5
+ import _Checkbox from "../checkbox/base.mjs";
6
6
  import { getPrefixCls, createNamespace } from "../_utils/global-config.mjs";
7
7
  import { cascaderInjectionKey } from "./context.mjs";
8
8
  import { getCheckedStatus, getOptionLabel } from "./utils.mjs";
9
+ const INTERACTIVE_ROLES = /* @__PURE__ */ new Set(["button", "link", "checkbox", "radio", "switch", "textbox", "combobox", "menuitem", "menuitemcheckbox", "menuitemradio", "option", "treeitem", "gridcell", "slider", "spinbutton", "tab"]);
10
+ 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(" "));
9
11
  function ownsOptionClick(event) {
10
12
  if (event.defaultPrevented) return false;
11
13
  const boundary = event.currentTarget;
@@ -23,7 +25,10 @@ function ownsOptionClick(event) {
23
25
  if (item === boundary) break;
24
26
  const element = item;
25
27
  if (element?.nodeType !== 1 || typeof element.matches !== "function") continue;
26
- if (element.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;
28
+ const primaryRole = element.getAttribute("role")?.trim().split(/\s+/).find((role) => CONCRETE_ROLES.has(role));
29
+ if (primaryRole && INTERACTIVE_ROLES.has(primaryRole)) return false;
30
+ if (element.hasAttribute("tabindex") && element.tabIndex >= 0) return false;
31
+ if (element.matches('li[data-cascader-key], button, a[href], input, select, textarea, summary, audio[controls], video[controls], [contenteditable]:not([contenteditable="false"])')) return false;
27
32
  if (element.matches("label") && (element.htmlFor || element.querySelector("input, button, select, textarea"))) return false;
28
33
  }
29
34
  return true;
@@ -88,7 +93,9 @@ const CascaderOption = /* @__PURE__ */ defineComponent({
88
93
  },
89
94
  onMouseleave: (event) => {
90
95
  const element = event.currentTarget;
91
- const focused = element.ownerDocument.activeElement;
96
+ const nodeRoot = element.getRootNode();
97
+ const focusRoot = "activeElement" in nodeRoot ? nodeRoot : element.ownerDocument;
98
+ const focused = focusRoot.activeElement;
92
99
  let focusedOption = focused?.closest("[data-cascader-key]");
93
100
  const panelSelector = `.${getPrefixCls("cascader")}-panel, .${getPrefixCls("cascader")}-editor-panel`;
94
101
  const panel = element.closest(panelSelector);
@@ -169,7 +176,7 @@ const CascaderOption = /* @__PURE__ */ defineComponent({
169
176
  }, events), [props.multiple && createVNode("span", {
170
177
  "class": `${prefixCls}-checkbox`,
171
178
  "onClick": (event) => event.stopPropagation()
172
- }, [createVNode(Checkbox, {
179
+ }, [createVNode(_Checkbox, {
173
180
  "editMode": "direct",
174
181
  "uninjectGroupContext": true,
175
182
  "modelValue": Boolean(checkedStatus.value.checked),
@@ -181,9 +188,7 @@ const CascaderOption = /* @__PURE__ */ defineComponent({
181
188
  if (props.option.disabled || props.option.selectionDisabled) {
182
189
  return;
183
190
  }
184
- const task = handlePathChange(new Event("change"));
185
191
  cascaderCtx.onClickOption?.(props.option, Boolean(checked));
186
- return task;
187
192
  }
188
193
  }, null)]), createVNode("div", {
189
194
  "class": `${prefixCls}-label`
@@ -2,6 +2,7 @@ import { h } from "vue";
2
2
  import { optionValueText } from "../_components/field-presentation/option-labels.mjs";
3
3
  import _sfc_main from "./CascaderEditor.vue.mjs";
4
4
  const cascaderFieldAdapter = {
5
+ selectionConfirmation: "update",
5
6
  pauseSelectionWhileLoading: true,
6
7
  methods: ["focus", "blur", "refresh"],
7
8
  text: (value, props) => optionValueText(value, { ...props, showPathLabel: true }),
@@ -7,6 +7,8 @@ import { formControlVariants } from "../_utils/form-control.mjs";
7
7
  import { popupContainerProp } from "../_utils/popup-container.mjs";
8
8
  const cascaderProps = {
9
9
  ...fieldLoadingProps,
10
+ /** 弹出编辑是否需要确认;未设置时单选即提交,多选保留确认。 */
11
+ needConfirm: { type: Boolean, default: void 0 },
10
12
  openTriggerTarget: openTriggerTargetProp,
11
13
  /** 内置本地过滤是否区分大小写;自定义过滤函数优先。 */
12
14
  caseSensitive: { type: Boolean, default: false },
@@ -11,7 +11,7 @@
11
11
  --c-cascader-size-item-height: 36px;
12
12
  --c-cascader-font-item-size: var(--c-sys-font-size-md);
13
13
  --c-cascader-margin-item-icon-left: var(--c-sys-space-5);
14
- --c-cascader-item-check-color: var(--c-sys-color-content-primary);
14
+ --c-cascader-item-check-color: var(--c-sys-color-action-primary);
15
15
  --c-cascader-item-check-size: var(--c-sys-font-size-md);
16
16
  --c-cascader-item-text-color: var(--c-sys-color-content-primary);
17
17
  --c-cascader-item-icon-color: var(--c-sys-color-content-secondary);
@@ -19,11 +19,11 @@
19
19
  --c-cascader-padding-item-right: var(--c-sys-space-5);
20
20
  --c-cascader-size-item-icon: 12px;
21
21
  --c-cascader-item-text-color-hover: var(--c-cascader-item-text-color);
22
- --c-cascader-item-text-color-active: var(--c-cascader-item-text-color);
22
+ --c-cascader-item-text-color-active: var(--c-sys-color-action-primary);
23
23
  --c-cascader-item-text-color-disabled: var(--c-sys-color-content-disabled);
24
24
  --c-cascader-item-text-color-disabled-active: var(--c-sys-color-content-disabled);
25
- --c-cascader-item-bg-active: var(--c-color-fill-2);
26
- --c-cascader-item-bg-hover: var(--c-cascader-item-bg-active);
25
+ --c-cascader-item-bg-active: transparent;
26
+ --c-cascader-item-bg-hover: var(--c-color-fill-2);
27
27
  --c-cascader-item-bg-disabled: transparent;
28
28
  --c-cascader-item-bg-disabled-active: var(--c-color-fill-2);
29
29
  --c-cascader-checkbox-bg-hover: var(--c-color-fill-3);
@@ -222,17 +222,44 @@
222
222
  .c-cascader-search-option-disabled:hover .c-cascader-option-check {
223
223
  color: var(--c-cascader-item-text-color-disabled);
224
224
  }
225
- .c-cascader-option-active {
226
- color: var(--c-cascader-item-text-color-active);
227
- background-color: var(--c-cascader-item-bg-active);
225
+ .c-cascader-option-active,
226
+ .c-cascader-search-option-active {
227
+ color: var(--c-cascader-item-text-color-hover);
228
+ background-color: var(--c-cascader-item-bg-hover);
228
229
  transition: all var(--c-sys-motion-duration-standard) var(--c-sys-motion-easing-standard);
229
230
  }
230
- .c-cascader-option-active:hover {
231
+ .c-cascader-option-selected,
232
+ .c-cascader-search-option-selected {
231
233
  color: var(--c-cascader-item-text-color-active);
232
234
  background-color: var(--c-cascader-item-bg-active);
233
235
  }
236
+ .c-cascader-option-selected:hover,
237
+ .c-cascader-search-option-selected:hover,
238
+ .c-cascader-option-selected.c-cascader-option-active,
239
+ .c-cascader-search-option-selected.c-cascader-option-active,
240
+ .c-cascader-option-selected.c-cascader-search-option-active,
241
+ .c-cascader-search-option-selected.c-cascader-search-option-active,
242
+ .c-cascader-option-selected.c-cascader-search-option-hover,
243
+ .c-cascader-search-option-selected.c-cascader-search-option-hover {
244
+ color: var(--c-cascader-item-text-color-active);
245
+ background-color: var(--c-cascader-item-bg-hover);
246
+ }
234
247
  .c-cascader-option-active.c-cascader-option-disabled,
235
- .c-cascader-option-active.c-cascader-option-disabled:hover {
248
+ .c-cascader-option-active.c-cascader-search-option-disabled,
249
+ .c-cascader-search-option-active.c-cascader-option-disabled,
250
+ .c-cascader-search-option-active.c-cascader-search-option-disabled,
251
+ .c-cascader-option-active.c-cascader-option-disabled:hover,
252
+ .c-cascader-option-active.c-cascader-search-option-disabled:hover,
253
+ .c-cascader-search-option-active.c-cascader-option-disabled:hover,
254
+ .c-cascader-search-option-active.c-cascader-search-option-disabled:hover,
255
+ .c-cascader-option-selected.c-cascader-option-disabled,
256
+ .c-cascader-option-selected.c-cascader-search-option-disabled,
257
+ .c-cascader-search-option-selected.c-cascader-option-disabled,
258
+ .c-cascader-search-option-selected.c-cascader-search-option-disabled,
259
+ .c-cascader-option-selected.c-cascader-option-disabled:hover,
260
+ .c-cascader-option-selected.c-cascader-search-option-disabled:hover,
261
+ .c-cascader-search-option-selected.c-cascader-option-disabled:hover,
262
+ .c-cascader-search-option-selected.c-cascader-search-option-disabled:hover {
236
263
  color: var(--c-cascader-item-text-color-disabled-active);
237
264
  background-color: var(--c-cascader-item-bg-disabled-active);
238
265
  }
@@ -6,9 +6,11 @@ function useCascaderFocus(activeKey) {
6
6
  onBeforeUnmount(() => cancelPendingFocus?.());
7
7
  return (root, option, originPanel, panelSelector) => {
8
8
  const key = activeKey.value;
9
- if (!key || !root.contains(option) || root.ownerDocument.activeElement !== option) return;
10
- cancelPendingFocus?.();
11
9
  const document = root.ownerDocument;
10
+ const nodeRoot = root.getRootNode();
11
+ const focusRoot = "activeElement" in nodeRoot ? nodeRoot : document;
12
+ if (!key || !root.contains(option) || focusRoot.activeElement !== option) return;
13
+ cancelPendingFocus?.();
12
14
  const view = document.defaultView;
13
15
  if (!view) return;
14
16
  let observer;
@@ -24,13 +26,14 @@ function useCascaderFocus(activeKey) {
24
26
  if (cancelPendingFocus === cleanup) cancelPendingFocus = void 0;
25
27
  };
26
28
  const onFocus = (next) => {
27
- if (next.target !== option) cleanup();
29
+ if (next.target !== option && !next.composedPath().includes(option)) cleanup();
28
30
  };
29
31
  const attempt = () => {
30
32
  if (done) return;
31
- const focused = document.activeElement;
32
- const lostToRemoval = !option.isConnected && (focused === document.body || focused === document.documentElement);
33
- if (!root.isConnected || activeKey.value !== key || focused !== option && !lostToRemoval) {
33
+ const focused = focusRoot.activeElement;
34
+ const docFocus = document.activeElement;
35
+ const lostToRemoval = !option.isConnected && (docFocus === document.body || docFocus === document.documentElement) && (focused === null || focused === document.body || focused === document.documentElement);
36
+ if (!root.isConnected || root.getRootNode() !== nodeRoot || activeKey.value !== key || focused !== option && !lostToRemoval) {
34
37
  cleanup();
35
38
  return;
36
39
  }