@womp/kookie-ui 0.23.0 → 0.24.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 (463) hide show
  1. package/components.css +190 -185
  2. package/dist/cjs/components/_internal/base-button.d.ts +11 -1
  3. package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
  4. package/dist/cjs/components/_internal/base-button.js +1 -1
  5. package/dist/cjs/components/_internal/base-button.js.map +4 -4
  6. package/dist/cjs/components/_internal/menu-context.d.ts +2 -0
  7. package/dist/cjs/components/_internal/menu-context.d.ts.map +1 -1
  8. package/dist/cjs/components/_internal/menu-context.js +1 -1
  9. package/dist/cjs/components/_internal/menu-context.js.map +3 -3
  10. package/dist/cjs/components/_internal/pane-chrome.d.ts +17 -2
  11. package/dist/cjs/components/_internal/pane-chrome.d.ts.map +1 -1
  12. package/dist/cjs/components/_internal/pane-chrome.js +1 -1
  13. package/dist/cjs/components/_internal/pane-chrome.js.map +4 -4
  14. package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
  15. package/dist/cjs/components/_internal/shell-sidebar.js.map +4 -4
  16. package/dist/cjs/components/accordion.d.ts +2 -2
  17. package/dist/cjs/components/accordion.d.ts.map +1 -1
  18. package/dist/cjs/components/accordion.js +1 -1
  19. package/dist/cjs/components/accordion.js.map +4 -4
  20. package/dist/cjs/components/alert-dialog.d.ts.map +1 -1
  21. package/dist/cjs/components/alert-dialog.js +1 -1
  22. package/dist/cjs/components/alert-dialog.js.map +3 -3
  23. package/dist/cjs/components/avatar.d.ts +1 -1
  24. package/dist/cjs/components/avatar.d.ts.map +1 -1
  25. package/dist/cjs/components/avatar.js +1 -1
  26. package/dist/cjs/components/avatar.js.map +3 -3
  27. package/dist/cjs/components/avatar.props.d.ts +8 -0
  28. package/dist/cjs/components/avatar.props.d.ts.map +1 -1
  29. package/dist/cjs/components/avatar.props.js +1 -1
  30. package/dist/cjs/components/avatar.props.js.map +2 -2
  31. package/dist/cjs/components/blockquote.d.ts +1 -1
  32. package/dist/cjs/components/blockquote.d.ts.map +1 -1
  33. package/dist/cjs/components/blockquote.js +1 -1
  34. package/dist/cjs/components/blockquote.js.map +4 -4
  35. package/dist/cjs/components/button.js +1 -1
  36. package/dist/cjs/components/button.js.map +4 -4
  37. package/dist/cjs/components/chatbar.d.ts.map +1 -1
  38. package/dist/cjs/components/chatbar.js +1 -1
  39. package/dist/cjs/components/chatbar.js.map +4 -4
  40. package/dist/cjs/components/checkbox-group.d.ts.map +1 -1
  41. package/dist/cjs/components/checkbox-group.js +1 -1
  42. package/dist/cjs/components/checkbox-group.js.map +3 -3
  43. package/dist/cjs/components/checkbox-group.primitive.d.ts +12 -5
  44. package/dist/cjs/components/checkbox-group.primitive.d.ts.map +1 -1
  45. package/dist/cjs/components/checkbox-group.primitive.js +1 -1
  46. package/dist/cjs/components/checkbox-group.primitive.js.map +3 -3
  47. package/dist/cjs/components/checkbox.js +1 -1
  48. package/dist/cjs/components/checkbox.js.map +3 -3
  49. package/dist/cjs/components/chip.d.ts.map +1 -1
  50. package/dist/cjs/components/chip.js +1 -1
  51. package/dist/cjs/components/chip.js.map +3 -3
  52. package/dist/cjs/components/code.d.ts.map +1 -1
  53. package/dist/cjs/components/code.js +1 -1
  54. package/dist/cjs/components/code.js.map +2 -2
  55. package/dist/cjs/components/combobox.js +1 -1
  56. package/dist/cjs/components/combobox.js.map +3 -3
  57. package/dist/cjs/components/context-menu.d.ts.map +1 -1
  58. package/dist/cjs/components/context-menu.js +1 -1
  59. package/dist/cjs/components/context-menu.js.map +4 -4
  60. package/dist/cjs/components/dialog.d.ts +1 -1
  61. package/dist/cjs/components/dialog.d.ts.map +1 -1
  62. package/dist/cjs/components/dialog.js +1 -1
  63. package/dist/cjs/components/dialog.js.map +3 -3
  64. package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
  65. package/dist/cjs/components/dropdown-menu.js +1 -1
  66. package/dist/cjs/components/dropdown-menu.js.map +4 -4
  67. package/dist/cjs/components/icons.d.ts +3 -1
  68. package/dist/cjs/components/icons.d.ts.map +1 -1
  69. package/dist/cjs/components/icons.js +1 -1
  70. package/dist/cjs/components/icons.js.map +3 -3
  71. package/dist/cjs/components/index.d.ts +1 -1
  72. package/dist/cjs/components/index.d.ts.map +1 -1
  73. package/dist/cjs/components/index.js +2 -10
  74. package/dist/cjs/components/index.js.map +4 -4
  75. package/dist/cjs/components/message-scroller.d.ts.map +1 -1
  76. package/dist/cjs/components/message-scroller.js +1 -1
  77. package/dist/cjs/components/message-scroller.js.map +4 -4
  78. package/dist/cjs/components/navbar.d.ts.map +1 -1
  79. package/dist/cjs/components/navbar.js +1 -1
  80. package/dist/cjs/components/navbar.js.map +3 -3
  81. package/dist/cjs/components/notice.d.ts +4 -1
  82. package/dist/cjs/components/notice.d.ts.map +1 -1
  83. package/dist/cjs/components/notice.js +1 -1
  84. package/dist/cjs/components/notice.js.map +4 -4
  85. package/dist/cjs/components/progress.d.ts.map +1 -1
  86. package/dist/cjs/components/progress.js +1 -1
  87. package/dist/cjs/components/progress.js.map +3 -3
  88. package/dist/cjs/components/schemas/button.schema.d.ts +2 -2
  89. package/dist/cjs/components/schemas/toggle.schema.d.ts +1 -1
  90. package/dist/cjs/components/scroll-area.d.ts +3 -1
  91. package/dist/cjs/components/scroll-area.d.ts.map +1 -1
  92. package/dist/cjs/components/scroll-area.js +1 -1
  93. package/dist/cjs/components/scroll-area.js.map +4 -4
  94. package/dist/cjs/components/segmented-control.d.ts +3 -1
  95. package/dist/cjs/components/segmented-control.d.ts.map +1 -1
  96. package/dist/cjs/components/segmented-control.js +1 -1
  97. package/dist/cjs/components/segmented-control.js.map +3 -3
  98. package/dist/cjs/components/select.d.ts.map +1 -1
  99. package/dist/cjs/components/select.js +1 -1
  100. package/dist/cjs/components/select.js.map +3 -3
  101. package/dist/cjs/components/separator.d.ts.map +1 -1
  102. package/dist/cjs/components/separator.js +1 -1
  103. package/dist/cjs/components/separator.js.map +3 -3
  104. package/dist/cjs/components/sheet.d.ts +1 -0
  105. package/dist/cjs/components/sheet.d.ts.map +1 -1
  106. package/dist/cjs/components/sheet.js +1 -1
  107. package/dist/cjs/components/sheet.js.map +3 -3
  108. package/dist/cjs/components/shell.d.ts +12 -1
  109. package/dist/cjs/components/shell.d.ts.map +1 -1
  110. package/dist/cjs/components/shell.js +1 -1
  111. package/dist/cjs/components/shell.js.map +4 -4
  112. package/dist/cjs/components/sidebar.d.ts.map +1 -1
  113. package/dist/cjs/components/sidebar.js +1 -1
  114. package/dist/cjs/components/sidebar.js.map +4 -4
  115. package/dist/cjs/components/slider.d.ts.map +1 -1
  116. package/dist/cjs/components/slider.js +1 -1
  117. package/dist/cjs/components/slider.js.map +3 -3
  118. package/dist/cjs/components/spinner.d.ts.map +1 -1
  119. package/dist/cjs/components/spinner.js +1 -1
  120. package/dist/cjs/components/spinner.js.map +3 -3
  121. package/dist/cjs/components/table.d.ts.map +1 -1
  122. package/dist/cjs/components/table.js +1 -1
  123. package/dist/cjs/components/table.js.map +4 -4
  124. package/dist/cjs/components/tabs.d.ts.map +1 -1
  125. package/dist/cjs/components/tabs.js +1 -1
  126. package/dist/cjs/components/tabs.js.map +2 -2
  127. package/dist/cjs/components/text-area.js +1 -1
  128. package/dist/cjs/components/text-area.js.map +2 -2
  129. package/dist/cjs/components/text-field.js +2 -2
  130. package/dist/cjs/components/text-field.js.map +2 -2
  131. package/dist/cjs/components/toggle.d.ts +3 -2
  132. package/dist/cjs/components/toggle.d.ts.map +1 -1
  133. package/dist/cjs/components/toggle.js +1 -9
  134. package/dist/cjs/components/toggle.js.map +4 -4
  135. package/dist/cjs/components/toolbar.d.ts +80 -8
  136. package/dist/cjs/components/toolbar.d.ts.map +1 -1
  137. package/dist/cjs/components/toolbar.js +1 -1
  138. package/dist/cjs/components/toolbar.js.map +4 -4
  139. package/dist/cjs/components/virtual-menu.d.ts +3 -5
  140. package/dist/cjs/components/virtual-menu.d.ts.map +1 -1
  141. package/dist/cjs/components/virtual-menu.js +1 -1
  142. package/dist/cjs/components/virtual-menu.js.map +3 -3
  143. package/dist/cjs/helpers/extract-margin-props.d.ts +7 -7
  144. package/dist/cjs/hooks/use-scroll-edges.d.ts +4 -2
  145. package/dist/cjs/hooks/use-scroll-edges.d.ts.map +1 -1
  146. package/dist/cjs/hooks/use-scroll-edges.js +1 -1
  147. package/dist/cjs/hooks/use-scroll-edges.js.map +3 -3
  148. package/dist/cjs/index.js +5 -5
  149. package/dist/cjs/index.js.map +4 -4
  150. package/dist/cjs/props/index.js +1 -1
  151. package/dist/cjs/props/index.js.map +2 -2
  152. package/dist/esm/chunk-3VTS4C63.js +2 -0
  153. package/dist/esm/chunk-3VTS4C63.js.map +7 -0
  154. package/dist/esm/chunk-3WE4E2WQ.js +2 -0
  155. package/dist/esm/chunk-3WE4E2WQ.js.map +7 -0
  156. package/dist/esm/chunk-3XUY5WFA.js +2 -0
  157. package/dist/esm/chunk-3XUY5WFA.js.map +7 -0
  158. package/dist/esm/chunk-3XZOE2IQ.js +2 -0
  159. package/dist/esm/chunk-3XZOE2IQ.js.map +7 -0
  160. package/dist/esm/chunk-432YLNB3.js +2 -0
  161. package/dist/esm/chunk-432YLNB3.js.map +7 -0
  162. package/dist/esm/chunk-4QKZYCCH.js +2 -0
  163. package/dist/esm/chunk-4QKZYCCH.js.map +7 -0
  164. package/dist/esm/chunk-4R5EMVB3.js +2 -0
  165. package/dist/esm/chunk-4R5EMVB3.js.map +7 -0
  166. package/dist/esm/chunk-4ZOVV3TY.js +2 -0
  167. package/dist/esm/chunk-4ZOVV3TY.js.map +7 -0
  168. package/dist/esm/{chunk-IX5HIHVI.js → chunk-62ZGP4ET.js} +2 -2
  169. package/dist/esm/{chunk-IX5HIHVI.js.map → chunk-62ZGP4ET.js.map} +3 -3
  170. package/dist/esm/chunk-BGAJ2MDF.js +2 -0
  171. package/dist/esm/chunk-BGAJ2MDF.js.map +7 -0
  172. package/dist/esm/chunk-CHPT42BY.js +2 -0
  173. package/dist/esm/{chunk-Y3JYEEFB.js.map → chunk-CHPT42BY.js.map} +2 -2
  174. package/dist/esm/{chunk-KS4U4VPH.js → chunk-CMHUK7OG.js} +2 -2
  175. package/dist/esm/{chunk-KS4U4VPH.js.map → chunk-CMHUK7OG.js.map} +2 -2
  176. package/dist/esm/chunk-CN6F4REJ.js +2 -0
  177. package/dist/esm/chunk-CN6F4REJ.js.map +7 -0
  178. package/dist/esm/chunk-DUTZUWZP.js +2 -0
  179. package/dist/esm/chunk-DUTZUWZP.js.map +7 -0
  180. package/dist/esm/chunk-FDJV5RXX.js +2 -0
  181. package/dist/esm/chunk-FDJV5RXX.js.map +7 -0
  182. package/dist/esm/chunk-G2JD52O5.js +2 -0
  183. package/dist/esm/{chunk-23KT3D2Z.js.map → chunk-G2JD52O5.js.map} +3 -3
  184. package/dist/esm/{chunk-6DDOR73D.js → chunk-G4ETY2NP.js} +2 -2
  185. package/dist/esm/chunk-GPOCLDBR.js +2 -0
  186. package/dist/esm/chunk-GPOCLDBR.js.map +7 -0
  187. package/dist/esm/chunk-GYP66ZK2.js +2 -0
  188. package/dist/esm/chunk-GYP66ZK2.js.map +7 -0
  189. package/dist/esm/chunk-H5BYPX6V.js +2 -0
  190. package/dist/esm/chunk-H5BYPX6V.js.map +7 -0
  191. package/dist/esm/chunk-H5G7UECV.js +2 -0
  192. package/dist/esm/chunk-H5G7UECV.js.map +7 -0
  193. package/dist/esm/chunk-I4FLQELQ.js +2 -0
  194. package/dist/esm/chunk-I4FLQELQ.js.map +7 -0
  195. package/dist/esm/chunk-JYQGCXXI.js +2 -0
  196. package/dist/esm/chunk-JYQGCXXI.js.map +7 -0
  197. package/dist/esm/chunk-KA5UE2VN.js +2 -0
  198. package/dist/esm/chunk-KA5UE2VN.js.map +7 -0
  199. package/dist/esm/{chunk-QGCXTULQ.js → chunk-KEGCX5VM.js} +2 -2
  200. package/dist/esm/chunk-KVHKPUZ2.js +2 -0
  201. package/dist/esm/chunk-KVHKPUZ2.js.map +7 -0
  202. package/dist/esm/{chunk-FFG32ERA.js → chunk-N3WBEQWL.js} +3 -3
  203. package/dist/esm/chunk-N3WBEQWL.js.map +7 -0
  204. package/dist/esm/{chunk-HKPXDQ2B.js → chunk-NC3CJUE3.js} +2 -2
  205. package/dist/esm/chunk-P2MV6HLA.js +2 -0
  206. package/dist/esm/{chunk-7SS4UUJH.js.map → chunk-P2MV6HLA.js.map} +3 -3
  207. package/dist/esm/chunk-PALE5UWK.js +2 -0
  208. package/dist/esm/{chunk-DSPYHO3L.js.map → chunk-PALE5UWK.js.map} +2 -2
  209. package/dist/esm/chunk-PDMCLVYT.js +2 -0
  210. package/dist/esm/chunk-PDMCLVYT.js.map +7 -0
  211. package/dist/esm/chunk-PM6QY3JO.js +2 -0
  212. package/dist/esm/{chunk-ZEX2DECM.js.map → chunk-PM6QY3JO.js.map} +3 -3
  213. package/dist/esm/chunk-RKZVXVBN.js +2 -0
  214. package/dist/esm/chunk-RKZVXVBN.js.map +7 -0
  215. package/dist/esm/chunk-TXQZ5HLV.js +2 -0
  216. package/dist/esm/chunk-TXQZ5HLV.js.map +7 -0
  217. package/dist/esm/chunk-UKASIY6M.js +2 -0
  218. package/dist/esm/chunk-UKASIY6M.js.map +7 -0
  219. package/dist/esm/{chunk-OJQNLROL.js → chunk-UY6WJUNA.js} +2 -2
  220. package/dist/esm/chunk-V5O3TF57.js +2 -0
  221. package/dist/esm/{chunk-3KQE2PSJ.js.map → chunk-V5O3TF57.js.map} +3 -3
  222. package/dist/esm/chunk-VUNCI6A6.js +2 -0
  223. package/dist/esm/chunk-VUNCI6A6.js.map +7 -0
  224. package/dist/esm/{chunk-JBHRV364.js → chunk-VUPIJNG2.js} +2 -2
  225. package/dist/esm/chunk-W6BN5QLH.js +2 -0
  226. package/dist/esm/{chunk-ZNDCZM5A.js.map → chunk-W6BN5QLH.js.map} +2 -2
  227. package/dist/esm/chunk-WG5ORTIW.js +2 -0
  228. package/dist/esm/chunk-WG5ORTIW.js.map +7 -0
  229. package/dist/esm/chunk-WMVR2XBR.js +2 -0
  230. package/dist/esm/{chunk-XKSU3NLG.js.map → chunk-WMVR2XBR.js.map} +2 -2
  231. package/dist/esm/{chunk-NNZTSXKH.js → chunk-WX7SX5BN.js} +2 -2
  232. package/dist/esm/chunk-XOACTIBL.js +2 -0
  233. package/dist/esm/chunk-XOACTIBL.js.map +7 -0
  234. package/dist/esm/components/_internal/base-button.d.ts +11 -1
  235. package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
  236. package/dist/esm/components/_internal/base-button.js +1 -1
  237. package/dist/esm/components/_internal/menu-context.d.ts +2 -0
  238. package/dist/esm/components/_internal/menu-context.d.ts.map +1 -1
  239. package/dist/esm/components/_internal/menu-context.js +1 -1
  240. package/dist/esm/components/_internal/pane-chrome.d.ts +17 -2
  241. package/dist/esm/components/_internal/pane-chrome.d.ts.map +1 -1
  242. package/dist/esm/components/_internal/pane-chrome.js +1 -1
  243. package/dist/esm/components/_internal/shell-bottom.js +1 -1
  244. package/dist/esm/components/_internal/shell-inspector.js +1 -1
  245. package/dist/esm/components/_internal/shell-sidebar.js +1 -1
  246. package/dist/esm/components/accordion.d.ts +2 -2
  247. package/dist/esm/components/accordion.d.ts.map +1 -1
  248. package/dist/esm/components/accordion.js +1 -1
  249. package/dist/esm/components/alert-dialog.d.ts.map +1 -1
  250. package/dist/esm/components/alert-dialog.js +1 -1
  251. package/dist/esm/components/avatar.d.ts +1 -1
  252. package/dist/esm/components/avatar.d.ts.map +1 -1
  253. package/dist/esm/components/avatar.js +1 -1
  254. package/dist/esm/components/avatar.props.d.ts +8 -0
  255. package/dist/esm/components/avatar.props.d.ts.map +1 -1
  256. package/dist/esm/components/avatar.props.js +1 -1
  257. package/dist/esm/components/blockquote.d.ts +1 -1
  258. package/dist/esm/components/blockquote.d.ts.map +1 -1
  259. package/dist/esm/components/blockquote.js +1 -1
  260. package/dist/esm/components/button.js +1 -1
  261. package/dist/esm/components/chatbar.d.ts.map +1 -1
  262. package/dist/esm/components/chatbar.js +1 -1
  263. package/dist/esm/components/checkbox-group.d.ts.map +1 -1
  264. package/dist/esm/components/checkbox-group.js +1 -1
  265. package/dist/esm/components/checkbox-group.primitive.d.ts +12 -5
  266. package/dist/esm/components/checkbox-group.primitive.d.ts.map +1 -1
  267. package/dist/esm/components/checkbox-group.primitive.js +1 -1
  268. package/dist/esm/components/checkbox.js +1 -1
  269. package/dist/esm/components/chip.d.ts.map +1 -1
  270. package/dist/esm/components/chip.js +1 -1
  271. package/dist/esm/components/code.d.ts.map +1 -1
  272. package/dist/esm/components/code.js +1 -1
  273. package/dist/esm/components/combobox.js +1 -1
  274. package/dist/esm/components/context-menu.d.ts.map +1 -1
  275. package/dist/esm/components/context-menu.js +1 -1
  276. package/dist/esm/components/dialog.d.ts +1 -1
  277. package/dist/esm/components/dialog.d.ts.map +1 -1
  278. package/dist/esm/components/dialog.js +1 -1
  279. package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
  280. package/dist/esm/components/dropdown-menu.js +1 -1
  281. package/dist/esm/components/icons.d.ts +3 -1
  282. package/dist/esm/components/icons.d.ts.map +1 -1
  283. package/dist/esm/components/icons.js +1 -1
  284. package/dist/esm/components/index.d.ts +1 -1
  285. package/dist/esm/components/index.d.ts.map +1 -1
  286. package/dist/esm/components/index.js +1 -1
  287. package/dist/esm/components/message-scroller.d.ts.map +1 -1
  288. package/dist/esm/components/message-scroller.js +1 -1
  289. package/dist/esm/components/navbar.d.ts.map +1 -1
  290. package/dist/esm/components/navbar.js +1 -1
  291. package/dist/esm/components/notice.d.ts +4 -1
  292. package/dist/esm/components/notice.d.ts.map +1 -1
  293. package/dist/esm/components/notice.js +1 -1
  294. package/dist/esm/components/progress.d.ts.map +1 -1
  295. package/dist/esm/components/progress.js +1 -1
  296. package/dist/esm/components/schemas/button.schema.d.ts +2 -2
  297. package/dist/esm/components/schemas/toggle.schema.d.ts +1 -1
  298. package/dist/esm/components/scroll-area.d.ts +3 -1
  299. package/dist/esm/components/scroll-area.d.ts.map +1 -1
  300. package/dist/esm/components/scroll-area.js +1 -1
  301. package/dist/esm/components/segmented-control.d.ts +3 -1
  302. package/dist/esm/components/segmented-control.d.ts.map +1 -1
  303. package/dist/esm/components/segmented-control.js +1 -1
  304. package/dist/esm/components/select.d.ts.map +1 -1
  305. package/dist/esm/components/select.js +1 -1
  306. package/dist/esm/components/separator.d.ts.map +1 -1
  307. package/dist/esm/components/separator.js +1 -1
  308. package/dist/esm/components/sheet.d.ts +1 -0
  309. package/dist/esm/components/sheet.d.ts.map +1 -1
  310. package/dist/esm/components/sheet.js +1 -1
  311. package/dist/esm/components/shell.d.ts +12 -1
  312. package/dist/esm/components/shell.d.ts.map +1 -1
  313. package/dist/esm/components/shell.js +1 -1
  314. package/dist/esm/components/sidebar.d.ts.map +1 -1
  315. package/dist/esm/components/sidebar.js +1 -1
  316. package/dist/esm/components/slider.d.ts.map +1 -1
  317. package/dist/esm/components/slider.js +1 -1
  318. package/dist/esm/components/spinner.d.ts.map +1 -1
  319. package/dist/esm/components/spinner.js +1 -1
  320. package/dist/esm/components/table.d.ts.map +1 -1
  321. package/dist/esm/components/table.js +1 -1
  322. package/dist/esm/components/tabs.d.ts.map +1 -1
  323. package/dist/esm/components/tabs.js +1 -1
  324. package/dist/esm/components/text-area.js +1 -1
  325. package/dist/esm/components/text-field.js +1 -1
  326. package/dist/esm/components/toggle.d.ts +3 -2
  327. package/dist/esm/components/toggle.d.ts.map +1 -1
  328. package/dist/esm/components/toggle.js +1 -1
  329. package/dist/esm/components/toolbar.d.ts +80 -8
  330. package/dist/esm/components/toolbar.d.ts.map +1 -1
  331. package/dist/esm/components/toolbar.js +1 -1
  332. package/dist/esm/components/virtual-menu.d.ts +3 -5
  333. package/dist/esm/components/virtual-menu.d.ts.map +1 -1
  334. package/dist/esm/components/virtual-menu.js +1 -1
  335. package/dist/esm/helpers/extract-margin-props.d.ts +7 -7
  336. package/dist/esm/hooks/index.js +1 -1
  337. package/dist/esm/hooks/use-scroll-edges.d.ts +4 -2
  338. package/dist/esm/hooks/use-scroll-edges.d.ts.map +1 -1
  339. package/dist/esm/hooks/use-scroll-edges.js +1 -1
  340. package/dist/esm/index.js +1 -1
  341. package/dist/esm/props/index.js +1 -1
  342. package/package.json +1 -1
  343. package/src/components/_internal/base-button.tsx +51 -12
  344. package/src/components/_internal/base-sidebar-menu.css +8 -0
  345. package/src/components/_internal/menu-context.tsx +11 -0
  346. package/src/components/_internal/pane-chrome.tsx +45 -8
  347. package/src/components/accordion.css +35 -3
  348. package/src/components/accordion.tsx +12 -16
  349. package/src/components/alert-dialog.tsx +59 -161
  350. package/src/components/avatar.props.tsx +6 -0
  351. package/src/components/avatar.tsx +57 -71
  352. package/src/components/blockquote.tsx +8 -9
  353. package/src/components/chatbar.tsx +27 -20
  354. package/src/components/checkbox-group.primitive.tsx +40 -51
  355. package/src/components/checkbox-group.tsx +1 -9
  356. package/src/components/chip.css +18 -20
  357. package/src/components/chip.tsx +3 -4
  358. package/src/components/code.tsx +3 -2
  359. package/src/components/context-menu.tsx +23 -5
  360. package/src/components/dialog.tsx +59 -160
  361. package/src/components/dropdown-menu.tsx +8 -5
  362. package/src/components/icons.tsx +11 -1
  363. package/src/components/index.tsx +7 -0
  364. package/src/components/message-scroller.tsx +48 -26
  365. package/src/components/navbar.tsx +34 -69
  366. package/src/components/notice.tsx +6 -3
  367. package/src/components/progress.tsx +6 -3
  368. package/src/components/scroll-area.css +28 -2
  369. package/src/components/scroll-area.tsx +49 -3
  370. package/src/components/segmented-control.css +8 -130
  371. package/src/components/segmented-control.tsx +36 -5
  372. package/src/components/select.tsx +23 -3
  373. package/src/components/separator.tsx +13 -1
  374. package/src/components/sheet.css +7 -6
  375. package/src/components/sheet.tsx +76 -143
  376. package/src/components/shell.css +14 -0
  377. package/src/components/shell.tsx +29 -8
  378. package/src/components/sidebar.tsx +27 -16
  379. package/src/components/slider.tsx +51 -32
  380. package/src/components/spinner.tsx +10 -2
  381. package/src/components/table.tsx +18 -5
  382. package/src/components/tabs.css +34 -0
  383. package/src/components/tabs.tsx +0 -2
  384. package/src/components/text-area.css +2 -1
  385. package/src/components/text-area.tsx +1 -1
  386. package/src/components/text-field.tsx +1 -1
  387. package/src/components/toggle.tsx +21 -39
  388. package/src/components/toolbar.css +34 -0
  389. package/src/components/toolbar.tsx +432 -23
  390. package/src/components/virtual-menu.tsx +110 -37
  391. package/src/hooks/use-scroll-edges.ts +11 -2
  392. package/src/styles/utilities/truncate.css +10 -0
  393. package/styles.css +195 -185
  394. package/utilities.css +5 -0
  395. package/dist/esm/chunk-23KT3D2Z.js +0 -2
  396. package/dist/esm/chunk-3JA7SJDT.js +0 -2
  397. package/dist/esm/chunk-3JA7SJDT.js.map +0 -7
  398. package/dist/esm/chunk-3KQE2PSJ.js +0 -2
  399. package/dist/esm/chunk-5BWLY27A.js +0 -2
  400. package/dist/esm/chunk-5BWLY27A.js.map +0 -7
  401. package/dist/esm/chunk-6CK7UTNH.js +0 -2
  402. package/dist/esm/chunk-6CK7UTNH.js.map +0 -7
  403. package/dist/esm/chunk-6RK26HIY.js +0 -2
  404. package/dist/esm/chunk-6RK26HIY.js.map +0 -7
  405. package/dist/esm/chunk-7ESWH773.js +0 -2
  406. package/dist/esm/chunk-7ESWH773.js.map +0 -7
  407. package/dist/esm/chunk-7SS4UUJH.js +0 -2
  408. package/dist/esm/chunk-AB3QCCUM.js +0 -2
  409. package/dist/esm/chunk-AB3QCCUM.js.map +0 -7
  410. package/dist/esm/chunk-BEP4AH5V.js +0 -2
  411. package/dist/esm/chunk-BEP4AH5V.js.map +0 -7
  412. package/dist/esm/chunk-BOL3VVSN.js +0 -2
  413. package/dist/esm/chunk-BOL3VVSN.js.map +0 -7
  414. package/dist/esm/chunk-DBROSD2J.js +0 -2
  415. package/dist/esm/chunk-DBROSD2J.js.map +0 -7
  416. package/dist/esm/chunk-DSPYHO3L.js +0 -2
  417. package/dist/esm/chunk-E2D2VWUI.js +0 -2
  418. package/dist/esm/chunk-E2D2VWUI.js.map +0 -7
  419. package/dist/esm/chunk-EMNSA65L.js +0 -2
  420. package/dist/esm/chunk-EMNSA65L.js.map +0 -7
  421. package/dist/esm/chunk-FFG32ERA.js.map +0 -7
  422. package/dist/esm/chunk-FHPHEIYJ.js +0 -2
  423. package/dist/esm/chunk-FHPHEIYJ.js.map +0 -7
  424. package/dist/esm/chunk-FJFBM7HW.js +0 -2
  425. package/dist/esm/chunk-FJFBM7HW.js.map +0 -7
  426. package/dist/esm/chunk-FYT7TYGS.js +0 -2
  427. package/dist/esm/chunk-FYT7TYGS.js.map +0 -7
  428. package/dist/esm/chunk-GLV7VGBH.js +0 -2
  429. package/dist/esm/chunk-GLV7VGBH.js.map +0 -7
  430. package/dist/esm/chunk-HIKMKGPT.js +0 -2
  431. package/dist/esm/chunk-HIKMKGPT.js.map +0 -7
  432. package/dist/esm/chunk-L2R62BOB.js +0 -2
  433. package/dist/esm/chunk-L2R62BOB.js.map +0 -7
  434. package/dist/esm/chunk-LHIS3UKQ.js +0 -2
  435. package/dist/esm/chunk-LHIS3UKQ.js.map +0 -7
  436. package/dist/esm/chunk-NQDMTOGB.js +0 -2
  437. package/dist/esm/chunk-NQDMTOGB.js.map +0 -7
  438. package/dist/esm/chunk-Q6MFPATL.js +0 -2
  439. package/dist/esm/chunk-Q6MFPATL.js.map +0 -7
  440. package/dist/esm/chunk-QOHJIF25.js +0 -2
  441. package/dist/esm/chunk-QOHJIF25.js.map +0 -7
  442. package/dist/esm/chunk-R4XJNQX5.js +0 -2
  443. package/dist/esm/chunk-R4XJNQX5.js.map +0 -7
  444. package/dist/esm/chunk-UE3HATOA.js +0 -2
  445. package/dist/esm/chunk-UE3HATOA.js.map +0 -7
  446. package/dist/esm/chunk-V32EP3S7.js +0 -2
  447. package/dist/esm/chunk-V32EP3S7.js.map +0 -7
  448. package/dist/esm/chunk-XKSU3NLG.js +0 -2
  449. package/dist/esm/chunk-XRCMPBAY.js +0 -2
  450. package/dist/esm/chunk-XRCMPBAY.js.map +0 -7
  451. package/dist/esm/chunk-Y3JYEEFB.js +0 -2
  452. package/dist/esm/chunk-YZM54IJE.js +0 -2
  453. package/dist/esm/chunk-YZM54IJE.js.map +0 -7
  454. package/dist/esm/chunk-ZEX2DECM.js +0 -2
  455. package/dist/esm/chunk-ZJI2IK7C.js +0 -2
  456. package/dist/esm/chunk-ZJI2IK7C.js.map +0 -7
  457. package/dist/esm/chunk-ZNDCZM5A.js +0 -2
  458. /package/dist/esm/{chunk-6DDOR73D.js.map → chunk-G4ETY2NP.js.map} +0 -0
  459. /package/dist/esm/{chunk-QGCXTULQ.js.map → chunk-KEGCX5VM.js.map} +0 -0
  460. /package/dist/esm/{chunk-HKPXDQ2B.js.map → chunk-NC3CJUE3.js.map} +0 -0
  461. /package/dist/esm/{chunk-OJQNLROL.js.map → chunk-UY6WJUNA.js.map} +0 -0
  462. /package/dist/esm/{chunk-JBHRV364.js.map → chunk-VUPIJNG2.js.map} +0 -0
  463. /package/dist/esm/{chunk-NNZTSXKH.js.map → chunk-WX7SX5BN.js.map} +0 -0
@@ -0,0 +1,2 @@
1
+ import{a as t}from"./chunk-S6GWR6EZ.js";import{a as e}from"./chunk-ELAW7ZUG.js";import*as o from"react";import a from"classnames";import{Slot as f}from"radix-ui";var k=o.forwardRef((p,r)=>{let{asChild:s,className:c,color:l,...m}=e(p,t),u=s?f.Root:"blockquote";return o.createElement(u,{"data-accent-color":l,...m,ref:r,className:a("kui-Text","kui-Blockquote",c)})});k.displayName="Blockquote";export{k as a};
2
+ //# sourceMappingURL=chunk-GYP66ZK2.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/blockquote.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { Slot } from 'radix-ui';\n\nimport { blockquotePropDefs } from './blockquote.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype BlockquoteElement = React.ElementRef<'blockquote'>;\ntype BlockQuoteOwnProps = GetPropDefTypes<typeof blockquotePropDefs>;\ninterface BlockquoteProps\n extends ComponentPropsWithout<'blockquote', RemovedProps>,\n BlockQuoteOwnProps {}\nconst Blockquote = React.forwardRef<BlockquoteElement, BlockquoteProps>((props, forwardedRef) => {\n // Only Blockquote's own props style it. It wears Text's classes, so it reads like Text.\n const { asChild, className, color, ...blockquoteProps } = extractProps(props, blockquotePropDefs);\n const Comp = asChild ? Slot.Root : 'blockquote';\n return (\n <Comp\n data-accent-color={color}\n {...blockquoteProps}\n ref={forwardedRef}\n className={classNames('kui-Text', 'kui-Blockquote', className)}\n />\n );\n});\nBlockquote.displayName = 'Blockquote';\n\nexport { Blockquote };\nexport type { BlockquoteProps };\n"],
5
+ "mappings": "gFAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,QAAAC,MAAY,WAarB,IAAMC,EAAmB,aAA+C,CAACC,EAAOC,IAAiB,CAE/F,GAAM,CAAE,QAAAC,EAAS,UAAAC,EAAW,MAAAC,EAAO,GAAGC,CAAgB,EAAIC,EAAaN,EAAOO,CAAkB,EAC1FC,EAAON,EAAUO,EAAK,KAAO,aACnC,OACE,gBAACD,EAAA,CACC,oBAAmBJ,EAClB,GAAGC,EACJ,IAAKJ,EACL,UAAWS,EAAW,WAAY,iBAAkBP,CAAS,EAC/D,CAEJ,CAAC,EACDJ,EAAW,YAAc",
6
+ "names": ["React", "classNames", "Slot", "Blockquote", "props", "forwardedRef", "asChild", "className", "color", "blockquoteProps", "extractProps", "blockquotePropDefs", "Comp", "Slot", "classNames"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as v}from"./chunk-7ZOGH5NT.js";import{a as i}from"./chunk-BJUCBOGU.js";import{e as l}from"./chunk-3YLYGKFB.js";import{a as N}from"./chunk-ELAW7ZUG.js";import{a as g}from"./chunk-OS3FCYZY.js";var R={};g(R,{Actions:()=>c,Logo:()=>b,Navigation:()=>f,Root:()=>m});import*as o from"react";import n from"classnames";var m=o.forwardRef((e,t)=>{let a=l(e,v.size),{children:s,className:r,...p}=N(a,v),P=a.position??"fixed",d=a.size??"2";return o.createElement("header",{...p,ref:t,className:n("kui-NavbarRoot",r),"data-position":P,"data-size":d},o.createElement("div",{className:"kui-NavbarContainer"},s))});m.displayName="Navbar.Root";var b=o.forwardRef(({gap:e="2",align:t="center",justify:a="start",className:s,...r},p)=>o.createElement(i,{ref:p,gap:e,align:t,justify:a,className:n("kui-NavbarLogo",s),...r}));b.displayName="Navbar.Logo";var f=o.forwardRef(({gap:e="4",align:t="center",justify:a="center",className:s,...r},p)=>o.createElement(i,{ref:p,gap:e,align:t,justify:a,className:n("kui-NavbarNavigation",s),role:"navigation","aria-label":r["aria-labelledby"]===void 0?"Main":void 0,...r}));f.displayName="Navbar.Navigation";var c=o.forwardRef(({gap:e="4",align:t="center",justify:a="end",className:s,...r},p)=>o.createElement(i,{ref:p,gap:e,align:t,justify:a,className:n("kui-NavbarActions",s),...r}));c.displayName="Navbar.Actions";export{m as a,b,f as c,c as d,R as e};
2
+ //# sourceMappingURL=chunk-H5BYPX6V.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/navbar.tsx"],
4
+ "sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { Flex } from './flex.js';\n\nimport type { FlexProps } from './flex.js';\nimport type { MarginProps } from '../props/margin.props.js';\n\n// Navbar slots are parts, not layout primitives: the bar owns their spacing.\ntype NavbarSlotFlexProps = Omit<FlexProps, keyof MarginProps>;\n\nimport { navbarRootPropDefs } from './navbar.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../helpers/theme-size.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\n/**\n * Navbar Component\n *\n * A horizontal navigation bar component with semantic slots for organizing\n * content. Follows the Shell and Sidebar compound component patterns.\n *\n * @example\n * <Navbar.Root>\n * <Navbar.Logo>Brand/logo content</Navbar.Logo>\n * <Navbar.Navigation>Navigation links</Navbar.Navigation>\n * <Navbar.Actions>CTAs, user menu, etc</Navbar.Actions>\n * </Navbar.Root>\n */\n\n// Root Component\ntype NavbarRootElement = React.ElementRef<'header'>;\ntype NavbarRootOwnProps = GetPropDefTypes<typeof navbarRootPropDefs>;\ninterface NavbarRootProps\n extends ComponentPropsWithout<'header', RemovedProps>,\n NavbarRootOwnProps {}\n\nconst NavbarRoot = React.forwardRef<NavbarRootElement, NavbarRootProps>(\n (ownProps, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, navbarRootPropDefs.size);\n const { children, className, ...rootProps } = extractProps(\n props,\n navbarRootPropDefs,\n );\n\n const position = props.position ?? 'fixed';\n const size = props.size ?? '2';\n\n return (\n <header\n {...rootProps}\n ref={forwardedRef}\n className={classNames('kui-NavbarRoot', className)}\n data-position={position}\n data-size={size}\n >\n <div className=\"kui-NavbarContainer\">{children}</div>\n </header>\n );\n },\n);\nNavbarRoot.displayName = 'Navbar.Root';\n\n// Logo Slot - extends FlexProps\ntype NavbarLogoProps = NavbarSlotFlexProps & {\n asChild?: boolean;\n};\n\n// With `asChild`, Flex renders the child, so the layout props become classes on it, not attributes.\nconst NavbarLogo = React.forwardRef<HTMLDivElement, NavbarLogoProps>(\n ({ gap = '2', align = 'center', justify = 'start', className, ...props }, ref) => (\n <Flex\n ref={ref}\n gap={gap}\n align={align}\n justify={justify}\n className={classNames('kui-NavbarLogo', className)}\n {...props}\n />\n ),\n);\nNavbarLogo.displayName = 'Navbar.Logo';\n\n// Navigation Slot - extends FlexProps\ntype NavbarNavigationProps = NavbarSlotFlexProps & {\n asChild?: boolean;\n};\n\nconst NavbarNavigation = React.forwardRef<HTMLDivElement, NavbarNavigationProps>(\n ({ gap = '4', align = 'center', justify = 'center', className, ...props }, ref) => (\n <Flex\n ref={ref}\n gap={gap}\n align={align}\n justify={justify}\n className={classNames('kui-NavbarNavigation', className)}\n role=\"navigation\"\n // A landmark needs a name to be told apart from other navigation on the page.\n aria-label={props['aria-labelledby'] === undefined ? 'Main' : undefined}\n {...props}\n />\n ),\n);\nNavbarNavigation.displayName = 'Navbar.Navigation';\n\n// Actions Slot - extends FlexProps\ntype NavbarActionsProps = NavbarSlotFlexProps & {\n asChild?: boolean;\n};\n\nconst NavbarActions = React.forwardRef<HTMLDivElement, NavbarActionsProps>(\n ({ gap = '4', align = 'center', justify = 'end', className, ...props }, ref) => (\n <Flex\n ref={ref}\n gap={gap}\n align={align}\n justify={justify}\n className={classNames('kui-NavbarActions', className)}\n {...props}\n />\n ),\n);\nNavbarActions.displayName = 'Navbar.Actions';\n\nexport {\n NavbarRoot as Root,\n NavbarLogo as Logo,\n NavbarNavigation as Navigation,\n NavbarActions as Actions,\n};\n\nexport type {\n NavbarRootProps as RootProps,\n NavbarLogoProps as LogoProps,\n NavbarNavigationProps as NavigationProps,\n NavbarActionsProps as ActionsProps,\n};\n"],
5
+ "mappings": "wMAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,SAAAC,EAAA,eAAAC,EAAA,SAAAC,IAEA,UAAYC,MAAW,QACvB,OAAOC,MAAgB,aAqCvB,IAAMC,EAAmB,aACvB,CAACC,EAAUC,IAAiB,CAC1B,IAAMC,EAAQC,EAAkBH,EAAUI,EAAmB,IAAI,EAC3D,CAAE,SAAAC,EAAU,UAAAC,EAAW,GAAGC,CAAU,EAAIC,EAC5CN,EACAE,CACF,EAEMK,EAAWP,EAAM,UAAY,QAC7BQ,EAAOR,EAAM,MAAQ,IAE3B,OACE,gBAAC,UACE,GAAGK,EACJ,IAAKN,EACL,UAAWU,EAAW,iBAAkBL,CAAS,EACjD,gBAAeG,EACf,YAAWC,GAEX,gBAAC,OAAI,UAAU,uBAAuBL,CAAS,CACjD,CAEJ,CACF,EACAN,EAAW,YAAc,cAQzB,IAAMa,EAAmB,aACvB,CAAC,CAAE,IAAAC,EAAM,IAAK,MAAAC,EAAQ,SAAU,QAAAC,EAAU,QAAS,UAAAT,EAAW,GAAGJ,CAAM,EAAGc,IACxE,gBAACC,EAAA,CACC,IAAKD,EACL,IAAKH,EACL,MAAOC,EACP,QAASC,EACT,UAAWJ,EAAW,iBAAkBL,CAAS,EAChD,GAAGJ,EACN,CAEJ,EACAU,EAAW,YAAc,cAOzB,IAAMM,EAAyB,aAC7B,CAAC,CAAE,IAAAL,EAAM,IAAK,MAAAC,EAAQ,SAAU,QAAAC,EAAU,SAAU,UAAAT,EAAW,GAAGJ,CAAM,EAAGc,IACzE,gBAACC,EAAA,CACC,IAAKD,EACL,IAAKH,EACL,MAAOC,EACP,QAASC,EACT,UAAWJ,EAAW,uBAAwBL,CAAS,EACvD,KAAK,aAEL,aAAYJ,EAAM,iBAAiB,IAAM,OAAY,OAAS,OAC7D,GAAGA,EACN,CAEJ,EACAgB,EAAiB,YAAc,oBAO/B,IAAMC,EAAsB,aAC1B,CAAC,CAAE,IAAAN,EAAM,IAAK,MAAAC,EAAQ,SAAU,QAAAC,EAAU,MAAO,UAAAT,EAAW,GAAGJ,CAAM,EAAGc,IACtE,gBAACC,EAAA,CACC,IAAKD,EACL,IAAKH,EACL,MAAOC,EACP,QAASC,EACT,UAAWJ,EAAW,oBAAqBL,CAAS,EACnD,GAAGJ,EACN,CAEJ,EACAiB,EAAc,YAAc",
6
+ "names": ["navbar_exports", "__export", "NavbarActions", "NavbarLogo", "NavbarNavigation", "NavbarRoot", "React", "classNames", "NavbarRoot", "ownProps", "forwardedRef", "props", "useThemeSizeProps", "navbarRootPropDefs", "children", "className", "rootProps", "extractProps", "position", "size", "classNames", "NavbarLogo", "gap", "align", "justify", "ref", "Flex", "NavbarNavigation", "NavbarActions"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as o}from"./chunk-HIEGLLY7.js";import{a as s}from"./chunk-BJUCBOGU.js";import{a as i}from"./chunk-ELAW7ZUG.js";import*as e from"react";import d from"classnames";var u=e.forwardRef((t,l)=>{let{className:m,children:n,loading:f,...p}=i(t,o);if(!f)return n;let r=p["aria-label"]!==void 0||p["aria-labelledby"]!==void 0,a=e.createElement("span",{role:r?"status":void 0,"aria-hidden":r?void 0:!0,...p,ref:l,className:d("kui-Spinner",m)},e.createElement("span",{className:"kui-SpinnerWheel"},e.createElement("span",{className:"kui-SpinnerLeaf"}),e.createElement("span",{className:"kui-SpinnerLeaf"}),e.createElement("span",{className:"kui-SpinnerLeaf"}),e.createElement("span",{className:"kui-SpinnerLeaf"}),e.createElement("span",{className:"kui-SpinnerLeaf"}),e.createElement("span",{className:"kui-SpinnerLeaf"}),e.createElement("span",{className:"kui-SpinnerLeaf"}),e.createElement("span",{className:"kui-SpinnerLeaf"})));return n===void 0?a:e.createElement(s,{asChild:!0,position:"relative",align:"center",justify:"center"},e.createElement("span",{"aria-busy":"true"},e.createElement("span",{"aria-hidden":!0,className:"kui-SpinnerHiddenChildren",inert:void 0},n),e.createElement(s,{asChild:!0,align:"center",justify:"center",position:"absolute",inset:"0"},e.createElement("span",null,a))))});u.displayName="Spinner";export{u as a};
2
+ //# sourceMappingURL=chunk-H5G7UECV.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/spinner.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\n\nimport { Flex } from './flex.js';\nimport { spinnerPropDefs } from './spinner.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype SpinnerElement = React.ElementRef<'span'>;\ntype SpinnerOwnProps = GetPropDefTypes<typeof spinnerPropDefs>;\ninterface SpinnerProps\n extends ComponentPropsWithout<'span', RemovedProps>,\n SpinnerOwnProps {}\nconst Spinner = React.forwardRef<SpinnerElement, SpinnerProps>((props, forwardedRef) => {\n const { className, children, loading, ...spinnerProps } = extractProps(\n props,\n spinnerPropDefs\n );\n\n if (!loading) return children;\n\n // Decorative unless named: a named spinner is a status message, an unnamed one is hidden.\n const named =\n spinnerProps['aria-label'] !== undefined || spinnerProps['aria-labelledby'] !== undefined;\n\n const spinner = (\n <span\n role={named ? 'status' : undefined}\n aria-hidden={named ? undefined : true}\n {...spinnerProps}\n ref={forwardedRef} className={classNames('kui-Spinner', className)}>\n <span className=\"kui-SpinnerWheel\">\n <span className=\"kui-SpinnerLeaf\" />\n <span className=\"kui-SpinnerLeaf\" />\n <span className=\"kui-SpinnerLeaf\" />\n <span className=\"kui-SpinnerLeaf\" />\n <span className=\"kui-SpinnerLeaf\" />\n <span className=\"kui-SpinnerLeaf\" />\n <span className=\"kui-SpinnerLeaf\" />\n <span className=\"kui-SpinnerLeaf\" />\n </span>\n </span>\n );\n\n if (children === undefined) return spinner;\n\n return (\n <Flex asChild position=\"relative\" align=\"center\" justify=\"center\">\n <span aria-busy=\"true\">\n {/**\n * `display: contents` removes the content from the accessibility tree in some browsers,\n * so we force remove it with `aria-hidden`\n */}\n <span aria-hidden className=\"kui-SpinnerHiddenChildren\" inert={undefined}>\n {children}\n </span>\n\n <Flex asChild align=\"center\" justify=\"center\" position=\"absolute\" inset=\"0\">\n <span>{spinner}</span>\n </Flex>\n </span>\n </Flex>\n );\n});\nSpinner.displayName = 'Spinner';\n\nexport { Spinner };\nexport type { SpinnerProps };\n"],
5
+ "mappings": "wHAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aAcvB,IAAMC,EAAgB,aAAyC,CAACC,EAAOC,IAAiB,CACtF,GAAM,CAAE,UAAAC,EAAW,SAAAC,EAAU,QAAAC,EAAS,GAAGC,CAAa,EAAIC,EACxDN,EACAO,CACF,EAEA,GAAI,CAACH,EAAS,OAAOD,EAGrB,IAAMK,EACJH,EAAa,YAAY,IAAM,QAAaA,EAAa,iBAAiB,IAAM,OAE5EI,EACJ,gBAAC,QACC,KAAMD,EAAQ,SAAW,OACzB,cAAaA,EAAQ,OAAY,GAChC,GAAGH,EACJ,IAAKJ,EAAc,UAAWS,EAAW,cAAeR,CAAS,GACjE,gBAAC,QAAK,UAAU,oBACd,gBAAC,QAAK,UAAU,kBAAkB,EAClC,gBAAC,QAAK,UAAU,kBAAkB,EAClC,gBAAC,QAAK,UAAU,kBAAkB,EAClC,gBAAC,QAAK,UAAU,kBAAkB,EAClC,gBAAC,QAAK,UAAU,kBAAkB,EAClC,gBAAC,QAAK,UAAU,kBAAkB,EAClC,gBAAC,QAAK,UAAU,kBAAkB,EAClC,gBAAC,QAAK,UAAU,kBAAkB,CACpC,CACF,EAGF,OAAIC,IAAa,OAAkBM,EAGjC,gBAACE,EAAA,CAAK,QAAO,GAAC,SAAS,WAAW,MAAM,SAAS,QAAQ,UACvD,gBAAC,QAAK,YAAU,QAKd,gBAAC,QAAK,cAAW,GAAC,UAAU,4BAA4B,MAAO,QAC5DR,CACH,EAEA,gBAACQ,EAAA,CAAK,QAAO,GAAC,MAAM,SAAS,QAAQ,SAAS,SAAS,WAAW,MAAM,KACtE,gBAAC,YAAMF,CAAQ,CACjB,CACF,CACF,CAEJ,CAAC,EACDV,EAAQ,YAAc",
6
+ "names": ["React", "classNames", "Spinner", "props", "forwardedRef", "className", "children", "loading", "spinnerProps", "extractProps", "spinnerPropDefs", "named", "spinner", "classNames", "Flex"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as d}from"./chunk-KEGCX5VM.js";import{a as R}from"./chunk-4P6TKZCA.js";import{b as u,d as f}from"./chunk-3YLYGKFB.js";import*as e from"react";import z from"classnames";var v=e.createContext(void 0),C={values:["1","2","3","4"]},N=e.forwardRef(({kind:r,size:o="2",color:t="gray",className:c,children:a,trailing:s,leading:i,...l},n)=>e.createElement("div",{role:"status","aria-live":"polite",...l,ref:n,className:z("kui-NoticeRoot",`kui-r-size-${o}`,c),"data-kind":r,"data-accent-color":t},i?e.createElement("span",{className:"kui-NoticeIcon","aria-hidden":!0},i):null,e.createElement(R,{as:"div",size:o,className:"kui-NoticeText"},a),s));N.displayName="Strip";var g=e.forwardRef(({icon:r,action:o,onDismiss:t,dismissLabel:c="Dismiss",size:a,...s},i)=>{let l=e.useContext(v),n=f(a??l,C),p=o||t?e.createElement("span",{className:"kui-NoticeActions"},o?e.createElement(u.Provider,{value:n},o):null,t?e.createElement(d,{iconOnly:!0,size:n,variant:"ghost",color:"gray","aria-label":c,className:"kui-NoticeDismiss",onClick:t},e.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none","aria-hidden":!0},e.createElement("path",{d:"M4 4l7 7M11 4l-7 7",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}))):null):null;return e.createElement(N,{...s,size:n,ref:i,kind:"notice",leading:r,trailing:p})});g.displayName="Notice";var k=e.forwardRef(({confirmLabel:r,cancelLabel:o="Not now",onConfirm:t,onCancel:c,busy:a=!1,size:s,color:i="gray",...l},n)=>{let p=e.useContext(v),m=f(s??p,C);return e.createElement(N,{...l,size:m,color:i,ref:n,kind:"confirmation",trailing:e.createElement("span",{className:"kui-NoticeActions"},e.createElement(d,{size:m,variant:"ghost",color:"gray",disabled:a,onClick:c},o),e.createElement(d,{size:m,variant:"solid",color:i,loading:a,onClick:t},r))})});k.displayName="Confirmation";export{v as a,g as b,k as c};
2
+ //# sourceMappingURL=chunk-I4FLQELQ.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/notice.tsx"],
4
+ "sourcesContent": ["'use client';\n\n/**\n * Notice and Confirmation \u2014 what the app tells the person while it is true.\n *\n * Two questions place every message: what is it about, and what made it appear.\n *\n * - **Notice** \u2014 a condition that is true now, which nobody just caused: a usage limit, a\n * connection lost, a goal that finished. It takes space in the layout and never floats, so it\n * cannot cover what it is about. At most one action, and that action FIXES the condition. A\n * dismiss button only ACKNOWLEDGES it, and the app owns that state (`onDismiss`), because a\n * component cannot remember a dismissal across a reload.\n * - **Confirmation** \u2014 a question that waits for an answer: a quiet no before a loud yes, and no\n * dismiss button, because closing a question does not answer it. It never takes focus, so a\n * person can answer in the composer instead.\n *\n * Placement is the caller's. In a chat, both go in `Chatbar.Root`'s `notices`.\n * A notice with no action and no dismiss button is just a sentence: use `Text`.\n */\n\nimport * as React from 'react';\nimport classNames from 'classnames';\n\nimport { Button } from './button.js';\nimport { Text } from './text.js';\nimport { ThemeSizeContext, useThemeSize } from '../helpers/theme-size.js';\nimport { accentColorPropDef } from '../props/color.prop.js';\n\ntype NoticeSize = '1' | '2' | '3' | '4';\n\n/** The size a notice takes when it doesn't set one. `Chatbar.Root` provides its own size here. */\nconst NoticeSizeContext = React.createContext<NoticeSize | undefined>(undefined);\n\n/** Notice's own range, the Theme's four sizes. */\nconst noticeSizePropDef = { values: ['1', '2', '3', '4'] as const };\ntype NoticeColor = (typeof accentColorPropDef)['color']['values'][number];\n\ninterface StripProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'color' | 'children'> {\n /** Padding, text and button size. Defaults to the nearest Theme's size. */\n size?: NoticeSize;\n /**\n * The category of the message, not its volume. Default `gray`. Use a colour only when it adds a\n * fact the words don't already give, such as `red` for something that stops the next step.\n */\n color?: NoticeColor;\n /** The message. */\n children: React.ReactNode;\n}\n\ninterface NoticeProps extends StripProps {\n /** An icon before the message. It is hidden from assistive technology. */\n icon?: React.ReactNode;\n /**\n * One action that fixes the condition, such as `<Button>Add credits</Button>`. A control in it\n * that sets no `size` takes the notice's size.\n */\n action?: React.ReactNode;\n /**\n * Called when the person presses the dismiss button, which shows only when this is set.\n * Dismissing hides the message; it does not fix the condition. Remove the notice and remember\n * the choice in your app.\n */\n onDismiss?: () => void;\n /** Accessible name of the dismiss button. Default \"Dismiss\". */\n dismissLabel?: string;\n}\n\ninterface ConfirmationProps extends StripProps {\n /** The yes. Name the action, such as \"Run\" or \"Allow up to $18\". */\n confirmLabel: string;\n /** The no. Default \"Not now\". */\n cancelLabel?: string;\n onConfirm: () => void;\n onCancel: () => void;\n /** The yes is running: it shows a spinner and the no is disabled. */\n busy?: boolean;\n}\n\nconst Strip = React.forwardRef<HTMLDivElement, StripProps & { kind: 'notice' | 'confirmation'; trailing: React.ReactNode; leading?: React.ReactNode }>(\n ({ kind, size = '2', color = 'gray', className, children, trailing, leading, ...props }, forwardedRef) => (\n <div\n role=\"status\"\n aria-live=\"polite\"\n {...props}\n ref={forwardedRef}\n className={classNames('kui-NoticeRoot', `kui-r-size-${size}`, className)}\n data-kind={kind}\n data-accent-color={color}\n >\n {leading ? (\n <span className=\"kui-NoticeIcon\" aria-hidden>\n {leading}\n </span>\n ) : null}\n <Text as=\"div\" size={size} className=\"kui-NoticeText\">\n {children}\n </Text>\n {trailing}\n </div>\n ),\n);\nStrip.displayName = 'Strip';\n\n/** A condition that is true now, with at most one action that fixes it. */\nconst Notice = React.forwardRef<HTMLDivElement, NoticeProps>(({ icon, action, onDismiss, dismissLabel = 'Dismiss', size: sizeProp, ...props }, forwardedRef) => {\n const contextSize = React.useContext(NoticeSizeContext);\n const size = useThemeSize(sizeProp ?? contextSize, noticeSizePropDef);\n const trailing =\n action || onDismiss ? (\n <span className=\"kui-NoticeActions\">\n {action ? <ThemeSizeContext.Provider value={size}>{action}</ThemeSizeContext.Provider> : null}\n {onDismiss ? (\n <Button iconOnly size={size} variant=\"ghost\" color=\"gray\" aria-label={dismissLabel} className=\"kui-NoticeDismiss\" onClick={onDismiss}>\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" aria-hidden>\n <path d=\"M4 4l7 7M11 4l-7 7\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </Button>\n ) : null}\n </span>\n ) : null;\n return <Strip {...props} size={size} ref={forwardedRef} kind=\"notice\" leading={icon} trailing={trailing} />;\n});\nNotice.displayName = 'Notice';\n\n/** A question that waits for an answer: a quiet no, a loud yes, and no dismiss button. */\nconst Confirmation = React.forwardRef<HTMLDivElement, ConfirmationProps>(\n ({ confirmLabel, cancelLabel = 'Not now', onConfirm, onCancel, busy = false, size: sizeProp, color = 'gray', ...props }, forwardedRef) => {\n const contextSize = React.useContext(NoticeSizeContext);\n const size = useThemeSize(sizeProp ?? contextSize, noticeSizePropDef);\n return (\n <Strip\n {...props}\n size={size}\n color={color}\n ref={forwardedRef}\n kind=\"confirmation\"\n trailing={\n <span className=\"kui-NoticeActions\">\n <Button size={size} variant=\"ghost\" color=\"gray\" disabled={busy} onClick={onCancel}>\n {cancelLabel}\n </Button>\n <Button size={size} variant=\"solid\" color={color} loading={busy} onClick={onConfirm}>\n {confirmLabel}\n </Button>\n </span>\n }\n />\n );\n },\n);\nConfirmation.displayName = 'Confirmation';\n\nexport { Notice, Confirmation, NoticeSizeContext };\nexport type { NoticeProps, ConfirmationProps };\n"],
5
+ "mappings": "+HAoBA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aAUvB,IAAMC,EAA0B,gBAAsC,MAAS,EAGzEC,EAAoB,CAAE,OAAQ,CAAC,IAAK,IAAK,IAAK,GAAG,CAAW,EA4C5DC,EAAc,aAClB,CAAC,CAAE,KAAAC,EAAM,KAAAC,EAAO,IAAK,MAAAC,EAAQ,OAAQ,UAAAC,EAAW,SAAAC,EAAU,SAAAC,EAAU,QAAAC,EAAS,GAAGC,CAAM,EAAGC,IACvF,gBAAC,OACC,KAAK,SACL,YAAU,SACT,GAAGD,EACJ,IAAKC,EACL,UAAWC,EAAW,iBAAkB,cAAcR,CAAI,GAAIE,CAAS,EACvE,YAAWH,EACX,oBAAmBE,GAElBI,EACC,gBAAC,QAAK,UAAU,iBAAiB,cAAW,IACzCA,CACH,EACE,KACJ,gBAACI,EAAA,CAAK,GAAG,MAAM,KAAMT,EAAM,UAAU,kBAClCG,CACH,EACCC,CACH,CAEJ,EACAN,EAAM,YAAc,QAGpB,IAAMY,EAAe,aAAwC,CAAC,CAAE,KAAAC,EAAM,OAAAC,EAAQ,UAAAC,EAAW,aAAAC,EAAe,UAAW,KAAMC,EAAU,GAAGT,CAAM,EAAGC,IAAiB,CAC9J,IAAMS,EAAoB,aAAWpB,CAAiB,EAChDI,EAAOiB,EAAaF,GAAYC,EAAanB,CAAiB,EAC9DO,EACJQ,GAAUC,EACR,gBAAC,QAAK,UAAU,qBACbD,EAAS,gBAACM,EAAiB,SAAjB,CAA0B,MAAOlB,GAAOY,CAAO,EAA+B,KACxFC,EACC,gBAACM,EAAA,CAAO,SAAQ,GAAC,KAAMnB,EAAM,QAAQ,QAAQ,MAAM,OAAO,aAAYc,EAAc,UAAU,oBAAoB,QAASD,GACzH,gBAAC,OAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,cAAW,IACrE,gBAAC,QAAK,EAAE,qBAAqB,OAAO,eAAe,YAAY,MAAM,cAAc,QAAQ,CAC7F,CACF,EACE,IACN,EACE,KACN,OAAO,gBAACf,EAAA,CAAO,GAAGQ,EAAO,KAAMN,EAAM,IAAKO,EAAc,KAAK,SAAS,QAASI,EAAM,SAAUP,EAAU,CAC3G,CAAC,EACDM,EAAO,YAAc,SAGrB,IAAMU,EAAqB,aACzB,CAAC,CAAE,aAAAC,EAAc,YAAAC,EAAc,UAAW,UAAAC,EAAW,SAAAC,EAAU,KAAAC,EAAO,GAAO,KAAMV,EAAU,MAAAd,EAAQ,OAAQ,GAAGK,CAAM,EAAGC,IAAiB,CACxI,IAAMS,EAAoB,aAAWpB,CAAiB,EAChDI,EAAOiB,EAAaF,GAAYC,EAAanB,CAAiB,EACpE,OACA,gBAACC,EAAA,CACE,GAAGQ,EACJ,KAAMN,EACN,MAAOC,EACP,IAAKM,EACL,KAAK,eACL,SACE,gBAAC,QAAK,UAAU,qBACd,gBAACY,EAAA,CAAO,KAAMnB,EAAM,QAAQ,QAAQ,MAAM,OAAO,SAAUyB,EAAM,QAASD,GACvEF,CACH,EACA,gBAACH,EAAA,CAAO,KAAMnB,EAAM,QAAQ,QAAQ,MAAOC,EAAO,QAASwB,EAAM,QAASF,GACvEF,CACH,CACF,EAEJ,CAEF,CACF,EACAD,EAAa,YAAc",
6
+ "names": ["React", "classNames", "NoticeSizeContext", "noticeSizePropDef", "Strip", "kind", "size", "color", "className", "children", "trailing", "leading", "props", "forwardedRef", "classNames", "Text", "Notice", "icon", "action", "onDismiss", "dismissLabel", "sizeProp", "contextSize", "useThemeSize", "ThemeSizeContext", "Button", "Confirmation", "confirmLabel", "cancelLabel", "onConfirm", "onCancel", "busy"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import*as e from"react";import{Checkbox as s,Direction as S}from"radix-ui";import{Context as V,Primitive as q,useControllableState as N}from"radix-ui/internal";var{useDirection:D}=S,l="CheckboxGroup",[U,T]=V.createContextScope(l,[s.createCheckboxScope]),x=s.createCheckboxScope(),[W,A]=U(l),m=e.forwardRef((t,n)=>{let{__scopeCheckboxGroup:r,name:i,defaultValue:c,value:o,required:u=!1,disabled:a=!1,orientation:b,dir:C,loop:k,onValueChange:G,...I}=t,R=D(C),[y=[],p]=N({prop:o,defaultProp:c??[],onChange:G}),g=e.useCallback(d=>p((h=[])=>[...h,d]),[p]),E=e.useCallback(d=>p((h=[])=>h.filter(_=>_!==d)),[p]);return e.createElement(W,{scope:r,name:i,required:u,disabled:a,value:y,onItemCheck:g,onItemUncheck:E},e.createElement(q.div,{role:"group","data-disabled":a?"":void 0,dir:R,...I,ref:n}))});m.displayName=l;var P="CheckboxGroupItem",f=e.forwardRef((t,n)=>{let{__scopeCheckboxGroup:r,disabled:i,...c}=t,o=A(P,r),u=o.disabled||i,a=x(r),b=o.value?.includes(c.value),C=o.required&&(o.value?.length??0)===0;return e.createElement(s.Root,{name:o.name,disabled:u,required:C,checked:b,...a,...c,ref:n,onCheckedChange:k=>{k?o.onItemCheck(t.value):o.onItemUncheck(t.value)}})});f.displayName=P;var M="CheckboxGroupIndicator",v=e.forwardRef((t,n)=>{let{__scopeCheckboxGroup:r,...i}=t,c=x(r);return e.createElement(s.Indicator,{...c,...i,ref:n})});v.displayName=M;var z=m,B=f,H=v;export{T as a,m as b,f as c,v as d,z as e,B as f,H as g};
2
+ //# sourceMappingURL=chunk-JYQGCXXI.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/checkbox-group.primitive.tsx"],
4
+ "sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport { Checkbox as CheckboxPrimitive, Direction } from 'radix-ui';\nimport { Context, Primitive, useControllableState } from 'radix-ui/internal';\n\nconst { useDirection } = Direction;\n\n/* -------------------------------------------------------------------------------------------------\n * CheckboxGroup\n * -----------------------------------------------------------------------------------------------*/\nconst CHECKBOX_GROUP_NAME = 'CheckboxGroup';\n\ntype ScopedProps<P> = P & { __scopeCheckboxGroup?: Context.Scope };\nconst [createCheckboxGroupContext, createCheckboxGroupScope] = Context.createContextScope(\n CHECKBOX_GROUP_NAME,\n [CheckboxPrimitive.createCheckboxScope],\n);\nconst useCheckboxScope = CheckboxPrimitive.createCheckboxScope();\n\ntype CheckboxGroupContextValue = {\n name?: string;\n required: boolean;\n disabled: boolean;\n value?: string[];\n onItemCheck(value: string): void;\n onItemUncheck(value: string): void;\n};\n\nconst [CheckboxGroupProvider, useCheckboxGroupContext] =\n createCheckboxGroupContext<CheckboxGroupContextValue>(CHECKBOX_GROUP_NAME);\n\ntype CheckboxGroupElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface CheckboxGroupProps extends PrimitiveDivProps {\n name?: CheckboxGroupContextValue['name'];\n required?: React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>['required'];\n disabled?: React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>['disabled'];\n dir?: 'ltr' | 'rtl';\n /**\n * @deprecated Has no effect. Each checkbox is its own tab stop, as with native checkboxes,\n * so there is no arrow-key navigation to orient.\n */\n orientation?: 'horizontal' | 'vertical';\n /**\n * @deprecated Has no effect. Each checkbox is its own tab stop, as with native checkboxes,\n * so there is no arrow-key navigation to loop.\n */\n loop?: boolean;\n defaultValue?: string[];\n value?: CheckboxGroupContextValue['value'];\n onValueChange?: (value: string[]) => void;\n}\n\nconst CheckboxGroup = React.forwardRef<CheckboxGroupElement, CheckboxGroupProps>(\n (props: ScopedProps<CheckboxGroupProps>, forwardedRef) => {\n const {\n __scopeCheckboxGroup,\n name,\n defaultValue,\n value: valueProp,\n required = false,\n disabled = false,\n orientation: _orientation,\n dir,\n loop: _loop,\n onValueChange,\n ...groupProps\n } = props;\n const direction = useDirection(dir);\n const [value = [], setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? [],\n onChange: onValueChange,\n });\n\n const handleItemCheck = React.useCallback(\n (itemValue: string) => setValue((prevValue = []) => [...prevValue, itemValue]),\n [setValue],\n );\n\n const handleItemUncheck = React.useCallback(\n (itemValue: string) =>\n setValue((prevValue = []) => prevValue.filter((value) => value !== itemValue)),\n [setValue],\n );\n\n return (\n <CheckboxGroupProvider\n scope={__scopeCheckboxGroup}\n name={name}\n required={required}\n disabled={disabled}\n value={value}\n onItemCheck={handleItemCheck}\n onItemUncheck={handleItemUncheck}\n >\n <Primitive.div\n role=\"group\"\n data-disabled={disabled ? '' : undefined}\n dir={direction}\n {...groupProps}\n ref={forwardedRef}\n />\n </CheckboxGroupProvider>\n );\n },\n);\n\nCheckboxGroup.displayName = CHECKBOX_GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * CheckboxGroupItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'CheckboxGroupItem';\n\ntype CheckboxGroupItemElement = React.ElementRef<typeof CheckboxPrimitive.Root>;\ntype CheckboxProps = React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>;\ninterface CheckboxGroupItemProps\n extends Omit<CheckboxProps, 'checked' | 'defaultChecked' | 'onCheckedChange' | 'name'> {\n value: string;\n}\n\nconst CheckboxGroupItem = React.forwardRef<CheckboxGroupItemElement, CheckboxGroupItemProps>(\n (props: ScopedProps<CheckboxGroupItemProps>, forwardedRef) => {\n const { __scopeCheckboxGroup, disabled, ...itemProps } = props;\n const context = useCheckboxGroupContext(ITEM_NAME, __scopeCheckboxGroup);\n const isDisabled = context.disabled || disabled;\n const checkboxScope = useCheckboxScope(__scopeCheckboxGroup);\n const checked = context.value?.includes(itemProps.value);\n // A required group needs at least one box checked, not every box: the items are\n // required only while none is checked.\n const isRequired = context.required && (context.value?.length ?? 0) === 0;\n\n return (\n <CheckboxPrimitive.Root\n name={context.name}\n disabled={isDisabled}\n required={isRequired}\n checked={checked}\n {...checkboxScope}\n {...itemProps}\n ref={forwardedRef}\n onCheckedChange={(checked) => {\n if (checked) {\n context.onItemCheck(props.value);\n } else {\n context.onItemUncheck(props.value);\n }\n }}\n />\n );\n },\n);\n\nCheckboxGroupItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * CheckboxGroupIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDICATOR_NAME = 'CheckboxGroupIndicator';\n\ntype CheckboxGroupIndicatorElement = React.ElementRef<typeof CheckboxPrimitive.Indicator>;\ntype CheckboxIndicatorProps = React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Indicator>;\ninterface CheckboxGroupIndicatorProps extends CheckboxIndicatorProps {}\n\nconst CheckboxGroupIndicator = React.forwardRef<\n CheckboxGroupIndicatorElement,\n CheckboxGroupIndicatorProps\n>((props: ScopedProps<CheckboxGroupIndicatorProps>, forwardedRef) => {\n const { __scopeCheckboxGroup, ...indicatorProps } = props;\n const checkboxScope = useCheckboxScope(__scopeCheckboxGroup);\n return <CheckboxPrimitive.Indicator {...checkboxScope} {...indicatorProps} ref={forwardedRef} />;\n});\n\nCheckboxGroupIndicator.displayName = INDICATOR_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\nconst Root = CheckboxGroup;\nconst Item = CheckboxGroupItem;\nconst Indicator = CheckboxGroupIndicator;\n\nexport {\n createCheckboxGroupScope,\n //\n CheckboxGroup,\n CheckboxGroupItem,\n CheckboxGroupIndicator,\n //\n Root,\n Item,\n Indicator,\n};\nexport type { CheckboxGroupProps, CheckboxGroupItemProps, CheckboxGroupIndicatorProps };\n"],
5
+ "mappings": "AAEA,UAAYA,MAAW,QACvB,OAAS,YAAYC,EAAmB,aAAAC,MAAiB,WACzD,OAAS,WAAAC,EAAS,aAAAC,EAAW,wBAAAC,MAA4B,oBAEzD,GAAM,CAAE,aAAAC,CAAa,EAAIJ,EAKnBK,EAAsB,gBAGtB,CAACC,EAA4BC,CAAwB,EAAIN,EAAQ,mBACrEI,EACA,CAACN,EAAkB,mBAAmB,CACxC,EACMS,EAAmBT,EAAkB,oBAAoB,EAWzD,CAACU,EAAuBC,CAAuB,EACnDJ,EAAsDD,CAAmB,EAwBrEM,EAAsB,aAC1B,CAACC,EAAwCC,IAAiB,CACxD,GAAM,CACJ,qBAAAC,EACA,KAAAC,EACA,aAAAC,EACA,MAAOC,EACP,SAAAC,EAAW,GACX,SAAAC,EAAW,GACX,YAAaC,EACb,IAAAC,EACA,KAAMC,EACN,cAAAC,EACA,GAAGC,CACL,EAAIZ,EACEa,EAAYrB,EAAaiB,CAAG,EAC5B,CAACK,EAAQ,CAAC,EAAGC,CAAQ,EAAIxB,EAAqB,CAClD,KAAMc,EACN,YAAaD,GAAgB,CAAC,EAC9B,SAAUO,CACZ,CAAC,EAEKK,EAAwB,cAC3BC,GAAsBF,EAAS,CAACG,EAAY,CAAC,IAAM,CAAC,GAAGA,EAAWD,CAAS,CAAC,EAC7E,CAACF,CAAQ,CACX,EAEMI,EAA0B,cAC7BF,GACCF,EAAS,CAACG,EAAY,CAAC,IAAMA,EAAU,OAAQJ,GAAUA,IAAUG,CAAS,CAAC,EAC/E,CAACF,CAAQ,CACX,EAEA,OACE,gBAAClB,EAAA,CACC,MAAOK,EACP,KAAMC,EACN,SAAUG,EACV,SAAUC,EACV,MAAOO,EACP,YAAaE,EACb,cAAeG,GAEf,gBAAC7B,EAAU,IAAV,CACC,KAAK,QACL,gBAAeiB,EAAW,GAAK,OAC/B,IAAKM,EACJ,GAAGD,EACJ,IAAKX,EACP,CACF,CAEJ,CACF,EAEAF,EAAc,YAAcN,EAM5B,IAAM2B,EAAY,oBASZC,EAA0B,aAC9B,CAACrB,EAA4CC,IAAiB,CAC5D,GAAM,CAAE,qBAAAC,EAAsB,SAAAK,EAAU,GAAGe,CAAU,EAAItB,EACnDuB,EAAUzB,EAAwBsB,EAAWlB,CAAoB,EACjEsB,EAAaD,EAAQ,UAAYhB,EACjCkB,EAAgB7B,EAAiBM,CAAoB,EACrDwB,EAAUH,EAAQ,OAAO,SAASD,EAAU,KAAK,EAGjDK,EAAaJ,EAAQ,WAAaA,EAAQ,OAAO,QAAU,KAAO,EAExE,OACE,gBAACpC,EAAkB,KAAlB,CACC,KAAMoC,EAAQ,KACd,SAAUC,EACV,SAAUG,EACV,QAASD,EACR,GAAGD,EACH,GAAGH,EACJ,IAAKrB,EACL,gBAAkByB,GAAY,CACxBA,EACFH,EAAQ,YAAYvB,EAAM,KAAK,EAE/BuB,EAAQ,cAAcvB,EAAM,KAAK,CAErC,EACF,CAEJ,CACF,EAEAqB,EAAkB,YAAcD,EAMhC,IAAMQ,EAAiB,yBAMjBC,EAA+B,aAGnC,CAAC7B,EAAiDC,IAAiB,CACnE,GAAM,CAAE,qBAAAC,EAAsB,GAAG4B,CAAe,EAAI9B,EAC9CyB,EAAgB7B,EAAiBM,CAAoB,EAC3D,OAAO,gBAACf,EAAkB,UAAlB,CAA6B,GAAGsC,EAAgB,GAAGK,EAAgB,IAAK7B,EAAc,CAChG,CAAC,EAED4B,EAAuB,YAAcD,EAIrC,IAAMG,EAAOhC,EACPiC,EAAOX,EACPY,EAAYJ",
6
+ "names": ["React", "CheckboxPrimitive", "Direction", "Context", "Primitive", "useControllableState", "useDirection", "CHECKBOX_GROUP_NAME", "createCheckboxGroupContext", "createCheckboxGroupScope", "useCheckboxScope", "CheckboxGroupProvider", "useCheckboxGroupContext", "CheckboxGroup", "props", "forwardedRef", "__scopeCheckboxGroup", "name", "defaultValue", "valueProp", "required", "disabled", "_orientation", "dir", "_loop", "onValueChange", "groupProps", "direction", "value", "setValue", "handleItemCheck", "itemValue", "prevValue", "handleItemUncheck", "ITEM_NAME", "CheckboxGroupItem", "itemProps", "context", "isDisabled", "checkboxScope", "checked", "isRequired", "INDICATOR_NAME", "CheckboxGroupIndicator", "indicatorProps", "Root", "Item", "Indicator"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as x}from"./chunk-KL73COYX.js";import{a as X,b as $,c as oo,e as G,f as eo,l as to}from"./chunk-432YLNB3.js";import{a as E}from"./chunk-KEGCX5VM.js";import{a as Q}from"./chunk-4P6TKZCA.js";import{g as J}from"./chunk-4ZOVV3TY.js";import{a as q}from"./chunk-7FTUTUMD.js";import{d as I}from"./chunk-3YLYGKFB.js";import{a as Z}from"./chunk-ELAW7ZUG.js";import*as o from"react";import h from"classnames";import{Toolbar as O}from"radix-ui";var g=o.createContext(null),H=o.createContext(null),C=o.createContext(!1);function Do(){return o.useContext(C)}var B=typeof window<"u"?o.useLayoutEffect:o.useEffect,F=o.forwardRef((e,t)=>{let r=J(),s=I(e.size??r??void 0,x.size),a=e.orientation??x.orientation.default,{className:l,orientation:n,backdrop:i=!1,children:u,...d}=Z({...e,size:s},x,q),p=o.useMemo(()=>({size:s,orientation:a,backdrop:i}),[s,a,i]);return o.createElement(O.Root,{...d,ref:t,orientation:a,"data-backdrop":i||void 0,className:h("kui-Toolbar",l)},o.createElement(g.Provider,{value:p},u))});F.displayName="Toolbar";var ro=o.forwardRef(({className:e,disabled:t=!1,children:r,...s},a)=>{let l=o.useContext(g),n=o.useContext(C),i=o.useMemo(()=>({disabled:t}),[t]);return n?o.createElement(eo,{...s,ref:a,className:e},o.createElement(H.Provider,{value:i},r)):o.createElement("div",{role:"group","data-orientation":l?.orientation??"horizontal","data-disabled":t||void 0,...s,ref:a,className:h("kui-ToolbarGroup",e)},o.createElement(H.Provider,{value:i},r))});ro.displayName="Toolbar.Group";function uo(e){return e===!0||e==="true"}function po(e){return o.isValidElement(e)&&e.type==="button"}var A=o.forwardRef((e,t)=>{let r=o.useContext(g),s=o.useContext(H),a=o.useContext(C),{iconOnly:l,size:n,variant:i,emphasis:u,color:d,disabled:p,asChild:R,onKeyDown:S,...f}=e,v=p||s?.disabled||void 0;if(a)return o.createElement(no,{id:f.id,className:f.className,style:f.style,onClick:f.onClick,"aria-label":f["aria-label"],ref:t,asChild:R,iconOnly:l,disabled:v,color:d},f.children);let M=r?.orientation==="vertical"&&S?y=>{y.key==="ArrowDown"||y.key==="ArrowUp"||S(y)}:S,k=uo(e["aria-pressed"]),c="data-state"in e||e["aria-pressed"]===void 0?{}:{"data-state":k?"on":"off"},b={size:n??r?.size,...u!==void 0?{emphasis:u}:{variant:i??(s?"ghost":r?.backdrop?"raised":"soft")},color:d??(i||u?void 0:"gray"),...c},T={...f,...l?{iconOnly:!0}:{},...R?{asChild:!0}:{},...M?{onKeyDown:M}:{},...b};return r?R&&!po(f.children)?o.createElement(O.Link,{asChild:!0,ref:t},o.createElement(E,{...T,disabled:v})):o.createElement(O.Button,{asChild:!0,ref:t,disabled:v},o.createElement(E,{...T})):o.createElement(E,{...T,ref:t,disabled:v})});A.displayName="Toolbar.Button";var no=o.forwardRef(({asChild:e,iconOnly:t,disabled:r,color:s,children:a,"aria-label":l,...n},i)=>{let u=t?l:void 0,d={...n,...t?{}:l?{"aria-label":l}:{},disabled:r,...s?{color:s}:{}};if(e&&o.isValidElement(a)){let p=u?o.cloneElement(a,void 0,a.props.children,o.createElement("span",null,u)):a;return o.createElement(G,{...d,ref:i,asChild:!0},p)}return o.createElement(G,{...d,ref:i},a,u)});no.displayName="Toolbar.OverflowItem";function fo(){return o.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"currentcolor","aria-hidden":!0,xmlns:"http://www.w3.org/2000/svg"},o.createElement("circle",{cx:"3.25",cy:"8",r:"1.25"}),o.createElement("circle",{cx:"8",cy:"8",r:"1.25"}),o.createElement("circle",{cx:"12.75",cy:"8",r:"1.25"}))}var ao=o.forwardRef(({label:e="More",className:t,children:r,...s},a)=>{let l=o.Children.toArray(r),n=l.length,i=o.useRef(null),u=o.useRef([]),d=o.useRef(0),[p,R]=o.useState(n),[S,f]=o.useState(0),[v,M]=o.useState(n);v!==n&&(M(n),R(n)),B(()=>{u.current=[]},[n]),B(()=>{let c=i.current;if(!c)return;let b=Array.from(c.children),T=Math.min(p,n);for(let m=0;m<T;m++){let P=b[m];P&&(u.current[m]=P.offsetWidth)}let y=b[T];y&&(d.current=y.offsetWidth);let z=Number.parseFloat(getComputedStyle(c).columnGap)||0,j=c.clientWidth,K=0,V=0;for(let m=0;m<n;m++){let P=u.current[m];if(P===void 0)return;P!==0&&(K+=P+(V>0?z:0),V+=1)}let D=n;if(K>j){let m=j-(d.current||c.clientHeight)-z,P=0,_=0;D=0;for(let L=0;L<n;L++){let U=u.current[L];if(U>0){let Y=U+(_>0?z:0);if(P+Y>m)break;P+=Y,_+=1}D+=1}}D!==p&&R(D)},[p,n,S]),o.useEffect(()=>{let c=i.current;if(!c||typeof ResizeObserver>"u")return;let b=new ResizeObserver(()=>f(T=>T+1));b.observe(c);for(let T of Array.from(c.children))b.observe(T);return()=>b.disconnect()},[p,n]);let k=o.useCallback(c=>{i.current=c,typeof a=="function"?a(c):a&&(a.current=c)},[a]);return o.createElement("div",{...s,ref:k,className:h("kui-ToolbarOverflow",t)},l.slice(0,p).map((c,b)=>o.createElement("div",{key:b,className:"kui-ToolbarOverflowSeat"},c)),p<n?o.createElement(X,null,o.createElement($,null,o.createElement(A,{iconOnly:!0,"aria-label":e},o.createElement(fo,null))),o.createElement(oo,{align:"end"},o.createElement(C.Provider,{value:!0},l.slice(p)))):null)});ao.displayName="Toolbar.Overflow";var W=[],w=new Map,N=new Set;function bo(e){return N.add(e),()=>{N.delete(e)}}function To(e,t,r){let s=w.get(e)??W,l=s.findIndex(n=>n.id===t)===-1?[...s,{id:t,node:r}]:s.map(n=>n.id===t?{id:t,node:r}:n);w.set(e,l),N.forEach(n=>n())}function mo(e,t){let r=w.get(e);if(!r)return;let s=r.filter(a=>a.id!==t);s.length===0?w.delete(e):w.set(e,s),N.forEach(a=>a())}function so({name:e="default"}){let t=o.useSyncExternalStore(bo,()=>w.get(e)??W,()=>W);return o.createElement(o.Fragment,null,t.map(r=>o.createElement(o.Fragment,{key:r.id},r.node)))}so.displayName="Toolbar.Slot";function lo({name:e="default",children:t}){let r=o.useId();return B(()=>{To(e,r,t)},[e,r,t]),B(()=>()=>mo(e,r),[e,r]),null}lo.displayName="Toolbar.Fill";var io=o.forwardRef(({className:e,...t},r)=>{let s=o.useContext(g);return o.useContext(C)?o.createElement(to,{...t,ref:r,className:e}):s?o.createElement(O.Separator,{...t,ref:r,className:h("kui-ToolbarSeparator",e)}):o.createElement("div",{role:"separator","aria-orientation":"vertical","data-orientation":"vertical",...t,ref:r,className:h("kui-ToolbarSeparator",e)})});io.displayName="Toolbar.Separator";var Po={1:"2",2:"3",3:"4",4:"5"},co=o.forwardRef(({className:e,children:t,style:r,id:s},a)=>{let l=o.useContext(g),n=I(void 0,x.size),i=l?.size??n;return t==null||t===!1?null:o.createElement(Q,{ref:a,as:"span",size:Po[i],weight:"medium",truncate:!0,id:s,style:r,className:h("kui-ToolbarTitle",e)},t)});co.displayName="Toolbar.Title";var Eo=Object.assign(F,{Root:F,Group:ro,Button:A,Separator:io,Title:co,Overflow:ao,Slot:so,Fill:lo});export{Do as a,F as b,ro as c,A as d,ao as e,so as f,lo as g,io as h,co as i,Eo as j};
2
+ //# sourceMappingURL=chunk-KA5UE2VN.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/toolbar.tsx"],
4
+ "sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { Toolbar as ToolbarPrimitive } from 'radix-ui';\n\nimport { toolbarRootPropDefs } from './toolbar.props.js';\nimport { Button } from './button.js';\nimport * as DropdownMenu from './dropdown-menu.js';\nimport { Text } from './text.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSize } from '../helpers/theme-size.js';\nimport { layoutPropDefs } from '../props/layout.props.js';\nimport { usePaneBandSize } from './_internal/pane-chrome.js';\n\nimport type { ButtonProps } from './button.js';\nimport type { LayoutProps } from '../props/layout.props.js';\nimport type { TextProps } from './text.js';\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\nimport type { ButtonRankProps } from './button.js';\n\n/*\n * Toolbar takes Kookie UI v2's contract (v2: components/toolbar), built on Radix instead of\n * Base UI. A toolbar is a row of controls with ONE tab stop: `role=\"toolbar\"`, and the arrow\n * keys move focus between its controls. That keyboard is the reason it is a component.\n *\n * Its `size` reaches every control inside it that does not state its own. The row itself paints\n * nothing; a `ToolbarGroup` draws a quiet well around controls that belong together, and a\n * `ToolbarSeparator` draws a gray hairline between clusters. Use a `Flex` to cluster controls\n * without a well: the row spaces the clusters with `space-between`.\n */\n\ntype ToolbarSize = NonNullable<GetPropDefTypes<typeof toolbarRootPropDefs>['size']>;\ntype ToolbarOrientation = NonNullable<GetPropDefTypes<typeof toolbarRootPropDefs>['orientation']>;\n\ninterface ToolbarContextValue {\n size: ToolbarSize;\n orientation: ToolbarOrientation;\n backdrop: boolean;\n}\n\nconst ToolbarContext = React.createContext<ToolbarContextValue | null>(null);\n\n/** Set by a `ToolbarGroup`: its children rest quiet, and `disabled` turns them all off. */\nconst ToolbarGroupContext = React.createContext<{ disabled: boolean } | null>(null);\n\n/**\n * True while a subtree is drawn into a `ToolbarOverflow`'s menu instead of into the row (v2\n * `InOverflow`). The parts answer it themselves: a `ToolbarButton` renders a menu item, a\n * `ToolbarGroup` a menu group, a `ToolbarSeparator` a menu separator.\n */\nconst InOverflowContext = React.createContext(false);\n\n/**\n * True while this subtree is drawn into a `ToolbarOverflow`'s \"More\" menu instead of the row.\n *\n * The toolbar's own parts handle this already. Use it in your own component inside a\n * `ToolbarOverflow` to render a different form in the menu.\n */\nfunction useToolbarOverflow(): boolean {\n return React.useContext(InOverflowContext);\n}\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\n// ============================================================================\n// Toolbar (root)\n// ============================================================================\n\ntype ToolbarOwnProps = GetPropDefTypes<typeof toolbarRootPropDefs>;\n\ninterface ToolbarProps\n extends ComponentPropsWithout<typeof ToolbarPrimitive.Root, RemovedProps | 'orientation'>,\n ToolbarOwnProps,\n LayoutProps {\n /**\n * Gives every control a surface of its own, for a row that content passes behind, such as\n * `Shell.PaneHeader float`. Buttons rest `raised` instead of `soft`, and a group's well is\n * solid and raised.\n */\n backdrop?: boolean;\n}\n\n/**\n * A row of controls with one keyboard tab stop. The arrow keys move focus between the controls.\n *\n * Give it an `aria-label` (or `aria-labelledby`) that says what the controls act on.\n *\n * @example\n * ```tsx\n * <Toolbar aria-label=\"Formatting\">\n * <ToolbarGroup>\n * <ToolbarButton iconOnly aria-label=\"Bold\" aria-pressed={bold} onClick={toggleBold}>\n * <HugeiconsIcon icon={TextBoldIcon} strokeWidth={1.75} />\n * </ToolbarButton>\n * </ToolbarGroup>\n * <ToolbarSeparator />\n * <ToolbarButton>Share</ToolbarButton>\n * </Toolbar>\n * ```\n */\nconst ToolbarRoot = React.forwardRef<HTMLDivElement, ToolbarProps>((props, forwardedRef) => {\n // Inside a Shell (a pane's header or footer, or the content area), a toolbar with no size\n // rests one step above the Shell's. A pane's scrolling list has no band.\n const band = usePaneBandSize();\n // Elsewhere it takes the nearest Theme's size.\n const size: ToolbarSize = useThemeSize(props.size ?? band ?? undefined, toolbarRootPropDefs.size);\n const orientation: ToolbarOrientation = props.orientation ?? toolbarRootPropDefs.orientation.default;\n const { className, orientation: _orientation, backdrop = false, children, ...rootProps } = extractProps(\n { ...props, size },\n toolbarRootPropDefs,\n layoutPropDefs,\n );\n\n const context = React.useMemo(() => ({ size, orientation, backdrop }), [size, orientation, backdrop]);\n\n return (\n <ToolbarPrimitive.Root\n {...rootProps}\n ref={forwardedRef}\n orientation={orientation}\n data-backdrop={backdrop || undefined}\n className={classNames('kui-Toolbar', className)}\n >\n <ToolbarContext.Provider value={context}>{children}</ToolbarContext.Provider>\n </ToolbarPrimitive.Root>\n );\n});\nToolbarRoot.displayName = 'Toolbar';\n\n// ============================================================================\n// ToolbarGroup\n// ============================================================================\n\ninterface ToolbarGroupProps extends ComponentPropsWithout<'div', RemovedProps> {\n /** Turns every control in the group off at once. */\n disabled?: boolean;\n}\n\n/**\n * Controls that belong together, drawn as one quiet well that stands level with a button\n * beside it. Buttons inside it rest as `ghost` unless they state a `variant`.\n * To cluster controls without a well, use a `Flex`.\n *\n * In a `ToolbarOverflow`'s menu it is a menu group. Outside a `Toolbar` (rendered through a\n * portal, for example) it still draws its well, as a horizontal group.\n */\nconst ToolbarGroup = React.forwardRef<HTMLDivElement, ToolbarGroupProps>(\n ({ className, disabled = false, children, ...props }, forwardedRef) => {\n const toolbar = React.useContext(ToolbarContext);\n const overflow = React.useContext(InOverflowContext);\n const group = React.useMemo(() => ({ disabled }), [disabled]);\n\n if (overflow) {\n return (\n <DropdownMenu.Group {...props} ref={forwardedRef} className={className}>\n <ToolbarGroupContext.Provider value={group}>{children}</ToolbarGroupContext.Provider>\n </DropdownMenu.Group>\n );\n }\n\n return (\n <div\n role=\"group\"\n data-orientation={toolbar?.orientation ?? 'horizontal'}\n data-disabled={disabled || undefined}\n {...props}\n ref={forwardedRef}\n className={classNames('kui-ToolbarGroup', className)}\n >\n <ToolbarGroupContext.Provider value={group}>{children}</ToolbarGroupContext.Provider>\n </div>\n );\n },\n);\nToolbarGroup.displayName = 'Toolbar.Group';\n\n// ============================================================================\n// ToolbarButton\n// ============================================================================\n\ntype ToolbarButtonBaseProps = Omit<ButtonProps, 'as' | 'variant' | 'emphasis'>;\n\n/** A labelled button: takes every `Button` prop. */\ntype ToolbarTextButtonProps = ToolbarButtonBaseProps &\n ButtonRankProps & {\n iconOnly?: false;\n};\n\n/** An icon-only button: renders `Button iconOnly`, and the type requires an `aria-label`. */\ntype ToolbarIconButtonProps = Omit<ToolbarButtonBaseProps, 'aria-label' | 'aria-labelledby' | 'fullWidth'> &\n ButtonRankProps & {\n iconOnly: true;\n /** The control's accessible name. An icon has no words of its own, so this is required. */\n 'aria-label': string;\n};\n\ntype ToolbarButtonProps = ToolbarTextButtonProps | ToolbarIconButtonProps;\n\nfunction isPressed(value: React.AriaAttributes['aria-pressed']) {\n return value === true || value === 'true';\n}\n\n/** Does an `asChild` child render a native `<button>`? Only then is it a Radix Toolbar.Button. */\nfunction isButtonElement(children: React.ReactNode) {\n return React.isValidElement(children) && children.type === 'button';\n}\n\n/**\n * A `Button` that joins the toolbar's keyboard navigation, so a row of them is one tab stop.\n *\n * Set `iconOnly` (with an `aria-label`) for a symbol-only control. Set `aria-pressed` for a\n * control that toggles; a pressed button wears Button's pressed look. Set `asChild` to render\n * your own element, such as a link: `<ToolbarButton asChild><a href=\"/docs\">Docs</a></ToolbarButton>`.\n * A link stays in the arrow-key row and gets no `type` attribute.\n *\n * It takes the toolbar's `size`, and rests as a gray `soft` button (`raised` in a toolbar with\n * `backdrop`, gray `ghost` inside a `ToolbarGroup`). A stated `size`, `variant` or `color` wins; a\n * stated `variant` without a `color` takes Button's own default colour.\n *\n * In a `ToolbarOverflow`'s menu it renders a menu item; an icon-only button uses its\n * `aria-label` as the item's text. Outside a `Toolbar` (rendered through a React portal, for\n * example) it renders a plain Button with the same rest look, as its own tab stop. Use\n * `ToolbarSlot` and `ToolbarFill` for a control that should join the row's arrow keys.\n */\nconst ToolbarButton = React.forwardRef<HTMLButtonElement, ToolbarButtonProps>((props, forwardedRef) => {\n const toolbar = React.useContext(ToolbarContext);\n const group = React.useContext(ToolbarGroupContext);\n const overflow = React.useContext(InOverflowContext);\n const { iconOnly, size, variant, emphasis, color, disabled, asChild, onKeyDown, ...rest } = props;\n const off = disabled || group?.disabled || undefined;\n\n if (overflow) {\n return (\n <ToolbarOverflowItem\n // Only what a menu row means comes across; Button's box props (size, loading,\n // tooltip, fullWidth and the rest) would land on the DOM as unknown attributes.\n id={rest.id}\n className={rest.className}\n style={rest.style}\n onClick={rest.onClick as React.MouseEventHandler<HTMLDivElement> | undefined}\n aria-label={rest['aria-label']}\n ref={forwardedRef as unknown as React.Ref<HTMLDivElement>}\n asChild={asChild}\n iconOnly={iconOnly}\n disabled={off}\n color={color}\n >\n {rest.children}\n </ToolbarOverflowItem>\n );\n }\n\n // In a vertical toolbar, Up and Down belong to the toolbar. A menu trigger rendering this\n // hands its open-on-arrow handler in through `onKeyDown`; those two keys skip it (v2).\n const handleKeyDown =\n toolbar?.orientation === 'vertical' && onKeyDown\n ? (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') return;\n onKeyDown(event);\n }\n : onKeyDown;\n\n const pressed = isPressed(props['aria-pressed']);\n const stateProps =\n 'data-state' in props || props['aria-pressed'] === undefined ? {} : { 'data-state': pressed ? 'on' : 'off' };\n\n const shared = {\n size: size ?? toolbar?.size,\n // A caller states the look by `variant` or the rank by `emphasis`, never both.\n ...(emphasis !== undefined\n ? { emphasis }\n : { variant: variant ?? (group ? 'ghost' : toolbar?.backdrop ? 'raised' : 'soft') }),\n // The gray rest is a pair with the default variant: a caller who states a variant or an\n // emphasis gets Button's own colour for it unless they state a colour too.\n color: color ?? (variant || emphasis ? undefined : 'gray'),\n ...stateProps,\n } as const;\n\n // The text and icon-only branches share every prop but the name; one Button renders both.\n const buttonProps = {\n ...rest,\n ...(iconOnly ? { iconOnly: true } : {}),\n ...(asChild ? { asChild: true } : {}),\n ...(handleKeyDown ? { onKeyDown: handleKeyDown } : {}),\n ...shared,\n } as ButtonProps;\n\n // Outside a toolbar there is no row to join: a plain Button, not a throw.\n if (!toolbar) {\n return <Button {...buttonProps} ref={forwardedRef} disabled={off} />;\n }\n\n // A link (or any non-button child) joins the row as a Radix Toolbar.Link, which sets no\n // `type`. Toolbar.Button would stamp `type=\"button\"` on it.\n if (asChild && !isButtonElement(rest.children)) {\n return (\n <ToolbarPrimitive.Link asChild ref={forwardedRef as unknown as React.Ref<HTMLAnchorElement>}>\n <Button {...buttonProps} disabled={off} />\n </ToolbarPrimitive.Link>\n );\n }\n\n return (\n <ToolbarPrimitive.Button asChild ref={forwardedRef} disabled={off}>\n <Button {...buttonProps} />\n </ToolbarPrimitive.Button>\n );\n});\nToolbarButton.displayName = 'Toolbar.Button';\n\ninterface ToolbarOverflowItemProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'onSelect' | 'color'> {\n asChild?: boolean;\n iconOnly?: boolean;\n disabled?: boolean;\n color?: ButtonProps['color'];\n}\n\n/**\n * A ToolbarButton drawn into the overflow menu: the same element, as a menu item. An icon-only\n * button's `aria-label` becomes the item's text beside its icon, since a menu row has room for\n * words. What prices a box (size, variant, emphasis, iconOnly) does not come across.\n */\nconst ToolbarOverflowItem = React.forwardRef<HTMLDivElement, ToolbarOverflowItemProps>(\n ({ asChild, iconOnly, disabled, color, children, 'aria-label': label, ...props }, forwardedRef) => {\n const words = iconOnly ? label : undefined;\n const itemProps = {\n ...props,\n ...(iconOnly ? {} : label ? { 'aria-label': label } : {}),\n disabled,\n ...(color ? { color: color as DropdownMenu.ItemProps['color'] } : {}),\n };\n if (asChild && React.isValidElement<{ children?: React.ReactNode }>(children)) {\n const child = words\n ? React.cloneElement(children, undefined, children.props.children, <span>{words}</span>)\n : children;\n return (\n <DropdownMenu.Item {...itemProps} ref={forwardedRef} asChild>\n {child}\n </DropdownMenu.Item>\n );\n }\n return (\n <DropdownMenu.Item {...itemProps} ref={forwardedRef}>\n {children}\n {words}\n </DropdownMenu.Item>\n );\n },\n);\nToolbarOverflowItem.displayName = 'Toolbar.OverflowItem';\n\n// ============================================================================\n// ToolbarOverflow\n// ============================================================================\n\ninterface ToolbarOverflowProps extends ComponentPropsWithout<'div', RemovedProps> {\n /** The accessible name of the \"More\" button. Defaults to `More`. */\n label?: string;\n /** The controls in the cluster, in order. The ones that don't fit move into the \"More\" menu. */\n children?: React.ReactNode;\n}\n\n/** Three filled dots for the \"More\" button. Internal, so the library carries no icon set. */\nfunction MoreIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentcolor\" aria-hidden xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3.25\" cy=\"8\" r=\"1.25\" />\n <circle cx=\"8\" cy=\"8\" r=\"1.25\" />\n <circle cx=\"12.75\" cy=\"8\" r=\"1.25\" />\n </svg>\n );\n}\n\n/**\n * A cluster of controls that collapses into a \"More\" menu when the row runs out of room.\n *\n * It takes the room the row leaves, and when its controls don't fit, they move into the menu\n * from the end of the cluster. A `ToolbarButton` shows as a menu item there, and a\n * `ToolbarGroup` as a menu group. Use `useToolbarOverflow()` in your own components to render a\n * different form in the menu.\n *\n * It measures on mount and on resize (v2 ToolbarOverflow): each control's width is cached while\n * it is in the row, since a hidden control has no width to measure.\n */\nconst ToolbarOverflow = React.forwardRef<HTMLDivElement, ToolbarOverflowProps>(\n ({ label = 'More', className, children, ...props }, forwardedRef) => {\n const items = React.Children.toArray(children);\n const count = items.length;\n\n const rootRef = React.useRef<HTMLDivElement | null>(null);\n const widths = React.useRef<number[]>([]);\n const triggerWidth = React.useRef(0);\n const [shown, setShown] = React.useState(count);\n const [tick, setTick] = React.useState(0);\n\n // A different set of children is a different set of widths: show them all and measure again.\n const [measuredCount, setMeasuredCount] = React.useState(count);\n if (measuredCount !== count) {\n setMeasuredCount(count);\n setShown(count);\n }\n useIsomorphicLayoutEffect(() => {\n widths.current = [];\n }, [count]);\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n\n // The root's children are one seat per visible child, then the trigger.\n const kids = Array.from(root.children) as HTMLElement[];\n const visible = Math.min(shown, count);\n for (let i = 0; i < visible; i++) {\n const el = kids[i];\n if (el) widths.current[i] = el.offsetWidth;\n }\n const trigger = kids[visible];\n if (trigger) triggerWidth.current = trigger.offsetWidth;\n\n const gap = Number.parseFloat(getComputedStyle(root).columnGap) || 0;\n const available = root.clientWidth;\n\n let total = 0;\n let counted = 0;\n for (let i = 0; i < count; i++) {\n const width = widths.current[i];\n // Never seen in the row, so there is nothing to decide with yet.\n if (width === undefined) return;\n // An empty seat leaves the layout, so it spends no gap.\n if (width === 0) continue;\n total += width + (counted > 0 ? gap : 0);\n counted += 1;\n }\n\n let next = count;\n if (total > available) {\n // Before the trigger exists, the row's height stands in for its width: an icon-only\n // button is square. The next pass, before paint, corrects it.\n const budget = available - (triggerWidth.current || root.clientHeight) - gap;\n let used = 0;\n let drawn = 0;\n next = 0;\n for (let i = 0; i < count; i++) {\n const own = widths.current[i]!;\n if (own > 0) {\n const width = own + (drawn > 0 ? gap : 0);\n if (used + width > budget) break;\n used += width;\n drawn += 1;\n }\n next += 1;\n }\n }\n if (next !== shown) setShown(next);\n }, [shown, count, tick]);\n\n // Watch the row and every seat in it: a control whose content changes (a page's actions\n // arriving after navigation) changes its width without the row's width changing.\n React.useEffect(() => {\n const root = rootRef.current;\n if (!root || typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(() => setTick((n) => n + 1));\n observer.observe(root);\n for (const seat of Array.from(root.children)) observer.observe(seat);\n return () => observer.disconnect();\n }, [shown, count]);\n\n const attach = React.useCallback(\n (node: HTMLDivElement | null) => {\n rootRef.current = node;\n if (typeof forwardedRef === 'function') forwardedRef(node);\n else if (forwardedRef) forwardedRef.current = node;\n },\n [forwardedRef],\n );\n\n return (\n <div {...props} ref={attach} className={classNames('kui-ToolbarOverflow', className)}>\n {items.slice(0, shown).map((item, i) => (\n // The seat is a position in the row, so its key is the index.\n <div key={i} className=\"kui-ToolbarOverflowSeat\">\n {item}\n </div>\n ))}\n {shown < count ? (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n <ToolbarButton iconOnly aria-label={label}>\n <MoreIcon />\n </ToolbarButton>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n <InOverflowContext.Provider value>{items.slice(shown)}</InOverflowContext.Provider>\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n ) : null}\n </div>\n );\n },\n);\nToolbarOverflow.displayName = 'Toolbar.Overflow';\n\n// ============================================================================\n// ToolbarSlot and ToolbarFill\n// ============================================================================\n\ntype SlotEntry = { id: string; node: React.ReactNode };\n\nconst EMPTY_ENTRIES: readonly SlotEntry[] = [];\nconst slotEntries = new Map<string, readonly SlotEntry[]>();\nconst slotListeners = new Set<() => void>();\n\nfunction subscribeSlots(listener: () => void) {\n slotListeners.add(listener);\n return () => {\n slotListeners.delete(listener);\n };\n}\n\nfunction setSlotEntry(name: string, id: string, node: React.ReactNode) {\n const list = slotEntries.get(name) ?? EMPTY_ENTRIES;\n const index = list.findIndex((entry) => entry.id === id);\n const next = index === -1 ? [...list, { id, node }] : list.map((entry) => (entry.id === id ? { id, node } : entry));\n slotEntries.set(name, next);\n slotListeners.forEach((listener) => listener());\n}\n\nfunction removeSlotEntry(name: string, id: string) {\n const list = slotEntries.get(name);\n if (!list) return;\n const next = list.filter((entry) => entry.id !== id);\n if (next.length === 0) slotEntries.delete(name);\n else slotEntries.set(name, next);\n slotListeners.forEach((listener) => listener());\n}\n\ninterface ToolbarSlotProps {\n /** Which `ToolbarFill` renders here. Use one name per slot. Defaults to `default`. */\n name?: string;\n}\n\n/**\n * A place in a toolbar that content elsewhere in the app fills, such as a page adding its own\n * actions to a header toolbar the layout owns.\n *\n * It renders whatever the `ToolbarFill` with the same `name` holds, as if it were written here:\n * the controls take the toolbar's size and join its arrow-key row. It adds no element.\n */\nfunction ToolbarSlot({ name = 'default' }: ToolbarSlotProps) {\n const entries = React.useSyncExternalStore(\n subscribeSlots,\n () => slotEntries.get(name) ?? EMPTY_ENTRIES,\n () => EMPTY_ENTRIES,\n );\n return (\n <>\n {entries.map((entry) => (\n <React.Fragment key={entry.id}>{entry.node}</React.Fragment>\n ))}\n </>\n );\n}\nToolbarSlot.displayName = 'Toolbar.Slot';\n\ninterface ToolbarFillProps {\n /** The `ToolbarSlot` to render into. Defaults to `default`. */\n name?: string;\n /** The controls to show in the slot, such as `ToolbarButton`s. */\n children?: React.ReactNode;\n}\n\n/**\n * Sends its children to the `ToolbarSlot` with the same `name`, and renders nothing where it\n * is written. Use it instead of a React portal: a portal keeps the page's React tree, so a\n * ToolbarButton in it can't join the toolbar's arrow keys.\n *\n * The children render inside the toolbar, so they read the toolbar's context, not the page's.\n * They appear after the page mounts on the client, not in server-rendered HTML.\n */\nfunction ToolbarFill({ name = 'default', children }: ToolbarFillProps) {\n const id = React.useId();\n useIsomorphicLayoutEffect(() => {\n setSlotEntry(name, id, children);\n }, [name, id, children]);\n useIsomorphicLayoutEffect(() => () => removeSlotEntry(name, id), [name, id]);\n return null;\n}\nToolbarFill.displayName = 'Toolbar.Fill';\n\n// ============================================================================\n// ToolbarSeparator\n// ============================================================================\n\ntype ToolbarSeparatorProps = ComponentPropsWithout<typeof ToolbarPrimitive.Separator, RemovedProps | 'orientation'>;\n\n/**\n * A gray hairline between two clusters, announced as a separator. Its direction is always\n * opposite to the toolbar's. In a `ToolbarOverflow`'s menu it is a menu separator.\n */\nconst ToolbarSeparator = React.forwardRef<HTMLDivElement, ToolbarSeparatorProps>(\n ({ className, ...props }, forwardedRef) => {\n const toolbar = React.useContext(ToolbarContext);\n const overflow = React.useContext(InOverflowContext);\n if (overflow) return <DropdownMenu.Separator {...props} ref={forwardedRef} className={className} />;\n if (!toolbar) {\n return (\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n data-orientation=\"vertical\"\n {...props}\n ref={forwardedRef}\n className={classNames('kui-ToolbarSeparator', className)}\n />\n );\n }\n return (\n <ToolbarPrimitive.Separator\n {...props}\n ref={forwardedRef}\n className={classNames('kui-ToolbarSeparator', className)}\n />\n );\n },\n);\nToolbarSeparator.displayName = 'Toolbar.Separator';\n\n// ============================================================================\n// ToolbarTitle\n// ============================================================================\n\n/** The title's text step: one step above the label of a button at the same size. */\nconst TITLE_SIZE = { '1': '2', '2': '3', '3': '4', '4': '5' } as const satisfies Record<ToolbarSize, TextProps['size']>;\n\ninterface ToolbarTitleProps {\n /** The title text. With none, the title renders nothing. */\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n /** The id of the title, so that the toolbar's `aria-labelledby` can point at it. */\n id?: string;\n}\n\n/**\n * What the row is about, at its leading edge. One line: it truncates rather than wrapping.\n * Its text step follows the toolbar's `size`, and it takes more air from the controls beside it\n * than they take from each other.\n */\nconst ToolbarTitle = React.forwardRef<HTMLSpanElement, ToolbarTitleProps>(\n ({ className, children, style, id }, forwardedRef) => {\n const toolbar = React.useContext(ToolbarContext);\n const themeSize = useThemeSize<ToolbarSize>(undefined, toolbarRootPropDefs.size);\n const size = toolbar?.size ?? themeSize;\n if (children === undefined || children === null || children === false) return null;\n return (\n <Text\n ref={forwardedRef}\n as=\"span\"\n size={TITLE_SIZE[size]}\n weight=\"medium\"\n truncate\n id={id}\n style={style}\n className={classNames('kui-ToolbarTitle', className)}\n >\n {children}\n </Text>\n );\n },\n);\nToolbarTitle.displayName = 'Toolbar.Title';\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nconst Toolbar = Object.assign(ToolbarRoot, {\n Root: ToolbarRoot,\n Group: ToolbarGroup,\n Button: ToolbarButton,\n Separator: ToolbarSeparator,\n Title: ToolbarTitle,\n Overflow: ToolbarOverflow,\n Slot: ToolbarSlot,\n Fill: ToolbarFill,\n});\n\nexport {\n Toolbar,\n ToolbarGroup,\n ToolbarButton,\n ToolbarSeparator,\n ToolbarTitle,\n ToolbarOverflow,\n ToolbarSlot,\n ToolbarFill,\n useToolbarOverflow,\n ToolbarRoot as Root,\n ToolbarGroup as Group,\n ToolbarButton as Button,\n ToolbarSeparator as Separator,\n ToolbarTitle as Title,\n ToolbarOverflow as Overflow,\n ToolbarSlot as Slot,\n ToolbarFill as Fill,\n};\nexport type {\n ToolbarProps,\n ToolbarGroupProps,\n ToolbarButtonProps,\n ToolbarSeparatorProps,\n ToolbarTitleProps,\n ToolbarOverflowProps,\n ToolbarSlotProps,\n ToolbarFillProps,\n ToolbarProps as RootProps,\n ToolbarGroupProps as GroupProps,\n ToolbarButtonProps as ButtonProps,\n ToolbarSeparatorProps as SeparatorProps,\n ToolbarTitleProps as TitleProps,\n ToolbarOverflowProps as OverflowProps,\n ToolbarSlotProps as SlotProps,\n ToolbarFillProps as FillProps,\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "classNames", "ToolbarPrimitive", "ToolbarContext", "ToolbarGroupContext", "InOverflowContext", "useToolbarOverflow", "useIsomorphicLayoutEffect", "ToolbarRoot", "props", "forwardedRef", "band", "usePaneBandSize", "size", "useThemeSize", "toolbarRootPropDefs", "orientation", "className", "_orientation", "backdrop", "children", "rootProps", "extractProps", "layoutPropDefs", "context", "ToolbarPrimitive", "classNames", "ToolbarGroup", "disabled", "toolbar", "overflow", "group", "DropdownMenuGroup", "isPressed", "value", "isButtonElement", "ToolbarButton", "iconOnly", "variant", "emphasis", "color", "asChild", "onKeyDown", "rest", "off", "ToolbarOverflowItem", "handleKeyDown", "event", "pressed", "stateProps", "shared", "buttonProps", "Button", "label", "words", "itemProps", "child", "DropdownMenuItem", "MoreIcon", "ToolbarOverflow", "items", "count", "rootRef", "widths", "triggerWidth", "shown", "setShown", "tick", "setTick", "measuredCount", "setMeasuredCount", "root", "kids", "visible", "i", "el", "trigger", "gap", "available", "total", "counted", "width", "next", "budget", "used", "drawn", "own", "observer", "n", "seat", "attach", "node", "item", "DropdownMenuRoot", "DropdownMenuTrigger", "DropdownMenuContent", "EMPTY_ENTRIES", "slotEntries", "slotListeners", "subscribeSlots", "listener", "setSlotEntry", "name", "id", "list", "entry", "removeSlotEntry", "ToolbarSlot", "entries", "ToolbarFill", "ToolbarSeparator", "DropdownMenuSeparator", "TITLE_SIZE", "ToolbarTitle", "style", "themeSize", "Text", "Toolbar"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{a as c}from"./chunk-2N2AQNJH.js";import{a as p}from"./chunk-KT2CMUS5.js";import{a as u}from"./chunk-XRCMPBAY.js";import*as t from"react";import v from"classnames";var E={loud:"solid",medium:"raised",quiet:"ghost"};function g(e){if(e["aria-label"]||e["aria-labelledby"])return;console.error("Button: an `iconOnly` button must have an accessible name. Pass `aria-label`, or `aria-labelledby` referencing a label element.")}var w=t.forwardRef(({className:e,style:r,tooltip:a,tooltipSide:d="top",tooltipAlign:m="center",tooltipDelayDuration:B,tooltipDisableHoverableContent:f,iconOnly:s=!1,emphasis:o,variant:i,...n},y)=>{let{tooltipId:b,hasTooltip:P,accessibilityProps:R}=c(a);if(s&&(g(n),n.fullWidth=!1),o!==void 0&&i!==void 0)throw new Error("Button: pass `emphasis` or `variant`, not both. They set the same thing.");let h=o!==void 0?E[o]:i,l=t.createElement(u,{...n,variant:h,...R,ref:y,"data-icon-only":s||void 0,className:v("kui-Button",e),style:r});return P?t.createElement(p,{content:a,side:d,align:m,delayDuration:B,disableHoverableContent:f,id:b},l):l});w.displayName="Button";export{w as a};
2
- //# sourceMappingURL=chunk-QGCXTULQ.js.map
1
+ import{a as c}from"./chunk-2N2AQNJH.js";import{a as p}from"./chunk-KT2CMUS5.js";import{a as u}from"./chunk-4R5EMVB3.js";import*as t from"react";import v from"classnames";var E={loud:"solid",medium:"raised",quiet:"ghost"};function g(e){if(e["aria-label"]||e["aria-labelledby"])return;console.error("Button: an `iconOnly` button must have an accessible name. Pass `aria-label`, or `aria-labelledby` referencing a label element.")}var w=t.forwardRef(({className:e,style:r,tooltip:a,tooltipSide:d="top",tooltipAlign:m="center",tooltipDelayDuration:B,tooltipDisableHoverableContent:f,iconOnly:s=!1,emphasis:o,variant:i,...n},y)=>{let{tooltipId:b,hasTooltip:P,accessibilityProps:R}=c(a);if(s&&(g(n),n.fullWidth=!1),o!==void 0&&i!==void 0)throw new Error("Button: pass `emphasis` or `variant`, not both. They set the same thing.");let h=o!==void 0?E[o]:i,l=t.createElement(u,{...n,variant:h,...R,ref:y,"data-icon-only":s||void 0,className:v("kui-Button",e),style:r});return P?t.createElement(p,{content:a,side:d,align:m,delayDuration:B,disableHoverableContent:f,id:b},l):l});w.displayName="Button";export{w as a};
2
+ //# sourceMappingURL=chunk-KEGCX5VM.js.map
@@ -0,0 +1,2 @@
1
+ import{a as T}from"./chunk-PJR6GRZC.js";import{e as E}from"./chunk-3YLYGKFB.js";import{a as D}from"./chunk-ELAW7ZUG.js";import*as t from"react";import F from"classnames";import{Slider as v}from"radix-ui";var J=t.forwardRef((w,L)=>{let R=E(w,T.size),{className:j,color:I,radius:O,tabIndex:y,...W}=D(R,T),{ticks:i,unit:n,value:k,defaultValue:z,onValueChange:P,onValueCommit:g,"aria-label":G,"aria-labelledby":A,...d}=W,{showTickLabels:B,snapToTicks:b}=R,h=d.min??0,c=d.max??100,[H,U]=t.useState(()=>z??[h]),S=k!==void 0,m=S?k:H,$=t.useId(),q=d.step,l=t.useMemo(()=>i?[...i].sort((e,r)=>e.value-r.value):[],[i]),x=t.useCallback(e=>{if(!b||!l.length)return e;let r=0,a=l.length-1;if(e<=l[r].value)return l[r].value;if(e>=l[a].value)return l[a].value;for(;r<=a;){let u=Math.floor((r+a)/2);if(l[u].value===e)return e;l[u].value<e?r=u+1:a=u-1}let o=Math.abs(e-l[a].value),s=Math.abs(e-l[r].value);return o<=s?l[a].value:l[r].value},[b,l]),C=t.useCallback(e=>{let r=a=>n?`${a} ${n}`:a.toString();return e.length===1?`${r(e[0])} out of ${r(c)}`:e.length===2?`${r(e[0])} to ${r(e[1])} out of ${r(c)}`:`${e.map(r).join(", ")} out of ${r(c)}`},[n,c]),N=t.useMemo(()=>i?i.map((e,r)=>({...e,percentage:(e.value-h)/(c-h)*100,index:r})):null,[i,h,c]),p=t.useRef(null),f=t.useRef(null),V=t.useCallback(e=>{let r=b&&i?e.map(a=>x(a)):e;if(p.current){let a=C(r);p.current.textContent=a,f.current&&clearTimeout(f.current),f.current=setTimeout(()=>{p.current&&(p.current.textContent="")},1e3)}S||U(r),P?.(r)},[b,i,x,C,P,S]);return t.useEffect(()=>()=>{f.current&&clearTimeout(f.current)},[]),t.createElement("div",{className:"kui-SliderContainer"},t.createElement("div",{ref:p,"aria-live":"polite","aria-atomic":"true",className:"kui-sr-only"}),t.createElement(v.Root,{"data-accent-color":I,"data-radius":O,ref:L,...d,value:m,step:q,onValueChange:V,onValueCommit:g,asChild:!1,className:F("kui-SliderRoot",j)},t.createElement(v.Track,{className:"kui-SliderTrack"},t.createElement(v.Range,{className:"kui-SliderRange","data-inverted":d.inverted?"":void 0})),m.map((e,r)=>t.createElement(v.Thumb,{key:r,className:"kui-SliderThumb",...y!==void 0?{tabIndex:y}:void 0,"aria-label":G,"aria-labelledby":A,"aria-valuetext":n?`${e} ${n}`:void 0}))),N&&t.createElement("div",{className:"kui-SliderTicks",role:"group","aria-label":"Slider tick marks"},N.map(e=>t.createElement("button",{key:e.index,className:"kui-SliderTick",style:{left:`${e.percentage}%`},onClick:()=>{let r=0;m.forEach((o,s)=>{let u=Math.abs(o-e.value),M=Math.abs(m[r]-e.value);(u<M||u===M&&e.value>o)&&(r=s)});let a=m.map((o,s)=>s===r?e.value:o).sort((o,s)=>o-s);V(a),g?.(a)},"aria-label":`Set to ${e.label||(n?`${e.value} ${n}`:e.value)}`,"aria-describedby":e.label?void 0:`${$}-tick-${e.index}`,type:"button"},t.createElement("div",{className:"kui-SliderTickMark"}),e.label&&B!==!1&&t.createElement("div",{className:"kui-SliderTickLabel"},e.label),!e.label&&t.createElement("span",{id:`${$}-tick-${e.index}`,className:"kui-sr-only"},n?`${e.value} ${n}`:e.value)))))});J.displayName="Slider";export{J as a};
2
+ //# sourceMappingURL=chunk-KVHKPUZ2.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/slider.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { Slider as SliderPrimitive } from 'radix-ui';\n\nimport { sliderPropDefs } from './slider.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../helpers/theme-size.js';\n\nimport type { ComponentPropsWithout } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype SliderElement = React.ElementRef<typeof SliderPrimitive.Root>;\ntype SliderOwnProps = GetPropDefTypes<typeof sliderPropDefs>;\ninterface SliderProps\n extends ComponentPropsWithout<\n typeof SliderPrimitive.Root,\n 'asChild' | 'color' | 'children' | 'defaultChecked'\n >,\n SliderOwnProps {\n ticks?: Array<{ value: number; label?: string }>;\n unit?: string;\n}\nconst Slider = React.forwardRef<SliderElement, SliderProps>((ownProps, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, sliderPropDefs.size);\n const { className, color, radius, tabIndex, ...sliderProps } = extractProps(\n props,\n sliderPropDefs,\n );\n const {\n ticks,\n unit,\n value: valueProp,\n defaultValue,\n onValueChange,\n onValueCommit,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n ...rootProps\n } = sliderProps;\n const { showTickLabels, snapToTicks } = props;\n\n const min = rootProps.min ?? 0;\n const max = rootProps.max ?? 100;\n\n // The slider keeps its own copy of the value when uncontrolled, so the handles, their\n // labels and a tick press all read the current value rather than the first one.\n const [uncontrolledValue, setUncontrolledValue] = React.useState<number[]>(\n () => defaultValue ?? [min],\n );\n const isControlled = valueProp !== undefined;\n const currentValue = isControlled ? valueProp : uncontrolledValue;\n const tickIdPrefix = React.useId();\n\n // For snapping to ticks, we need to handle this differently\n // Radix slider doesn't support arbitrary step values, so we'll handle snapping in the onValueChange\n const step = rootProps.step;\n\n // Optimized snap-to-ticks with memoized sorted ticks\n const sortedTicks = React.useMemo(\n () => (ticks ? [...ticks].sort((a, b) => a.value - b.value) : []),\n [ticks],\n );\n\n // Function to snap value to nearest tick (optimized)\n const snapToNearestTick = React.useCallback(\n (value: number): number => {\n if (!snapToTicks || !sortedTicks.length) return value;\n\n // Binary search for closest tick\n let left = 0;\n let right = sortedTicks.length - 1;\n\n if (value <= sortedTicks[left].value) return sortedTicks[left].value;\n if (value >= sortedTicks[right].value) return sortedTicks[right].value;\n\n while (left <= right) {\n const mid = Math.floor((left + right) / 2);\n if (sortedTicks[mid].value === value) return value;\n\n if (sortedTicks[mid].value < value) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n }\n\n // Find closest between left and right\n const leftDistance = Math.abs(value - sortedTicks[right].value);\n const rightDistance = Math.abs(value - sortedTicks[left].value);\n\n return leftDistance <= rightDistance ? sortedTicks[right].value : sortedTicks[left].value;\n },\n [snapToTicks, sortedTicks],\n );\n\n // Format value text for accessibility\n const formatValueText = React.useCallback(\n (values: number[]): string => {\n const formatValue = (val: number) => (unit ? `${val} ${unit}` : val.toString());\n\n if (values.length === 1) {\n return `${formatValue(values[0])} out of ${formatValue(max)}`;\n } else if (values.length === 2) {\n return `${formatValue(values[0])} to ${formatValue(values[1])} out of ${formatValue(max)}`;\n } else {\n return `${values.map(formatValue).join(', ')} out of ${formatValue(max)}`;\n }\n },\n [unit, max],\n );\n\n // Memoize tick elements for performance\n const tickElements = React.useMemo(() => {\n if (!ticks) return null;\n\n return ticks.map((tick, index) => ({\n ...tick,\n percentage: ((tick.value - min) / (max - min)) * 100,\n index,\n }));\n }, [ticks, min, max]);\n\n // Live region ref for accessibility announcements (no state = no re-renders)\n const announceRef = React.useRef<HTMLDivElement>(null);\n const announceTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Handle value changes with snapping\n const handleValueChange = React.useCallback(\n (newValue: number[]) => {\n const finalValue =\n snapToTicks && ticks ? newValue.map((v) => snapToNearestTick(v)) : newValue;\n\n // Update live region for screen readers (direct DOM update, no React state)\n if (announceRef.current) {\n const valueText = formatValueText(finalValue);\n announceRef.current.textContent = valueText;\n\n // Clear after delay to prevent spam\n if (announceTimeoutRef.current) {\n clearTimeout(announceTimeoutRef.current);\n }\n announceTimeoutRef.current = setTimeout(() => {\n if (announceRef.current) {\n announceRef.current.textContent = '';\n }\n }, 1000);\n }\n\n if (!isControlled) setUncontrolledValue(finalValue);\n onValueChange?.(finalValue);\n },\n [snapToTicks, ticks, snapToNearestTick, formatValueText, onValueChange, isControlled],\n );\n\n // Cleanup timeout on unmount\n React.useEffect(() => {\n return () => {\n if (announceTimeoutRef.current) {\n clearTimeout(announceTimeoutRef.current);\n }\n };\n }, []);\n\n return (\n <div className=\"kui-SliderContainer\">\n {/* Live region for screen reader announcements */}\n <div\n ref={announceRef}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"kui-sr-only\"\n />\n\n <SliderPrimitive.Root\n data-accent-color={color}\n data-radius={radius}\n ref={forwardedRef}\n {...rootProps}\n value={currentValue}\n step={step}\n onValueChange={handleValueChange}\n onValueCommit={onValueCommit}\n asChild={false}\n className={classNames('kui-SliderRoot', className)}\n >\n <SliderPrimitive.Track className=\"kui-SliderTrack\">\n <SliderPrimitive.Range\n className=\"kui-SliderRange\"\n data-inverted={rootProps.inverted ? '' : undefined}\n />\n </SliderPrimitive.Track>\n {currentValue.map((value, index) => (\n <SliderPrimitive.Thumb\n key={index}\n className=\"kui-SliderThumb\"\n {...(tabIndex !== undefined ? { tabIndex } : undefined)}\n // The caller's name goes to every handle. Without one, Radix names the two\n // handles of a range \"Minimum\" and \"Maximum\".\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-valuetext={unit ? `${value} ${unit}` : undefined}\n />\n ))}\n </SliderPrimitive.Root>\n {tickElements && (\n <div className=\"kui-SliderTicks\" role=\"group\" aria-label=\"Slider tick marks\">\n {tickElements.map((tick) => {\n return (\n <button\n key={tick.index}\n className=\"kui-SliderTick\"\n // Only `left` varies per tick; the centring transform lives in `.kui-SliderTick`.\n style={{ left: `${tick.percentage}%` }}\n onClick={() => {\n // Move only the handle nearest the tick. When handles share a value, a\n // tick above it moves the last of them and a tick below moves the first.\n let nearest = 0;\n currentValue.forEach((v, i) => {\n const distance = Math.abs(v - tick.value);\n const best = Math.abs(currentValue[nearest] - tick.value);\n if (distance < best || (distance === best && tick.value > v)) nearest = i;\n });\n const newValue = currentValue\n .map((v, i) => (i === nearest ? tick.value : v))\n .sort((x, y) => x - y);\n\n handleValueChange(newValue);\n onValueCommit?.(newValue);\n }}\n aria-label={`Set to ${tick.label || (unit ? `${tick.value} ${unit}` : tick.value)}`}\n aria-describedby={tick.label ? undefined : `${tickIdPrefix}-tick-${tick.index}`}\n type=\"button\"\n >\n <div className=\"kui-SliderTickMark\" />\n {tick.label && showTickLabels !== false && (\n <div className=\"kui-SliderTickLabel\">{tick.label}</div>\n )}\n {!tick.label && (\n <span id={`${tickIdPrefix}-tick-${tick.index}`} className=\"kui-sr-only\">\n {unit ? `${tick.value} ${unit}` : tick.value}\n </span>\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n});\nSlider.displayName = 'Slider';\n\nexport { Slider };\nexport type { SliderProps };\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "classNames", "SliderPrimitive", "Slider", "ownProps", "forwardedRef", "props", "useThemeSizeProps", "sliderPropDefs", "className", "color", "radius", "tabIndex", "sliderProps", "extractProps", "ticks", "unit", "valueProp", "defaultValue", "onValueChange", "onValueCommit", "ariaLabel", "ariaLabelledBy", "rootProps", "showTickLabels", "snapToTicks", "min", "max", "uncontrolledValue", "setUncontrolledValue", "isControlled", "currentValue", "tickIdPrefix", "step", "sortedTicks", "a", "b", "snapToNearestTick", "value", "left", "right", "mid", "leftDistance", "rightDistance", "formatValueText", "values", "formatValue", "val", "tickElements", "tick", "index", "announceRef", "announceTimeoutRef", "handleValueChange", "newValue", "finalValue", "v", "valueText", "SliderPrimitive", "classNames", "nearest", "i", "distance", "best", "x", "y"]
7
+ }
@@ -1,5 +1,5 @@
1
- import{a as K,b as G}from"./chunk-LXTGEI62.js";import{e as B}from"./chunk-3YLYGKFB.js";import{a as z}from"./chunk-ELAW7ZUG.js";import{a as se}from"./chunk-OS3FCYZY.js";var ie={};se(ie,{Root:()=>J,Slot:()=>Q});import*as e from"react";import*as U from"react-dom";import _ from"classnames";import{composeRefs as Z}from"radix-ui/internal";var J=e.forwardRef((h,v)=>{let n=B(h,K.size),f=e.useRef(null),{children:E,className:w,color:k,radius:L,style:C,...a}=z(n,K),x=e.useId(),{"aria-describedby":g,"aria-labelledby":I,"aria-invalid":P}=a,T=!!a.error||P===!0||P==="true",M=e.useMemo(()=>{let o=[];return a.errorMessage&&o.push(x),g&&o.push(g),o.length>0?o.join(" "):void 0},[a.errorMessage,g,x]),y=e.useMemo(()=>({"aria-invalid":T?!0:P,"aria-describedby":M,"aria-labelledby":I}),[T,P,M,I]),{error:s,errorMessage:D,required:H,"aria-describedby":O,"aria-labelledby":m,...d}=a,i=e.useCallback(o=>{let S=o.target;if(S.closest("input, button, a"))return;let p=f.current;if(!p)return;let b=S.closest(`
1
+ import{a as z,b as G}from"./chunk-LXTGEI62.js";import{e as B}from"./chunk-3YLYGKFB.js";import{a as q}from"./chunk-ELAW7ZUG.js";import{a as se}from"./chunk-OS3FCYZY.js";var ie={};se(ie,{Root:()=>J,Slot:()=>Q});import*as e from"react";import*as U from"react-dom";import _ from"classnames";import{composeRefs as Z}from"radix-ui/internal";var J=e.forwardRef((h,v)=>{let n=B(h,z.size),f=e.useRef(null),{children:E,className:w,color:k,radius:L,style:C,...a}=q(n,z),x=e.useId(),{"aria-describedby":g,"aria-labelledby":I,"aria-invalid":P}=a,T=!!a.error||P===!0||P==="true",M=e.useMemo(()=>{let o=[];return a.errorMessage&&o.push(x),g&&o.push(g),o.length>0?o.join(" "):void 0},[a.errorMessage,g,x]),y=e.useMemo(()=>({"aria-invalid":T?!0:P,"aria-describedby":M,"aria-labelledby":I}),[T,P,M,I]),{error:s,errorMessage:D,required:N,"aria-describedby":O,"aria-labelledby":m,...d}=a,i=e.useCallback(o=>{let S=o.target;if(S.closest("input, button, a"))return;let p=f.current;if(!p)return;let b=S.closest(`
2
2
  .kui-TextFieldSlot[data-side='right'],
3
3
  .kui-TextFieldSlot:not([data-side='right']) ~ .kui-TextFieldSlot:not([data-side='left'])
4
- `)?p.value.length:0;requestAnimationFrame(()=>{try{p.setSelectionRange(b,b)}catch{}p.focus()})},[]);return e.createElement("div",{"data-accent-color":k,"data-radius":L,style:C,className:_("kui-TextFieldRoot",w,{"kui-error":T}),onPointerDown:i},e.createElement("input",{spellCheck:"false",...d,...y,ref:Z(f,v),className:"kui-reset kui-TextFieldInput"}),E,a.errorMessage&&e.createElement("div",{id:x,className:"kui-TextFieldErrorMessage",role:"alert"},a.errorMessage))});J.displayName="TextField.Root";var R=(()=>{if(typeof navigator>"u")return!1;let h=navigator.userAgent,v=/^((?!chrome|android).)*safari/i.test(h),n=/firefox/i.test(h);return v||n})(),Q=e.forwardRef((h,v)=>{let{scrub:n,scrubValue:f,scrubStep:E=1,scrubSensitivity:w=1,scrubMin:k,scrubMax:L,scrubShiftMultiplier:C=10,scrubAltMultiplier:a=.1,onScrub:x,...g}=h,{className:I,color:P,side:T,...M}=z(g,G),y=e.useRef(null),[s,D]=e.useState(!1),[H,O]=e.useState({x:0,y:0}),m=e.useRef(0),d=e.useRef(0),i=e.useRef(0),o=e.useRef(null),S=e.useRef(0),p=e.useRef({scrubValue:f,scrubStep:E,scrubSensitivity:w,scrubMin:k,scrubMax:L,scrubShiftMultiplier:C,scrubAltMultiplier:a,onScrub:x});p.current={scrubValue:f,scrubStep:E,scrubSensitivity:w,scrubMin:k,scrubMax:L,scrubShiftMultiplier:C,scrubAltMultiplier:a,onScrub:x};let Y=e.useCallback(t=>{if(!n||t.target.closest("input, button, a"))return;t.preventDefault(),m.current=0,d.current=f??0,i.current=t.clientX,O({x:t.clientX,y:t.clientY});let c=y.current;c&&(R?(o.current=t.pointerId,S.current=t.clientX,c.setPointerCapture(t.pointerId),D(!0)):c.requestPointerLock())},[n,f]);e.useEffect(()=>{if(R)return;let t=()=>{let r=document.pointerLockElement===y.current;D(r),r||(p.current.onScrub?.(0,!1),m.current=0,d.current=0)};return document.addEventListener("pointerlockchange",t),()=>{document.removeEventListener("pointerlockchange",t)}},[]);let b=e.useCallback((t,r,c,oe)=>{let u=p.current,X=window.innerWidth,A=window.innerHeight;i.current+=t,i.current>X?i.current=i.current%X:i.current<0&&(i.current=X+i.current%X),O(F=>{let l=F.y+r;return l>A?l=l%A:l<0&&(l=A+l%A),{x:i.current,y:l}}),m.current+=t;let V=m.current/u.scrubSensitivity;if(Math.abs(V)>=1){let F=1;c?F=u.scrubShiftMultiplier:oe&&(F=u.scrubAltMultiplier);let l=Math.trunc(V),W=l*u.scrubStep*F,j=W;if(u.scrubMin!==void 0||u.scrubMax!==void 0){let ne=d.current+W,q=Math.max(u.scrubMin??-1/0,Math.min(u.scrubMax??1/0,ne));j=q-d.current,d.current=q}else d.current+=W;j!==0&&u.onScrub?.(j,!0),m.current=(V-l)*u.scrubSensitivity}},[]),N=e.useCallback(()=>{p.current.onScrub?.(0,!1),m.current=0,d.current=0,o.current=null,D(!1)},[]),$=e.useCallback(t=>{if(!s||!R)return;let r=t.clientX-S.current;S.current=t.clientX,b(r,t.movementY,t.shiftKey,t.altKey)},[s,b]),ee=e.useCallback(t=>{if(!R||o.current!==t.pointerId)return;let r=y.current;r&&o.current!==null&&r.releasePointerCapture(o.current),N()},[N]),te=e.useCallback(()=>{R&&s&&N()},[s,N]);e.useEffect(()=>{if(!s||R)return;let t=c=>{b(c.movementX,c.movementY,c.shiftKey,c.altKey)},r=()=>{document.exitPointerLock()};return document.addEventListener("mousemove",t),document.addEventListener("mouseup",r),document.body.style.userSelect="none",()=>{document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",r),document.body.style.userSelect=""}},[s,b]),e.useEffect(()=>{if(!s||!R)return;let t=document.createElement("style");return t.textContent="* { cursor: none !important; user-select: none !important; }",document.head.appendChild(t),()=>{document.head.removeChild(t)}},[s]);let re=s?U.createPortal(e.createElement("img",{className:"kui-TextFieldSlotScrubCursor",src:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='black' stroke='white' stroke-width='1' d='M0 12 L5 7 L5 10 L19 10 L19 7 L24 12 L19 17 L19 14 L5 14 L5 17 Z'/%3E%3C/svg%3E",alt:"",style:{position:"fixed",left:H.x,top:H.y,transform:"translate(-50%, -50%)",pointerEvents:"none",zIndex:99999,width:24,height:24},"aria-hidden":"true"}),document.body):null;return e.createElement("div",{"data-accent-color":P,"data-side":T,"data-scrub":n||void 0,"data-scrubbing":s||void 0,...M,ref:Z(y,v),className:_("kui-TextFieldSlot",I),onPointerDown:n?Y:void 0,onPointerMove:n?$:void 0,onPointerUp:n?ee:void 0,onLostPointerCapture:n?te:void 0},M.children,re)});Q.displayName="TextField.Slot";export{J as a,Q as b,ie as c};
5
- //# sourceMappingURL=chunk-FFG32ERA.js.map
4
+ `)?p.value.length:0;requestAnimationFrame(()=>{try{p.setSelectionRange(b,b)}catch{}p.focus()})},[]);return e.createElement("div",{"data-accent-color":k,"data-radius":L,style:C,className:_("kui-TextFieldRoot",w,{"kui-error":T}),onPointerDown:i},e.createElement("input",{...d,required:N||void 0,...y,ref:Z(f,v),className:"kui-reset kui-TextFieldInput"}),E,a.errorMessage&&e.createElement("div",{id:x,className:"kui-TextFieldErrorMessage",role:"alert"},a.errorMessage))});J.displayName="TextField.Root";var R=(()=>{if(typeof navigator>"u")return!1;let h=navigator.userAgent,v=/^((?!chrome|android).)*safari/i.test(h),n=/firefox/i.test(h);return v||n})(),Q=e.forwardRef((h,v)=>{let{scrub:n,scrubValue:f,scrubStep:E=1,scrubSensitivity:w=1,scrubMin:k,scrubMax:L,scrubShiftMultiplier:C=10,scrubAltMultiplier:a=.1,onScrub:x,...g}=h,{className:I,color:P,side:T,...M}=q(g,G),y=e.useRef(null),[s,D]=e.useState(!1),[N,O]=e.useState({x:0,y:0}),m=e.useRef(0),d=e.useRef(0),i=e.useRef(0),o=e.useRef(null),S=e.useRef(0),p=e.useRef({scrubValue:f,scrubStep:E,scrubSensitivity:w,scrubMin:k,scrubMax:L,scrubShiftMultiplier:C,scrubAltMultiplier:a,onScrub:x});p.current={scrubValue:f,scrubStep:E,scrubSensitivity:w,scrubMin:k,scrubMax:L,scrubShiftMultiplier:C,scrubAltMultiplier:a,onScrub:x};let K=e.useCallback(t=>{if(!n||t.target.closest("input, button, a"))return;t.preventDefault(),m.current=0,d.current=f??0,i.current=t.clientX,O({x:t.clientX,y:t.clientY});let c=y.current;c&&(R?(o.current=t.pointerId,S.current=t.clientX,c.setPointerCapture(t.pointerId),D(!0)):c.requestPointerLock())},[n,f]);e.useEffect(()=>{if(R)return;let t=()=>{let r=document.pointerLockElement===y.current;D(r),r||(p.current.onScrub?.(0,!1),m.current=0,d.current=0)};return document.addEventListener("pointerlockchange",t),()=>{document.removeEventListener("pointerlockchange",t)}},[]);let b=e.useCallback((t,r,c,oe)=>{let u=p.current,A=window.innerWidth,H=window.innerHeight;i.current+=t,i.current>A?i.current=i.current%A:i.current<0&&(i.current=A+i.current%A),O(F=>{let l=F.y+r;return l>H?l=l%H:l<0&&(l=H+l%H),{x:i.current,y:l}}),m.current+=t;let V=m.current/u.scrubSensitivity;if(Math.abs(V)>=1){let F=1;c?F=u.scrubShiftMultiplier:oe&&(F=u.scrubAltMultiplier);let l=Math.trunc(V),W=l*u.scrubStep*F,j=W;if(u.scrubMin!==void 0||u.scrubMax!==void 0){let ne=d.current+W,Y=Math.max(u.scrubMin??-1/0,Math.min(u.scrubMax??1/0,ne));j=Y-d.current,d.current=Y}else d.current+=W;j!==0&&u.onScrub?.(j,!0),m.current=(V-l)*u.scrubSensitivity}},[]),X=e.useCallback(()=>{p.current.onScrub?.(0,!1),m.current=0,d.current=0,o.current=null,D(!1)},[]),$=e.useCallback(t=>{if(!s||!R)return;let r=t.clientX-S.current;S.current=t.clientX,b(r,t.movementY,t.shiftKey,t.altKey)},[s,b]),ee=e.useCallback(t=>{if(!R||o.current!==t.pointerId)return;let r=y.current;r&&o.current!==null&&r.releasePointerCapture(o.current),X()},[X]),te=e.useCallback(()=>{R&&s&&X()},[s,X]);e.useEffect(()=>{if(!s||R)return;let t=c=>{b(c.movementX,c.movementY,c.shiftKey,c.altKey)},r=()=>{document.exitPointerLock()};return document.addEventListener("mousemove",t),document.addEventListener("mouseup",r),document.body.style.userSelect="none",()=>{document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",r),document.body.style.userSelect=""}},[s,b]),e.useEffect(()=>{if(!s||!R)return;let t=document.createElement("style");return t.textContent="* { cursor: none !important; user-select: none !important; }",document.head.appendChild(t),()=>{document.head.removeChild(t)}},[s]);let re=s?U.createPortal(e.createElement("img",{className:"kui-TextFieldSlotScrubCursor",src:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='black' stroke='white' stroke-width='1' d='M0 12 L5 7 L5 10 L19 10 L19 7 L24 12 L19 17 L19 14 L5 14 L5 17 Z'/%3E%3C/svg%3E",alt:"",style:{position:"fixed",left:N.x,top:N.y,transform:"translate(-50%, -50%)",pointerEvents:"none",zIndex:99999,width:24,height:24},"aria-hidden":"true"}),document.body):null;return e.createElement("div",{"data-accent-color":P,"data-side":T,"data-scrub":n||void 0,"data-scrubbing":s||void 0,...M,ref:Z(y,v),className:_("kui-TextFieldSlot",I),onPointerDown:n?K:void 0,onPointerMove:n?$:void 0,onPointerUp:n?ee:void 0,onLostPointerCapture:n?te:void 0},M.children,re)});Q.displayName="TextField.Slot";export{J as a,Q as b,ie as c};
5
+ //# sourceMappingURL=chunk-N3WBEQWL.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/text-field.tsx"],
4
+ "sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { composeRefs } from 'radix-ui/internal';\n\nimport { textFieldRootPropDefs, textFieldSlotPropDefs, type TextFieldSlotScrubProps } from './text-field.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../helpers/theme-size.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { NotInputTextualAttributes } from '../helpers/input-attributes.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype TextFieldRootElement = React.ElementRef<'input'>;\ntype TextFieldRootOwnProps = GetPropDefTypes<typeof textFieldRootPropDefs> & {\n defaultValue?: string | number;\n value?: string | number;\n type?: 'date' | 'datetime-local' | 'email' | 'hidden' | 'month' | 'number' | 'password' | 'search' | 'tel' | 'text' | 'time' | 'url' | 'week';\n};\ntype TextFieldInputProps = ComponentPropsWithout<'input', NotInputTextualAttributes | 'color' | 'defaultValue' | 'size' | 'type' | 'value'>;\ninterface TextFieldRootProps extends TextFieldInputProps, TextFieldRootOwnProps {}\nconst TextFieldRoot = React.forwardRef<TextFieldRootElement, TextFieldRootProps>((ownProps, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, textFieldRootPropDefs.size);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const { children, className, color, radius, style, ...inputProps } = extractProps(props, textFieldRootPropDefs);\n\n // Generate unique IDs for accessibility\n const errorId = React.useId();\n\n const { 'aria-describedby': ariaDescribedby, 'aria-labelledby': ariaLabelledby, 'aria-invalid': ariaInvalid } = inputProps;\n\n // Invalid when `error` is set or the caller passes aria-invalid; the CSS keys on aria-invalid only.\n const isInvalid = Boolean(inputProps.error) || ariaInvalid === true || ariaInvalid === 'true';\n\n // Build aria-describedby string\n const describedBy = React.useMemo(() => {\n const parts = [];\n if (inputProps.errorMessage) parts.push(errorId);\n if (ariaDescribedby) parts.push(ariaDescribedby);\n return parts.length > 0 ? parts.join(' ') : undefined;\n }, [inputProps.errorMessage, ariaDescribedby, errorId]);\n\n // Build aria attributes\n const ariaProps = React.useMemo(\n () => ({\n 'aria-invalid': isInvalid ? true : ariaInvalid,\n 'aria-describedby': describedBy,\n 'aria-labelledby': ariaLabelledby,\n }),\n [isInvalid, ariaInvalid, describedBy, ariaLabelledby],\n );\n\n // Filter out our custom props to avoid DOM warnings\n const { error, errorMessage, required, 'aria-describedby': _ariaDescribedby, 'aria-labelledby': _ariaLabelledby, ...nativeInputProps } = inputProps;\n\n // Memoized pointer event handler\n const handlePointerDown = React.useCallback((event: React.PointerEvent) => {\n const target = event.target as HTMLElement;\n if (target.closest('input, button, a')) return;\n\n const input = inputRef.current;\n if (!input) return;\n\n // Same selector as in the CSS to find the right slot\n const isRightSlot = target.closest(`\n .kui-TextFieldSlot[data-side='right'],\n .kui-TextFieldSlot:not([data-side='right']) ~ .kui-TextFieldSlot:not([data-side='left'])\n `);\n\n const cursorPosition = isRightSlot ? input.value.length : 0;\n\n requestAnimationFrame(() => {\n // Only some input types support this, browsers will throw an error if not supported\n // See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange#:~:text=Note%20that%20according,not%20support%20selection%22.\n try {\n input.setSelectionRange(cursorPosition, cursorPosition);\n } catch {}\n input.focus();\n });\n }, []);\n\n return (\n <div\n data-accent-color={color}\n data-radius={radius}\n style={style}\n className={classNames('kui-TextFieldRoot', className, {\n 'kui-error': isInvalid,\n })}\n onPointerDown={handlePointerDown}\n >\n <input {...nativeInputProps} required={required || undefined} {...ariaProps} ref={composeRefs(inputRef, forwardedRef)} className=\"kui-reset kui-TextFieldInput\" />\n {children}\n {inputProps.errorMessage && (\n <div id={errorId} className=\"kui-TextFieldErrorMessage\" role=\"alert\">\n {inputProps.errorMessage}\n </div>\n )}\n </div>\n );\n});\nTextFieldRoot.displayName = 'TextField.Root';\n\ntype TextFieldSlotElement = React.ElementRef<'div'>;\ntype TextFieldSlotOwnProps = GetPropDefTypes<typeof textFieldSlotPropDefs> & TextFieldSlotScrubProps;\ninterface TextFieldSlotProps extends ComponentPropsWithout<'div', RemovedProps>, TextFieldSlotOwnProps {}\n\n// Detect if we should use pointer capture instead of pointer lock\n// Safari and Firefox show intrusive browser warnings with pointer lock\nconst usePointerCapture = (() => {\n if (typeof navigator === 'undefined') return false;\n const ua = navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isFirefox = /firefox/i.test(ua);\n return isSafari || isFirefox;\n})();\n\nconst TextFieldSlot = React.forwardRef<TextFieldSlotElement, TextFieldSlotProps>((props, forwardedRef) => {\n // Extract scrub props first (not part of PropDef system)\n const { scrub, scrubValue, scrubStep = 1, scrubSensitivity = 1, scrubMin, scrubMax, scrubShiftMultiplier = 10, scrubAltMultiplier = 0.1, onScrub, ...restProps } = props;\n\n // Then extract styling props\n const { className, color, side, ...slotProps } = extractProps(restProps, textFieldSlotPropDefs);\n\n const slotRef = React.useRef<HTMLDivElement>(null);\n const [isScrubbing, setIsScrubbing] = React.useState(false);\n // Virtual cursor position - X wraps around viewport, Y follows mouse\n const [cursorPosition, setCursorPosition] = React.useState({ x: 0, y: 0 });\n\n // Track accumulated sub-step movement for precision\n const accumulatedMovement = React.useRef(0);\n // Track current value for clamping (initialized to scrubValue when scrubbing starts)\n const currentValue = React.useRef(0);\n // Track virtual X position for wrap-around (separate from rendered position)\n const virtualX = React.useRef(0);\n // Track pointer ID for capture mode\n const pointerIdRef = React.useRef<number | null>(null);\n // Track last X position for capture mode (movementX calculation)\n const lastXRef = React.useRef(0);\n\n // Store scrub config in refs so document handlers can access latest values\n const scrubConfigRef = React.useRef({\n scrubValue,\n scrubStep,\n scrubSensitivity,\n scrubMin,\n scrubMax,\n scrubShiftMultiplier,\n scrubAltMultiplier,\n onScrub,\n });\n scrubConfigRef.current = {\n scrubValue,\n scrubStep,\n scrubSensitivity,\n scrubMin,\n scrubMax,\n scrubShiftMultiplier,\n scrubAltMultiplier,\n onScrub,\n };\n\n const handlePointerDown = React.useCallback(\n (event: React.PointerEvent) => {\n if (!scrub) return;\n\n // Don't start scrubbing if clicking on interactive elements\n const target = event.target as HTMLElement;\n if (target.closest('input, button, a')) return;\n\n event.preventDefault();\n accumulatedMovement.current = 0;\n // Initialize to current value so min/max clamping works correctly\n currentValue.current = scrubValue ?? 0;\n\n // Initialize virtual cursor at actual mouse position\n virtualX.current = event.clientX;\n setCursorPosition({ x: event.clientX, y: event.clientY });\n\n const slot = slotRef.current;\n if (!slot) return;\n\n if (usePointerCapture) {\n // Safari/Firefox: Use pointer capture (no browser warning)\n pointerIdRef.current = event.pointerId;\n lastXRef.current = event.clientX;\n slot.setPointerCapture(event.pointerId);\n setIsScrubbing(true);\n } else {\n // Chrome: Use pointer lock for infinite movement\n slot.requestPointerLock();\n }\n },\n [scrub, scrubValue],\n );\n\n // Handle pointer lock state changes (Chrome only)\n React.useEffect(() => {\n if (usePointerCapture) return;\n\n const handlePointerLockChange = () => {\n const isLocked = document.pointerLockElement === slotRef.current;\n setIsScrubbing(isLocked);\n if (!isLocked) {\n // Fire callback with isChanging = false when scrubbing ends\n scrubConfigRef.current.onScrub?.(0, false);\n accumulatedMovement.current = 0;\n currentValue.current = 0;\n }\n };\n\n document.addEventListener('pointerlockchange', handlePointerLockChange);\n return () => {\n document.removeEventListener('pointerlockchange', handlePointerLockChange);\n };\n }, []);\n\n // Shared scrub calculation logic\n const processScrubMovement = React.useCallback((movementX: number, movementY: number, shiftKey: boolean, altKey: boolean) => {\n const config = scrubConfigRef.current;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Update virtual position with wrap-around at viewport edges\n virtualX.current += movementX;\n if (virtualX.current > viewportWidth) {\n virtualX.current = virtualX.current % viewportWidth;\n } else if (virtualX.current < 0) {\n virtualX.current = viewportWidth + (virtualX.current % viewportWidth);\n }\n\n // Also track Y with wrap-around\n setCursorPosition((prev) => {\n let newY = prev.y + movementY;\n if (newY > viewportHeight) {\n newY = newY % viewportHeight;\n } else if (newY < 0) {\n newY = viewportHeight + (newY % viewportHeight);\n }\n return { x: virtualX.current, y: newY };\n });\n\n // Accumulate movement for sensitivity calculation\n accumulatedMovement.current += movementX;\n\n // Calculate how many steps we've moved\n const stepsFromMovement = accumulatedMovement.current / config.scrubSensitivity;\n\n if (Math.abs(stepsFromMovement) >= 1) {\n // Determine modifier multiplier\n let multiplier = 1;\n if (shiftKey) {\n multiplier = config.scrubShiftMultiplier;\n } else if (altKey) {\n multiplier = config.scrubAltMultiplier;\n }\n\n // Calculate delta\n const wholeSteps = Math.trunc(stepsFromMovement);\n const delta = wholeSteps * config.scrubStep * multiplier;\n\n // Apply min/max clamping if bounds are set\n let clampedDelta = delta;\n if (config.scrubMin !== undefined || config.scrubMax !== undefined) {\n const newValue = currentValue.current + delta;\n const clampedValue = Math.max(config.scrubMin ?? -Infinity, Math.min(config.scrubMax ?? Infinity, newValue));\n clampedDelta = clampedValue - currentValue.current;\n currentValue.current = clampedValue;\n } else {\n currentValue.current += delta;\n }\n\n // Fire callback with clamped delta (isChanging = true during drag)\n if (clampedDelta !== 0) {\n config.onScrub?.(clampedDelta, true);\n }\n\n // Keep the fractional remainder for smooth sub-pixel accumulation\n accumulatedMovement.current = (stepsFromMovement - wholeSteps) * config.scrubSensitivity;\n }\n }, []);\n\n // End scrubbing helper\n const endScrubbing = React.useCallback(() => {\n scrubConfigRef.current.onScrub?.(0, false);\n accumulatedMovement.current = 0;\n currentValue.current = 0;\n pointerIdRef.current = null;\n setIsScrubbing(false);\n }, []);\n\n // Handle pointer capture mode events (Safari/Firefox)\n const handlePointerMove = React.useCallback(\n (event: React.PointerEvent) => {\n if (!isScrubbing || !usePointerCapture) return;\n\n const movementX = event.clientX - lastXRef.current;\n lastXRef.current = event.clientX;\n\n processScrubMovement(movementX, event.movementY, event.shiftKey, event.altKey);\n },\n [isScrubbing, processScrubMovement],\n );\n\n const handlePointerUp = React.useCallback(\n (event: React.PointerEvent) => {\n if (!usePointerCapture || pointerIdRef.current !== event.pointerId) return;\n\n const slot = slotRef.current;\n if (slot && pointerIdRef.current !== null) {\n slot.releasePointerCapture(pointerIdRef.current);\n }\n endScrubbing();\n },\n [endScrubbing],\n );\n\n const handleLostPointerCapture = React.useCallback(() => {\n if (usePointerCapture && isScrubbing) {\n endScrubbing();\n }\n }, [isScrubbing, endScrubbing]);\n\n // Attach document-level listeners for pointer lock mode (Chrome)\n React.useEffect(() => {\n if (!isScrubbing || usePointerCapture) return;\n\n const handleMouseMove = (event: MouseEvent) => {\n processScrubMovement(event.movementX, event.movementY, event.shiftKey, event.altKey);\n };\n\n const handleMouseUp = () => {\n // Exit pointer lock to end scrubbing\n document.exitPointerLock();\n };\n\n // Use mousemove for pointer lock (pointermove doesn't work well with pointer lock)\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n\n // Disable text selection during scrubbing\n document.body.style.userSelect = 'none';\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.body.style.userSelect = '';\n };\n }, [isScrubbing, processScrubMovement]);\n\n // Hide native cursor and disable text selection during pointer capture scrubbing\n React.useEffect(() => {\n if (!isScrubbing || !usePointerCapture) return;\n\n // Create a style element to hide cursor globally during scrub\n const style = document.createElement('style');\n style.textContent = '* { cursor: none !important; user-select: none !important; }';\n document.head.appendChild(style);\n\n return () => {\n document.head.removeChild(style);\n };\n }, [isScrubbing]);\n\n // Render virtual cursor via portal to body so it's not clipped\n // Using a data URI of ew-resize cursor for a native look\n const virtualCursor = isScrubbing\n ? ReactDOM.createPortal(\n <img\n className=\"kui-TextFieldSlotScrubCursor\"\n src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='black' stroke='white' stroke-width='1' d='M0 12 L5 7 L5 10 L19 10 L19 7 L24 12 L19 17 L19 14 L5 14 L5 17 Z'/%3E%3C/svg%3E\"\n alt=\"\"\n style={{\n position: 'fixed',\n left: cursorPosition.x,\n top: cursorPosition.y,\n transform: 'translate(-50%, -50%)',\n pointerEvents: 'none',\n zIndex: 99999,\n width: 24,\n height: 24,\n }}\n aria-hidden=\"true\"\n />,\n document.body,\n )\n : null;\n\n return (\n <div\n data-accent-color={color}\n data-side={side}\n data-scrub={scrub || undefined}\n data-scrubbing={isScrubbing || undefined}\n {...slotProps}\n ref={composeRefs(slotRef, forwardedRef)}\n className={classNames('kui-TextFieldSlot', className)}\n onPointerDown={scrub ? handlePointerDown : undefined}\n onPointerMove={scrub ? handlePointerMove : undefined}\n onPointerUp={scrub ? handlePointerUp : undefined}\n onLostPointerCapture={scrub ? handleLostPointerCapture : undefined}\n >\n {slotProps.children}\n {virtualCursor}\n </div>\n );\n});\nTextFieldSlot.displayName = 'TextField.Slot';\n\nexport { TextFieldRoot as Root, TextFieldSlot as Slot };\nexport type { TextFieldRootProps as RootProps, TextFieldSlotProps as SlotProps };\n"],
5
+ "mappings": "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",
6
+ "names": ["text_field_exports", "__export", "TextFieldRoot", "TextFieldSlot", "React", "ReactDOM", "classNames", "composeRefs", "TextFieldRoot", "ownProps", "forwardedRef", "props", "useThemeSizeProps", "textFieldRootPropDefs", "inputRef", "children", "className", "color", "radius", "style", "inputProps", "extractProps", "errorId", "ariaDescribedby", "ariaLabelledby", "ariaInvalid", "isInvalid", "describedBy", "parts", "ariaProps", "error", "errorMessage", "required", "_ariaDescribedby", "_ariaLabelledby", "nativeInputProps", "handlePointerDown", "event", "target", "input", "cursorPosition", "classNames", "composeRefs", "usePointerCapture", "ua", "isSafari", "isFirefox", "TextFieldSlot", "scrub", "scrubValue", "scrubStep", "scrubSensitivity", "scrubMin", "scrubMax", "scrubShiftMultiplier", "scrubAltMultiplier", "onScrub", "restProps", "side", "slotProps", "textFieldSlotPropDefs", "slotRef", "isScrubbing", "setIsScrubbing", "setCursorPosition", "accumulatedMovement", "currentValue", "virtualX", "pointerIdRef", "lastXRef", "scrubConfigRef", "slot", "handlePointerLockChange", "isLocked", "processScrubMovement", "movementX", "movementY", "shiftKey", "altKey", "config", "viewportWidth", "viewportHeight", "prev", "newY", "stepsFromMovement", "multiplier", "wholeSteps", "delta", "clampedDelta", "newValue", "clampedValue", "endScrubbing", "handlePointerMove", "handlePointerUp", "handleLostPointerCapture", "handleMouseMove", "handleMouseUp", "virtualCursor"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{a as i,b as s}from"./chunk-IX5HIHVI.js";import{e as p}from"./chunk-3YLYGKFB.js";import{a as o}from"./chunk-DNOQ6E3W.js";import{a as c}from"./chunk-ELAW7ZUG.js";import*as e from"react";import b from"classnames";import{Checkbox as h}from"radix-ui";import{useControllableState as P}from"radix-ui/internal";var u=e.forwardRef((a,k)=>{let m=p(a,o.size),{className:n,color:C,checked:d,defaultChecked:t,onCheckedChange:f,...l}=c(m,o),[r,x]=P({prop:d,defaultProp:t??!1,onChange:f});return e.createElement(h.Root,{"data-accent-color":C,...l,defaultChecked:t,checked:r,onCheckedChange:x,asChild:!1,ref:k,className:b("kui-reset","kui-BaseCheckboxRoot","kui-CheckboxRoot",n)},e.createElement(h.Indicator,{asChild:!0,className:"kui-BaseCheckboxIndicator kui-CheckboxIndicator"},r==="indeterminate"?e.createElement(i,null):e.createElement(s,null)))});u.displayName="Checkbox";export{u as a};
2
- //# sourceMappingURL=chunk-HKPXDQ2B.js.map
1
+ import{a as p,b as i}from"./chunk-62ZGP4ET.js";import{e as s}from"./chunk-3YLYGKFB.js";import{a as o}from"./chunk-DNOQ6E3W.js";import{a as c}from"./chunk-ELAW7ZUG.js";import*as e from"react";import b from"classnames";import{Checkbox as h}from"radix-ui";import{useControllableState as P}from"radix-ui/internal";var u=e.forwardRef((a,k)=>{let m=s(a,o.size),{className:n,color:C,checked:d,defaultChecked:t,onCheckedChange:f,...l}=c(m,o),[r,x]=P({prop:d,defaultProp:t??!1,onChange:f});return e.createElement(h.Root,{"data-accent-color":C,...l,defaultChecked:t,checked:r,onCheckedChange:x,asChild:!1,ref:k,className:b("kui-reset","kui-BaseCheckboxRoot","kui-CheckboxRoot",n)},e.createElement(h.Indicator,{asChild:!0,className:"kui-BaseCheckboxIndicator kui-CheckboxIndicator"},r==="indeterminate"?e.createElement(p,null):e.createElement(i,null)))});u.displayName="Checkbox";export{u as a};
2
+ //# sourceMappingURL=chunk-NC3CJUE3.js.map
@@ -0,0 +1,2 @@
1
+ import{a as p}from"./chunk-SKOYHBIE.js";import{a as t}from"./chunk-ELAW7ZUG.js";import{a as s}from"./chunk-E23RKOQJ.js";import*as r from"react";import l from"classnames";import{Progress as i}from"radix-ui";var c=r.forwardRef((m,a)=>{let{className:P,style:n,color:f,radius:d,duration:g,...e}=t(m,p),o=e.value!=null;return r.createElement(i.Root,{"data-accent-color":f,"data-radius":d,ref:a,className:l("kui-ProgressRoot",P),style:s({"--progress-duration":o?void 0:g,"--progress-value":o?e.value:void 0,"--progress-max":e.max??void 0},n),...e,asChild:!1},r.createElement(i.Indicator,{className:"kui-ProgressIndicator"}))});c.displayName="Progress";export{c as a};
2
+ //# sourceMappingURL=chunk-P2MV6HLA.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/progress.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { Progress as ProgressPrimitive } from 'radix-ui';\n\nimport { progressPropDefs } from './progress.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { mergeStyles } from '../helpers/merge-styles.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype ProgressElement = React.ElementRef<typeof ProgressPrimitive.Root>;\ntype ProgressOwnProps = GetPropDefTypes<typeof progressPropDefs>;\ninterface ProgressProps\n extends ComponentPropsWithout<typeof ProgressPrimitive.Root, RemovedProps | 'children'>,\n ProgressOwnProps {\n duration?: `${number}s` | `${number}ms`;\n}\nconst Progress = React.forwardRef<ProgressElement, ProgressProps>((props, forwardedRef) => {\n const { className, style, color, radius, duration, ...progressProps } = extractProps(\n props,\n progressPropDefs\n );\n\n return (\n <ProgressPrimitive.Root\n data-accent-color={color}\n data-radius={radius}\n ref={forwardedRef}\n className={classNames('kui-ProgressRoot', className)}\n style={mergeStyles(\n {\n '--progress-duration': 'value' in progressProps ? undefined : duration,\n '--progress-value': 'value' in progressProps ? progressProps.value : undefined,\n '--progress-max': 'max' in progressProps ? progressProps.max : undefined,\n },\n style\n )}\n {...progressProps}\n asChild={false}\n >\n <ProgressPrimitive.Indicator className=\"kui-ProgressIndicator\" />\n </ProgressPrimitive.Root>\n );\n});\nProgress.displayName = 'Progress';\n\nexport { Progress };\nexport type { ProgressProps };\n"],
5
- "mappings": "wHAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,YAAYC,MAAyB,WAgB9C,IAAMC,EAAiB,aAA2C,CAACC,EAAOC,IAAiB,CACzF,GAAM,CAAE,UAAAC,EAAW,MAAAC,EAAO,MAAAC,EAAO,OAAAC,EAAQ,SAAAC,EAAU,GAAGC,CAAc,EAAIC,EACtER,EACAS,CACF,EAEA,OACE,gBAACC,EAAkB,KAAlB,CACC,oBAAmBN,EACnB,cAAaC,EACb,IAAKJ,EACL,UAAWU,EAAW,mBAAoBT,CAAS,EACnD,MAAOU,EACL,CACE,sBAAuB,UAAWL,EAAgB,OAAYD,EAC9D,mBAAoB,UAAWC,EAAgBA,EAAc,MAAQ,OACrE,iBAAkB,QAASA,EAAgBA,EAAc,IAAM,MACjE,EACAJ,CACF,EACC,GAAGI,EACJ,QAAS,IAET,gBAACG,EAAkB,UAAlB,CAA4B,UAAU,wBAAwB,CACjE,CAEJ,CAAC,EACDX,EAAS,YAAc",
6
- "names": ["React", "classNames", "ProgressPrimitive", "Progress", "props", "forwardedRef", "className", "style", "color", "radius", "duration", "progressProps", "extractProps", "progressPropDefs", "ProgressPrimitive", "classNames", "mergeStyles"]
4
+ "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { Progress as ProgressPrimitive } from 'radix-ui';\n\nimport { progressPropDefs } from './progress.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { mergeStyles } from '../helpers/merge-styles.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype ProgressElement = React.ElementRef<typeof ProgressPrimitive.Root>;\ntype ProgressOwnProps = GetPropDefTypes<typeof progressPropDefs>;\ninterface ProgressProps\n extends ComponentPropsWithout<typeof ProgressPrimitive.Root, RemovedProps | 'children'>,\n ProgressOwnProps {\n duration?: `${number}s` | `${number}ms`;\n}\nconst Progress = React.forwardRef<ProgressElement, ProgressProps>((props, forwardedRef) => {\n const { className, style, color, radius, duration, ...progressProps } = extractProps(\n props,\n progressPropDefs\n );\n\n // `null` and `undefined` both mean indeterminate, as in Radix, so both keep a custom duration.\n const isDeterminate = progressProps.value != null;\n\n return (\n <ProgressPrimitive.Root\n data-accent-color={color}\n data-radius={radius}\n ref={forwardedRef}\n className={classNames('kui-ProgressRoot', className)}\n style={mergeStyles(\n {\n '--progress-duration': isDeterminate ? undefined : duration,\n '--progress-value': isDeterminate ? progressProps.value : undefined,\n '--progress-max': progressProps.max ?? undefined,\n },\n style\n )}\n {...progressProps}\n asChild={false}\n >\n <ProgressPrimitive.Indicator className=\"kui-ProgressIndicator\" />\n </ProgressPrimitive.Root>\n );\n});\nProgress.displayName = 'Progress';\n\nexport { Progress };\nexport type { ProgressProps };\n"],
5
+ "mappings": "wHAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,YAAYC,MAAyB,WAgB9C,IAAMC,EAAiB,aAA2C,CAACC,EAAOC,IAAiB,CACzF,GAAM,CAAE,UAAAC,EAAW,MAAAC,EAAO,MAAAC,EAAO,OAAAC,EAAQ,SAAAC,EAAU,GAAGC,CAAc,EAAIC,EACtER,EACAS,CACF,EAGMC,EAAgBH,EAAc,OAAS,KAE7C,OACE,gBAACI,EAAkB,KAAlB,CACC,oBAAmBP,EACnB,cAAaC,EACb,IAAKJ,EACL,UAAWW,EAAW,mBAAoBV,CAAS,EACnD,MAAOW,EACL,CACE,sBAAuBH,EAAgB,OAAYJ,EACnD,mBAAoBI,EAAgBH,EAAc,MAAQ,OAC1D,iBAAkBA,EAAc,KAAO,MACzC,EACAJ,CACF,EACC,GAAGI,EACJ,QAAS,IAET,gBAACI,EAAkB,UAAlB,CAA4B,UAAU,wBAAwB,CACjE,CAEJ,CAAC,EACDZ,EAAS,YAAc",
6
+ "names": ["React", "classNames", "ProgressPrimitive", "Progress", "props", "forwardedRef", "className", "style", "color", "radius", "duration", "progressProps", "extractProps", "progressPropDefs", "isDeterminate", "ProgressPrimitive", "classNames", "mergeStyles"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ import{a as i}from"./chunk-IDOZJVO6.js";import{a as r}from"./chunk-KT2CMUS5.js";import{a as p}from"./chunk-ELAW7ZUG.js";import*as o from"react";import b from"classnames";import{Slot as D}from"radix-ui";var R=o.forwardRef((s,n)=>{let{asChild:a,className:l,children:m,color:c,radius:h,tooltip:t,tooltipSide:f="top",tooltipAlign:d="center",tooltipDelayDuration:C,tooltipDisableHoverableContent:P,...u}=p(s,i),y=a?D.Root:"span",e=o.createElement(y,{"data-accent-color":c,"data-radius":h,tabIndex:t?0:void 0,...u,ref:n,className:b("kui-reset","kui-Chip",l)},m);return t?o.createElement(r,{content:t,side:f,align:d,delayDuration:C,disableHoverableContent:P},e):e});R.displayName="Chip";export{R as a};
2
+ //# sourceMappingURL=chunk-PALE5UWK.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/chip.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { Slot } from 'radix-ui';\n\nimport { chipPropDefs } from './chip.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { Tooltip } from './tooltip.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype ChipElement = React.ElementRef<'span'>;\ntype ChipOwnProps = GetPropDefTypes<typeof chipPropDefs>;\n\n// Tooltip props that can be passed to Chip\ninterface ChipTooltipProps {\n tooltip?: React.ReactNode;\n tooltipSide?: 'top' | 'right' | 'bottom' | 'left';\n tooltipAlign?: 'start' | 'center' | 'end';\n tooltipDelayDuration?: number;\n tooltipDisableHoverableContent?: boolean;\n}\n\ninterface ChipProps\n extends ComponentPropsWithout<'span', RemovedProps>,\n ChipOwnProps,\n ChipTooltipProps {}\n\nconst Chip = React.forwardRef<ChipElement, ChipProps>((props, forwardedRef) => {\n const {\n asChild,\n className,\n children,\n color,\n radius,\n tooltip,\n tooltipSide = 'top',\n tooltipAlign = 'center',\n tooltipDelayDuration,\n tooltipDisableHoverableContent,\n ...chipProps\n } = extractProps(props, chipPropDefs);\n\n\n\n // Memoize component variable to prevent unnecessary re-renders\n const Comp = React.useMemo(() => (asChild ? Slot.Root : 'span'), [asChild]);\n\n const chip = (\n <Comp\n data-accent-color={color}\n data-radius={radius}\n {...chipProps}\n ref={forwardedRef}\n className={classNames('kui-reset', 'kui-Chip', className)}\n >\n {children}\n </Comp>\n );\n\n // If no tooltip is provided, return the chip as-is\n if (!tooltip) {\n return chip;\n }\n\n // Wrap with Tooltip when tooltip content is provided\n return (\n <Tooltip\n content={tooltip}\n side={tooltipSide}\n align={tooltipAlign}\n delayDuration={tooltipDelayDuration}\n disableHoverableContent={tooltipDisableHoverableContent}\n >\n {chip}\n </Tooltip>\n );\n});\nChip.displayName = 'Chip';\n\nexport { Chip };\nexport type { ChipProps };\n"],
5
- "mappings": "wHAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,QAAAC,MAAY,WA0BrB,IAAMC,EAAa,aAAmC,CAACC,EAAOC,IAAiB,CAC7E,GAAM,CACJ,QAAAC,EACA,UAAAC,EACA,SAAAC,EACA,MAAAC,EACA,OAAAC,EACA,QAAAC,EACA,YAAAC,EAAc,MACd,aAAAC,EAAe,SACf,qBAAAC,EACA,+BAAAC,EACA,GAAGC,CACL,EAAIC,EAAab,EAAOc,CAAY,EAK9BC,EAAa,UAAQ,IAAOb,EAAUc,EAAK,KAAO,OAAS,CAACd,CAAO,CAAC,EAEpEe,EACJ,gBAACF,EAAA,CACC,oBAAmBV,EACnB,cAAaC,EACZ,GAAGM,EACJ,IAAKX,EACL,UAAWiB,EAAW,YAAa,WAAYf,CAAS,GAEvDC,CACH,EAIF,OAAKG,EAMH,gBAACY,EAAA,CACC,QAASZ,EACT,KAAMC,EACN,MAAOC,EACP,cAAeC,EACf,wBAAyBC,GAExBM,CACH,EAbOA,CAeX,CAAC,EACDlB,EAAK,YAAc",
4
+ "sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { Slot } from 'radix-ui';\n\nimport { chipPropDefs } from './chip.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { Tooltip } from './tooltip.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype ChipElement = React.ElementRef<'span'>;\ntype ChipOwnProps = GetPropDefTypes<typeof chipPropDefs>;\n\n// Tooltip props that can be passed to Chip\ninterface ChipTooltipProps {\n tooltip?: React.ReactNode;\n tooltipSide?: 'top' | 'right' | 'bottom' | 'left';\n tooltipAlign?: 'start' | 'center' | 'end';\n tooltipDelayDuration?: number;\n tooltipDisableHoverableContent?: boolean;\n}\n\ninterface ChipProps\n extends ComponentPropsWithout<'span', RemovedProps>,\n ChipOwnProps,\n ChipTooltipProps {}\n\nconst Chip = React.forwardRef<ChipElement, ChipProps>((props, forwardedRef) => {\n const {\n asChild,\n className,\n children,\n color,\n radius,\n tooltip,\n tooltipSide = 'top',\n tooltipAlign = 'center',\n tooltipDelayDuration,\n tooltipDisableHoverableContent,\n ...chipProps\n } = extractProps(props, chipPropDefs);\n\n const Comp = asChild ? Slot.Root : 'span';\n\n const chip = (\n <Comp\n data-accent-color={color}\n data-radius={radius}\n // A tooltip opens on focus, so a chip that has one joins the tab order.\n tabIndex={tooltip ? 0 : undefined}\n {...chipProps}\n ref={forwardedRef}\n className={classNames('kui-reset', 'kui-Chip', className)}\n >\n {children}\n </Comp>\n );\n\n // If no tooltip is provided, return the chip as-is\n if (!tooltip) {\n return chip;\n }\n\n // Wrap with Tooltip when tooltip content is provided\n return (\n <Tooltip\n content={tooltip}\n side={tooltipSide}\n align={tooltipAlign}\n delayDuration={tooltipDelayDuration}\n disableHoverableContent={tooltipDisableHoverableContent}\n >\n {chip}\n </Tooltip>\n );\n});\nChip.displayName = 'Chip';\n\nexport { Chip };\nexport type { ChipProps };\n"],
5
+ "mappings": "wHAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,QAAAC,MAAY,WA0BrB,IAAMC,EAAa,aAAmC,CAACC,EAAOC,IAAiB,CAC7E,GAAM,CACJ,QAAAC,EACA,UAAAC,EACA,SAAAC,EACA,MAAAC,EACA,OAAAC,EACA,QAAAC,EACA,YAAAC,EAAc,MACd,aAAAC,EAAe,SACf,qBAAAC,EACA,+BAAAC,EACA,GAAGC,CACL,EAAIC,EAAab,EAAOc,CAAY,EAE9BC,EAAOb,EAAUc,EAAK,KAAO,OAE7BC,EACJ,gBAACF,EAAA,CACC,oBAAmBV,EACnB,cAAaC,EAEb,SAAUC,EAAU,EAAI,OACvB,GAAGK,EACJ,IAAKX,EACL,UAAWiB,EAAW,YAAa,WAAYf,CAAS,GAEvDC,CACH,EAIF,OAAKG,EAMH,gBAACY,EAAA,CACC,QAASZ,EACT,KAAMC,EACN,MAAOC,EACP,cAAeC,EACf,wBAAyBC,GAExBM,CACH,EAbOA,CAeX,CAAC,EACDlB,EAAK,YAAc",
6
6
  "names": ["React", "classNames", "Slot", "Chip", "props", "forwardedRef", "asChild", "className", "children", "color", "radius", "tooltip", "tooltipSide", "tooltipAlign", "tooltipDelayDuration", "tooltipDisableHoverableContent", "chipProps", "extractProps", "chipPropDefs", "Comp", "Slot", "chip", "classNames", "Tooltip"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ import{a as l}from"./chunk-CLZW2IDD.js";import{e as c}from"./chunk-3YLYGKFB.js";import{a as u}from"./chunk-ELAW7ZUG.js";import{a as V}from"./chunk-OS3FCYZY.js";var D={};V(D,{Item:()=>P,Root:()=>C});import*as e from"react";import g from"classnames";import{ToggleGroup as f}from"radix-ui";import{useComposedRefs as L,useControllableState as E}from"radix-ui/internal";var G=typeof window>"u"?e.useEffect:e.useLayoutEffect,C=e.forwardRef((n,s)=>{let t=c(n,l.size),{className:a,children:r,radius:R,value:S,defaultValue:y,onValueChange:I,style:v,...h}=u(t,l),[m,x]=E({prop:S,onChange:I,defaultProp:y??""}),d=e.useRef(null),b=L(s,d),p=e.Children.toArray(r).filter(e.isValidElement),N=p.length,T=Math.max(0,p.findIndex(o=>o.props.value===m));return G(()=>{let o=d.current;if(!o)return;let i=Array.from(o.querySelectorAll(":scope > .kui-SegmentedControlItem")),k=i.findIndex(w=>w.getAttribute("data-state")==="on");o.style.setProperty("--segmented-control-count",String(i.length||1)),o.style.setProperty("--segmented-control-index",String(Math.max(0,k)))}),e.createElement(f.Root,{"data-disabled":t.disabled||void 0,"data-radius":R,ref:b,style:{"--segmented-control-count":N||1,"--segmented-control-index":T,...v},className:g("kui-SegmentedControlRoot",a),onValueChange:o=>{o&&x(o)},...h,type:"single",value:m,asChild:!1,disabled:!!t.disabled},r,e.createElement("div",{className:"kui-SegmentedControlIndicator"}))});C.displayName="SegmentedControl.Root";var P=e.forwardRef(({children:n,className:s,iconOnly:t,...a},r)=>e.createElement(f.Item,{ref:r,className:g("kui-reset","kui-SegmentedControlItem",s),"data-icon-only":t||void 0,...a,asChild:!1},e.createElement("span",{className:"kui-SegmentedControlItemSeparator"}),e.createElement("span",{className:"kui-SegmentedControlItemLabel"},e.createElement("span",{className:"kui-SegmentedControlItemLabelActive"},n),e.createElement("span",{className:"kui-SegmentedControlItemLabelInactive","aria-hidden":!0},n))));P.displayName="SegmentedControl.Item";export{C as a,P as b,D as c};
2
+ //# sourceMappingURL=chunk-PDMCLVYT.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/segmented-control.tsx"],
4
+ "sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';\nimport { useComposedRefs, useControllableState } from 'radix-ui/internal';\n\nimport { segmentedControlRootPropDefs } from './segmented-control.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../helpers/theme-size.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype SegmentedControlRootOwnProps = GetPropDefTypes<typeof segmentedControlRootPropDefs>;\n\ninterface SegmentedControlRootProps\n extends ComponentPropsWithout<'div', RemovedProps | 'dir'>,\n SegmentedControlRootOwnProps {\n value?: string;\n defaultValue?: string;\n onValueChange?(value: string): void;\n}\n\nconst useIsomorphicLayoutEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;\n\nconst SegmentedControlRoot = React.forwardRef<HTMLDivElement, SegmentedControlRootProps>(\n (ownProps, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, segmentedControlRootPropDefs.size);\n const {\n className,\n children,\n radius,\n value: valueProp,\n defaultValue: defaultValueProp,\n onValueChange: onValueChangeProp,\n style,\n ...rootProps\n } = extractProps(props, segmentedControlRootPropDefs);\n\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChangeProp,\n defaultProp: defaultValueProp ?? '',\n });\n\n // The indicator is sized and placed from the item count and the selected index, written\n // as custom properties. They are read from the children on render, so the server markup\n // is right, then corrected from the DOM, which also sees items inside fragments or\n // wrapper components.\n const rootRef = React.useRef<HTMLDivElement>(null);\n const composedRef = useComposedRefs(forwardedRef, rootRef);\n const items = React.Children.toArray(children).filter(React.isValidElement);\n const renderedCount = items.length;\n const renderedIndex = Math.max(\n 0,\n items.findIndex((child) => (child.props as { value?: unknown }).value === value),\n );\n useIsomorphicLayoutEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n const domItems = Array.from(root.querySelectorAll(':scope > .kui-SegmentedControlItem'));\n const index = domItems.findIndex((item) => item.getAttribute('data-state') === 'on');\n root.style.setProperty('--segmented-control-count', String(domItems.length || 1));\n root.style.setProperty('--segmented-control-index', String(Math.max(0, index)));\n });\n\n return (\n <ToggleGroupPrimitive.Root\n data-disabled={props.disabled || undefined}\n data-radius={radius}\n ref={composedRef}\n style={\n {\n '--segmented-control-count': renderedCount || 1,\n '--segmented-control-index': renderedIndex,\n ...style,\n } as React.CSSProperties\n }\n className={classNames('kui-SegmentedControlRoot', className)}\n onValueChange={(value) => {\n if (value) {\n setValue(value);\n }\n }}\n {...rootProps}\n type=\"single\"\n value={value}\n asChild={false}\n disabled={!!props.disabled}\n >\n {children}\n <div className=\"kui-SegmentedControlIndicator\" />\n </ToggleGroupPrimitive.Root>\n );\n },\n);\n\nSegmentedControlRoot.displayName = 'SegmentedControl.Root';\n\ninterface SegmentedControlItemOwnProps {\n value: string;\n /** When true, this segment can't be selected. */\n disabled?: boolean;\n /** When true, applies fixed square width for icon-only segments */\n iconOnly?: boolean;\n}\n\ninterface SegmentedControlItemProps\n extends ComponentPropsWithout<\n typeof ToggleGroupPrimitive.Item,\n RemovedProps | 'type' | 'value'\n >,\n SegmentedControlItemOwnProps {}\n\nconst SegmentedControlItem = React.forwardRef<HTMLButtonElement, SegmentedControlItemProps>(\n ({ children, className, iconOnly, ...props }, forwardedRef) => (\n <ToggleGroupPrimitive.Item\n ref={forwardedRef}\n className={classNames('kui-reset', 'kui-SegmentedControlItem', className)}\n data-icon-only={iconOnly || undefined}\n {...props}\n asChild={false}\n >\n <span className=\"kui-SegmentedControlItemSeparator\" />\n <span className=\"kui-SegmentedControlItemLabel\">\n <span className=\"kui-SegmentedControlItemLabelActive\">{children}</span>\n <span className=\"kui-SegmentedControlItemLabelInactive\" aria-hidden>\n {children}\n </span>\n </span>\n </ToggleGroupPrimitive.Item>\n ),\n);\n\nSegmentedControlItem.displayName = 'SegmentedControl.Item';\n\nexport { SegmentedControlRoot as Root, SegmentedControlItem as Item };\nexport type { SegmentedControlRootProps as RootProps, SegmentedControlItemProps as ItemProps };\n"],
5
+ "mappings": "gKAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,UAAAE,EAAA,SAAAC,IAEA,UAAYC,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,eAAeC,MAA4B,WACpD,OAAS,mBAAAC,EAAiB,wBAAAC,MAA4B,oBAmBtD,IAAMC,EAA4B,OAAO,OAAW,IAAoB,YAAkB,kBAEpFC,EAA6B,aACjC,CAACC,EAAUC,IAAiB,CAC1B,IAAMC,EAAQC,EAAkBH,EAAUI,EAA6B,IAAI,EACrE,CACJ,UAAAC,EACA,SAAAC,EACA,OAAAC,EACA,MAAOC,EACP,aAAcC,EACd,cAAeC,EACf,MAAAC,EACA,GAAGC,CACL,EAAIC,EAAaX,EAAOE,CAA4B,EAE9C,CAACU,EAAOC,CAAQ,EAAIC,EAAqB,CAC7C,KAAMR,EACN,SAAUE,EACV,YAAaD,GAAoB,EACnC,CAAC,EAMKQ,EAAgB,SAAuB,IAAI,EAC3CC,EAAcC,EAAgBlB,EAAcgB,CAAO,EACnDG,EAAc,WAAS,QAAQd,CAAQ,EAAE,OAAa,gBAAc,EACpEe,EAAgBD,EAAM,OACtBE,EAAgB,KAAK,IACzB,EACAF,EAAM,UAAWG,GAAWA,EAAM,MAA8B,QAAUT,CAAK,CACjF,EACA,OAAAhB,EAA0B,IAAM,CAC9B,IAAM0B,EAAOP,EAAQ,QACrB,GAAI,CAACO,EAAM,OACX,IAAMC,EAAW,MAAM,KAAKD,EAAK,iBAAiB,oCAAoC,CAAC,EACjFE,EAAQD,EAAS,UAAWE,GAASA,EAAK,aAAa,YAAY,IAAM,IAAI,EACnFH,EAAK,MAAM,YAAY,4BAA6B,OAAOC,EAAS,QAAU,CAAC,CAAC,EAChFD,EAAK,MAAM,YAAY,4BAA6B,OAAO,KAAK,IAAI,EAAGE,CAAK,CAAC,CAAC,CAChF,CAAC,EAGC,gBAACE,EAAqB,KAArB,CACC,gBAAe1B,EAAM,UAAY,OACjC,cAAaK,EACb,IAAKW,EACL,MACE,CACE,4BAA6BG,GAAiB,EAC9C,4BAA6BC,EAC7B,GAAGX,CACL,EAEF,UAAWkB,EAAW,2BAA4BxB,CAAS,EAC3D,cAAgBS,GAAU,CACpBA,GACFC,EAASD,CAAK,CAElB,EACC,GAAGF,EACJ,KAAK,SACL,MAAOE,EACP,QAAS,GACT,SAAU,CAAC,CAACZ,EAAM,UAEjBI,EACD,gBAAC,OAAI,UAAU,gCAAgC,CACjD,CAEJ,CACF,EAEAP,EAAqB,YAAc,wBAiBnC,IAAM+B,EAA6B,aACjC,CAAC,CAAE,SAAAxB,EAAU,UAAAD,EAAW,SAAA0B,EAAU,GAAG7B,CAAM,EAAGD,IAC5C,gBAAC2B,EAAqB,KAArB,CACC,IAAK3B,EACL,UAAW4B,EAAW,YAAa,2BAA4BxB,CAAS,EACxE,iBAAgB0B,GAAY,OAC3B,GAAG7B,EACJ,QAAS,IAET,gBAAC,QAAK,UAAU,oCAAoC,EACpD,gBAAC,QAAK,UAAU,iCACd,gBAAC,QAAK,UAAU,uCAAuCI,CAAS,EAChE,gBAAC,QAAK,UAAU,wCAAwC,cAAW,IAChEA,CACH,CACF,CACF,CAEJ,EAEAwB,EAAqB,YAAc",
6
+ "names": ["segmented_control_exports", "__export", "SegmentedControlItem", "SegmentedControlRoot", "React", "classNames", "ToggleGroupPrimitive", "useComposedRefs", "useControllableState", "useIsomorphicLayoutEffect", "SegmentedControlRoot", "ownProps", "forwardedRef", "props", "useThemeSizeProps", "segmentedControlRootPropDefs", "className", "children", "radius", "valueProp", "defaultValueProp", "onValueChangeProp", "style", "rootProps", "extractProps", "value", "setValue", "useControllableState", "rootRef", "composedRef", "useComposedRefs", "items", "renderedCount", "renderedIndex", "child", "root", "domItems", "index", "item", "ToggleGroupPrimitive", "classNames", "SegmentedControlItem", "iconOnly"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as d}from"./chunk-KEGCX5VM.js";import{a as m}from"./chunk-CN6F4REJ.js";import{a as E}from"./chunk-OS3FCYZY.js";var L={};E(L,{Button:()=>R,Content:()=>M,Item:()=>P,Root:()=>S,Viewport:()=>g,useMessageScroller:()=>f,useMessageScrollerScrollable:()=>V,useMessageScrollerVisibility:()=>N});import*as e from"react";import c from"classnames";import{MessageScroller as a,useMessageScroller as f,useMessageScrollerScrollable as V,useMessageScrollerVisibility as N}from"@shadcn/react/message-scroller";import{useComposedRefs as T}from"radix-ui/internal";var S=e.forwardRef(({autoScroll:o=!0,defaultScrollPosition:t="end",scrollEdgeThreshold:r,scrollMargin:s,className:n,children:i,...l},u)=>e.createElement(a.Provider,{autoScroll:o,defaultScrollPosition:t,...r!=null?{scrollEdgeThreshold:r}:{},...s!=null?{scrollMargin:s}:{}},e.createElement(a.Root,{...l,ref:u,className:c("kui-MessageScrollerRoot",n)},i)));S.displayName="MessageScroller.Root";var g=e.forwardRef(({className:o,"aria-label":t,fade:r=!0,...s},n)=>{let i=m(r),l=T(n,i);return e.createElement(a.Viewport,{"aria-label":t??"",...s,ref:l,"data-fade":r?"":void 0,className:c("kui-MessageScrollerViewport",o)})});g.displayName="MessageScroller.Viewport";var M=e.forwardRef(({className:o,...t},r)=>e.createElement(a.Content,{...t,ref:r,className:c("kui-MessageScrollerContent",o)}));M.displayName="MessageScroller.Content";var P=e.forwardRef(({className:o,...t},r)=>e.createElement(a.Item,{...t,ref:r,className:c("kui-MessageScrollerItem",o)}));P.displayName="MessageScroller.Item";var R=e.forwardRef(({direction:o="end",behavior:t="smooth",className:r,children:s,size:n,variant:i="surface",emphasis:l,color:u="gray",radius:v="full","aria-label":b,onClick:y,...B},w)=>{let{scrollToEnd:h,scrollToStart:C}=f(),k=p=>{if(y?.(p),p.defaultPrevented)return;p.preventDefault(),p.currentTarget.closest(".kui-MessageScrollerRoot")?.querySelector(".kui-MessageScrollerViewport")?.focus({preventScroll:!0}),o==="start"?C({behavior:t}):h({behavior:t})};return e.createElement(a.Button,{direction:o,behavior:t,onClick:k,render:e.createElement(d,{iconOnly:!0,...B,ref:w,size:n,...l?{emphasis:l}:{variant:i},color:u,radius:v,"aria-label":b??(o==="end"?"Jump to the latest":"Jump to the first"),className:c("kui-MessageScrollerButton",r),"data-direction":o},s??e.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none","aria-hidden":!0,style:o==="start"?{transform:"rotate(180deg)"}:void 0},e.createElement("path",{d:"M7.5 2.5v10M3.5 8.5l4 4 4-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})))})});R.displayName="MessageScroller.Button";export{f as a,V as b,N as c,S as d,g as e,M as f,P as g,R as h,L as i};
2
+ //# sourceMappingURL=chunk-PM6QY3JO.js.map