@cyberskill/design 2.6.0 → 2.7.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 (324) hide show
  1. package/DESIGN.md +1 -1
  2. package/README.md +3 -3
  3. package/SECURITY.md +4 -4
  4. package/VERSION +1 -1
  5. package/_ds_bundle.js +2 -2
  6. package/_ds_bundle.js.map +1 -1
  7. package/_esm/cs.mjs +2 -2
  8. package/components/api-discovery.json +6 -6
  9. package/components/api-index.json +57 -16
  10. package/components/contracts.json +5 -5
  11. package/components/forms/Cascader.jsx +1 -1
  12. package/components/forms/ColorPicker.jsx +1 -1
  13. package/components/forms/InlineEdit.jsx +12 -2
  14. package/components/forms/SearchField.jsx +1 -1
  15. package/components/forms/TreeSelect.jsx +1 -1
  16. package/components/lifecycle.json +51 -10
  17. package/components/prompt-api.json +2 -2
  18. package/components/release-compatibility.json +1 -1
  19. package/components/scenarios.json +15 -15
  20. package/components/specifications.json +452 -452
  21. package/components/static-html-reference.json +24 -24
  22. package/dist/esm/_esm/react.mjs +5 -5
  23. package/dist/esm/build.json +52 -52
  24. package/dist/esm/chunks/{chunk-GLPQBE2J.mjs → chunk-4D7SFITE.mjs} +17 -3
  25. package/dist/esm/chunks/chunk-4D7SFITE.mjs.map +7 -0
  26. package/dist/esm/chunks/{chunk-MRXEJSQQ.mjs → chunk-B5V7HN5G.mjs} +5 -2
  27. package/dist/esm/chunks/{chunk-MRXEJSQQ.mjs.map → chunk-B5V7HN5G.mjs.map} +2 -2
  28. package/dist/esm/chunks/{chunk-5FQGNCKS.mjs → chunk-LU45KTWU.mjs} +2 -1
  29. package/dist/esm/chunks/{chunk-5FQGNCKS.mjs.map → chunk-LU45KTWU.mjs.map} +2 -2
  30. package/dist/esm/chunks/{chunk-D7A4ZCMJ.mjs → chunk-RUB6XN27.mjs} +5 -2
  31. package/dist/esm/chunks/{chunk-D7A4ZCMJ.mjs.map → chunk-RUB6XN27.mjs.map} +2 -2
  32. package/dist/esm/chunks/{chunk-FF5D53IP.mjs → chunk-SA7L22XE.mjs} +5 -2
  33. package/dist/esm/chunks/{chunk-FF5D53IP.mjs.map → chunk-SA7L22XE.mjs.map} +2 -2
  34. package/dist/esm/components/forms/Cascader.mjs +1 -1
  35. package/dist/esm/components/forms/ColorPicker.mjs +1 -1
  36. package/dist/esm/components/forms/InlineEdit.mjs +1 -1
  37. package/dist/esm/components/forms/SearchField.mjs +1 -1
  38. package/dist/esm/components/forms/TreeSelect.mjs +1 -1
  39. package/dist/styles.css +1 -1
  40. package/docs/consuming.md +1 -1
  41. package/docs/contrast-report.md +1 -1
  42. package/docs/conventions.md +1 -1
  43. package/docs/reference-catalog.json +20 -20
  44. package/docs/release-notes.md +13 -2
  45. package/docs/static-html-reference.md +23 -23
  46. package/docs/vi/consuming.md +1 -1
  47. package/docs/vi/contrast-report.md +1 -1
  48. package/docs/vi/conventions.md +1 -1
  49. package/docs/vi/entrypoints/DESIGN.md +1 -1
  50. package/docs/vi/entrypoints/README.md +3 -3
  51. package/docs/vi/release-notes.md +13 -2
  52. package/docs/vi/static-html-reference.md +23 -23
  53. package/package.json +6 -2
  54. package/styles/components/manifest.json +7 -7
  55. package/tokens/element-seeds.json +1 -1
  56. package/tokens/modes/dark__default__comfortable__high.dtcg.json +1 -1
  57. package/tokens/modes/dark__default__comfortable__standard.dtcg.json +1 -1
  58. package/tokens/modes/dark__default__compact__high.dtcg.json +1 -1
  59. package/tokens/modes/dark__default__compact__standard.dtcg.json +1 -1
  60. package/tokens/modes/dark__hoa-lava__comfortable__high.dtcg.json +1 -1
  61. package/tokens/modes/dark__hoa-lava__comfortable__standard.dtcg.json +1 -1
  62. package/tokens/modes/dark__hoa-lava__compact__high.dtcg.json +1 -1
  63. package/tokens/modes/dark__hoa-lava__compact__standard.dtcg.json +1 -1
  64. package/tokens/modes/dark__hoa-plasma__comfortable__high.dtcg.json +1 -1
  65. package/tokens/modes/dark__hoa-plasma__comfortable__standard.dtcg.json +1 -1
  66. package/tokens/modes/dark__hoa-plasma__compact__high.dtcg.json +1 -1
  67. package/tokens/modes/dark__hoa-plasma__compact__standard.dtcg.json +1 -1
  68. package/tokens/modes/dark__hoa__comfortable__high.dtcg.json +1 -1
  69. package/tokens/modes/dark__hoa__comfortable__standard.dtcg.json +1 -1
  70. package/tokens/modes/dark__hoa__compact__high.dtcg.json +1 -1
  71. package/tokens/modes/dark__hoa__compact__standard.dtcg.json +1 -1
  72. package/tokens/modes/dark__kim-steel__comfortable__high.dtcg.json +1 -1
  73. package/tokens/modes/dark__kim-steel__comfortable__standard.dtcg.json +1 -1
  74. package/tokens/modes/dark__kim-steel__compact__high.dtcg.json +1 -1
  75. package/tokens/modes/dark__kim-steel__compact__standard.dtcg.json +1 -1
  76. package/tokens/modes/dark__kim-titanium__comfortable__high.dtcg.json +1 -1
  77. package/tokens/modes/dark__kim-titanium__comfortable__standard.dtcg.json +1 -1
  78. package/tokens/modes/dark__kim-titanium__compact__high.dtcg.json +1 -1
  79. package/tokens/modes/dark__kim-titanium__compact__standard.dtcg.json +1 -1
  80. package/tokens/modes/dark__kim__comfortable__high.dtcg.json +1 -1
  81. package/tokens/modes/dark__kim__comfortable__standard.dtcg.json +1 -1
  82. package/tokens/modes/dark__kim__compact__high.dtcg.json +1 -1
  83. package/tokens/modes/dark__kim__compact__standard.dtcg.json +1 -1
  84. package/tokens/modes/dark__moc-bamboo__comfortable__high.dtcg.json +1 -1
  85. package/tokens/modes/dark__moc-bamboo__comfortable__standard.dtcg.json +1 -1
  86. package/tokens/modes/dark__moc-bamboo__compact__high.dtcg.json +1 -1
  87. package/tokens/modes/dark__moc-bamboo__compact__standard.dtcg.json +1 -1
  88. package/tokens/modes/dark__moc-forest__comfortable__high.dtcg.json +1 -1
  89. package/tokens/modes/dark__moc-forest__comfortable__standard.dtcg.json +1 -1
  90. package/tokens/modes/dark__moc-forest__compact__high.dtcg.json +1 -1
  91. package/tokens/modes/dark__moc-forest__compact__standard.dtcg.json +1 -1
  92. package/tokens/modes/dark__moc__comfortable__high.dtcg.json +1 -1
  93. package/tokens/modes/dark__moc__comfortable__standard.dtcg.json +1 -1
  94. package/tokens/modes/dark__moc__compact__high.dtcg.json +1 -1
  95. package/tokens/modes/dark__moc__compact__standard.dtcg.json +1 -1
  96. package/tokens/modes/dark__tho-clay__comfortable__high.dtcg.json +1 -1
  97. package/tokens/modes/dark__tho-clay__comfortable__standard.dtcg.json +1 -1
  98. package/tokens/modes/dark__tho-clay__compact__high.dtcg.json +1 -1
  99. package/tokens/modes/dark__tho-clay__compact__standard.dtcg.json +1 -1
  100. package/tokens/modes/dark__tho-sand__comfortable__high.dtcg.json +1 -1
  101. package/tokens/modes/dark__tho-sand__comfortable__standard.dtcg.json +1 -1
  102. package/tokens/modes/dark__tho-sand__compact__high.dtcg.json +1 -1
  103. package/tokens/modes/dark__tho-sand__compact__standard.dtcg.json +1 -1
  104. package/tokens/modes/dark__tho__comfortable__high.dtcg.json +1 -1
  105. package/tokens/modes/dark__tho__comfortable__standard.dtcg.json +1 -1
  106. package/tokens/modes/dark__tho__compact__high.dtcg.json +1 -1
  107. package/tokens/modes/dark__tho__compact__standard.dtcg.json +1 -1
  108. package/tokens/modes/dark__thuy-mist__comfortable__high.dtcg.json +1 -1
  109. package/tokens/modes/dark__thuy-mist__comfortable__standard.dtcg.json +1 -1
  110. package/tokens/modes/dark__thuy-mist__compact__high.dtcg.json +1 -1
  111. package/tokens/modes/dark__thuy-mist__compact__standard.dtcg.json +1 -1
  112. package/tokens/modes/dark__thuy-ocean__comfortable__high.dtcg.json +1 -1
  113. package/tokens/modes/dark__thuy-ocean__comfortable__standard.dtcg.json +1 -1
  114. package/tokens/modes/dark__thuy-ocean__compact__high.dtcg.json +1 -1
  115. package/tokens/modes/dark__thuy-ocean__compact__standard.dtcg.json +1 -1
  116. package/tokens/modes/dark__thuy__comfortable__high.dtcg.json +1 -1
  117. package/tokens/modes/dark__thuy__comfortable__standard.dtcg.json +1 -1
  118. package/tokens/modes/dark__thuy__compact__high.dtcg.json +1 -1
  119. package/tokens/modes/dark__thuy__compact__standard.dtcg.json +1 -1
  120. package/tokens/modes/index.json +258 -258
  121. package/tokens/modes/light__default__comfortable__high.dtcg.json +1 -1
  122. package/tokens/modes/light__default__comfortable__standard.dtcg.json +1 -1
  123. package/tokens/modes/light__default__compact__high.dtcg.json +1 -1
  124. package/tokens/modes/light__default__compact__standard.dtcg.json +1 -1
  125. package/tokens/modes/light__hoa-lava__comfortable__high.dtcg.json +1 -1
  126. package/tokens/modes/light__hoa-lava__comfortable__standard.dtcg.json +1 -1
  127. package/tokens/modes/light__hoa-lava__compact__high.dtcg.json +1 -1
  128. package/tokens/modes/light__hoa-lava__compact__standard.dtcg.json +1 -1
  129. package/tokens/modes/light__hoa-plasma__comfortable__high.dtcg.json +1 -1
  130. package/tokens/modes/light__hoa-plasma__comfortable__standard.dtcg.json +1 -1
  131. package/tokens/modes/light__hoa-plasma__compact__high.dtcg.json +1 -1
  132. package/tokens/modes/light__hoa-plasma__compact__standard.dtcg.json +1 -1
  133. package/tokens/modes/light__hoa__comfortable__high.dtcg.json +1 -1
  134. package/tokens/modes/light__hoa__comfortable__standard.dtcg.json +1 -1
  135. package/tokens/modes/light__hoa__compact__high.dtcg.json +1 -1
  136. package/tokens/modes/light__hoa__compact__standard.dtcg.json +1 -1
  137. package/tokens/modes/light__kim-steel__comfortable__high.dtcg.json +1 -1
  138. package/tokens/modes/light__kim-steel__comfortable__standard.dtcg.json +1 -1
  139. package/tokens/modes/light__kim-steel__compact__high.dtcg.json +1 -1
  140. package/tokens/modes/light__kim-steel__compact__standard.dtcg.json +1 -1
  141. package/tokens/modes/light__kim-titanium__comfortable__high.dtcg.json +1 -1
  142. package/tokens/modes/light__kim-titanium__comfortable__standard.dtcg.json +1 -1
  143. package/tokens/modes/light__kim-titanium__compact__high.dtcg.json +1 -1
  144. package/tokens/modes/light__kim-titanium__compact__standard.dtcg.json +1 -1
  145. package/tokens/modes/light__kim__comfortable__high.dtcg.json +1 -1
  146. package/tokens/modes/light__kim__comfortable__standard.dtcg.json +1 -1
  147. package/tokens/modes/light__kim__compact__high.dtcg.json +1 -1
  148. package/tokens/modes/light__kim__compact__standard.dtcg.json +1 -1
  149. package/tokens/modes/light__moc-bamboo__comfortable__high.dtcg.json +1 -1
  150. package/tokens/modes/light__moc-bamboo__comfortable__standard.dtcg.json +1 -1
  151. package/tokens/modes/light__moc-bamboo__compact__high.dtcg.json +1 -1
  152. package/tokens/modes/light__moc-bamboo__compact__standard.dtcg.json +1 -1
  153. package/tokens/modes/light__moc-forest__comfortable__high.dtcg.json +1 -1
  154. package/tokens/modes/light__moc-forest__comfortable__standard.dtcg.json +1 -1
  155. package/tokens/modes/light__moc-forest__compact__high.dtcg.json +1 -1
  156. package/tokens/modes/light__moc-forest__compact__standard.dtcg.json +1 -1
  157. package/tokens/modes/light__moc__comfortable__high.dtcg.json +1 -1
  158. package/tokens/modes/light__moc__comfortable__standard.dtcg.json +1 -1
  159. package/tokens/modes/light__moc__compact__high.dtcg.json +1 -1
  160. package/tokens/modes/light__moc__compact__standard.dtcg.json +1 -1
  161. package/tokens/modes/light__tho-clay__comfortable__high.dtcg.json +1 -1
  162. package/tokens/modes/light__tho-clay__comfortable__standard.dtcg.json +1 -1
  163. package/tokens/modes/light__tho-clay__compact__high.dtcg.json +1 -1
  164. package/tokens/modes/light__tho-clay__compact__standard.dtcg.json +1 -1
  165. package/tokens/modes/light__tho-sand__comfortable__high.dtcg.json +1 -1
  166. package/tokens/modes/light__tho-sand__comfortable__standard.dtcg.json +1 -1
  167. package/tokens/modes/light__tho-sand__compact__high.dtcg.json +1 -1
  168. package/tokens/modes/light__tho-sand__compact__standard.dtcg.json +1 -1
  169. package/tokens/modes/light__tho__comfortable__high.dtcg.json +1 -1
  170. package/tokens/modes/light__tho__comfortable__standard.dtcg.json +1 -1
  171. package/tokens/modes/light__tho__compact__high.dtcg.json +1 -1
  172. package/tokens/modes/light__tho__compact__standard.dtcg.json +1 -1
  173. package/tokens/modes/light__thuy-mist__comfortable__high.dtcg.json +1 -1
  174. package/tokens/modes/light__thuy-mist__comfortable__standard.dtcg.json +1 -1
  175. package/tokens/modes/light__thuy-mist__compact__high.dtcg.json +1 -1
  176. package/tokens/modes/light__thuy-mist__compact__standard.dtcg.json +1 -1
  177. package/tokens/modes/light__thuy-ocean__comfortable__high.dtcg.json +1 -1
  178. package/tokens/modes/light__thuy-ocean__comfortable__standard.dtcg.json +1 -1
  179. package/tokens/modes/light__thuy-ocean__compact__high.dtcg.json +1 -1
  180. package/tokens/modes/light__thuy-ocean__compact__standard.dtcg.json +1 -1
  181. package/tokens/modes/light__thuy__comfortable__high.dtcg.json +1 -1
  182. package/tokens/modes/light__thuy__comfortable__standard.dtcg.json +1 -1
  183. package/tokens/modes/light__thuy__compact__high.dtcg.json +1 -1
  184. package/tokens/modes/light__thuy__compact__standard.dtcg.json +1 -1
  185. package/tokens/modes/system-dark__default__comfortable__high.dtcg.json +1 -1
  186. package/tokens/modes/system-dark__default__comfortable__standard.dtcg.json +1 -1
  187. package/tokens/modes/system-dark__default__compact__high.dtcg.json +1 -1
  188. package/tokens/modes/system-dark__default__compact__standard.dtcg.json +1 -1
  189. package/tokens/modes/system-dark__hoa-lava__comfortable__high.dtcg.json +1 -1
  190. package/tokens/modes/system-dark__hoa-lava__comfortable__standard.dtcg.json +1 -1
  191. package/tokens/modes/system-dark__hoa-lava__compact__high.dtcg.json +1 -1
  192. package/tokens/modes/system-dark__hoa-lava__compact__standard.dtcg.json +1 -1
  193. package/tokens/modes/system-dark__hoa-plasma__comfortable__high.dtcg.json +1 -1
  194. package/tokens/modes/system-dark__hoa-plasma__comfortable__standard.dtcg.json +1 -1
  195. package/tokens/modes/system-dark__hoa-plasma__compact__high.dtcg.json +1 -1
  196. package/tokens/modes/system-dark__hoa-plasma__compact__standard.dtcg.json +1 -1
  197. package/tokens/modes/system-dark__hoa__comfortable__high.dtcg.json +1 -1
  198. package/tokens/modes/system-dark__hoa__comfortable__standard.dtcg.json +1 -1
  199. package/tokens/modes/system-dark__hoa__compact__high.dtcg.json +1 -1
  200. package/tokens/modes/system-dark__hoa__compact__standard.dtcg.json +1 -1
  201. package/tokens/modes/system-dark__kim-steel__comfortable__high.dtcg.json +1 -1
  202. package/tokens/modes/system-dark__kim-steel__comfortable__standard.dtcg.json +1 -1
  203. package/tokens/modes/system-dark__kim-steel__compact__high.dtcg.json +1 -1
  204. package/tokens/modes/system-dark__kim-steel__compact__standard.dtcg.json +1 -1
  205. package/tokens/modes/system-dark__kim-titanium__comfortable__high.dtcg.json +1 -1
  206. package/tokens/modes/system-dark__kim-titanium__comfortable__standard.dtcg.json +1 -1
  207. package/tokens/modes/system-dark__kim-titanium__compact__high.dtcg.json +1 -1
  208. package/tokens/modes/system-dark__kim-titanium__compact__standard.dtcg.json +1 -1
  209. package/tokens/modes/system-dark__kim__comfortable__high.dtcg.json +1 -1
  210. package/tokens/modes/system-dark__kim__comfortable__standard.dtcg.json +1 -1
  211. package/tokens/modes/system-dark__kim__compact__high.dtcg.json +1 -1
  212. package/tokens/modes/system-dark__kim__compact__standard.dtcg.json +1 -1
  213. package/tokens/modes/system-dark__moc-bamboo__comfortable__high.dtcg.json +1 -1
  214. package/tokens/modes/system-dark__moc-bamboo__comfortable__standard.dtcg.json +1 -1
  215. package/tokens/modes/system-dark__moc-bamboo__compact__high.dtcg.json +1 -1
  216. package/tokens/modes/system-dark__moc-bamboo__compact__standard.dtcg.json +1 -1
  217. package/tokens/modes/system-dark__moc-forest__comfortable__high.dtcg.json +1 -1
  218. package/tokens/modes/system-dark__moc-forest__comfortable__standard.dtcg.json +1 -1
  219. package/tokens/modes/system-dark__moc-forest__compact__high.dtcg.json +1 -1
  220. package/tokens/modes/system-dark__moc-forest__compact__standard.dtcg.json +1 -1
  221. package/tokens/modes/system-dark__moc__comfortable__high.dtcg.json +1 -1
  222. package/tokens/modes/system-dark__moc__comfortable__standard.dtcg.json +1 -1
  223. package/tokens/modes/system-dark__moc__compact__high.dtcg.json +1 -1
  224. package/tokens/modes/system-dark__moc__compact__standard.dtcg.json +1 -1
  225. package/tokens/modes/system-dark__tho-clay__comfortable__high.dtcg.json +1 -1
  226. package/tokens/modes/system-dark__tho-clay__comfortable__standard.dtcg.json +1 -1
  227. package/tokens/modes/system-dark__tho-clay__compact__high.dtcg.json +1 -1
  228. package/tokens/modes/system-dark__tho-clay__compact__standard.dtcg.json +1 -1
  229. package/tokens/modes/system-dark__tho-sand__comfortable__high.dtcg.json +1 -1
  230. package/tokens/modes/system-dark__tho-sand__comfortable__standard.dtcg.json +1 -1
  231. package/tokens/modes/system-dark__tho-sand__compact__high.dtcg.json +1 -1
  232. package/tokens/modes/system-dark__tho-sand__compact__standard.dtcg.json +1 -1
  233. package/tokens/modes/system-dark__tho__comfortable__high.dtcg.json +1 -1
  234. package/tokens/modes/system-dark__tho__comfortable__standard.dtcg.json +1 -1
  235. package/tokens/modes/system-dark__tho__compact__high.dtcg.json +1 -1
  236. package/tokens/modes/system-dark__tho__compact__standard.dtcg.json +1 -1
  237. package/tokens/modes/system-dark__thuy-mist__comfortable__high.dtcg.json +1 -1
  238. package/tokens/modes/system-dark__thuy-mist__comfortable__standard.dtcg.json +1 -1
  239. package/tokens/modes/system-dark__thuy-mist__compact__high.dtcg.json +1 -1
  240. package/tokens/modes/system-dark__thuy-mist__compact__standard.dtcg.json +1 -1
  241. package/tokens/modes/system-dark__thuy-ocean__comfortable__high.dtcg.json +1 -1
  242. package/tokens/modes/system-dark__thuy-ocean__comfortable__standard.dtcg.json +1 -1
  243. package/tokens/modes/system-dark__thuy-ocean__compact__high.dtcg.json +1 -1
  244. package/tokens/modes/system-dark__thuy-ocean__compact__standard.dtcg.json +1 -1
  245. package/tokens/modes/system-dark__thuy__comfortable__high.dtcg.json +1 -1
  246. package/tokens/modes/system-dark__thuy__comfortable__standard.dtcg.json +1 -1
  247. package/tokens/modes/system-dark__thuy__compact__high.dtcg.json +1 -1
  248. package/tokens/modes/system-dark__thuy__compact__standard.dtcg.json +1 -1
  249. package/tokens/modes/system-light__default__comfortable__high.dtcg.json +1 -1
  250. package/tokens/modes/system-light__default__comfortable__standard.dtcg.json +1 -1
  251. package/tokens/modes/system-light__default__compact__high.dtcg.json +1 -1
  252. package/tokens/modes/system-light__default__compact__standard.dtcg.json +1 -1
  253. package/tokens/modes/system-light__hoa-lava__comfortable__high.dtcg.json +1 -1
  254. package/tokens/modes/system-light__hoa-lava__comfortable__standard.dtcg.json +1 -1
  255. package/tokens/modes/system-light__hoa-lava__compact__high.dtcg.json +1 -1
  256. package/tokens/modes/system-light__hoa-lava__compact__standard.dtcg.json +1 -1
  257. package/tokens/modes/system-light__hoa-plasma__comfortable__high.dtcg.json +1 -1
  258. package/tokens/modes/system-light__hoa-plasma__comfortable__standard.dtcg.json +1 -1
  259. package/tokens/modes/system-light__hoa-plasma__compact__high.dtcg.json +1 -1
  260. package/tokens/modes/system-light__hoa-plasma__compact__standard.dtcg.json +1 -1
  261. package/tokens/modes/system-light__hoa__comfortable__high.dtcg.json +1 -1
  262. package/tokens/modes/system-light__hoa__comfortable__standard.dtcg.json +1 -1
  263. package/tokens/modes/system-light__hoa__compact__high.dtcg.json +1 -1
  264. package/tokens/modes/system-light__hoa__compact__standard.dtcg.json +1 -1
  265. package/tokens/modes/system-light__kim-steel__comfortable__high.dtcg.json +1 -1
  266. package/tokens/modes/system-light__kim-steel__comfortable__standard.dtcg.json +1 -1
  267. package/tokens/modes/system-light__kim-steel__compact__high.dtcg.json +1 -1
  268. package/tokens/modes/system-light__kim-steel__compact__standard.dtcg.json +1 -1
  269. package/tokens/modes/system-light__kim-titanium__comfortable__high.dtcg.json +1 -1
  270. package/tokens/modes/system-light__kim-titanium__comfortable__standard.dtcg.json +1 -1
  271. package/tokens/modes/system-light__kim-titanium__compact__high.dtcg.json +1 -1
  272. package/tokens/modes/system-light__kim-titanium__compact__standard.dtcg.json +1 -1
  273. package/tokens/modes/system-light__kim__comfortable__high.dtcg.json +1 -1
  274. package/tokens/modes/system-light__kim__comfortable__standard.dtcg.json +1 -1
  275. package/tokens/modes/system-light__kim__compact__high.dtcg.json +1 -1
  276. package/tokens/modes/system-light__kim__compact__standard.dtcg.json +1 -1
  277. package/tokens/modes/system-light__moc-bamboo__comfortable__high.dtcg.json +1 -1
  278. package/tokens/modes/system-light__moc-bamboo__comfortable__standard.dtcg.json +1 -1
  279. package/tokens/modes/system-light__moc-bamboo__compact__high.dtcg.json +1 -1
  280. package/tokens/modes/system-light__moc-bamboo__compact__standard.dtcg.json +1 -1
  281. package/tokens/modes/system-light__moc-forest__comfortable__high.dtcg.json +1 -1
  282. package/tokens/modes/system-light__moc-forest__comfortable__standard.dtcg.json +1 -1
  283. package/tokens/modes/system-light__moc-forest__compact__high.dtcg.json +1 -1
  284. package/tokens/modes/system-light__moc-forest__compact__standard.dtcg.json +1 -1
  285. package/tokens/modes/system-light__moc__comfortable__high.dtcg.json +1 -1
  286. package/tokens/modes/system-light__moc__comfortable__standard.dtcg.json +1 -1
  287. package/tokens/modes/system-light__moc__compact__high.dtcg.json +1 -1
  288. package/tokens/modes/system-light__moc__compact__standard.dtcg.json +1 -1
  289. package/tokens/modes/system-light__tho-clay__comfortable__high.dtcg.json +1 -1
  290. package/tokens/modes/system-light__tho-clay__comfortable__standard.dtcg.json +1 -1
  291. package/tokens/modes/system-light__tho-clay__compact__high.dtcg.json +1 -1
  292. package/tokens/modes/system-light__tho-clay__compact__standard.dtcg.json +1 -1
  293. package/tokens/modes/system-light__tho-sand__comfortable__high.dtcg.json +1 -1
  294. package/tokens/modes/system-light__tho-sand__comfortable__standard.dtcg.json +1 -1
  295. package/tokens/modes/system-light__tho-sand__compact__high.dtcg.json +1 -1
  296. package/tokens/modes/system-light__tho-sand__compact__standard.dtcg.json +1 -1
  297. package/tokens/modes/system-light__tho__comfortable__high.dtcg.json +1 -1
  298. package/tokens/modes/system-light__tho__comfortable__standard.dtcg.json +1 -1
  299. package/tokens/modes/system-light__tho__compact__high.dtcg.json +1 -1
  300. package/tokens/modes/system-light__tho__compact__standard.dtcg.json +1 -1
  301. package/tokens/modes/system-light__thuy-mist__comfortable__high.dtcg.json +1 -1
  302. package/tokens/modes/system-light__thuy-mist__comfortable__standard.dtcg.json +1 -1
  303. package/tokens/modes/system-light__thuy-mist__compact__high.dtcg.json +1 -1
  304. package/tokens/modes/system-light__thuy-mist__compact__standard.dtcg.json +1 -1
  305. package/tokens/modes/system-light__thuy-ocean__comfortable__high.dtcg.json +1 -1
  306. package/tokens/modes/system-light__thuy-ocean__comfortable__standard.dtcg.json +1 -1
  307. package/tokens/modes/system-light__thuy-ocean__compact__high.dtcg.json +1 -1
  308. package/tokens/modes/system-light__thuy-ocean__compact__standard.dtcg.json +1 -1
  309. package/tokens/modes/system-light__thuy__comfortable__high.dtcg.json +1 -1
  310. package/tokens/modes/system-light__thuy__comfortable__standard.dtcg.json +1 -1
  311. package/tokens/modes/system-light__thuy__compact__high.dtcg.json +1 -1
  312. package/tokens/modes/system-light__thuy__compact__standard.dtcg.json +1 -1
  313. package/tokens/native/CSModes.kt +3 -3
  314. package/tokens/native/CSModes.swift +3 -3
  315. package/tokens/native/CSTokens.kt +1 -1
  316. package/tokens/native/CSTokens.swift +1 -1
  317. package/tokens/native/cs_modes.dart +3 -3
  318. package/tokens/native/cs_tokens.dart +1 -1
  319. package/tokens/native/mode-provenance.json +6 -6
  320. package/tokens/provenance.json +6 -6
  321. package/tokens/tokens.dtcg.json +1 -1
  322. package/tokens/tokens.js +2 -2
  323. package/tokens/tokens.json +1 -1
  324. package/dist/esm/chunks/chunk-GLPQBE2J.mjs.map +0 -7
@@ -68,7 +68,7 @@ import {
68
68
  } from "../chunks/chunk-GA5HJNPW.mjs";
69
69
  import {
70
70
  TreeSelect
71
- } from "../chunks/chunk-MRXEJSQQ.mjs";
71
+ } from "../chunks/chunk-B5V7HN5G.mjs";
72
72
  import {
73
73
  LocaleProvider,
74
74
  useMessages
@@ -131,13 +131,13 @@ import {
131
131
  } from "../chunks/chunk-U7RKPGRO.mjs";
132
132
  import {
133
133
  SearchField
134
- } from "../chunks/chunk-5FQGNCKS.mjs";
134
+ } from "../chunks/chunk-LU45KTWU.mjs";
135
135
  import {
136
136
  SegmentedControl
137
137
  } from "../chunks/chunk-LPRCBBVY.mjs";
138
138
  import {
139
139
  ColorPicker
140
- } from "../chunks/chunk-FF5D53IP.mjs";
140
+ } from "../chunks/chunk-SA7L22XE.mjs";
141
141
  import {
142
142
  Combobox
143
143
  } from "../chunks/chunk-CYZ22MB7.mjs";
@@ -161,7 +161,7 @@ import {
161
161
  } from "../chunks/chunk-3R5WJQCB.mjs";
162
162
  import {
163
163
  InlineEdit
164
- } from "../chunks/chunk-GLPQBE2J.mjs";
164
+ } from "../chunks/chunk-4D7SFITE.mjs";
165
165
  import {
166
166
  InputGroup
167
167
  } from "../chunks/chunk-TMXLSCAG.mjs";
@@ -183,7 +183,7 @@ import {
183
183
  } from "../chunks/chunk-2CCVFTPL.mjs";
184
184
  import {
185
185
  Cascader
186
- } from "../chunks/chunk-D7A4ZCMJ.mjs";
186
+ } from "../chunks/chunk-RUB6XN27.mjs";
187
187
  import {
188
188
  Checkbox
189
189
  } from "../chunks/chunk-YJDC6NPP.mjs";
@@ -73,15 +73,15 @@
73
73
  "components/feedback/Tag.jsx": "8b6415fd3811a97a82edb62391b0b78059f31ae09b93c92ac55868ca1b68f281",
74
74
  "components/feedback/Toast.jsx": "600f0efdcc28bfd5118533b75046f07ce72515ab4978386825c0bbc3e2919206",
75
75
  "components/forms/Calendar.jsx": "9300c818b4a4de7425600d8b54f8be62e3ca3e7a7e2c0f25fc3cff1b12dad2ce",
76
- "components/forms/Cascader.jsx": "60217f041dd78ad4809a787920c0f0d56a6a383ae125ad2e691757b2af22abbf",
76
+ "components/forms/Cascader.jsx": "09380cc01ef61a3cc0fb0d4f065345f4e31a6cd197cd4a9d837ffdc144b22bde",
77
77
  "components/forms/Checkbox.jsx": "19491fd53a0a7c5a4fa3c9d449ee3c0b7f39af18565413a012a7a8f5e25425ee",
78
- "components/forms/ColorPicker.jsx": "64da95eccfc3637b640edcb4271ae914a81f4e05cf7b528467ab5850a651ed4f",
78
+ "components/forms/ColorPicker.jsx": "90d7990c0e97ca31592bb7a48153d85944016b4424c0ac58837c8295c33d8695",
79
79
  "components/forms/Combobox.jsx": "bae42bd629700dcdb3173636184df3aa0181a4e4d5f0ae7447a630f6404e84d3",
80
80
  "components/forms/DatePicker.jsx": "7a2fadb7759ddd31d574114d8e967406dbf82117251b65b14adcab6e21996b32",
81
81
  "components/forms/Editor.jsx": "dcb9dd625cac6e80c96e3e5eca5e8e06e215c6151a8dbbfc63fc3754b4a7b4b9",
82
82
  "components/forms/FileUpload.jsx": "5a37afe44694bfe5c53fa199374d02ceddb20fc0f4a02eb2b427079254a0b0cb",
83
83
  "components/forms/Form.jsx": "fc33716feb9f7496abd4ab9a21af27920cf78d014bc33f8e79a7fbae5ba3ec3f",
84
- "components/forms/InlineEdit.jsx": "45b36df70b179243e329684ce20f61ed8dd4fda75e11674d24797713c644d4f8",
84
+ "components/forms/InlineEdit.jsx": "9f242ef99af077e5c9b68d36cc9539fac0819e66f7995fa6a93ecb7793bf3484",
85
85
  "components/forms/InputGroup.jsx": "0bd2e8f408f1942386857b64244211049aa9c31636e881ef2e06c5eb5cc60f56",
86
86
  "components/forms/InputOTP.jsx": "fe278664ea6bc07ac293ff28fe2ab6e6d8d2e0fc1cc6ddd3c3e59e68c088dacc",
87
87
  "components/forms/Mentions.jsx": "324a1ef9e7b9adf50454063acffb19ec15adcbcec9ff1f760a15cae56f167f32",
@@ -89,7 +89,7 @@
89
89
  "components/forms/NumberField.jsx": "f2dfbf219d37f79f31a96b70240fc5946a7bb440006c4101356579044d50f350",
90
90
  "components/forms/RadioGroup.jsx": "b72f446770714b8032ebaeaf060418dae4133c882ea1c69412b87c0c6a1823d3",
91
91
  "components/forms/Rating.jsx": "3d545ce0192b31427088bfa3f5d8f29ff49e6eec2e5369cc8e72ef87645abdd3",
92
- "components/forms/SearchField.jsx": "44a861064011a4ebf8cd1224d95b0404c44e4cb8a1685d5981f8009ff8a824de",
92
+ "components/forms/SearchField.jsx": "e48eec5e6f3d65719ea4f72e833d67a6b05d2cc6fb49b53a621d0e832f33838e",
93
93
  "components/forms/SegmentedControl.jsx": "acf7e576e1680065c505039b2599f0a8f1b49584d112efa3f4dc892f4cb5cd93",
94
94
  "components/forms/Select.jsx": "a87c83c2783177fdaa135bb576e772b2c10fd8517d574622d8b15ceb611452b1",
95
95
  "components/forms/Slider.jsx": "409856d4cdba4dff50810000c4b00350d65c801ec7f54a6dd74eef14dd01ca05",
@@ -99,7 +99,7 @@
99
99
  "components/forms/TimePicker.jsx": "0537c564b214b46fd3ddaa44caefc05b7accb1873987ade73b69c18d2456718e",
100
100
  "components/forms/Toggle.jsx": "0527c953307239cbd54847c3516833f53069540bd5a9ef3135792f4638c65006",
101
101
  "components/forms/Transfer.jsx": "2a1c824ff9a0bf3afa0c4b617832c4316322a3a1885ceb5b2dbf3a67b8ce05f4",
102
- "components/forms/TreeSelect.jsx": "3d5d1ef69f6e24a4322ed1bf52c47c3430eaad1ab3fe5ac51b5b40ec5a09044f",
102
+ "components/forms/TreeSelect.jsx": "ab5bc70e1cb1ab10df72a39456e4f4ac88e7907c25cd1dde8ded1d9c5c8b31e3",
103
103
  "components/forms/editor-parser.js": "1306c442e12da6f336af52a813a94b2c91214b84db66127f9e79c3e3b1da7d98",
104
104
  "components/forms/editor-schema.js": "a996ec9b4b885c2d6b0e15b85d930d8a1270ba395c69b0238bd352986dfb2077",
105
105
  "components/i18n/LocaleProvider.jsx": "5545f338df720c75bb9cf6c421edd17d491411c60e0d6727189d184740074e96",
@@ -130,7 +130,7 @@
130
130
  "components/overlays/Popover.jsx": "1ca5d2905995cc8166566625208a95e8838815d3abe1298312df71eab90b2679",
131
131
  "components/overlays/Tour.jsx": "74775e9b0740f093f18283fdab036facbf8ac1370051c950807cae197b192010",
132
132
  "components/textfield/TextField.jsx": "878810214bb342d85d933884b5b19984b57f7281e4560c18280b8f4c021c5f99",
133
- "tokens/tokens.js": "c02046a356d7c06e206c75cbb59aac75a88b637d22de7b57d3df518f7a4dc04c"
133
+ "tokens/tokens.js": "64b2efb49a185cb2f77b191074e24af93720a5f910dd92f41ce86fa39f69648b"
134
134
  },
135
135
  "entryPoints": [
136
136
  {
@@ -577,7 +577,7 @@
577
577
  "outputs": {
578
578
  "_esm/react.mjs": {
579
579
  "bytes": 8726,
580
- "sha256": "c1a2a537cc37b783bb325980d05a104a0ef9480d1c9810952cb0a29fa299d627"
580
+ "sha256": "32acd1df230f8a9dbcef4cec3057aa194f37f72f4a994cdc1e3c52b9752957ee"
581
581
  },
582
582
  "_esm/react.mjs.map": {
583
583
  "bytes": 93,
@@ -623,6 +623,14 @@
623
623
  "bytes": 32853,
624
624
  "sha256": "9188920ea5803cb8038de34a527a758a8e5a4bb9cbb627f71d1804ae9a5532d0"
625
625
  },
626
+ "chunks/chunk-4D7SFITE.mjs": {
627
+ "bytes": 3332,
628
+ "sha256": "d7516f71f8a8c45f1b9bed5e8828dfa0b7586644f7b1a3d5e81f2174ca230a29"
629
+ },
630
+ "chunks/chunk-4D7SFITE.mjs.map": {
631
+ "bytes": 5295,
632
+ "sha256": "49fc269264114c32fe077fd5c415dda7a055bd122b18a8a8c36a569711db8355"
633
+ },
626
634
  "chunks/chunk-4FGB6VHN.mjs": {
627
635
  "bytes": 3914,
628
636
  "sha256": "f56934e30ea575af6034820925a0600eb47e210ab01c315100dbaa670ecbd619"
@@ -679,14 +687,6 @@
679
687
  "bytes": 3149,
680
688
  "sha256": "10193168ce57c008fc89657fdce22e83a1538d91d5c60ee85160f8dd55c8a660"
681
689
  },
682
- "chunks/chunk-5FQGNCKS.mjs": {
683
- "bytes": 2350,
684
- "sha256": "be7ca6254c17d55c5500c50f803c4111d84c63451e9d7690a7864a42a2e0d657"
685
- },
686
- "chunks/chunk-5FQGNCKS.mjs.map": {
687
- "bytes": 3652,
688
- "sha256": "27b5ffafd79dc49c4f78995e11a018cc35ed1e9d6cd88b5fd327ae9d9e0616ac"
689
- },
690
690
  "chunks/chunk-5LXHLKXS.mjs": {
691
691
  "bytes": 164,
692
692
  "sha256": "5c143a7193b2cc03fe5b7e447dfd6dbaec51181bae2a67a93e2193172b4eab98"
@@ -791,6 +791,14 @@
791
791
  "bytes": 2147,
792
792
  "sha256": "a6bcdd1aafcfba11374ebb19a34d61c0e74c8fe57a21696b61d6566cffa384f7"
793
793
  },
794
+ "chunks/chunk-B5V7HN5G.mjs": {
795
+ "bytes": 4494,
796
+ "sha256": "e31bddf6204a4d5ca27c4a388e3df370a1675e65f677f260802e583c13550291"
797
+ },
798
+ "chunks/chunk-B5V7HN5G.mjs.map": {
799
+ "bytes": 7163,
800
+ "sha256": "2782ad03eb04ec04c66e944ad5981a75ce78f99b83fa2f0bdd6c370cc776ed6b"
801
+ },
794
802
  "chunks/chunk-BQH4YUGI.mjs": {
795
803
  "bytes": 1263,
796
804
  "sha256": "73e3b723ed580dd2b87d4e93df1167e51858b58c4581759d9f42f4aaa06dbeb5"
@@ -831,14 +839,6 @@
831
839
  "bytes": 8970,
832
840
  "sha256": "e020298bd001fe058c0fc35e5fad67f2cbf643af9f429bc087fc3b5d7ad011e0"
833
841
  },
834
- "chunks/chunk-D7A4ZCMJ.mjs": {
835
- "bytes": 7925,
836
- "sha256": "b3f884f293e883b212371a5afc0c11f07a972e4d34d7233b6a23b8271bff0d94"
837
- },
838
- "chunks/chunk-D7A4ZCMJ.mjs.map": {
839
- "bytes": 13817,
840
- "sha256": "d0fc8babb88add98385ac1de0c2584ee7b3cdc292686393ad64a79577235949d"
841
- },
842
842
  "chunks/chunk-DANUZS4S.mjs": {
843
843
  "bytes": 879,
844
844
  "sha256": "62149ae7e72f1e8da7792beaabd8b61ef2e510a08d1ac39dcba8dbba1bb49518"
@@ -927,14 +927,6 @@
927
927
  "bytes": 4447,
928
928
  "sha256": "e335b1cd3413bbaf0bee8791ea3ea19003c70e8a1d51f16960ab1e3609916272"
929
929
  },
930
- "chunks/chunk-FF5D53IP.mjs": {
931
- "bytes": 5099,
932
- "sha256": "98a2ab1e83ef88176f474ce5612fd3f8597cec8bbea5c9e3b4cf3761a491eb48"
933
- },
934
- "chunks/chunk-FF5D53IP.mjs.map": {
935
- "bytes": 7989,
936
- "sha256": "673aa446e69ce535d052fe7559bd6579dcb5f5e28c0866aa2f05907f14bb6b58"
937
- },
938
930
  "chunks/chunk-FOEJO2YQ.mjs": {
939
931
  "bytes": 1813,
940
932
  "sha256": "7ea420da0711619103c0d6d045a0e6107abd3acf6ed0ba02f95358993ba3dc12"
@@ -975,14 +967,6 @@
975
967
  "bytes": 2374,
976
968
  "sha256": "de3c5ed1c95053ab68bc8878f7bdf21400b130f10625afcbddd2a65ace79d6eb"
977
969
  },
978
- "chunks/chunk-GLPQBE2J.mjs": {
979
- "bytes": 2983,
980
- "sha256": "8ec3f0be476641d8aec020f7faae4b301f280b6647ec2e5caa2d095edc84e1bd"
981
- },
982
- "chunks/chunk-GLPQBE2J.mjs.map": {
983
- "bytes": 4610,
984
- "sha256": "f5e378a9c7ec12bf48cc33b3cf305dedff64c525d0b76ca85dc31da7fb7f9771"
985
- },
986
970
  "chunks/chunk-GLYNGK5V.mjs": {
987
971
  "bytes": 817,
988
972
  "sha256": "46258613967da2f285724391292a5682f10d720e0ab69e0a981ec0473da05c2d"
@@ -1151,6 +1135,14 @@
1151
1135
  "bytes": 4345,
1152
1136
  "sha256": "8699cfc11c044330af7d40f1905257bfb9f99f39dd78701a66dc274f317ab509"
1153
1137
  },
1138
+ "chunks/chunk-LU45KTWU.mjs": {
1139
+ "bytes": 2400,
1140
+ "sha256": "c045a51d970db5cabdfbfcc7998d7b37638da81b2750257c20e0ea638a75c402"
1141
+ },
1142
+ "chunks/chunk-LU45KTWU.mjs.map": {
1143
+ "bytes": 3735,
1144
+ "sha256": "420f8ab5114df3e05728e0265d3330db07a42483da70135947c4f47974a175e6"
1145
+ },
1154
1146
  "chunks/chunk-LWRFPVX7.mjs": {
1155
1147
  "bytes": 3243,
1156
1148
  "sha256": "e582814569e9684d3c737638db867ba912aea4bad5d016c42cdf1855fa81ff61"
@@ -1159,14 +1151,6 @@
1159
1151
  "bytes": 4850,
1160
1152
  "sha256": "ded2efa9327bb4c92ef9ca9c43279f6ccbb282f106e2d72a5efd7096a78cee33"
1161
1153
  },
1162
- "chunks/chunk-MRXEJSQQ.mjs": {
1163
- "bytes": 4434,
1164
- "sha256": "c539e27418987264d50ae3a2ffab3fe95899637c26ba894f380c91ad90d31a84"
1165
- },
1166
- "chunks/chunk-MRXEJSQQ.mjs.map": {
1167
- "bytes": 7065,
1168
- "sha256": "7b23e002440dee4276762528afcbd39692cc3afa76ab3d4b3489ad7bf19d9d3b"
1169
- },
1170
1154
  "chunks/chunk-NMGUDQDO.mjs": {
1171
1155
  "bytes": 2088,
1172
1156
  "sha256": "15a8ab709d212776a1646086f093123ad54a3a88b821eb2fb7124e1375fffe6c"
@@ -1295,6 +1279,14 @@
1295
1279
  "bytes": 13088,
1296
1280
  "sha256": "9900e94f603f432aeb671e3501b6f8d416736da53ade85c773f789631262c37c"
1297
1281
  },
1282
+ "chunks/chunk-RUB6XN27.mjs": {
1283
+ "bytes": 7985,
1284
+ "sha256": "b2acf3ccb3ff55310b573d24dbbcd94c9f71ab43ba5badfef34f1dbd1ae5bfb8"
1285
+ },
1286
+ "chunks/chunk-RUB6XN27.mjs.map": {
1287
+ "bytes": 13915,
1288
+ "sha256": "cf8d384b05832212717e9153a7e39cca8914dbfa0383d36c9ae5c717bd93f645"
1289
+ },
1298
1290
  "chunks/chunk-S6QTSKMF.mjs": {
1299
1291
  "bytes": 896,
1300
1292
  "sha256": "762757635dc4d4188e31fd49fc9025e1792bb7dd09ba130d355d5c4efe8a879e"
@@ -1303,6 +1295,14 @@
1303
1295
  "bytes": 1506,
1304
1296
  "sha256": "e47d5b83e3d7e8b06e89bd9802f2c6ed4c729df6376909eacf2a202e55938096"
1305
1297
  },
1298
+ "chunks/chunk-SA7L22XE.mjs": {
1299
+ "bytes": 5159,
1300
+ "sha256": "648227a6c20e627d4c3fecfd0b2377c9a6e7fd5d86ca575fb7f2f1b937757c13"
1301
+ },
1302
+ "chunks/chunk-SA7L22XE.mjs.map": {
1303
+ "bytes": 8087,
1304
+ "sha256": "4b98034fa44673d56d9afd86fcc99b501fa1f90854fe173b26f7d49a5636e5c1"
1305
+ },
1306
1306
  "chunks/chunk-SIMVM4RV.mjs": {
1307
1307
  "bytes": 2641,
1308
1308
  "sha256": "37b3dc5d7c06ccfd5577002c369a2eb8c765f213a0fb8ca3a7730c128b964138"
@@ -1953,7 +1953,7 @@
1953
1953
  },
1954
1954
  "components/forms/Cascader.mjs": {
1955
1955
  "bytes": 431,
1956
- "sha256": "b3e73e03576fbafdb66ccf87eda52db0a7e0b6a29793c517f067ae106aa422b1"
1956
+ "sha256": "6d26afc78b59b43a39806ffb7f3f09a7cf597f7a5ff335622d63868100b4ee09"
1957
1957
  },
1958
1958
  "components/forms/Cascader.mjs.map": {
1959
1959
  "bytes": 93,
@@ -1969,7 +1969,7 @@
1969
1969
  },
1970
1970
  "components/forms/ColorPicker.mjs": {
1971
1971
  "bytes": 440,
1972
- "sha256": "f9247b2cd7ebd945aa54f8cc007a6903a65b52903198b2ba98a246705cf8b7c6"
1972
+ "sha256": "9d75e10562410885914a814674b6e5f5ca5148b8327cebc2422e0025c27f414b"
1973
1973
  },
1974
1974
  "components/forms/ColorPicker.mjs.map": {
1975
1975
  "bytes": 93,
@@ -2025,7 +2025,7 @@
2025
2025
  },
2026
2026
  "components/forms/InlineEdit.mjs": {
2027
2027
  "bytes": 395,
2028
- "sha256": "66065da3ae4352ac840935314c3fc31a33c4ea589c3be5da76afe2594a10bdb3"
2028
+ "sha256": "fbf1107ed8d6d7b8a261442c784a8cc51fdfa9619ff770b455e801b8d06bfb6d"
2029
2029
  },
2030
2030
  "components/forms/InlineEdit.mjs.map": {
2031
2031
  "bytes": 93,
@@ -2089,7 +2089,7 @@
2089
2089
  },
2090
2090
  "components/forms/SearchField.mjs": {
2091
2091
  "bytes": 314,
2092
- "sha256": "0bf49443e57ca2351b7e00b7ab5ae29a5af460119311cadcbfb5e684a1f6b395"
2092
+ "sha256": "92b7b2662f72f38df1d59c04a9eb2fb232d1050bd8b7714f9a1125405a843c7d"
2093
2093
  },
2094
2094
  "components/forms/SearchField.mjs.map": {
2095
2095
  "bytes": 93,
@@ -2169,7 +2169,7 @@
2169
2169
  },
2170
2170
  "components/forms/TreeSelect.mjs": {
2171
2171
  "bytes": 479,
2172
- "sha256": "7cb08ed889e3b34bdb6f7859a0fcdd83af6fce72dce69863467332c5e8269554"
2172
+ "sha256": "58d62a732b186c9b1738898eb4ff36d6ce7099dda2e580f791fad7748bf2b247"
2173
2173
  },
2174
2174
  "components/forms/TreeSelect.mjs.map": {
2175
2175
  "bytes": 93,
@@ -7,6 +7,9 @@ import {
7
7
  makeT,
8
8
  useLang
9
9
  } from "./chunk-JZYRXWPD.mjs";
10
+ import {
11
+ useClientLayoutEffect
12
+ } from "./chunk-CQQ2JOJD.mjs";
10
13
  import {
11
14
  mergeTargetProps
12
15
  } from "./chunk-RQFCRXMQ.mjs";
@@ -27,6 +30,7 @@ var InlineEdit = React.forwardRef(function InlineEdit2({ controlRef, value, defa
27
30
  const [edit, setEdit] = React.useState(false);
28
31
  const [draft, setDraft] = React.useState(val);
29
32
  const cancellingRef = React.useRef(false);
33
+ const restoreFocusRef = React.useRef(false);
30
34
  const commit = () => {
31
35
  if (cancellingRef.current) {
32
36
  cancellingRef.current = false;
@@ -40,12 +44,18 @@ var InlineEdit = React.forwardRef(function InlineEdit2({ controlRef, value, defa
40
44
  };
41
45
  const [ref, L, localeMessages] = useLang(lang);
42
46
  const mergedNativeRef = useComposedRefs(ref, forwardedRef);
47
+ useClientLayoutEffect(() => {
48
+ if (!edit && restoreFocusRef.current) {
49
+ restoreFocusRef.current = false;
50
+ ref.current?.querySelector("button")?.focus();
51
+ }
52
+ }, [edit]);
43
53
  const t = makeT("InlineEdit", L, localeMessages);
44
54
  const { scope } = useOverlayLayer({ open: edit, kind: "popover", panelRef: ref, restoreFocus: false, onEscape: () => {
45
55
  cancellingRef.current = true;
56
+ restoreFocusRef.current = true;
46
57
  setDraft(val);
47
58
  setEdit(false);
48
- requestAnimationFrame(() => ref.current?.querySelector("button")?.focus());
49
59
  } });
50
60
  return /* @__PURE__ */ React.createElement(overlayScopeContext.Provider, { value: scope }, /* @__PURE__ */ React.createElement("span", { ref: mergedNativeRef, ...mergeTargetProps({ "className": cx("cs-inline-edit", className) }, rootProps, []) }, edit ? /* @__PURE__ */ React.createElement(
51
61
  "input",
@@ -56,7 +66,11 @@ var InlineEdit = React.forwardRef(function InlineEdit2({ controlRef, value, defa
56
66
  onChange: (e) => setDraft(e.target.value),
57
67
  onBlur: commit,
58
68
  onKeyDown: (e) => {
59
- if (!e.nativeEvent.isComposing && e.keyCode !== 229 && e.key === "Enter") commit();
69
+ if (!e.nativeEvent.isComposing && e.keyCode !== 229 && e.key === "Enter") {
70
+ e.preventDefault();
71
+ restoreFocusRef.current = true;
72
+ commit();
73
+ }
60
74
  },
61
75
  ref: mergedControlRef
62
76
  }
@@ -71,4 +85,4 @@ InlineEdit.displayName = "InlineEdit";
71
85
  export {
72
86
  InlineEdit
73
87
  };
74
- //# sourceMappingURL=chunk-GLPQBE2J.mjs.map
88
+ //# sourceMappingURL=chunk-4D7SFITE.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../components/forms/InlineEdit.jsx"],
4
+ "sourcesContent": ["import { useComposedRefs } from \"../_utils/refs.js\";\nimport { mergeTargetProps } from \"../_utils/field-association.js\";\nimport React from \"react\";\nimport { makeT, useLang } from \"../_i18n/i18n.js\";\nimport { useOverlayLayer, overlayScopeContext } from \"../overlays/OverlayManager.jsx\";\nimport { cx } from \"../_utils/cx.js\";\nimport { useClientLayoutEffect } from \"../_utils/use-client-layout-effect.js\";\nconst PEN = <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.9\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 20l4.5-.9L20 7.6a2 2 0 0 0-2.8-2.8L5.7 16.3 4 20z\" /></svg>;\n\n/** CyberSkill InlineEdit — click-to-edit text. Enter/blur commits, Escape cancels. */\nexport const InlineEdit = React.forwardRef(function InlineEdit({ controlRef, value, defaultValue = \"\", onChange, label, lang, className , rootProps }, forwardedRef) {\n const mergedControlRef = useComposedRefs(controlRef);\n const [inner, setInner] = React.useState(defaultValue);\n const val = value != null ? value : inner;\n const [edit, setEdit] = React.useState(false);\n const [draft, setDraft] = React.useState(val);\n const cancellingRef = React.useRef(false);\n const restoreFocusRef = React.useRef(false);\n const commit = () => {\n if (cancellingRef.current) { cancellingRef.current = false; return; }\n setEdit(false);\n if (draft !== val) { if (value == null) setInner(draft); onChange && onChange(draft); }\n };\n const [ref, L, localeMessages] = useLang(lang);\n const mergedNativeRef = useComposedRefs(ref, forwardedRef);\n // Keyboard completion removes the input. Restore its replacement in the same\n // commit; blur completion must leave focus on the user's next target.\n useClientLayoutEffect(() => {\n if (!edit && restoreFocusRef.current) {\n restoreFocusRef.current = false;\n ref.current?.querySelector(\"button\")?.focus();\n }\n }, [edit]);\n const t = makeT(\"InlineEdit\", L, localeMessages);\n const { scope } = useOverlayLayer({ open: edit, kind: \"popover\", panelRef: ref, restoreFocus: false, onEscape: () => {\n cancellingRef.current = true;\n restoreFocusRef.current = true;\n setDraft(val); setEdit(false);\n } });\n return (\n <overlayScopeContext.Provider value={scope}>\n <span ref={mergedNativeRef} {...mergeTargetProps({ \"className\": cx(\"cs-inline-edit\", className) }, rootProps, [])}>\n {edit ? (\n <input autoFocus value={draft} aria-label={label || t(\"edit\")} onChange={(e) => setDraft(e.target.value)} onBlur={commit}\n onKeyDown={(e) => { if (!e.nativeEvent.isComposing && e.keyCode !== 229 && e.key === \"Enter\") { e.preventDefault(); restoreFocusRef.current = true; commit(); } }} ref={mergedControlRef} />\n ) : (\n <button type=\"button\" className=\"cs-inline-edit__view\" aria-label={t(\"edit\") + (label ? \": \" + label : \"\")} onClick={() => { cancellingRef.current = false; setDraft(val); setEdit(true); }}>\n <span className={val ? undefined : \"ph\"}>{val || t(\"empty\")}</span>{PEN}\n </button>\n )}\n </span>\n </overlayScopeContext.Provider>\n );\n});\nInlineEdit.displayName = \"InlineEdit\";\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAEA,OAAO,WAAW;AAKlB,IAAM,MAAM,oCAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,eAAY,UAAO,oCAAC,UAAK,GAAE,wDAAuD,CAAE;AAG1O,IAAM,aAAa,MAAM,WAAW,SAASA,YAAW,EAAE,YAAY,OAAO,eAAe,IAAI,UAAU,OAAO,MAAM,WAAY,UAAU,GAAG,cAAc;AACnK,QAAM,mBAAmB,gBAAgB,UAAU;AACnD,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,YAAY;AACrD,QAAM,MAAM,SAAS,OAAO,QAAQ;AACpC,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,GAAG;AAC5C,QAAM,gBAAgB,MAAM,OAAO,KAAK;AACxC,QAAM,kBAAkB,MAAM,OAAO,KAAK;AAC1C,QAAM,SAAS,MAAM;AACnB,QAAI,cAAc,SAAS;AAAE,oBAAc,UAAU;AAAO;AAAA,IAAQ;AACpE,YAAQ,KAAK;AACb,QAAI,UAAU,KAAK;AAAE,UAAI,SAAS,KAAM,UAAS,KAAK;AAAG,kBAAY,SAAS,KAAK;AAAA,IAAG;AAAA,EACxF;AACA,QAAM,CAAC,KAAK,GAAG,cAAc,IAAI,QAAQ,IAAI;AAC7C,QAAM,kBAAkB,gBAAgB,KAAK,YAAY;AAGzD,wBAAsB,MAAM;AAC1B,QAAI,CAAC,QAAQ,gBAAgB,SAAS;AACpC,sBAAgB,UAAU;AAC1B,UAAI,SAAS,cAAc,QAAQ,GAAG,MAAM;AAAA,IAC9C;AAAA,EACF,GAAG,CAAC,IAAI,CAAC;AACT,QAAM,IAAI,MAAM,cAAc,GAAG,cAAc;AAC/C,QAAM,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,MAAM,MAAM,WAAW,UAAU,KAAK,cAAc,OAAO,UAAU,MAAM;AACnH,kBAAc,UAAU;AACxB,oBAAgB,UAAU;AAC1B,aAAS,GAAG;AAAG,YAAQ,KAAK;AAAA,EAC9B,EAAE,CAAC;AACH,SACE,oCAAC,oBAAoB,UAApB,EAA6B,OAAO,SACrC,oCAAC,UAAK,KAAK,iBAAkB,GAAG,iBAAiB,EAAE,aAAa,GAAG,kBAAkB,SAAS,EAAE,GAAG,WAAW,CAAC,CAAC,KAC7G,OACC;AAAA,IAAC;AAAA;AAAA,MAAM,WAAS;AAAA,MAAC,OAAO;AAAA,MAAO,cAAY,SAAS,EAAE,MAAM;AAAA,MAAG,UAAU,CAAC,MAAM,SAAS,EAAE,OAAO,KAAK;AAAA,MAAG,QAAQ;AAAA,MAChH,WAAW,CAAC,MAAM;AAAE,YAAI,CAAC,EAAE,YAAY,eAAe,EAAE,YAAY,OAAO,EAAE,QAAQ,SAAS;AAAE,YAAE,eAAe;AAAG,0BAAgB,UAAU;AAAM,iBAAO;AAAA,QAAG;AAAA,MAAE;AAAA,MAAI,KAAK;AAAA;AAAA,EAAkB,IAE7L,oCAAC,YAAO,MAAK,UAAS,WAAU,wBAAuB,cAAY,EAAE,MAAM,KAAK,QAAQ,OAAO,QAAQ,KAAK,SAAS,MAAM;AAAE,kBAAc,UAAU;AAAO,aAAS,GAAG;AAAG,YAAQ,IAAI;AAAA,EAAG,KACxL,oCAAC,UAAK,WAAW,MAAM,SAAY,QAAO,OAAO,EAAE,OAAO,CAAE,GAAQ,GACtE,CAEJ,CACA;AAEJ,CAAC;AACD,WAAW,cAAc;",
6
+ "names": ["InlineEdit"]
7
+ }
@@ -72,7 +72,10 @@ var TreeSelect = React.forwardRef(function TreeSelect2({ portal = true, placemen
72
72
  document.removeEventListener("mousedown", d);
73
73
  };
74
74
  }, [open]);
75
- return /* @__PURE__ */ React.createElement(overlayScopeContext.Provider, { value: scope }, /* @__PURE__ */ React.createElement("div", { ref: mergedNativeRef, ...mergeTargetProps({ className: cx("cs-treeselect", className) }, rootProps) }, /* @__PURE__ */ React.createElement("button", { ...mergeTargetProps({ ...control, type: "button", className: "cs-treeselect__field", disabled, "aria-haspopup": "tree", "aria-expanded": open, onClick: () => setOpen((o) => !o) }, controlProps, ["id", "role", "type", "name", "value", "defaultValue", "disabled", "required", "aria-required", "aria-label", "aria-labelledby", "aria-describedby", "aria-invalid", "aria-haspopup", "aria-expanded", "aria-controls", "aria-activedescendant"]), ref: mergedControlRef }, /* @__PURE__ */ React.createElement("span", { className: sel ? void 0 : "ph" }, sel ? sel.label : ph), /* @__PURE__ */ React.createElement("span", { "aria-hidden": "true" }, "▾")), open ? floating.render(/* @__PURE__ */ React.createElement("div", { ref: floatingRef, className: "cs-treeselect__pop" }, /* @__PURE__ */ React.createElement(Tree, { "aria-label": control["aria-label"] || (control["aria-labelledby"] ? void 0 : ph), "aria-labelledby": control["aria-labelledby"], nodes, selected: value, defaultOpen: true, lang: L, onSelect: (k, n) => {
75
+ return /* @__PURE__ */ React.createElement(overlayScopeContext.Provider, { value: scope }, /* @__PURE__ */ React.createElement("div", { ref: mergedNativeRef, ...mergeTargetProps({ className: cx("cs-treeselect", className) }, rootProps) }, /* @__PURE__ */ React.createElement("button", { ...mergeTargetProps({ ...control, type: "button", className: "cs-treeselect__field", disabled, "aria-haspopup": "tree", "aria-expanded": open, onClick: (event) => {
76
+ if (!open) event.currentTarget.focus();
77
+ setOpen((o) => !o);
78
+ } }, controlProps, ["id", "role", "type", "name", "value", "defaultValue", "disabled", "required", "aria-required", "aria-label", "aria-labelledby", "aria-describedby", "aria-invalid", "aria-haspopup", "aria-expanded", "aria-controls", "aria-activedescendant"]), ref: mergedControlRef }, /* @__PURE__ */ React.createElement("span", { className: sel ? void 0 : "ph" }, sel ? sel.label : ph), /* @__PURE__ */ React.createElement("span", { "aria-hidden": "true" }, "▾")), open ? floating.render(/* @__PURE__ */ React.createElement("div", { ref: floatingRef, className: "cs-treeselect__pop" }, /* @__PURE__ */ React.createElement(Tree, { "aria-label": control["aria-label"] || (control["aria-labelledby"] ? void 0 : ph), "aria-labelledby": control["aria-labelledby"], nodes, selected: value, defaultOpen: true, lang: L, onSelect: (k, n) => {
76
79
  if (!(n.children && n.children.length)) {
77
80
  onChange && onChange(k, n);
78
81
  setOpen(false);
@@ -84,4 +87,4 @@ TreeSelect.displayName = "TreeSelect";
84
87
  export {
85
88
  TreeSelect
86
89
  };
87
- //# sourceMappingURL=chunk-MRXEJSQQ.mjs.map
90
+ //# sourceMappingURL=chunk-B5V7HN5G.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../components/forms/TreeSelect.jsx"],
4
- "sourcesContent": ["import { useFloatingPanel } from \"../_utils/floating-panel.js\";\nimport { useComposedRefs } from \"../_utils/refs.js\";\nimport React from \"react\";\nimport { useFieldAssociation, mergeTargetProps, fieldMessages } from \"../_utils/field-association.js\";\n\nimport { makeT, useLang } from \"../_i18n/i18n.js\";\nimport { Tree } from \"../data/Tree.jsx\";\nimport { useOverlayLayer, overlayScopeContext } from \"../overlays/OverlayManager.jsx\";\nimport { cx } from \"../_utils/cx.js\";\n\n/** CyberSkill TreeSelect — field opening a Tree; picking a node sets the value. */\nexport const TreeSelect = React.forwardRef(function TreeSelect({ portal = true, placement, controlRef, nodes = [], value, onChange, placeholder, label, \"aria-labelledby\": ariaLabelledBy, disabled = false, lang, className, id, description, error, required = false, rootProps, controlProps }, forwardedRef) {\n const floatingRef = React.useRef(null);\n const mergedControlRef = useComposedRefs(controlRef);\n const [requestedOpen, setOpen] = React.useState(false);\n // Disable the mounted surface immediately and discard its previous open state.\n const open = requestedOpen && !disabled;\n React.useEffect(() => { if (disabled) setOpen(false); }, [disabled]);\n const wrap = React.useRef(null);\n const [ref, L, localeMessages] = useLang(lang);\n const mergedNativeRef = useComposedRefs(wrap, ref, forwardedRef);\n const t = makeT(\"TreeSelect\", L, localeMessages);\n const ph = placeholder != null ? placeholder : t(\"placeholder\");\n const requiredDescription = required ? makeT(\"Form\", L, localeMessages)(\"required\") : undefined;\n const control = useFieldAssociation({ id: controlProps?.id ?? id,\n \"aria-label\": controlProps?.[\"aria-label\"] ?? (controlProps?.[\"aria-labelledby\"] || ariaLabelledBy ? undefined : label),\n \"aria-labelledby\": controlProps?.[\"aria-labelledby\"] ?? ariaLabelledBy,\n \"aria-describedby\": controlProps?.[\"aria-describedby\"], \"aria-invalid\": controlProps?.[\"aria-invalid\"] },\n { fallbackLabel: label, description, error, requiredDescription });\n const find = (ns) => { for (const n of ns) { if (n.key === value) return n; const c = n.children && find(n.children); if (c) return c; } return null; };\n const sel = find(nodes);\n const floating = useFloatingPanel({ open: open, anchorRef: wrap, panelRef: floatingRef, portal, placement: placement ?? \"bottom-start\", gap: 6, getAnchor: ()=>wrap.current?.querySelector(\":scope > button\"), lang });\n const { scope } = useOverlayLayer({ open: (open) && floating.ready, kind: \"popover\", panelRef: floatingRef, surfaceKey: floating.surfaceKey, onEscape: () => setOpen(false) });\n React.useEffect(() => {\n if (!open) return;\n const d = (e) => { if (!floating.contains(e.target)) setOpen(false); };\n document.addEventListener(\"mousedown\", d);\n return () => { document.removeEventListener(\"mousedown\", d); };\n }, [open]);\n return (\n <overlayScopeContext.Provider value={scope}>\n <div ref={mergedNativeRef} {...mergeTargetProps({ className: cx(\"cs-treeselect\", className) }, rootProps)}>\n <button {...mergeTargetProps({ ...control, type: \"button\", className: \"cs-treeselect__field\", disabled, \"aria-haspopup\": \"tree\", \"aria-expanded\": open, onClick: () => setOpen(o => !o) }, controlProps, [\"id\", \"role\", \"type\", \"name\", \"value\", \"defaultValue\", \"disabled\", \"required\", \"aria-required\", \"aria-label\", \"aria-labelledby\", \"aria-describedby\", \"aria-invalid\", \"aria-haspopup\", \"aria-expanded\", \"aria-controls\", \"aria-activedescendant\"])} ref={mergedControlRef} >\n <span className={sel ? undefined : \"ph\"}>{sel ? sel.label : ph}</span><span aria-hidden=\"true\">▾</span>\n </button>\n {open ? (\n floating.render(<div ref={floatingRef} className=\"cs-treeselect__pop\">\n <Tree aria-label={control[\"aria-label\"] || (control[\"aria-labelledby\"] ? undefined : ph)} aria-labelledby={control[\"aria-labelledby\"]} nodes={nodes} selected={value} defaultOpen lang={L} onSelect={(k, n) => { if (!(n.children && n.children.length)) { onChange && onChange(k, n); setOpen(false); } }} />\n </div>)\n ) : null}\n {fieldMessages(control, description, error, requiredDescription)}\n </div>\n </overlayScopeContext.Provider>\n );\n});\nTreeSelect.displayName = \"TreeSelect\";\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useFloatingPanel } from \"../_utils/floating-panel.js\";\nimport { useComposedRefs } from \"../_utils/refs.js\";\nimport React from \"react\";\nimport { useFieldAssociation, mergeTargetProps, fieldMessages } from \"../_utils/field-association.js\";\n\nimport { makeT, useLang } from \"../_i18n/i18n.js\";\nimport { Tree } from \"../data/Tree.jsx\";\nimport { useOverlayLayer, overlayScopeContext } from \"../overlays/OverlayManager.jsx\";\nimport { cx } from \"../_utils/cx.js\";\n\n/** CyberSkill TreeSelect — field opening a Tree; picking a node sets the value. */\nexport const TreeSelect = React.forwardRef(function TreeSelect({ portal = true, placement, controlRef, nodes = [], value, onChange, placeholder, label, \"aria-labelledby\": ariaLabelledBy, disabled = false, lang, className, id, description, error, required = false, rootProps, controlProps }, forwardedRef) {\n const floatingRef = React.useRef(null);\n const mergedControlRef = useComposedRefs(controlRef);\n const [requestedOpen, setOpen] = React.useState(false);\n // Disable the mounted surface immediately and discard its previous open state.\n const open = requestedOpen && !disabled;\n React.useEffect(() => { if (disabled) setOpen(false); }, [disabled]);\n const wrap = React.useRef(null);\n const [ref, L, localeMessages] = useLang(lang);\n const mergedNativeRef = useComposedRefs(wrap, ref, forwardedRef);\n const t = makeT(\"TreeSelect\", L, localeMessages);\n const ph = placeholder != null ? placeholder : t(\"placeholder\");\n const requiredDescription = required ? makeT(\"Form\", L, localeMessages)(\"required\") : undefined;\n const control = useFieldAssociation({ id: controlProps?.id ?? id,\n \"aria-label\": controlProps?.[\"aria-label\"] ?? (controlProps?.[\"aria-labelledby\"] || ariaLabelledBy ? undefined : label),\n \"aria-labelledby\": controlProps?.[\"aria-labelledby\"] ?? ariaLabelledBy,\n \"aria-describedby\": controlProps?.[\"aria-describedby\"], \"aria-invalid\": controlProps?.[\"aria-invalid\"] },\n { fallbackLabel: label, description, error, requiredDescription });\n const find = (ns) => { for (const n of ns) { if (n.key === value) return n; const c = n.children && find(n.children); if (c) return c; } return null; };\n const sel = find(nodes);\n const floating = useFloatingPanel({ open: open, anchorRef: wrap, panelRef: floatingRef, portal, placement: placement ?? \"bottom-start\", gap: 6, getAnchor: ()=>wrap.current?.querySelector(\":scope > button\"), lang });\n const { scope } = useOverlayLayer({ open: (open) && floating.ready, kind: \"popover\", panelRef: floatingRef, surfaceKey: floating.surfaceKey, onEscape: () => setOpen(false) });\n React.useEffect(() => {\n if (!open) return;\n const d = (e) => { if (!floating.contains(e.target)) setOpen(false); };\n document.addEventListener(\"mousedown\", d);\n return () => { document.removeEventListener(\"mousedown\", d); };\n }, [open]);\n return (\n <overlayScopeContext.Provider value={scope}>\n <div ref={mergedNativeRef} {...mergeTargetProps({ className: cx(\"cs-treeselect\", className) }, rootProps)}>\n <button {...mergeTargetProps({ ...control, type: \"button\", className: \"cs-treeselect__field\", disabled, \"aria-haspopup\": \"tree\", \"aria-expanded\": open, onClick: event => { if (!open) event.currentTarget.focus(); setOpen(o => !o); } }, controlProps, [\"id\", \"role\", \"type\", \"name\", \"value\", \"defaultValue\", \"disabled\", \"required\", \"aria-required\", \"aria-label\", \"aria-labelledby\", \"aria-describedby\", \"aria-invalid\", \"aria-haspopup\", \"aria-expanded\", \"aria-controls\", \"aria-activedescendant\"])} ref={mergedControlRef} >\n <span className={sel ? undefined : \"ph\"}>{sel ? sel.label : ph}</span><span aria-hidden=\"true\">▾</span>\n </button>\n {open ? (\n floating.render(<div ref={floatingRef} className=\"cs-treeselect__pop\">\n <Tree aria-label={control[\"aria-label\"] || (control[\"aria-labelledby\"] ? undefined : ph)} aria-labelledby={control[\"aria-labelledby\"]} nodes={nodes} selected={value} defaultOpen lang={L} onSelect={(k, n) => { if (!(n.children && n.children.length)) { onChange && onChange(k, n); setOpen(false); } }} />\n </div>)\n ) : null}\n {fieldMessages(control, description, error, requiredDescription)}\n </div>\n </overlayScopeContext.Provider>\n );\n});\nTreeSelect.displayName = \"TreeSelect\";\n"],
5
+ "mappings": "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",
6
6
  "names": ["TreeSelect"]
7
7
  }
@@ -28,6 +28,7 @@ var SearchField = React.forwardRef(function SearchField2({ value, defaultValue =
28
28
  if (disabled || readOnly) return;
29
29
  set("");
30
30
  onClear && onClear();
31
+ ref.current?.querySelector("input")?.focus();
31
32
  } }, /* @__PURE__ */ React.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }, /* @__PURE__ */ React.createElement("path", { d: "M6 6l12 12M18 6L6 18" }))) : null);
32
33
  });
33
34
  SearchField.displayName = "SearchField";
@@ -35,4 +36,4 @@ SearchField.displayName = "SearchField";
35
36
  export {
36
37
  SearchField
37
38
  };
38
- //# sourceMappingURL=chunk-5FQGNCKS.mjs.map
39
+ //# sourceMappingURL=chunk-LU45KTWU.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../components/forms/SearchField.jsx"],
4
- "sourcesContent": ["import { useComposedRefs } from \"../_utils/refs.js\";\nimport React from \"react\";\nimport { makeT, useLang } from \"../_i18n/i18n.js\";\nimport { cx } from \"../_utils/cx.js\";\n\n/** CyberSkill SearchField — pill search input with icon + clear. Controlled or uncontrolled. */\n// `children` is destructured but never rendered on purpose: keeps stray children out of {...props} → void <input>.\nexport const SearchField = React.forwardRef(function SearchField({ value, defaultValue = \"\", onChange, onClear, disabled = false, readOnly = false, placeholder, lang, className, children, ...props }, forwardedRef) {\n const mergedNativeRef = useComposedRefs(forwardedRef);\n const [inner, setInner] = React.useState(() => defaultValue == null ? \"\" : String(defaultValue));\n const val = value != null ? value : inner;\n const set = (v) => { if (disabled || readOnly) return; if (value == null) setInner(v); onChange?.(v); };\n const [ref, L, localeMessages] = useLang(lang);\n const t = makeT(\"SearchField\", L, localeMessages);\n const ph = placeholder != null ? placeholder : t(\"placeholder\");\n return (\n <div ref={ref} className={cx(\"cs-search\", className)}>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\"><circle cx=\"11\" cy=\"11\" r=\"7\" /><path d=\"M21 21l-4.3-4.3\" /></svg>\n <input aria-label={props[\"aria-label\"] || (props[\"aria-labelledby\"] ? undefined : ph)} {...props} type=\"text\" role=\"searchbox\" value={val} disabled={disabled} readOnly={readOnly} placeholder={ph} onChange={(e) => set(e.target.value)} ref={mergedNativeRef} />\n {String(val).length ? (\n <button type=\"button\" className=\"cs-search__clear\" aria-label={t(\"clear\")} disabled={disabled || readOnly} onClick={() => { if (disabled || readOnly) return; set(\"\"); onClear && onClear(); }}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\"><path d=\"M6 6l12 12M18 6L6 18\" /></svg>\n </button>\n ) : null}\n </div>\n );\n});\nSearchField.displayName = \"SearchField\";\n"],
5
- "mappings": ";;;;;;;;;;;;;AACA,OAAO,WAAW;AAMX,IAAM,cAAc,MAAM,WAAW,SAASA,aAAY,EAAE,OAAO,eAAe,IAAI,UAAU,SAAS,WAAW,OAAO,WAAW,OAAO,aAAa,MAAM,WAAW,UAAU,GAAG,MAAM,GAAG,cAAc;AACpN,QAAM,kBAAkB,gBAAgB,YAAY;AACpD,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,MAAM,gBAAgB,OAAO,KAAK,OAAO,YAAY,CAAC;AAC/F,QAAM,MAAM,SAAS,OAAO,QAAQ;AACpC,QAAM,MAAM,CAAC,MAAM;AAAE,QAAI,YAAY,SAAU;AAAQ,QAAI,SAAS,KAAM,UAAS,CAAC;AAAG,eAAW,CAAC;AAAA,EAAG;AACtG,QAAM,CAAC,KAAK,GAAG,cAAc,IAAI,QAAQ,IAAI;AAC7C,QAAM,IAAI,MAAM,eAAe,GAAG,cAAc;AAChD,QAAM,KAAK,eAAe,OAAO,cAAc,EAAE,aAAa;AAC9D,SACE,oCAAC,SAAI,KAAU,WAAW,GAAG,aAAa,SAAS,KACjD,oCAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,eAAY,UAAO,oCAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,GAAE,oCAAC,UAAK,GAAE,mBAAkB,CAAE,GAC9N,oCAAC,WAAM,cAAY,MAAM,YAAY,MAAM,MAAM,iBAAiB,IAAI,SAAY,KAAM,GAAG,OAAO,MAAK,QAAO,MAAK,aAAY,OAAO,KAAK,UAAoB,UAAoB,aAAa,IAAI,UAAU,CAAC,MAAM,IAAI,EAAE,OAAO,KAAK,GAAI,KAAK,iBAAiB,GAChQ,OAAO,GAAG,EAAE,SACX,oCAAC,YAAO,MAAK,UAAS,WAAU,oBAAmB,cAAY,EAAE,OAAO,GAAG,UAAU,YAAY,UAAU,SAAS,MAAM;AAAE,QAAI,YAAY,SAAU;AAAQ,QAAI,EAAE;AAAG,eAAW,QAAQ;AAAA,EAAG,KAC3L,oCAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,WAAQ,oCAAC,UAAK,GAAE,wBAAuB,CAAE,CAC3J,IACE,IACN;AAEJ,CAAC;AACD,YAAY,cAAc;",
4
+ "sourcesContent": ["import { useComposedRefs } from \"../_utils/refs.js\";\nimport React from \"react\";\nimport { makeT, useLang } from \"../_i18n/i18n.js\";\nimport { cx } from \"../_utils/cx.js\";\n\n/** CyberSkill SearchField — pill search input with icon + clear. Controlled or uncontrolled. */\n// `children` is destructured but never rendered on purpose: keeps stray children out of {...props} → void <input>.\nexport const SearchField = React.forwardRef(function SearchField({ value, defaultValue = \"\", onChange, onClear, disabled = false, readOnly = false, placeholder, lang, className, children, ...props }, forwardedRef) {\n const mergedNativeRef = useComposedRefs(forwardedRef);\n const [inner, setInner] = React.useState(() => defaultValue == null ? \"\" : String(defaultValue));\n const val = value != null ? value : inner;\n const set = (v) => { if (disabled || readOnly) return; if (value == null) setInner(v); onChange?.(v); };\n const [ref, L, localeMessages] = useLang(lang);\n const t = makeT(\"SearchField\", L, localeMessages);\n const ph = placeholder != null ? placeholder : t(\"placeholder\");\n return (\n <div ref={ref} className={cx(\"cs-search\", className)}>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\"><circle cx=\"11\" cy=\"11\" r=\"7\" /><path d=\"M21 21l-4.3-4.3\" /></svg>\n <input aria-label={props[\"aria-label\"] || (props[\"aria-labelledby\"] ? undefined : ph)} {...props} type=\"text\" role=\"searchbox\" value={val} disabled={disabled} readOnly={readOnly} placeholder={ph} onChange={(e) => set(e.target.value)} ref={mergedNativeRef} />\n {String(val).length ? (\n <button type=\"button\" className=\"cs-search__clear\" aria-label={t(\"clear\")} disabled={disabled || readOnly} onClick={() => { if (disabled || readOnly) return; set(\"\"); onClear && onClear(); ref.current?.querySelector(\"input\")?.focus(); }}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\"><path d=\"M6 6l12 12M18 6L6 18\" /></svg>\n </button>\n ) : null}\n </div>\n );\n});\nSearchField.displayName = \"SearchField\";\n"],
5
+ "mappings": ";;;;;;;;;;;;;AACA,OAAO,WAAW;AAMX,IAAM,cAAc,MAAM,WAAW,SAASA,aAAY,EAAE,OAAO,eAAe,IAAI,UAAU,SAAS,WAAW,OAAO,WAAW,OAAO,aAAa,MAAM,WAAW,UAAU,GAAG,MAAM,GAAG,cAAc;AACpN,QAAM,kBAAkB,gBAAgB,YAAY;AACpD,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,MAAM,gBAAgB,OAAO,KAAK,OAAO,YAAY,CAAC;AAC/F,QAAM,MAAM,SAAS,OAAO,QAAQ;AACpC,QAAM,MAAM,CAAC,MAAM;AAAE,QAAI,YAAY,SAAU;AAAQ,QAAI,SAAS,KAAM,UAAS,CAAC;AAAG,eAAW,CAAC;AAAA,EAAG;AACtG,QAAM,CAAC,KAAK,GAAG,cAAc,IAAI,QAAQ,IAAI;AAC7C,QAAM,IAAI,MAAM,eAAe,GAAG,cAAc;AAChD,QAAM,KAAK,eAAe,OAAO,cAAc,EAAE,aAAa;AAC9D,SACE,oCAAC,SAAI,KAAU,WAAW,GAAG,aAAa,SAAS,KACjD,oCAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,eAAY,UAAO,oCAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,GAAE,oCAAC,UAAK,GAAE,mBAAkB,CAAE,GAC9N,oCAAC,WAAM,cAAY,MAAM,YAAY,MAAM,MAAM,iBAAiB,IAAI,SAAY,KAAM,GAAG,OAAO,MAAK,QAAO,MAAK,aAAY,OAAO,KAAK,UAAoB,UAAoB,aAAa,IAAI,UAAU,CAAC,MAAM,IAAI,EAAE,OAAO,KAAK,GAAI,KAAK,iBAAiB,GAChQ,OAAO,GAAG,EAAE,SACX,oCAAC,YAAO,MAAK,UAAS,WAAU,oBAAmB,cAAY,EAAE,OAAO,GAAG,UAAU,YAAY,UAAU,SAAS,MAAM;AAAE,QAAI,YAAY,SAAU;AAAQ,QAAI,EAAE;AAAG,eAAW,QAAQ;AAAG,QAAI,SAAS,cAAc,OAAO,GAAG,MAAM;AAAA,EAAG,KACzO,oCAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,WAAQ,oCAAC,UAAK,GAAE,wBAAuB,CAAE,CAC3J,IACE,IACN;AAEJ,CAAC;AACD,YAAY,cAAc;",
6
6
  "names": ["SearchField"]
7
7
  }
@@ -124,7 +124,10 @@ var Cascader = React.forwardRef(function Cascader2({ portal = true, placement, c
124
124
  lv = n.children;
125
125
  }
126
126
  }
127
- return /* @__PURE__ */ React.createElement(overlayScopeContext.Provider, { value: scope }, /* @__PURE__ */ React.createElement("div", { ref: mergedNativeRef, ...mergeTargetProps({ className: cx("cs-cascader", className) }, rootProps) }, /* @__PURE__ */ React.createElement("button", { ...mergeTargetProps({ ...control, type: "button", className: "cs-treeselect__field", disabled, "aria-haspopup": "listbox", "aria-expanded": open, onClick: () => setOpen((o) => !o), onKeyDown: (e) => {
127
+ return /* @__PURE__ */ React.createElement(overlayScopeContext.Provider, { value: scope }, /* @__PURE__ */ React.createElement("div", { ref: mergedNativeRef, ...mergeTargetProps({ className: cx("cs-cascader", className) }, rootProps) }, /* @__PURE__ */ React.createElement("button", { ...mergeTargetProps({ ...control, type: "button", className: "cs-treeselect__field", disabled, "aria-haspopup": "listbox", "aria-expanded": open, onClick: (event) => {
128
+ if (!open) event.currentTarget.focus();
129
+ setOpen((o) => !o);
130
+ }, onKeyDown: (e) => {
128
131
  if (e.defaultPrevented || e.nativeEvent.isComposing || e.nativeEvent.keyCode === 229) return;
129
132
  if (open && e.key === "ArrowDown") return;
130
133
  if (e.key === "ArrowDown" || e.key === "Enter" || e.key === " ") {
@@ -160,4 +163,4 @@ Cascader.displayName = "Cascader";
160
163
  export {
161
164
  Cascader
162
165
  };
163
- //# sourceMappingURL=chunk-D7A4ZCMJ.mjs.map
166
+ //# sourceMappingURL=chunk-RUB6XN27.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../components/forms/Cascader.jsx"],
4
- "sourcesContent": ["import { useFloatingPanel } from \"../_utils/floating-panel.js\";\nimport { useComposedRefs } from \"../_utils/refs.js\";\nimport React from \"react\";\nimport { useFieldAssociation, mergeTargetProps, fieldMessages } from \"../_utils/field-association.js\";\n\nimport { makeT, useLang } from \"../_i18n/i18n.js\";\nimport { useOverlayLayer, overlayScopeContext } from \"../overlays/OverlayManager.jsx\";\nimport { cx } from \"../_utils/cx.js\";\n\nconst EMPTY_PATH = [];\n\n/** CyberSkill Cascader — column-per-level picker for hierarchies (province → district style). */\nexport const Cascader = React.forwardRef(function Cascader({ portal = true, placement, controlRef, nodes = [], value = EMPTY_PATH, onChange, placeholder, label, \"aria-labelledby\": ariaLabelledBy, disabled = false, lang, className, id, description, error, required = false, rootProps, controlProps }, forwardedRef) {\n const floatingRef = React.useRef(null);\n const mergedControlRef = useComposedRefs(controlRef);\n const [requestedOpen, setOpen] = React.useState(false);\n // Disable the mounted surface immediately and discard its previous open state.\n const open = requestedOpen && !disabled;\n React.useEffect(() => { if (disabled) setOpen(false); }, [disabled]);\n const [path, setPath] = React.useState(value);\n const wrap = React.useRef(null);\n const [ref, L, localeMessages] = useLang(lang);\n const mergedNativeRef = useComposedRefs(wrap, ref, forwardedRef);\n const t = makeT(\"Cascader\", L, localeMessages);\n const ph = placeholder != null ? placeholder : t(\"placeholder\");\n const requiredDescription = required ? makeT(\"Form\", L, localeMessages)(\"required\") : undefined;\n const control = useFieldAssociation({ id: controlProps?.id ?? id,\n \"aria-label\": controlProps?.[\"aria-label\"] ?? (controlProps?.[\"aria-labelledby\"] || ariaLabelledBy ? undefined : label),\n \"aria-labelledby\": controlProps?.[\"aria-labelledby\"] ?? ariaLabelledBy,\n \"aria-describedby\": controlProps?.[\"aria-describedby\"], \"aria-invalid\": controlProps?.[\"aria-invalid\"] },\n { fallbackLabel: label, description, error, requiredDescription });\n // Controlled value must re-sync even when the popover stays closed (FIND-014).\n // Depend on a stable key — default `[]` must not reset path every render.\n const valueKey = Array.isArray(value) ? value.join(\"\\0\") : \"\";\n React.useEffect(() => { setPath(Array.isArray(value) ? value : EMPTY_PATH); }, [valueKey]);\n const floating = useFloatingPanel({ open: open, anchorRef: wrap, panelRef: floatingRef, portal, placement: placement ?? \"bottom-start\", gap: 6, getAnchor: ()=>wrap.current?.querySelector(\":scope > button\"), lang });\n const { manager, scope } = useOverlayLayer({ open: (open) && floating.ready, kind: \"dropdown\", panelRef: floatingRef, surfaceKey: floating.surfaceKey, onEscape: () => setOpen(false) });\n React.useEffect(() => {\n if (!open) return;\n const d = (e) => { if (!floating.contains(e.target)) setOpen(false); };\n const k = (e) => {\n if (manager.topDismissible()?.panelEl !== floatingRef.current) return;\n if (e.defaultPrevented || e.isComposing || e.keyCode === 229) return;\n if (!floating.contains(e.target)) return;\n const opts = [...floatingRef.current.querySelectorAll('[role=\"option\"]')];\n if (!opts.length) return;\n const active = document.activeElement;\n const idx = opts.indexOf(active);\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n (opts[idx < 0 ? 0 : Math.min(opts.length - 1, idx + 1)] || opts[0]).focus();\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n (opts[idx < 0 ? opts.length - 1 : Math.max(0, idx - 1)] || opts[0]).focus();\n } else if (e.key === \"Home\") {\n e.preventDefault();\n opts[0].focus();\n } else if (e.key === \"End\") {\n e.preventDefault();\n opts[opts.length - 1].focus();\n } else if (e.key === \"ArrowRight\" && idx >= 0) {\n // Expand into children by activating the selected option when it has a chevron.\n active.click && active.click();\n } else if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n if (path.length) {\n const columns = [...floatingRef.current.querySelectorAll('[role=\"listbox\"]')];\n const column = active?.closest('[role=\"listbox\"]');\n const depth = columns.indexOf(column);\n const parentDepth = depth > 0 ? depth - 1 : Math.max(0, path.length - 1);\n const parent = columns[parentDepth]?.querySelector('[role=\"option\"][aria-selected=\"true\"]');\n // Move focus before unmounting the child column.\n parent?.focus();\n setPath(path.slice(0, parentDepth));\n } else {\n setOpen(false);\n const field = wrap.current.querySelector(\".cs-treeselect__field\");\n field && field.focus && field.focus();\n }\n }\n };\n document.addEventListener(\"mousedown\", d);\n document.addEventListener(\"keydown\", k);\n return () => {\n document.removeEventListener(\"mousedown\", d);\n document.removeEventListener(\"keydown\", k);\n };\n }, [open, path]);\n const cols = [];\n let level = nodes;\n for (let i = 0; level && level.length; i++) {\n cols.push(level);\n const pick = level.find((n) => n.key === path[i]);\n level = pick && pick.children;\n }\n const labels = [];\n { let lv = nodes; for (const k of value) { const n = (lv || []).find((x) => x.key === k); if (!n) break; labels.push(n.label); lv = n.children; } }\n return (\n <overlayScopeContext.Provider value={scope}>\n <div ref={mergedNativeRef} {...mergeTargetProps({ className: cx(\"cs-cascader\", className) }, rootProps)}>\n <button {...mergeTargetProps({ ...control, type: \"button\", className: \"cs-treeselect__field\", disabled, \"aria-haspopup\": \"listbox\", \"aria-expanded\": open, onClick: () => setOpen(o => !o), onKeyDown: (e) => {\n if (e.defaultPrevented || e.nativeEvent.isComposing || e.nativeEvent.keyCode === 229) return;\n // Once open, the document handler owns arrows from this trigger too.\n if (open && e.key === \"ArrowDown\") return;\n if (e.key === \"ArrowDown\" || e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setOpen(true);\n }\n } }, controlProps, [\"id\", \"role\", \"type\", \"name\", \"value\", \"defaultValue\", \"disabled\", \"required\", \"aria-required\", \"aria-label\", \"aria-labelledby\", \"aria-describedby\", \"aria-invalid\", \"aria-haspopup\", \"aria-expanded\", \"aria-controls\", \"aria-activedescendant\"])} ref={mergedControlRef} >\n <span className={labels.length ? undefined : \"ph\"}>{labels.length ? labels.map((label, index) => <React.Fragment key={index}>{index ? <React.Fragment>{\" \"}<span aria-hidden=\"true\">/</span>{\" \"}</React.Fragment> : null}{label}</React.Fragment>) : ph}</span><span aria-hidden=\"true\">▾</span>\n </button>\n {open ? (\n floating.render(<div ref={floatingRef} className=\"cs-cascader__pop\">\n {cols.map((col, i) => (\n <ul key={i} role=\"listbox\" aria-labelledby={control[\"aria-labelledby\"] || control.id} className=\"cs-cascader__col\">\n {col.map((n) => (\n // role=\"none\" — the <li> wrapper must not sit between listbox and option.\n <li key={n.key} role=\"none\">\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={path[i] === n.key}\n className={cx(\"cs-cascader__opt\", path[i] === n.key && \"on\")}\n // Keep options in the focusable set for arrow models (E3).\n data-cs-focusable=\"\"\n onClick={() => {\n const next = [...path.slice(0, i), n.key];\n setPath(next);\n if (!(n.children && n.children.length)) { onChange && onChange(next); setOpen(false); }\n }}\n >\n {n.label}{n.children && n.children.length ? <span aria-hidden=\"true\"> ›</span> : null}\n </button>\n </li>\n ))}\n </ul>\n ))}\n </div>)\n ) : null}\n {fieldMessages(control, description, error, requiredDescription)}\n </div>\n </overlayScopeContext.Provider>\n );\n});\nCascader.displayName = \"Cascader\";\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useFloatingPanel } from \"../_utils/floating-panel.js\";\nimport { useComposedRefs } from \"../_utils/refs.js\";\nimport React from \"react\";\nimport { useFieldAssociation, mergeTargetProps, fieldMessages } from \"../_utils/field-association.js\";\n\nimport { makeT, useLang } from \"../_i18n/i18n.js\";\nimport { useOverlayLayer, overlayScopeContext } from \"../overlays/OverlayManager.jsx\";\nimport { cx } from \"../_utils/cx.js\";\n\nconst EMPTY_PATH = [];\n\n/** CyberSkill Cascader — column-per-level picker for hierarchies (province → district style). */\nexport const Cascader = React.forwardRef(function Cascader({ portal = true, placement, controlRef, nodes = [], value = EMPTY_PATH, onChange, placeholder, label, \"aria-labelledby\": ariaLabelledBy, disabled = false, lang, className, id, description, error, required = false, rootProps, controlProps }, forwardedRef) {\n const floatingRef = React.useRef(null);\n const mergedControlRef = useComposedRefs(controlRef);\n const [requestedOpen, setOpen] = React.useState(false);\n // Disable the mounted surface immediately and discard its previous open state.\n const open = requestedOpen && !disabled;\n React.useEffect(() => { if (disabled) setOpen(false); }, [disabled]);\n const [path, setPath] = React.useState(value);\n const wrap = React.useRef(null);\n const [ref, L, localeMessages] = useLang(lang);\n const mergedNativeRef = useComposedRefs(wrap, ref, forwardedRef);\n const t = makeT(\"Cascader\", L, localeMessages);\n const ph = placeholder != null ? placeholder : t(\"placeholder\");\n const requiredDescription = required ? makeT(\"Form\", L, localeMessages)(\"required\") : undefined;\n const control = useFieldAssociation({ id: controlProps?.id ?? id,\n \"aria-label\": controlProps?.[\"aria-label\"] ?? (controlProps?.[\"aria-labelledby\"] || ariaLabelledBy ? undefined : label),\n \"aria-labelledby\": controlProps?.[\"aria-labelledby\"] ?? ariaLabelledBy,\n \"aria-describedby\": controlProps?.[\"aria-describedby\"], \"aria-invalid\": controlProps?.[\"aria-invalid\"] },\n { fallbackLabel: label, description, error, requiredDescription });\n // Controlled value must re-sync even when the popover stays closed (FIND-014).\n // Depend on a stable key — default `[]` must not reset path every render.\n const valueKey = Array.isArray(value) ? value.join(\"\\0\") : \"\";\n React.useEffect(() => { setPath(Array.isArray(value) ? value : EMPTY_PATH); }, [valueKey]);\n const floating = useFloatingPanel({ open: open, anchorRef: wrap, panelRef: floatingRef, portal, placement: placement ?? \"bottom-start\", gap: 6, getAnchor: ()=>wrap.current?.querySelector(\":scope > button\"), lang });\n const { manager, scope } = useOverlayLayer({ open: (open) && floating.ready, kind: \"dropdown\", panelRef: floatingRef, surfaceKey: floating.surfaceKey, onEscape: () => setOpen(false) });\n React.useEffect(() => {\n if (!open) return;\n const d = (e) => { if (!floating.contains(e.target)) setOpen(false); };\n const k = (e) => {\n if (manager.topDismissible()?.panelEl !== floatingRef.current) return;\n if (e.defaultPrevented || e.isComposing || e.keyCode === 229) return;\n if (!floating.contains(e.target)) return;\n const opts = [...floatingRef.current.querySelectorAll('[role=\"option\"]')];\n if (!opts.length) return;\n const active = document.activeElement;\n const idx = opts.indexOf(active);\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n (opts[idx < 0 ? 0 : Math.min(opts.length - 1, idx + 1)] || opts[0]).focus();\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n (opts[idx < 0 ? opts.length - 1 : Math.max(0, idx - 1)] || opts[0]).focus();\n } else if (e.key === \"Home\") {\n e.preventDefault();\n opts[0].focus();\n } else if (e.key === \"End\") {\n e.preventDefault();\n opts[opts.length - 1].focus();\n } else if (e.key === \"ArrowRight\" && idx >= 0) {\n // Expand into children by activating the selected option when it has a chevron.\n active.click && active.click();\n } else if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n if (path.length) {\n const columns = [...floatingRef.current.querySelectorAll('[role=\"listbox\"]')];\n const column = active?.closest('[role=\"listbox\"]');\n const depth = columns.indexOf(column);\n const parentDepth = depth > 0 ? depth - 1 : Math.max(0, path.length - 1);\n const parent = columns[parentDepth]?.querySelector('[role=\"option\"][aria-selected=\"true\"]');\n // Move focus before unmounting the child column.\n parent?.focus();\n setPath(path.slice(0, parentDepth));\n } else {\n setOpen(false);\n const field = wrap.current.querySelector(\".cs-treeselect__field\");\n field && field.focus && field.focus();\n }\n }\n };\n document.addEventListener(\"mousedown\", d);\n document.addEventListener(\"keydown\", k);\n return () => {\n document.removeEventListener(\"mousedown\", d);\n document.removeEventListener(\"keydown\", k);\n };\n }, [open, path]);\n const cols = [];\n let level = nodes;\n for (let i = 0; level && level.length; i++) {\n cols.push(level);\n const pick = level.find((n) => n.key === path[i]);\n level = pick && pick.children;\n }\n const labels = [];\n { let lv = nodes; for (const k of value) { const n = (lv || []).find((x) => x.key === k); if (!n) break; labels.push(n.label); lv = n.children; } }\n return (\n <overlayScopeContext.Provider value={scope}>\n <div ref={mergedNativeRef} {...mergeTargetProps({ className: cx(\"cs-cascader\", className) }, rootProps)}>\n <button {...mergeTargetProps({ ...control, type: \"button\", className: \"cs-treeselect__field\", disabled, \"aria-haspopup\": \"listbox\", \"aria-expanded\": open, onClick: event => { if (!open) event.currentTarget.focus(); setOpen(o => !o); }, onKeyDown: (e) => {\n if (e.defaultPrevented || e.nativeEvent.isComposing || e.nativeEvent.keyCode === 229) return;\n // Once open, the document handler owns arrows from this trigger too.\n if (open && e.key === \"ArrowDown\") return;\n if (e.key === \"ArrowDown\" || e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setOpen(true);\n }\n } }, controlProps, [\"id\", \"role\", \"type\", \"name\", \"value\", \"defaultValue\", \"disabled\", \"required\", \"aria-required\", \"aria-label\", \"aria-labelledby\", \"aria-describedby\", \"aria-invalid\", \"aria-haspopup\", \"aria-expanded\", \"aria-controls\", \"aria-activedescendant\"])} ref={mergedControlRef} >\n <span className={labels.length ? undefined : \"ph\"}>{labels.length ? labels.map((label, index) => <React.Fragment key={index}>{index ? <React.Fragment>{\" \"}<span aria-hidden=\"true\">/</span>{\" \"}</React.Fragment> : null}{label}</React.Fragment>) : ph}</span><span aria-hidden=\"true\">▾</span>\n </button>\n {open ? (\n floating.render(<div ref={floatingRef} className=\"cs-cascader__pop\">\n {cols.map((col, i) => (\n <ul key={i} role=\"listbox\" aria-labelledby={control[\"aria-labelledby\"] || control.id} className=\"cs-cascader__col\">\n {col.map((n) => (\n // role=\"none\" — the <li> wrapper must not sit between listbox and option.\n <li key={n.key} role=\"none\">\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={path[i] === n.key}\n className={cx(\"cs-cascader__opt\", path[i] === n.key && \"on\")}\n // Keep options in the focusable set for arrow models (E3).\n data-cs-focusable=\"\"\n onClick={() => {\n const next = [...path.slice(0, i), n.key];\n setPath(next);\n if (!(n.children && n.children.length)) { onChange && onChange(next); setOpen(false); }\n }}\n >\n {n.label}{n.children && n.children.length ? <span aria-hidden=\"true\"> ›</span> : null}\n </button>\n </li>\n ))}\n </ul>\n ))}\n </div>)\n ) : null}\n {fieldMessages(control, description, error, requiredDescription)}\n </div>\n </overlayScopeContext.Provider>\n );\n});\nCascader.displayName = \"Cascader\";\n"],
5
+ "mappings": "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",
6
6
  "names": ["Cascader", "label"]
7
7
  }
@@ -63,7 +63,10 @@ var ColorPicker = React.forwardRef(function ColorPicker2({ portal = true, placem
63
63
  onChange && onChange(v);
64
64
  }
65
65
  };
66
- return /* @__PURE__ */ React.createElement(overlayScopeContext.Provider, { value: scope }, /* @__PURE__ */ React.createElement("span", { ref: mergedNativeRef, ...mergeTargetProps({ className: cx("cs-colorpicker", className) }, rootProps) }, /* @__PURE__ */ React.createElement("button", { ...mergeTargetProps({ ...control, type: "button", className: "cs-colorpicker__field", "aria-expanded": open, onClick: () => setOpen((o) => !o) }, controlProps, ["id", "role", "type", "name", "value", "defaultValue", "disabled", "required", "aria-required", "aria-label", "aria-labelledby", "aria-describedby", "aria-invalid", "aria-haspopup", "aria-expanded", "aria-controls", "aria-activedescendant"]), ref: mergedControlRef }, /* @__PURE__ */ React.createElement("i", { style: { background: value } }), /* @__PURE__ */ React.createElement("code", null, value)), open ? floating.render(/* @__PURE__ */ React.createElement("span", { ref: floatingRef, className: "cs-colorpicker__pop", role: "dialog", "aria-label": control["aria-labelledby"] ? void 0 : controlProps?.["aria-label"] || label || t("label"), "aria-labelledby": control["aria-labelledby"] }, /* @__PURE__ */ React.createElement("span", { className: "cs-colorpicker__grid" }, swatches.map((s) => /* @__PURE__ */ React.createElement(
66
+ return /* @__PURE__ */ React.createElement(overlayScopeContext.Provider, { value: scope }, /* @__PURE__ */ React.createElement("span", { ref: mergedNativeRef, ...mergeTargetProps({ className: cx("cs-colorpicker", className) }, rootProps) }, /* @__PURE__ */ React.createElement("button", { ...mergeTargetProps({ ...control, type: "button", className: "cs-colorpicker__field", "aria-expanded": open, onClick: (event) => {
67
+ if (!open) event.currentTarget.focus();
68
+ setOpen((o) => !o);
69
+ } }, controlProps, ["id", "role", "type", "name", "value", "defaultValue", "disabled", "required", "aria-required", "aria-label", "aria-labelledby", "aria-describedby", "aria-invalid", "aria-haspopup", "aria-expanded", "aria-controls", "aria-activedescendant"]), ref: mergedControlRef }, /* @__PURE__ */ React.createElement("i", { style: { background: value } }), /* @__PURE__ */ React.createElement("code", null, value)), open ? floating.render(/* @__PURE__ */ React.createElement("span", { ref: floatingRef, className: "cs-colorpicker__pop", role: "dialog", "aria-label": control["aria-labelledby"] ? void 0 : controlProps?.["aria-label"] || label || t("label"), "aria-labelledby": control["aria-labelledby"] }, /* @__PURE__ */ React.createElement("span", { className: "cs-colorpicker__grid" }, swatches.map((s) => /* @__PURE__ */ React.createElement(
67
70
  "button",
68
71
  {
69
72
  key: s,
@@ -100,4 +103,4 @@ ColorPicker.displayName = "ColorPicker";
100
103
  export {
101
104
  ColorPicker
102
105
  };
103
- //# sourceMappingURL=chunk-FF5D53IP.mjs.map
106
+ //# sourceMappingURL=chunk-SA7L22XE.mjs.map