@capillarytech/blaze-ui 1.0.2 → 1.0.3-alpha.11

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 (243) hide show
  1. package/CapUnifiedSelect/CapUnifiedSelect.d.ts +153 -0
  2. package/CapUnifiedSelect/CapUnifiedSelect.d.ts.map +1 -0
  3. package/CapUnifiedSelect/constants.d.ts +59 -0
  4. package/CapUnifiedSelect/constants.d.ts.map +1 -0
  5. package/{dist/CapUnifiedSelect → CapUnifiedSelect}/index.js +1372 -67
  6. package/CapUnifiedSelect/index.js.map +1 -0
  7. package/CapUnifiedSelect/testData.d.ts +125 -0
  8. package/CapUnifiedSelect/testData.d.ts.map +1 -0
  9. package/{dist/index.js → index.js} +1327 -67
  10. package/index.js.map +1 -0
  11. package/package.json +101 -199
  12. package/{dist/utils → utils}/index.js.map +1 -1
  13. package/{dist/utils → utils}/styles.d.ts +1 -1
  14. package/{dist/utils → utils}/styles.d.ts.map +1 -1
  15. package/dist/CapUnifiedSelect/CapUnifiedSelect.d.ts +0 -52
  16. package/dist/CapUnifiedSelect/CapUnifiedSelect.d.ts.map +0 -1
  17. package/dist/CapUnifiedSelect/index.js.map +0 -1
  18. package/dist/index.js.map +0 -1
  19. /package/{dist/CapAlert → CapAlert}/CapAlert.d.ts +0 -0
  20. /package/{dist/CapAlert → CapAlert}/CapAlert.d.ts.map +0 -0
  21. /package/{dist/CapAlert → CapAlert}/CapAlert.test.d.ts +0 -0
  22. /package/{dist/CapAlert → CapAlert}/CapAlert.test.d.ts.map +0 -0
  23. /package/{dist/CapAlert → CapAlert}/index.d.ts +0 -0
  24. /package/{dist/CapAlert → CapAlert}/index.d.ts.map +0 -0
  25. /package/{dist/CapAlert → CapAlert}/index.js +0 -0
  26. /package/{dist/CapAlert → CapAlert}/index.js.map +0 -0
  27. /package/{dist/CapButton → CapButton}/CapButton.d.ts +0 -0
  28. /package/{dist/CapButton → CapButton}/CapButton.d.ts.map +0 -0
  29. /package/{dist/CapButton → CapButton}/CapButton.test.d.ts +0 -0
  30. /package/{dist/CapButton → CapButton}/CapButton.test.d.ts.map +0 -0
  31. /package/{dist/CapButton → CapButton}/index.d.ts +0 -0
  32. /package/{dist/CapButton → CapButton}/index.d.ts.map +0 -0
  33. /package/{dist/CapButton → CapButton}/index.js +0 -0
  34. /package/{dist/CapButton → CapButton}/index.js.map +0 -0
  35. /package/{dist/CapCard → CapCard}/CapCard.d.ts +0 -0
  36. /package/{dist/CapCard → CapCard}/CapCard.d.ts.map +0 -0
  37. /package/{dist/CapCard → CapCard}/CapCard.test.d.ts +0 -0
  38. /package/{dist/CapCard → CapCard}/CapCard.test.d.ts.map +0 -0
  39. /package/{dist/CapCard → CapCard}/index.d.ts +0 -0
  40. /package/{dist/CapCard → CapCard}/index.d.ts.map +0 -0
  41. /package/{dist/CapCard → CapCard}/index.js +0 -0
  42. /package/{dist/CapCard → CapCard}/index.js.map +0 -0
  43. /package/{dist/CapCheckbox → CapCheckbox}/CapCheckbox.d.ts +0 -0
  44. /package/{dist/CapCheckbox → CapCheckbox}/CapCheckbox.d.ts.map +0 -0
  45. /package/{dist/CapCheckbox → CapCheckbox}/CapCheckbox.test.d.ts +0 -0
  46. /package/{dist/CapCheckbox → CapCheckbox}/CapCheckbox.test.d.ts.map +0 -0
  47. /package/{dist/CapCheckbox → CapCheckbox}/index.d.ts +0 -0
  48. /package/{dist/CapCheckbox → CapCheckbox}/index.d.ts.map +0 -0
  49. /package/{dist/CapCheckbox → CapCheckbox}/index.js +0 -0
  50. /package/{dist/CapCheckbox → CapCheckbox}/index.js.map +0 -0
  51. /package/{dist/CapColumn → CapColumn}/CapColumn.d.ts +0 -0
  52. /package/{dist/CapColumn → CapColumn}/CapColumn.d.ts.map +0 -0
  53. /package/{dist/CapColumn → CapColumn}/CapColumn.test.d.ts +0 -0
  54. /package/{dist/CapColumn → CapColumn}/CapColumn.test.d.ts.map +0 -0
  55. /package/{dist/CapColumn → CapColumn}/index.d.ts +0 -0
  56. /package/{dist/CapColumn → CapColumn}/index.d.ts.map +0 -0
  57. /package/{dist/CapColumn → CapColumn}/index.js +0 -0
  58. /package/{dist/CapColumn → CapColumn}/index.js.map +0 -0
  59. /package/{dist/CapDivider → CapDivider}/CapDivider.d.ts +0 -0
  60. /package/{dist/CapDivider → CapDivider}/CapDivider.d.ts.map +0 -0
  61. /package/{dist/CapDivider → CapDivider}/CapDivider.test.d.ts +0 -0
  62. /package/{dist/CapDivider → CapDivider}/CapDivider.test.d.ts.map +0 -0
  63. /package/{dist/CapDivider → CapDivider}/index.d.ts +0 -0
  64. /package/{dist/CapDivider → CapDivider}/index.d.ts.map +0 -0
  65. /package/{dist/CapDivider → CapDivider}/index.js +0 -0
  66. /package/{dist/CapDivider → CapDivider}/index.js.map +0 -0
  67. /package/{dist/CapDropdown → CapDropdown}/CapDropdown.d.ts +0 -0
  68. /package/{dist/CapDropdown → CapDropdown}/CapDropdown.d.ts.map +0 -0
  69. /package/{dist/CapDropdown → CapDropdown}/CapDropdown.test.d.ts +0 -0
  70. /package/{dist/CapDropdown → CapDropdown}/CapDropdown.test.d.ts.map +0 -0
  71. /package/{dist/CapDropdown → CapDropdown}/index.d.ts +0 -0
  72. /package/{dist/CapDropdown → CapDropdown}/index.d.ts.map +0 -0
  73. /package/{dist/CapDropdown → CapDropdown}/index.js +0 -0
  74. /package/{dist/CapDropdown → CapDropdown}/index.js.map +0 -0
  75. /package/{dist/CapForm → CapForm}/CapForm.d.ts +0 -0
  76. /package/{dist/CapForm → CapForm}/CapForm.d.ts.map +0 -0
  77. /package/{dist/CapForm → CapForm}/CapForm.test.d.ts +0 -0
  78. /package/{dist/CapForm → CapForm}/CapForm.test.d.ts.map +0 -0
  79. /package/{dist/CapForm → CapForm}/index.d.ts +0 -0
  80. /package/{dist/CapForm → CapForm}/index.d.ts.map +0 -0
  81. /package/{dist/CapForm → CapForm}/index.js +0 -0
  82. /package/{dist/CapForm → CapForm}/index.js.map +0 -0
  83. /package/{dist/CapFormItem → CapFormItem}/CapFormItem.d.ts +0 -0
  84. /package/{dist/CapFormItem → CapFormItem}/CapFormItem.d.ts.map +0 -0
  85. /package/{dist/CapFormItem → CapFormItem}/CapFormItem.test.d.ts +0 -0
  86. /package/{dist/CapFormItem → CapFormItem}/CapFormItem.test.d.ts.map +0 -0
  87. /package/{dist/CapFormItem → CapFormItem}/index.d.ts +0 -0
  88. /package/{dist/CapFormItem → CapFormItem}/index.d.ts.map +0 -0
  89. /package/{dist/CapFormItem → CapFormItem}/index.js +0 -0
  90. /package/{dist/CapFormItem → CapFormItem}/index.js.map +0 -0
  91. /package/{dist/CapIcon → CapIcon}/CapIcon.d.ts +0 -0
  92. /package/{dist/CapIcon → CapIcon}/CapIcon.d.ts.map +0 -0
  93. /package/{dist/CapIcon → CapIcon}/CapIcon.test.d.ts +0 -0
  94. /package/{dist/CapIcon → CapIcon}/CapIcon.test.d.ts.map +0 -0
  95. /package/{dist/CapIcon → CapIcon}/index.d.ts +0 -0
  96. /package/{dist/CapIcon → CapIcon}/index.d.ts.map +0 -0
  97. /package/{dist/CapIcon → CapIcon}/index.js +0 -0
  98. /package/{dist/CapIcon → CapIcon}/index.js.map +0 -0
  99. /package/{dist/CapInput → CapInput}/CapInput.d.ts +0 -0
  100. /package/{dist/CapInput → CapInput}/CapInput.d.ts.map +0 -0
  101. /package/{dist/CapInput → CapInput}/CapInput.test.d.ts +0 -0
  102. /package/{dist/CapInput → CapInput}/CapInput.test.d.ts.map +0 -0
  103. /package/{dist/CapInput → CapInput}/Number.d.ts +0 -0
  104. /package/{dist/CapInput → CapInput}/Number.d.ts.map +0 -0
  105. /package/{dist/CapInput → CapInput}/Number.test.d.ts +0 -0
  106. /package/{dist/CapInput → CapInput}/Number.test.d.ts.map +0 -0
  107. /package/{dist/CapInput → CapInput}/Search.d.ts +0 -0
  108. /package/{dist/CapInput → CapInput}/Search.d.ts.map +0 -0
  109. /package/{dist/CapInput → CapInput}/Search.test.d.ts +0 -0
  110. /package/{dist/CapInput → CapInput}/Search.test.d.ts.map +0 -0
  111. /package/{dist/CapInput → CapInput}/TextArea.d.ts +0 -0
  112. /package/{dist/CapInput → CapInput}/TextArea.d.ts.map +0 -0
  113. /package/{dist/CapInput → CapInput}/TextArea.test.d.ts +0 -0
  114. /package/{dist/CapInput → CapInput}/TextArea.test.d.ts.map +0 -0
  115. /package/{dist/CapInput → CapInput}/index.d.ts +0 -0
  116. /package/{dist/CapInput → CapInput}/index.d.ts.map +0 -0
  117. /package/{dist/CapInput → CapInput}/index.js +0 -0
  118. /package/{dist/CapInput → CapInput}/index.js.map +0 -0
  119. /package/{dist/CapLabel → CapLabel}/CapLabel.d.ts +0 -0
  120. /package/{dist/CapLabel → CapLabel}/CapLabel.d.ts.map +0 -0
  121. /package/{dist/CapLabel → CapLabel}/CapLabel.test.d.ts +0 -0
  122. /package/{dist/CapLabel → CapLabel}/CapLabel.test.d.ts.map +0 -0
  123. /package/{dist/CapLabel → CapLabel}/index.d.ts +0 -0
  124. /package/{dist/CapLabel → CapLabel}/index.d.ts.map +0 -0
  125. /package/{dist/CapLabel → CapLabel}/index.js +0 -0
  126. /package/{dist/CapLabel → CapLabel}/index.js.map +0 -0
  127. /package/{dist/CapMenu → CapMenu}/CapMenu.d.ts +0 -0
  128. /package/{dist/CapMenu → CapMenu}/CapMenu.d.ts.map +0 -0
  129. /package/{dist/CapMenu → CapMenu}/CapMenu.test.d.ts +0 -0
  130. /package/{dist/CapMenu → CapMenu}/CapMenu.test.d.ts.map +0 -0
  131. /package/{dist/CapMenu → CapMenu}/index.d.ts +0 -0
  132. /package/{dist/CapMenu → CapMenu}/index.d.ts.map +0 -0
  133. /package/{dist/CapMenu → CapMenu}/index.js +0 -0
  134. /package/{dist/CapMenu → CapMenu}/index.js.map +0 -0
  135. /package/{dist/CapRadio → CapRadio}/CapRadio.d.ts +0 -0
  136. /package/{dist/CapRadio → CapRadio}/CapRadio.d.ts.map +0 -0
  137. /package/{dist/CapRadio → CapRadio}/CapRadio.test.d.ts +0 -0
  138. /package/{dist/CapRadio → CapRadio}/CapRadio.test.d.ts.map +0 -0
  139. /package/{dist/CapRadio → CapRadio}/index.d.ts +0 -0
  140. /package/{dist/CapRadio → CapRadio}/index.d.ts.map +0 -0
  141. /package/{dist/CapRadio → CapRadio}/index.js +0 -0
  142. /package/{dist/CapRadio → CapRadio}/index.js.map +0 -0
  143. /package/{dist/CapRow → CapRow}/CapRow.d.ts +0 -0
  144. /package/{dist/CapRow → CapRow}/CapRow.d.ts.map +0 -0
  145. /package/{dist/CapRow → CapRow}/CapRow.test.d.ts +0 -0
  146. /package/{dist/CapRow → CapRow}/CapRow.test.d.ts.map +0 -0
  147. /package/{dist/CapRow → CapRow}/index.d.ts +0 -0
  148. /package/{dist/CapRow → CapRow}/index.d.ts.map +0 -0
  149. /package/{dist/CapRow → CapRow}/index.js +0 -0
  150. /package/{dist/CapRow → CapRow}/index.js.map +0 -0
  151. /package/{dist/CapSkeleton → CapSkeleton}/CapSkeleton.d.ts +0 -0
  152. /package/{dist/CapSkeleton → CapSkeleton}/CapSkeleton.d.ts.map +0 -0
  153. /package/{dist/CapSkeleton → CapSkeleton}/CapSkeleton.test.d.ts +0 -0
  154. /package/{dist/CapSkeleton → CapSkeleton}/CapSkeleton.test.d.ts.map +0 -0
  155. /package/{dist/CapSkeleton → CapSkeleton}/index.d.ts +0 -0
  156. /package/{dist/CapSkeleton → CapSkeleton}/index.d.ts.map +0 -0
  157. /package/{dist/CapSkeleton → CapSkeleton}/index.js +0 -0
  158. /package/{dist/CapSkeleton → CapSkeleton}/index.js.map +0 -0
  159. /package/{dist/CapSpin → CapSpin}/CapSpin.d.ts +0 -0
  160. /package/{dist/CapSpin → CapSpin}/CapSpin.d.ts.map +0 -0
  161. /package/{dist/CapSpin → CapSpin}/CapSpin.test.d.ts +0 -0
  162. /package/{dist/CapSpin → CapSpin}/CapSpin.test.d.ts.map +0 -0
  163. /package/{dist/CapSpin → CapSpin}/index.d.ts +0 -0
  164. /package/{dist/CapSpin → CapSpin}/index.d.ts.map +0 -0
  165. /package/{dist/CapSpin → CapSpin}/index.js +0 -0
  166. /package/{dist/CapSpin → CapSpin}/index.js.map +0 -0
  167. /package/{dist/CapSwitch → CapSwitch}/CapSwitch.d.ts +0 -0
  168. /package/{dist/CapSwitch → CapSwitch}/CapSwitch.d.ts.map +0 -0
  169. /package/{dist/CapSwitch → CapSwitch}/CapSwitch.test.d.ts +0 -0
  170. /package/{dist/CapSwitch → CapSwitch}/CapSwitch.test.d.ts.map +0 -0
  171. /package/{dist/CapSwitch → CapSwitch}/index.d.ts +0 -0
  172. /package/{dist/CapSwitch → CapSwitch}/index.d.ts.map +0 -0
  173. /package/{dist/CapSwitch → CapSwitch}/index.js +0 -0
  174. /package/{dist/CapSwitch → CapSwitch}/index.js.map +0 -0
  175. /package/{dist/CapTab → CapTab}/CapTab.d.ts +0 -0
  176. /package/{dist/CapTab → CapTab}/CapTab.d.ts.map +0 -0
  177. /package/{dist/CapTab → CapTab}/CapTab.test.d.ts +0 -0
  178. /package/{dist/CapTab → CapTab}/CapTab.test.d.ts.map +0 -0
  179. /package/{dist/CapTab → CapTab}/index.d.ts +0 -0
  180. /package/{dist/CapTab → CapTab}/index.d.ts.map +0 -0
  181. /package/{dist/CapTab → CapTab}/index.js +0 -0
  182. /package/{dist/CapTab → CapTab}/index.js.map +0 -0
  183. /package/{dist/CapTable → CapTable}/CapTable.d.ts +0 -0
  184. /package/{dist/CapTable → CapTable}/CapTable.d.ts.map +0 -0
  185. /package/{dist/CapTable → CapTable}/CapTable.test.d.ts +0 -0
  186. /package/{dist/CapTable → CapTable}/CapTable.test.d.ts.map +0 -0
  187. /package/{dist/CapTable → CapTable}/index.d.ts +0 -0
  188. /package/{dist/CapTable → CapTable}/index.d.ts.map +0 -0
  189. /package/{dist/CapTable → CapTable}/index.js +0 -0
  190. /package/{dist/CapTable → CapTable}/index.js.map +0 -0
  191. /package/{dist/CapTable → CapTable}/loadable.d.ts +0 -0
  192. /package/{dist/CapTable → CapTable}/loadable.d.ts.map +0 -0
  193. /package/{dist/CapTable → CapTable}/loadable.test.d.ts +0 -0
  194. /package/{dist/CapTable → CapTable}/loadable.test.d.ts.map +0 -0
  195. /package/{dist/CapTestSelect → CapTestSelect}/CapTestSelect.d.ts +0 -0
  196. /package/{dist/CapTestSelect → CapTestSelect}/CapTestSelect.d.ts.map +0 -0
  197. /package/{dist/CapTestSelect → CapTestSelect}/CapTestSelect.test.d.ts +0 -0
  198. /package/{dist/CapTestSelect → CapTestSelect}/CapTestSelect.test.d.ts.map +0 -0
  199. /package/{dist/CapTestSelect → CapTestSelect}/index.d.ts +0 -0
  200. /package/{dist/CapTestSelect → CapTestSelect}/index.d.ts.map +0 -0
  201. /package/{dist/CapTestSelect → CapTestSelect}/index.js +0 -0
  202. /package/{dist/CapTestSelect → CapTestSelect}/index.js.map +0 -0
  203. /package/{dist/CapTooltip → CapTooltip}/CapTooltip.d.ts +0 -0
  204. /package/{dist/CapTooltip → CapTooltip}/CapTooltip.d.ts.map +0 -0
  205. /package/{dist/CapTooltip → CapTooltip}/CapTooltip.test.d.ts +0 -0
  206. /package/{dist/CapTooltip → CapTooltip}/CapTooltip.test.d.ts.map +0 -0
  207. /package/{dist/CapTooltip → CapTooltip}/index.d.ts +0 -0
  208. /package/{dist/CapTooltip → CapTooltip}/index.d.ts.map +0 -0
  209. /package/{dist/CapTooltip → CapTooltip}/index.js +0 -0
  210. /package/{dist/CapTooltip → CapTooltip}/index.js.map +0 -0
  211. /package/{dist/CapTooltipWithInfo → CapTooltipWithInfo}/CapTooltipWithInfo.d.ts +0 -0
  212. /package/{dist/CapTooltipWithInfo → CapTooltipWithInfo}/CapTooltipWithInfo.d.ts.map +0 -0
  213. /package/{dist/CapTooltipWithInfo → CapTooltipWithInfo}/CapTooltipWithInfo.test.d.ts +0 -0
  214. /package/{dist/CapTooltipWithInfo → CapTooltipWithInfo}/CapTooltipWithInfo.test.d.ts.map +0 -0
  215. /package/{dist/CapTooltipWithInfo → CapTooltipWithInfo}/index.d.ts +0 -0
  216. /package/{dist/CapTooltipWithInfo → CapTooltipWithInfo}/index.d.ts.map +0 -0
  217. /package/{dist/CapTooltipWithInfo → CapTooltipWithInfo}/index.js +0 -0
  218. /package/{dist/CapTooltipWithInfo → CapTooltipWithInfo}/index.js.map +0 -0
  219. /package/{dist/CapUnifiedSelect → CapUnifiedSelect}/CapUnifiedSelect.test.d.ts +0 -0
  220. /package/{dist/CapUnifiedSelect → CapUnifiedSelect}/CapUnifiedSelect.test.d.ts.map +0 -0
  221. /package/{dist/CapUnifiedSelect → CapUnifiedSelect}/index.d.ts +0 -0
  222. /package/{dist/CapUnifiedSelect → CapUnifiedSelect}/index.d.ts.map +0 -0
  223. /package/{dist/CapUnifiedSelect → CapUnifiedSelect}/messages.d.ts +0 -0
  224. /package/{dist/CapUnifiedSelect → CapUnifiedSelect}/messages.d.ts.map +0 -0
  225. /package/{dist/LocaleHoc → LocaleHoc}/index.d.ts +0 -0
  226. /package/{dist/LocaleHoc → LocaleHoc}/index.d.ts.map +0 -0
  227. /package/{dist/LocaleHoc → LocaleHoc}/index.js +0 -0
  228. /package/{dist/LocaleHoc → LocaleHoc}/index.js.map +0 -0
  229. /package/{dist/LocaleHoc → LocaleHoc}/index.test.d.ts +0 -0
  230. /package/{dist/LocaleHoc → LocaleHoc}/index.test.d.ts.map +0 -0
  231. /package/{dist/assets → assets}/upload.svg +0 -0
  232. /package/{dist/index.d.ts → index.d.ts} +0 -0
  233. /package/{dist/index.d.ts.map → index.d.ts.map} +0 -0
  234. /package/{dist/styled → styled}/variables.d.ts +0 -0
  235. /package/{dist/styled → styled}/variables.d.ts.map +0 -0
  236. /package/{dist/styled → styled}/variables.scss +0 -0
  237. /package/{dist/utils → utils}/fonts.d.ts +0 -0
  238. /package/{dist/utils → utils}/fonts.d.ts.map +0 -0
  239. /package/{dist/utils → utils}/fonts.test.d.ts +0 -0
  240. /package/{dist/utils → utils}/fonts.test.d.ts.map +0 -0
  241. /package/{dist/utils → utils}/index.d.ts +0 -0
  242. /package/{dist/utils → utils}/index.d.ts.map +0 -0
  243. /package/{dist/utils → utils}/index.js +0 -0
@@ -35,6 +35,20 @@ var f=__webpack_require__(9206),k=Symbol.for("react.element"),l=Symbol.for("reac
35
35
  function q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=""+g);void 0!==a.key&&(e=""+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;
36
36
 
37
37
 
38
+ /***/ }),
39
+
40
+ /***/ 1549:
41
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
42
+
43
+ "use strict";
44
+
45
+
46
+ exports.__esModule = true;
47
+ exports["default"] = void 0;
48
+ var _CapSpin = _interopRequireDefault(__webpack_require__(7579));
49
+ exports["default"] = _CapSpin.default;
50
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
51
+
38
52
  /***/ }),
39
53
 
40
54
  /***/ 1601:
@@ -756,21 +770,17 @@ var _react = _interopRequireWildcard(__webpack_require__(9206));
756
770
  var _CapIcon = _interopRequireDefault(__webpack_require__(8244));
757
771
  var _CapLabel = _interopRequireDefault(__webpack_require__(3737));
758
772
  var _CapRow = _interopRequireDefault(__webpack_require__(7375));
773
+ var _CapSpin = _interopRequireDefault(__webpack_require__(1549));
759
774
  var _CapTooltip = _interopRequireDefault(__webpack_require__(5636));
760
775
  var _CapTooltipWithInfo = _interopRequireDefault(__webpack_require__(2608));
776
+ var _constants = __webpack_require__(9788);
761
777
  var _styles = _interopRequireDefault(__webpack_require__(8263));
762
778
  var _jsxRuntime = __webpack_require__(4848);
763
- const _excluded = ["type", "options", "value", "onChange", "placeholder", "className", "style", "isError", "errorMessage", "containerClassName", "popoverClassName", "allowClear", "headerLabel", "onUpload", "tooltip", "bylineText", "disabled", "showUpload", "customPopupRender", "showSearch", "searchBasedOn", "onConfirm", "clearText", "noResultCustomText", "noResultCustomIcon", "readOnly"];
779
+ const _excluded = ["type", "options", "value", "onChange", "placeholder", "className", "style", "isError", "errorMessage", "containerClassName", "popoverClassName", "allowClear", "headerLabel", "onUpload", "uploadLabel", "tooltip", "bylineText", "disabled", "showUpload", "customPopupRender", "showSearch", "searchBasedOn", "onSearch", "searchDebounce", "onConfirm", "clearText", "noResultCustomText", "noResultCustomIcon", "readOnly", "staticValue", "onFooterDownloadChange", "onPopupScroll", "hasMore", "enableVirtualization", "virtualRowHeight", "resetSearch", "resetData", "fetchMissingOptions"];
764
780
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
765
781
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
766
782
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
767
- function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
768
- const SELECT_TYPES = {
769
- SELECT: 'select',
770
- MULTI_SELECT: 'multiSelect',
771
- TREE_SELECT: 'treeSelect',
772
- MULTI_TREE_SELECT: 'multiTreeSelect'
773
- };
783
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /* eslint-disable max-lines */
774
784
  const NoResult = _ref => {
775
785
  let {
776
786
  noResultCustomText,
@@ -788,7 +798,7 @@ const NoResult = _ref => {
788
798
  size: "m"
789
799
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapLabel.default, {
790
800
  className: _styles.default['cap-unified-select-no-result-text'],
791
- children: showUpload && (options == null ? void 0 : options.length) === 0 ? noResultCustomText : 'No results found'
801
+ children: showUpload && (options == null ? void 0 : options.length) === 0 ? noResultCustomText : _constants.DEFAULTS.NO_RESULT_TEXT
792
802
  })]
793
803
  });
794
804
  };
@@ -873,22 +883,27 @@ const countSelectedLeaves = (treeMaps, selectedValues) => {
873
883
  selectedValues == null || selectedValues.forEach(processNode);
874
884
  return (treeMaps == null || (_treeMaps$leafValues = treeMaps.leafValues) == null ? void 0 : _treeMaps$leafValues.reduce((count, leaf) => expandedSet.has(leaf) ? count + 1 : count, 0)) || 0;
875
885
  };
876
- const filterTreeData = function (data, search, searchBasedOn) {
886
+ const filterTreeData = function (data, search, searchBasedOn, selectedValues) {
877
887
  if (searchBasedOn === void 0) {
878
888
  searchBasedOn = 'label';
879
889
  }
880
890
  if (!(data != null && data.length) || !search) return data;
881
891
  const searchLower = search.toLowerCase();
892
+ const selectedSet = new Set(selectedValues || []);
882
893
  const nodeMatchesSearch = node => {
883
894
  var _node$value, _node$key, _ref3, _node$label;
884
895
  const target = searchBasedOn === 'value' ? String((_node$value = node == null ? void 0 : node.value) != null ? _node$value : '') : searchBasedOn === 'key' ? String((_node$key = node == null ? void 0 : node.key) != null ? _node$key : '') : String((_ref3 = (_node$label = node == null ? void 0 : node.label) != null ? _node$label : node == null ? void 0 : node.title) != null ? _ref3 : '');
885
896
  return target.toLowerCase().includes(searchLower);
886
897
  };
898
+ const isNodeSelected = node => {
899
+ return node.value !== undefined && selectedSet.has(node.value);
900
+ };
887
901
  const loop = items => items.reduce((acc, item) => {
888
902
  var _item$children;
889
903
  if (!item) return acc;
890
904
  const children = item != null && (_item$children = item.children) != null && _item$children.length ? loop(item.children) : [];
891
- if (nodeMatchesSearch(item) || children.length) {
905
+ // Include node if: matches search OR is selected OR has matching children
906
+ if (nodeMatchesSearch(item) || isNodeSelected(item) || children.length) {
892
907
  acc.push(_extends({}, item, {
893
908
  children
894
909
  }));
@@ -899,11 +914,11 @@ const filterTreeData = function (data, search, searchBasedOn) {
899
914
  };
900
915
  const CapUnifiedSelect = _ref4 => {
901
916
  let {
902
- type = SELECT_TYPES.SELECT,
917
+ type = _constants.SELECT_TYPES.SELECT,
903
918
  options = [],
904
919
  value,
905
920
  onChange,
906
- placeholder = 'Select an option',
921
+ placeholder = _constants.DEFAULTS.PLACEHOLDER,
907
922
  className = '',
908
923
  style,
909
924
  isError = false,
@@ -913,6 +928,7 @@ const CapUnifiedSelect = _ref4 => {
913
928
  allowClear = false,
914
929
  headerLabel,
915
930
  onUpload,
931
+ uploadLabel = _constants.DEFAULTS.UPLOAD_LABEL,
916
932
  tooltip,
917
933
  bylineText,
918
934
  disabled = false,
@@ -920,38 +936,782 @@ const CapUnifiedSelect = _ref4 => {
920
936
  customPopupRender = true,
921
937
  showSearch = true,
922
938
  searchBasedOn = 'label',
939
+ onSearch,
940
+ searchDebounce = _constants.TIMEOUTS.DEFAULT_SEARCH_DEBOUNCE,
923
941
  onConfirm,
924
- clearText = 'Clear',
925
- noResultCustomText = 'No results found',
926
- noResultCustomIcon = 'warning',
927
- readOnly = false
942
+ clearText = _constants.DEFAULTS.CLEAR_TEXT,
943
+ noResultCustomText = _constants.DEFAULTS.NO_RESULT_TEXT,
944
+ noResultCustomIcon = _constants.DEFAULTS.NO_RESULT_ICON,
945
+ readOnly = false,
946
+ staticValue = true,
947
+ onFooterDownloadChange,
948
+ onPopupScroll,
949
+ hasMore = true,
950
+ enableVirtualization = false,
951
+ virtualRowHeight = _constants.DEFAULTS.VIRTUAL_ROW_HEIGHT,
952
+ resetSearch = true,
953
+ resetData,
954
+ fetchMissingOptions
928
955
  } = _ref4,
929
956
  rest = _objectWithoutPropertiesLoose(_ref4, _excluded);
930
957
  const [searchText, setSearchText] = (0, _react.useState)('');
931
958
  const [tempValue, setTempValue] = (0, _react.useState)(value);
932
959
  const [dropdownOpen, setDropdownOpen] = (0, _react.useState)(false);
960
+ const [isSearching, setIsSearching] = (0, _react.useState)(false);
961
+ const [isLoadingOnScroll, setIsLoadingOnScroll] = (0, _react.useState)(false);
962
+ const [isResettingData, setIsResettingData] = (0, _react.useState)(false);
963
+ // Store ordered options after confirm (selected items moved to top based on selection order)
964
+ const [orderedOptions, setOrderedOptions] = (0, _react.useState)(null);
965
+ const searchTimeoutRef = (0, _react.useRef)(null);
966
+ const scrollContainerRef = (0, _react.useRef)(null);
967
+ const scrollLoadingTimeoutRef = (0, _react.useRef)(null);
968
+ // Track if scroll handler is currently processing to prevent duplicate calls
969
+ const isScrollProcessingRef = (0, _react.useRef)(false);
970
+ // Throttle ref for scroll events
971
+ const scrollThrottleTimeoutRef = (0, _react.useRef)(null);
972
+ // Ref to track options for scroll handler (avoids recreating handleScroll)
973
+ const optionsRef = (0, _react.useRef)(options);
974
+ // Cache of selected items from async results to preserve them during search
975
+ const selectedItemsCacheRef = (0, _react.useRef)(new Map());
976
+ // Track the last search query to detect when options update after search
977
+ const lastSearchQueryRef = (0, _react.useRef)('');
978
+ // Track when search was cleared to help clear loading state
979
+ const searchClearedTimeRef = (0, _react.useRef)(null);
980
+ // Track previous options to detect when they change after a search
981
+ const prevOptionsRef = (0, _react.useRef)(options);
982
+ // Track previous options before resetData is called to detect when options update
983
+ const prevOptionsBeforeResetRef = (0, _react.useRef)(options);
984
+ // Track previous options count to detect when options change after scroll
985
+ const prevOptionsCountRef = (0, _react.useRef)(options.length);
986
+ // Track previous options to detect when options change (even if count stays same)
987
+ const prevOptionsRefForScroll = (0, _react.useRef)(options);
988
+ // Track options count when scroll was triggered (for orderedOptions update)
989
+ const scrollTriggerOptionsCountRef = (0, _react.useRef)(options.length);
990
+ // Track if initial sort has been done (only sort once on initial load with selected values)
991
+ const initialSortDoneRef = (0, _react.useRef)(false);
992
+ // Track if user has interacted with the dropdown during current session (selected, searched, etc.)
993
+ const hasInteractedRef = (0, _react.useRef)(false);
994
+ // Track the initial tempValue when dropdown opens to detect if user made changes
995
+ const initialTempValueRef = (0, _react.useRef)(value);
996
+ // Track if resetData was already called in the current session to prevent duplicate calls
997
+ const resetDataCalledRef = (0, _react.useRef)(false);
998
+ // Track when resetData was called to help clear loading state
999
+ const resetDataCalledTimeRef = (0, _react.useRef)(null);
1000
+ // Track if fetchMissingOptions was already called to prevent duplicate calls
1001
+ const fetchMissingOptionsCalledRef = (0, _react.useRef)(false);
1002
+ // Track the last missing values that were sent to prevent duplicate calls with same values
1003
+ const lastMissingValuesRef = (0, _react.useRef)('');
1004
+
1005
+ // Helper function to check if a value exists in options (recursive for tree structures)
1006
+ const findValueInOptions = (0, _react.useCallback)((opts, targetValue) => {
1007
+ for (const opt of opts) {
1008
+ if (opt.value === targetValue) {
1009
+ return true;
1010
+ }
1011
+ if (opt.children && opt.children.length > 0) {
1012
+ if (findValueInOptions(opt.children, targetValue)) {
1013
+ return true;
1014
+ }
1015
+ }
1016
+ }
1017
+ return false;
1018
+ }, []);
1019
+
1020
+ // Helper function to find missing selected values
1021
+ const findMissingValues = (0, _react.useCallback)((selectedValues, currentOptions) => {
1022
+ if (!selectedValues.length || !currentOptions.length) {
1023
+ return selectedValues;
1024
+ }
1025
+ return selectedValues.filter(val => !findValueInOptions(currentOptions, val));
1026
+ }, [findValueInOptions]);
1027
+
1028
+ // Check for missing options and call fetchMissingOptions if needed
1029
+ (0, _react.useEffect)(() => {
1030
+ // Only check if fetchMissingOptions is provided
1031
+ if (!fetchMissingOptions) {
1032
+ return;
1033
+ }
1034
+
1035
+ // Get current selected values
1036
+ const selectedValues = Array.isArray(value) ? value : value ? [value] : [];
1037
+ if (selectedValues.length === 0) {
1038
+ // No selected values, reset the tracking
1039
+ fetchMissingOptionsCalledRef.current = false;
1040
+ lastMissingValuesRef.current = '';
1041
+ return;
1042
+ }
1043
+
1044
+ // Find missing values
1045
+ const missingValues = findMissingValues(selectedValues, options);
1046
+
1047
+ // If no missing values, reset tracking and return
1048
+ if (missingValues.length === 0) {
1049
+ fetchMissingOptionsCalledRef.current = false;
1050
+ lastMissingValuesRef.current = '';
1051
+ return;
1052
+ }
1053
+
1054
+ // Create a sorted string representation of missing values for comparison
1055
+ // Use slice() to avoid mutating the original array
1056
+ const missingValuesKey = [...missingValues].sort().join(',');
1057
+
1058
+ // Only call if:
1059
+ // 1. We haven't called it before, OR
1060
+ // 2. The missing values have changed (different values are missing now)
1061
+ if (!fetchMissingOptionsCalledRef.current || lastMissingValuesRef.current !== missingValuesKey) {
1062
+ fetchMissingOptionsCalledRef.current = true;
1063
+ lastMissingValuesRef.current = missingValuesKey;
1064
+ // Call the developer's function with missing values (pass a copy to avoid mutation)
1065
+ fetchMissingOptions([...missingValues]);
1066
+ }
1067
+ }, [value, options, fetchMissingOptions, findMissingValues]);
933
1068
  (0, _react.useEffect)(() => {
934
1069
  const isEqual = Array.isArray(value) && Array.isArray(tempValue) ? (value == null ? void 0 : value.length) === (tempValue == null ? void 0 : tempValue.length) && value.every(v => Array.isArray(tempValue) && tempValue.includes(v)) : value === tempValue;
935
- if (!isEqual) setTempValue(value);
1070
+ if (!isEqual) {
1071
+ setTempValue(value);
1072
+ // Reset ordered options when value changes from outside
1073
+ setOrderedOptions(null);
1074
+ }
1075
+ // eslint-disable-next-line react-hooks/exhaustive-deps
936
1076
  }, [value]);
937
- const isMulti = (0, _react.useMemo)(() => type === SELECT_TYPES.MULTI_SELECT || type === SELECT_TYPES.MULTI_TREE_SELECT, [type]);
938
- const isTree = (0, _react.useMemo)(() => type === SELECT_TYPES.TREE_SELECT || type === SELECT_TYPES.MULTI_TREE_SELECT, [type]);
1077
+
1078
+ // Cache selected items when tempValue changes
1079
+ (0, _react.useEffect)(() => {
1080
+ const currentSelected = Array.isArray(tempValue) ? tempValue : tempValue ? [tempValue] : [];
1081
+
1082
+ // Store selected items in cache for persistence
1083
+ const findAndCacheOption = (opts, val) => {
1084
+ for (const opt of opts) {
1085
+ if (opt.value === val) {
1086
+ selectedItemsCacheRef.current.set(val, opt);
1087
+ return true;
1088
+ }
1089
+ if (opt.children && opt.children.length > 0) {
1090
+ if (findAndCacheOption(opt.children, val)) {
1091
+ return true;
1092
+ }
1093
+ }
1094
+ }
1095
+ return false;
1096
+ };
1097
+ currentSelected.forEach(val => {
1098
+ if (!selectedItemsCacheRef.current.has(val)) {
1099
+ findAndCacheOption(options, val);
1100
+ }
1101
+ });
1102
+
1103
+ // Clean up cache for unselected items
1104
+ const selectedSet = new Set(currentSelected);
1105
+ selectedItemsCacheRef.current.forEach((_, value) => {
1106
+ if (!selectedSet.has(value)) {
1107
+ selectedItemsCacheRef.current.delete(value);
1108
+ }
1109
+ });
1110
+ }, [tempValue, options]);
1111
+
1112
+ // Reset ordered options when options change, but only if it would invalidate the current ordering
1113
+ // This prevents resetting when options are updated via onSearch/onScroll but selected items still exist
1114
+ (0, _react.useEffect)(() => {
1115
+ // Only reset if we have orderedOptions and the current value's items are no longer in options
1116
+ if (orderedOptions) {
1117
+ const currentSelected = Array.isArray(tempValue) ? tempValue : tempValue ? [tempValue] : [];
1118
+
1119
+ // Check if all selected values still exist in the new options
1120
+ const checkValueExists = (opts, val) => {
1121
+ for (const opt of opts) {
1122
+ if (opt.value === val) return true;
1123
+ if (opt.children && opt.children.length > 0) {
1124
+ if (checkValueExists(opt.children, val)) return true;
1125
+ }
1126
+ }
1127
+ return false;
1128
+ };
1129
+
1130
+ // If any selected value is missing from new options, reset ordering
1131
+ const allSelectedStillExist = currentSelected.every(val => checkValueExists(options, val));
1132
+ if (!allSelectedStillExist) {
1133
+ setOrderedOptions(null);
1134
+ }
1135
+ // Otherwise, keep the ordering even if options changed (e.g., via onSearch adding more items)
1136
+ } else {
1137
+ // No ordering set, nothing to reset
1138
+ }
1139
+ }, [options, orderedOptions, tempValue]);
1140
+
1141
+ // Extract debounce timeout (extracted early for use in useEffects)
1142
+ const debounceTimeout = searchDebounce != null ? searchDebounce : _constants.TIMEOUTS.DEFAULT_SEARCH_DEBOUNCE;
1143
+
1144
+ // Keep optionsRef in sync with options
1145
+ (0, _react.useEffect)(() => {
1146
+ optionsRef.current = options;
1147
+ }, [options]);
1148
+
1149
+ // Cleanup timeouts on unmount
1150
+ (0, _react.useEffect)(() => {
1151
+ return () => {
1152
+ if (searchTimeoutRef.current) {
1153
+ clearTimeout(searchTimeoutRef.current);
1154
+ }
1155
+ if (scrollLoadingTimeoutRef.current) {
1156
+ clearTimeout(scrollLoadingTimeoutRef.current);
1157
+ }
1158
+ if (scrollThrottleTimeoutRef.current) {
1159
+ clearTimeout(scrollThrottleTimeoutRef.current);
1160
+ }
1161
+ };
1162
+ }, []);
1163
+
1164
+ // Detect when options update after a search to clear loading state
1165
+ // This prevents showing "No results found" before data arrives
1166
+ (0, _react.useEffect)(() => {
1167
+ // Only handle this for API-based searches (staticValue = false)
1168
+ // Check if lastSearchQueryRef has been set (including empty string for cleared search)
1169
+ const hasSearchQuery = lastSearchQueryRef.current !== null && lastSearchQueryRef.current !== undefined;
1170
+ if (staticValue || !isSearching || !hasSearchQuery) {
1171
+ prevOptionsRef.current = options;
1172
+ return;
1173
+ }
1174
+
1175
+ // Check if options actually changed (reference or content)
1176
+ const optionsChanged = prevOptionsRef.current !== options || prevOptionsRef.current.length !== options.length;
1177
+
1178
+ // Also check if search was cleared (empty string) and enough time has passed
1179
+ // This handles the case where clearing search reloads initial data that might be the same reference
1180
+ const searchCleared = lastSearchQueryRef.current === '';
1181
+ const timeSinceCleared = searchClearedTimeRef.current ? Date.now() - searchClearedTimeRef.current : Infinity;
1182
+ const hasOptionsData = options.length > 0;
1183
+ // Wait at least SEARCH_CLEARED_TIMEOUT after search is cleared to allow API call to complete
1184
+ const clearedSearchReady = searchCleared && hasOptionsData && timeSinceCleared > _constants.TIMEOUTS.SEARCH_CLEARED_TIMEOUT;
1185
+ if (optionsChanged || clearedSearchReady) {
1186
+ // Options updated after search - data has arrived
1187
+ // Use a small delay to ensure state updates are processed
1188
+ const timeoutId = setTimeout(() => {
1189
+ setIsSearching(false);
1190
+ prevOptionsRef.current = options;
1191
+ // Clear timestamp when search loading is cleared
1192
+ if (searchCleared) {
1193
+ searchClearedTimeRef.current = null;
1194
+ }
1195
+ }, _constants.TIMEOUTS.SEARCH_STATE_UPDATE_DELAY);
1196
+ return () => clearTimeout(timeoutId);
1197
+ }
1198
+ prevOptionsRef.current = options;
1199
+ }, [options, staticValue, isSearching]);
1200
+
1201
+ // Fallback: Clear searching state after a reasonable timeout to prevent infinite loading
1202
+ // This handles edge cases where options might not change reference but data has arrived
1203
+ // Also handles error cases where options don't update after search
1204
+ (0, _react.useEffect)(() => {
1205
+ // Check if lastSearchQueryRef has been set (including empty string for cleared search)
1206
+ const hasSearchQuery = lastSearchQueryRef.current !== null && lastSearchQueryRef.current !== undefined;
1207
+ if (!isSearching || staticValue || !hasSearchQuery) {
1208
+ return;
1209
+ }
1210
+
1211
+ // For cleared search (empty string), use a shorter timeout since it should reload initial data quickly
1212
+ // For regular search, use debounce timeout + buffer
1213
+ const searchCleared = lastSearchQueryRef.current === '';
1214
+ const timeoutDuration = searchCleared ? debounceTimeout + _constants.TIMEOUTS.SEARCH_CLEARED_BUFFER // Shorter timeout for cleared search
1215
+ : debounceTimeout + _constants.TIMEOUTS.SEARCH_REGULAR_BUFFER; // Longer timeout for regular search
1216
+
1217
+ // Calculate timeout: debounce timeout + a small buffer for API response
1218
+ // This ensures we wait for the API call to complete before showing "No results"
1219
+ // For error cases where options don't update, this will clear loading state
1220
+ const fallbackTimeout = setTimeout(() => {
1221
+ setIsSearching(false);
1222
+ searchClearedTimeRef.current = null; // Clear search cleared timestamp
1223
+ }, timeoutDuration);
1224
+ return () => clearTimeout(fallbackTimeout);
1225
+ }, [isSearching, staticValue, debounceTimeout, options.length]);
1226
+
1227
+ // Detect when options update after resetData is called to clear loading state
1228
+ (0, _react.useEffect)(() => {
1229
+ if (!isResettingData) {
1230
+ // Update ref even when not resetting to keep it in sync
1231
+ prevOptionsBeforeResetRef.current = options;
1232
+ // Clear timestamp when not resetting
1233
+ resetDataCalledTimeRef.current = null;
1234
+ return;
1235
+ }
1236
+
1237
+ // Check if options actually changed (reference, length, or content)
1238
+ // Compare against the options that existed before resetData was called
1239
+ const prevOptions = prevOptionsBeforeResetRef.current;
1240
+ const currentOptions = options;
1241
+
1242
+ // More robust comparison: check reference, length, or any content differences
1243
+ const optionsChanged = prevOptions !== currentOptions || prevOptions.length !== currentOptions.length ||
1244
+ // Deep comparison: check if any option values or labels changed
1245
+ prevOptions.length === currentOptions.length && prevOptions.length > 0 && prevOptions.some((prevOpt, idx) => {
1246
+ const currentOpt = currentOptions[idx];
1247
+ return !currentOpt || prevOpt.value !== currentOpt.value || prevOpt.label !== currentOpt.label;
1248
+ });
1249
+
1250
+ // Additional check: if enough time has passed since resetData was called
1251
+ // and we have options data, assume data has loaded even if comparison didn't detect change
1252
+ const timeSinceReset = resetDataCalledTimeRef.current ? Date.now() - resetDataCalledTimeRef.current : Infinity;
1253
+ const hasDataAfterTimeout = currentOptions.length > 0 && timeSinceReset > _constants.TIMEOUTS.RESET_DATA_MIN_TIME && timeSinceReset < _constants.TIMEOUTS.RESET_DATA_MAX_TIME;
1254
+
1255
+ // If options changed or enough time has passed with data, clear the loading state
1256
+ if (optionsChanged || hasDataAfterTimeout) {
1257
+ // Options updated after resetData - data has arrived
1258
+ // Clear immediately without delay for faster response
1259
+ setIsResettingData(false);
1260
+ prevOptionsBeforeResetRef.current = currentOptions;
1261
+ resetDataCalledTimeRef.current = null;
1262
+ }
1263
+ }, [options, isResettingData]);
1264
+
1265
+ // Fallback: Clear resetData loading state after a reasonable timeout
1266
+ // This handles edge cases where options might not change reference but data has arrived
1267
+ (0, _react.useEffect)(() => {
1268
+ if (!isResettingData) {
1269
+ return;
1270
+ }
1271
+
1272
+ // Set a timeout to clear loading state if options don't update
1273
+ // Reduced timeout to 1 second for faster recovery
1274
+ const fallbackTimeout = setTimeout(() => {
1275
+ setIsResettingData(false);
1276
+ // Update ref to current options to prevent false positives in future comparisons
1277
+ prevOptionsBeforeResetRef.current = options;
1278
+ // Clear timestamp
1279
+ resetDataCalledTimeRef.current = null;
1280
+ }, _constants.TIMEOUTS.RESET_DATA_TIMEOUT);
1281
+ return () => clearTimeout(fallbackTimeout);
1282
+ }, [isResettingData, options]);
1283
+
1284
+ // Clear loading state when hasMore becomes false (all items exhausted)
1285
+ (0, _react.useEffect)(() => {
1286
+ if (!hasMore && isLoadingOnScroll) {
1287
+ setIsLoadingOnScroll(false);
1288
+ isScrollProcessingRef.current = false;
1289
+ if (scrollLoadingTimeoutRef.current) {
1290
+ clearTimeout(scrollLoadingTimeoutRef.current);
1291
+ scrollLoadingTimeoutRef.current = null;
1292
+ }
1293
+ }
1294
+ }, [hasMore, isLoadingOnScroll]);
1295
+
1296
+ // Detect when options change after scroll to clear loading overlay
1297
+ (0, _react.useEffect)(() => {
1298
+ // Always update refs when options change (when not loading)
1299
+ // This ensures we track the current state for next scroll detection
1300
+ if (!isLoadingOnScroll) {
1301
+ prevOptionsCountRef.current = options.length;
1302
+ // Store a reference to the options array for comparison
1303
+ // We'll compare by length and last item to detect changes
1304
+ prevOptionsRefForScroll.current = options;
1305
+ }
1306
+
1307
+ // Only check for changes if we're currently loading from scroll
1308
+ if (!isLoadingOnScroll || !onPopupScroll) {
1309
+ return;
1310
+ }
1311
+
1312
+ // Check if options count increased (new data loaded via append)
1313
+ const optionsCountIncreased = options.length > prevOptionsCountRef.current;
1314
+
1315
+ // Check if options content changed (even if count is same - replacement scenario)
1316
+ // Compare the last option to detect if new data was appended
1317
+ const optionsContentChanged = (() => {
1318
+ const prevCount = prevOptionsCountRef.current;
1319
+ const currentCount = options.length;
1320
+
1321
+ // If count changed, definitely content changed
1322
+ if (prevCount !== currentCount) {
1323
+ return true;
1324
+ }
1325
+
1326
+ // If count is same, check if last option changed (indicates new data appended/replaced)
1327
+ if (currentCount > 0 && prevCount > 0 && prevOptionsRefForScroll.current.length > 0) {
1328
+ const prevOptions = prevOptionsRefForScroll.current;
1329
+ const lastPrevOption = prevOptions[prevOptions.length - 1];
1330
+ const lastCurrentOption = options[options.length - 1];
1331
+
1332
+ // If last option is different, content changed
1333
+ if ((lastPrevOption == null ? void 0 : lastPrevOption.value) !== (lastCurrentOption == null ? void 0 : lastCurrentOption.value) || (lastPrevOption == null ? void 0 : lastPrevOption.label) !== (lastCurrentOption == null ? void 0 : lastCurrentOption.label)) {
1334
+ return true;
1335
+ }
1336
+ }
1337
+ return false;
1338
+ })();
1339
+
1340
+ // Clear loading if options changed (either count increased or content changed)
1341
+ // This handles both append (count increase) and replace (content change) scenarios
1342
+ if (optionsCountIncreased || optionsContentChanged) {
1343
+ // Options updated after scroll - data has arrived, clear loading overlay
1344
+ setIsLoadingOnScroll(false);
1345
+ // Reset processing flag to allow next scroll event
1346
+ isScrollProcessingRef.current = false;
1347
+ if (scrollLoadingTimeoutRef.current) {
1348
+ clearTimeout(scrollLoadingTimeoutRef.current);
1349
+ scrollLoadingTimeoutRef.current = null;
1350
+ }
1351
+
1352
+ // Update refs to track the new state after options change
1353
+ // This is critical for detecting subsequent scroll loads
1354
+ prevOptionsCountRef.current = options.length;
1355
+ prevOptionsRefForScroll.current = options;
1356
+ }
1357
+ }, [options, isLoadingOnScroll, onPopupScroll]);
1358
+
1359
+ // Handle search with debouncing
1360
+ const handleSearch = (0, _react.useCallback)(query => {
1361
+ // Clear existing timeout
1362
+ if (searchTimeoutRef.current) {
1363
+ clearTimeout(searchTimeoutRef.current);
1364
+ }
1365
+ const trimmedQuery = query.trim();
1366
+
1367
+ // Track when search is cleared (empty string after having a query)
1368
+ const wasSearching = lastSearchQueryRef.current !== '';
1369
+ const isNowCleared = trimmedQuery === '';
1370
+ if (wasSearching && isNowCleared) {
1371
+ searchClearedTimeRef.current = Date.now();
1372
+ } else if (!isNowCleared) {
1373
+ searchClearedTimeRef.current = null;
1374
+ }
1375
+
1376
+ // Track the search query to detect when options update
1377
+ lastSearchQueryRef.current = trimmedQuery;
1378
+
1379
+ // Mark as interacted if user typed something (even if they clear it later)
1380
+ if (trimmedQuery.length > 0 || lastSearchQueryRef.current.length > 0) {
1381
+ hasInteractedRef.current = true;
1382
+ }
1383
+
1384
+ // For API-based searches (staticValue = false), always call onSearch
1385
+ // This allows the developer to reload all initial data when search is cleared
1386
+ if (!staticValue && onSearch) {
1387
+ // Set loading state for both empty and non-empty queries
1388
+ setIsSearching(true);
1389
+
1390
+ // Debounce the search callback
1391
+ searchTimeoutRef.current = setTimeout(() => {
1392
+ // Send the search input (empty string when cleared, or the actual query)
1393
+ onSearch(trimmedQuery);
1394
+ // For API-based searches, keep isSearching true until options update
1395
+ // This prevents showing "No results found" before data arrives
1396
+ }, debounceTimeout);
1397
+ } else if (!trimmedQuery) {
1398
+ // For static searches, if query is empty, just reset the state
1399
+ setIsSearching(false);
1400
+ } else {
1401
+ // For static searches with content, show brief loading indicator
1402
+ // Set loading state briefly to show user feedback
1403
+ setIsSearching(true);
1404
+ // Clear loading state after a short delay (filtering is instant but we show feedback)
1405
+ searchTimeoutRef.current = setTimeout(() => {
1406
+ setIsSearching(false);
1407
+ }, _constants.TIMEOUTS.STATIC_SEARCH_DELAY);
1408
+ }
1409
+ }, [onSearch, staticValue, debounceTimeout]);
1410
+ const isMulti = (0, _react.useMemo)(() => type === _constants.SELECT_TYPES.MULTI_SELECT || type === _constants.SELECT_TYPES.MULTI_TREE_SELECT, [type]);
1411
+ const isTree = (0, _react.useMemo)(() => type === _constants.SELECT_TYPES.TREE_SELECT || type === _constants.SELECT_TYPES.MULTI_TREE_SELECT, [type]);
1412
+
1413
+ // Use options directly since pagination is handled by the developer
1414
+ const mergedOptions = (0, _react.useMemo)(() => {
1415
+ return options;
1416
+ }, [options]);
1417
+
1418
+ // Helper function to reorder options based on selection order
1419
+ // Selected items are moved to top in the order they were selected
1420
+ // For tree structures, maintains parent-child relationships
1421
+ // For flat lists, directly reorders items
1422
+ // Works for all data types: flat lists, tree structures, nested trees
1423
+ const reorderOptionsBySelection = (0, _react.useCallback)((opts, selectedOrder) => {
1424
+ if (!Array.isArray(selectedOrder) || selectedOrder.length === 0 || !(opts != null && opts.length)) {
1425
+ return opts;
1426
+ }
1427
+ const selectedSet = new Set(selectedOrder);
1428
+ const selectedItems = [];
1429
+ const unselectedItems = [];
1430
+ const processedTopLevelValues = new Set();
1431
+
1432
+ // Deep clone helper to avoid mutating original items
1433
+ const deepCloneItem = item => {
1434
+ return _extends({}, item, {
1435
+ children: item.children ? item.children.map(deepCloneItem) : undefined
1436
+ });
1437
+ };
1438
+
1439
+ // Find the top-level item that contains the selected value
1440
+ // For flat lists, returns the item itself
1441
+ // For tree structures, returns the top-level parent from opts
1442
+ const findTopLevelItem = targetValue => {
1443
+ // First, find which top-level item in opts contains this value
1444
+ for (const topLevelItem of opts) {
1445
+ // Check if this top-level item itself matches
1446
+ if (topLevelItem.value === targetValue) {
1447
+ return topLevelItem;
1448
+ }
1449
+
1450
+ // Recursively search in children
1451
+ const searchInChildren = items => {
1452
+ for (const item of items) {
1453
+ if (item.value === targetValue) {
1454
+ return true; // Found it
1455
+ }
1456
+ if (item.children && item.children.length > 0) {
1457
+ if (searchInChildren(item.children)) {
1458
+ return true;
1459
+ }
1460
+ }
1461
+ }
1462
+ return false;
1463
+ };
1464
+
1465
+ // If found in this top-level item's children, return the top-level item
1466
+ if (topLevelItem.children && topLevelItem.children.length > 0) {
1467
+ if (searchInChildren(topLevelItem.children)) {
1468
+ return topLevelItem;
1469
+ }
1470
+ }
1471
+ }
1472
+ return null;
1473
+ };
1474
+
1475
+ // Check if an item or any of its descendants is selected
1476
+ const hasSelectedDescendant = item => {
1477
+ if (item.value !== undefined && selectedSet.has(item.value)) {
1478
+ return true;
1479
+ }
1480
+ if (item.children && item.children.length > 0) {
1481
+ return item.children.some(child => hasSelectedDescendant(child));
1482
+ }
1483
+ return false;
1484
+ };
1485
+
1486
+ // Collect selected items in selection order
1487
+ selectedOrder.forEach(selectedVal => {
1488
+ const topLevelItem = findTopLevelItem(selectedVal);
1489
+ if (topLevelItem && topLevelItem.value !== undefined && !processedTopLevelValues.has(topLevelItem.value)) {
1490
+ // Clone the item to avoid mutating the original
1491
+ const clonedItem = deepCloneItem(topLevelItem);
1492
+ selectedItems.push(clonedItem);
1493
+ processedTopLevelValues.add(topLevelItem.value);
1494
+ }
1495
+ });
1496
+
1497
+ // Collect unselected items maintaining original order
1498
+ // For tree structures, only include top-level items that don't have any selected descendants
1499
+ opts.forEach(item => {
1500
+ if (item.value === undefined) {
1501
+ // Item without value, include as-is
1502
+ unselectedItems.push(deepCloneItem(item));
1503
+ } else if (!processedTopLevelValues.has(item.value)) {
1504
+ // Check if this item or any of its descendants is selected
1505
+ if (!hasSelectedDescendant(item)) {
1506
+ unselectedItems.push(deepCloneItem(item));
1507
+ }
1508
+ }
1509
+ });
1510
+
1511
+ // Return selected items first (in selection order), then unselected items
1512
+ return [...selectedItems, ...unselectedItems];
1513
+ }, []);
1514
+
1515
+ // Track previous options count before fetchMissingOptions to detect when missing options are added
1516
+ const prevOptionsCountBeforeFetchMissingRef = (0, _react.useRef)(options.length);
1517
+ // Track previous options before fetchMissingOptions to detect when missing options are added
1518
+ const prevOptionsBeforeFetchMissingRef = (0, _react.useRef)(options);
1519
+
1520
+ // Update orderedOptions when new options are appended via scroll (when items are selected)
1521
+ // This ensures new data appears even when items are selected
1522
+ (0, _react.useEffect)(() => {
1523
+ // Only update if we have orderedOptions (items are selected), onPopupScroll is provided,
1524
+ // and options increased from when scroll was triggered
1525
+ if (!orderedOptions || !onPopupScroll) {
1526
+ return;
1527
+ }
1528
+ const currentOptions = options;
1529
+ // Compare against the count when scroll was triggered, not the current ref value
1530
+ // This ensures we detect increases even if refs were updated in other useEffects
1531
+ const optionsCountIncreased = currentOptions.length > scrollTriggerOptionsCountRef.current;
1532
+
1533
+ // Only update if options increased from scroll trigger time
1534
+ // This prevents updating on other option changes (like search)
1535
+ if (optionsCountIncreased && scrollTriggerOptionsCountRef.current > 0) {
1536
+ const selectedValues = Array.isArray(tempValue) ? tempValue : tempValue ? [tempValue] : [];
1537
+ if (selectedValues.length > 0) {
1538
+ // Reorder the full options list (which now includes new options) to maintain selection order
1539
+ // This will put selected items at top and append new unselected items at bottom
1540
+ const reordered = reorderOptionsBySelection(currentOptions, selectedValues);
1541
+ setOrderedOptions(reordered);
1542
+ // Update the scroll trigger count for next scroll detection
1543
+ scrollTriggerOptionsCountRef.current = currentOptions.length;
1544
+ }
1545
+ }
1546
+ }, [options, orderedOptions, onPopupScroll, tempValue, reorderOptionsBySelection]);
1547
+
1548
+ // Update orderedOptions when new options are added via fetchMissingOptions (for paginated API-driven data)
1549
+ // This handles the case when user selects items from paginated pages and confirms
1550
+ // The fetchMissingOptions callback fetches the missing selected items, and we need to reorder them to top
1551
+ // Also handles search cases and upload cases where selected items might not be in current options
1552
+ (0, _react.useEffect)(() => {
1553
+ // Only handle if fetchMissingOptions is provided (indicates API-driven pagination)
1554
+ if (!fetchMissingOptions) {
1555
+ // Update refs even when fetchMissingOptions is not provided
1556
+ prevOptionsCountBeforeFetchMissingRef.current = options.length;
1557
+ prevOptionsBeforeFetchMissingRef.current = options;
1558
+ return;
1559
+ }
1560
+ const currentOptions = options;
1561
+ const currentSelectedValues = Array.isArray(value) ? value : value ? [value] : [];
1562
+ const tempSelectedValues = Array.isArray(tempValue) ? tempValue : tempValue ? [tempValue] : [];
1563
+ // Use tempValue if available (during selection), otherwise use value (after confirm)
1564
+ const selectedValues = tempSelectedValues.length > 0 ? tempSelectedValues : currentSelectedValues;
1565
+ if (selectedValues.length === 0) {
1566
+ // No selected values, update refs and return
1567
+ prevOptionsCountBeforeFetchMissingRef.current = currentOptions.length;
1568
+ prevOptionsBeforeFetchMissingRef.current = currentOptions;
1569
+ return;
1570
+ }
1571
+
1572
+ // Check if options changed (count or content) after fetchMissingOptions was called
1573
+ const prevOptions = prevOptionsBeforeFetchMissingRef.current;
1574
+ const optionsCountIncreased = currentOptions.length > prevOptionsCountBeforeFetchMissingRef.current;
1575
+ const optionsChanged = prevOptions !== currentOptions || optionsCountIncreased;
1576
+
1577
+ // Check if any previously missing selected values now exist in options
1578
+ // This handles both cases: when fetchMissingOptions was called, and when options update for any reason
1579
+ const hasNewlyFetchedSelectedItems = (() => {
1580
+ if (selectedValues.length === 0 || !optionsChanged) {
1581
+ return false;
1582
+ }
1583
+
1584
+ // Find which selected values were missing in previous options
1585
+ const previouslyMissingValues = selectedValues.filter(val => !findValueInOptions(prevOptions, val));
1586
+ if (previouslyMissingValues.length === 0) {
1587
+ return false;
1588
+ }
1589
+
1590
+ // Check if any of those previously missing values now exist in current options
1591
+ const nowPresentValues = previouslyMissingValues.filter(val => findValueInOptions(currentOptions, val));
1592
+ return nowPresentValues.length > 0;
1593
+ })();
1594
+
1595
+ // Update orderedOptions if:
1596
+ // 1. Options changed (increased or content changed) AND
1597
+ // 2. Previously missing selected items are now present in options
1598
+ // This works for both cases: when fetchMissingOptions was explicitly called, and when options update for other reasons
1599
+ if (optionsChanged && hasNewlyFetchedSelectedItems) {
1600
+ // Reorder the full options list to put selected items at top
1601
+ const reordered = reorderOptionsBySelection(currentOptions, selectedValues);
1602
+ setOrderedOptions(reordered);
1603
+ }
1604
+
1605
+ // Always update the previous options and count for next comparison
1606
+ // This ensures we can detect when missing options are added in the future
1607
+ prevOptionsCountBeforeFetchMissingRef.current = currentOptions.length;
1608
+ prevOptionsBeforeFetchMissingRef.current = currentOptions;
1609
+ }, [options, value, tempValue, fetchMissingOptions, reorderOptionsBySelection, findValueInOptions]);
1610
+
1611
+ // Sort selected items to top on initial load (only once)
1612
+ // This handles the case when user comes from another flow with pre-selected values
1613
+ (0, _react.useEffect)(() => {
1614
+ // Only do this once, and only if we have options and selected values
1615
+ if (initialSortDoneRef.current || !(options != null && options.length)) {
1616
+ return;
1617
+ }
1618
+
1619
+ // Check if there are selected values
1620
+ const selectedValues = Array.isArray(value) ? value : value ? [value] : [];
1621
+ if (selectedValues.length === 0) {
1622
+ // No selected values, mark as done
1623
+ initialSortDoneRef.current = true;
1624
+ return;
1625
+ }
1626
+
1627
+ // Check if any selected values exist in options
1628
+ const checkValueExists = (opts, val) => {
1629
+ for (const opt of opts) {
1630
+ if (opt.value === val) return true;
1631
+ if (opt.children && opt.children.length > 0) {
1632
+ if (checkValueExists(opt.children, val)) return true;
1633
+ }
1634
+ }
1635
+ return false;
1636
+ };
1637
+ const hasSelectedInOptions = selectedValues.some(val => checkValueExists(options, val));
1638
+ if (hasSelectedInOptions) {
1639
+ // Reorder options to move selected items to top
1640
+ const reordered = reorderOptionsBySelection(options, selectedValues);
1641
+ setOrderedOptions(reordered);
1642
+ }
1643
+
1644
+ // Mark as done - only sort once on initial load
1645
+ initialSortDoneRef.current = true;
1646
+ }, [options, value, reorderOptionsBySelection]);
939
1647
  const dataSource = (0, _react.useMemo)(() => {
940
- if (!(options != null && options.length)) return [];
1648
+ // During search, use normal options (mergedOptions) to show filtered results without selected items at top
1649
+ // When not searching, use ordered options if available (selected items at top), otherwise use merged options
1650
+ const sourceOptions = searchText.trim() ? mergedOptions : orderedOptions || mergedOptions;
1651
+
1652
+ // Get current selected values to check for missing ones
1653
+ // Use value prop (external state) instead of tempValue (internal state)
1654
+ // This ensures we only create virtual options for values that are actually selected
1655
+ // and not just temporarily selected during dropdown interaction
1656
+ const selectedValues = Array.isArray(value) ? value : value ? [value] : [];
1657
+ const hasSearchQuery = searchText.trim().length > 0;
1658
+
1659
+ // Find selected values that don't exist in the current options
1660
+ // Only include missing values when not searching (so they're always visible)
1661
+ // or when searching but they should still be shown
1662
+ const missingSelectedValues = [];
1663
+ if (selectedValues.length > 0) {
1664
+ selectedValues.forEach(val => {
1665
+ if (!findValueInOptions(sourceOptions, val)) {
1666
+ missingSelectedValues.push(val);
1667
+ }
1668
+ });
1669
+ }
1670
+
1671
+ // Create virtual option nodes for missing selected values
1672
+ // Use cached option data if available, otherwise create a simple node with value as label
1673
+ const virtualOptions = missingSelectedValues.map(val => {
1674
+ const cachedOption = selectedItemsCacheRef.current.get(val);
1675
+ return _extends({
1676
+ value: val,
1677
+ label: (cachedOption == null ? void 0 : cachedOption.label) || String(val),
1678
+ key: (cachedOption == null ? void 0 : cachedOption.key) || val,
1679
+ title: cachedOption == null ? void 0 : cachedOption.title,
1680
+ optionSuffix: cachedOption == null ? void 0 : cachedOption.optionSuffix,
1681
+ optionSuffixInfo: cachedOption == null ? void 0 : cachedOption.optionSuffixInfo,
1682
+ optionTooltipInfo: cachedOption == null ? void 0 : cachedOption.optionTooltipInfo,
1683
+ disabled: cachedOption == null ? void 0 : cachedOption.disabled
1684
+ }, (cachedOption == null ? void 0 : cachedOption.children) && {
1685
+ children: cachedOption.children
1686
+ });
1687
+ });
1688
+
1689
+ // Combine source options with virtual options for missing selected values
1690
+ // When not searching, add virtual options at the beginning so selected items appear first
1691
+ // When searching, still include them if they match the search (handled by filterTreeData)
1692
+ const allOptions = hasSearchQuery ? [...sourceOptions, ...virtualOptions] : [...virtualOptions, ...sourceOptions];
1693
+ if (!(allOptions != null && allOptions.length)) return [];
941
1694
  const enhanceOptions = opts => opts.map(opt => {
942
1695
  const decoratedTitle = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_CapRow.default, {
943
1696
  className: _styles.default['cap-unified-select-option-with-suffix'],
944
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_CapLabel.default, {
945
- type: "label14",
1697
+ justify: "space-between",
1698
+ align: "middle",
1699
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
946
1700
  className: _styles.default['cap-unified-select-option-label'],
947
- children: opt == null ? void 0 : opt.label
948
- }), (opt == null ? void 0 : opt.optionSuffix) && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
949
- className: _styles.default['cap-unified-select-option-suffix'],
950
- children: [opt == null ? void 0 : opt.optionSuffix, ' ', (opt == null ? void 0 : opt.optionSuffixInfo) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapTooltipWithInfo.default, {
951
- title: opt == null ? void 0 : opt.optionSuffixInfo
1701
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapLabel.default, {
1702
+ type: "label14",
1703
+ children: opt == null ? void 0 : opt.label
1704
+ })
1705
+ }), ((opt == null ? void 0 : opt.optionSuffix) || (opt == null ? void 0 : opt.optionTooltipInfo)) && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
1706
+ className: _styles.default['cap-unified-select-option-end'],
1707
+ children: [(opt == null ? void 0 : opt.optionSuffix) && /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
1708
+ className: _styles.default['cap-unified-select-option-suffix'],
1709
+ children: [opt == null ? void 0 : opt.optionSuffix, (opt == null ? void 0 : opt.optionSuffixInfo) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapTooltipWithInfo.default, {
1710
+ title: opt == null ? void 0 : opt.optionSuffixInfo
1711
+ })]
1712
+ }), (opt == null ? void 0 : opt.optionTooltipInfo) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapTooltipWithInfo.default, {
1713
+ title: opt == null ? void 0 : opt.optionTooltipInfo
952
1714
  })]
953
- }), (opt == null ? void 0 : opt.optionTooltipInfo) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapTooltipWithInfo.default, {
954
- title: opt == null ? void 0 : opt.optionTooltipInfo
955
1715
  })]
956
1716
  });
957
1717
  return _extends({}, opt, {
@@ -960,26 +1720,43 @@ const CapUnifiedSelect = _ref4 => {
960
1720
  children: opt != null && opt.children ? enhanceOptions(opt.children) : []
961
1721
  });
962
1722
  });
963
- return isTree ? enhanceOptions(options) : options.map(opt => _extends({}, opt, {
1723
+ return isTree ? enhanceOptions(allOptions) : allOptions.map(opt => _extends({}, opt, {
964
1724
  title: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_CapRow.default, {
965
1725
  className: _styles.default['cap-unified-select-option-with-suffix'],
966
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_CapLabel.default, {
967
- type: "label14",
1726
+ justify: "space-between",
1727
+ align: "middle",
1728
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
968
1729
  className: _styles.default['cap-unified-select-option-label'],
969
- children: opt == null ? void 0 : opt.label
970
- }), (opt == null ? void 0 : opt.optionSuffix) && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
971
- className: _styles.default['cap-unified-select-option-suffix'],
972
- children: [opt == null ? void 0 : opt.optionSuffix, ' ', (opt == null ? void 0 : opt.optionSuffixInfo) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapTooltipWithInfo.default, {
973
- title: opt == null ? void 0 : opt.optionSuffixInfo
1730
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapLabel.default, {
1731
+ type: "label14",
1732
+ children: opt == null ? void 0 : opt.label
1733
+ })
1734
+ }), ((opt == null ? void 0 : opt.optionSuffix) || (opt == null ? void 0 : opt.optionTooltipInfo)) && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
1735
+ className: _styles.default['cap-unified-select-option-end'],
1736
+ children: [(opt == null ? void 0 : opt.optionSuffix) && /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
1737
+ className: _styles.default['cap-unified-select-option-suffix'],
1738
+ children: [opt == null ? void 0 : opt.optionSuffix, (opt == null ? void 0 : opt.optionSuffixInfo) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapTooltipWithInfo.default, {
1739
+ title: opt == null ? void 0 : opt.optionSuffixInfo
1740
+ })]
1741
+ }), (opt == null ? void 0 : opt.optionTooltipInfo) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapTooltipWithInfo.default, {
1742
+ title: opt == null ? void 0 : opt.optionTooltipInfo
974
1743
  })]
975
- }), (opt == null ? void 0 : opt.optionTooltipInfo) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapTooltipWithInfo.default, {
976
- title: opt == null ? void 0 : opt.optionTooltipInfo
977
1744
  })]
978
1745
  }),
979
1746
  label: opt == null ? void 0 : opt.label
980
1747
  }));
981
- }, [isTree, options]);
982
- const filteredTree = (0, _react.useMemo)(() => filterTreeData(dataSource, searchText, searchBasedOn), [dataSource, searchText, searchBasedOn]);
1748
+ }, [isTree, mergedOptions, orderedOptions, searchText, value, findValueInOptions]);
1749
+ const filteredTree = (0, _react.useMemo)(() => {
1750
+ const selectedValues = Array.isArray(tempValue) ? tempValue : tempValue ? [tempValue] : [];
1751
+
1752
+ // If staticValue is true, use local filtering on existing options
1753
+ // If staticValue is false, still use local filtering for immediate feedback,
1754
+ // but onSearch callback will be triggered for parent to update options
1755
+ // Always include selectedValues to ensure uploaded/selected items are visible
1756
+ // This ensures that when dev uploads values, they remain visible in the dropdown
1757
+ // even if they're not in the options array yet
1758
+ return filterTreeData(dataSource, searchText.trim(), searchBasedOn, selectedValues.length > 0 ? selectedValues : undefined);
1759
+ }, [dataSource, searchText, searchBasedOn, tempValue]);
983
1760
  const treeMaps = (0, _react.useMemo)(() => buildTreeMaps(options), [options]);
984
1761
  const selectedLeafCount = (0, _react.useMemo)(() => countSelectedLeaves(treeMaps, Array.isArray(tempValue) ? tempValue : undefined), [treeMaps, tempValue]);
985
1762
  const displayValue = dropdownOpen ? tempValue : value;
@@ -1024,28 +1801,344 @@ const CapUnifiedSelect = _ref4 => {
1024
1801
  return null;
1025
1802
  }, [isMulti, displayValue, treeMaps]);
1026
1803
  const handleConfirm = (0, _react.useCallback)(() => {
1804
+ // Mark as interacted since user clicked confirm (explicit action)
1805
+ hasInteractedRef.current = true;
1806
+
1807
+ // Reorder options based on selection order when confirm is clicked
1808
+ // Use mergedOptions to include paginated options if they exist
1809
+ const optionsToReorder = mergedOptions;
1810
+ if (isMulti && Array.isArray(tempValue) && tempValue.length > 0) {
1811
+ // Reorder the options (includes paginated if they exist)
1812
+ const reordered = reorderOptionsBySelection(optionsToReorder, tempValue);
1813
+ setOrderedOptions(reordered);
1814
+ } else if (!isMulti && tempValue && !Array.isArray(tempValue)) {
1815
+ // For single select, move selected item to top
1816
+ const reordered = reorderOptionsBySelection(optionsToReorder, [tempValue]);
1817
+ setOrderedOptions(reordered);
1818
+ } else {
1819
+ // No selection, reset to original order
1820
+ setOrderedOptions(null);
1821
+ }
1027
1822
  onChange == null || onChange(tempValue);
1028
1823
  setDropdownOpen(false);
1029
- setSearchText('');
1824
+ // Always clear searching state since search operation is complete
1825
+ setIsSearching(false);
1826
+ searchClearedTimeRef.current = null; // Clear search cleared timestamp
1827
+ // Clear search text on confirm only if resetSearch is true
1828
+ // This allows users to keep their search when reopening the dropdown if desired
1829
+ if (resetSearch) {
1830
+ setSearchText('');
1831
+ lastSearchQueryRef.current = ''; // Clear search query ref
1832
+ }
1833
+ // Call resetData to allow developer to reload initial data
1834
+ if (resetData) {
1835
+ // Store current options before calling resetData to detect when they update
1836
+ prevOptionsBeforeResetRef.current = mergedOptions;
1837
+ setIsResettingData(true);
1838
+ resetDataCalledRef.current = true;
1839
+ resetDataCalledTimeRef.current = Date.now();
1840
+ resetData();
1841
+ }
1030
1842
  onConfirm == null || onConfirm(tempValue);
1031
- }, [onChange, onConfirm, tempValue]);
1843
+ }, [onChange, onConfirm, tempValue, resetSearch, isMulti, mergedOptions, reorderOptionsBySelection, resetData]);
1032
1844
  const handleClearAll = (0, _react.useCallback)(() => {
1845
+ // Mark as interacted since user clicked clear (explicit action)
1846
+ hasInteractedRef.current = true;
1033
1847
  const cleared = isMulti ? [] : undefined;
1034
1848
  setTempValue(cleared);
1035
1849
  onChange == null || onChange(cleared);
1036
1850
  setDropdownOpen(false);
1037
- }, [isMulti, onChange]);
1851
+ // Call resetData to allow developer to reload initial data
1852
+ if (resetData) {
1853
+ // Store current options before calling resetData to detect when they update
1854
+ prevOptionsBeforeResetRef.current = options;
1855
+ setIsResettingData(true);
1856
+ resetDataCalledRef.current = true;
1857
+ resetDataCalledTimeRef.current = Date.now();
1858
+ resetData();
1859
+ }
1860
+ }, [isMulti, onChange, resetData, options]);
1038
1861
  const handleDropdownVisibilityChange = (0, _react.useCallback)(open => {
1039
1862
  if (readOnly) {
1040
1863
  return;
1041
1864
  }
1042
- if (!open && !customPopupRender) {
1043
- onChange == null || onChange(tempValue);
1044
- } else if (!open) {
1045
- setTempValue(value);
1865
+ if (open) {
1866
+ // Reset interaction tracking when dropdown opens
1867
+ // Store initial value (not tempValue) to detect if user makes changes
1868
+ // This ensures we track changes from the actual selected value, not temporary state
1869
+ initialTempValueRef.current = value;
1870
+ hasInteractedRef.current = false;
1871
+ resetDataCalledRef.current = false;
1872
+ // Reset fetchMissingOptions tracking to allow re-checking when dropdown opens
1873
+ fetchMissingOptionsCalledRef.current = false;
1874
+ lastMissingValuesRef.current = '';
1875
+ // Clear any pending search timeouts
1876
+ if (searchTimeoutRef.current) {
1877
+ clearTimeout(searchTimeoutRef.current);
1878
+ searchTimeoutRef.current = null;
1879
+ }
1880
+ // Clear any pending scroll loading timeouts
1881
+ if (scrollLoadingTimeoutRef.current) {
1882
+ clearTimeout(scrollLoadingTimeoutRef.current);
1883
+ scrollLoadingTimeoutRef.current = null;
1884
+ }
1885
+ if (scrollThrottleTimeoutRef.current) {
1886
+ clearTimeout(scrollThrottleTimeoutRef.current);
1887
+ scrollThrottleTimeoutRef.current = null;
1888
+ }
1889
+ // Reset loading states
1890
+ setIsSearching(false);
1891
+ searchClearedTimeRef.current = null; // Clear search cleared timestamp
1892
+ setIsLoadingOnScroll(false);
1893
+ isScrollProcessingRef.current = false;
1894
+ // Safety check: Clear isResettingData if it's still true when opening
1895
+ // This handles cases where options updated while dropdown was closed
1896
+ if (isResettingData) {
1897
+ setIsResettingData(false);
1898
+ // Update ref to current options to prevent false positives
1899
+ prevOptionsBeforeResetRef.current = options;
1900
+ // Clear timestamp
1901
+ resetDataCalledTimeRef.current = null;
1902
+ }
1903
+ } else {
1904
+ // Dropdown is closing
1905
+ if (!customPopupRender) {
1906
+ onChange == null || onChange(tempValue);
1907
+ } else {
1908
+ setTempValue(value);
1909
+ }
1910
+ // Clear search when closing (if enabled)
1911
+ if (resetSearch) {
1912
+ setSearchText('');
1913
+ setIsSearching(false);
1914
+ lastSearchQueryRef.current = ''; // Clear search query ref
1915
+ searchClearedTimeRef.current = null; // Clear search cleared timestamp
1916
+ }
1917
+ // Reset scroll loading state
1918
+ setIsLoadingOnScroll(false);
1919
+ isScrollProcessingRef.current = false;
1920
+ if (scrollLoadingTimeoutRef.current) {
1921
+ clearTimeout(scrollLoadingTimeoutRef.current);
1922
+ scrollLoadingTimeoutRef.current = null;
1923
+ }
1924
+ if (scrollThrottleTimeoutRef.current) {
1925
+ clearTimeout(scrollThrottleTimeoutRef.current);
1926
+ scrollThrottleTimeoutRef.current = null;
1927
+ }
1928
+ scrollContainerRef.current = null;
1929
+
1930
+ // Only call resetData if user actually interacted (selected, searched, etc.)
1931
+ // and resetData hasn't been called already in this session
1932
+ // This prevents multiple API calls when user just opens/closes without interaction
1933
+ if (resetData && hasInteractedRef.current && !resetDataCalledRef.current) {
1934
+ // Store current options before calling resetData to detect when they update
1935
+ prevOptionsBeforeResetRef.current = options;
1936
+ setIsResettingData(true);
1937
+ resetDataCalledRef.current = true;
1938
+ resetDataCalledTimeRef.current = Date.now();
1939
+ resetData();
1940
+ } else if (!hasInteractedRef.current) {
1941
+ // User did nothing - reset everything as if it's a fresh load
1942
+ // Clear any pending operations
1943
+ if (searchTimeoutRef.current) {
1944
+ clearTimeout(searchTimeoutRef.current);
1945
+ searchTimeoutRef.current = null;
1946
+ }
1947
+ setIsSearching(false);
1948
+ setIsResettingData(false);
1949
+ // Reset search query ref
1950
+ lastSearchQueryRef.current = '';
1951
+ }
1952
+
1953
+ // Reset interaction flag for next session
1954
+ hasInteractedRef.current = false;
1046
1955
  }
1047
1956
  setDropdownOpen(open);
1048
- }, [customPopupRender, value, onChange, tempValue, readOnly]);
1957
+ }, [customPopupRender, value, onChange, tempValue, readOnly, resetSearch, resetData, options, isResettingData]);
1958
+ const handleFooterDownload = (0, _react.useCallback)(() => {
1959
+ const currentValues = Array.isArray(tempValue) ? tempValue : tempValue ? [tempValue] : [];
1960
+ onFooterDownloadChange == null || onFooterDownloadChange(currentValues);
1961
+ }, [tempValue, onFooterDownloadChange]);
1962
+ const handleUpload = (0, _react.useCallback)(() => {
1963
+ onUpload == null || onUpload();
1964
+ setDropdownOpen(false);
1965
+ }, [onUpload]);
1966
+ const handleSearchChange = (0, _react.useCallback)(e => {
1967
+ const query = e.target.value;
1968
+ setSearchText(query);
1969
+
1970
+ // Trigger search handler (handles debouncing and minLength check)
1971
+ handleSearch(query);
1972
+ }, [handleSearch]);
1973
+ const handleSearchKeyDown = (0, _react.useCallback)(e => {
1974
+ // Stop propagation of backspace and delete keys to prevent TreeSelect from deselecting items
1975
+ // The input itself will handle the deletion, we just need to prevent TreeSelect from handling it
1976
+ if (e.key === 'Backspace' || e.key === 'Delete') {
1977
+ e.stopPropagation();
1978
+ }
1979
+ // Also stop Escape key to prevent dropdown from closing when clearing search
1980
+ if (e.key === 'Escape' && searchText.length > 0) {
1981
+ e.stopPropagation();
1982
+ }
1983
+ }, [searchText]);
1984
+
1985
+ // Handle scroll event - automatically checks if scroll is near bottom
1986
+ // Developer handles hasMore and isLoading conditions in onPopupScroll callback
1987
+ // Using refs to avoid recreating the callback when options change
1988
+ const handleScroll = (0, _react.useCallback)(event => {
1989
+ if (!onPopupScroll) return;
1990
+ const target = event.target;
1991
+ if (!target) return;
1992
+
1993
+ // Check if scroll is near bottom
1994
+ const isNearBottom = Math.floor(target.scrollHeight - target.scrollTop) <= target.clientHeight;
1995
+
1996
+ // Only call onPopupScroll if scroll is near bottom
1997
+ // Developer will handle hasMore and isLoading checks inside the callback
1998
+ if (!isNearBottom) {
1999
+ // Reset processing flag when not near bottom
2000
+ isScrollProcessingRef.current = false;
2001
+ return;
2002
+ }
2003
+
2004
+ // Prevent multiple scroll triggers while already processing
2005
+ // This ensures we don't trigger multiple API calls simultaneously
2006
+ if (isScrollProcessingRef.current) return;
2007
+
2008
+ // Prevent multiple scroll triggers while already loading
2009
+ // This ensures loading state is managed properly and data loading completes
2010
+ if (isLoadingOnScroll) return;
2011
+
2012
+ // Don't trigger if there are no more items to load
2013
+ // This prevents showing loading state when all items are exhausted
2014
+ if (!hasMore) {
2015
+ isScrollProcessingRef.current = false;
2016
+ return;
2017
+ }
2018
+
2019
+ // Throttle scroll events to prevent rapid-fire API calls
2020
+ // Clear any existing throttle timeout
2021
+ if (scrollThrottleTimeoutRef.current) {
2022
+ clearTimeout(scrollThrottleTimeoutRef.current);
2023
+ }
2024
+
2025
+ // Set processing flag immediately to prevent duplicate calls
2026
+ isScrollProcessingRef.current = true;
2027
+
2028
+ // Throttle the actual API call to prevent multiple rapid triggers
2029
+ scrollThrottleTimeoutRef.current = setTimeout(() => {
2030
+ // Double-check we're still near bottom and not loading
2031
+ const stillNearBottom = Math.floor(target.scrollHeight - target.scrollTop) <= target.clientHeight;
2032
+ // Also check if hasMore is still true (might have changed during throttle delay)
2033
+ if (!stillNearBottom || isLoadingOnScroll || !hasMore) {
2034
+ isScrollProcessingRef.current = false;
2035
+ return;
2036
+ }
2037
+
2038
+ // Store current options count and options reference before triggering load
2039
+ // This helps detect when new data arrives
2040
+ // Use ref to get current options without depending on options.length
2041
+ const currentOptions = optionsRef.current;
2042
+ prevOptionsCountRef.current = currentOptions.length;
2043
+ prevOptionsRefForScroll.current = currentOptions;
2044
+ // Also store the count at scroll trigger time for orderedOptions update
2045
+ scrollTriggerOptionsCountRef.current = currentOptions.length;
2046
+
2047
+ // Show loading indicator when scrolling near bottom
2048
+ // This happens before calling onPopupScroll to provide immediate feedback
2049
+ setIsLoadingOnScroll(true);
2050
+
2051
+ // Clear any existing timeout
2052
+ if (scrollLoadingTimeoutRef.current) {
2053
+ clearTimeout(scrollLoadingTimeoutRef.current);
2054
+ scrollLoadingTimeoutRef.current = null;
2055
+ }
2056
+
2057
+ // Mark as interacted when user scrolls (triggers data loading)
2058
+ hasInteractedRef.current = true;
2059
+
2060
+ // Call the developer's scroll handler - component already checked scroll position
2061
+ // Developer should check hasMore and isLoading inside the callback
2062
+ // This triggers the async data loading
2063
+ onPopupScroll();
2064
+
2065
+ // Set a fallback timeout to clear loading if options don't change
2066
+ // This prevents loading from staying forever if data never arrives
2067
+ // Using a longer timeout (10 seconds) to give enough time for slow API calls
2068
+ scrollLoadingTimeoutRef.current = setTimeout(() => {
2069
+ // Only clear if still loading (options change detection might have cleared it already)
2070
+ setIsLoadingOnScroll(prev => {
2071
+ if (prev) {
2072
+ // Clear the timeout reference when clearing loading state
2073
+ scrollLoadingTimeoutRef.current = null;
2074
+ // Reset processing flag when loading times out
2075
+ isScrollProcessingRef.current = false;
2076
+ return false;
2077
+ }
2078
+ return prev;
2079
+ });
2080
+ }, _constants.TIMEOUTS.SCROLL_LOADING_TIMEOUT);
2081
+ }, 150); // 150ms throttle to prevent rapid-fire events
2082
+ }, [onPopupScroll, isLoadingOnScroll, hasMore]);
2083
+
2084
+ // Setup scroll listener for onPopupScroll
2085
+ (0, _react.useEffect)(() => {
2086
+ if (!onPopupScroll || !dropdownOpen) return;
2087
+
2088
+ // Use a small delay to ensure DOM is ready
2089
+ const timeoutId = setTimeout(() => {
2090
+ // Find the scrollable container in the dropdown
2091
+ const findScrollContainer = () => {
2092
+ // Try to find the Ant Design dropdown scroll container
2093
+ // Look for dropdowns that are currently visible (not hidden)
2094
+ const dropdowns = document.querySelectorAll('.ant-select-dropdown:not(.ant-select-dropdown-hidden)');
2095
+ if (dropdowns.length === 0) return null;
2096
+
2097
+ // Get the last opened dropdown (most recent)
2098
+ const dropdown = Array.from(dropdowns).pop();
2099
+ if (!dropdown) return null;
2100
+
2101
+ // Look for the scrollable list container
2102
+ const treeList = dropdown.querySelector('.ant-select-tree-list-holder');
2103
+ if (treeList && treeList.scrollHeight > treeList.clientHeight) {
2104
+ return treeList;
2105
+ }
2106
+
2107
+ // Try alternative selectors
2108
+ const virtualList = dropdown.querySelector('.rc-virtual-list-holder');
2109
+ if (virtualList && virtualList.scrollHeight > virtualList.clientHeight) {
2110
+ return virtualList;
2111
+ }
2112
+
2113
+ // Fallback to dropdown itself if it's scrollable
2114
+ if (dropdown.scrollHeight > dropdown.clientHeight) {
2115
+ return dropdown;
2116
+ }
2117
+ return null;
2118
+ };
2119
+ const scrollContainer = findScrollContainer();
2120
+ if (scrollContainer) {
2121
+ scrollContainerRef.current = scrollContainer;
2122
+ scrollContainer.addEventListener('scroll', handleScroll, {
2123
+ passive: true
2124
+ });
2125
+ }
2126
+ }, _constants.TIMEOUTS.SCROLL_CONTAINER_DELAY);
2127
+ return () => {
2128
+ clearTimeout(timeoutId);
2129
+ // Clear throttle timeout when cleaning up
2130
+ if (scrollThrottleTimeoutRef.current) {
2131
+ clearTimeout(scrollThrottleTimeoutRef.current);
2132
+ scrollThrottleTimeoutRef.current = null;
2133
+ }
2134
+ if (scrollContainerRef.current) {
2135
+ scrollContainerRef.current.removeEventListener('scroll', handleScroll);
2136
+ scrollContainerRef.current = null;
2137
+ }
2138
+ // Reset processing flag when listener is removed
2139
+ isScrollProcessingRef.current = false;
2140
+ };
2141
+ }, [onPopupScroll, dropdownOpen, handleScroll]);
1049
2142
  const renderHeader = (0, _react.useMemo)(() => {
1050
2143
  if (!headerLabel && !tooltip) return null;
1051
2144
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
@@ -1085,16 +2178,17 @@ const CapUnifiedSelect = _ref4 => {
1085
2178
  size: "s",
1086
2179
  className: _styles.default['cap-unified-select-search-icon']
1087
2180
  }),
1088
- placeholder: "Search",
2181
+ placeholder: _constants.DEFAULTS.SEARCH_PLACEHOLDER,
1089
2182
  variant: "borderless",
1090
2183
  value: searchText,
1091
- onChange: e => setSearchText(e.target.value),
2184
+ onChange: handleSearchChange,
2185
+ onKeyDown: handleSearchKeyDown,
1092
2186
  allowClear: true
1093
2187
  })
1094
2188
  }), isMulti && showUpload && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_CapRow.default, {
1095
2189
  className: _styles.default['cap-unified-select-upload-container'],
1096
2190
  align: "middle",
1097
- onClick: onUpload,
2191
+ onClick: handleUpload,
1098
2192
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_CapIcon.default, {
1099
2193
  type: "upload",
1100
2194
  size: "s",
@@ -1102,20 +2196,71 @@ const CapUnifiedSelect = _ref4 => {
1102
2196
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapLabel.default, {
1103
2197
  type: "label14",
1104
2198
  className: _styles.default['cap-unified-select-upload-label'],
1105
- children: "Upload"
2199
+ children: uploadLabel
1106
2200
  })]
1107
- }), isMulti && currentItems.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(SelectAllCheckbox, {
2201
+ }), isMulti && staticValue && currentItems.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(SelectAllCheckbox, {
1108
2202
  currentItems: currentItems,
1109
2203
  tempValue: Array.isArray(tempValue) ? tempValue : undefined,
1110
2204
  setTempValue: val => setTempValue(val),
1111
2205
  processTreeData: buildTreeMaps
1112
- }), currentItems.length === 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(NoResult, {
2206
+ }), currentItems.length === 0 ? isSearching || isResettingData ? /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
2207
+ className: _styles.default['cap-unified-select-loading-container'],
2208
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_CapRow.default, {
2209
+ align: "middle",
2210
+ justify: "center",
2211
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapSpin.default, {
2212
+ size: "small"
2213
+ })
2214
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapRow.default, {
2215
+ align: "middle",
2216
+ justify: "center",
2217
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapLabel.default, {
2218
+ type: "label14",
2219
+ children: "Loading..."
2220
+ })
2221
+ })]
2222
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(NoResult, {
1113
2223
  noResultCustomText: noResultCustomText,
1114
2224
  className: className,
1115
2225
  showUpload: showUpload,
1116
2226
  options: options,
1117
2227
  noResultCustomIcon: noResultCustomIcon
1118
- }) : menu, currentItems.length > 0 && isMulti && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
2228
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
2229
+ className: _styles.default['cap-unified-select-menu-wrapper'],
2230
+ children: [menu, (isSearching || isResettingData) && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
2231
+ className: _styles.default['cap-unified-select-loading-overlay'],
2232
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_CapRow.default, {
2233
+ align: "middle",
2234
+ justify: "center",
2235
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapSpin.default, {
2236
+ size: "small"
2237
+ })
2238
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapRow.default, {
2239
+ align: "middle",
2240
+ justify: "center",
2241
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapLabel.default, {
2242
+ type: "label14",
2243
+ children: "Loading..."
2244
+ })
2245
+ })]
2246
+ }), isLoadingOnScroll && onPopupScroll && hasMore && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
2247
+ className: _styles.default['cap-unified-select-loading-overlay'],
2248
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_CapRow.default, {
2249
+ align: "middle",
2250
+ justify: "center",
2251
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapSpin.default, {
2252
+ size: "small"
2253
+ })
2254
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapRow.default, {
2255
+ align: "middle",
2256
+ justify: "center",
2257
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapLabel.default, {
2258
+ type: "label14",
2259
+ children: "Loading..."
2260
+ })
2261
+ })]
2262
+ })]
2263
+ }), currentItems.length > 0 && isMulti && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
1119
2264
  className: _styles.default['cap-unified-select-confirm-container'],
1120
2265
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
1121
2266
  className: _styles.default['cap-unified-select-confirm-button-group'],
@@ -1132,12 +2277,21 @@ const CapUnifiedSelect = _ref4 => {
1132
2277
  size: "small",
1133
2278
  onClick: handleClearAll,
1134
2279
  children: clearText
1135
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_CapLabel.default, {
1136
- className: _styles.default['cap-unified-select-selected-count'],
1137
- children: [selectedLeafCount, " selected"]
2280
+ }), onFooterDownloadChange && selectedLeafCount > 0 && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_CapRow.default, {
2281
+ className: _styles.default['cap-unified-select-footer-download-container'],
2282
+ align: "middle",
2283
+ onClick: handleFooterDownload,
2284
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_CapIcon.default, {
2285
+ type: "download",
2286
+ size: "s",
2287
+ className: _styles.default['cap-unified-select-footer-download-icon']
2288
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_CapLabel.default, {
2289
+ className: _styles.default['cap-unified-select-footer-download-label'],
2290
+ children: [selectedLeafCount, " selected"]
2291
+ })]
1138
2292
  })]
1139
2293
  })
1140
- }), (type === SELECT_TYPES.SELECT || type === SELECT_TYPES.TREE_SELECT) && allowClear && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapRow.default, {
2294
+ }), (type === _constants.SELECT_TYPES.SELECT || type === _constants.SELECT_TYPES.TREE_SELECT) && allowClear && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapRow.default, {
1141
2295
  className: _styles.default['cap-unified-select-tree-clear-container'],
1142
2296
  onClick: handleClearAll,
1143
2297
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapLabel.default, {
@@ -1146,17 +2300,60 @@ const CapUnifiedSelect = _ref4 => {
1146
2300
  })
1147
2301
  })]
1148
2302
  });
1149
- }, [customPopupRender, filteredTree, searchText, isMulti, showUpload, onUpload, noResultCustomText, noResultCustomIcon, options, type, tempValue, handleConfirm, handleClearAll, popoverClassName, className, selectedLeafCount, clearText, allowClear]);
2303
+ }, [customPopupRender, filteredTree, searchText, isMulti, showUpload, uploadLabel, handleUpload, noResultCustomText, noResultCustomIcon, options, type, tempValue, handleConfirm, handleClearAll, popoverClassName, className, selectedLeafCount, clearText, allowClear, staticValue, showSearch, onFooterDownloadChange, handleFooterDownload, isSearching, handleSearchChange, handleSearchKeyDown, isLoadingOnScroll, onPopupScroll, hasMore, isResettingData]);
1150
2304
  const combinedClassName = (0, _react.useMemo)(() => (0, _classnames.default)(containerClassName, _styles.default['cap-unified-tree-select'], {
1151
2305
  [_styles.default['cap-unified-tree-select-readonly']]: readOnly
1152
2306
  }, className), [containerClassName, className, readOnly]);
2307
+
2308
+ // Handle onChange for single select - detect clear button click and call resetData
2309
+ const handleSingleSelectChange = (0, _react.useCallback)(newValue => {
2310
+ // Mark as interacted if value changed from initial
2311
+ if (newValue !== initialTempValueRef.current) {
2312
+ hasInteractedRef.current = true;
2313
+ }
2314
+
2315
+ // If value is cleared (becomes undefined), call resetData
2316
+ if (newValue === undefined || newValue === null) {
2317
+ if (resetData) {
2318
+ // Store current options before calling resetData to detect when they update
2319
+ prevOptionsBeforeResetRef.current = options;
2320
+ setIsResettingData(true);
2321
+ resetDataCalledRef.current = true;
2322
+ resetDataCalledTimeRef.current = Date.now();
2323
+ resetData();
2324
+ }
2325
+ }
2326
+ onChange == null || onChange(newValue);
2327
+ }, [onChange, resetData, options]);
2328
+
2329
+ // Handle onChange for multi select - detect clear and call resetData
2330
+ const handleMultiSelectChange = (0, _react.useCallback)(newValue => {
2331
+ // Mark as interacted if value changed from initial
2332
+ const initialValue = initialTempValueRef.current;
2333
+ const hasChanged = Array.isArray(newValue) && Array.isArray(initialValue) ? newValue.length !== initialValue.length || !newValue.every(v => initialValue.includes(v)) || !initialValue.every(v => newValue.includes(v)) : newValue !== initialValue;
2334
+ if (hasChanged) {
2335
+ hasInteractedRef.current = true;
2336
+ }
2337
+ // If value is cleared (becomes empty array or undefined), call resetData
2338
+ if (newValue === undefined || newValue === null || Array.isArray(newValue) && newValue.length === 0) {
2339
+ if (resetData) {
2340
+ // Store current options before calling resetData to detect when they update
2341
+ prevOptionsBeforeResetRef.current = options;
2342
+ setIsResettingData(true);
2343
+ resetDataCalledRef.current = true;
2344
+ resetDataCalledTimeRef.current = Date.now();
2345
+ resetData();
2346
+ }
2347
+ }
2348
+ setTempValue(newValue);
2349
+ }, [resetData, options]);
1153
2350
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_CapRow.default, {
1154
2351
  className: className,
1155
2352
  children: [renderHeader, /*#__PURE__*/(0, _jsxRuntime.jsx)(_antdV.TreeSelect, _extends({
1156
2353
  treeData: filteredTree,
1157
2354
  value: customPopupRender ? tempValue : value,
1158
2355
  treeNodeLabelProp: "label",
1159
- onChange: isMulti ? setTempValue : onChange,
2356
+ onChange: isMulti ? handleMultiSelectChange : handleSingleSelectChange,
1160
2357
  placeholder: placeholder,
1161
2358
  showSearch: false,
1162
2359
  maxTagCount: 0,
@@ -1178,12 +2375,12 @@ const CapUnifiedSelect = _ref4 => {
1178
2375
  showCheckedStrategy: _antdV.TreeSelect.SHOW_CHILD,
1179
2376
  open: dropdownOpen,
1180
2377
  onOpenChange: handleDropdownVisibilityChange,
1181
- virtual: true,
2378
+ virtual: !enableVirtualization,
1182
2379
  popupMatchSelectWidth: false,
1183
2380
  disabled: disabled,
1184
2381
  filterTreeNode: false,
1185
- listHeight: 256,
1186
- listItemHeight: 32,
2382
+ listHeight: _constants.DEFAULTS.LIST_HEIGHT,
2383
+ listItemHeight: virtualRowHeight,
1187
2384
  popupRender: renderCustomDropdown
1188
2385
  }, rest)), isError && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CapLabel.default, {
1189
2386
  className: _styles.default['cap-unified-select-status'],
@@ -1834,6 +3031,37 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
1834
3031
 
1835
3032
  /***/ }),
1836
3033
 
3034
+ /***/ 7579:
3035
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
3036
+
3037
+ "use strict";
3038
+
3039
+
3040
+ exports.__esModule = true;
3041
+ exports["default"] = void 0;
3042
+ var _antdV = __webpack_require__(4273);
3043
+ var _react = _interopRequireDefault(__webpack_require__(9206));
3044
+ var _jsxRuntime = __webpack_require__(4848);
3045
+ const _excluded = ["className"];
3046
+ /**
3047
+ * CapSpin - Migrated to Ant Design v5
3048
+ */
3049
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
3050
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
3051
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
3052
+ const CapSpin = _ref => {
3053
+ let {
3054
+ className
3055
+ } = _ref,
3056
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded);
3057
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_antdV.Spin, _extends({
3058
+ className: className
3059
+ }, rest));
3060
+ };
3061
+ var _default = exports["default"] = CapSpin;
3062
+
3063
+ /***/ }),
3064
+
1837
3065
  /***/ 7659:
1838
3066
  /***/ ((module) => {
1839
3067
 
@@ -1957,7 +3185,7 @@ var ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ = __webpack_require__(1601);
1957
3185
  var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(6314);
1958
3186
  var ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);
1959
3187
  // Module
1960
- ___CSS_LOADER_EXPORT___.push([module.id, `.blaze-ui-cap-unified-select-header-wrapper{display:flex;align-items:center}.blaze-ui-cap-unified-select-header-wrapper.blaze-ui-disabled{opacity:.5;cursor:not-allowed}.blaze-ui-cap-unified-select-header-wrapper .blaze-ui-cap-unified-select-header-label{font-family:"Roboto",sans-serif;font-weight:500;font-size:1rem;line-height:1.429rem;letter-spacing:0}.blaze-ui-cap-unified-select-header-byline-text{font-family:"Roboto",sans-serif;font-weight:400;font-size:.857rem;letter-spacing:0;color:#97a0af}.blaze-ui-cap-unified-select-container{text-align:justify;min-width:13.786rem}.blaze-ui-cap-unified-select-container.blaze-ui-disabled{cursor:not-allowed}.blaze-ui-cap-unified-select-container.ant-select-focused .ant-select-selector{border:1px solid #091e42 !important}.blaze-ui-cap-unified-select-container .blaze-ui-cap-unified-select-more-text{cursor:pointer;color:#091e42;margin-right:.286rem;position:relative}.blaze-ui-cap-unified-select-container .blaze-ui-cap-unified-select-suffix-icon{color:#7a869a}.blaze-ui-cap-unified-select-container .blaze-ui-cap-tooltip-with-info-icon{margin-top:.143rem}.blaze-ui-cap-unified-select-container.blaze-ui-cap-unified-tree-select.blaze-ui-cap-unified-tree-select-readonly{pointer-events:none}.blaze-ui-cap-unified-select-container.blaze-ui-cap-unified-tree-select.blaze-ui-cap-unified-tree-select-readonly .blaze-ui-cap-unified-select-more-text{pointer-events:auto}.blaze-ui-cap-unified-select-container.blaze-ui-cap-unified-tree-select .ant-select-tree-treenode{padding-left:.286rem}.blaze-ui-cap-unified-select-container.blaze-ui-cap-unified-tree-select-readonly .ant-select-selector{background-color:#fff;border-color:#ebecf0 !important;cursor:default}.blaze-ui-cap-unified-select-container.blaze-ui-cap-unified-tree-select-readonly .ant-select-arrow{pointer-events:auto;color:#b3bac5}.blaze-ui-cap-unified-select-container.blaze-ui-cap-unified-tree-select-readonly.ant-select-outlined:hover .ant-select-selector,.blaze-ui-cap-unified-select-container.blaze-ui-cap-unified-tree-select-readonly.ant-select-outlined:active .ant-select-selector,.blaze-ui-cap-unified-select-container.blaze-ui-cap-unified-tree-select-readonly.ant-select-outlined:focus .ant-select-selector{border-color:#ebecf0 !important}.blaze-ui-cap-unified-select-container .blaze-ui-cap-unified-select-status{color:#ea213a}.blaze-ui-cap-unified-select-container .ant-select-outlined:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer):hover .ant-select-selector{border-color:#7a869a}.blaze-ui-cap-unified-select-container .ant-select-selector{background-color:#fff !important;border:.071rem solid #7a869a !important;border-radius:.286rem !important}.blaze-ui-cap-unified-select-container .ant-select-selector .ant-select-selection-placeholder{pointer-events:unset;color:#97a0af;display:flex;align-items:center}.blaze-ui-cap-unified-select-container .ant-select-prefix{font-size:1rem;font-weight:400;color:#091e42;line-height:1.429rem}.blaze-ui-cap-unified-select-container .ant-input-affix-wrapper .ant-input-prefix{left:.857rem}.blaze-ui-cap-unified-select-container .ant-select-selector{border-color:#7a869a !important;box-shadow:none !important;outline:0}.blaze-ui-cap-unified-select-container .ant-btn-variant-solid:not(:disabled):not(.ant-btn-disabled):hover{background-color:#47af46}.blaze-ui-cap-unified-select-container .ant-select-dropdown{margin-top:-0.571rem !important;border-radius:.286rem;background-color:#fff;box-shadow:0 .286rem .571rem -0.143rem rgba(9,30,66,.15),0 0 .071rem 0 rgba(9,30,66,.1);max-height:25.714rem;overflow:visible}.blaze-ui-cap-unified-select-container .ant-select-outlined.ant-select-multiple .ant-select-selection-wrap .ant-select-selection-item{background:rgba(0,0,0,0)}.blaze-ui-cap-unified-select-container .ant-select-multiple .ant-select-selection-wrap .ant-select-selection-item,.blaze-ui-cap-unified-select-container .ant-select-selection-wrap .ant-select-selection-item{background:rgba(0,0,0,0)}.blaze-ui-cap-unified-select-container .ant-select-multiple .ant-select-selection-wrap{align-self:center}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-search-container{border-bottom:.071rem solid #ebecf0 !important;line-height:2.857rem !important}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-search-container .blaze-ui-cap-unified-select-search-icon{color:#b3bac5}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-select-all-container{padding:.643rem 1.071rem;cursor:pointer;display:flex;align-items:center;border-bottom:.071rem solid #ebecf0;height:2.857rem}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-select-all-container .blaze-ui-cap-unified-select-select-all-checkbox{display:contents !important}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-upload-container{cursor:pointer;display:flex;align-items:center;border-bottom:.071rem solid #ebecf0;height:2.857rem;padding-left:1.143rem}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-upload-container .blaze-ui-cap-unified-select-upload-icon{color:#2466ea}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-upload-container .blaze-ui-cap-unified-select-upload-label{margin-left:.857rem;color:#2466ea}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-confirm-container{display:flex;align-items:center;height:3.429rem;padding:.5rem;border-top:.071rem solid #ebecf0}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-confirm-container .blaze-ui-cap-unified-select-confirm-button-group{display:flex;padding-left:.571rem;align-items:center}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-confirm-container .blaze-ui-cap-unified-select-confirm-button-group .blaze-ui-cap-unified-select-confirm-button{background-color:#47af46;height:2.286rem;width:6.714rem;color:#fff}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-confirm-container .blaze-ui-cap-unified-select-confirm-button-group .blaze-ui-cap-unified-select-confirm-button:hover{background-color:#1f9a1d}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-confirm-container .blaze-ui-cap-unified-select-confirm-button-group .blaze-ui-cap-unified-select-confirm-button:disabled{background-color:#a1d8a0}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-confirm-container .blaze-ui-cap-unified-select-confirm-button-group .blaze-ui-cap-unified-select-cancel-button{border:rgba(0,0,0,0);box-shadow:none;width:5.714rem}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-confirm-container .blaze-ui-cap-unified-select-confirm-button-group .blaze-ui-cap-unified-select-selected-count{display:flex;margin-left:auto;font-size:.857rem;font-weight:400;line-height:1.143rem;color:#5e6c84}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-tree-clear-container{display:flex;justify-content:center;align-items:center;height:2.857rem;border-top:.071rem solid #ebecf0;cursor:pointer;color:#091e42}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-tree-clear-container:hover{background-color:#ebecf0}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-tree-clear-container .blaze-ui-cap-unified-select-tree-clear-label{font-size:1rem;font-weight:400}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-no-result{display:flex;flex-direction:column;align-items:center;justify-content:center;height:14.286rem;color:#97a0af;font-size:1rem}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-no-result .blaze-ui-cap-unified-select-no-result-text{font-weight:500}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-option-with-suffix{display:flex;justify-content:flex-start;align-items:center;width:100%;height:100%}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-option-with-suffix .blaze-ui-cap-unified-select-option-label{flex:1}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-option-with-suffix .blaze-ui-cap-unified-select-option-suffix{display:flex;align-items:center;padding:0 .571rem;max-height:1.429rem;white-space:nowrap;margin-left:.571rem}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-option-with-suffix .blaze-ui-cap-tooltip-with-info{margin-left:auto}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-option-with-suffix .blaze-ui-cap-tooltip-with-info .blaze-ui-cap-tooltip-with-info-icon{margin-top:.357rem;color:#42526e}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-option-with-suffix .blaze-ui-cap-tooltip-with-info .blaze-ui-cap-tooltip-with-info-icon .blaze-ui-cap-icon{color:#42526e}.blaze-ui-cap-unified-select-popup .ant-select-dropdown .ant-select-dropdown-menu{margin-top:0 !important}.blaze-ui-cap-unified-select-popup .ant-select-dropdown .ant-select-dropdown-menu .ant-select-dropdown-menu-item{padding:.571rem 1.714rem !important;height:unset !important;font-size:1rem !important}.blaze-ui-cap-unified-select-popup .ant-select-dropdown .ant-select-dropdown-menu-item-disabled{color:rgba(0,0,0,.25) !important;cursor:not-allowed !important;line-height:1.428rem !important;font-size:1rem !important}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-node-content-wrapper{background-color:rgba(0,0,0,0);height:100%}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-node-content-wrapper:hover{background-color:rgba(0,0,0,0)}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-treenode{height:2.857rem;margin-bottom:0}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-treenode:hover{background-color:#fffbe6}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-node-selected{background-color:#f4f5f7 !important}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-treenode-disabled{cursor:not-allowed !important}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-treenode-disabled .blaze-ui-cap-unified-select-option-label{color:#b3bac5}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-treenode-disabled .blaze-ui-cap-icon{color:#b3bac5 !important}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-treenode.ant-select-tree-treenode-selected{background-color:#f4f5f7}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-treenode-leaf .ant-select-tree-switcher-noop{display:none}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-checkbox .ant-select-tree-checkbox-inner{height:1.286rem;width:1.286rem;border:.143rem solid #b3bac5;border-radius:.286rem}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner{background-color:#47af46;border:.143rem solid #47af46 !important}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:hover{background-color:#47af46;border:.143rem solid #47af46 !important}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-checkbox.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner{background-color:#47af46 !important;border-color:#47af46 !important}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-checkbox.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner::after{content:"";position:absolute;top:50%;left:50%;width:.714rem;height:.143rem;background-color:#fff;transform:translate(-50%, -50%);border-radius:.071rem}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-node-content-wrapper{border-radius:0;padding-left:.214rem}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-indent{margin-left:.857rem}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-switcher:not(.ant-select-tree-switcher-noop):hover:before{background-color:rgba(0,0,0,0)}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-switcher .ant-select-tree-switcher-icon{font-size:.857rem;margin-top:1.286rem}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-list-holder-inner{width:fit-content !important;min-width:100%}.blaze-ui-cap-unified-select-popup .ant-tree-select:hover .ant-select-selector{border-color:#7a869a}.blaze-ui-cap-unified-select-popup .ant-tree-select-focused .ant-select-selector,.blaze-ui-cap-unified-select-popup .ant-tree-select-open .ant-select-selector{border-color:#7a869a;box-shadow:none;outline:none}.blaze-ui-cap-unified-select-popup .ant-checkbox-inner{height:1.286rem;width:1.286rem;border:.143rem solid #b3bac5;border-radius:.286rem}.blaze-ui-cap-unified-select-popup .ant-checkbox-wrapper:not(.ant-checkbox-wrapper-disabled):hover .ant-checkbox-checked:not(.ant-checkbox-disabled) .ant-checkbox-inner{background-color:#47af46;border:.143rem solid #47af46 !important}.blaze-ui-cap-unified-select-popup .ant-checkbox-indeterminate .ant-checkbox-inner{background-color:#47af46 !important;border-color:#47af46 !important}.blaze-ui-cap-unified-select-popup .ant-checkbox-indeterminate .ant-checkbox-inner::after{content:"";position:absolute;top:50%;left:50%;width:.714rem;height:.143rem;background-color:#fff;transform:translate(-50%, -50%);border-radius:.071rem}.blaze-ui-cap-unified-select-popup .ant-input-affix-wrapper{padding-left:.571rem;border:none;box-shadow:none;border-radius:0;border-bottom:.071rem solid rgba(0,0,0,0);transition:border-color .2s ease}.blaze-ui-cap-unified-select-popup .ant-input-affix-wrapper:hover{border-bottom:.071rem solid #7a869a !important;box-shadow:none}.blaze-ui-cap-unified-select-popup .ant-input-affix-wrapper:focus-within{border-bottom:.071rem solid #091e42 !important;box-shadow:none;outline:none}.blaze-ui-cap-unified-select-popup .ant-input-affix-wrapper .ant-input{border:none !important;box-shadow:none !important}`, ""]);
3188
+ ___CSS_LOADER_EXPORT___.push([module.id, `.blaze-ui-cap-unified-select-header-wrapper{display:flex;align-items:center}.blaze-ui-cap-unified-select-header-wrapper.blaze-ui-disabled{opacity:.5;cursor:not-allowed}.blaze-ui-cap-unified-select-header-wrapper .blaze-ui-cap-unified-select-header-label{font-family:"Roboto",sans-serif;font-weight:500;font-size:1rem;line-height:1.429rem;letter-spacing:0}.blaze-ui-cap-unified-select-header-byline-text{font-family:"Roboto",sans-serif;font-weight:400;font-size:.857rem;letter-spacing:0;color:#97a0af}.blaze-ui-cap-unified-select-container{text-align:justify;min-width:13.786rem}.blaze-ui-cap-unified-select-container.blaze-ui-disabled{cursor:not-allowed}.blaze-ui-cap-unified-select-container.ant-select-focused .ant-select-selector{border:.071rem solid #091e42 !important}.blaze-ui-cap-unified-select-container .blaze-ui-cap-unified-select-more-text{cursor:pointer;color:#091e42;margin-right:.286rem;position:relative}.blaze-ui-cap-unified-select-container .blaze-ui-cap-unified-select-suffix-icon{color:#7a869a}.blaze-ui-cap-unified-select-container .blaze-ui-cap-tooltip-with-info-icon{margin-top:.143rem}.blaze-ui-cap-unified-select-container.blaze-ui-cap-unified-tree-select.blaze-ui-cap-unified-tree-select-readonly{pointer-events:none}.blaze-ui-cap-unified-select-container.blaze-ui-cap-unified-tree-select.blaze-ui-cap-unified-tree-select-readonly .blaze-ui-cap-unified-select-more-text{pointer-events:auto}.blaze-ui-cap-unified-select-container.blaze-ui-cap-unified-tree-select .ant-select-tree-treenode{padding-left:.286rem}.blaze-ui-cap-unified-select-container.blaze-ui-cap-unified-tree-select-readonly .ant-select-selector{background-color:#fff;border-color:#ebecf0 !important;cursor:default}.blaze-ui-cap-unified-select-container.blaze-ui-cap-unified-tree-select-readonly .ant-select-arrow{pointer-events:auto;color:#b3bac5}.blaze-ui-cap-unified-select-container.blaze-ui-cap-unified-tree-select-readonly.ant-select-outlined:hover .ant-select-selector,.blaze-ui-cap-unified-select-container.blaze-ui-cap-unified-tree-select-readonly.ant-select-outlined:active .ant-select-selector,.blaze-ui-cap-unified-select-container.blaze-ui-cap-unified-tree-select-readonly.ant-select-outlined:focus .ant-select-selector{border-color:#ebecf0 !important}.blaze-ui-cap-unified-select-container .blaze-ui-cap-unified-select-status{color:#ea213a}.blaze-ui-cap-unified-select-container .ant-select-outlined:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer):hover .ant-select-selector{border-color:#7a869a}.blaze-ui-cap-unified-select-container .ant-select-selector{background-color:#fff !important;border:.071rem solid #7a869a !important;border-radius:.286rem !important}.blaze-ui-cap-unified-select-container .ant-select-selector .ant-select-selection-placeholder{pointer-events:unset;color:#97a0af;display:flex;align-items:center}.blaze-ui-cap-unified-select-container .ant-select-prefix{font-size:1rem;font-weight:400;color:#091e42;line-height:1.429rem}.blaze-ui-cap-unified-select-container .ant-input-affix-wrapper .ant-input-prefix{left:.857rem}.blaze-ui-cap-unified-select-container .ant-select-selector{border-color:#7a869a !important;box-shadow:none !important;outline:0}.blaze-ui-cap-unified-select-container .ant-btn-variant-solid:not(:disabled):not(.ant-btn-disabled):hover{background-color:#47af46}.blaze-ui-cap-unified-select-container .ant-select-dropdown{margin-top:-0.571rem !important;border-radius:.286rem;background-color:#fff;box-shadow:0 .286rem .571rem -0.143rem rgba(9,30,66,.15),0 0 .071rem 0 rgba(9,30,66,.1);max-height:25.714rem;overflow:visible}.blaze-ui-cap-unified-select-container .ant-select-outlined.ant-select-multiple .ant-select-selection-wrap .ant-select-selection-item{background:rgba(0,0,0,0)}.blaze-ui-cap-unified-select-container .ant-select-multiple .ant-select-selection-wrap .ant-select-selection-item,.blaze-ui-cap-unified-select-container .ant-select-selection-wrap .ant-select-selection-item{background:rgba(0,0,0,0)}.blaze-ui-cap-unified-select-container .ant-select-multiple .ant-select-selection-wrap{align-self:center}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-search-container{border-bottom:.071rem solid #ebecf0 !important;line-height:2.857rem !important}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-search-container .blaze-ui-cap-unified-select-search-icon{color:#b3bac5}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-select-all-container{padding:.643rem 1.071rem;display:flex;align-items:center;border-bottom:.071rem solid #ebecf0;height:2.857rem}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-select-all-container .blaze-ui-cap-unified-select-select-all-checkbox{display:contents !important}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-upload-container{cursor:pointer;display:flex;align-items:center;border-bottom:.071rem solid #ebecf0;height:2.857rem;padding-left:1.143rem}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-upload-container .blaze-ui-cap-unified-select-upload-icon{color:#2466ea}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-upload-container .blaze-ui-cap-unified-select-upload-label{margin-left:.857rem;color:#2466ea}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-confirm-container{display:flex;align-items:center;height:3.429rem;padding:.5rem;border-top:.071rem solid #ebecf0}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-confirm-container .blaze-ui-cap-unified-select-confirm-button-group{display:flex;padding-left:.571rem;align-items:center;width:100%}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-confirm-container .blaze-ui-cap-unified-select-confirm-button-group .blaze-ui-cap-unified-select-confirm-button{background-color:#47af46;height:2.286rem;width:6.714rem;color:#fff}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-confirm-container .blaze-ui-cap-unified-select-confirm-button-group .blaze-ui-cap-unified-select-confirm-button:hover{background-color:#1f9a1d}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-confirm-container .blaze-ui-cap-unified-select-confirm-button-group .blaze-ui-cap-unified-select-confirm-button:disabled{background-color:#a1d8a0}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-confirm-container .blaze-ui-cap-unified-select-confirm-button-group .blaze-ui-cap-unified-select-cancel-button{border:rgba(0,0,0,0);box-shadow:none;width:5.714rem}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-confirm-container .blaze-ui-cap-unified-select-confirm-button-group .blaze-ui-cap-unified-select-selected-count{display:flex;margin-left:auto;font-size:.857rem;font-weight:400;line-height:1.143rem;color:#5e6c84}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-tree-clear-container{display:flex;justify-content:center;align-items:center;height:2.857rem;border-top:.071rem solid #ebecf0;cursor:pointer;color:#091e42}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-tree-clear-container:hover{background-color:#ebecf0}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-tree-clear-container .blaze-ui-cap-unified-select-tree-clear-label{font-size:1rem;font-weight:400}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-footer-download-container{cursor:pointer;display:flex;align-items:center;margin-left:auto;padding-right:1.143rem}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-footer-download-container:hover{opacity:.8}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-footer-download-container .blaze-ui-cap-unified-select-footer-download-icon{color:#2466ea}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-footer-download-container .blaze-ui-cap-unified-select-footer-download-label{margin-left:.857rem;color:#2466ea;font-family:Roboto,sans-serif;font-weight:400;font-style:normal;font-size:.857rem;line-height:1.143rem;letter-spacing:0;text-align:right}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-no-result{display:flex;flex-direction:column;align-items:center;justify-content:center;height:14.286rem;color:#97a0af;font-size:1rem}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-no-result .blaze-ui-cap-unified-select-no-result-text{font-weight:500}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:14.286rem;width:100%;gap:.571rem}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-loading-more{display:flex;align-items:center;justify-content:center;padding:.857rem;border-top:.071rem solid #ebecf0;color:#97a0af}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-menu-wrapper{position:relative;width:100%}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background-color:rgba(255,255,255,.8);z-index:10;gap:.571rem;color:#97a0af}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-option-with-suffix{display:flex;justify-content:start;align-items:center;width:100%;height:100%;line-height:1.5;vertical-align:middle;flex:1}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-option-with-suffix .blaze-ui-cap-unified-select-option-label{display:flex;align-items:center;flex-shrink:1;min-width:0}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-option-with-suffix .blaze-ui-cap-unified-select-option-end{display:flex;align-items:center;gap:.571rem;flex-shrink:0;margin-left:auto}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-option-with-suffix .blaze-ui-cap-unified-select-option-suffix{display:flex;align-items:center;padding:0 .571rem;max-height:1.429rem;white-space:nowrap}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-option-with-suffix .blaze-ui-cap-tooltip-with-info .blaze-ui-cap-tooltip-with-info-icon{margin-top:.357rem;color:#42526e}.blaze-ui-cap-unified-select-popup .blaze-ui-cap-unified-select-option-with-suffix .blaze-ui-cap-tooltip-with-info .blaze-ui-cap-tooltip-with-info-icon .blaze-ui-cap-icon{color:#42526e}.blaze-ui-cap-unified-select-popup .ant-select-dropdown .ant-select-dropdown-menu{margin-top:0 !important}.blaze-ui-cap-unified-select-popup .ant-select-dropdown .ant-select-dropdown-menu .ant-select-dropdown-menu-item{padding:.571rem 1.714rem !important;height:unset !important;font-size:1rem !important}.blaze-ui-cap-unified-select-popup .ant-select-dropdown .ant-select-dropdown-menu-item-disabled{color:rgba(0,0,0,.25) !important;cursor:not-allowed !important;line-height:1.428rem !important;font-size:1rem !important}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-node-content-wrapper{background-color:rgba(0,0,0,0);height:100%;display:flex;align-items:center}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-node-content-wrapper:hover{background-color:rgba(0,0,0,0)}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-treenode{height:2.857rem;margin-bottom:0;display:flex;align-items:center;width:100%}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-treenode:hover{background-color:#fffbe6}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-node-selected{background-color:#f4f5f7 !important}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-treenode-disabled{cursor:not-allowed !important}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-treenode-disabled .blaze-ui-cap-unified-select-option-label{color:#b3bac5}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-treenode-disabled .blaze-ui-cap-icon{color:#b3bac5 !important}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-treenode.ant-select-tree-treenode-selected{background-color:#f4f5f7}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-treenode-leaf .ant-select-tree-switcher-noop{display:none}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-checkbox{display:flex;align-items:center;justify-content:center;line-height:1;vertical-align:middle}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-checkbox .ant-select-tree-checkbox-inner{height:1.286rem;width:1.286rem;border:.143rem solid #b3bac5;border-radius:.286rem;display:flex;align-items:center;justify-content:center}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner{background-color:#47af46;border:.143rem solid #47af46 !important}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:hover{background-color:#47af46;border:.143rem solid #47af46 !important}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-checkbox.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner{background-color:#47af46 !important;border-color:#47af46 !important}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-checkbox.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner::after{content:"";position:absolute;top:50%;left:50%;width:.714rem;height:.143rem;background-color:#fff;transform:translate(-50%, -50%);border-radius:.071rem}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-node-content-wrapper{border-radius:0;padding-left:.214rem;width:100%;display:flex;align-items:center}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-title{width:100%;display:flex}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-indent{margin-left:.857rem;display:flex;align-items:center}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-switcher{display:flex;align-items:center;justify-content:center}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-switcher:not(.ant-select-tree-switcher-noop):hover:before{background-color:rgba(0,0,0,0)}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-switcher .ant-select-tree-switcher-icon{font-size:.857rem;margin-top:1.286rem}.blaze-ui-cap-unified-select-popup .ant-select-tree .ant-select-tree-list-holder-inner{width:fit-content !important;min-width:100%}.blaze-ui-cap-unified-select-popup .ant-tree-select:hover .ant-select-selector{border-color:#7a869a}.blaze-ui-cap-unified-select-popup .ant-tree-select-focused .ant-select-selector,.blaze-ui-cap-unified-select-popup .ant-tree-select-open .ant-select-selector{border-color:#7a869a;box-shadow:none;outline:none}.blaze-ui-cap-unified-select-popup .ant-checkbox-inner{height:1.286rem;width:1.286rem;border:.143rem solid #b3bac5;border-radius:.286rem}.blaze-ui-cap-unified-select-popup .ant-checkbox-wrapper:not(.ant-checkbox-wrapper-disabled):hover .ant-checkbox-checked:not(.ant-checkbox-disabled) .ant-checkbox-inner{background-color:#47af46;border:.143rem solid #47af46 !important}.blaze-ui-cap-unified-select-popup .ant-checkbox-indeterminate .ant-checkbox-inner{background-color:#47af46 !important;border-color:#47af46 !important}.blaze-ui-cap-unified-select-popup .ant-checkbox-indeterminate .ant-checkbox-inner::after{content:"";position:absolute;top:50%;left:50%;width:.714rem;height:.143rem;background-color:#fff;transform:translate(-50%, -50%);border-radius:.071rem}.blaze-ui-cap-unified-select-popup .ant-input-affix-wrapper{padding-left:.571rem;border:none;box-shadow:none;border-radius:0;border-bottom:.071rem solid rgba(0,0,0,0);transition:border-color .2s ease}.blaze-ui-cap-unified-select-popup .ant-input-affix-wrapper:hover{border-bottom:.071rem solid #7a869a !important;box-shadow:none}.blaze-ui-cap-unified-select-popup .ant-input-affix-wrapper:focus-within{border-bottom:.071rem solid #091e42 !important;box-shadow:none;outline:none}.blaze-ui-cap-unified-select-popup .ant-input-affix-wrapper .ant-input{border:none !important;box-shadow:none !important}`, ""]);
1961
3189
  // Exports
1962
3190
  ___CSS_LOADER_EXPORT___.locals = {
1963
3191
  "cap-unified-select-header-wrapper": `blaze-ui-cap-unified-select-header-wrapper`,
@@ -1986,10 +3214,18 @@ ___CSS_LOADER_EXPORT___.locals = {
1986
3214
  "cap-unified-select-selected-count": `blaze-ui-cap-unified-select-selected-count`,
1987
3215
  "cap-unified-select-tree-clear-container": `blaze-ui-cap-unified-select-tree-clear-container`,
1988
3216
  "cap-unified-select-tree-clear-label": `blaze-ui-cap-unified-select-tree-clear-label`,
3217
+ "cap-unified-select-footer-download-container": `blaze-ui-cap-unified-select-footer-download-container`,
3218
+ "cap-unified-select-footer-download-icon": `blaze-ui-cap-unified-select-footer-download-icon`,
3219
+ "cap-unified-select-footer-download-label": `blaze-ui-cap-unified-select-footer-download-label`,
1989
3220
  "cap-unified-select-no-result": `blaze-ui-cap-unified-select-no-result`,
1990
3221
  "cap-unified-select-no-result-text": `blaze-ui-cap-unified-select-no-result-text`,
3222
+ "cap-unified-select-loading-container": `blaze-ui-cap-unified-select-loading-container`,
3223
+ "cap-unified-select-loading-more": `blaze-ui-cap-unified-select-loading-more`,
3224
+ "cap-unified-select-menu-wrapper": `blaze-ui-cap-unified-select-menu-wrapper`,
3225
+ "cap-unified-select-loading-overlay": `blaze-ui-cap-unified-select-loading-overlay`,
1991
3226
  "cap-unified-select-option-with-suffix": `blaze-ui-cap-unified-select-option-with-suffix`,
1992
3227
  "cap-unified-select-option-label": `blaze-ui-cap-unified-select-option-label`,
3228
+ "cap-unified-select-option-end": `blaze-ui-cap-unified-select-option-end`,
1993
3229
  "cap-unified-select-option-suffix": `blaze-ui-cap-unified-select-option-suffix`,
1994
3230
  "cap-tooltip-with-info": `blaze-ui-cap-tooltip-with-info`,
1995
3231
  "cap-icon": `blaze-ui-cap-icon`
@@ -1997,6 +3233,75 @@ ___CSS_LOADER_EXPORT___.locals = {
1997
3233
  module.exports = ___CSS_LOADER_EXPORT___;
1998
3234
 
1999
3235
 
3236
+ /***/ }),
3237
+
3238
+ /***/ 9788:
3239
+ /***/ ((__unused_webpack_module, exports) => {
3240
+
3241
+ "use strict";
3242
+
3243
+
3244
+ exports.__esModule = true;
3245
+ exports.TIMEOUTS = exports.SELECT_TYPES = exports.DEFAULTS = void 0;
3246
+ /**
3247
+ * Select type constants for CapUnifiedSelect component
3248
+ */
3249
+ const SELECT_TYPES = exports.SELECT_TYPES = {
3250
+ SELECT: 'select',
3251
+ MULTI_SELECT: 'multiSelect',
3252
+ TREE_SELECT: 'treeSelect',
3253
+ MULTI_TREE_SELECT: 'multiTreeSelect'
3254
+ };
3255
+ /**
3256
+ * Timeout constants (in milliseconds)
3257
+ */
3258
+ const TIMEOUTS = exports.TIMEOUTS = {
3259
+ /** Default search debounce timeout */
3260
+ DEFAULT_SEARCH_DEBOUNCE: 300,
3261
+ /** Delay for state updates after search */
3262
+ SEARCH_STATE_UPDATE_DELAY: 100,
3263
+ /** Minimum time since search was cleared to consider data ready */
3264
+ SEARCH_CLEARED_TIMEOUT: 200,
3265
+ /** Buffer time added to debounce for cleared search */
3266
+ SEARCH_CLEARED_BUFFER: 300,
3267
+ /** Buffer time added to debounce for regular search */
3268
+ SEARCH_REGULAR_BUFFER: 500,
3269
+ /** Brief delay to show loading indicator for static search */
3270
+ STATIC_SEARCH_DELAY: 150,
3271
+ /** Timeout for resetData fallback (1 second) */
3272
+ RESET_DATA_TIMEOUT: 1000,
3273
+ /** Minimum time since resetData was called to consider data ready */
3274
+ RESET_DATA_MIN_TIME: 300,
3275
+ /** Maximum time since resetData was called to consider data ready */
3276
+ RESET_DATA_MAX_TIME: 2000,
3277
+ /** Fallback timeout for scroll loading (10 seconds) */
3278
+ SCROLL_LOADING_TIMEOUT: 10000,
3279
+ /** Delay before setting up scroll container listener */
3280
+ SCROLL_CONTAINER_DELAY: 100
3281
+ };
3282
+
3283
+ /**
3284
+ * Default values for component props
3285
+ */
3286
+ const DEFAULTS = exports.DEFAULTS = {
3287
+ /** Default placeholder text */
3288
+ PLACEHOLDER: 'Select an option',
3289
+ /** Default upload button label */
3290
+ UPLOAD_LABEL: 'Upload',
3291
+ /** Default clear button text */
3292
+ CLEAR_TEXT: 'Clear',
3293
+ /** Default no results message */
3294
+ NO_RESULT_TEXT: 'No results found',
3295
+ /** Default no results icon */
3296
+ NO_RESULT_ICON: 'warning',
3297
+ /** Default virtual row height in pixels */
3298
+ VIRTUAL_ROW_HEIGHT: 32,
3299
+ /** Default list height in pixels */
3300
+ LIST_HEIGHT: 256,
3301
+ /** Default search input placeholder */
3302
+ SEARCH_PLACEHOLDER: 'Search'
3303
+ };
3304
+
2000
3305
  /***/ })
2001
3306
 
2002
3307
  /******/ });