eidos-ui 3.8.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/README.md +2 -2
  2. package/dist/alert/index.cjs +5 -5
  3. package/dist/alert/index.js +4 -4
  4. package/dist/button/index.cjs +4 -4
  5. package/dist/button/index.js +3 -3
  6. package/dist/chip/index.cjs +4 -4
  7. package/dist/chip/index.js +3 -3
  8. package/dist/{chunk-V5CM5TH3.js → chunk-2OBOD3GO.js} +3 -3
  9. package/dist/{chunk-CFVUUMQA.cjs → chunk-2URFSWJT.cjs} +6 -8
  10. package/dist/chunk-2URFSWJT.cjs.map +1 -0
  11. package/dist/{chunk-4S57PE43.js → chunk-2WDL2ZVP.js} +6 -7
  12. package/dist/chunk-2WDL2ZVP.js.map +1 -0
  13. package/dist/{chunk-V64DICJK.js → chunk-363IKX3C.js} +3 -3
  14. package/dist/{chunk-LWCFT5SP.cjs → chunk-3QBMSZSE.cjs} +3 -3
  15. package/dist/{chunk-LWCFT5SP.cjs.map → chunk-3QBMSZSE.cjs.map} +1 -1
  16. package/dist/{chunk-6LTZV6HN.js → chunk-43DJ3GGR.js} +19 -19
  17. package/dist/chunk-43DJ3GGR.js.map +1 -0
  18. package/dist/{chunk-L6ERHCQ2.js → chunk-57BVERWD.js} +3 -3
  19. package/dist/{chunk-AUNDBUHM.cjs → chunk-5HRVHEHE.cjs} +3 -3
  20. package/dist/{chunk-AUNDBUHM.cjs.map → chunk-5HRVHEHE.cjs.map} +1 -1
  21. package/dist/{chunk-6IB27I5K.cjs → chunk-6JYXGRJ3.cjs} +8 -8
  22. package/dist/{chunk-6IB27I5K.cjs.map → chunk-6JYXGRJ3.cjs.map} +1 -1
  23. package/dist/{chunk-NERASTO2.cjs → chunk-6ZFXIYH7.cjs} +3 -3
  24. package/dist/{chunk-NERASTO2.cjs.map → chunk-6ZFXIYH7.cjs.map} +1 -1
  25. package/dist/{chunk-IKXXXVUO.js → chunk-7TQUJ6BJ.js} +3 -3
  26. package/dist/{chunk-544RAXWO.cjs → chunk-7VMF6LIC.cjs} +19 -19
  27. package/dist/{chunk-544RAXWO.cjs.map → chunk-7VMF6LIC.cjs.map} +1 -1
  28. package/dist/{chunk-WTFEMOV5.cjs → chunk-ADB7QRX5.cjs} +16 -16
  29. package/dist/{chunk-WTFEMOV5.cjs.map → chunk-ADB7QRX5.cjs.map} +1 -1
  30. package/dist/{chunk-6CW5QSYV.cjs → chunk-AFGC62AL.cjs} +7 -7
  31. package/dist/{chunk-6CW5QSYV.cjs.map → chunk-AFGC62AL.cjs.map} +1 -1
  32. package/dist/{chunk-U4SVBE2M.js → chunk-AWPJH3UB.js} +4 -4
  33. package/dist/{chunk-B2OHBIAL.cjs → chunk-BKUZF7CW.cjs} +10 -11
  34. package/dist/chunk-BKUZF7CW.cjs.map +1 -0
  35. package/dist/{chunk-WR77IZUU.cjs → chunk-BPVOQLCA.cjs} +7 -7
  36. package/dist/{chunk-WR77IZUU.cjs.map → chunk-BPVOQLCA.cjs.map} +1 -1
  37. package/dist/{chunk-MCPGI6EI.js → chunk-BUSMGQJ4.js} +2 -2
  38. package/dist/{chunk-H3C6YECZ.js → chunk-D2PXPX56.js} +6 -6
  39. package/dist/{chunk-L6YJ6QTZ.js → chunk-DCUIT7SI.js} +2 -2
  40. package/dist/{chunk-HYRLK462.js → chunk-EDPCI2JC.js} +2 -2
  41. package/dist/{chunk-DPTTDHZ5.js → chunk-FAGQGGT3.js} +3 -3
  42. package/dist/{chunk-CNTG7OOO.js → chunk-FAXDWZQH.js} +12 -12
  43. package/dist/{chunk-7NUVLVSL.cjs → chunk-FJSK2RT7.cjs} +5 -5
  44. package/dist/{chunk-7NUVLVSL.cjs.map → chunk-FJSK2RT7.cjs.map} +1 -1
  45. package/dist/{chunk-P6OJQ2RN.js → chunk-FSX7DDLO.js} +8 -9
  46. package/dist/chunk-FSX7DDLO.js.map +1 -0
  47. package/dist/{chunk-XIUZT4TO.js → chunk-GE3QCXT7.js} +6 -7
  48. package/dist/chunk-GE3QCXT7.js.map +1 -0
  49. package/dist/{chunk-JY77VJAZ.js → chunk-GHUEVNNU.js} +3 -3
  50. package/dist/{chunk-4V2XYUQL.js → chunk-GLEPKX2R.js} +2 -2
  51. package/dist/{chunk-QUSO4GFA.cjs → chunk-GRKC4PIX.cjs} +24 -24
  52. package/dist/chunk-GRKC4PIX.cjs.map +1 -0
  53. package/dist/{chunk-SLHIVEFW.cjs → chunk-HKLLKNRQ.cjs} +6 -9
  54. package/dist/chunk-HKLLKNRQ.cjs.map +1 -0
  55. package/dist/{chunk-2TIMJD4K.js → chunk-IBT535UH.js} +3 -3
  56. package/dist/{chunk-HR5MWA3B.cjs → chunk-IJW6YCJB.cjs} +5 -5
  57. package/dist/{chunk-HR5MWA3B.cjs.map → chunk-IJW6YCJB.cjs.map} +1 -1
  58. package/dist/{chunk-NNAEQR3Y.cjs → chunk-K6VEUJLY.cjs} +30 -30
  59. package/dist/{chunk-NNAEQR3Y.cjs.map → chunk-K6VEUJLY.cjs.map} +1 -1
  60. package/dist/{chunk-F5IRMMZ2.cjs → chunk-K73JO4FK.cjs} +7 -7
  61. package/dist/{chunk-F5IRMMZ2.cjs.map → chunk-K73JO4FK.cjs.map} +1 -1
  62. package/dist/{chunk-4HZIXRAJ.cjs → chunk-KF2OGUAD.cjs} +11 -12
  63. package/dist/chunk-KF2OGUAD.cjs.map +1 -0
  64. package/dist/{chunk-TJQNGJHP.js → chunk-KLHC5BHS.js} +4 -4
  65. package/dist/{chunk-XWMXEJVZ.js → chunk-KZKBZ2AV.js} +5 -7
  66. package/dist/chunk-KZKBZ2AV.js.map +1 -0
  67. package/dist/{chunk-DG3O5NV4.cjs → chunk-LLHR6QW3.cjs} +3 -3
  68. package/dist/{chunk-DG3O5NV4.cjs.map → chunk-LLHR6QW3.cjs.map} +1 -1
  69. package/dist/{chunk-GDRLVX2A.js → chunk-LXRNFQEI.js} +4 -4
  70. package/dist/{chunk-VXC7Z7XB.cjs → chunk-MKQVDEHI.cjs} +5 -6
  71. package/dist/chunk-MKQVDEHI.cjs.map +1 -0
  72. package/dist/{chunk-TNQ2ZZ7W.cjs → chunk-MUMTPMWD.cjs} +7 -7
  73. package/dist/{chunk-TNQ2ZZ7W.cjs.map → chunk-MUMTPMWD.cjs.map} +1 -1
  74. package/dist/{chunk-RHWZX7PB.js → chunk-NONYIHXD.js} +4 -4
  75. package/dist/{chunk-XPG56DLQ.cjs → chunk-NSA7ASZ7.cjs} +8 -8
  76. package/dist/{chunk-XPG56DLQ.cjs.map → chunk-NSA7ASZ7.cjs.map} +1 -1
  77. package/dist/{chunk-6NAOAKII.js → chunk-NWFGXLQP.js} +2 -2
  78. package/dist/{chunk-HLI4SOH3.cjs → chunk-NYGRVB2J.cjs} +45 -45
  79. package/dist/{chunk-HLI4SOH3.cjs.map → chunk-NYGRVB2J.cjs.map} +1 -1
  80. package/dist/{chunk-UUT2VEN5.cjs → chunk-OC2OBBGM.cjs} +7 -8
  81. package/dist/chunk-OC2OBBGM.cjs.map +1 -0
  82. package/dist/{chunk-3X6QVHTD.js → chunk-OERK3T7E.js} +3 -4
  83. package/dist/chunk-OERK3T7E.js.map +1 -0
  84. package/dist/{chunk-ZJWQPZ7E.js → chunk-OQWG7NLI.js} +3 -11
  85. package/dist/chunk-OQWG7NLI.js.map +1 -0
  86. package/dist/{chunk-U34INRFO.js → chunk-PP6HS4GR.js} +5 -16
  87. package/dist/chunk-PP6HS4GR.js.map +1 -0
  88. package/dist/{chunk-OGGZIFTI.cjs → chunk-PVNBH7XN.cjs} +36 -36
  89. package/dist/{chunk-OGGZIFTI.cjs.map → chunk-PVNBH7XN.cjs.map} +1 -1
  90. package/dist/{chunk-H46ZLPNJ.cjs → chunk-QDZVZY53.cjs} +7 -7
  91. package/dist/{chunk-H46ZLPNJ.cjs.map → chunk-QDZVZY53.cjs.map} +1 -1
  92. package/dist/{chunk-ENMDOQQO.cjs → chunk-R5WI5IGR.cjs} +6 -17
  93. package/dist/{chunk-ENMDOQQO.cjs.map → chunk-R5WI5IGR.cjs.map} +1 -1
  94. package/dist/{chunk-UTYY35QX.cjs → chunk-RZMQCVAS.cjs} +3 -3
  95. package/dist/{chunk-UTYY35QX.cjs.map → chunk-RZMQCVAS.cjs.map} +1 -1
  96. package/dist/{chunk-7FV2X62W.cjs → chunk-SJKD3WCV.cjs} +7 -7
  97. package/dist/{chunk-7FV2X62W.cjs.map → chunk-SJKD3WCV.cjs.map} +1 -1
  98. package/dist/{chunk-LUDK44NZ.cjs → chunk-SJPCBRKR.cjs} +3 -3
  99. package/dist/{chunk-LUDK44NZ.cjs.map → chunk-SJPCBRKR.cjs.map} +1 -1
  100. package/dist/{chunk-3TF2GZSG.js → chunk-SONL2RCW.js} +7 -7
  101. package/dist/{chunk-2IXCEKLI.js → chunk-SOS4K7VC.js} +2 -2
  102. package/dist/{chunk-WHQGJHMD.js → chunk-TOLNPD7S.js} +4 -4
  103. package/dist/{chunk-FE7S4RSK.js → chunk-U5KD4BWL.js} +7 -7
  104. package/dist/{chunk-FHOD3FUN.js → chunk-UTOTOWPS.js} +4 -4
  105. package/dist/{chunk-YIOHKQ6Y.cjs → chunk-VCG647BY.cjs} +5 -13
  106. package/dist/chunk-VCG647BY.cjs.map +1 -0
  107. package/dist/{chunk-N5NXKVFJ.cjs → chunk-VPN7AR7T.cjs} +10 -10
  108. package/dist/{chunk-N5NXKVFJ.cjs.map → chunk-VPN7AR7T.cjs.map} +1 -1
  109. package/dist/{chunk-6FXFKMJ5.js → chunk-XBIMNWE6.js} +3 -3
  110. package/dist/{chunk-Z3IJWYUD.js → chunk-XOUNVK45.js} +2 -2
  111. package/dist/{chunk-3VXUOAIJ.cjs → chunk-XR72A66Q.cjs} +3 -7
  112. package/dist/chunk-XR72A66Q.cjs.map +1 -0
  113. package/dist/{chunk-ULKWUKD2.cjs → chunk-YHSCUPP6.cjs} +22 -23
  114. package/dist/chunk-YHSCUPP6.cjs.map +1 -0
  115. package/dist/{chunk-S5CMZFX6.js → chunk-YPEJH57Z.js} +6 -7
  116. package/dist/chunk-YPEJH57Z.js.map +1 -0
  117. package/dist/{chunk-BO3KK3ZQ.js → chunk-YPPG7NLW.js} +2 -6
  118. package/dist/chunk-YPPG7NLW.js.map +1 -0
  119. package/dist/{chunk-PE2SLXUS.cjs → chunk-YWXS4IPH.cjs} +5 -5
  120. package/dist/{chunk-PE2SLXUS.cjs.map → chunk-YWXS4IPH.cjs.map} +1 -1
  121. package/dist/{chunk-UC4NYF6T.js → chunk-YYA5SWXD.js} +2 -2
  122. package/dist/{chunk-JFV56ISS.cjs → chunk-YZEALKC4.cjs} +6 -6
  123. package/dist/{chunk-JFV56ISS.cjs.map → chunk-YZEALKC4.cjs.map} +1 -1
  124. package/dist/{chunk-IHPSRTVW.js → chunk-Z3OEYDNI.js} +4 -7
  125. package/dist/chunk-Z3OEYDNI.js.map +1 -0
  126. package/dist/{chunk-MKC6V3SY.cjs → chunk-Z6FZ7GI5.cjs} +6 -6
  127. package/dist/{chunk-MKC6V3SY.cjs.map → chunk-Z6FZ7GI5.cjs.map} +1 -1
  128. package/dist/{chunk-NFD7MPX4.cjs → chunk-ZVA5KJAJ.cjs} +11 -11
  129. package/dist/{chunk-NFD7MPX4.cjs.map → chunk-ZVA5KJAJ.cjs.map} +1 -1
  130. package/dist/color-picker/index.cjs +4 -4
  131. package/dist/color-picker/index.js +3 -3
  132. package/dist/combobox/index.cjs +6 -6
  133. package/dist/combobox/index.js +5 -5
  134. package/dist/command-palette/index.cjs +3 -3
  135. package/dist/command-palette/index.js +2 -2
  136. package/dist/context-menu/index.cjs +6 -6
  137. package/dist/context-menu/index.js +5 -5
  138. package/dist/conversation/index.cjs +8 -8
  139. package/dist/conversation/index.js +7 -7
  140. package/dist/data-grid/index.cjs +15 -15
  141. package/dist/data-grid/index.js +14 -14
  142. package/dist/date-picker/index.cjs +8 -8
  143. package/dist/date-picker/index.js +7 -7
  144. package/dist/drawer/index.cjs +5 -5
  145. package/dist/drawer/index.js +4 -4
  146. package/dist/dropdown/index.cjs +3 -3
  147. package/dist/dropdown/index.js +2 -2
  148. package/dist/header/index.cjs +6 -6
  149. package/dist/header/index.js +5 -5
  150. package/dist/index.cjs +38 -38
  151. package/dist/index.js +37 -37
  152. package/dist/inline-edit/index.cjs +5 -5
  153. package/dist/inline-edit/index.js +4 -4
  154. package/dist/input/index.cjs +4 -4
  155. package/dist/input/index.js +3 -3
  156. package/dist/menu/index.cjs +5 -5
  157. package/dist/menu/index.js +4 -4
  158. package/dist/modal/index.cjs +5 -5
  159. package/dist/modal/index.js +4 -4
  160. package/dist/navigation/index.cjs +5 -5
  161. package/dist/navigation/index.js +4 -4
  162. package/dist/number-input/index.cjs +2 -4
  163. package/dist/number-input/index.cjs.map +1 -1
  164. package/dist/number-input/index.js +1 -3
  165. package/dist/page-layout/index.cjs +12 -12
  166. package/dist/page-layout/index.js +11 -11
  167. package/dist/pagination/index.cjs +8 -8
  168. package/dist/pagination/index.js +7 -7
  169. package/dist/popover/index.cjs +3 -3
  170. package/dist/popover/index.d.cts +1 -3
  171. package/dist/popover/index.d.ts +1 -3
  172. package/dist/popover/index.js +2 -2
  173. package/dist/segmented-control/index.cjs +4 -4
  174. package/dist/segmented-control/index.js +3 -3
  175. package/dist/select/index.cjs +6 -6
  176. package/dist/select/index.js +5 -5
  177. package/dist/snackbar/index.cjs +5 -5
  178. package/dist/snackbar/index.js +4 -4
  179. package/dist/split-button/index.cjs +6 -6
  180. package/dist/split-button/index.js +5 -5
  181. package/dist/split-chip/index.cjs +5 -5
  182. package/dist/split-chip/index.js +4 -4
  183. package/dist/table/index.cjs +13 -13
  184. package/dist/table/index.js +12 -12
  185. package/dist/tabs/index.cjs +3 -3
  186. package/dist/tabs/index.js +2 -2
  187. package/dist/tag-input/index.cjs +6 -6
  188. package/dist/tag-input/index.js +5 -5
  189. package/dist/textarea/index.cjs +4 -4
  190. package/dist/textarea/index.js +3 -3
  191. package/dist/theme-editor/index.cjs +11 -11
  192. package/dist/theme-editor/index.js +10 -10
  193. package/dist/theme-provider/index.cjs +3 -3
  194. package/dist/theme-provider/index.js +2 -2
  195. package/dist/toolbar/index.cjs +8 -8
  196. package/dist/toolbar/index.js +7 -7
  197. package/dist/tooltip/index.cjs +3 -3
  198. package/dist/tooltip/index.js +2 -2
  199. package/package.json +4 -2
  200. package/dist/chunk-3VXUOAIJ.cjs.map +0 -1
  201. package/dist/chunk-3X6QVHTD.js.map +0 -1
  202. package/dist/chunk-4HZIXRAJ.cjs.map +0 -1
  203. package/dist/chunk-4S57PE43.js.map +0 -1
  204. package/dist/chunk-6LTZV6HN.js.map +0 -1
  205. package/dist/chunk-B2OHBIAL.cjs.map +0 -1
  206. package/dist/chunk-BO3KK3ZQ.js.map +0 -1
  207. package/dist/chunk-CFVUUMQA.cjs.map +0 -1
  208. package/dist/chunk-IHPSRTVW.js.map +0 -1
  209. package/dist/chunk-P6OJQ2RN.js.map +0 -1
  210. package/dist/chunk-QUSO4GFA.cjs.map +0 -1
  211. package/dist/chunk-S5CMZFX6.js.map +0 -1
  212. package/dist/chunk-SLHIVEFW.cjs.map +0 -1
  213. package/dist/chunk-U34INRFO.js.map +0 -1
  214. package/dist/chunk-ULKWUKD2.cjs.map +0 -1
  215. package/dist/chunk-UUT2VEN5.cjs.map +0 -1
  216. package/dist/chunk-VXC7Z7XB.cjs.map +0 -1
  217. package/dist/chunk-XIUZT4TO.js.map +0 -1
  218. package/dist/chunk-XWMXEJVZ.js.map +0 -1
  219. package/dist/chunk-YIOHKQ6Y.cjs.map +0 -1
  220. package/dist/chunk-ZJWQPZ7E.js.map +0 -1
  221. /package/dist/{chunk-V5CM5TH3.js.map → chunk-2OBOD3GO.js.map} +0 -0
  222. /package/dist/{chunk-V64DICJK.js.map → chunk-363IKX3C.js.map} +0 -0
  223. /package/dist/{chunk-L6ERHCQ2.js.map → chunk-57BVERWD.js.map} +0 -0
  224. /package/dist/{chunk-IKXXXVUO.js.map → chunk-7TQUJ6BJ.js.map} +0 -0
  225. /package/dist/{chunk-U4SVBE2M.js.map → chunk-AWPJH3UB.js.map} +0 -0
  226. /package/dist/{chunk-MCPGI6EI.js.map → chunk-BUSMGQJ4.js.map} +0 -0
  227. /package/dist/{chunk-H3C6YECZ.js.map → chunk-D2PXPX56.js.map} +0 -0
  228. /package/dist/{chunk-L6YJ6QTZ.js.map → chunk-DCUIT7SI.js.map} +0 -0
  229. /package/dist/{chunk-HYRLK462.js.map → chunk-EDPCI2JC.js.map} +0 -0
  230. /package/dist/{chunk-DPTTDHZ5.js.map → chunk-FAGQGGT3.js.map} +0 -0
  231. /package/dist/{chunk-CNTG7OOO.js.map → chunk-FAXDWZQH.js.map} +0 -0
  232. /package/dist/{chunk-JY77VJAZ.js.map → chunk-GHUEVNNU.js.map} +0 -0
  233. /package/dist/{chunk-4V2XYUQL.js.map → chunk-GLEPKX2R.js.map} +0 -0
  234. /package/dist/{chunk-2TIMJD4K.js.map → chunk-IBT535UH.js.map} +0 -0
  235. /package/dist/{chunk-TJQNGJHP.js.map → chunk-KLHC5BHS.js.map} +0 -0
  236. /package/dist/{chunk-GDRLVX2A.js.map → chunk-LXRNFQEI.js.map} +0 -0
  237. /package/dist/{chunk-RHWZX7PB.js.map → chunk-NONYIHXD.js.map} +0 -0
  238. /package/dist/{chunk-6NAOAKII.js.map → chunk-NWFGXLQP.js.map} +0 -0
  239. /package/dist/{chunk-3TF2GZSG.js.map → chunk-SONL2RCW.js.map} +0 -0
  240. /package/dist/{chunk-2IXCEKLI.js.map → chunk-SOS4K7VC.js.map} +0 -0
  241. /package/dist/{chunk-WHQGJHMD.js.map → chunk-TOLNPD7S.js.map} +0 -0
  242. /package/dist/{chunk-FE7S4RSK.js.map → chunk-U5KD4BWL.js.map} +0 -0
  243. /package/dist/{chunk-FHOD3FUN.js.map → chunk-UTOTOWPS.js.map} +0 -0
  244. /package/dist/{chunk-6FXFKMJ5.js.map → chunk-XBIMNWE6.js.map} +0 -0
  245. /package/dist/{chunk-Z3IJWYUD.js.map → chunk-XOUNVK45.js.map} +0 -0
  246. /package/dist/{chunk-UC4NYF6T.js.map → chunk-YYA5SWXD.js.map} +0 -0
@@ -1,14 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunk4HZIXRAJcjs = require('./chunk-4HZIXRAJ.cjs');
3
+ var _chunkKF2OGUADcjs = require('./chunk-KF2OGUAD.cjs');
4
4
 
5
5
 
6
- var _chunkVXC7Z7XBcjs = require('./chunk-VXC7Z7XB.cjs');
6
+ var _chunkMKQVDEHIcjs = require('./chunk-MKQVDEHI.cjs');
7
7
 
8
8
 
9
9
 
10
-
11
- var _chunkENMDOQQOcjs = require('./chunk-ENMDOQQO.cjs');
10
+ var _chunkR5WI5IGRcjs = require('./chunk-R5WI5IGR.cjs');
12
11
 
13
12
  // src/components/Select/Select.component.tsx
14
13
  var _react = require('react'); var _react2 = _interopRequireDefault(_react);
@@ -122,7 +121,7 @@ var Select = _react2.default.forwardRef(
122
121
  if (!element) return;
123
122
  const named = (_nullishCoalesce(_optionalChain([element, 'access', _7 => _7.labels, 'optionalAccess', _8 => _8.length]), () => ( 0))) > 0 || element.hasAttribute("aria-label") || element.hasAttribute("aria-labelledby");
124
123
  if (!named) {
125
- _chunkENMDOQQOcjs.devWarn.call(void 0,
124
+ _chunkR5WI5IGRcjs.devWarn.call(void 0,
126
125
  "select-missing-label",
127
126
  'Select: no accessible name. Pass `label` for a visible one, or `inputProps={{ "aria-label": "..." }}` where it must stay visually unlabelled - otherwise the field is announced as just "combobox". A placeholder is not a label, and disappears as soon as something is chosen.'
128
127
  );
@@ -278,7 +277,7 @@ var Select = _react2.default.forwardRef(
278
277
  "aria-selected": isSelected,
279
278
  "aria-disabled": option.disabled,
280
279
  children: [
281
- option.icon && _chunkENMDOQQOcjs.renderIcon.call(void 0, option.icon, "eidos-select-option-icon"),
280
+ option.icon && _chunkR5WI5IGRcjs.renderIcon.call(void 0, option.icon, "eidos-select-option-icon"),
282
281
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-select-option-label", children: option.label }),
283
282
  isSelected && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Check, { className: "eidos-select-option-check-icon" })
284
283
  ]
@@ -292,7 +291,7 @@ var Select = _react2.default.forwardRef(
292
291
  "div",
293
292
  {
294
293
  ref: triggerRef,
295
- className: `eidos-select-trigger ${fullWidth ? _chunkENMDOQQOcjs.fullWidthModifier.call(void 0, "eidos-select-trigger") : ""}`,
294
+ className: `eidos-select-trigger ${fullWidth ? "eidos-select-trigger--full-width" : ""}`,
296
295
  onKeyDown: handleKeyDown,
297
296
  tabIndex: disabled ? -1 : void 0,
298
297
  role: "combobox",
@@ -301,7 +300,7 @@ var Select = _react2.default.forwardRef(
301
300
  "aria-controls": isOpen ? `${id || "select"}-options` : void 0,
302
301
  "aria-activedescendant": focusedIndex >= 0 ? `${id || "select"}-option-${focusedIndex}` : void 0,
303
302
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
304
- _chunk4HZIXRAJcjs.Input,
303
+ _chunkKF2OGUADcjs.Input,
305
304
  {
306
305
  ref: inputRef,
307
306
  value: selectedValues.size > 0 ? displayValue : "",
@@ -327,9 +326,9 @@ var Select = _react2.default.forwardRef(
327
326
  "div",
328
327
  {
329
328
  ref,
330
- className: `${"eidos-select-container"} ${fullWidth ? _chunkENMDOQQOcjs.fullWidthModifier.call(void 0, "eidos-select-container") : ""} ${className}`,
329
+ className: `${"eidos-select-container"} ${fullWidth ? "eidos-select-container--full-width" : ""} ${className}`,
331
330
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
332
- _chunkVXC7Z7XBcjs.Dropdown,
331
+ _chunkMKQVDEHIcjs.Dropdown,
333
332
  {
334
333
  open: isOpen,
335
334
  onOpenChange: setIsOpen,
@@ -354,4 +353,4 @@ Select.displayName = "Select";
354
353
 
355
354
 
356
355
  exports.Select = Select;
357
- //# sourceMappingURL=chunk-B2OHBIAL.cjs.map
356
+ //# sourceMappingURL=chunk-BKUZF7CW.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-BKUZF7CW.cjs","../src/components/Select/Select.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-BKUZF7CW.cjs","sourcesContent":[null,"import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react';\nimport { X, Check } from 'lucide-react';\nimport { Input } from '../Input/Input.component';\nimport { Dropdown } from '../Dropdown/Dropdown.component';\nimport type { SelectProps, SelectOption } from './Select.types';\nimport { renderIcon, devWarn } from '../../utils';\n\nexport const Select = React.forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n options = [],\n value,\n defaultValue,\n onChange,\n className = '',\n multiple = false,\n label,\n placeholder = 'Select an option...',\n disabled = false,\n inputProps = {},\n name,\n id,\n required = false,\n fullWidth = false,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight = '300px',\n autoWidth = true,\n clearable = true,\n autoOpen = false,\n dropdownProps = {},\n },\n ref,\n ) => {\n const isControlled = value !== undefined;\n\n // Lazy initializer: seed from defaultValue in uncontrolled mode.\n const [selectedValues, setSelectedValues] = useState<Set<string>>(() => {\n if (defaultValue !== undefined) {\n const vals = Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n return new Set(vals.filter((v) => v !== ''));\n }\n return new Set();\n });\n\n const [focusedIndex, setFocusedIndex] = useState(-1);\n // `Select` owns the open state and hands it to `Dropdown` as a controlled\n // value. It used to keep this flag *and* force the dropdown closed by\n // remounting it through a changing `key`, because `Dropdown`'s own state was\n // private - which meant this flag drove the ARIA attributes while reaching\n // nothing that renders, so the keyboard could not open the listbox at all.\n const [isOpen, setIsOpen] = useState(autoOpen);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const optionRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n // Kept in sync every render so the mount-only callback ref below can\n // read the latest values without needing them in its dependency array\n // (see `handleOptionsMount`).\n const optionsRef = useRef(options);\n optionsRef.current = options;\n const selectedValuesRef = useRef(selectedValues);\n selectedValuesRef.current = selectedValues;\n\n useEffect(() => {\n if (value !== undefined) {\n const values = Array.isArray(value) ? value : [value];\n\n const validValues = values.filter((v) => v !== '');\n setSelectedValues(new Set(validValues));\n }\n }, [value]);\n\n useEffect(() => {\n setFocusedIndex(-1);\n }, [options]);\n\n useEffect(() => {\n optionRefs.current = optionRefs.current.slice(0, options.length);\n }, [options.length]);\n\n const handleOptionSelect = useCallback(\n (option: SelectOption) => {\n if (option.disabled) return;\n\n const newSelectedValues = new Set(selectedValues);\n\n if (multiple) {\n if (newSelectedValues.has(option.value)) {\n newSelectedValues.delete(option.value);\n } else {\n newSelectedValues.add(option.value);\n }\n } else {\n if (newSelectedValues.has(option.value)) {\n newSelectedValues.clear();\n } else {\n newSelectedValues.clear();\n newSelectedValues.add(option.value);\n }\n }\n\n // In uncontrolled mode, own the state directly.\n // In controlled mode, let the parent drive via value prop + useEffect sync.\n if (!isControlled) {\n setSelectedValues(newSelectedValues);\n }\n\n if (onChange) {\n const newValue = multiple\n ? Array.from(newSelectedValues)\n : Array.from(newSelectedValues)[0] || '';\n onChange(newValue);\n }\n\n if (!multiple) {\n setIsOpen(false);\n // Focus is returned explicitly because a click lands on an option\n // `div`, which is not focusable - without this, choosing with the\n // mouse would leave focus on `<body>` and the field would be\n // unreachable by keyboard until tabbed to again.\n inputRef.current?.focus();\n }\n },\n [multiple, onChange, selectedValues, isControlled],\n );\n\n const handleClear = useCallback(\n (e?: React.MouseEvent) => {\n if (e) {\n e.stopPropagation();\n }\n if (!isControlled) {\n setSelectedValues(new Set());\n }\n\n setIsOpen(false);\n inputRef.current?.focus();\n if (onChange) {\n onChange(multiple ? [] : '');\n }\n },\n [multiple, onChange, isControlled],\n );\n\n // A form control with no accessible name is announced as just \"combobox\".\n // `Select` was the only field in the library that could not be labelled\n // without knowing about `inputProps`, and three call sites duly shipped\n // without one - so the gap is closed from both ends: a first-class `label`\n // prop, and this warning.\n //\n // Measured from the DOM rather than from props, because a caller may name\n // the field with an external `<label for>` - `Pagination`'s page-size\n // picker does exactly that, and a props-only check would cry wolf at it.\n // `HTMLInputElement.labels` covers both wrapping and `for` labels.\n useEffect(() => {\n const element = inputRef.current;\n if (!element) return;\n const named =\n (element.labels?.length ?? 0) > 0 ||\n element.hasAttribute('aria-label') ||\n element.hasAttribute('aria-labelledby');\n if (!named) {\n devWarn(\n 'select-missing-label',\n 'Select: no accessible name. Pass `label` for a visible one, or `inputProps={{ \"aria-label\": \"...\" }}` where it must stay visually unlabelled - otherwise the field is announced as just \"combobox\". A placeholder is not a label, and disappears as soon as something is chosen.',\n );\n }\n }, []);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n setFocusedIndex(0);\n } else {\n setFocusedIndex((prev) => {\n const nextIndex = prev < options.length - 1 ? prev + 1 : 0;\n\n setTimeout(() => {\n optionRefs.current[nextIndex]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }, 0);\n return nextIndex;\n });\n }\n break;\n\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n setFocusedIndex(options.length - 1);\n } else {\n setFocusedIndex((prev) => {\n const nextIndex = prev > 0 ? prev - 1 : options.length - 1;\n\n setTimeout(() => {\n optionRefs.current[nextIndex]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }, 0);\n return nextIndex;\n });\n }\n break;\n\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n setFocusedIndex(0);\n } else if (focusedIndex >= 0 && focusedIndex < options.length) {\n const focusedOption = options[focusedIndex];\n handleOptionSelect(focusedOption);\n }\n break;\n\n case 'Escape':\n e.preventDefault();\n if (isOpen) {\n setIsOpen(false);\n setFocusedIndex(-1);\n }\n break;\n\n case 'Home':\n e.preventDefault();\n if (isOpen) {\n setFocusedIndex(0);\n optionRefs.current[0]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n break;\n\n case 'End':\n e.preventDefault();\n if (isOpen) {\n const lastIndex = options.length - 1;\n setFocusedIndex(lastIndex);\n optionRefs.current[lastIndex]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n break;\n\n default:\n if (isOpen && e.key.length === 1 && /[a-zA-Z0-9]/.test(e.key)) {\n const searchChar = e.key.toLowerCase();\n const foundIndex = options.findIndex(\n (option, index) =>\n index > focusedIndex && option.label.toLowerCase().startsWith(searchChar),\n );\n\n if (foundIndex !== -1) {\n setFocusedIndex(foundIndex);\n optionRefs.current[foundIndex]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n } else {\n const foundFromStart = options.findIndex((option) =>\n option.label.toLowerCase().startsWith(searchChar),\n );\n if (foundFromStart !== -1) {\n setFocusedIndex(foundFromStart);\n optionRefs.current[foundFromStart]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n }\n }\n break;\n }\n },\n [disabled, isOpen, options, focusedIndex, handleOptionSelect],\n );\n\n // Scrolls the first selected option into view. Attached as the options\n // list's own ref below with an empty dependency array, so its identity\n // never changes and React only invokes it on genuine DOM mount/unmount -\n // i.e. exactly when the dropdown opens/closes (Dropdown unmounts its\n // `content` entirely while closed), not on every re-render while open.\n const handleOptionsMount = useCallback((el: HTMLDivElement | null) => {\n if (!el) return;\n const idx = optionsRef.current.findIndex((option) =>\n selectedValuesRef.current.has(option.value),\n );\n if (idx === -1) return;\n optionRefs.current[idx]?.scrollIntoView({ block: 'nearest' });\n }, []);\n\n // Past this many selections the full comma-joined label list becomes\n // unreadable in the trigger, so we switch to a compact \"N selected\" label.\n const COMPACT_LABEL_THRESHOLD = 2;\n\n const displayValue = useMemo(() => {\n if (selectedValues.size === 0) return '';\n\n if (multiple && selectedValues.size > COMPACT_LABEL_THRESHOLD) {\n return `${selectedValues.size} selected`;\n }\n\n const selectedOptions = options.filter((option) => selectedValues.has(option.value));\n const text = selectedOptions.map((option) => option.label).join(', ');\n return text;\n }, [options, selectedValues, multiple]);\n\n const selectContent = useMemo(\n () => (\n <div className={'eidos-select-options'} ref={handleOptionsMount}>\n {options.map((option, index) => {\n const isSelected = selectedValues.has(option.value);\n const isFocused = index === focusedIndex;\n return (\n <div\n key={option.id}\n // The trigger points `aria-activedescendant` at\n // `${id}-option-${focusedIndex}`, and nothing carried that id -\n // so the moment an option was hovered or arrowed to, the\n // attribute referenced an element that did not exist\n // (`aria-valid-attr-value`, critical). Invisible to axe until a\n // story left the listbox open, because the attribute is only\n // set once something is focused.\n id={`${id || 'select'}-option-${index}`}\n ref={(el) => {\n optionRefs.current[index] = el;\n }}\n className={`\n\t\t\t\t\t\t\t\t\t\t${'eidos-select-option'}\n\t\t\t\t\t\t\t\t\t\t${isSelected ? 'eidos-select-option--selected' : ''}\n\t\t\t\t\t\t\t\t\t\t${option.disabled ? 'eidos-select-option--disabled' : ''}\n\t\t\t\t\t\t\t\t\t\t${isFocused ? 'eidos-select-option--focused' : ''}\n\t\t\t\t\t\t\t\t\t`.trim()}\n onClick={() => handleOptionSelect(option)}\n onMouseEnter={() => setFocusedIndex(index)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n >\n {option.icon && renderIcon(option.icon, 'eidos-select-option-icon')}\n <span className={'eidos-select-option-label'}>{option.label}</span>\n {isSelected && <Check className={'eidos-select-option-check-icon'} />}\n </div>\n );\n })}\n </div>\n ),\n [options, selectedValues, focusedIndex, handleOptionSelect, handleOptionsMount, id],\n );\n\n const triggerElement = (\n <div\n ref={triggerRef}\n className={`eidos-select-trigger ${fullWidth ? 'eidos-select-trigger--full-width' : ''}`}\n onKeyDown={handleKeyDown}\n tabIndex={disabled ? -1 : undefined}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n // Only while the listbox exists. An `aria-controls` pointing at an id\n // that is not in the document is invalid, and the listbox only renders\n // while open - `Combobox`, `TagInput` and `CommandPalette` already gate\n // theirs this way. It could not be gated here before, because `isOpen`\n // did not track whether the panel had actually rendered.\n aria-controls={isOpen ? `${id || 'select'}-options` : undefined}\n aria-activedescendant={\n focusedIndex >= 0 ? `${id || 'select'}-option-${focusedIndex}` : undefined\n }\n >\n <Input\n ref={inputRef}\n value={selectedValues.size > 0 ? displayValue : ''}\n placeholder={selectedValues.size === 0 ? placeholder : ''}\n posIcon={selectedValues.size > 0 && clearable ? X : undefined}\n posIconButton={selectedValues.size > 0 && clearable}\n onPosIconClick={selectedValues.size > 0 && clearable ? handleClear : undefined}\n posIconLabel=\"Clear selection\"\n disabled={disabled}\n readOnly={true}\n isSelect={true}\n label={label}\n name={name}\n id={id}\n required={required}\n fullWidth={fullWidth}\n {...inputProps}\n />\n </div>\n );\n\n return (\n <div\n ref={ref}\n className={`${'eidos-select-container'} ${\n fullWidth ? 'eidos-select-container--full-width' : ''\n } ${className}`}\n >\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n trigger={triggerElement}\n content={\n <div id={`${id || 'select'}-options`} role=\"listbox\" aria-multiselectable={multiple}>\n {selectContent}\n </div>\n }\n minWidth={minWidth}\n maxWidth={maxWidth}\n minHeight={minHeight}\n maxHeight={maxHeight}\n autoWidth={autoWidth}\n fullWidth={fullWidth}\n triggerRef={triggerRef as React.RefObject<HTMLElement | null>}\n {...dropdownProps}\n />\n </div>\n );\n },\n);\n\nSelect.displayName = 'Select';\n"]}
@@ -1,9 +1,9 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkUTYY35QXcjs = require('./chunk-UTYY35QX.cjs');
3
+ var _chunkRZMQCVAScjs = require('./chunk-RZMQCVAS.cjs');
4
4
 
5
5
 
6
- var _chunkENMDOQQOcjs = require('./chunk-ENMDOQQO.cjs');
6
+ var _chunkR5WI5IGRcjs = require('./chunk-R5WI5IGR.cjs');
7
7
 
8
8
 
9
9
  var _chunkKXDGW6LJcjs = require('./chunk-KXDGW6LJ.cjs');
@@ -53,9 +53,9 @@ var Chip = ({
53
53
  };
54
54
  const hasBothControls = isClickable && isRemovable;
55
55
  const body = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
56
- preIcon && _chunkENMDOQQOcjs.renderIcon.call(void 0, preIcon, "eidos-chip--pre-icon"),
56
+ preIcon && _chunkR5WI5IGRcjs.renderIcon.call(void 0, preIcon, "eidos-chip--pre-icon"),
57
57
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-chip--copy", children }),
58
- posIcon && _chunkENMDOQQOcjs.renderIcon.call(void 0, posIcon, "eidos-chip--pos-icon")
58
+ posIcon && _chunkR5WI5IGRcjs.renderIcon.call(void 0, posIcon, "eidos-chip--pos-icon")
59
59
  ] });
60
60
  const renderLink = (linkHref, className2, attributes) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
61
61
  _chunkKXDGW6LJcjs.EidosLink,
@@ -72,7 +72,7 @@ var Chip = ({
72
72
  );
73
73
  if (href !== void 0 && !isRemovable) {
74
74
  const link = renderLink(href, chipClasses, chipProps);
75
- return tooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUTYY35QXcjs.Tooltip, { message: tooltip, children: link }) : link;
75
+ return tooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRZMQCVAScjs.Tooltip, { message: tooltip, children: link }) : link;
76
76
  }
77
77
  const ChipElement = isClickable && !isRemovable ? "button" : "div";
78
78
  const chipContent = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -107,10 +107,10 @@ var Chip = ({
107
107
  ]
108
108
  }
109
109
  );
110
- return tooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUTYY35QXcjs.Tooltip, { message: tooltip, children: chipContent }) : chipContent;
110
+ return tooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRZMQCVAScjs.Tooltip, { message: tooltip, children: chipContent }) : chipContent;
111
111
  };
112
112
 
113
113
 
114
114
 
115
115
  exports.Chip = Chip;
116
- //# sourceMappingURL=chunk-WR77IZUU.cjs.map
116
+ //# sourceMappingURL=chunk-BPVOQLCA.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-WR77IZUU.cjs","../src/components/Chip/Chip.component.tsx"],"names":["className"],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACTA,2CAAkB;AAuEd,+CAAA;AAjEG,IAAM,KAAA,EAA4B,CAAC;AAAA,EACxC,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,KAAA;AAAA,EACX,UAAA,EAAY,KAAA;AAAA,EACZ,OAAA;AAAA,EACA,UAAA,EAAY,EAAA;AAAA,EACZ,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,YAAA,EAAc,CAAC,CAAC,QAAA,GAAW,KAAA,IAAS,KAAA,CAAA;AAC1C,EAAA,MAAM,YAAA,EAAc,CAAC,CAAC,QAAA;AAGtB,EAAA,MAAM,YAAA,EAAc;AAAA,IAClB,YAAA;AAAA,IACA,CAAA,YAAA,EAAe,OAAO,CAAA,CAAA;AACF,IAAA;AACD,IAAA;AACP,IAAA;AACG,IAAA;AACA,IAAA;AACF,IAAA;AACb,IAAA;AAGM,EAAA;AAEY,EAAA;AACD,IAAA;AACT,IAAA;AACV,EAAA;AAEsB,EAAA;AACF,IAAA;AACD,IAAA;AACR,IAAA;AACX,EAAA;AAiBwB,EAAA;AAGtB,EAAA;AACyB,IAAA;AAEtB,oBAAA;AAEsB,IAAA;AACzB,EAAA;AAOA,EAAA;AAIC,IAAA;AAAA,IAAA;AACK,MAAA;AACE,MAAA;AACN,MAAA;AACA,MAAA;AACWA,MAAAA;AACX,MAAA;AACmB,MAAA;AAElB,MAAA;AAAA,IAAA;AACH,EAAA;AAGyB,EAAA;AACZ,IAAA;AACI,IAAA;AACnB,EAAA;AAEoB,EAAA;AAGlB,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACD,MAAA;AACD,MAAA;AACL,MAAA;AAEH,MAAA;AACC,QAAA;AAGG,UAAA;AAAA,UAAA;AACM,YAAA;AACK,YAAA;AACD,YAAA;AACT,YAAA;AAEC,YAAA;AAAA,UAAA;AAIL,QAAA;AAIA,QAAA;AAAC,UAAA;AAAA,UAAA;AACW,YAAA;AACD,YAAA;AACT,YAAA;AACW,YAAA;AACN,YAAA;AAEL,YAAA;AAAuC,UAAA;AACzC,QAAA;AAAA,MAAA;AAAA,IAAA;AAEJ,EAAA;AAGe,EAAA;AACnB;ADrC2B;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-WR77IZUU.cjs","sourcesContent":[null,"import React from 'react';\nimport { X } from 'lucide-react';\nimport type { ChipProps } from './Chip.types';\nimport { Tooltip } from '../Tooltip/Tooltip.component';\nimport { renderIcon } from '../../utils';\nimport { EidosLink } from '../LinkProvider/Link.component';\n\nexport const Chip: React.FC<ChipProps> = ({\n variant = 'filled',\n color = 'primary',\n size = 'md',\n disabled = false,\n fullWidth = false,\n tooltip,\n className = '',\n preIcon,\n posIcon,\n children,\n onClick,\n onRemove,\n href,\n target,\n rel,\n ...chipProps\n}) => {\n const isClickable = !!onClick || href !== undefined;\n const isRemovable = !!onRemove;\n\n // Build CSS classes\n const chipClasses = [\n 'eidos-chip',\n `eidos-chip--${variant}`,\n `eidos-chip--${color}`,\n `eidos-chip--${size}`,\n disabled && 'eidos-chip--disabled',\n isClickable && 'eidos-chip--clickable',\n isRemovable && 'eidos-chip--removable',\n fullWidth && 'eidos-chip--full-width',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const handleClick = () => {\n if (disabled || !onClick) return;\n onClick();\n };\n\n const handleRemove = (e: React.MouseEvent) => {\n e.stopPropagation(); // Prevent chip click when removing\n if (disabled || !onRemove) return;\n onRemove();\n };\n\n // A chip that is both clickable and removable holds *two* controls, so it\n // has to render them as siblings.\n //\n // The previous shape switched the outer element to a `<div>` when\n // removable - the comment said \"to avoid nested buttons\" - and then gave\n // that div `role=\"button\"` and `tabIndex={0}`. That is the same defect\n // wearing a different hat: a button containing a button, which is invalid\n // (`nested-interactive`) and leaves a screen reader announcing a control\n // inside a control. It is the same shape already fixed on `Dropdown` and\n // `DataGrid`'s rows.\n //\n // Now the outer element is a plain container whenever there is a remove\n // button, and the chip's own action moves to an inner `<button>` wrapping\n // just the content. Each control is separately reachable and separately\n // named.\n const hasBothControls = isClickable && isRemovable;\n\n const body = (\n <>\n {preIcon && renderIcon(preIcon, 'eidos-chip--pre-icon')}\n\n <span className=\"eidos-chip--copy\">{children}</span>\n\n {posIcon && renderIcon(posIcon, 'eidos-chip--pos-icon')}\n </>\n );\n\n // A link chip follows the same two-control rule: alone, the chip *is* the\n // link; with a remove button, the link moves to the inner action slot so\n // the two stay siblings.\n const renderLink = (\n linkHref: string,\n className: string,\n attributes?: React.AnchorHTMLAttributes<HTMLAnchorElement>,\n ) => (\n <EidosLink\n {...attributes}\n href={linkHref}\n target={target}\n rel={rel}\n className={className}\n disabled={disabled}\n onClick={onClick ? handleClick : undefined}\n >\n {body}\n </EidosLink>\n );\n\n if (href !== undefined && !isRemovable) {\n const link = renderLink(href, chipClasses, chipProps);\n return tooltip ? <Tooltip message={tooltip}>{link}</Tooltip> : link;\n }\n\n const ChipElement = isClickable && !isRemovable ? 'button' : 'div';\n\n const chipContent = (\n <ChipElement\n className={chipClasses}\n disabled={ChipElement === 'button' ? disabled : undefined}\n onClick={isClickable && !hasBothControls ? handleClick : undefined}\n {...chipProps}\n >\n {hasBothControls ? (\n href !== undefined ? (\n renderLink(href, 'eidos-chip--action')\n ) : (\n <button\n type=\"button\"\n className=\"eidos-chip--action\"\n onClick={handleClick}\n disabled={disabled}\n >\n {body}\n </button>\n )\n ) : (\n body\n )}\n\n {isRemovable && (\n <button\n className=\"eidos-chip--remove-button\"\n onClick={handleRemove}\n disabled={disabled}\n aria-label=\"Remove\"\n type=\"button\"\n >\n <X className=\"eidos-chip--remove-icon\" />\n </button>\n )}\n </ChipElement>\n );\n\n return tooltip ? <Tooltip message={tooltip}>{chipContent}</Tooltip> : chipContent;\n};\n"]}
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-BPVOQLCA.cjs","../src/components/Chip/Chip.component.tsx"],"names":["className"],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACTA,2CAAkB;AAuEd,+CAAA;AAjEG,IAAM,KAAA,EAA4B,CAAC;AAAA,EACxC,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,KAAA;AAAA,EACX,UAAA,EAAY,KAAA;AAAA,EACZ,OAAA;AAAA,EACA,UAAA,EAAY,EAAA;AAAA,EACZ,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,YAAA,EAAc,CAAC,CAAC,QAAA,GAAW,KAAA,IAAS,KAAA,CAAA;AAC1C,EAAA,MAAM,YAAA,EAAc,CAAC,CAAC,QAAA;AAGtB,EAAA,MAAM,YAAA,EAAc;AAAA,IAClB,YAAA;AAAA,IACA,CAAA,YAAA,EAAe,OAAO,CAAA,CAAA;AACF,IAAA;AACD,IAAA;AACP,IAAA;AACG,IAAA;AACA,IAAA;AACF,IAAA;AACb,IAAA;AAGM,EAAA;AAEY,EAAA;AACD,IAAA;AACT,IAAA;AACV,EAAA;AAEsB,EAAA;AACF,IAAA;AACD,IAAA;AACR,IAAA;AACX,EAAA;AAiBwB,EAAA;AAGtB,EAAA;AACyB,IAAA;AAEtB,oBAAA;AAEsB,IAAA;AACzB,EAAA;AAOA,EAAA;AAIC,IAAA;AAAA,IAAA;AACK,MAAA;AACE,MAAA;AACN,MAAA;AACA,MAAA;AACWA,MAAAA;AACX,MAAA;AACmB,MAAA;AAElB,MAAA;AAAA,IAAA;AACH,EAAA;AAGyB,EAAA;AACZ,IAAA;AACI,IAAA;AACnB,EAAA;AAEoB,EAAA;AAGlB,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACD,MAAA;AACD,MAAA;AACL,MAAA;AAEH,MAAA;AACC,QAAA;AAGG,UAAA;AAAA,UAAA;AACM,YAAA;AACK,YAAA;AACD,YAAA;AACT,YAAA;AAEC,YAAA;AAAA,UAAA;AAIL,QAAA;AAIA,QAAA;AAAC,UAAA;AAAA,UAAA;AACW,YAAA;AACD,YAAA;AACT,YAAA;AACW,YAAA;AACN,YAAA;AAEL,YAAA;AAAuC,UAAA;AACzC,QAAA;AAAA,MAAA;AAAA,IAAA;AAEJ,EAAA;AAGe,EAAA;AACnB;ADrC2B;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-BPVOQLCA.cjs","sourcesContent":[null,"import React from 'react';\nimport { X } from 'lucide-react';\nimport type { ChipProps } from './Chip.types';\nimport { Tooltip } from '../Tooltip/Tooltip.component';\nimport { renderIcon } from '../../utils';\nimport { EidosLink } from '../LinkProvider/Link.component';\n\nexport const Chip: React.FC<ChipProps> = ({\n variant = 'filled',\n color = 'primary',\n size = 'md',\n disabled = false,\n fullWidth = false,\n tooltip,\n className = '',\n preIcon,\n posIcon,\n children,\n onClick,\n onRemove,\n href,\n target,\n rel,\n ...chipProps\n}) => {\n const isClickable = !!onClick || href !== undefined;\n const isRemovable = !!onRemove;\n\n // Build CSS classes\n const chipClasses = [\n 'eidos-chip',\n `eidos-chip--${variant}`,\n `eidos-chip--${color}`,\n `eidos-chip--${size}`,\n disabled && 'eidos-chip--disabled',\n isClickable && 'eidos-chip--clickable',\n isRemovable && 'eidos-chip--removable',\n fullWidth && 'eidos-chip--full-width',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const handleClick = () => {\n if (disabled || !onClick) return;\n onClick();\n };\n\n const handleRemove = (e: React.MouseEvent) => {\n e.stopPropagation(); // Prevent chip click when removing\n if (disabled || !onRemove) return;\n onRemove();\n };\n\n // A chip that is both clickable and removable holds *two* controls, so it\n // has to render them as siblings.\n //\n // The previous shape switched the outer element to a `<div>` when\n // removable - the comment said \"to avoid nested buttons\" - and then gave\n // that div `role=\"button\"` and `tabIndex={0}`. That is the same defect\n // wearing a different hat: a button containing a button, which is invalid\n // (`nested-interactive`) and leaves a screen reader announcing a control\n // inside a control. It is the same shape already fixed on `Dropdown` and\n // `DataGrid`'s rows.\n //\n // Now the outer element is a plain container whenever there is a remove\n // button, and the chip's own action moves to an inner `<button>` wrapping\n // just the content. Each control is separately reachable and separately\n // named.\n const hasBothControls = isClickable && isRemovable;\n\n const body = (\n <>\n {preIcon && renderIcon(preIcon, 'eidos-chip--pre-icon')}\n\n <span className=\"eidos-chip--copy\">{children}</span>\n\n {posIcon && renderIcon(posIcon, 'eidos-chip--pos-icon')}\n </>\n );\n\n // A link chip follows the same two-control rule: alone, the chip *is* the\n // link; with a remove button, the link moves to the inner action slot so\n // the two stay siblings.\n const renderLink = (\n linkHref: string,\n className: string,\n attributes?: React.AnchorHTMLAttributes<HTMLAnchorElement>,\n ) => (\n <EidosLink\n {...attributes}\n href={linkHref}\n target={target}\n rel={rel}\n className={className}\n disabled={disabled}\n onClick={onClick ? handleClick : undefined}\n >\n {body}\n </EidosLink>\n );\n\n if (href !== undefined && !isRemovable) {\n const link = renderLink(href, chipClasses, chipProps);\n return tooltip ? <Tooltip message={tooltip}>{link}</Tooltip> : link;\n }\n\n const ChipElement = isClickable && !isRemovable ? 'button' : 'div';\n\n const chipContent = (\n <ChipElement\n className={chipClasses}\n disabled={ChipElement === 'button' ? disabled : undefined}\n onClick={isClickable && !hasBothControls ? handleClick : undefined}\n {...chipProps}\n >\n {hasBothControls ? (\n href !== undefined ? (\n renderLink(href, 'eidos-chip--action')\n ) : (\n <button\n type=\"button\"\n className=\"eidos-chip--action\"\n onClick={handleClick}\n disabled={disabled}\n >\n {body}\n </button>\n )\n ) : (\n body\n )}\n\n {isRemovable && (\n <button\n className=\"eidos-chip--remove-button\"\n onClick={handleRemove}\n disabled={disabled}\n aria-label=\"Remove\"\n type=\"button\"\n >\n <X className=\"eidos-chip--remove-icon\" />\n </button>\n )}\n </ChipElement>\n );\n\n return tooltip ? <Tooltip message={tooltip}>{chipContent}</Tooltip> : chipContent;\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  FOCUSABLE_SELECTOR
3
- } from "./chunk-U34INRFO.js";
3
+ } from "./chunk-PP6HS4GR.js";
4
4
 
5
5
  // src/components/Tooltip/Tooltip.component.tsx
6
6
  import { useState, useRef, useCallback, useEffect } from "react";
@@ -327,4 +327,4 @@ Tooltip.displayName = "Tooltip";
327
327
  export {
328
328
  Tooltip
329
329
  };
330
- //# sourceMappingURL=chunk-MCPGI6EI.js.map
330
+ //# sourceMappingURL=chunk-BUSMGQJ4.js.map
@@ -1,21 +1,21 @@
1
1
  import {
2
2
  DatePicker
3
- } from "./chunk-P6OJQ2RN.js";
3
+ } from "./chunk-FSX7DDLO.js";
4
4
  import {
5
5
  Select
6
- } from "./chunk-4S57PE43.js";
6
+ } from "./chunk-2WDL2ZVP.js";
7
7
  import {
8
8
  Input
9
- } from "./chunk-XIUZT4TO.js";
9
+ } from "./chunk-GE3QCXT7.js";
10
10
  import {
11
11
  Dropdown
12
- } from "./chunk-3X6QVHTD.js";
12
+ } from "./chunk-OERK3T7E.js";
13
13
  import {
14
14
  Badge
15
15
  } from "./chunk-3SKI6FXB.js";
16
16
  import {
17
17
  Button
18
- } from "./chunk-JY77VJAZ.js";
18
+ } from "./chunk-GHUEVNNU.js";
19
19
 
20
20
  // src/components/Table/TableFiltersDropdown.component.tsx
21
21
  import { useMemo, useState, useEffect, useRef } from "react";
@@ -4443,4 +4443,4 @@ export {
4443
4443
  sortableKeyboardCoordinates,
4444
4444
  TableFiltersDropdown
4445
4445
  };
4446
- //# sourceMappingURL=chunk-H3C6YECZ.js.map
4446
+ //# sourceMappingURL=chunk-D2PXPX56.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Dropdown
3
- } from "./chunk-3X6QVHTD.js";
3
+ } from "./chunk-OERK3T7E.js";
4
4
 
5
5
  // src/components/ColorPicker/ColorPicker.component.tsx
6
6
  import { useState, useRef, useEffect, useCallback } from "react";
@@ -532,4 +532,4 @@ ColorPicker.displayName = "ColorPicker";
532
532
  export {
533
533
  ColorPicker
534
534
  };
535
- //# sourceMappingURL=chunk-L6YJ6QTZ.js.map
535
+ //# sourceMappingURL=chunk-DCUIT7SI.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Button
3
- } from "./chunk-JY77VJAZ.js";
3
+ } from "./chunk-GHUEVNNU.js";
4
4
 
5
5
  // src/components/Snackbar/Snackbar.context.tsx
6
6
  import { createContext, useContext, useState, useCallback, useRef } from "react";
@@ -293,4 +293,4 @@ export {
293
293
  SnackbarContainer,
294
294
  useSnackbar
295
295
  };
296
- //# sourceMappingURL=chunk-HYRLK462.js.map
296
+ //# sourceMappingURL=chunk-EDPCI2JC.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  Select
3
- } from "./chunk-4S57PE43.js";
3
+ } from "./chunk-2WDL2ZVP.js";
4
4
  import {
5
5
  Button
6
- } from "./chunk-JY77VJAZ.js";
6
+ } from "./chunk-GHUEVNNU.js";
7
7
 
8
8
  // src/components/Pagination/Pagination.component.tsx
9
9
  import { useState, useEffect, useId } from "react";
@@ -209,4 +209,4 @@ Pagination.displayName = "Pagination";
209
209
  export {
210
210
  Pagination
211
211
  };
212
- //# sourceMappingURL=chunk-DPTTDHZ5.js.map
212
+ //# sourceMappingURL=chunk-FAGQGGT3.js.map
@@ -11,28 +11,28 @@ import {
11
11
  useSensors,
12
12
  useSortable,
13
13
  verticalListSortingStrategy
14
- } from "./chunk-H3C6YECZ.js";
14
+ } from "./chunk-D2PXPX56.js";
15
15
  import {
16
16
  SegmentedControl
17
- } from "./chunk-V64DICJK.js";
17
+ } from "./chunk-363IKX3C.js";
18
18
  import {
19
19
  SplitButton
20
- } from "./chunk-FHOD3FUN.js";
20
+ } from "./chunk-UTOTOWPS.js";
21
21
  import {
22
22
  Pagination
23
- } from "./chunk-DPTTDHZ5.js";
23
+ } from "./chunk-FAGQGGT3.js";
24
24
  import {
25
25
  Select
26
- } from "./chunk-4S57PE43.js";
26
+ } from "./chunk-2WDL2ZVP.js";
27
27
  import {
28
28
  Checkbox
29
29
  } from "./chunk-DGXHR6FV.js";
30
30
  import {
31
31
  Combobox
32
- } from "./chunk-IHPSRTVW.js";
32
+ } from "./chunk-Z3OEYDNI.js";
33
33
  import {
34
34
  Input
35
- } from "./chunk-XIUZT4TO.js";
35
+ } from "./chunk-GE3QCXT7.js";
36
36
  import {
37
37
  Spinner
38
38
  } from "./chunk-6ZAT5CGB.js";
@@ -41,17 +41,17 @@ import {
41
41
  } from "./chunk-3TUCQAYL.js";
42
42
  import {
43
43
  Menu
44
- } from "./chunk-WHQGJHMD.js";
44
+ } from "./chunk-TOLNPD7S.js";
45
45
  import {
46
46
  Dropdown
47
- } from "./chunk-3X6QVHTD.js";
47
+ } from "./chunk-OERK3T7E.js";
48
48
  import {
49
49
  Button
50
- } from "./chunk-JY77VJAZ.js";
50
+ } from "./chunk-GHUEVNNU.js";
51
51
  import {
52
52
  devWarn,
53
53
  renderIcon
54
- } from "./chunk-U34INRFO.js";
54
+ } from "./chunk-PP6HS4GR.js";
55
55
 
56
56
  // src/components/DataGrid/DataGrid.component.tsx
57
57
  import React, { useState, useEffect, useRef, useCallback, useMemo, useLayoutEffect } from "react";
@@ -1725,4 +1725,4 @@ var DataGrid = Object.assign(DataGridInner, { displayName: "DataGrid" });
1725
1725
  export {
1726
1726
  DataGrid
1727
1727
  };
1728
- //# sourceMappingURL=chunk-CNTG7OOO.js.map
1728
+ //# sourceMappingURL=chunk-FAXDWZQH.js.map
@@ -5,7 +5,7 @@ var _chunkKVIL4EP4cjs = require('./chunk-KVIL4EP4.cjs');
5
5
 
6
6
 
7
7
 
8
- var _chunkENMDOQQOcjs = require('./chunk-ENMDOQQO.cjs');
8
+ var _chunkR5WI5IGRcjs = require('./chunk-R5WI5IGR.cjs');
9
9
 
10
10
  // src/components/CommandPalette/CommandPalette.component.tsx
11
11
  var _react = require('react');
@@ -79,7 +79,7 @@ var CommandPalette = ({
79
79
  }, [shortcutKey, openPalette]);
80
80
  const [isMounted, setIsMounted] = _react.useState.call(void 0, open);
81
81
  const [isVisible, setIsVisible] = _react.useState.call(void 0, open);
82
- const isClient = _chunkENMDOQQOcjs.useIsClient.call(void 0, );
82
+ const isClient = _chunkR5WI5IGRcjs.useIsClient.call(void 0, );
83
83
  _react.useEffect.call(void 0, () => {
84
84
  let raf1 = 0;
85
85
  let raf2 = 0;
@@ -113,7 +113,7 @@ var CommandPalette = ({
113
113
  setFocusedIndex(0);
114
114
  }
115
115
  }, [open]);
116
- _chunkENMDOQQOcjs.useDialogFocus.call(void 0, isClient && open && isVisible, dialogRef, { initialFocus: inputRef });
116
+ _chunkR5WI5IGRcjs.useDialogFocus.call(void 0, isClient && open && isVisible, dialogRef, { initialFocus: inputRef });
117
117
  _react.useEffect.call(void 0, () => {
118
118
  setFocusedIndex(0);
119
119
  }, [query]);
@@ -181,7 +181,7 @@ var CommandPalette = ({
181
181
  const [customTriggerIsControl, setCustomTriggerIsControl] = _react.useState.call(void 0, false);
182
182
  _react.useEffect.call(void 0, () => {
183
183
  const element = customTriggerRef.current;
184
- setCustomTriggerIsControl(!!element && element.querySelector(_chunkENMDOQQOcjs.FOCUSABLE_SELECTOR) === null);
184
+ setCustomTriggerIsControl(!!element && element.querySelector(_chunkR5WI5IGRcjs.FOCUSABLE_SELECTOR) === null);
185
185
  }, [trigger]);
186
186
  const triggerNode = trigger === true ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
187
187
  "button",
@@ -377,4 +377,4 @@ CommandPalette.displayName = "CommandPalette";
377
377
 
378
378
 
379
379
  exports.CommandPalette = CommandPalette;
380
- //# sourceMappingURL=chunk-7NUVLVSL.cjs.map
380
+ //# sourceMappingURL=chunk-FJSK2RT7.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-7NUVLVSL.cjs","../src/components/CommandPalette/CommandPalette.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-7NUVLVSL.cjs","sourcesContent":[null,"import React, { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ArrowDown, ArrowUp, Command, CornerDownLeft, Search } from 'lucide-react';\nimport type { CommandItem, CommandPaletteProps } from './CommandPalette.types';\nimport { useDialogFocus, useIsClient, FOCUSABLE_SELECTOR } from '../../utils';\nimport { Kbd } from '../Kbd';\nimport './CommandPalette.scss';\n\n// ── Constants ──────────────────────────────────────────────────────────────────\n\n/** Must match the CSS transition duration in CommandPalette.scss */\nconst TRANSITION_MS = 200;\n\n// ── Pure helpers ───────────────────────────────────────────────────────────────\n\nfunction filterItems(items: CommandItem[], query: string): CommandItem[] {\n const q = query.trim().toLowerCase();\n if (!q) return items;\n return items.filter(({ label, description, keywords }) => {\n return (\n label.toLowerCase().includes(q) ||\n (description?.toLowerCase().includes(q) ?? false) ||\n (keywords?.some((k) => k.toLowerCase().includes(q)) ?? false)\n );\n });\n}\n\ninterface Group {\n label: string | null;\n items: CommandItem[];\n}\n\n/**\n * Groups items while preserving the order in which groups first appear.\n * Items with no `group` property are placed in a leading implicit section\n * (label: null) so that labelled groups always follow them.\n */\nfunction buildGroups(items: CommandItem[]): Group[] {\n const groups: Group[] = [];\n const groupMap = new Map<string, Group>();\n\n for (const item of items) {\n const key = item.group ?? '';\n let group = groupMap.get(key);\n if (!group) {\n group = { label: item.group ?? null, items: [] };\n groups.push(group);\n groupMap.set(key, group);\n }\n group.items.push(item);\n }\n\n return groups;\n}\n\n// ── Component ──────────────────────────────────────────────────────────────────\n\nexport const CommandPalette: React.FC<CommandPaletteProps> = ({\n open: openProp,\n defaultOpen = false,\n onClose,\n onOpen,\n shortcutKey = 'k',\n items,\n onSelect,\n placeholder = 'Search commands…',\n emptyText = 'No commands found',\n maxHeight = 360,\n className = '',\n footer,\n trigger,\n triggerLabel = 'Search',\n}) => {\n const dialogId = useId();\n const listId = `${dialogId}-list`;\n\n // ── Controlled / uncontrolled open state ───────────────────────────────────\n // Omitting `open` lets the palette own its state entirely, which combined\n // with the shortcut listener below means it needs zero external\n // useState/useEffect to work. Passing `open` (+ `onClose`, optionally\n // `onOpen`) keeps full external control for consumers who need it (syncing\n // with a URL, another piece of app state, etc).\n const isControlled = openProp !== undefined;\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const open = isControlled ? (openProp as boolean) : internalOpen;\n\n const close = useCallback(() => {\n if (!isControlled) setInternalOpen(false);\n onClose?.();\n }, [isControlled, onClose]);\n\n // Shared \"open\" path - uncontrolled flips the internal state directly;\n // controlled defers to `onOpen` since the palette can't change `open`\n // itself. Used by both the keyboard shortcut below and the inline\n // `trigger`'s click handler.\n const openPalette = useCallback(() => {\n if (isControlled) {\n onOpen?.();\n } else {\n setInternalOpen(true);\n }\n }, [isControlled, onOpen]);\n\n // Global keyboard shortcut - Cmd/Ctrl+<shortcutKey> opens the palette.\n useEffect(() => {\n if (!shortcutKey) return;\n\n const handler = (e: KeyboardEvent) => {\n if (!(e.metaKey || e.ctrlKey) || e.key.toLowerCase() !== shortcutKey.toLowerCase()) return;\n e.preventDefault();\n openPalette();\n };\n\n window.addEventListener('keydown', handler);\n return () => window.removeEventListener('keydown', handler);\n }, [shortcutKey, openPalette]);\n\n // ── Animation state machine (mirrors the Drawer pattern) ─────────────────\n // isMounted → portal exists in the DOM (controls render/null)\n // isVisible → CSS --visible modifier is applied (drives transitions)\n //\n // Opening: isMounted=true → double rAF → isVisible=true → CSS transitions fire\n // Closing: isVisible=false → CSS transitions reverse → after TRANSITION_MS → isMounted=false\n const [isMounted, setIsMounted] = useState(open);\n const [isVisible, setIsVisible] = useState(open);\n // `isMounted` starts as `open`, so a palette opened by `open`/`defaultOpen`\n // would portal on its first render, which throws under SSR. The trigger\n // below still renders on the server - only the portal is deferred.\n const isClient = useIsClient();\n\n useEffect(() => {\n let raf1 = 0;\n let raf2 = 0;\n let timerId: ReturnType<typeof setTimeout>;\n\n if (open) {\n setIsMounted(true);\n // Double rAF: ensures the browser has painted the initial off-screen\n // state before the CSS transition begins (React 18 automatic batching\n // means a single rAF is not always sufficient).\n raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setIsVisible(true));\n });\n } else {\n setIsVisible(false);\n timerId = setTimeout(() => setIsMounted(false), TRANSITION_MS);\n }\n\n return () => {\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n clearTimeout(timerId);\n };\n }, [open]);\n\n // ── Search state ───────────────────────────────────────────────────────────\n const [query, setQuery] = useState('');\n const [focusedIndex, setFocusedIndex] = useState(0);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const dialogRef = useRef<HTMLDivElement>(null);\n const itemRefs = useRef<Map<string, HTMLDivElement>>(new Map());\n\n // Derived lists - memoised to stabilise scroll-effect deps\n const filtered = useMemo(() => filterItems(items, query), [items, query]);\n const navigable = useMemo(() => filtered.filter((item) => !item.disabled), [filtered]);\n const groups = useMemo(() => buildGroups(filtered), [filtered]);\n\n // Reset search query and selection when the palette is opened\n useEffect(() => {\n if (open) {\n setQuery('');\n setFocusedIndex(0);\n }\n }, [open]);\n\n // Focus the search input on open, trap Tab inside the dialog, and return\n // focus to the trigger on close.\n //\n // This replaces a bare `inputRef.current?.focus()` effect. That moved focus\n // in correctly but nothing kept it there: the first Tab left the dialog for\n // the page behind it, and closing the palette stranded focus wherever it\n // happened to be. `initialFocus` preserves the original behaviour of\n // landing on the search field rather than the first focusable node.\n // `isClient` for the same reason as `Modal`: a palette opened by `open` or\n // `defaultOpen` has no portal on its first render, and this would run against\n // a null ref and never re-run.\n useDialogFocus(isClient && open && isVisible, dialogRef, { initialFocus: inputRef });\n\n // Reset focused index to 0 whenever the filtered list changes\n useEffect(() => {\n setFocusedIndex(0);\n }, [query]);\n\n // Scroll the focused item into view during keyboard navigation\n useEffect(() => {\n const focusedItem = navigable[focusedIndex];\n if (!focusedItem) return;\n itemRefs.current.get(focusedItem.id)?.scrollIntoView({ block: 'nearest' });\n }, [focusedIndex, navigable]);\n\n // Body scroll lock (tied to open, not to isMounted, so it releases promptly\n // when the consumer decides to close - even before the exit animation ends)\n useEffect(() => {\n if (open) {\n document.body.style.overflow = 'hidden';\n }\n return () => {\n document.body.style.overflow = '';\n };\n }, [open]);\n\n // ── Interaction handlers ───────────────────────────────────────────────────\n\n const selectItem = useCallback(\n (item: CommandItem) => {\n if (item.disabled) return;\n item.action?.();\n onSelect?.(item);\n close();\n },\n [close, onSelect],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n if (navigable.length === 0) return;\n setFocusedIndex((i) => (i + 1) % navigable.length);\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n if (navigable.length === 0) return;\n setFocusedIndex((i) => (i - 1 + navigable.length) % navigable.length);\n break;\n }\n case 'Enter': {\n e.preventDefault();\n const item = navigable[focusedIndex];\n if (item) selectItem(item);\n break;\n }\n case 'Escape': {\n e.preventDefault();\n close();\n break;\n }\n }\n },\n [focusedIndex, navigable, close, selectItem],\n );\n\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Only fire when the click lands directly on the backdrop element,\n // not on any child (the dialog itself or its contents).\n if (e.target === e.currentTarget) {\n close();\n }\n },\n [close],\n );\n\n // Whether the custom trigger wrapper has to be the control itself, i.e.\n // whether what the caller passed contains nothing focusable. Measured after\n // render, like `Tooltip`'s equivalent.\n const customTriggerRef = useRef<HTMLDivElement>(null);\n const [customTriggerIsControl, setCustomTriggerIsControl] = useState(false);\n\n useEffect(() => {\n const element = customTriggerRef.current;\n setCustomTriggerIsControl(!!element && element.querySelector(FOCUSABLE_SELECTOR) === null);\n }, [trigger]);\n\n // ── Render ─────────────────────────────────────────────────────────────────\n\n // The inline trigger (if any) must render regardless of `isMounted` - it's\n // what opens the palette in the first place, so it can't be gated behind\n // the portal's own mount state.\n const triggerNode =\n trigger === true ? (\n <button\n type=\"button\"\n className=\"eidos-cmd-trigger-default\"\n onClick={openPalette}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n >\n <span>{triggerLabel}</span>\n {shortcutKey && (\n <Kbd size=\"sm\" className=\"eidos-cmd-trigger-kbd\">\n <Command size={10} />\n {shortcutKey.toUpperCase()}\n </Kbd>\n )}\n </button>\n ) : trigger ? (\n // The wrapper only becomes a control when what it wraps is not one.\n //\n // It used to be `role=\"button\" tabIndex={0}` unconditionally, with no key\n // handler, which was wrong in both directions at once: around an\n // interactive child it produced a button inside a button and a second tab\n // stop, and around a non-interactive one - `Avatar`, which is the\n // documented example - it produced a focusable element that announced\n // itself as a button and did nothing when activated.\n //\n // Measured from the DOM rather than guessed from the node type, because\n // `trigger` is an arbitrary `ReactNode` and the control may be nested\n // inside it. Same approach as `Tooltip`.\n <div\n ref={customTriggerRef}\n className=\"eidos-cmd-trigger\"\n onClick={openPalette}\n {...(customTriggerIsControl\n ? {\n role: 'button',\n tabIndex: 0,\n 'aria-haspopup': 'dialog' as const,\n 'aria-expanded': open,\n onKeyDown: (event: React.KeyboardEvent) => {\n // A `div` is not a button: Enter and Space produce no click of\n // their own.\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n openPalette();\n }\n },\n }\n : {})}\n >\n {trigger}\n </div>\n ) : null;\n\n const maxHeightValue = typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n\n // The root element must not change shape between the closed and open\n // states.\n //\n // This used to `return triggerNode` while closed and a fragment once\n // mounted. React compares the root by element type, so flipping from\n // `<button>` to `<Fragment>` unmounted the trigger and mounted a brand new\n // one - the very element the user had just clicked was destroyed. Focus\n // was lost with it, which made returning focus on close impossible: the\n // node to return to no longer existed.\n //\n // Always returning the fragment keeps `triggerNode` in a stable position,\n // so React preserves the DOM node across open and close.\n return (\n <>\n {triggerNode}\n {isClient &&\n isMounted &&\n createPortal(\n <div\n className={['eidos-cmd-backdrop', isVisible && 'eidos-cmd-backdrop--visible']\n .filter(Boolean)\n .join(' ')}\n onClick={handleBackdropClick}\n aria-hidden={!open}\n >\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n id={dialogId}\n className={['eidos-cmd-dialog', isVisible && 'eidos-cmd-dialog--visible', className]\n .filter(Boolean)\n .join(' ')}\n onKeyDown={handleKeyDown}\n >\n {/* ── Search ──────────────────────────────────────────────────────── */}\n <div className=\"eidos-cmd-search\">\n <Search className=\"eidos-cmd-search-icon\" size={18} aria-hidden=\"true\" />\n\n <input\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-label={placeholder}\n className=\"eidos-cmd-input\"\n placeholder={placeholder}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n spellCheck={false}\n autoComplete=\"off\"\n />\n\n {/* Reminds users of the configured shortcut, if any */}\n {shortcutKey && (\n <div className=\"eidos-cmd-search-badge\" aria-hidden=\"true\">\n <Command size={11} />\n <span>{shortcutKey.toUpperCase()}</span>\n </div>\n )}\n </div>\n\n {/* ── Results list ─────────────────────────────────────────────────── */}\n <div\n id={listId}\n role=\"listbox\"\n aria-label=\"Commands\"\n className=\"eidos-cmd-list\"\n style={{ maxHeight: maxHeightValue }}\n >\n {filtered.length === 0 ? (\n <p className=\"eidos-cmd-empty\" role=\"status\">\n {emptyText}\n </p>\n ) : (\n groups.map((group) => (\n <div\n key={group.label ?? '__ungrouped__'}\n role=\"group\"\n aria-label={group.label ?? undefined}\n >\n {group.label && (\n <div className=\"eidos-cmd-group-label\" aria-hidden=\"true\">\n {group.label}\n </div>\n )}\n\n {group.items.map((item) => {\n const isFocused = navigable[focusedIndex]?.id === item.id;\n const Icon = item.icon;\n\n return (\n <div\n key={item.id}\n ref={(el) => {\n if (el) {\n itemRefs.current.set(item.id, el);\n } else {\n itemRefs.current.delete(item.id);\n }\n }}\n role=\"option\"\n aria-selected={isFocused}\n aria-disabled={item.disabled}\n className={[\n 'eidos-cmd-item',\n isFocused && 'eidos-cmd-item--focused',\n item.disabled && 'eidos-cmd-item--disabled',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => selectItem(item)}\n onMouseEnter={() => {\n if (!item.disabled) {\n const idx = navigable.findIndex((n) => n.id === item.id);\n if (idx !== -1) setFocusedIndex(idx);\n }\n }}\n >\n {Icon && (\n <span className=\"eidos-cmd-item-icon\" aria-hidden=\"true\">\n <Icon size={16} />\n </span>\n )}\n\n <div className=\"eidos-cmd-item-body\">\n <div className=\"eidos-cmd-item-label\">{item.label}</div>\n {item.description && (\n <div className=\"eidos-cmd-item-description\">{item.description}</div>\n )}\n </div>\n\n {item.shortcut && item.shortcut.length > 0 && (\n <div\n className=\"eidos-cmd-item-shortcut\"\n aria-label={`Shortcut: ${item.shortcut.join(' ')}`}\n >\n {item.shortcut.map((key, i) => (\n <kbd key={i} className=\"eidos-cmd-kbd\">\n {key}\n </kbd>\n ))}\n </div>\n )}\n </div>\n );\n })}\n </div>\n ))\n )}\n </div>\n\n {/* ── Footer ───────────────────────────────────────────────────────── */}\n <div className=\"eidos-cmd-footer\">\n <div className=\"eidos-cmd-hints\" aria-hidden=\"true\">\n <span>\n <ArrowUp size={11} />\n <ArrowDown size={11} /> Navigate\n </span>\n <span>\n <CornerDownLeft size={11} /> Select\n </span>\n <span>Esc Close</span>\n </div>\n\n {footer && <div className=\"eidos-cmd-footer-slot\">{footer}</div>}\n </div>\n </div>\n </div>,\n document.body,\n )}\n </>\n );\n};\n\nCommandPalette.displayName = 'CommandPalette';\n"]}
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-FJSK2RT7.cjs","../src/components/CommandPalette/CommandPalette.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-FJSK2RT7.cjs","sourcesContent":[null,"import React, { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ArrowDown, ArrowUp, Command, CornerDownLeft, Search } from 'lucide-react';\nimport type { CommandItem, CommandPaletteProps } from './CommandPalette.types';\nimport { useDialogFocus, useIsClient, FOCUSABLE_SELECTOR } from '../../utils';\nimport { Kbd } from '../Kbd';\nimport './CommandPalette.scss';\n\n// ── Constants ──────────────────────────────────────────────────────────────────\n\n/** Must match the CSS transition duration in CommandPalette.scss */\nconst TRANSITION_MS = 200;\n\n// ── Pure helpers ───────────────────────────────────────────────────────────────\n\nfunction filterItems(items: CommandItem[], query: string): CommandItem[] {\n const q = query.trim().toLowerCase();\n if (!q) return items;\n return items.filter(({ label, description, keywords }) => {\n return (\n label.toLowerCase().includes(q) ||\n (description?.toLowerCase().includes(q) ?? false) ||\n (keywords?.some((k) => k.toLowerCase().includes(q)) ?? false)\n );\n });\n}\n\ninterface Group {\n label: string | null;\n items: CommandItem[];\n}\n\n/**\n * Groups items while preserving the order in which groups first appear.\n * Items with no `group` property are placed in a leading implicit section\n * (label: null) so that labelled groups always follow them.\n */\nfunction buildGroups(items: CommandItem[]): Group[] {\n const groups: Group[] = [];\n const groupMap = new Map<string, Group>();\n\n for (const item of items) {\n const key = item.group ?? '';\n let group = groupMap.get(key);\n if (!group) {\n group = { label: item.group ?? null, items: [] };\n groups.push(group);\n groupMap.set(key, group);\n }\n group.items.push(item);\n }\n\n return groups;\n}\n\n// ── Component ──────────────────────────────────────────────────────────────────\n\nexport const CommandPalette: React.FC<CommandPaletteProps> = ({\n open: openProp,\n defaultOpen = false,\n onClose,\n onOpen,\n shortcutKey = 'k',\n items,\n onSelect,\n placeholder = 'Search commands…',\n emptyText = 'No commands found',\n maxHeight = 360,\n className = '',\n footer,\n trigger,\n triggerLabel = 'Search',\n}) => {\n const dialogId = useId();\n const listId = `${dialogId}-list`;\n\n // ── Controlled / uncontrolled open state ───────────────────────────────────\n // Omitting `open` lets the palette own its state entirely, which combined\n // with the shortcut listener below means it needs zero external\n // useState/useEffect to work. Passing `open` (+ `onClose`, optionally\n // `onOpen`) keeps full external control for consumers who need it (syncing\n // with a URL, another piece of app state, etc).\n const isControlled = openProp !== undefined;\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const open = isControlled ? (openProp as boolean) : internalOpen;\n\n const close = useCallback(() => {\n if (!isControlled) setInternalOpen(false);\n onClose?.();\n }, [isControlled, onClose]);\n\n // Shared \"open\" path - uncontrolled flips the internal state directly;\n // controlled defers to `onOpen` since the palette can't change `open`\n // itself. Used by both the keyboard shortcut below and the inline\n // `trigger`'s click handler.\n const openPalette = useCallback(() => {\n if (isControlled) {\n onOpen?.();\n } else {\n setInternalOpen(true);\n }\n }, [isControlled, onOpen]);\n\n // Global keyboard shortcut - Cmd/Ctrl+<shortcutKey> opens the palette.\n useEffect(() => {\n if (!shortcutKey) return;\n\n const handler = (e: KeyboardEvent) => {\n if (!(e.metaKey || e.ctrlKey) || e.key.toLowerCase() !== shortcutKey.toLowerCase()) return;\n e.preventDefault();\n openPalette();\n };\n\n window.addEventListener('keydown', handler);\n return () => window.removeEventListener('keydown', handler);\n }, [shortcutKey, openPalette]);\n\n // ── Animation state machine (mirrors the Drawer pattern) ─────────────────\n // isMounted → portal exists in the DOM (controls render/null)\n // isVisible → CSS --visible modifier is applied (drives transitions)\n //\n // Opening: isMounted=true → double rAF → isVisible=true → CSS transitions fire\n // Closing: isVisible=false → CSS transitions reverse → after TRANSITION_MS → isMounted=false\n const [isMounted, setIsMounted] = useState(open);\n const [isVisible, setIsVisible] = useState(open);\n // `isMounted` starts as `open`, so a palette opened by `open`/`defaultOpen`\n // would portal on its first render, which throws under SSR. The trigger\n // below still renders on the server - only the portal is deferred.\n const isClient = useIsClient();\n\n useEffect(() => {\n let raf1 = 0;\n let raf2 = 0;\n let timerId: ReturnType<typeof setTimeout>;\n\n if (open) {\n setIsMounted(true);\n // Double rAF: ensures the browser has painted the initial off-screen\n // state before the CSS transition begins (React 18 automatic batching\n // means a single rAF is not always sufficient).\n raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setIsVisible(true));\n });\n } else {\n setIsVisible(false);\n timerId = setTimeout(() => setIsMounted(false), TRANSITION_MS);\n }\n\n return () => {\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n clearTimeout(timerId);\n };\n }, [open]);\n\n // ── Search state ───────────────────────────────────────────────────────────\n const [query, setQuery] = useState('');\n const [focusedIndex, setFocusedIndex] = useState(0);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const dialogRef = useRef<HTMLDivElement>(null);\n const itemRefs = useRef<Map<string, HTMLDivElement>>(new Map());\n\n // Derived lists - memoised to stabilise scroll-effect deps\n const filtered = useMemo(() => filterItems(items, query), [items, query]);\n const navigable = useMemo(() => filtered.filter((item) => !item.disabled), [filtered]);\n const groups = useMemo(() => buildGroups(filtered), [filtered]);\n\n // Reset search query and selection when the palette is opened\n useEffect(() => {\n if (open) {\n setQuery('');\n setFocusedIndex(0);\n }\n }, [open]);\n\n // Focus the search input on open, trap Tab inside the dialog, and return\n // focus to the trigger on close.\n //\n // This replaces a bare `inputRef.current?.focus()` effect. That moved focus\n // in correctly but nothing kept it there: the first Tab left the dialog for\n // the page behind it, and closing the palette stranded focus wherever it\n // happened to be. `initialFocus` preserves the original behaviour of\n // landing on the search field rather than the first focusable node.\n // `isClient` for the same reason as `Modal`: a palette opened by `open` or\n // `defaultOpen` has no portal on its first render, and this would run against\n // a null ref and never re-run.\n useDialogFocus(isClient && open && isVisible, dialogRef, { initialFocus: inputRef });\n\n // Reset focused index to 0 whenever the filtered list changes\n useEffect(() => {\n setFocusedIndex(0);\n }, [query]);\n\n // Scroll the focused item into view during keyboard navigation\n useEffect(() => {\n const focusedItem = navigable[focusedIndex];\n if (!focusedItem) return;\n itemRefs.current.get(focusedItem.id)?.scrollIntoView({ block: 'nearest' });\n }, [focusedIndex, navigable]);\n\n // Body scroll lock (tied to open, not to isMounted, so it releases promptly\n // when the consumer decides to close - even before the exit animation ends)\n useEffect(() => {\n if (open) {\n document.body.style.overflow = 'hidden';\n }\n return () => {\n document.body.style.overflow = '';\n };\n }, [open]);\n\n // ── Interaction handlers ───────────────────────────────────────────────────\n\n const selectItem = useCallback(\n (item: CommandItem) => {\n if (item.disabled) return;\n item.action?.();\n onSelect?.(item);\n close();\n },\n [close, onSelect],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n if (navigable.length === 0) return;\n setFocusedIndex((i) => (i + 1) % navigable.length);\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n if (navigable.length === 0) return;\n setFocusedIndex((i) => (i - 1 + navigable.length) % navigable.length);\n break;\n }\n case 'Enter': {\n e.preventDefault();\n const item = navigable[focusedIndex];\n if (item) selectItem(item);\n break;\n }\n case 'Escape': {\n e.preventDefault();\n close();\n break;\n }\n }\n },\n [focusedIndex, navigable, close, selectItem],\n );\n\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Only fire when the click lands directly on the backdrop element,\n // not on any child (the dialog itself or its contents).\n if (e.target === e.currentTarget) {\n close();\n }\n },\n [close],\n );\n\n // Whether the custom trigger wrapper has to be the control itself, i.e.\n // whether what the caller passed contains nothing focusable. Measured after\n // render, like `Tooltip`'s equivalent.\n const customTriggerRef = useRef<HTMLDivElement>(null);\n const [customTriggerIsControl, setCustomTriggerIsControl] = useState(false);\n\n useEffect(() => {\n const element = customTriggerRef.current;\n setCustomTriggerIsControl(!!element && element.querySelector(FOCUSABLE_SELECTOR) === null);\n }, [trigger]);\n\n // ── Render ─────────────────────────────────────────────────────────────────\n\n // The inline trigger (if any) must render regardless of `isMounted` - it's\n // what opens the palette in the first place, so it can't be gated behind\n // the portal's own mount state.\n const triggerNode =\n trigger === true ? (\n <button\n type=\"button\"\n className=\"eidos-cmd-trigger-default\"\n onClick={openPalette}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n >\n <span>{triggerLabel}</span>\n {shortcutKey && (\n <Kbd size=\"sm\" className=\"eidos-cmd-trigger-kbd\">\n <Command size={10} />\n {shortcutKey.toUpperCase()}\n </Kbd>\n )}\n </button>\n ) : trigger ? (\n // The wrapper only becomes a control when what it wraps is not one.\n //\n // It used to be `role=\"button\" tabIndex={0}` unconditionally, with no key\n // handler, which was wrong in both directions at once: around an\n // interactive child it produced a button inside a button and a second tab\n // stop, and around a non-interactive one - `Avatar`, which is the\n // documented example - it produced a focusable element that announced\n // itself as a button and did nothing when activated.\n //\n // Measured from the DOM rather than guessed from the node type, because\n // `trigger` is an arbitrary `ReactNode` and the control may be nested\n // inside it. Same approach as `Tooltip`.\n <div\n ref={customTriggerRef}\n className=\"eidos-cmd-trigger\"\n onClick={openPalette}\n {...(customTriggerIsControl\n ? {\n role: 'button',\n tabIndex: 0,\n 'aria-haspopup': 'dialog' as const,\n 'aria-expanded': open,\n onKeyDown: (event: React.KeyboardEvent) => {\n // A `div` is not a button: Enter and Space produce no click of\n // their own.\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n openPalette();\n }\n },\n }\n : {})}\n >\n {trigger}\n </div>\n ) : null;\n\n const maxHeightValue = typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n\n // The root element must not change shape between the closed and open\n // states.\n //\n // This used to `return triggerNode` while closed and a fragment once\n // mounted. React compares the root by element type, so flipping from\n // `<button>` to `<Fragment>` unmounted the trigger and mounted a brand new\n // one - the very element the user had just clicked was destroyed. Focus\n // was lost with it, which made returning focus on close impossible: the\n // node to return to no longer existed.\n //\n // Always returning the fragment keeps `triggerNode` in a stable position,\n // so React preserves the DOM node across open and close.\n return (\n <>\n {triggerNode}\n {isClient &&\n isMounted &&\n createPortal(\n <div\n className={['eidos-cmd-backdrop', isVisible && 'eidos-cmd-backdrop--visible']\n .filter(Boolean)\n .join(' ')}\n onClick={handleBackdropClick}\n aria-hidden={!open}\n >\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n id={dialogId}\n className={['eidos-cmd-dialog', isVisible && 'eidos-cmd-dialog--visible', className]\n .filter(Boolean)\n .join(' ')}\n onKeyDown={handleKeyDown}\n >\n {/* ── Search ──────────────────────────────────────────────────────── */}\n <div className=\"eidos-cmd-search\">\n <Search className=\"eidos-cmd-search-icon\" size={18} aria-hidden=\"true\" />\n\n <input\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-label={placeholder}\n className=\"eidos-cmd-input\"\n placeholder={placeholder}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n spellCheck={false}\n autoComplete=\"off\"\n />\n\n {/* Reminds users of the configured shortcut, if any */}\n {shortcutKey && (\n <div className=\"eidos-cmd-search-badge\" aria-hidden=\"true\">\n <Command size={11} />\n <span>{shortcutKey.toUpperCase()}</span>\n </div>\n )}\n </div>\n\n {/* ── Results list ─────────────────────────────────────────────────── */}\n <div\n id={listId}\n role=\"listbox\"\n aria-label=\"Commands\"\n className=\"eidos-cmd-list\"\n style={{ maxHeight: maxHeightValue }}\n >\n {filtered.length === 0 ? (\n <p className=\"eidos-cmd-empty\" role=\"status\">\n {emptyText}\n </p>\n ) : (\n groups.map((group) => (\n <div\n key={group.label ?? '__ungrouped__'}\n role=\"group\"\n aria-label={group.label ?? undefined}\n >\n {group.label && (\n <div className=\"eidos-cmd-group-label\" aria-hidden=\"true\">\n {group.label}\n </div>\n )}\n\n {group.items.map((item) => {\n const isFocused = navigable[focusedIndex]?.id === item.id;\n const Icon = item.icon;\n\n return (\n <div\n key={item.id}\n ref={(el) => {\n if (el) {\n itemRefs.current.set(item.id, el);\n } else {\n itemRefs.current.delete(item.id);\n }\n }}\n role=\"option\"\n aria-selected={isFocused}\n aria-disabled={item.disabled}\n className={[\n 'eidos-cmd-item',\n isFocused && 'eidos-cmd-item--focused',\n item.disabled && 'eidos-cmd-item--disabled',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => selectItem(item)}\n onMouseEnter={() => {\n if (!item.disabled) {\n const idx = navigable.findIndex((n) => n.id === item.id);\n if (idx !== -1) setFocusedIndex(idx);\n }\n }}\n >\n {Icon && (\n <span className=\"eidos-cmd-item-icon\" aria-hidden=\"true\">\n <Icon size={16} />\n </span>\n )}\n\n <div className=\"eidos-cmd-item-body\">\n <div className=\"eidos-cmd-item-label\">{item.label}</div>\n {item.description && (\n <div className=\"eidos-cmd-item-description\">{item.description}</div>\n )}\n </div>\n\n {item.shortcut && item.shortcut.length > 0 && (\n <div\n className=\"eidos-cmd-item-shortcut\"\n aria-label={`Shortcut: ${item.shortcut.join(' ')}`}\n >\n {item.shortcut.map((key, i) => (\n <kbd key={i} className=\"eidos-cmd-kbd\">\n {key}\n </kbd>\n ))}\n </div>\n )}\n </div>\n );\n })}\n </div>\n ))\n )}\n </div>\n\n {/* ── Footer ───────────────────────────────────────────────────────── */}\n <div className=\"eidos-cmd-footer\">\n <div className=\"eidos-cmd-hints\" aria-hidden=\"true\">\n <span>\n <ArrowUp size={11} />\n <ArrowDown size={11} /> Navigate\n </span>\n <span>\n <CornerDownLeft size={11} /> Select\n </span>\n <span>Esc Close</span>\n </div>\n\n {footer && <div className=\"eidos-cmd-footer-slot\">{footer}</div>}\n </div>\n </div>\n </div>,\n document.body,\n )}\n </>\n );\n};\n\nCommandPalette.displayName = 'CommandPalette';\n"]}
@@ -1,20 +1,19 @@
1
1
  import {
2
2
  Select
3
- } from "./chunk-4S57PE43.js";
3
+ } from "./chunk-2WDL2ZVP.js";
4
4
  import {
5
5
  Input
6
- } from "./chunk-XIUZT4TO.js";
6
+ } from "./chunk-GE3QCXT7.js";
7
7
  import {
8
8
  Dropdown
9
- } from "./chunk-3X6QVHTD.js";
9
+ } from "./chunk-OERK3T7E.js";
10
10
  import {
11
11
  Button
12
- } from "./chunk-JY77VJAZ.js";
12
+ } from "./chunk-GHUEVNNU.js";
13
13
  import {
14
14
  devWarn,
15
- fullWidthModifier,
16
15
  useDialogFocus
17
- } from "./chunk-U34INRFO.js";
16
+ } from "./chunk-PP6HS4GR.js";
18
17
  import {
19
18
  __commonJS,
20
19
  __toESM
@@ -1189,7 +1188,7 @@ var DatePicker = ({
1189
1188
  "div",
1190
1189
  {
1191
1190
  ref: triggerRef,
1192
- className: `eidos-date-picker-trigger${fullWidth ? ` ${fullWidthModifier("eidos-date-picker-trigger")}` : ""}`,
1191
+ className: `eidos-date-picker-trigger${fullWidth ? ` eidos-date-picker-trigger--full-width` : ""}`,
1193
1192
  onKeyDown: (event) => {
1194
1193
  if (disabled) return;
1195
1194
  if (event.key === "Enter" || event.key === " " || event.key === "ArrowDown") {
@@ -1361,7 +1360,7 @@ var DatePicker = ({
1361
1360
  return /* @__PURE__ */ jsx3(
1362
1361
  "div",
1363
1362
  {
1364
- className: `eidos-date-picker-container${fullWidth ? ` ${fullWidthModifier("eidos-date-picker-container")}` : ""} ${className}`.trim(),
1363
+ className: `eidos-date-picker-container${fullWidth ? ` eidos-date-picker-container--full-width` : ""} ${className}`.trim(),
1365
1364
  children: /* @__PURE__ */ jsx3(
1366
1365
  Dropdown,
1367
1366
  {
@@ -1389,4 +1388,4 @@ export {
1389
1388
  TimeInput,
1390
1389
  DatePicker
1391
1390
  };
1392
- //# sourceMappingURL=chunk-P6OJQ2RN.js.map
1391
+ //# sourceMappingURL=chunk-FSX7DDLO.js.map