eidos-ui 3.3.0 → 3.5.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 (354) hide show
  1. package/README.md +17 -5
  2. package/dist/{Input.types-XrJTI0JC.d.ts → Input.types-CSDMaZNe.d.ts} +10 -0
  3. package/dist/{Input.types-DFZNyJGF.d.cts → Input.types-D7-sWq-q.d.cts} +10 -0
  4. package/dist/{Menu.types-DNIpjSAK.d.ts → Menu.types-BN4g1-3A.d.ts} +9 -0
  5. package/dist/{Menu.types-DwcuCZM7.d.cts → Menu.types-CTnUijv5.d.cts} +9 -0
  6. package/dist/{Select.types-B4kDpkGB.d.ts → Select.types-C2tGy1vj.d.ts} +11 -1
  7. package/dist/{Select.types-CAkT2ACt.d.cts → Select.types-ok-03rLo.d.cts} +11 -1
  8. package/dist/{Table.types-CPj-udMc.d.cts → Table.types-D-9tC0kJ.d.cts} +2 -3
  9. package/dist/{Table.types-CZZ7QWAI.d.ts → Table.types-D8pmgxKA.d.ts} +2 -3
  10. package/dist/{Toolbar.types-RN0klQzu.d.ts → Toolbar.types-CKnQC_TW.d.ts} +1 -1
  11. package/dist/{Toolbar.types-DSk8z2iy.d.cts → Toolbar.types-DUz2mxct.d.cts} +1 -1
  12. package/dist/alert/index.cjs +5 -5
  13. package/dist/alert/index.js +4 -4
  14. package/dist/button/index.cjs +4 -4
  15. package/dist/button/index.js +3 -3
  16. package/dist/checkbox/index.cjs +2 -2
  17. package/dist/checkbox/index.js +1 -1
  18. package/dist/chip/index.cjs +4 -4
  19. package/dist/chip/index.js +3 -3
  20. package/dist/{chunk-ITXDSQT2.js → chunk-24HKKSKX.js} +94 -102
  21. package/dist/chunk-24HKKSKX.js.map +1 -0
  22. package/dist/{chunk-GDQWSCJQ.js → chunk-26SO4LZ5.js} +4 -4
  23. package/dist/{chunk-GPRJYPIG.js → chunk-2JW3WSBF.js} +6 -4
  24. package/dist/chunk-2JW3WSBF.js.map +1 -0
  25. package/dist/{chunk-MHZIBV2C.js → chunk-2PCCGQOH.js} +90 -19
  26. package/dist/chunk-2PCCGQOH.js.map +1 -0
  27. package/dist/{chunk-3EPND5M2.cjs → chunk-2T7ZMMH5.cjs} +72 -19
  28. package/dist/chunk-2T7ZMMH5.cjs.map +1 -0
  29. package/dist/chunk-35LGEPLP.cjs +134 -0
  30. package/dist/chunk-35LGEPLP.cjs.map +1 -0
  31. package/dist/{chunk-R4M6SNUU.cjs → chunk-36JFXFM2.cjs} +48 -37
  32. package/dist/chunk-36JFXFM2.cjs.map +1 -0
  33. package/dist/{chunk-ND526PMG.cjs → chunk-3KBBJZHK.cjs} +11 -11
  34. package/dist/{chunk-ND526PMG.cjs.map → chunk-3KBBJZHK.cjs.map} +1 -1
  35. package/dist/{chunk-EH42ND5Q.cjs → chunk-3RWZC6OW.cjs} +5 -5
  36. package/dist/{chunk-EH42ND5Q.cjs.map → chunk-3RWZC6OW.cjs.map} +1 -1
  37. package/dist/{chunk-G5N3C6AU.cjs → chunk-3ZRFOKDM.cjs} +36 -36
  38. package/dist/{chunk-G5N3C6AU.cjs.map → chunk-3ZRFOKDM.cjs.map} +1 -1
  39. package/dist/{chunk-I5XR2V4A.cjs → chunk-4AO5RKV5.cjs} +87 -96
  40. package/dist/chunk-4AO5RKV5.cjs.map +1 -0
  41. package/dist/{chunk-5HUZYY54.js → chunk-4J25XZDI.js} +23 -13
  42. package/dist/chunk-4J25XZDI.js.map +1 -0
  43. package/dist/{chunk-FXZJL2AM.cjs → chunk-4JSTBA4F.cjs} +12 -6
  44. package/dist/chunk-4JSTBA4F.cjs.map +1 -0
  45. package/dist/{chunk-GG5YGESX.js → chunk-4LNTZPSQ.js} +4 -3
  46. package/dist/chunk-4LNTZPSQ.js.map +1 -0
  47. package/dist/{chunk-3EUTXQDB.js → chunk-5XH2PHT2.js} +31 -24
  48. package/dist/chunk-5XH2PHT2.js.map +1 -0
  49. package/dist/{chunk-OJDYTCMO.cjs → chunk-66UQTF57.cjs} +69 -62
  50. package/dist/chunk-66UQTF57.cjs.map +1 -0
  51. package/dist/{chunk-MCWTQT3M.cjs → chunk-6JHVXWDV.cjs} +125 -54
  52. package/dist/chunk-6JHVXWDV.cjs.map +1 -0
  53. package/dist/chunk-75GFIQRU.js +88 -0
  54. package/dist/chunk-75GFIQRU.js.map +1 -0
  55. package/dist/{chunk-55J4LEKT.cjs → chunk-7BFODYNL.cjs} +11 -8
  56. package/dist/chunk-7BFODYNL.cjs.map +1 -0
  57. package/dist/{chunk-TEVZHN5I.cjs → chunk-7VJCGKVP.cjs} +28 -15
  58. package/dist/chunk-7VJCGKVP.cjs.map +1 -0
  59. package/dist/{chunk-KQJ3IAFT.js → chunk-A3LMUPG3.js} +2 -2
  60. package/dist/{chunk-O2AACVSF.js → chunk-AR2ZOO6L.js} +3 -3
  61. package/dist/{chunk-Z5U4NJTW.cjs → chunk-BEOECPVJ.cjs} +50 -23
  62. package/dist/chunk-BEOECPVJ.cjs.map +1 -0
  63. package/dist/{chunk-E7FGY7BJ.js → chunk-BFKPJ627.js} +5 -4
  64. package/dist/chunk-BFKPJ627.js.map +1 -0
  65. package/dist/{chunk-M7PF4FKQ.js → chunk-D7SQ7LHJ.js} +6 -3
  66. package/dist/chunk-D7SQ7LHJ.js.map +1 -0
  67. package/dist/chunk-DA375AI6.cjs +88 -0
  68. package/dist/chunk-DA375AI6.cjs.map +1 -0
  69. package/dist/{chunk-H6CWTMAH.js → chunk-DGXHR6FV.js} +5 -2
  70. package/dist/chunk-DGXHR6FV.js.map +1 -0
  71. package/dist/{chunk-ZNWIHUHZ.cjs → chunk-DU5JKTHK.cjs} +12 -4
  72. package/dist/chunk-DU5JKTHK.cjs.map +1 -0
  73. package/dist/{chunk-HALVTKW7.js → chunk-FIVMMCGM.js} +72 -81
  74. package/dist/chunk-FIVMMCGM.js.map +1 -0
  75. package/dist/{chunk-RYOQYYDO.js → chunk-GIEDIAPD.js} +12 -6
  76. package/dist/chunk-GIEDIAPD.js.map +1 -0
  77. package/dist/{chunk-NQ4L6PYW.js → chunk-GOF6A4M4.js} +2 -2
  78. package/dist/{chunk-NQ4L6PYW.js.map → chunk-GOF6A4M4.js.map} +1 -1
  79. package/dist/{chunk-L23WWO3D.js → chunk-GPVGGBIR.js} +2 -2
  80. package/dist/{chunk-OAK7HFOJ.js → chunk-GWHZFX2H.js} +21 -16
  81. package/dist/chunk-GWHZFX2H.js.map +1 -0
  82. package/dist/{chunk-HYDNZXPU.js → chunk-H2RS6Z6Q.js} +41 -25
  83. package/dist/{chunk-HYDNZXPU.js.map → chunk-H2RS6Z6Q.js.map} +1 -1
  84. package/dist/{chunk-2QEKSRVX.js → chunk-HEX4IMLO.js} +4 -4
  85. package/dist/{chunk-QJRKXT54.cjs → chunk-HMEREPDB.cjs} +7 -7
  86. package/dist/{chunk-QJRKXT54.cjs.map → chunk-HMEREPDB.cjs.map} +1 -1
  87. package/dist/{chunk-TTO7JXDB.cjs → chunk-HNGFRRVZ.cjs} +3 -3
  88. package/dist/{chunk-TTO7JXDB.cjs.map → chunk-HNGFRRVZ.cjs.map} +1 -1
  89. package/dist/{chunk-CJGFRPAS.cjs → chunk-I6M6CVI2.cjs} +4 -4
  90. package/dist/chunk-I6M6CVI2.cjs.map +1 -0
  91. package/dist/chunk-J76JHN7J.cjs +225 -0
  92. package/dist/chunk-J76JHN7J.cjs.map +1 -0
  93. package/dist/{chunk-YW65NAKH.cjs → chunk-JCKGAAPZ.cjs} +7 -7
  94. package/dist/{chunk-YW65NAKH.cjs.map → chunk-JCKGAAPZ.cjs.map} +1 -1
  95. package/dist/{chunk-6CPCNQKV.js → chunk-JHX6JK3M.js} +79 -75
  96. package/dist/chunk-JHX6JK3M.js.map +1 -0
  97. package/dist/{chunk-YV57RSPD.js → chunk-JNY7TUDS.js} +49 -22
  98. package/dist/chunk-JNY7TUDS.js.map +1 -0
  99. package/dist/{chunk-O3LG7B2J.cjs → chunk-JPYJQ4TF.cjs} +13 -5
  100. package/dist/chunk-JPYJQ4TF.cjs.map +1 -0
  101. package/dist/{chunk-PY2376XI.js → chunk-JT4KVXJK.js} +68 -15
  102. package/dist/chunk-JT4KVXJK.js.map +1 -0
  103. package/dist/{chunk-AOGNTG3W.cjs → chunk-KBQD4JLK.cjs} +5 -4
  104. package/dist/chunk-KBQD4JLK.cjs.map +1 -0
  105. package/dist/{chunk-P2JM22BF.cjs → chunk-KIZVY57H.cjs} +82 -78
  106. package/dist/chunk-KIZVY57H.cjs.map +1 -0
  107. package/dist/{chunk-QQIALSTX.cjs → chunk-KPMIIGHH.cjs} +27 -17
  108. package/dist/chunk-KPMIIGHH.cjs.map +1 -0
  109. package/dist/{chunk-ZXJU3TQD.cjs → chunk-KREHT4AQ.cjs} +11 -10
  110. package/dist/chunk-KREHT4AQ.cjs.map +1 -0
  111. package/dist/{chunk-S4S4LB63.js → chunk-L65MHFMD.js} +11 -3
  112. package/dist/chunk-L65MHFMD.js.map +1 -0
  113. package/dist/{chunk-OGC44JFZ.cjs → chunk-LQXFXXMJ.cjs} +8 -7
  114. package/dist/chunk-LQXFXXMJ.cjs.map +1 -0
  115. package/dist/{chunk-25PSIDPC.js → chunk-MPIVBAMY.js} +79 -21
  116. package/dist/chunk-MPIVBAMY.js.map +1 -0
  117. package/dist/{chunk-7SVDYEKM.js → chunk-MQAOXZD4.js} +28 -14
  118. package/dist/chunk-MQAOXZD4.js.map +1 -0
  119. package/dist/{chunk-6CSUUQ5M.cjs → chunk-NOQF7UQ5.cjs} +6 -6
  120. package/dist/{chunk-6CSUUQ5M.cjs.map → chunk-NOQF7UQ5.cjs.map} +1 -1
  121. package/dist/{chunk-OU7DCYIA.js → chunk-O3QM3BFE.js} +2 -2
  122. package/dist/{chunk-WKDT2XFQ.js → chunk-OOCCSMWM.js} +4 -4
  123. package/dist/chunk-P4XZH3OR.js +225 -0
  124. package/dist/chunk-P4XZH3OR.js.map +1 -0
  125. package/dist/{chunk-ZWAFL2B3.cjs → chunk-PMSENLOA.cjs} +37 -27
  126. package/dist/chunk-PMSENLOA.cjs.map +1 -0
  127. package/dist/{chunk-L5W2XC6M.js → chunk-RHFD2Z5V.js} +8 -8
  128. package/dist/chunk-RHHZRTWM.js +134 -0
  129. package/dist/chunk-RHHZRTWM.js.map +1 -0
  130. package/dist/{chunk-NZO2I5AL.cjs → chunk-RJVHR45I.cjs} +7 -7
  131. package/dist/{chunk-NZO2I5AL.cjs.map → chunk-RJVHR45I.cjs.map} +1 -1
  132. package/dist/{chunk-E6SE552P.cjs → chunk-RUDXHT76.cjs} +41 -25
  133. package/dist/chunk-RUDXHT76.cjs.map +1 -0
  134. package/dist/{chunk-SXGCRHBZ.js → chunk-SDUGYJGW.js} +24 -14
  135. package/dist/chunk-SDUGYJGW.js.map +1 -0
  136. package/dist/{chunk-VPRUHE35.js → chunk-SFFKQQ5Z.js} +4 -4
  137. package/dist/{chunk-2RXQMQYW.js → chunk-SXL4DMZ7.js} +27 -17
  138. package/dist/{chunk-2RXQMQYW.js.map → chunk-SXL4DMZ7.js.map} +1 -1
  139. package/dist/{chunk-OAPOGYA5.cjs → chunk-TC5IC6OP.cjs} +7 -4
  140. package/dist/chunk-TC5IC6OP.cjs.map +1 -0
  141. package/dist/{chunk-T2KB3DJJ.js → chunk-THCTUBX6.js} +12 -4
  142. package/dist/chunk-THCTUBX6.js.map +1 -0
  143. package/dist/{chunk-NEYLNRVG.cjs → chunk-TTLFY76J.cjs} +21 -16
  144. package/dist/chunk-TTLFY76J.cjs.map +1 -0
  145. package/dist/{chunk-ZZSPQFMX.js → chunk-U233KQZX.js} +2 -1
  146. package/dist/{chunk-ZZSPQFMX.js.map → chunk-U233KQZX.js.map} +1 -1
  147. package/dist/{chunk-65PC3YDT.cjs → chunk-V4BZWBZT.cjs} +7 -7
  148. package/dist/{chunk-65PC3YDT.cjs.map → chunk-V4BZWBZT.cjs.map} +1 -1
  149. package/dist/{chunk-FKXKBJUI.cjs → chunk-VHO6JPRR.cjs} +2 -1
  150. package/dist/chunk-VHO6JPRR.cjs.map +1 -0
  151. package/dist/{chunk-3E7TKBQI.cjs → chunk-VQGLVBPL.cjs} +24 -14
  152. package/dist/chunk-VQGLVBPL.cjs.map +1 -0
  153. package/dist/{chunk-27ZWUEPE.js → chunk-WE2SBWZ6.js} +20 -9
  154. package/dist/chunk-WE2SBWZ6.js.map +1 -0
  155. package/dist/{chunk-TQGO5WK6.js → chunk-WNDDS367.js} +7 -6
  156. package/dist/chunk-WNDDS367.js.map +1 -0
  157. package/dist/{chunk-Q5KQVBQP.cjs → chunk-X3BVQBXD.cjs} +18 -16
  158. package/dist/chunk-X3BVQBXD.cjs.map +1 -0
  159. package/dist/{chunk-J5RMLZ4P.cjs → chunk-XERBOFYZ.cjs} +80 -22
  160. package/dist/chunk-XERBOFYZ.cjs.map +1 -0
  161. package/dist/{chunk-3CXULV4G.cjs → chunk-XRVRGRC3.cjs} +2 -2
  162. package/dist/{chunk-3CXULV4G.cjs.map → chunk-XRVRGRC3.cjs.map} +1 -1
  163. package/dist/{chunk-K7T25Y3A.cjs → chunk-XZLSHEHE.cjs} +41 -27
  164. package/dist/chunk-XZLSHEHE.cjs.map +1 -0
  165. package/dist/{chunk-JRLUZDKA.js → chunk-YAKTVIVK.js} +20 -7
  166. package/dist/chunk-YAKTVIVK.js.map +1 -0
  167. package/dist/{chunk-IJ4DXG7D.cjs → chunk-YJNQLH2L.cjs} +5 -2
  168. package/dist/chunk-YJNQLH2L.cjs.map +1 -0
  169. package/dist/{chunk-ZPDETHQ7.js → chunk-YP4HUBKN.js} +3 -3
  170. package/dist/{chunk-ZPDETHQ7.js.map → chunk-YP4HUBKN.js.map} +1 -1
  171. package/dist/{chunk-5WH3JMR5.js → chunk-YXRKBKFB.js} +7 -4
  172. package/dist/chunk-YXRKBKFB.js.map +1 -0
  173. package/dist/{chunk-ACNTH2OQ.cjs → chunk-ZMRINZIO.cjs} +98 -106
  174. package/dist/chunk-ZMRINZIO.cjs.map +1 -0
  175. package/dist/color-picker/index.cjs +4 -4
  176. package/dist/color-picker/index.d.cts +8 -0
  177. package/dist/color-picker/index.d.ts +8 -0
  178. package/dist/color-picker/index.js +3 -3
  179. package/dist/combobox/index.cjs +6 -6
  180. package/dist/combobox/index.js +5 -5
  181. package/dist/command-palette/index.cjs +3 -2
  182. package/dist/command-palette/index.cjs.map +1 -1
  183. package/dist/command-palette/index.js +2 -1
  184. package/dist/context-menu/index.cjs +6 -6
  185. package/dist/context-menu/index.d.cts +1 -1
  186. package/dist/context-menu/index.d.ts +1 -1
  187. package/dist/context-menu/index.js +5 -5
  188. package/dist/conversation/index.cjs +8 -8
  189. package/dist/conversation/index.d.cts +1 -1
  190. package/dist/conversation/index.d.ts +1 -1
  191. package/dist/conversation/index.js +7 -7
  192. package/dist/data-grid/index.cjs +16 -16
  193. package/dist/data-grid/index.d.cts +14 -15
  194. package/dist/data-grid/index.d.ts +14 -15
  195. package/dist/data-grid/index.js +15 -15
  196. package/dist/date-picker/index.cjs +8 -8
  197. package/dist/date-picker/index.d.cts +12 -2
  198. package/dist/date-picker/index.d.ts +12 -2
  199. package/dist/date-picker/index.js +7 -7
  200. package/dist/drawer/index.cjs +5 -5
  201. package/dist/drawer/index.js +4 -4
  202. package/dist/dropdown/index.cjs +3 -3
  203. package/dist/dropdown/index.d.cts +34 -0
  204. package/dist/dropdown/index.d.ts +34 -0
  205. package/dist/dropdown/index.js +2 -2
  206. package/dist/file-upload/index.cjs +2 -2
  207. package/dist/file-upload/index.js +1 -1
  208. package/dist/header/index.cjs +6 -6
  209. package/dist/header/index.js +5 -5
  210. package/dist/index.cjs +42 -42
  211. package/dist/index.css +112 -40
  212. package/dist/index.d.cts +5 -5
  213. package/dist/index.d.ts +5 -5
  214. package/dist/index.js +41 -41
  215. package/dist/inline-edit/index.cjs +5 -5
  216. package/dist/inline-edit/index.js +4 -4
  217. package/dist/input/index.cjs +4 -4
  218. package/dist/input/index.d.cts +2 -2
  219. package/dist/input/index.d.ts +2 -2
  220. package/dist/input/index.js +3 -3
  221. package/dist/menu/index.cjs +5 -5
  222. package/dist/menu/index.d.cts +23 -2
  223. package/dist/menu/index.d.ts +23 -2
  224. package/dist/menu/index.js +4 -4
  225. package/dist/modal/index.cjs +5 -5
  226. package/dist/modal/index.js +4 -4
  227. package/dist/navigation/index.cjs +5 -5
  228. package/dist/navigation/index.js +4 -4
  229. package/dist/number-input/index.cjs +3 -3
  230. package/dist/number-input/index.js +2 -2
  231. package/dist/o-t-p-input/index.cjs +2 -2
  232. package/dist/o-t-p-input/index.js +1 -1
  233. package/dist/page-layout/index.cjs +12 -12
  234. package/dist/page-layout/index.d.cts +2 -2
  235. package/dist/page-layout/index.d.ts +2 -2
  236. package/dist/page-layout/index.js +11 -11
  237. package/dist/pagination/index.cjs +8 -8
  238. package/dist/pagination/index.js +7 -7
  239. package/dist/popover/index.cjs +3 -2
  240. package/dist/popover/index.cjs.map +1 -1
  241. package/dist/popover/index.d.cts +3 -1
  242. package/dist/popover/index.d.ts +3 -1
  243. package/dist/popover/index.js +2 -1
  244. package/dist/radio/index.cjs +2 -2
  245. package/dist/radio/index.js +1 -1
  246. package/dist/segmented-control/index.cjs +4 -4
  247. package/dist/segmented-control/index.js +3 -3
  248. package/dist/select/index.cjs +6 -6
  249. package/dist/select/index.d.cts +3 -3
  250. package/dist/select/index.d.ts +3 -3
  251. package/dist/select/index.js +5 -5
  252. package/dist/snackbar/index.cjs +5 -5
  253. package/dist/snackbar/index.d.cts +4 -0
  254. package/dist/snackbar/index.d.ts +4 -0
  255. package/dist/snackbar/index.js +4 -4
  256. package/dist/split-button/index.cjs +6 -6
  257. package/dist/split-button/index.js +5 -5
  258. package/dist/table/index.cjs +14 -14
  259. package/dist/table/index.d.cts +2 -2
  260. package/dist/table/index.d.ts +2 -2
  261. package/dist/table/index.js +13 -13
  262. package/dist/tabs/index.cjs +3 -3
  263. package/dist/tabs/index.js +2 -2
  264. package/dist/tag-input/index.cjs +6 -6
  265. package/dist/tag-input/index.js +5 -5
  266. package/dist/textarea/index.cjs +4 -4
  267. package/dist/textarea/index.js +3 -3
  268. package/dist/theme-editor/index.cjs +11 -11
  269. package/dist/theme-editor/index.js +10 -10
  270. package/dist/theme-provider/index.cjs +3 -3
  271. package/dist/theme-provider/index.js +2 -2
  272. package/dist/toolbar/index.cjs +8 -8
  273. package/dist/toolbar/index.d.cts +3 -3
  274. package/dist/toolbar/index.d.ts +3 -3
  275. package/dist/toolbar/index.js +7 -7
  276. package/dist/tooltip/index.cjs +3 -2
  277. package/dist/tooltip/index.cjs.map +1 -1
  278. package/dist/tooltip/index.js +2 -1
  279. package/dist/virtual-list/index.cjs +2 -2
  280. package/dist/virtual-list/index.js +1 -1
  281. package/package.json +7 -2
  282. package/dist/chunk-25PSIDPC.js.map +0 -1
  283. package/dist/chunk-27ZWUEPE.js.map +0 -1
  284. package/dist/chunk-3E7TKBQI.cjs.map +0 -1
  285. package/dist/chunk-3EPND5M2.cjs.map +0 -1
  286. package/dist/chunk-3EUTXQDB.js.map +0 -1
  287. package/dist/chunk-55J4LEKT.cjs.map +0 -1
  288. package/dist/chunk-5HUZYY54.js.map +0 -1
  289. package/dist/chunk-5WH3JMR5.js.map +0 -1
  290. package/dist/chunk-6CPCNQKV.js.map +0 -1
  291. package/dist/chunk-7SVDYEKM.js.map +0 -1
  292. package/dist/chunk-ACNTH2OQ.cjs.map +0 -1
  293. package/dist/chunk-AOGNTG3W.cjs.map +0 -1
  294. package/dist/chunk-BNVQ34FD.js +0 -125
  295. package/dist/chunk-BNVQ34FD.js.map +0 -1
  296. package/dist/chunk-CJGFRPAS.cjs.map +0 -1
  297. package/dist/chunk-CUJBNRJJ.cjs +0 -38
  298. package/dist/chunk-CUJBNRJJ.cjs.map +0 -1
  299. package/dist/chunk-E6SE552P.cjs.map +0 -1
  300. package/dist/chunk-E7FGY7BJ.js.map +0 -1
  301. package/dist/chunk-EAJHEYZM.js +0 -38
  302. package/dist/chunk-EAJHEYZM.js.map +0 -1
  303. package/dist/chunk-FKXKBJUI.cjs.map +0 -1
  304. package/dist/chunk-FXZJL2AM.cjs.map +0 -1
  305. package/dist/chunk-GG5YGESX.js.map +0 -1
  306. package/dist/chunk-GPRJYPIG.js.map +0 -1
  307. package/dist/chunk-H6CWTMAH.js.map +0 -1
  308. package/dist/chunk-HALVTKW7.js.map +0 -1
  309. package/dist/chunk-I5XR2V4A.cjs.map +0 -1
  310. package/dist/chunk-IJ4DXG7D.cjs.map +0 -1
  311. package/dist/chunk-ITXDSQT2.js.map +0 -1
  312. package/dist/chunk-J5RMLZ4P.cjs.map +0 -1
  313. package/dist/chunk-JRLUZDKA.js.map +0 -1
  314. package/dist/chunk-K7T25Y3A.cjs.map +0 -1
  315. package/dist/chunk-L5Q6UDY3.js +0 -69
  316. package/dist/chunk-L5Q6UDY3.js.map +0 -1
  317. package/dist/chunk-M7PF4FKQ.js.map +0 -1
  318. package/dist/chunk-MCWTQT3M.cjs.map +0 -1
  319. package/dist/chunk-MHZIBV2C.js.map +0 -1
  320. package/dist/chunk-NEYLNRVG.cjs.map +0 -1
  321. package/dist/chunk-O3LG7B2J.cjs.map +0 -1
  322. package/dist/chunk-OAK7HFOJ.js.map +0 -1
  323. package/dist/chunk-OAPOGYA5.cjs.map +0 -1
  324. package/dist/chunk-OGC44JFZ.cjs.map +0 -1
  325. package/dist/chunk-OJDYTCMO.cjs.map +0 -1
  326. package/dist/chunk-P2JM22BF.cjs.map +0 -1
  327. package/dist/chunk-PY2376XI.js.map +0 -1
  328. package/dist/chunk-Q5KQVBQP.cjs.map +0 -1
  329. package/dist/chunk-QQIALSTX.cjs.map +0 -1
  330. package/dist/chunk-R4M6SNUU.cjs.map +0 -1
  331. package/dist/chunk-RYOQYYDO.js.map +0 -1
  332. package/dist/chunk-S4S4LB63.js.map +0 -1
  333. package/dist/chunk-SXGCRHBZ.js.map +0 -1
  334. package/dist/chunk-T2KB3DJJ.js.map +0 -1
  335. package/dist/chunk-TEVZHN5I.cjs.map +0 -1
  336. package/dist/chunk-TQGO5WK6.js.map +0 -1
  337. package/dist/chunk-VXO2MYYH.cjs +0 -125
  338. package/dist/chunk-VXO2MYYH.cjs.map +0 -1
  339. package/dist/chunk-WWYJNWJY.cjs +0 -69
  340. package/dist/chunk-WWYJNWJY.cjs.map +0 -1
  341. package/dist/chunk-YV57RSPD.js.map +0 -1
  342. package/dist/chunk-Z5U4NJTW.cjs.map +0 -1
  343. package/dist/chunk-ZNWIHUHZ.cjs.map +0 -1
  344. package/dist/chunk-ZWAFL2B3.cjs.map +0 -1
  345. package/dist/chunk-ZXJU3TQD.cjs.map +0 -1
  346. /package/dist/{chunk-GDQWSCJQ.js.map → chunk-26SO4LZ5.js.map} +0 -0
  347. /package/dist/{chunk-KQJ3IAFT.js.map → chunk-A3LMUPG3.js.map} +0 -0
  348. /package/dist/{chunk-O2AACVSF.js.map → chunk-AR2ZOO6L.js.map} +0 -0
  349. /package/dist/{chunk-L23WWO3D.js.map → chunk-GPVGGBIR.js.map} +0 -0
  350. /package/dist/{chunk-2QEKSRVX.js.map → chunk-HEX4IMLO.js.map} +0 -0
  351. /package/dist/{chunk-OU7DCYIA.js.map → chunk-O3QM3BFE.js.map} +0 -0
  352. /package/dist/{chunk-WKDT2XFQ.js.map → chunk-OOCCSMWM.js.map} +0 -0
  353. /package/dist/{chunk-L5W2XC6M.js.map → chunk-RHFD2Z5V.js.map} +0 -0
  354. /package/dist/{chunk-VPRUHE35.js.map → chunk-SFFKQQ5Z.js.map} +0 -0
package/README.md CHANGED
@@ -189,6 +189,12 @@ npm install
189
189
  npm run storybook
190
190
  ```
191
191
 
192
+ For accessibility, [ACCESSIBILITY.md](./ACCESSIBILITY.md) covers what is tested
193
+ against WCAG 2.2 AA and how, what remains the consuming application's
194
+ responsibility, and what has not been done. It does not claim a conformance
195
+ level - [WCAG §5.2.2](https://www.w3.org/TR/WCAG22/#cc2) defines conformance
196
+ for full pages, so no component library can have one.
197
+
192
198
  ## Theming
193
199
 
194
200
  Every design token is a CSS custom property. There are two ways to change them, depending on whether the theme is fixed at build time or chosen by the user.
@@ -200,18 +206,24 @@ Redeclare any token in your own stylesheet:
200
206
  ```css
201
207
  :root {
202
208
  /* Colours - each family also has -dark, -light, -rgb and -contrast */
203
- --primary-color: #5c5de8;
204
- --secondary-color: #617087;
209
+ --primary-color: #0f766e;
210
+ --secondary-color: #4b5563;
205
211
 
206
212
  /* Spacing (em-based, so it scales with font size) */
207
- --spacing-md: 1em;
208
- --spacing-lg: 1.5em;
213
+ --spacing-md: 1.1em;
214
+ --spacing-lg: 1.6em;
209
215
 
210
216
  /* Border radius */
211
- --border-radius-md: 8px;
217
+ --border-radius-md: 10px;
212
218
  }
213
219
  ```
214
220
 
221
+ The values above are deliberately _not_ the defaults - this is what an override
222
+ looks like. For the shipped values, see **Foundations → Colour** (and Typography,
223
+ and Layout) in Storybook: those pages are generated from
224
+ `src/styles/variables.scss` at build time, so they are the one place a token
225
+ value is stated and the only place it cannot go stale.
226
+
215
227
  Individual components can also be targeted directly, following each component's `eidos-<name>` BEM-style class names:
216
228
 
217
229
  ```css
@@ -21,6 +21,16 @@ interface BaseInputProps extends Omit<React__default.InputHTMLAttributes<HTMLInp
21
21
  posIcon?: IconType;
22
22
  posIconButton?: boolean;
23
23
  onPosIconClick?: () => void;
24
+ /**
25
+ * Accessible name for the `posIconButton`. Required in practice whenever
26
+ * that button is rendered - an icon-only button with no name is announced
27
+ * as just "button", and only the caller knows what the icon means.
28
+ *
29
+ * Omitting it logs a `devWarn` and falls back to a generic name, rather
30
+ * than throwing or silently shipping a nameless control. It is optional
31
+ * only to avoid a breaking change; treat it as required.
32
+ */
33
+ posIconLabel?: string;
24
34
  required?: boolean;
25
35
  isSelect?: boolean;
26
36
  clearable?: boolean;
@@ -21,6 +21,16 @@ interface BaseInputProps extends Omit<React__default.InputHTMLAttributes<HTMLInp
21
21
  posIcon?: IconType;
22
22
  posIconButton?: boolean;
23
23
  onPosIconClick?: () => void;
24
+ /**
25
+ * Accessible name for the `posIconButton`. Required in practice whenever
26
+ * that button is rendered - an icon-only button with no name is announced
27
+ * as just "button", and only the caller knows what the icon means.
28
+ *
29
+ * Omitting it logs a `devWarn` and falls back to a generic name, rather
30
+ * than throwing or silently shipping a nameless control. It is optional
31
+ * only to avoid a breaking change; treat it as required.
32
+ */
33
+ posIconLabel?: string;
24
34
  required?: boolean;
25
35
  isSelect?: boolean;
26
36
  clearable?: boolean;
@@ -32,6 +32,15 @@ interface MenuProps {
32
32
  items: MenuItemType[];
33
33
  className?: string;
34
34
  onItemClick?: (item: MenuItem) => void;
35
+ /**
36
+ * Called when the panel asks to be dismissed - `ArrowLeft` in a submenu,
37
+ * which the ARIA menu pattern defines as "close this level and return to the
38
+ * item that opened it".
39
+ *
40
+ * A panel cannot close the overlay that holds it, so whoever renders it owns
41
+ * this.
42
+ */
43
+ onRequestClose?: () => void;
35
44
  }
36
45
  interface MenuWrapperProps {
37
46
  trigger: React__default.ReactNode;
@@ -32,6 +32,15 @@ interface MenuProps {
32
32
  items: MenuItemType[];
33
33
  className?: string;
34
34
  onItemClick?: (item: MenuItem) => void;
35
+ /**
36
+ * Called when the panel asks to be dismissed - `ArrowLeft` in a submenu,
37
+ * which the ARIA menu pattern defines as "close this level and return to the
38
+ * item that opened it".
39
+ *
40
+ * A panel cannot close the overlay that holds it, so whoever renders it owns
41
+ * this.
42
+ */
43
+ onRequestClose?: () => void;
35
44
  }
36
45
  interface MenuWrapperProps {
37
46
  trigger: React__default.ReactNode;
@@ -1,4 +1,4 @@
1
- import { a as InputProps } from './Input.types-XrJTI0JC.js';
1
+ import { a as InputProps } from './Input.types-CSDMaZNe.js';
2
2
  import { I as IconType } from './renderIcon-C2lEMMzb.js';
3
3
 
4
4
  interface SelectOption {
@@ -16,6 +16,16 @@ interface SelectProps {
16
16
  defaultValue?: string | string[];
17
17
  onChange?: (value: string | string[]) => void;
18
18
  multiple?: boolean;
19
+ /**
20
+ * Visible label, rendered as a real `<label>` bound to the field - the same
21
+ * prop `Input`, `Checkbox`, `Radio` and `Textarea` take.
22
+ *
23
+ * For a field that must stay visually unlabelled, pass
24
+ * `inputProps={{ 'aria-label': '…' }}` instead. One of the two is needed: a
25
+ * `placeholder` is not a label, since it disappears as soon as a value is
26
+ * chosen. Omitting both logs a development warning.
27
+ */
28
+ label?: string;
19
29
  placeholder?: string;
20
30
  disabled?: boolean;
21
31
  className?: string;
@@ -1,4 +1,4 @@
1
- import { a as InputProps } from './Input.types-DFZNyJGF.cjs';
1
+ import { a as InputProps } from './Input.types-D7-sWq-q.cjs';
2
2
  import { I as IconType } from './renderIcon-C2lEMMzb.cjs';
3
3
 
4
4
  interface SelectOption {
@@ -16,6 +16,16 @@ interface SelectProps {
16
16
  defaultValue?: string | string[];
17
17
  onChange?: (value: string | string[]) => void;
18
18
  multiple?: boolean;
19
+ /**
20
+ * Visible label, rendered as a real `<label>` bound to the field - the same
21
+ * prop `Input`, `Checkbox`, `Radio` and `Textarea` take.
22
+ *
23
+ * For a field that must stay visually unlabelled, pass
24
+ * `inputProps={{ 'aria-label': '…' }}` instead. One of the two is needed: a
25
+ * `placeholder` is not a label, since it disappears as soon as a value is
26
+ * chosen. Omitting both logs a development warning.
27
+ */
28
+ label?: string;
19
29
  placeholder?: string;
20
30
  disabled?: boolean;
21
31
  className?: string;
@@ -130,9 +130,8 @@ interface TableValueColumn<T extends object, K extends RowKey<T>> extends TableC
130
130
  * `data-col-key`.
131
131
  *
132
132
  * `'icon'` and `'action'` carry their existing cell styling; `'custom'` styles
133
- * like a normal data cell but takes a free-form key, which is the home for a
134
- * derived column (previously expressible only by pointing `key` at a field
135
- * that didn't exist).
133
+ * like a normal data cell but takes a free-form key, for a derived column
134
+ * whose content comes from several fields or from none.
136
135
  */
137
136
  interface TableCustomColumn<T extends object> extends TableColumnCommon {
138
137
  /** Free-form - must only be unique within `columns`. */
@@ -130,9 +130,8 @@ interface TableValueColumn<T extends object, K extends RowKey<T>> extends TableC
130
130
  * `data-col-key`.
131
131
  *
132
132
  * `'icon'` and `'action'` carry their existing cell styling; `'custom'` styles
133
- * like a normal data cell but takes a free-form key, which is the home for a
134
- * derived column (previously expressible only by pointing `key` at a field
135
- * that didn't exist).
133
+ * like a normal data cell but takes a free-form key, for a derived column
134
+ * whose content comes from several fields or from none.
136
135
  */
137
136
  interface TableCustomColumn<T extends object> extends TableColumnCommon {
138
137
  /** Free-form - must only be unique within `columns`. */
@@ -1,7 +1,7 @@
1
1
  import { a as BreadcrumbProps } from './Breadcrumb.types-DaykU-C8.js';
2
2
  import { b as AvatarProps } from './Avatar.types-BY-C09Ke.js';
3
3
  import { I as IconButtonProps } from './Button.types-BH0CPyPx.js';
4
- import { b as MenuItemType } from './Menu.types-DNIpjSAK.js';
4
+ import { b as MenuItemType } from './Menu.types-BN4g1-3A.js';
5
5
  import { C as CommandItem } from './CommandPalette.types-DRMMS_ev.js';
6
6
 
7
7
  interface ToolbarProps {
@@ -1,7 +1,7 @@
1
1
  import { a as BreadcrumbProps } from './Breadcrumb.types-DaykU-C8.cjs';
2
2
  import { b as AvatarProps } from './Avatar.types-BY-C09Ke.cjs';
3
3
  import { I as IconButtonProps } from './Button.types-DZRCVqyN.cjs';
4
- import { b as MenuItemType } from './Menu.types-DwcuCZM7.cjs';
4
+ import { b as MenuItemType } from './Menu.types-CTnUijv5.cjs';
5
5
  import { C as CommandItem } from './CommandPalette.types-DRMMS_ev.cjs';
6
6
 
7
7
  interface ToolbarProps {
@@ -1,12 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkEH42ND5Qcjs = require('../chunk-EH42ND5Q.cjs');
4
- require('../chunk-WWYJNWJY.cjs');
3
+ var _chunk3RWZC6OWcjs = require('../chunk-3RWZC6OW.cjs');
4
+ require('../chunk-DA375AI6.cjs');
5
5
  require('../chunk-I6UOIS4J.cjs');
6
- require('../chunk-Z5U4NJTW.cjs');
7
- require('../chunk-CUJBNRJJ.cjs');
6
+ require('../chunk-BEOECPVJ.cjs');
7
+ require('../chunk-35LGEPLP.cjs');
8
8
  require('../chunk-DZUJEN5N.cjs');
9
9
 
10
10
 
11
- exports.Alert = _chunkEH42ND5Qcjs.Alert;
11
+ exports.Alert = _chunk3RWZC6OWcjs.Alert;
12
12
  //# sourceMappingURL=index.cjs.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  Alert
3
- } from "../chunk-O2AACVSF.js";
4
- import "../chunk-L5Q6UDY3.js";
3
+ } from "../chunk-AR2ZOO6L.js";
4
+ import "../chunk-75GFIQRU.js";
5
5
  import "../chunk-66R54X6R.js";
6
- import "../chunk-YV57RSPD.js";
7
- import "../chunk-EAJHEYZM.js";
6
+ import "../chunk-JNY7TUDS.js";
7
+ import "../chunk-RHHZRTWM.js";
8
8
  import "../chunk-5WRI5ZAA.js";
9
9
  export {
10
10
  Alert
@@ -2,13 +2,13 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkWWYJNWJYcjs = require('../chunk-WWYJNWJY.cjs');
5
+ var _chunkDA375AI6cjs = require('../chunk-DA375AI6.cjs');
6
6
  require('../chunk-I6UOIS4J.cjs');
7
- require('../chunk-Z5U4NJTW.cjs');
8
- require('../chunk-CUJBNRJJ.cjs');
7
+ require('../chunk-BEOECPVJ.cjs');
8
+ require('../chunk-35LGEPLP.cjs');
9
9
  require('../chunk-DZUJEN5N.cjs');
10
10
 
11
11
 
12
12
 
13
- exports.Button = _chunkWWYJNWJYcjs.Button; exports.IconButton = _chunkWWYJNWJYcjs.IconButton;
13
+ exports.Button = _chunkDA375AI6cjs.Button; exports.IconButton = _chunkDA375AI6cjs.IconButton;
14
14
  //# sourceMappingURL=index.cjs.map
@@ -2,10 +2,10 @@ import "../chunk-N5JDL4VE.js";
2
2
  import {
3
3
  Button,
4
4
  IconButton
5
- } from "../chunk-L5Q6UDY3.js";
5
+ } from "../chunk-75GFIQRU.js";
6
6
  import "../chunk-66R54X6R.js";
7
- import "../chunk-YV57RSPD.js";
8
- import "../chunk-EAJHEYZM.js";
7
+ import "../chunk-JNY7TUDS.js";
8
+ import "../chunk-RHHZRTWM.js";
9
9
  import "../chunk-5WRI5ZAA.js";
10
10
  export {
11
11
  Button,
@@ -1,9 +1,9 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../chunk-SWPZ3HFY.cjs');
2
2
 
3
3
 
4
- var _chunkIJ4DXG7Dcjs = require('../chunk-IJ4DXG7D.cjs');
4
+ var _chunkYJNQLH2Lcjs = require('../chunk-YJNQLH2L.cjs');
5
5
  require('../chunk-DZUJEN5N.cjs');
6
6
 
7
7
 
8
- exports.Checkbox = _chunkIJ4DXG7Dcjs.Checkbox;
8
+ exports.Checkbox = _chunkYJNQLH2Lcjs.Checkbox;
9
9
  //# sourceMappingURL=index.cjs.map
@@ -1,7 +1,7 @@
1
1
  import "../chunk-TZWNX7FF.js";
2
2
  import {
3
3
  Checkbox
4
- } from "../chunk-H6CWTMAH.js";
4
+ } from "../chunk-DGXHR6FV.js";
5
5
  import "../chunk-5WRI5ZAA.js";
6
6
  export {
7
7
  Checkbox
@@ -1,11 +1,11 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('../chunk-FQZ6F7FQ.cjs');
2
2
 
3
3
 
4
- var _chunkNEYLNRVGcjs = require('../chunk-NEYLNRVG.cjs');
5
- require('../chunk-Z5U4NJTW.cjs');
6
- require('../chunk-CUJBNRJJ.cjs');
4
+ var _chunkTTLFY76Jcjs = require('../chunk-TTLFY76J.cjs');
5
+ require('../chunk-BEOECPVJ.cjs');
6
+ require('../chunk-35LGEPLP.cjs');
7
7
  require('../chunk-DZUJEN5N.cjs');
8
8
 
9
9
 
10
- exports.Chip = _chunkNEYLNRVGcjs.Chip;
10
+ exports.Chip = _chunkTTLFY76Jcjs.Chip;
11
11
  //# sourceMappingURL=index.cjs.map
@@ -1,9 +1,9 @@
1
1
  import "../chunk-TPNCV7KA.js";
2
2
  import {
3
3
  Chip
4
- } from "../chunk-OAK7HFOJ.js";
5
- import "../chunk-YV57RSPD.js";
6
- import "../chunk-EAJHEYZM.js";
4
+ } from "../chunk-GWHZFX2H.js";
5
+ import "../chunk-JNY7TUDS.js";
6
+ import "../chunk-RHHZRTWM.js";
7
7
  import "../chunk-5WRI5ZAA.js";
8
8
  export {
9
9
  Chip
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  Chip
3
- } from "./chunk-OAK7HFOJ.js";
3
+ } from "./chunk-GWHZFX2H.js";
4
4
  import {
5
5
  Dropdown
6
- } from "./chunk-6CPCNQKV.js";
6
+ } from "./chunk-JHX6JK3M.js";
7
7
 
8
8
  // src/components/TagInput/TagInput.component.tsx
9
9
  import { useState, useId, useRef, useCallback, useMemo, useEffect } from "react";
@@ -34,11 +34,12 @@ var TagInput = ({
34
34
  const inputRef = useRef(null);
35
35
  const containerRef = useRef(null);
36
36
  const fieldRef = useRef(null);
37
- const dropdownSpanRef = useRef(null);
38
37
  const hasSuggestions = suggestions !== void 0;
39
- const isSuggestionsOpenRef = useRef(false);
40
38
  const [isSuggestionsOpen, setIsSuggestionsOpen] = useState(false);
41
- const [suggestionsMenuKey, setSuggestionsMenuKey] = useState(0);
39
+ const isSuggestionsOpenRef = useRef(isSuggestionsOpen);
40
+ useEffect(() => {
41
+ isSuggestionsOpenRef.current = isSuggestionsOpen;
42
+ }, [isSuggestionsOpen]);
42
43
  const [focusedSuggestionIndex, setFocusedSuggestionIndex] = useState(-1);
43
44
  const isControlled = value !== void 0;
44
45
  const [internalTags, setInternalTags] = useState(defaultValue);
@@ -95,7 +96,6 @@ var TagInput = ({
95
96
  }, [filteredSuggestions]);
96
97
  const openSuggestions = useCallback(() => {
97
98
  if (isSuggestionsOpenRef.current || disabled || !hasSuggestions) return;
98
- dropdownSpanRef.current?.click();
99
99
  isSuggestionsOpenRef.current = true;
100
100
  setIsSuggestionsOpen(true);
101
101
  }, [disabled, hasSuggestions]);
@@ -103,7 +103,6 @@ var TagInput = ({
103
103
  isSuggestionsOpenRef.current = false;
104
104
  setIsSuggestionsOpen(false);
105
105
  setFocusedSuggestionIndex(-1);
106
- setSuggestionsMenuKey((prev) => prev + 1);
107
106
  }, []);
108
107
  const selectSuggestion = useCallback(
109
108
  (suggestion) => {
@@ -195,100 +194,93 @@ var TagInput = ({
195
194
  disabled && "eidos-tag-input-field--disabled"
196
195
  ].filter(Boolean).join(" ");
197
196
  const uid = generatedId;
198
- return /* @__PURE__ */ jsxs(
199
- "div",
200
- {
201
- className: containerClasses,
202
- ref: containerRef,
203
- "aria-expanded": hasSuggestions ? isSuggestionsOpen : void 0,
204
- "aria-haspopup": hasSuggestions ? "listbox" : void 0,
205
- children: [
206
- label && /* @__PURE__ */ jsx("label", { htmlFor: inputId, className: "eidos-tag-input-label", children: label }),
207
- /* @__PURE__ */ jsxs("div", { className: fieldClasses, onClick: handleFieldClick, ref: fieldRef, children: [
208
- tags.map((tag, index) => /* @__PURE__ */ jsx(
209
- Chip,
210
- {
211
- variant: "filled",
212
- color: "primary",
213
- size,
214
- onRemove: disabled ? void 0 : () => removeTag(index),
215
- children: tag
216
- },
217
- `${tag}-${index}`
218
- )),
219
- /* @__PURE__ */ jsx(
220
- "input",
221
- {
222
- ref: inputRef,
223
- id: inputId,
224
- className: "eidos-tag-input-input",
225
- type: "text",
226
- value: inputValue,
227
- placeholder: tags.length === 0 ? placeholder : void 0,
228
- disabled,
229
- onKeyDown: handleKeyDown,
230
- onChange: handleInputChange,
231
- onFocus: handleInputFocus,
232
- onBlur: () => setIsFocused(false),
233
- "aria-label": label ? void 0 : "Tag input",
234
- "aria-describedby": hasError ? errorId : hint ? hintId : void 0,
235
- "aria-autocomplete": hasSuggestions ? "list" : void 0,
236
- "aria-controls": hasSuggestions ? `${uid}-tag-suggestions` : void 0,
237
- "aria-activedescendant": hasSuggestions && focusedSuggestionIndex >= 0 ? `${uid}-tag-suggestion-${focusedSuggestionIndex}` : void 0
238
- }
239
- ),
240
- hasSuggestions && /* @__PURE__ */ jsx(
241
- Dropdown,
242
- {
243
- trigger: /* @__PURE__ */ jsx(
244
- "span",
245
- {
246
- ref: dropdownSpanRef,
247
- className: "eidos-tag-input-dropdown-anchor",
248
- "aria-hidden": "true"
249
- }
250
- ),
251
- content: /* @__PURE__ */ jsx(
252
- "div",
253
- {
254
- id: `${uid}-tag-suggestions`,
255
- className: "eidos-tag-input-suggestions",
256
- role: "listbox",
257
- "aria-label": label ?? "Suggestions",
258
- onMouseDown: (e) => e.preventDefault(),
259
- children: filteredSuggestions.length === 0 ? /* @__PURE__ */ jsx("div", { className: "eidos-tag-input-suggestions-empty", children: suggestionsEmptyText }) : filteredSuggestions.map((suggestion, index) => /* @__PURE__ */ jsx(
260
- "div",
261
- {
262
- id: `${uid}-tag-suggestion-${index}`,
263
- className: [
264
- "eidos-tag-input-suggestion",
265
- index === focusedSuggestionIndex && "eidos-tag-input-suggestion--focused"
266
- ].filter(Boolean).join(" "),
267
- role: "option",
268
- "aria-selected": index === focusedSuggestionIndex,
269
- onClick: () => selectSuggestion(suggestion),
270
- onMouseEnter: () => setFocusedSuggestionIndex(index),
271
- children: suggestion
272
- },
273
- suggestion
274
- ))
275
- }
276
- ),
277
- triggerRef: fieldRef,
278
- autoWidth: true,
279
- closeOnClickOutside: false,
280
- closeOnEscape: false
281
- },
282
- suggestionsMenuKey
283
- )
284
- ] }),
285
- hint && !hasError && /* @__PURE__ */ jsx("p", { className: "eidos-tag-input-hint", id: hintId, children: hint }),
286
- hasError && /* @__PURE__ */ jsxs("p", { className: "eidos-tag-input-error-message", id: errorId, role: "alert", children: [
287
- /* @__PURE__ */ jsx(CircleAlert, {}),
288
- displayError
289
- ] })
290
- ]
291
- }
197
+ return (
198
+ // No ARIA on this wrapper - it has no role, so `aria-expanded` and
199
+ // `aria-haspopup` were invalid here. Same fix as `Combobox`: they belong
200
+ // on the input, which is the combobox.
201
+ /* @__PURE__ */ jsxs("div", { className: containerClasses, ref: containerRef, children: [
202
+ label && /* @__PURE__ */ jsx("label", { htmlFor: inputId, className: "eidos-tag-input-label", children: label }),
203
+ /* @__PURE__ */ jsxs("div", { className: fieldClasses, onClick: handleFieldClick, ref: fieldRef, children: [
204
+ tags.map((tag, index) => /* @__PURE__ */ jsx(
205
+ Chip,
206
+ {
207
+ variant: "filled",
208
+ color: "primary",
209
+ size,
210
+ onRemove: disabled ? void 0 : () => removeTag(index),
211
+ children: tag
212
+ },
213
+ `${tag}-${index}`
214
+ )),
215
+ /* @__PURE__ */ jsx(
216
+ "input",
217
+ {
218
+ ref: inputRef,
219
+ id: inputId,
220
+ className: "eidos-tag-input-input",
221
+ type: "text",
222
+ value: inputValue,
223
+ placeholder: tags.length === 0 ? placeholder : void 0,
224
+ disabled,
225
+ onKeyDown: handleKeyDown,
226
+ onChange: handleInputChange,
227
+ onFocus: handleInputFocus,
228
+ onBlur: () => setIsFocused(false),
229
+ "aria-label": label ? void 0 : "Tag input",
230
+ "aria-invalid": hasError ? true : void 0,
231
+ "aria-describedby": hasError ? errorId : hint ? hintId : void 0,
232
+ role: hasSuggestions ? "combobox" : void 0,
233
+ "aria-expanded": hasSuggestions ? isSuggestionsOpen : void 0,
234
+ "aria-autocomplete": hasSuggestions ? "list" : void 0,
235
+ "aria-controls": hasSuggestions && isSuggestionsOpen ? `${uid}-tag-suggestions` : void 0,
236
+ "aria-activedescendant": hasSuggestions && focusedSuggestionIndex >= 0 ? `${uid}-tag-suggestion-${focusedSuggestionIndex}` : void 0
237
+ }
238
+ ),
239
+ hasSuggestions && /* @__PURE__ */ jsx(
240
+ Dropdown,
241
+ {
242
+ open: isSuggestionsOpen,
243
+ onOpenChange: setIsSuggestionsOpen,
244
+ trigger: /* @__PURE__ */ jsx("span", { className: "eidos-tag-input-dropdown-anchor", "aria-hidden": "true" }),
245
+ content: /* @__PURE__ */ jsx(
246
+ "div",
247
+ {
248
+ id: `${uid}-tag-suggestions`,
249
+ className: "eidos-tag-input-suggestions",
250
+ role: "listbox",
251
+ "aria-label": label ?? "Suggestions",
252
+ onMouseDown: (e) => e.preventDefault(),
253
+ children: filteredSuggestions.length === 0 ? /* @__PURE__ */ jsx("div", { className: "eidos-tag-input-suggestions-empty", children: suggestionsEmptyText }) : filteredSuggestions.map((suggestion, index) => /* @__PURE__ */ jsx(
254
+ "div",
255
+ {
256
+ id: `${uid}-tag-suggestion-${index}`,
257
+ className: [
258
+ "eidos-tag-input-suggestion",
259
+ index === focusedSuggestionIndex && "eidos-tag-input-suggestion--focused"
260
+ ].filter(Boolean).join(" "),
261
+ role: "option",
262
+ "aria-selected": index === focusedSuggestionIndex,
263
+ onClick: () => selectSuggestion(suggestion),
264
+ onMouseEnter: () => setFocusedSuggestionIndex(index),
265
+ children: suggestion
266
+ },
267
+ suggestion
268
+ ))
269
+ }
270
+ ),
271
+ triggerRef: fieldRef,
272
+ autoWidth: true,
273
+ closeOnClickOutside: false,
274
+ closeOnEscape: false
275
+ }
276
+ )
277
+ ] }),
278
+ hint && !hasError && /* @__PURE__ */ jsx("p", { className: "eidos-tag-input-hint", id: hintId, children: hint }),
279
+ hasError && /* @__PURE__ */ jsxs("p", { className: "eidos-tag-input-error-message", id: errorId, role: "alert", children: [
280
+ /* @__PURE__ */ jsx(CircleAlert, {}),
281
+ displayError
282
+ ] })
283
+ ] })
292
284
  );
293
285
  };
294
286
  TagInput.displayName = "TagInput";
@@ -296,4 +288,4 @@ TagInput.displayName = "TagInput";
296
288
  export {
297
289
  TagInput
298
290
  };
299
- //# sourceMappingURL=chunk-ITXDSQT2.js.map
291
+ //# sourceMappingURL=chunk-24HKKSKX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/TagInput/TagInput.component.tsx"],"sourcesContent":["import React, { useState, useId, useRef, useCallback, useMemo, useEffect } from 'react';\nimport { CircleAlert } from 'lucide-react';\nimport { Chip } from '../Chip/Chip.component';\nimport { Dropdown } from '../Dropdown/Dropdown.component';\nimport type { TagInputProps } from './TagInput.types';\nimport './TagInput.scss';\n\nexport const TagInput: React.FC<TagInputProps> = ({\n value,\n defaultValue = [],\n onChange,\n placeholder = 'Add tag…',\n size = 'md',\n disabled = false,\n label,\n error,\n hint,\n allowDuplicates = false,\n maxTags,\n separators = ['Enter', ',', 'Tab'],\n validate,\n className = '',\n fullWidth = false,\n suggestions,\n onSearch,\n suggestionsEmptyText = 'No matches',\n}) => {\n const generatedId = useId();\n const inputId = `tag-input-${generatedId}`;\n const inputRef = useRef<HTMLInputElement>(null);\n\n /** Entire component wrapper - used for click-outside detection on the suggestions dropdown */\n const containerRef = useRef<HTMLDivElement>(null);\n\n /** The field wrapper - passed to Dropdown as externalTriggerRef for width/anchoring */\n const fieldRef = useRef<HTMLDivElement>(null);\n\n /** The 0-height span that IS the Dropdown trigger element - programmatically clicked to open */\n\n const hasSuggestions = suggestions !== undefined;\n const [isSuggestionsOpen, setIsSuggestionsOpen] = useState(false);\n // Read synchronously by the document `mousedown` listener and the key\n // handlers, where a value captured at render would be stale. Kept in step by\n // an effect rather than assigned at every call site, which is how the two\n // used to drift apart.\n const isSuggestionsOpenRef = useRef(isSuggestionsOpen);\n useEffect(() => {\n isSuggestionsOpenRef.current = isSuggestionsOpen;\n }, [isSuggestionsOpen]);\n const [focusedSuggestionIndex, setFocusedSuggestionIndex] = useState(-1);\n\n const isControlled = value !== undefined;\n\n const [internalTags, setInternalTags] = useState<string[]>(defaultValue);\n const [inputValue, setInputValue] = useState('');\n const [isFocused, setIsFocused] = useState(false);\n const [validationError, setValidationError] = useState<string | null>(null);\n\n const tags = isControlled ? (value as string[]) : internalTags;\n\n const updateTags = useCallback(\n (newTags: string[]) => {\n if (!isControlled) {\n setInternalTags(newTags);\n }\n onChange?.(newTags);\n },\n [isControlled, onChange],\n );\n\n const addTag = useCallback(\n (rawTag: string) => {\n const tag = rawTag.trim();\n\n if (!tag) return;\n\n if (!allowDuplicates && tags.includes(tag)) return;\n\n if (maxTags !== undefined && tags.length >= maxTags) return;\n\n if (validate) {\n const result = validate(tag);\n if (result === false) return;\n if (typeof result === 'string') {\n setValidationError(result);\n return;\n }\n // result === true → valid, fall through\n }\n\n setValidationError(null);\n updateTags([...tags, tag]);\n setInputValue('');\n },\n [tags, allowDuplicates, maxTags, validate, updateTags],\n );\n\n const removeTag = useCallback(\n (index: number) => {\n updateTags(tags.filter((_, i) => i !== index));\n },\n [tags, updateTags],\n );\n\n // ─── Suggestions dropdown (autocomplete) ───────────────────────────────────\n\n const filteredSuggestions = useMemo<string[]>(() => {\n if (!suggestions) return [];\n const query = inputValue.trim().toLowerCase();\n return suggestions.filter((suggestion) => {\n if (!allowDuplicates && tags.includes(suggestion)) return false;\n if (!query) return true;\n return suggestion.toLowerCase().includes(query);\n });\n }, [suggestions, inputValue, tags, allowDuplicates]);\n\n useEffect(() => {\n setFocusedSuggestionIndex(-1);\n }, [filteredSuggestions]);\n\n const openSuggestions = useCallback(() => {\n if (isSuggestionsOpenRef.current || disabled || !hasSuggestions) return;\n // This used to synthesise a click on a hidden zero-height `span` so that it\n // would bubble to the dropdown's trigger wrapper - the only way in, while\n // the overlay owned its open state privately.\n isSuggestionsOpenRef.current = true;\n setIsSuggestionsOpen(true);\n }, [disabled, hasSuggestions]);\n\n const closeSuggestions = useCallback(() => {\n isSuggestionsOpenRef.current = false;\n setIsSuggestionsOpen(false);\n setFocusedSuggestionIndex(-1);\n }, []);\n\n const selectSuggestion = useCallback(\n (suggestion: string) => {\n addTag(suggestion);\n closeSuggestions();\n inputRef.current?.focus();\n },\n [addTag, closeSuggestions],\n );\n\n // Click-outside detection for the suggestions dropdown.\n useEffect(() => {\n if (!hasSuggestions) return;\n\n const handleMouseDown = (e: MouseEvent) => {\n if (!isSuggestionsOpenRef.current) return;\n if (e.defaultPrevented) return; // click inside the portal-rendered listbox\n if (containerRef.current?.contains(e.target as Node)) return;\n closeSuggestions();\n };\n\n document.addEventListener('mousedown', handleMouseDown);\n return () => document.removeEventListener('mousedown', handleMouseDown);\n }, [hasSuggestions, closeSuggestions]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (hasSuggestions && isSuggestionsOpenRef.current && filteredSuggestions.length > 0) {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setFocusedSuggestionIndex((prev) => (prev + 1 < filteredSuggestions.length ? prev + 1 : 0));\n return;\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n setFocusedSuggestionIndex((prev) => (prev > 0 ? prev - 1 : filteredSuggestions.length - 1));\n return;\n }\n if (e.key === 'Enter' && focusedSuggestionIndex >= 0) {\n e.preventDefault();\n selectSuggestion(filteredSuggestions[focusedSuggestionIndex]);\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n closeSuggestions();\n return;\n }\n }\n\n if (separators.includes(e.key)) {\n e.preventDefault();\n addTag(inputValue);\n return;\n }\n\n if (e.key === 'Backspace' && inputValue === '' && tags.length > 0) {\n e.preventDefault();\n removeTag(tags.length - 1);\n }\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const query = e.target.value;\n setInputValue(query);\n if (validationError) {\n setValidationError(null);\n }\n onSearch?.(query);\n if (hasSuggestions && !isSuggestionsOpenRef.current) openSuggestions();\n };\n\n const handleInputFocus = () => {\n setIsFocused(true);\n if (hasSuggestions) openSuggestions();\n };\n\n const handleFieldClick = (e: React.MouseEvent<HTMLDivElement>) => {\n // Don't steal focus from interactive child elements\n if ((e.target as HTMLElement).closest('button, input')) return;\n if (!disabled) {\n inputRef.current?.focus();\n }\n };\n\n const displayError = validationError ?? error;\n const hasError = !!displayError;\n const errorId = `${inputId}-error`;\n const hintId = `${inputId}-hint`;\n\n const containerClasses = [\n 'eidos-tag-input',\n hasError && 'eidos-tag-input--error',\n disabled && 'eidos-tag-input--disabled',\n fullWidth && 'eidos-tag-input--full-width',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const fieldClasses = [\n 'eidos-tag-input-field',\n `eidos-tag-input-field--${size}`,\n isFocused && 'eidos-tag-input-field--focused',\n hasError && 'eidos-tag-input-field--error',\n disabled && 'eidos-tag-input-field--disabled',\n ]\n .filter(Boolean)\n .join(' ');\n\n const uid = generatedId;\n\n return (\n // No ARIA on this wrapper - it has no role, so `aria-expanded` and\n // `aria-haspopup` were invalid here. Same fix as `Combobox`: they belong\n // on the input, which is the combobox.\n <div className={containerClasses} ref={containerRef}>\n {label && (\n <label htmlFor={inputId} className=\"eidos-tag-input-label\">\n {label}\n </label>\n )}\n\n <div className={fieldClasses} onClick={handleFieldClick} ref={fieldRef}>\n {tags.map((tag, index) => (\n <Chip\n key={`${tag}-${index}`}\n variant=\"filled\"\n color=\"primary\"\n size={size}\n onRemove={disabled ? undefined : () => removeTag(index)}\n >\n {tag}\n </Chip>\n ))}\n\n <input\n ref={inputRef}\n id={inputId}\n className=\"eidos-tag-input-input\"\n type=\"text\"\n value={inputValue}\n placeholder={tags.length === 0 ? placeholder : undefined}\n disabled={disabled}\n onKeyDown={handleKeyDown}\n onChange={handleInputChange}\n onFocus={handleInputFocus}\n onBlur={() => setIsFocused(false)}\n aria-label={label ? undefined : 'Tag input'}\n aria-invalid={hasError ? true : undefined}\n // The ternary is deliberate, not a bug: the hint is unmounted when\n // an error shows (see the render below), so describing the field\n // with it would point at an element that is not there.\n aria-describedby={hasError ? errorId : hint ? hintId : undefined}\n role={hasSuggestions ? 'combobox' : undefined}\n aria-expanded={hasSuggestions ? isSuggestionsOpen : undefined}\n aria-autocomplete={hasSuggestions ? 'list' : undefined}\n // Only while the list is actually rendered - `aria-controls` must\n // name an element that exists.\n aria-controls={hasSuggestions && isSuggestionsOpen ? `${uid}-tag-suggestions` : undefined}\n aria-activedescendant={\n hasSuggestions && focusedSuggestionIndex >= 0\n ? `${uid}-tag-suggestion-${focusedSuggestionIndex}`\n : undefined\n }\n />\n\n {hasSuggestions && (\n <Dropdown\n open={isSuggestionsOpen}\n onOpenChange={setIsSuggestionsOpen}\n // Positioning is anchored to the field via `triggerRef` below; this\n // span is only here because a trigger is required. It used to carry\n // a ref purely so `openSuggestions` could click it.\n trigger={<span className=\"eidos-tag-input-dropdown-anchor\" aria-hidden=\"true\" />}\n content={\n <div\n id={`${uid}-tag-suggestions`}\n className=\"eidos-tag-input-suggestions\"\n role=\"listbox\"\n aria-label={label ?? 'Suggestions'}\n onMouseDown={(e) => e.preventDefault()}\n >\n {filteredSuggestions.length === 0 ? (\n <div className=\"eidos-tag-input-suggestions-empty\">{suggestionsEmptyText}</div>\n ) : (\n filteredSuggestions.map((suggestion, index) => (\n <div\n key={suggestion}\n id={`${uid}-tag-suggestion-${index}`}\n className={[\n 'eidos-tag-input-suggestion',\n index === focusedSuggestionIndex && 'eidos-tag-input-suggestion--focused',\n ]\n .filter(Boolean)\n .join(' ')}\n role=\"option\"\n aria-selected={index === focusedSuggestionIndex}\n onClick={() => selectSuggestion(suggestion)}\n onMouseEnter={() => setFocusedSuggestionIndex(index)}\n >\n {suggestion}\n </div>\n ))\n )}\n </div>\n }\n triggerRef={fieldRef as React.RefObject<HTMLElement | null>}\n autoWidth\n closeOnClickOutside={false}\n closeOnEscape={false}\n />\n )}\n </div>\n\n {hint && !hasError && (\n <p className=\"eidos-tag-input-hint\" id={hintId}>\n {hint}\n </p>\n )}\n\n {hasError && (\n <p className=\"eidos-tag-input-error-message\" id={errorId} role=\"alert\">\n <CircleAlert />\n {displayError}\n </p>\n )}\n </div>\n );\n};\n\nTagInput.displayName = 'TagInput';\n"],"mappings":"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","names":[]}