@womp/kookie-ui 0.19.0 → 0.21.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 (1265) hide show
  1. package/README.md +2 -18
  2. package/codemods/components-0.21.py +123 -0
  3. package/codemods/type-0.20.py +73 -0
  4. package/components.css +1575 -4699
  5. package/dist/cjs/components/_internal/base-button.d.ts +2 -4
  6. package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
  7. package/dist/cjs/components/_internal/base-button.js +1 -1
  8. package/dist/cjs/components/_internal/base-button.js.map +3 -3
  9. package/dist/cjs/components/_internal/base-button.props.d.ts +1 -9
  10. package/dist/cjs/components/_internal/base-button.props.d.ts.map +1 -1
  11. package/dist/cjs/components/_internal/base-button.props.js +1 -1
  12. package/dist/cjs/components/_internal/base-button.props.js.map +2 -2
  13. package/dist/cjs/components/_internal/base-checkbox.props.js.map +1 -1
  14. package/dist/cjs/components/_internal/base-menu.props.d.ts +2 -2
  15. package/dist/cjs/components/_internal/base-menu.props.js +1 -1
  16. package/dist/cjs/components/_internal/base-menu.props.js.map +2 -2
  17. package/dist/cjs/components/_internal/base-menu.utils.d.ts.map +1 -1
  18. package/dist/cjs/components/_internal/base-menu.utils.js +1 -1
  19. package/dist/cjs/components/_internal/base-menu.utils.js.map +4 -4
  20. package/dist/cjs/components/_internal/base-radio.props.js.map +1 -1
  21. package/dist/cjs/components/_internal/base-tab-list.props.js.map +1 -1
  22. package/dist/cjs/components/_internal/menu-context.d.ts +5 -2
  23. package/dist/cjs/components/_internal/menu-context.d.ts.map +1 -1
  24. package/dist/cjs/components/_internal/menu-context.js +1 -1
  25. package/dist/cjs/components/_internal/menu-context.js.map +2 -2
  26. package/dist/cjs/components/_internal/pane-chrome.js +1 -1
  27. package/dist/cjs/components/_internal/pane-chrome.js.map +4 -4
  28. package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
  29. package/dist/cjs/components/_internal/shell-sidebar.js.map +4 -4
  30. package/dist/cjs/components/accordion.d.ts.map +1 -1
  31. package/dist/cjs/components/accordion.js +1 -1
  32. package/dist/cjs/components/accordion.js.map +3 -3
  33. package/dist/cjs/components/accordion.props.d.ts +0 -5
  34. package/dist/cjs/components/accordion.props.d.ts.map +1 -1
  35. package/dist/cjs/components/accordion.props.js +1 -1
  36. package/dist/cjs/components/accordion.props.js.map +2 -2
  37. package/dist/cjs/components/alert-dialog.js +1 -1
  38. package/dist/cjs/components/alert-dialog.js.map +4 -4
  39. package/dist/cjs/components/avatar.d.ts +1 -2
  40. package/dist/cjs/components/avatar.d.ts.map +1 -1
  41. package/dist/cjs/components/avatar.js +1 -1
  42. package/dist/cjs/components/avatar.js.map +4 -4
  43. package/dist/cjs/components/avatar.props.d.ts.map +1 -1
  44. package/dist/cjs/components/avatar.props.js.map +1 -1
  45. package/dist/cjs/components/blockquote.d.ts +1 -2
  46. package/dist/cjs/components/blockquote.d.ts.map +1 -1
  47. package/dist/cjs/components/blockquote.js +1 -1
  48. package/dist/cjs/components/blockquote.js.map +4 -4
  49. package/dist/cjs/components/blockquote.props.d.ts +2 -2
  50. package/dist/cjs/components/blockquote.props.js +1 -1
  51. package/dist/cjs/components/blockquote.props.js.map +2 -2
  52. package/dist/cjs/components/button.d.ts +23 -7
  53. package/dist/cjs/components/button.d.ts.map +1 -1
  54. package/dist/cjs/components/button.js +1 -4
  55. package/dist/cjs/components/button.js.map +3 -3
  56. package/dist/cjs/components/button.props.js +1 -1
  57. package/dist/cjs/components/button.props.js.map +2 -2
  58. package/dist/cjs/components/card.d.ts +1 -2
  59. package/dist/cjs/components/card.d.ts.map +1 -1
  60. package/dist/cjs/components/card.js +1 -1
  61. package/dist/cjs/components/card.js.map +4 -4
  62. package/dist/cjs/components/chatbar.d.ts +2 -3
  63. package/dist/cjs/components/chatbar.d.ts.map +1 -1
  64. package/dist/cjs/components/chatbar.js +1 -4
  65. package/dist/cjs/components/chatbar.js.map +4 -4
  66. package/dist/cjs/components/checkbox-group.d.ts +2 -3
  67. package/dist/cjs/components/checkbox-group.d.ts.map +1 -1
  68. package/dist/cjs/components/checkbox-group.js +1 -1
  69. package/dist/cjs/components/checkbox-group.js.map +4 -4
  70. package/dist/cjs/components/checkbox-group.props.js.map +1 -1
  71. package/dist/cjs/components/checkbox.d.ts +1 -2
  72. package/dist/cjs/components/checkbox.d.ts.map +1 -1
  73. package/dist/cjs/components/checkbox.js +1 -1
  74. package/dist/cjs/components/checkbox.js.map +4 -4
  75. package/dist/cjs/components/checkbox.props.js.map +1 -1
  76. package/dist/cjs/components/chip.d.ts +18 -0
  77. package/dist/cjs/components/chip.d.ts.map +1 -0
  78. package/dist/cjs/components/chip.js +2 -0
  79. package/dist/cjs/components/chip.js.map +7 -0
  80. package/dist/cjs/components/{badge.props.d.ts → chip.props.d.ts} +3 -3
  81. package/dist/cjs/components/chip.props.d.ts.map +1 -0
  82. package/dist/cjs/components/chip.props.js +2 -0
  83. package/dist/cjs/components/chip.props.js.map +7 -0
  84. package/dist/cjs/components/code.d.ts +1 -2
  85. package/dist/cjs/components/code.d.ts.map +1 -1
  86. package/dist/cjs/components/code.js +1 -1
  87. package/dist/cjs/components/code.js.map +4 -4
  88. package/dist/cjs/components/code.props.d.ts +2 -2
  89. package/dist/cjs/components/code.props.js +1 -1
  90. package/dist/cjs/components/code.props.js.map +2 -2
  91. package/dist/cjs/components/combobox.d.ts +1 -2
  92. package/dist/cjs/components/combobox.d.ts.map +1 -1
  93. package/dist/cjs/components/combobox.js +1 -1
  94. package/dist/cjs/components/combobox.js.map +4 -4
  95. package/dist/cjs/components/combobox.props.d.ts +1 -1
  96. package/dist/cjs/components/combobox.props.js +1 -1
  97. package/dist/cjs/components/combobox.props.js.map +2 -2
  98. package/dist/cjs/components/context-menu.js +1 -1
  99. package/dist/cjs/components/context-menu.js.map +4 -4
  100. package/dist/cjs/components/context-menu.props.js +1 -1
  101. package/dist/cjs/components/context-menu.props.js.map +2 -2
  102. package/dist/cjs/components/dialog.js +1 -1
  103. package/dist/cjs/components/dialog.js.map +4 -4
  104. package/dist/cjs/components/dropdown-menu.js +1 -1
  105. package/dist/cjs/components/dropdown-menu.js.map +4 -4
  106. package/dist/cjs/components/dropdown-menu.props.js +1 -1
  107. package/dist/cjs/components/dropdown-menu.props.js.map +2 -2
  108. package/dist/cjs/components/heading.d.ts +1 -2
  109. package/dist/cjs/components/heading.d.ts.map +1 -1
  110. package/dist/cjs/components/heading.js +1 -1
  111. package/dist/cjs/components/heading.js.map +4 -4
  112. package/dist/cjs/components/heading.props.d.ts +2 -2
  113. package/dist/cjs/components/heading.props.js +1 -1
  114. package/dist/cjs/components/heading.props.js.map +2 -2
  115. package/dist/cjs/components/index.d.ts +2 -18
  116. package/dist/cjs/components/index.d.ts.map +1 -1
  117. package/dist/cjs/components/index.js +3 -14
  118. package/dist/cjs/components/index.js.map +4 -4
  119. package/dist/cjs/components/kbd.d.ts +1 -2
  120. package/dist/cjs/components/kbd.d.ts.map +1 -1
  121. package/dist/cjs/components/kbd.js +1 -1
  122. package/dist/cjs/components/kbd.js.map +4 -4
  123. package/dist/cjs/components/kbd.props.d.ts +1 -1
  124. package/dist/cjs/components/kbd.props.js +1 -1
  125. package/dist/cjs/components/kbd.props.js.map +2 -2
  126. package/dist/cjs/components/link.d.ts +1 -2
  127. package/dist/cjs/components/link.d.ts.map +1 -1
  128. package/dist/cjs/components/link.js +1 -1
  129. package/dist/cjs/components/link.js.map +4 -4
  130. package/dist/cjs/components/link.props.d.ts +2 -2
  131. package/dist/cjs/components/link.props.js +1 -1
  132. package/dist/cjs/components/link.props.js.map +2 -2
  133. package/dist/cjs/components/message-scroller.d.ts +2 -3
  134. package/dist/cjs/components/message-scroller.d.ts.map +1 -1
  135. package/dist/cjs/components/message-scroller.js +1 -4
  136. package/dist/cjs/components/message-scroller.js.map +4 -4
  137. package/dist/cjs/components/navbar.d.ts +14 -6
  138. package/dist/cjs/components/navbar.d.ts.map +1 -1
  139. package/dist/cjs/components/navbar.js +1 -1
  140. package/dist/cjs/components/navbar.js.map +2 -2
  141. package/dist/cjs/components/notice.d.ts.map +1 -1
  142. package/dist/cjs/components/notice.js +1 -4
  143. package/dist/cjs/components/notice.js.map +4 -4
  144. package/dist/cjs/components/popover.js.map +1 -1
  145. package/dist/cjs/components/progress.d.ts +1 -2
  146. package/dist/cjs/components/progress.d.ts.map +1 -1
  147. package/dist/cjs/components/progress.js +1 -1
  148. package/dist/cjs/components/progress.js.map +4 -4
  149. package/dist/cjs/components/progress.props.js.map +1 -1
  150. package/dist/cjs/components/radio-group.d.ts +2 -3
  151. package/dist/cjs/components/radio-group.d.ts.map +1 -1
  152. package/dist/cjs/components/radio-group.js +1 -1
  153. package/dist/cjs/components/radio-group.js.map +4 -4
  154. package/dist/cjs/components/radio-group.props.js.map +1 -1
  155. package/dist/cjs/components/radio.d.ts +1 -2
  156. package/dist/cjs/components/radio.d.ts.map +1 -1
  157. package/dist/cjs/components/radio.js +1 -1
  158. package/dist/cjs/components/radio.js.map +4 -4
  159. package/dist/cjs/components/radio.props.js.map +1 -1
  160. package/dist/cjs/components/schemas/base-button.schema.d.ts +2 -3
  161. package/dist/cjs/components/schemas/base-button.schema.d.ts.map +1 -1
  162. package/dist/cjs/components/schemas/base-button.schema.js +1 -1
  163. package/dist/cjs/components/schemas/base-button.schema.js.map +2 -2
  164. package/dist/cjs/components/schemas/button.schema.d.ts +0 -1
  165. package/dist/cjs/components/schemas/button.schema.d.ts.map +1 -1
  166. package/dist/cjs/components/schemas/button.schema.js +1 -1
  167. package/dist/cjs/components/schemas/button.schema.js.map +2 -2
  168. package/dist/cjs/components/schemas/index.d.ts +2 -6
  169. package/dist/cjs/components/schemas/index.d.ts.map +1 -1
  170. package/dist/cjs/components/schemas/index.js +1 -1
  171. package/dist/cjs/components/schemas/index.js.map +4 -4
  172. package/dist/cjs/components/schemas/{toggle-button.schema.d.ts → toggle.schema.d.ts} +13 -38
  173. package/dist/cjs/components/schemas/toggle.schema.d.ts.map +1 -0
  174. package/dist/cjs/components/schemas/toggle.schema.js +2 -0
  175. package/dist/cjs/components/schemas/toggle.schema.js.map +7 -0
  176. package/dist/cjs/components/scroll-area.d.ts +1 -2
  177. package/dist/cjs/components/scroll-area.d.ts.map +1 -1
  178. package/dist/cjs/components/scroll-area.js +1 -1
  179. package/dist/cjs/components/scroll-area.js.map +4 -4
  180. package/dist/cjs/components/segmented-control.d.ts +1 -2
  181. package/dist/cjs/components/segmented-control.d.ts.map +1 -1
  182. package/dist/cjs/components/segmented-control.js +1 -1
  183. package/dist/cjs/components/segmented-control.js.map +4 -4
  184. package/dist/cjs/components/select.d.ts +1 -2
  185. package/dist/cjs/components/select.d.ts.map +1 -1
  186. package/dist/cjs/components/select.js +1 -1
  187. package/dist/cjs/components/select.js.map +4 -4
  188. package/dist/cjs/components/select.props.js.map +1 -1
  189. package/dist/cjs/components/separator.d.ts +1 -2
  190. package/dist/cjs/components/separator.d.ts.map +1 -1
  191. package/dist/cjs/components/separator.js +1 -1
  192. package/dist/cjs/components/separator.js.map +4 -4
  193. package/dist/cjs/components/separator.props.js.map +1 -1
  194. package/dist/cjs/components/sheet.js +1 -1
  195. package/dist/cjs/components/sheet.js.map +4 -4
  196. package/dist/cjs/components/shell.js +1 -1
  197. package/dist/cjs/components/shell.js.map +4 -4
  198. package/dist/cjs/components/sidebar.d.ts +5 -5
  199. package/dist/cjs/components/sidebar.d.ts.map +1 -1
  200. package/dist/cjs/components/sidebar.js +1 -1
  201. package/dist/cjs/components/sidebar.js.map +4 -4
  202. package/dist/cjs/components/slider.d.ts +1 -2
  203. package/dist/cjs/components/slider.d.ts.map +1 -1
  204. package/dist/cjs/components/slider.js +1 -1
  205. package/dist/cjs/components/slider.js.map +4 -4
  206. package/dist/cjs/components/slider.props.js.map +1 -1
  207. package/dist/cjs/components/spinner.d.ts +1 -2
  208. package/dist/cjs/components/spinner.d.ts.map +1 -1
  209. package/dist/cjs/components/spinner.js +1 -1
  210. package/dist/cjs/components/spinner.js.map +3 -3
  211. package/dist/cjs/components/switch.d.ts +1 -2
  212. package/dist/cjs/components/switch.d.ts.map +1 -1
  213. package/dist/cjs/components/switch.js +1 -1
  214. package/dist/cjs/components/switch.js.map +4 -4
  215. package/dist/cjs/components/switch.props.js.map +1 -1
  216. package/dist/cjs/components/table.d.ts +1 -2
  217. package/dist/cjs/components/table.d.ts.map +1 -1
  218. package/dist/cjs/components/table.js +1 -1
  219. package/dist/cjs/components/table.js.map +4 -4
  220. package/dist/cjs/components/tabs.d.ts +3 -4
  221. package/dist/cjs/components/tabs.d.ts.map +1 -1
  222. package/dist/cjs/components/tabs.js +1 -1
  223. package/dist/cjs/components/tabs.js.map +4 -4
  224. package/dist/cjs/components/tabs.props.js.map +1 -1
  225. package/dist/cjs/components/text-area.d.ts +1 -2
  226. package/dist/cjs/components/text-area.d.ts.map +1 -1
  227. package/dist/cjs/components/text-area.js +1 -1
  228. package/dist/cjs/components/text-area.js.map +4 -4
  229. package/dist/cjs/components/text-area.props.js.map +1 -1
  230. package/dist/cjs/components/text-field.d.ts +1 -2
  231. package/dist/cjs/components/text-field.d.ts.map +1 -1
  232. package/dist/cjs/components/text-field.js +2 -2
  233. package/dist/cjs/components/text-field.js.map +4 -4
  234. package/dist/cjs/components/text-field.props.js.map +1 -1
  235. package/dist/cjs/components/text.d.ts +1 -2
  236. package/dist/cjs/components/text.d.ts.map +1 -1
  237. package/dist/cjs/components/text.js +1 -1
  238. package/dist/cjs/components/text.js.map +4 -4
  239. package/dist/cjs/components/text.props.d.ts +2 -2
  240. package/dist/cjs/components/text.props.js +1 -1
  241. package/dist/cjs/components/text.props.js.map +2 -2
  242. package/dist/cjs/components/theme.js.map +1 -1
  243. package/dist/cjs/components/theme.props.js.map +1 -1
  244. package/dist/cjs/components/toggle.d.ts +35 -0
  245. package/dist/cjs/components/toggle.d.ts.map +1 -0
  246. package/dist/cjs/components/toggle.js +10 -0
  247. package/dist/cjs/components/toggle.js.map +7 -0
  248. package/dist/cjs/components/toolbar.d.ts +2 -3
  249. package/dist/cjs/components/toolbar.d.ts.map +1 -1
  250. package/dist/cjs/components/toolbar.js +1 -4
  251. package/dist/cjs/components/toolbar.js.map +4 -4
  252. package/dist/cjs/components/tooltip.js +1 -1
  253. package/dist/cjs/components/tooltip.js.map +4 -4
  254. package/dist/cjs/components/virtual-menu.d.ts +2 -1
  255. package/dist/cjs/components/virtual-menu.d.ts.map +1 -1
  256. package/dist/cjs/components/virtual-menu.js +1 -1
  257. package/dist/cjs/components/virtual-menu.js.map +2 -2
  258. package/dist/cjs/hooks/index.js.map +1 -1
  259. package/dist/cjs/hooks/use-prop-synced-state.d.ts +1 -1
  260. package/dist/cjs/hooks/use-prop-synced-state.js.map +1 -1
  261. package/dist/cjs/hooks/use-toggle-state.d.ts +1 -1
  262. package/dist/cjs/hooks/use-toggle-state.js.map +1 -1
  263. package/dist/cjs/index.js +5 -16
  264. package/dist/cjs/index.js.map +4 -4
  265. package/dist/cjs/props/color.prop.js.map +1 -1
  266. package/dist/cjs/props/emphasis.prop.js.map +1 -1
  267. package/dist/cjs/props/index.d.ts +1 -14
  268. package/dist/cjs/props/index.d.ts.map +1 -1
  269. package/dist/cjs/props/index.js +1 -1
  270. package/dist/cjs/props/index.js.map +4 -4
  271. package/dist/cjs/props/weight.prop.d.ts +1 -1
  272. package/dist/cjs/props/weight.prop.d.ts.map +1 -1
  273. package/dist/cjs/props/weight.prop.js +1 -1
  274. package/dist/cjs/props/weight.prop.js.map +2 -2
  275. package/dist/esm/{chunk-STMTXK7U.js → chunk-24CVW6P7.js} +2 -2
  276. package/dist/esm/chunk-2KZ44I6T.js +2 -0
  277. package/dist/esm/chunk-2KZ44I6T.js.map +7 -0
  278. package/dist/esm/chunk-2WSD2H23.js +2 -0
  279. package/dist/esm/chunk-2WSD2H23.js.map +7 -0
  280. package/dist/esm/chunk-36GV4H3C.js +2 -0
  281. package/dist/esm/chunk-36GV4H3C.js.map +7 -0
  282. package/dist/esm/chunk-4I4NJNYO.js +2 -0
  283. package/dist/esm/chunk-4I4NJNYO.js.map +7 -0
  284. package/dist/esm/chunk-4VBH3W2S.js +2 -0
  285. package/dist/esm/chunk-4ZAJVYU6.js +2 -0
  286. package/dist/esm/{chunk-5AHQJB6H.js.map → chunk-4ZAJVYU6.js.map} +2 -2
  287. package/dist/esm/{chunk-YVHRWMSZ.js → chunk-5B6JDZ3S.js} +2 -2
  288. package/dist/esm/chunk-5B6JDZ3S.js.map +7 -0
  289. package/dist/esm/{chunk-NCDOMH5I.js → chunk-5P4JTWBK.js} +2 -2
  290. package/dist/esm/chunk-5P4JTWBK.js.map +7 -0
  291. package/dist/esm/chunk-5WLSAUNJ.js +2 -0
  292. package/dist/esm/chunk-5WLSAUNJ.js.map +7 -0
  293. package/dist/esm/chunk-6WANXT2G.js +2 -0
  294. package/dist/esm/chunk-6WANXT2G.js.map +7 -0
  295. package/dist/esm/chunk-72FU5FEC.js +2 -0
  296. package/dist/esm/chunk-7AXEPJYF.js +2 -0
  297. package/dist/esm/chunk-7AXEPJYF.js.map +7 -0
  298. package/dist/esm/{chunk-MLXHD7YF.js → chunk-7FPLWHMT.js} +2 -2
  299. package/dist/esm/chunk-7MC7N4BC.js +2 -0
  300. package/dist/esm/chunk-7MC7N4BC.js.map +7 -0
  301. package/dist/esm/chunk-7MPFZIZX.js +2 -0
  302. package/dist/esm/chunk-7MPFZIZX.js.map +7 -0
  303. package/dist/esm/{chunk-YS5BZRRK.js → chunk-7OQXCYCW.js} +2 -2
  304. package/dist/esm/{chunk-BINUV3ME.js → chunk-7QPXLSVR.js} +2 -2
  305. package/dist/esm/{chunk-BINUV3ME.js.map → chunk-7QPXLSVR.js.map} +2 -2
  306. package/dist/esm/chunk-7XWAXYZD.js +2 -0
  307. package/dist/esm/chunk-7XWAXYZD.js.map +7 -0
  308. package/dist/esm/chunk-AYZRLA7F.js +2 -0
  309. package/dist/esm/{chunk-6RZVKCNG.js → chunk-BHGES72S.js} +2 -2
  310. package/dist/esm/chunk-BQD7XS4K.js +2 -0
  311. package/dist/esm/chunk-BQD7XS4K.js.map +7 -0
  312. package/dist/esm/{chunk-KU3LLWFU.js → chunk-CTZ467AB.js} +2 -2
  313. package/dist/esm/{chunk-34KVYDF6.js → chunk-CUNKWFKA.js} +1 -1
  314. package/dist/esm/{chunk-34KVYDF6.js.map → chunk-CUNKWFKA.js.map} +1 -1
  315. package/dist/esm/{chunk-Q7S5LQBQ.js → chunk-CYO6CRMQ.js} +2 -2
  316. package/dist/esm/chunk-D3U4MWDZ.js +1 -0
  317. package/dist/esm/{chunk-VLLJ7A6P.js → chunk-DCNHG6VN.js} +2 -2
  318. package/dist/esm/chunk-DL6F2TIU.js +2 -0
  319. package/dist/esm/chunk-DL6F2TIU.js.map +7 -0
  320. package/dist/esm/chunk-DSV3XBHM.js +2 -0
  321. package/dist/esm/chunk-DSV3XBHM.js.map +7 -0
  322. package/dist/esm/{chunk-UZQO4APP.js → chunk-EDEYYJ3Q.js} +2 -2
  323. package/dist/esm/chunk-EDP2TJVB.js +2 -0
  324. package/dist/esm/chunk-EDP2TJVB.js.map +7 -0
  325. package/dist/esm/chunk-EGSMLRSO.js +2 -0
  326. package/dist/esm/chunk-EGSMLRSO.js.map +7 -0
  327. package/dist/esm/{chunk-6FLLFCBU.js → chunk-ELAW7ZUG.js} +2 -2
  328. package/dist/esm/chunk-EOWG5SIY.js +2 -0
  329. package/dist/esm/chunk-EOWG5SIY.js.map +7 -0
  330. package/dist/esm/{chunk-MAI7FEU7.js → chunk-FSMUCDLI.js} +2 -2
  331. package/dist/esm/{chunk-MAI7FEU7.js.map → chunk-FSMUCDLI.js.map} +2 -2
  332. package/dist/esm/{chunk-B6RH4CTY.js → chunk-G46OLCM2.js} +2 -2
  333. package/dist/esm/{chunk-VK7RNXUO.js → chunk-GBFGUOFS.js} +1 -1
  334. package/dist/esm/{chunk-VK7RNXUO.js.map → chunk-GBFGUOFS.js.map} +1 -1
  335. package/dist/esm/{chunk-5LGWS5QS.js → chunk-GOV5I7I2.js} +2 -2
  336. package/dist/esm/{chunk-N77QJUTO.js → chunk-GWGQ73PU.js} +2 -2
  337. package/dist/esm/chunk-GWGQ73PU.js.map +7 -0
  338. package/dist/esm/{chunk-VSSJTPBV.js → chunk-HELY5CSU.js} +2 -2
  339. package/dist/esm/{chunk-UFJJTUOU.js → chunk-HGG3ULNK.js} +2 -2
  340. package/dist/esm/chunk-HZNOHY6O.js +2 -0
  341. package/dist/esm/chunk-IAC5IOPN.js +2 -0
  342. package/dist/esm/chunk-IAC5IOPN.js.map +7 -0
  343. package/dist/esm/chunk-IN6ZEGDK.js +2 -0
  344. package/dist/esm/chunk-IN6ZEGDK.js.map +7 -0
  345. package/dist/esm/chunk-IQBSUN5B.js +2 -0
  346. package/dist/esm/chunk-IQBSUN5B.js.map +7 -0
  347. package/dist/esm/{chunk-PUVZFRTQ.js → chunk-IZPDJN6O.js} +2 -2
  348. package/dist/esm/chunk-JMBCX5XR.js +2 -0
  349. package/dist/esm/chunk-JMBCX5XR.js.map +7 -0
  350. package/dist/esm/{chunk-KPACVWV4.js → chunk-K4BDLRCC.js} +2 -2
  351. package/dist/esm/chunk-K6QKUX3C.js +2 -0
  352. package/dist/esm/chunk-K6QKUX3C.js.map +7 -0
  353. package/dist/esm/{chunk-GYB7PAGB.js → chunk-K6WT5ZEA.js} +2 -2
  354. package/dist/esm/{chunk-CLEH57SW.js → chunk-KIYCILXL.js} +2 -2
  355. package/dist/esm/{chunk-ZCAI2PRH.js → chunk-KRDRQU4G.js} +2 -2
  356. package/dist/esm/{chunk-T5DSQKKF.js → chunk-KRZL245C.js} +2 -2
  357. package/dist/esm/chunk-LHYX53XA.js +2 -0
  358. package/dist/esm/chunk-LHYX53XA.js.map +7 -0
  359. package/dist/esm/{chunk-L2IIIELE.js → chunk-LNFN35ZE.js} +2 -2
  360. package/dist/esm/{chunk-PUQXBW2K.js → chunk-LPVDR7V3.js} +2 -2
  361. package/dist/esm/chunk-LVCP5WGX.js +2 -0
  362. package/dist/esm/{chunk-EVTNB4TB.js.map → chunk-LVCP5WGX.js.map} +2 -2
  363. package/dist/esm/chunk-M4M4OZTS.js +2 -0
  364. package/dist/esm/{chunk-PDBVZAUJ.js.map → chunk-M4M4OZTS.js.map} +2 -2
  365. package/dist/esm/chunk-MC3GY6ET.js +2 -0
  366. package/dist/esm/chunk-MC3GY6ET.js.map +7 -0
  367. package/dist/esm/chunk-MKY2IRPO.js +2 -0
  368. package/dist/esm/chunk-MKY2IRPO.js.map +7 -0
  369. package/dist/esm/{chunk-CR2BSCFM.js → chunk-MYO2E46Z.js} +2 -2
  370. package/dist/esm/{chunk-CR2BSCFM.js.map → chunk-MYO2E46Z.js.map} +2 -2
  371. package/dist/esm/chunk-OA2BZDKL.js +2 -0
  372. package/dist/esm/chunk-OA2BZDKL.js.map +7 -0
  373. package/dist/esm/chunk-P3WB3K2M.js +2 -0
  374. package/dist/esm/chunk-P3WB3K2M.js.map +7 -0
  375. package/dist/esm/{chunk-JUY7CBSL.js → chunk-PBFSBHBS.js} +2 -2
  376. package/dist/esm/chunk-PEP6MQJ2.js +2 -0
  377. package/dist/esm/chunk-PEP6MQJ2.js.map +7 -0
  378. package/dist/esm/{chunk-WAURCNAS.js → chunk-PN3RQFSU.js} +1 -1
  379. package/dist/esm/chunk-PN3RQFSU.js.map +7 -0
  380. package/dist/esm/chunk-QQVA2PJ3.js +2 -0
  381. package/dist/esm/chunk-QQVA2PJ3.js.map +7 -0
  382. package/dist/esm/{chunk-E3754NJZ.js → chunk-QZ6OCMH4.js} +2 -2
  383. package/dist/esm/chunk-RBTTIDON.js +2 -0
  384. package/dist/esm/chunk-RBTTIDON.js.map +7 -0
  385. package/dist/esm/chunk-RDS3AJWW.js +2 -0
  386. package/dist/esm/chunk-RDS3AJWW.js.map +7 -0
  387. package/dist/esm/{chunk-6AZV4VFW.js → chunk-RGZKWVJC.js} +2 -2
  388. package/dist/esm/{chunk-6AZV4VFW.js.map → chunk-RGZKWVJC.js.map} +1 -1
  389. package/dist/esm/chunk-T4L4QDBG.js +2 -0
  390. package/dist/esm/chunk-T4L4QDBG.js.map +7 -0
  391. package/dist/esm/chunk-TCSPZ27B.js +2 -0
  392. package/dist/esm/chunk-TCSPZ27B.js.map +7 -0
  393. package/dist/esm/chunk-TDQTMR5T.js +2 -0
  394. package/dist/esm/chunk-TDQTMR5T.js.map +7 -0
  395. package/dist/esm/{chunk-54KMG7NX.js → chunk-TKSG7KBZ.js} +2 -2
  396. package/dist/esm/{chunk-WDDO73O5.js → chunk-UEHCCJYY.js} +2 -2
  397. package/dist/esm/chunk-UMIDPKFZ.js +2 -0
  398. package/dist/esm/chunk-UMIDPKFZ.js.map +7 -0
  399. package/dist/esm/chunk-UW5IJ64A.js +5 -0
  400. package/dist/esm/chunk-UW5IJ64A.js.map +7 -0
  401. package/dist/esm/{chunk-KSZOVI57.js → chunk-VCU6VCPH.js} +2 -2
  402. package/dist/esm/chunk-VCU6VCPH.js.map +7 -0
  403. package/dist/esm/chunk-VJOJGAGA.js +2 -0
  404. package/dist/esm/chunk-VJOJGAGA.js.map +7 -0
  405. package/dist/esm/chunk-VNONKPH7.js +2 -0
  406. package/dist/esm/chunk-VNONKPH7.js.map +7 -0
  407. package/dist/esm/chunk-VOEZ5HJL.js +2 -0
  408. package/dist/esm/chunk-VOEZ5HJL.js.map +7 -0
  409. package/dist/esm/chunk-W7YHNMAO.js +2 -0
  410. package/dist/esm/chunk-W7YHNMAO.js.map +7 -0
  411. package/dist/esm/chunk-WQT6UULR.js +2 -0
  412. package/dist/esm/chunk-WQT6UULR.js.map +7 -0
  413. package/dist/esm/chunk-WW7WTPM6.js +2 -0
  414. package/dist/esm/chunk-WW7WTPM6.js.map +7 -0
  415. package/dist/esm/{chunk-ZWZGUBL4.js → chunk-WWF3IU3P.js} +1 -1
  416. package/dist/esm/chunk-WWF3IU3P.js.map +7 -0
  417. package/dist/esm/chunk-XEW4BRIL.js +2 -0
  418. package/dist/esm/chunk-XEW4BRIL.js.map +7 -0
  419. package/dist/esm/chunk-YB7CENHH.js +2 -0
  420. package/dist/esm/chunk-YB7CENHH.js.map +7 -0
  421. package/dist/esm/chunk-YEIZ43KW.js +2 -0
  422. package/dist/esm/chunk-YEIZ43KW.js.map +7 -0
  423. package/dist/esm/chunk-ZCWDURKJ.js +2 -0
  424. package/dist/esm/chunk-ZCWDURKJ.js.map +7 -0
  425. package/dist/esm/components/_internal/base-button.d.ts +2 -4
  426. package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
  427. package/dist/esm/components/_internal/base-button.js +1 -1
  428. package/dist/esm/components/_internal/base-button.props.d.ts +1 -9
  429. package/dist/esm/components/_internal/base-button.props.d.ts.map +1 -1
  430. package/dist/esm/components/_internal/base-button.props.js +1 -1
  431. package/dist/esm/components/_internal/base-checkbox.props.js +1 -1
  432. package/dist/esm/components/_internal/base-menu.props.d.ts +2 -2
  433. package/dist/esm/components/_internal/base-menu.props.js +1 -1
  434. package/dist/esm/components/_internal/base-menu.utils.d.ts.map +1 -1
  435. package/dist/esm/components/_internal/base-menu.utils.js +1 -1
  436. package/dist/esm/components/_internal/base-radio.props.js +1 -1
  437. package/dist/esm/components/_internal/base-tab-list.props.js +1 -1
  438. package/dist/esm/components/_internal/menu-context.d.ts +5 -2
  439. package/dist/esm/components/_internal/menu-context.d.ts.map +1 -1
  440. package/dist/esm/components/_internal/menu-context.js +1 -1
  441. package/dist/esm/components/_internal/pane-chrome.js +1 -1
  442. package/dist/esm/components/_internal/shell-sidebar.js +1 -1
  443. package/dist/esm/components/accordion.d.ts.map +1 -1
  444. package/dist/esm/components/accordion.js +1 -1
  445. package/dist/esm/components/accordion.props.d.ts +0 -5
  446. package/dist/esm/components/accordion.props.d.ts.map +1 -1
  447. package/dist/esm/components/accordion.props.js +1 -1
  448. package/dist/esm/components/alert-dialog.js +1 -1
  449. package/dist/esm/components/avatar.d.ts +1 -2
  450. package/dist/esm/components/avatar.d.ts.map +1 -1
  451. package/dist/esm/components/avatar.js +1 -1
  452. package/dist/esm/components/avatar.props.d.ts.map +1 -1
  453. package/dist/esm/components/avatar.props.js +1 -1
  454. package/dist/esm/components/blockquote.d.ts +1 -2
  455. package/dist/esm/components/blockquote.d.ts.map +1 -1
  456. package/dist/esm/components/blockquote.js +1 -1
  457. package/dist/esm/components/blockquote.props.d.ts +2 -2
  458. package/dist/esm/components/blockquote.props.js +1 -1
  459. package/dist/esm/components/box.js +1 -1
  460. package/dist/esm/components/button.d.ts +23 -7
  461. package/dist/esm/components/button.d.ts.map +1 -1
  462. package/dist/esm/components/button.js +1 -1
  463. package/dist/esm/components/button.props.js +1 -1
  464. package/dist/esm/components/card.d.ts +1 -2
  465. package/dist/esm/components/card.d.ts.map +1 -1
  466. package/dist/esm/components/card.js +1 -1
  467. package/dist/esm/components/chatbar.d.ts +2 -3
  468. package/dist/esm/components/chatbar.d.ts.map +1 -1
  469. package/dist/esm/components/chatbar.js +1 -1
  470. package/dist/esm/components/checkbox-group.d.ts +2 -3
  471. package/dist/esm/components/checkbox-group.d.ts.map +1 -1
  472. package/dist/esm/components/checkbox-group.js +1 -1
  473. package/dist/esm/components/checkbox-group.props.js +1 -1
  474. package/dist/esm/components/checkbox.d.ts +1 -2
  475. package/dist/esm/components/checkbox.d.ts.map +1 -1
  476. package/dist/esm/components/checkbox.js +1 -1
  477. package/dist/esm/components/checkbox.props.js +1 -1
  478. package/dist/esm/components/chip.d.ts +18 -0
  479. package/dist/esm/components/chip.d.ts.map +1 -0
  480. package/dist/esm/components/chip.js +2 -0
  481. package/dist/esm/components/{badge.props.d.ts → chip.props.d.ts} +3 -3
  482. package/dist/esm/components/chip.props.d.ts.map +1 -0
  483. package/dist/esm/components/chip.props.js +2 -0
  484. package/dist/esm/components/code.d.ts +1 -2
  485. package/dist/esm/components/code.d.ts.map +1 -1
  486. package/dist/esm/components/code.js +1 -1
  487. package/dist/esm/components/code.props.d.ts +2 -2
  488. package/dist/esm/components/code.props.js +1 -1
  489. package/dist/esm/components/combobox.d.ts +1 -2
  490. package/dist/esm/components/combobox.d.ts.map +1 -1
  491. package/dist/esm/components/combobox.js +1 -1
  492. package/dist/esm/components/combobox.props.d.ts +1 -1
  493. package/dist/esm/components/combobox.props.js +1 -1
  494. package/dist/esm/components/context-menu.js +1 -1
  495. package/dist/esm/components/context-menu.props.js +1 -1
  496. package/dist/esm/components/dialog.js +1 -1
  497. package/dist/esm/components/dropdown-menu.js +1 -1
  498. package/dist/esm/components/dropdown-menu.props.js +1 -1
  499. package/dist/esm/components/flex.js +1 -1
  500. package/dist/esm/components/grid.js +1 -1
  501. package/dist/esm/components/heading.d.ts +1 -2
  502. package/dist/esm/components/heading.d.ts.map +1 -1
  503. package/dist/esm/components/heading.js +1 -1
  504. package/dist/esm/components/heading.props.d.ts +2 -2
  505. package/dist/esm/components/heading.props.js +1 -1
  506. package/dist/esm/components/index.d.ts +2 -18
  507. package/dist/esm/components/index.d.ts.map +1 -1
  508. package/dist/esm/components/index.js +1 -1
  509. package/dist/esm/components/kbd.d.ts +1 -2
  510. package/dist/esm/components/kbd.d.ts.map +1 -1
  511. package/dist/esm/components/kbd.js +1 -1
  512. package/dist/esm/components/kbd.props.d.ts +1 -1
  513. package/dist/esm/components/kbd.props.js +1 -1
  514. package/dist/esm/components/link.d.ts +1 -2
  515. package/dist/esm/components/link.d.ts.map +1 -1
  516. package/dist/esm/components/link.js +1 -1
  517. package/dist/esm/components/link.props.d.ts +2 -2
  518. package/dist/esm/components/link.props.js +1 -1
  519. package/dist/esm/components/message-scroller.d.ts +2 -3
  520. package/dist/esm/components/message-scroller.d.ts.map +1 -1
  521. package/dist/esm/components/message-scroller.js +1 -1
  522. package/dist/esm/components/navbar.d.ts +14 -6
  523. package/dist/esm/components/navbar.d.ts.map +1 -1
  524. package/dist/esm/components/navbar.js +1 -1
  525. package/dist/esm/components/notice.d.ts.map +1 -1
  526. package/dist/esm/components/notice.js +1 -1
  527. package/dist/esm/components/popover.js +1 -1
  528. package/dist/esm/components/progress.d.ts +1 -2
  529. package/dist/esm/components/progress.d.ts.map +1 -1
  530. package/dist/esm/components/progress.js +1 -1
  531. package/dist/esm/components/progress.props.js +1 -1
  532. package/dist/esm/components/radio-group.d.ts +2 -3
  533. package/dist/esm/components/radio-group.d.ts.map +1 -1
  534. package/dist/esm/components/radio-group.js +1 -1
  535. package/dist/esm/components/radio-group.props.js +1 -1
  536. package/dist/esm/components/radio.d.ts +1 -2
  537. package/dist/esm/components/radio.d.ts.map +1 -1
  538. package/dist/esm/components/radio.js +1 -1
  539. package/dist/esm/components/radio.props.js +1 -1
  540. package/dist/esm/components/schemas/base-button.schema.d.ts +2 -3
  541. package/dist/esm/components/schemas/base-button.schema.d.ts.map +1 -1
  542. package/dist/esm/components/schemas/base-button.schema.js +1 -1
  543. package/dist/esm/components/schemas/button.schema.d.ts +0 -1
  544. package/dist/esm/components/schemas/button.schema.d.ts.map +1 -1
  545. package/dist/esm/components/schemas/button.schema.js +1 -1
  546. package/dist/esm/components/schemas/index.d.ts +2 -6
  547. package/dist/esm/components/schemas/index.d.ts.map +1 -1
  548. package/dist/esm/components/schemas/index.js +1 -1
  549. package/dist/esm/components/schemas/index.js.map +2 -2
  550. package/dist/esm/components/schemas/{toggle-button.schema.d.ts → toggle.schema.d.ts} +13 -38
  551. package/dist/esm/components/schemas/toggle.schema.d.ts.map +1 -0
  552. package/dist/esm/components/schemas/toggle.schema.js +2 -0
  553. package/dist/esm/components/scroll-area.d.ts +1 -2
  554. package/dist/esm/components/scroll-area.d.ts.map +1 -1
  555. package/dist/esm/components/scroll-area.js +1 -1
  556. package/dist/esm/components/segmented-control.d.ts +1 -2
  557. package/dist/esm/components/segmented-control.d.ts.map +1 -1
  558. package/dist/esm/components/segmented-control.js +1 -1
  559. package/dist/esm/components/select.d.ts +1 -2
  560. package/dist/esm/components/select.d.ts.map +1 -1
  561. package/dist/esm/components/select.js +1 -1
  562. package/dist/esm/components/select.props.js +1 -1
  563. package/dist/esm/components/separator.d.ts +1 -2
  564. package/dist/esm/components/separator.d.ts.map +1 -1
  565. package/dist/esm/components/separator.js +1 -1
  566. package/dist/esm/components/separator.props.js +1 -1
  567. package/dist/esm/components/sheet.js +1 -1
  568. package/dist/esm/components/shell.js +1 -1
  569. package/dist/esm/components/sidebar.d.ts +5 -5
  570. package/dist/esm/components/sidebar.d.ts.map +1 -1
  571. package/dist/esm/components/sidebar.js +1 -1
  572. package/dist/esm/components/slider.d.ts +1 -2
  573. package/dist/esm/components/slider.d.ts.map +1 -1
  574. package/dist/esm/components/slider.js +1 -1
  575. package/dist/esm/components/slider.props.js +1 -1
  576. package/dist/esm/components/spinner.d.ts +1 -2
  577. package/dist/esm/components/spinner.d.ts.map +1 -1
  578. package/dist/esm/components/spinner.js +1 -1
  579. package/dist/esm/components/switch.d.ts +1 -2
  580. package/dist/esm/components/switch.d.ts.map +1 -1
  581. package/dist/esm/components/switch.js +1 -1
  582. package/dist/esm/components/switch.props.js +1 -1
  583. package/dist/esm/components/table.d.ts +1 -2
  584. package/dist/esm/components/table.d.ts.map +1 -1
  585. package/dist/esm/components/table.js +1 -1
  586. package/dist/esm/components/tabs.d.ts +3 -4
  587. package/dist/esm/components/tabs.d.ts.map +1 -1
  588. package/dist/esm/components/tabs.js +1 -1
  589. package/dist/esm/components/tabs.props.js +1 -1
  590. package/dist/esm/components/text-area.d.ts +1 -2
  591. package/dist/esm/components/text-area.d.ts.map +1 -1
  592. package/dist/esm/components/text-area.js +1 -1
  593. package/dist/esm/components/text-area.props.js +1 -1
  594. package/dist/esm/components/text-field.d.ts +1 -2
  595. package/dist/esm/components/text-field.d.ts.map +1 -1
  596. package/dist/esm/components/text-field.js +1 -1
  597. package/dist/esm/components/text-field.props.js +1 -1
  598. package/dist/esm/components/text.d.ts +1 -2
  599. package/dist/esm/components/text.d.ts.map +1 -1
  600. package/dist/esm/components/text.js +1 -1
  601. package/dist/esm/components/text.props.d.ts +2 -2
  602. package/dist/esm/components/text.props.js +1 -1
  603. package/dist/esm/components/theme.js +1 -1
  604. package/dist/esm/components/theme.props.js +1 -1
  605. package/dist/esm/components/toggle.d.ts +35 -0
  606. package/dist/esm/components/toggle.d.ts.map +1 -0
  607. package/dist/esm/components/toggle.js +2 -0
  608. package/dist/esm/components/toolbar.d.ts +2 -3
  609. package/dist/esm/components/toolbar.d.ts.map +1 -1
  610. package/dist/esm/components/toolbar.js +1 -1
  611. package/dist/esm/components/tooltip.js +1 -1
  612. package/dist/esm/components/virtual-menu.d.ts +2 -1
  613. package/dist/esm/components/virtual-menu.d.ts.map +1 -1
  614. package/dist/esm/components/virtual-menu.js +1 -1
  615. package/dist/esm/helpers/extract-props.js +1 -1
  616. package/dist/esm/helpers/get-margin-styles.js +1 -1
  617. package/dist/esm/helpers/get-responsive-styles.js +1 -1
  618. package/dist/esm/helpers/index.js +1 -1
  619. package/dist/esm/helpers/inert.js +1 -1
  620. package/dist/esm/helpers/inert.js.map +4 -4
  621. package/dist/esm/hooks/index.js +1 -1
  622. package/dist/esm/hooks/use-prop-synced-state.d.ts +1 -1
  623. package/dist/esm/hooks/use-prop-synced-state.js +1 -1
  624. package/dist/esm/hooks/use-toggle-state.d.ts +1 -1
  625. package/dist/esm/hooks/use-toggle-state.js +1 -1
  626. package/dist/esm/index.js +1 -1
  627. package/dist/esm/props/color.prop.js +1 -1
  628. package/dist/esm/props/emphasis.prop.js +1 -1
  629. package/dist/esm/props/index.d.ts +1 -14
  630. package/dist/esm/props/index.d.ts.map +1 -1
  631. package/dist/esm/props/index.js +1 -1
  632. package/dist/esm/props/weight.prop.d.ts +1 -1
  633. package/dist/esm/props/weight.prop.d.ts.map +1 -1
  634. package/dist/esm/props/weight.prop.js +1 -1
  635. package/layout/components.css +0 -223
  636. package/layout.css +0 -221
  637. package/package.json +1 -1
  638. package/schemas/base-button.json +0 -5
  639. package/schemas/button.json +0 -5
  640. package/schemas/index.json +14 -629
  641. package/schemas/schemas.d.ts +2 -6
  642. package/schemas/{toggle-button.json → toggle.json} +4 -9
  643. package/src/components/_internal/base-button.css +2 -36
  644. package/src/components/_internal/base-button.props.ts +1 -7
  645. package/src/components/_internal/base-button.tsx +3 -9
  646. package/src/components/_internal/base-checkbox.css +3 -8
  647. package/src/components/_internal/base-menu.css +128 -118
  648. package/src/components/_internal/base-menu.props.ts +1 -1
  649. package/src/components/_internal/base-menu.utils.tsx +2 -1
  650. package/src/components/_internal/base-radio.css +2 -7
  651. package/src/components/_internal/base-sidebar-menu.css +11 -40
  652. package/src/components/_internal/base-tab-list.css +3 -4
  653. package/src/components/_internal/menu-context.tsx +9 -4
  654. package/src/components/accordion.css +0 -33
  655. package/src/components/accordion.props.tsx +0 -3
  656. package/src/components/accordion.tsx +1 -2
  657. package/src/components/alert-dialog.tsx +1 -1
  658. package/src/components/avatar.css +3 -3
  659. package/src/components/avatar.tsx +2 -4
  660. package/src/components/blockquote.props.tsx +1 -1
  661. package/src/components/blockquote.tsx +0 -2
  662. package/src/components/button.css +4 -3
  663. package/src/components/button.tsx +34 -19
  664. package/src/components/card.tsx +2 -4
  665. package/src/components/chatbar.css +2 -2
  666. package/src/components/chatbar.tsx +8 -7
  667. package/src/components/checkbox-group.tsx +2 -7
  668. package/src/components/checkbox.tsx +1 -4
  669. package/src/components/{badge.css → chip.css} +12 -12
  670. package/src/components/{badge.props.tsx → chip.props.tsx} +2 -2
  671. package/src/components/{badge.tsx → chip.tsx} +20 -23
  672. package/src/components/code.css +10 -32
  673. package/src/components/code.props.tsx +1 -1
  674. package/src/components/code.tsx +0 -4
  675. package/src/components/combobox.css +2 -11
  676. package/src/components/combobox.props.tsx +1 -1
  677. package/src/components/combobox.tsx +2 -4
  678. package/src/components/dialog.tsx +1 -1
  679. package/src/components/dropdown-menu.css +4 -4
  680. package/src/components/heading.css +9 -29
  681. package/src/components/heading.props.tsx +1 -1
  682. package/src/components/heading.tsx +2 -5
  683. package/src/components/index.css +2 -15
  684. package/src/components/index.tsx +2 -23
  685. package/src/components/kbd.css +1 -29
  686. package/src/components/kbd.props.tsx +1 -1
  687. package/src/components/kbd.tsx +2 -4
  688. package/src/components/layout.css +0 -2
  689. package/src/components/link.props.tsx +1 -1
  690. package/src/components/link.tsx +1 -2
  691. package/src/components/message-scroller.tsx +6 -5
  692. package/src/components/navbar.tsx +7 -3
  693. package/src/components/notice.css +10 -13
  694. package/src/components/notice.tsx +2 -3
  695. package/src/components/progress.tsx +1 -5
  696. package/src/components/radio-group.tsx +3 -8
  697. package/src/components/radio.tsx +1 -4
  698. package/src/components/schemas/base-button.schema.ts +2 -13
  699. package/src/components/schemas/index.ts +3 -11
  700. package/src/components/schemas/{toggle-button.schema.ts → toggle.schema.ts} +18 -38
  701. package/src/components/scroll-area.tsx +3 -11
  702. package/src/components/segmented-control.css +8 -5
  703. package/src/components/segmented-control.tsx +2 -5
  704. package/src/components/select.css +19 -134
  705. package/src/components/select.tsx +0 -4
  706. package/src/components/separator.tsx +2 -4
  707. package/src/components/sidebar.css +92 -133
  708. package/src/components/sidebar.tsx +16 -18
  709. package/src/components/slider.css +3 -4
  710. package/src/components/slider.tsx +0 -4
  711. package/src/components/spinner.tsx +1 -5
  712. package/src/components/switch.tsx +0 -4
  713. package/src/components/table.css +24 -11
  714. package/src/components/table.tsx +1 -5
  715. package/src/components/tabs.tsx +2 -8
  716. package/src/components/text-area.css +2 -1
  717. package/src/components/text-area.tsx +1 -4
  718. package/src/components/text-field.css +4 -2
  719. package/src/components/text-field.tsx +2 -4
  720. package/src/components/text.css +0 -20
  721. package/src/components/text.props.tsx +1 -1
  722. package/src/components/text.tsx +2 -5
  723. package/src/components/theme.tsx +1 -1
  724. package/src/components/toggle.tsx +96 -0
  725. package/src/components/toolbar.tsx +6 -12
  726. package/src/components/virtual-menu.tsx +3 -1
  727. package/src/hooks/use-prop-synced-state.ts +1 -1
  728. package/src/hooks/use-toggle-state.ts +1 -1
  729. package/src/props/color.prop.ts +1 -1
  730. package/src/props/emphasis.prop.ts +2 -2
  731. package/src/props/index.ts +1 -14
  732. package/src/props/weight.prop.ts +2 -1
  733. package/src/styles/tokens/color.css +1 -1
  734. package/src/styles/tokens/radius.css +12 -0
  735. package/src/styles/tokens/typography.css +21 -49
  736. package/src/styles/utilities/font-weight.css +0 -20
  737. package/styles.css +1750 -4986
  738. package/tokens/base.css +23 -45
  739. package/tokens.css +23 -45
  740. package/utilities.css +0 -90
  741. package/dist/cjs/components/aspect-ratio.d.ts +0 -4
  742. package/dist/cjs/components/aspect-ratio.d.ts.map +0 -1
  743. package/dist/cjs/components/aspect-ratio.js +0 -2
  744. package/dist/cjs/components/aspect-ratio.js.map +0 -7
  745. package/dist/cjs/components/badge.d.ts +0 -19
  746. package/dist/cjs/components/badge.d.ts.map +0 -1
  747. package/dist/cjs/components/badge.js +0 -2
  748. package/dist/cjs/components/badge.js.map +0 -7
  749. package/dist/cjs/components/badge.props.d.ts.map +0 -1
  750. package/dist/cjs/components/badge.props.js +0 -2
  751. package/dist/cjs/components/badge.props.js.map +0 -7
  752. package/dist/cjs/components/checkbox-cards.d.ts +0 -19
  753. package/dist/cjs/components/checkbox-cards.d.ts.map +0 -1
  754. package/dist/cjs/components/checkbox-cards.js +0 -2
  755. package/dist/cjs/components/checkbox-cards.js.map +0 -7
  756. package/dist/cjs/components/checkbox-cards.props.d.ts +0 -43
  757. package/dist/cjs/components/checkbox-cards.props.d.ts.map +0 -1
  758. package/dist/cjs/components/checkbox-cards.props.js +0 -2
  759. package/dist/cjs/components/checkbox-cards.props.js.map +0 -7
  760. package/dist/cjs/components/container.d.ts +0 -11
  761. package/dist/cjs/components/container.d.ts.map +0 -1
  762. package/dist/cjs/components/container.js +0 -2
  763. package/dist/cjs/components/container.js.map +0 -7
  764. package/dist/cjs/components/container.props.d.ts +0 -68
  765. package/dist/cjs/components/container.props.d.ts.map +0 -1
  766. package/dist/cjs/components/container.props.js +0 -2
  767. package/dist/cjs/components/container.props.js.map +0 -7
  768. package/dist/cjs/components/data-list.d.ts +0 -23
  769. package/dist/cjs/components/data-list.d.ts.map +0 -1
  770. package/dist/cjs/components/data-list.js +0 -2
  771. package/dist/cjs/components/data-list.js.map +0 -7
  772. package/dist/cjs/components/data-list.props.d.ts +0 -63
  773. package/dist/cjs/components/data-list.props.d.ts.map +0 -1
  774. package/dist/cjs/components/data-list.props.js +0 -2
  775. package/dist/cjs/components/data-list.props.js.map +0 -7
  776. package/dist/cjs/components/em.d.ts +0 -11
  777. package/dist/cjs/components/em.d.ts.map +0 -1
  778. package/dist/cjs/components/em.js +0 -2
  779. package/dist/cjs/components/em.js.map +0 -7
  780. package/dist/cjs/components/em.props.d.ts +0 -17
  781. package/dist/cjs/components/em.props.d.ts.map +0 -1
  782. package/dist/cjs/components/em.props.js +0 -2
  783. package/dist/cjs/components/em.props.js.map +0 -7
  784. package/dist/cjs/components/hover-card.d.ts +0 -17
  785. package/dist/cjs/components/hover-card.d.ts.map +0 -1
  786. package/dist/cjs/components/hover-card.js +0 -2
  787. package/dist/cjs/components/hover-card.js.map +0 -7
  788. package/dist/cjs/components/hover-card.props.d.ts +0 -57
  789. package/dist/cjs/components/hover-card.props.d.ts.map +0 -1
  790. package/dist/cjs/components/hover-card.props.js +0 -2
  791. package/dist/cjs/components/hover-card.props.js.map +0 -7
  792. package/dist/cjs/components/icon-button.d.ts +0 -108
  793. package/dist/cjs/components/icon-button.d.ts.map +0 -1
  794. package/dist/cjs/components/icon-button.js +0 -5
  795. package/dist/cjs/components/icon-button.js.map +0 -7
  796. package/dist/cjs/components/icon-button.props.d.ts +0 -2
  797. package/dist/cjs/components/icon-button.props.d.ts.map +0 -1
  798. package/dist/cjs/components/icon-button.props.js +0 -2
  799. package/dist/cjs/components/icon-button.props.js.map +0 -7
  800. package/dist/cjs/components/image.d.ts +0 -96
  801. package/dist/cjs/components/image.d.ts.map +0 -1
  802. package/dist/cjs/components/image.js +0 -2
  803. package/dist/cjs/components/image.js.map +0 -7
  804. package/dist/cjs/components/image.props.d.ts +0 -147
  805. package/dist/cjs/components/image.props.d.ts.map +0 -1
  806. package/dist/cjs/components/image.props.js +0 -2
  807. package/dist/cjs/components/image.props.js.map +0 -7
  808. package/dist/cjs/components/quote.d.ts +0 -11
  809. package/dist/cjs/components/quote.d.ts.map +0 -1
  810. package/dist/cjs/components/quote.js +0 -2
  811. package/dist/cjs/components/quote.js.map +0 -7
  812. package/dist/cjs/components/quote.props.d.ts +0 -17
  813. package/dist/cjs/components/quote.props.d.ts.map +0 -1
  814. package/dist/cjs/components/quote.props.js +0 -2
  815. package/dist/cjs/components/quote.props.js.map +0 -7
  816. package/dist/cjs/components/radio-cards.d.ts +0 -16
  817. package/dist/cjs/components/radio-cards.d.ts.map +0 -1
  818. package/dist/cjs/components/radio-cards.js +0 -2
  819. package/dist/cjs/components/radio-cards.js.map +0 -7
  820. package/dist/cjs/components/radio-cards.props.d.ts +0 -43
  821. package/dist/cjs/components/radio-cards.props.d.ts.map +0 -1
  822. package/dist/cjs/components/radio-cards.props.js +0 -2
  823. package/dist/cjs/components/radio-cards.props.js.map +0 -7
  824. package/dist/cjs/components/schemas/icon-button.schema.d.ts +0 -201
  825. package/dist/cjs/components/schemas/icon-button.schema.d.ts.map +0 -1
  826. package/dist/cjs/components/schemas/icon-button.schema.js +0 -2
  827. package/dist/cjs/components/schemas/icon-button.schema.js.map +0 -7
  828. package/dist/cjs/components/schemas/toggle-button.schema.d.ts.map +0 -1
  829. package/dist/cjs/components/schemas/toggle-button.schema.js +0 -2
  830. package/dist/cjs/components/schemas/toggle-button.schema.js.map +0 -7
  831. package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts +0 -211
  832. package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts.map +0 -1
  833. package/dist/cjs/components/schemas/toggle-icon-button.schema.js +0 -2
  834. package/dist/cjs/components/schemas/toggle-icon-button.schema.js.map +0 -7
  835. package/dist/cjs/components/section.d.ts +0 -11
  836. package/dist/cjs/components/section.d.ts.map +0 -1
  837. package/dist/cjs/components/section.js +0 -2
  838. package/dist/cjs/components/section.js.map +0 -7
  839. package/dist/cjs/components/section.props.d.ts +0 -52
  840. package/dist/cjs/components/section.props.d.ts.map +0 -1
  841. package/dist/cjs/components/section.props.js +0 -2
  842. package/dist/cjs/components/section.props.js.map +0 -7
  843. package/dist/cjs/components/skeleton.d.ts +0 -12
  844. package/dist/cjs/components/skeleton.d.ts.map +0 -1
  845. package/dist/cjs/components/skeleton.js +0 -2
  846. package/dist/cjs/components/skeleton.js.map +0 -7
  847. package/dist/cjs/components/skeleton.props.d.ts +0 -44
  848. package/dist/cjs/components/skeleton.props.d.ts.map +0 -1
  849. package/dist/cjs/components/skeleton.props.js +0 -2
  850. package/dist/cjs/components/skeleton.props.js.map +0 -7
  851. package/dist/cjs/components/strong.d.ts +0 -11
  852. package/dist/cjs/components/strong.d.ts.map +0 -1
  853. package/dist/cjs/components/strong.js +0 -2
  854. package/dist/cjs/components/strong.js.map +0 -7
  855. package/dist/cjs/components/strong.props.d.ts +0 -17
  856. package/dist/cjs/components/strong.props.d.ts.map +0 -1
  857. package/dist/cjs/components/strong.props.js +0 -2
  858. package/dist/cjs/components/strong.props.js.map +0 -7
  859. package/dist/cjs/components/tab-nav.d.ts +0 -19
  860. package/dist/cjs/components/tab-nav.d.ts.map +0 -1
  861. package/dist/cjs/components/tab-nav.js +0 -2
  862. package/dist/cjs/components/tab-nav.js.map +0 -7
  863. package/dist/cjs/components/tab-nav.props.d.ts +0 -12
  864. package/dist/cjs/components/tab-nav.props.d.ts.map +0 -1
  865. package/dist/cjs/components/tab-nav.props.js +0 -2
  866. package/dist/cjs/components/tab-nav.props.js.map +0 -7
  867. package/dist/cjs/components/theme-panel.d.ts +0 -25
  868. package/dist/cjs/components/theme-panel.d.ts.map +0 -1
  869. package/dist/cjs/components/theme-panel.js +0 -13
  870. package/dist/cjs/components/theme-panel.js.map +0 -7
  871. package/dist/cjs/components/toggle-button.d.ts +0 -63
  872. package/dist/cjs/components/toggle-button.d.ts.map +0 -1
  873. package/dist/cjs/components/toggle-button.js +0 -13
  874. package/dist/cjs/components/toggle-button.js.map +0 -7
  875. package/dist/cjs/components/toggle-icon-button.d.ts +0 -109
  876. package/dist/cjs/components/toggle-icon-button.d.ts.map +0 -1
  877. package/dist/cjs/components/toggle-icon-button.js +0 -13
  878. package/dist/cjs/components/toggle-icon-button.js.map +0 -7
  879. package/dist/esm/chunk-2XQECQF2.js +0 -2
  880. package/dist/esm/chunk-2XQECQF2.js.map +0 -7
  881. package/dist/esm/chunk-32ATKZAP.js +0 -2
  882. package/dist/esm/chunk-32ATKZAP.js.map +0 -7
  883. package/dist/esm/chunk-42LDZ7L5.js +0 -2
  884. package/dist/esm/chunk-42LDZ7L5.js.map +0 -7
  885. package/dist/esm/chunk-43A5GUSI.js +0 -2
  886. package/dist/esm/chunk-43A5GUSI.js.map +0 -7
  887. package/dist/esm/chunk-4JQZUQY7.js +0 -2
  888. package/dist/esm/chunk-4JQZUQY7.js.map +0 -7
  889. package/dist/esm/chunk-534LGOWC.js +0 -2
  890. package/dist/esm/chunk-534LGOWC.js.map +0 -7
  891. package/dist/esm/chunk-5AHQJB6H.js +0 -2
  892. package/dist/esm/chunk-5UU2IMGX.js +0 -2
  893. package/dist/esm/chunk-5UU2IMGX.js.map +0 -7
  894. package/dist/esm/chunk-63ASTOS2.js +0 -2
  895. package/dist/esm/chunk-63ASTOS2.js.map +0 -7
  896. package/dist/esm/chunk-6XNQ5XD3.js +0 -10
  897. package/dist/esm/chunk-6XNQ5XD3.js.map +0 -7
  898. package/dist/esm/chunk-7FC7HF76.js +0 -2
  899. package/dist/esm/chunk-7FC7HF76.js.map +0 -7
  900. package/dist/esm/chunk-7KIKAEI7.js +0 -2
  901. package/dist/esm/chunk-7KIKAEI7.js.map +0 -7
  902. package/dist/esm/chunk-7SS6EIE5.js +0 -5
  903. package/dist/esm/chunk-7SS6EIE5.js.map +0 -7
  904. package/dist/esm/chunk-7UV4FYYL.js +0 -2
  905. package/dist/esm/chunk-7UV4FYYL.js.map +0 -7
  906. package/dist/esm/chunk-ABQHBDM4.js +0 -2
  907. package/dist/esm/chunk-ABQHBDM4.js.map +0 -7
  908. package/dist/esm/chunk-ABS275QZ.js +0 -2
  909. package/dist/esm/chunk-AI6UQ5VD.js +0 -2
  910. package/dist/esm/chunk-AI6UQ5VD.js.map +0 -7
  911. package/dist/esm/chunk-AUV6B4AH.js +0 -2
  912. package/dist/esm/chunk-AUV6B4AH.js.map +0 -7
  913. package/dist/esm/chunk-B72RMGWZ.js +0 -2
  914. package/dist/esm/chunk-B72RMGWZ.js.map +0 -7
  915. package/dist/esm/chunk-BQS6XXJR.js +0 -2
  916. package/dist/esm/chunk-BQS6XXJR.js.map +0 -7
  917. package/dist/esm/chunk-BUBV3C6C.js +0 -2
  918. package/dist/esm/chunk-BUBV3C6C.js.map +0 -7
  919. package/dist/esm/chunk-CC4GNSKL.js +0 -2
  920. package/dist/esm/chunk-CC4GNSKL.js.map +0 -7
  921. package/dist/esm/chunk-D2ZHYCTG.js +0 -2
  922. package/dist/esm/chunk-D2ZHYCTG.js.map +0 -7
  923. package/dist/esm/chunk-DIR22XIX.js +0 -2
  924. package/dist/esm/chunk-DIR22XIX.js.map +0 -7
  925. package/dist/esm/chunk-DMWLY6ZP.js +0 -2
  926. package/dist/esm/chunk-E453PYTG.js +0 -2
  927. package/dist/esm/chunk-E453PYTG.js.map +0 -7
  928. package/dist/esm/chunk-EUSKAXHP.js +0 -2
  929. package/dist/esm/chunk-EUSKAXHP.js.map +0 -7
  930. package/dist/esm/chunk-EVTNB4TB.js +0 -2
  931. package/dist/esm/chunk-F2UUKVBM.js +0 -1
  932. package/dist/esm/chunk-FD2TR343.js +0 -2
  933. package/dist/esm/chunk-FD2TR343.js.map +0 -7
  934. package/dist/esm/chunk-FNRKTMNN.js +0 -2
  935. package/dist/esm/chunk-FNRKTMNN.js.map +0 -7
  936. package/dist/esm/chunk-FSKZAL5H.js +0 -2
  937. package/dist/esm/chunk-FSKZAL5H.js.map +0 -7
  938. package/dist/esm/chunk-FTGD2SZ6.js +0 -2
  939. package/dist/esm/chunk-FTGD2SZ6.js.map +0 -7
  940. package/dist/esm/chunk-G3U6OHVA.js +0 -2
  941. package/dist/esm/chunk-G3U6OHVA.js.map +0 -7
  942. package/dist/esm/chunk-G6PO4QKW.js +0 -2
  943. package/dist/esm/chunk-G6PO4QKW.js.map +0 -7
  944. package/dist/esm/chunk-GFOSP3PZ.js +0 -2
  945. package/dist/esm/chunk-GFOSP3PZ.js.map +0 -7
  946. package/dist/esm/chunk-GIIMBBVM.js +0 -2
  947. package/dist/esm/chunk-GIIMBBVM.js.map +0 -7
  948. package/dist/esm/chunk-GLERJXVS.js +0 -2
  949. package/dist/esm/chunk-GLERJXVS.js.map +0 -7
  950. package/dist/esm/chunk-GPVPXAUC.js +0 -2
  951. package/dist/esm/chunk-GPVPXAUC.js.map +0 -7
  952. package/dist/esm/chunk-GYNRAVCL.js +0 -5
  953. package/dist/esm/chunk-GYNRAVCL.js.map +0 -7
  954. package/dist/esm/chunk-HT5EFJA3.js +0 -2
  955. package/dist/esm/chunk-HT5EFJA3.js.map +0 -7
  956. package/dist/esm/chunk-IBF5U4QW.js +0 -2
  957. package/dist/esm/chunk-IBF5U4QW.js.map +0 -7
  958. package/dist/esm/chunk-IXNJFV4O.js +0 -2
  959. package/dist/esm/chunk-IXNJFV4O.js.map +0 -7
  960. package/dist/esm/chunk-JBC6DT2X.js +0 -2
  961. package/dist/esm/chunk-JBC6DT2X.js.map +0 -7
  962. package/dist/esm/chunk-JQURG6CB.js +0 -2
  963. package/dist/esm/chunk-JQURG6CB.js.map +0 -7
  964. package/dist/esm/chunk-JRIBL4WJ.js +0 -2
  965. package/dist/esm/chunk-JRIBL4WJ.js.map +0 -7
  966. package/dist/esm/chunk-JZSXHYUU.js +0 -2
  967. package/dist/esm/chunk-JZSXHYUU.js.map +0 -7
  968. package/dist/esm/chunk-K6Y2SM5N.js +0 -2
  969. package/dist/esm/chunk-K6Y2SM5N.js.map +0 -7
  970. package/dist/esm/chunk-KDKL3HXD.js +0 -2
  971. package/dist/esm/chunk-KDKL3HXD.js.map +0 -7
  972. package/dist/esm/chunk-KRPEEM4C.js +0 -2
  973. package/dist/esm/chunk-KRPEEM4C.js.map +0 -7
  974. package/dist/esm/chunk-KSZOVI57.js.map +0 -7
  975. package/dist/esm/chunk-L6UXAITB.js +0 -2
  976. package/dist/esm/chunk-L6UXAITB.js.map +0 -7
  977. package/dist/esm/chunk-LFUPGIPA.js +0 -2
  978. package/dist/esm/chunk-LFUPGIPA.js.map +0 -7
  979. package/dist/esm/chunk-MCQCG6AS.js +0 -2
  980. package/dist/esm/chunk-MCQCG6AS.js.map +0 -7
  981. package/dist/esm/chunk-MZR6YBE7.js +0 -2
  982. package/dist/esm/chunk-MZR6YBE7.js.map +0 -7
  983. package/dist/esm/chunk-N5OSP3PU.js +0 -2
  984. package/dist/esm/chunk-N77QJUTO.js.map +0 -7
  985. package/dist/esm/chunk-NCDOMH5I.js.map +0 -7
  986. package/dist/esm/chunk-NETIWKIR.js +0 -2
  987. package/dist/esm/chunk-NETIWKIR.js.map +0 -7
  988. package/dist/esm/chunk-NIX6Z3JG.js +0 -2
  989. package/dist/esm/chunk-NIX6Z3JG.js.map +0 -7
  990. package/dist/esm/chunk-OMYAVTX6.js +0 -2
  991. package/dist/esm/chunk-OMYAVTX6.js.map +0 -7
  992. package/dist/esm/chunk-OXYHRNJA.js +0 -2
  993. package/dist/esm/chunk-PDBVZAUJ.js +0 -2
  994. package/dist/esm/chunk-PIMNQEDG.js +0 -2
  995. package/dist/esm/chunk-PIMNQEDG.js.map +0 -7
  996. package/dist/esm/chunk-PPNWGWN3.js +0 -2
  997. package/dist/esm/chunk-PPNWGWN3.js.map +0 -7
  998. package/dist/esm/chunk-Q5LPCJXN.js +0 -2
  999. package/dist/esm/chunk-Q5LPCJXN.js.map +0 -7
  1000. package/dist/esm/chunk-QOPRXQGR.js +0 -2
  1001. package/dist/esm/chunk-QOPRXQGR.js.map +0 -7
  1002. package/dist/esm/chunk-RUWKVDFT.js +0 -2
  1003. package/dist/esm/chunk-RUWKVDFT.js.map +0 -7
  1004. package/dist/esm/chunk-RVM4LGAU.js +0 -2
  1005. package/dist/esm/chunk-RVM4LGAU.js.map +0 -7
  1006. package/dist/esm/chunk-TLWCU336.js +0 -2
  1007. package/dist/esm/chunk-TLWCU336.js.map +0 -7
  1008. package/dist/esm/chunk-TQIR5LLY.js +0 -2
  1009. package/dist/esm/chunk-TQIR5LLY.js.map +0 -7
  1010. package/dist/esm/chunk-UUHTK35B.js +0 -2
  1011. package/dist/esm/chunk-UUHTK35B.js.map +0 -7
  1012. package/dist/esm/chunk-UUV5UNYL.js +0 -2
  1013. package/dist/esm/chunk-UUV5UNYL.js.map +0 -7
  1014. package/dist/esm/chunk-UUWGAQDT.js +0 -2
  1015. package/dist/esm/chunk-UUWGAQDT.js.map +0 -7
  1016. package/dist/esm/chunk-VLQ2LX5M.js +0 -2
  1017. package/dist/esm/chunk-VLQ2LX5M.js.map +0 -7
  1018. package/dist/esm/chunk-VTTJFBV6.js +0 -2
  1019. package/dist/esm/chunk-VTTJFBV6.js.map +0 -7
  1020. package/dist/esm/chunk-WAURCNAS.js.map +0 -7
  1021. package/dist/esm/chunk-X3D3JR64.js +0 -2
  1022. package/dist/esm/chunk-X3D3JR64.js.map +0 -7
  1023. package/dist/esm/chunk-X7HFFVFD.js +0 -2
  1024. package/dist/esm/chunk-X7HFFVFD.js.map +0 -7
  1025. package/dist/esm/chunk-XASK6LMX.js +0 -2
  1026. package/dist/esm/chunk-XASK6LMX.js.map +0 -7
  1027. package/dist/esm/chunk-XI5YXUCK.js +0 -2
  1028. package/dist/esm/chunk-XI5YXUCK.js.map +0 -7
  1029. package/dist/esm/chunk-XTE22CXV.js +0 -2
  1030. package/dist/esm/chunk-XTE22CXV.js.map +0 -7
  1031. package/dist/esm/chunk-Y7LT3F6R.js +0 -2
  1032. package/dist/esm/chunk-Y7LT3F6R.js.map +0 -7
  1033. package/dist/esm/chunk-YKPMLM7M.js +0 -1
  1034. package/dist/esm/chunk-YVHRWMSZ.js.map +0 -7
  1035. package/dist/esm/chunk-YYZBPQQ4.js +0 -2
  1036. package/dist/esm/chunk-YYZBPQQ4.js.map +0 -7
  1037. package/dist/esm/chunk-Z6NRR7KS.js +0 -2
  1038. package/dist/esm/chunk-Z6NRR7KS.js.map +0 -7
  1039. package/dist/esm/chunk-ZIKJ2WZN.js +0 -2
  1040. package/dist/esm/chunk-ZIKJ2WZN.js.map +0 -7
  1041. package/dist/esm/chunk-ZMFZYXLB.js +0 -2
  1042. package/dist/esm/chunk-ZMFZYXLB.js.map +0 -7
  1043. package/dist/esm/chunk-ZMOBKT4T.js +0 -2
  1044. package/dist/esm/chunk-ZMOBKT4T.js.map +0 -7
  1045. package/dist/esm/chunk-ZWZGUBL4.js.map +0 -7
  1046. package/dist/esm/components/aspect-ratio.d.ts +0 -4
  1047. package/dist/esm/components/aspect-ratio.d.ts.map +0 -1
  1048. package/dist/esm/components/aspect-ratio.js +0 -2
  1049. package/dist/esm/components/badge.d.ts +0 -19
  1050. package/dist/esm/components/badge.d.ts.map +0 -1
  1051. package/dist/esm/components/badge.js +0 -2
  1052. package/dist/esm/components/badge.props.d.ts.map +0 -1
  1053. package/dist/esm/components/badge.props.js +0 -2
  1054. package/dist/esm/components/checkbox-cards.d.ts +0 -19
  1055. package/dist/esm/components/checkbox-cards.d.ts.map +0 -1
  1056. package/dist/esm/components/checkbox-cards.js +0 -2
  1057. package/dist/esm/components/checkbox-cards.js.map +0 -7
  1058. package/dist/esm/components/checkbox-cards.props.d.ts +0 -43
  1059. package/dist/esm/components/checkbox-cards.props.d.ts.map +0 -1
  1060. package/dist/esm/components/checkbox-cards.props.js +0 -2
  1061. package/dist/esm/components/checkbox-cards.props.js.map +0 -7
  1062. package/dist/esm/components/container.d.ts +0 -11
  1063. package/dist/esm/components/container.d.ts.map +0 -1
  1064. package/dist/esm/components/container.js +0 -2
  1065. package/dist/esm/components/container.js.map +0 -7
  1066. package/dist/esm/components/container.props.d.ts +0 -68
  1067. package/dist/esm/components/container.props.d.ts.map +0 -1
  1068. package/dist/esm/components/container.props.js +0 -2
  1069. package/dist/esm/components/container.props.js.map +0 -7
  1070. package/dist/esm/components/data-list.d.ts +0 -23
  1071. package/dist/esm/components/data-list.d.ts.map +0 -1
  1072. package/dist/esm/components/data-list.js +0 -2
  1073. package/dist/esm/components/data-list.js.map +0 -7
  1074. package/dist/esm/components/data-list.props.d.ts +0 -63
  1075. package/dist/esm/components/data-list.props.d.ts.map +0 -1
  1076. package/dist/esm/components/data-list.props.js +0 -2
  1077. package/dist/esm/components/data-list.props.js.map +0 -7
  1078. package/dist/esm/components/em.d.ts +0 -11
  1079. package/dist/esm/components/em.d.ts.map +0 -1
  1080. package/dist/esm/components/em.js +0 -2
  1081. package/dist/esm/components/em.js.map +0 -7
  1082. package/dist/esm/components/em.props.d.ts +0 -17
  1083. package/dist/esm/components/em.props.d.ts.map +0 -1
  1084. package/dist/esm/components/em.props.js +0 -2
  1085. package/dist/esm/components/em.props.js.map +0 -7
  1086. package/dist/esm/components/hover-card.d.ts +0 -17
  1087. package/dist/esm/components/hover-card.d.ts.map +0 -1
  1088. package/dist/esm/components/hover-card.js +0 -2
  1089. package/dist/esm/components/hover-card.js.map +0 -7
  1090. package/dist/esm/components/hover-card.props.d.ts +0 -57
  1091. package/dist/esm/components/hover-card.props.d.ts.map +0 -1
  1092. package/dist/esm/components/hover-card.props.js +0 -2
  1093. package/dist/esm/components/hover-card.props.js.map +0 -7
  1094. package/dist/esm/components/icon-button.d.ts +0 -108
  1095. package/dist/esm/components/icon-button.d.ts.map +0 -1
  1096. package/dist/esm/components/icon-button.js +0 -2
  1097. package/dist/esm/components/icon-button.js.map +0 -7
  1098. package/dist/esm/components/icon-button.props.d.ts +0 -2
  1099. package/dist/esm/components/icon-button.props.d.ts.map +0 -1
  1100. package/dist/esm/components/icon-button.props.js +0 -2
  1101. package/dist/esm/components/icon-button.props.js.map +0 -7
  1102. package/dist/esm/components/image.d.ts +0 -96
  1103. package/dist/esm/components/image.d.ts.map +0 -1
  1104. package/dist/esm/components/image.js +0 -2
  1105. package/dist/esm/components/image.js.map +0 -7
  1106. package/dist/esm/components/image.props.d.ts +0 -147
  1107. package/dist/esm/components/image.props.d.ts.map +0 -1
  1108. package/dist/esm/components/image.props.js +0 -2
  1109. package/dist/esm/components/image.props.js.map +0 -7
  1110. package/dist/esm/components/quote.d.ts +0 -11
  1111. package/dist/esm/components/quote.d.ts.map +0 -1
  1112. package/dist/esm/components/quote.js +0 -2
  1113. package/dist/esm/components/quote.js.map +0 -7
  1114. package/dist/esm/components/quote.props.d.ts +0 -17
  1115. package/dist/esm/components/quote.props.d.ts.map +0 -1
  1116. package/dist/esm/components/quote.props.js +0 -2
  1117. package/dist/esm/components/quote.props.js.map +0 -7
  1118. package/dist/esm/components/radio-cards.d.ts +0 -16
  1119. package/dist/esm/components/radio-cards.d.ts.map +0 -1
  1120. package/dist/esm/components/radio-cards.js +0 -2
  1121. package/dist/esm/components/radio-cards.js.map +0 -7
  1122. package/dist/esm/components/radio-cards.props.d.ts +0 -43
  1123. package/dist/esm/components/radio-cards.props.d.ts.map +0 -1
  1124. package/dist/esm/components/radio-cards.props.js +0 -2
  1125. package/dist/esm/components/radio-cards.props.js.map +0 -7
  1126. package/dist/esm/components/schemas/icon-button.schema.d.ts +0 -201
  1127. package/dist/esm/components/schemas/icon-button.schema.d.ts.map +0 -1
  1128. package/dist/esm/components/schemas/icon-button.schema.js +0 -2
  1129. package/dist/esm/components/schemas/icon-button.schema.js.map +0 -7
  1130. package/dist/esm/components/schemas/toggle-button.schema.d.ts.map +0 -1
  1131. package/dist/esm/components/schemas/toggle-button.schema.js +0 -2
  1132. package/dist/esm/components/schemas/toggle-button.schema.js.map +0 -7
  1133. package/dist/esm/components/schemas/toggle-icon-button.schema.d.ts +0 -211
  1134. package/dist/esm/components/schemas/toggle-icon-button.schema.d.ts.map +0 -1
  1135. package/dist/esm/components/schemas/toggle-icon-button.schema.js +0 -2
  1136. package/dist/esm/components/schemas/toggle-icon-button.schema.js.map +0 -7
  1137. package/dist/esm/components/section.d.ts +0 -11
  1138. package/dist/esm/components/section.d.ts.map +0 -1
  1139. package/dist/esm/components/section.js +0 -2
  1140. package/dist/esm/components/section.js.map +0 -7
  1141. package/dist/esm/components/section.props.d.ts +0 -52
  1142. package/dist/esm/components/section.props.d.ts.map +0 -1
  1143. package/dist/esm/components/section.props.js +0 -2
  1144. package/dist/esm/components/section.props.js.map +0 -7
  1145. package/dist/esm/components/skeleton.d.ts +0 -12
  1146. package/dist/esm/components/skeleton.d.ts.map +0 -1
  1147. package/dist/esm/components/skeleton.js +0 -2
  1148. package/dist/esm/components/skeleton.js.map +0 -7
  1149. package/dist/esm/components/skeleton.props.d.ts +0 -44
  1150. package/dist/esm/components/skeleton.props.d.ts.map +0 -1
  1151. package/dist/esm/components/skeleton.props.js +0 -2
  1152. package/dist/esm/components/skeleton.props.js.map +0 -7
  1153. package/dist/esm/components/strong.d.ts +0 -11
  1154. package/dist/esm/components/strong.d.ts.map +0 -1
  1155. package/dist/esm/components/strong.js +0 -2
  1156. package/dist/esm/components/strong.js.map +0 -7
  1157. package/dist/esm/components/strong.props.d.ts +0 -17
  1158. package/dist/esm/components/strong.props.d.ts.map +0 -1
  1159. package/dist/esm/components/strong.props.js +0 -2
  1160. package/dist/esm/components/strong.props.js.map +0 -7
  1161. package/dist/esm/components/tab-nav.d.ts +0 -19
  1162. package/dist/esm/components/tab-nav.d.ts.map +0 -1
  1163. package/dist/esm/components/tab-nav.js +0 -2
  1164. package/dist/esm/components/tab-nav.js.map +0 -7
  1165. package/dist/esm/components/tab-nav.props.d.ts +0 -12
  1166. package/dist/esm/components/tab-nav.props.d.ts.map +0 -1
  1167. package/dist/esm/components/tab-nav.props.js +0 -2
  1168. package/dist/esm/components/tab-nav.props.js.map +0 -7
  1169. package/dist/esm/components/theme-panel.d.ts +0 -25
  1170. package/dist/esm/components/theme-panel.d.ts.map +0 -1
  1171. package/dist/esm/components/theme-panel.js +0 -2
  1172. package/dist/esm/components/theme-panel.js.map +0 -7
  1173. package/dist/esm/components/toggle-button.d.ts +0 -63
  1174. package/dist/esm/components/toggle-button.d.ts.map +0 -1
  1175. package/dist/esm/components/toggle-button.js +0 -2
  1176. package/dist/esm/components/toggle-button.js.map +0 -7
  1177. package/dist/esm/components/toggle-icon-button.d.ts +0 -109
  1178. package/dist/esm/components/toggle-icon-button.d.ts.map +0 -1
  1179. package/dist/esm/components/toggle-icon-button.js +0 -2
  1180. package/dist/esm/components/toggle-icon-button.js.map +0 -7
  1181. package/schemas/icon-button.json +0 -296
  1182. package/schemas/toggle-button.d.ts +0 -2
  1183. package/schemas/toggle-icon-button.d.ts +0 -2
  1184. package/schemas/toggle-icon-button.json +0 -304
  1185. package/src/components/aspect-ratio.tsx +0 -3
  1186. package/src/components/checkbox-cards.css +0 -124
  1187. package/src/components/checkbox-cards.props.tsx +0 -27
  1188. package/src/components/checkbox-cards.tsx +0 -141
  1189. package/src/components/container.css +0 -43
  1190. package/src/components/container.props.tsx +0 -84
  1191. package/src/components/container.tsx +0 -59
  1192. package/src/components/data-list.css +0 -254
  1193. package/src/components/data-list.props.tsx +0 -57
  1194. package/src/components/data-list.tsx +0 -102
  1195. package/src/components/em.css +0 -16
  1196. package/src/components/em.props.tsx +0 -11
  1197. package/src/components/em.tsx +0 -22
  1198. package/src/components/hover-card.css +0 -39
  1199. package/src/components/hover-card.props.tsx +0 -37
  1200. package/src/components/hover-card.tsx +0 -74
  1201. package/src/components/icon-button.css +0 -9
  1202. package/src/components/icon-button.props.tsx +0 -1
  1203. package/src/components/icon-button.tsx +0 -110
  1204. package/src/components/image.css +0 -221
  1205. package/src/components/image.props.ts +0 -163
  1206. package/src/components/image.tsx +0 -308
  1207. package/src/components/quote.css +0 -16
  1208. package/src/components/quote.props.tsx +0 -11
  1209. package/src/components/quote.tsx +0 -22
  1210. package/src/components/radio-cards.css +0 -110
  1211. package/src/components/radio-cards.props.tsx +0 -27
  1212. package/src/components/radio-cards.tsx +0 -98
  1213. package/src/components/schemas/icon-button.schema.ts +0 -142
  1214. package/src/components/schemas/toggle-icon-button.schema.ts +0 -195
  1215. package/src/components/section.css +0 -25
  1216. package/src/components/section.props.tsx +0 -63
  1217. package/src/components/section.tsx +0 -36
  1218. package/src/components/skeleton.css +0 -55
  1219. package/src/components/skeleton.props.tsx +0 -14
  1220. package/src/components/skeleton.tsx +0 -48
  1221. package/src/components/strong.css +0 -13
  1222. package/src/components/strong.props.tsx +0 -11
  1223. package/src/components/strong.tsx +0 -24
  1224. package/src/components/tab-nav.css +0 -5
  1225. package/src/components/tab-nav.props.tsx +0 -13
  1226. package/src/components/tab-nav.tsx +0 -82
  1227. package/src/components/theme-panel.css +0 -67
  1228. package/src/components/theme-panel.tsx +0 -549
  1229. package/src/components/toggle-button.tsx +0 -117
  1230. package/src/components/toggle-icon-button.tsx +0 -115
  1231. /package/dist/esm/{chunk-STMTXK7U.js.map → chunk-24CVW6P7.js.map} +0 -0
  1232. /package/dist/esm/{chunk-OXYHRNJA.js.map → chunk-4VBH3W2S.js.map} +0 -0
  1233. /package/dist/esm/{chunk-ABS275QZ.js.map → chunk-72FU5FEC.js.map} +0 -0
  1234. /package/dist/esm/{chunk-MLXHD7YF.js.map → chunk-7FPLWHMT.js.map} +0 -0
  1235. /package/dist/esm/{chunk-YS5BZRRK.js.map → chunk-7OQXCYCW.js.map} +0 -0
  1236. /package/dist/esm/{chunk-N5OSP3PU.js.map → chunk-AYZRLA7F.js.map} +0 -0
  1237. /package/dist/esm/{chunk-6RZVKCNG.js.map → chunk-BHGES72S.js.map} +0 -0
  1238. /package/dist/esm/{chunk-KU3LLWFU.js.map → chunk-CTZ467AB.js.map} +0 -0
  1239. /package/dist/esm/{chunk-Q7S5LQBQ.js.map → chunk-CYO6CRMQ.js.map} +0 -0
  1240. /package/dist/esm/{chunk-F2UUKVBM.js.map → chunk-D3U4MWDZ.js.map} +0 -0
  1241. /package/dist/esm/{chunk-VLLJ7A6P.js.map → chunk-DCNHG6VN.js.map} +0 -0
  1242. /package/dist/esm/{chunk-UZQO4APP.js.map → chunk-EDEYYJ3Q.js.map} +0 -0
  1243. /package/dist/esm/{chunk-6FLLFCBU.js.map → chunk-ELAW7ZUG.js.map} +0 -0
  1244. /package/dist/esm/{chunk-B6RH4CTY.js.map → chunk-G46OLCM2.js.map} +0 -0
  1245. /package/dist/esm/{chunk-5LGWS5QS.js.map → chunk-GOV5I7I2.js.map} +0 -0
  1246. /package/dist/esm/{chunk-VSSJTPBV.js.map → chunk-HELY5CSU.js.map} +0 -0
  1247. /package/dist/esm/{chunk-UFJJTUOU.js.map → chunk-HGG3ULNK.js.map} +0 -0
  1248. /package/dist/esm/{chunk-DMWLY6ZP.js.map → chunk-HZNOHY6O.js.map} +0 -0
  1249. /package/dist/esm/{chunk-PUVZFRTQ.js.map → chunk-IZPDJN6O.js.map} +0 -0
  1250. /package/dist/esm/{chunk-KPACVWV4.js.map → chunk-K4BDLRCC.js.map} +0 -0
  1251. /package/dist/esm/{chunk-GYB7PAGB.js.map → chunk-K6WT5ZEA.js.map} +0 -0
  1252. /package/dist/esm/{chunk-CLEH57SW.js.map → chunk-KIYCILXL.js.map} +0 -0
  1253. /package/dist/esm/{chunk-ZCAI2PRH.js.map → chunk-KRDRQU4G.js.map} +0 -0
  1254. /package/dist/esm/{chunk-T5DSQKKF.js.map → chunk-KRZL245C.js.map} +0 -0
  1255. /package/dist/esm/{chunk-L2IIIELE.js.map → chunk-LNFN35ZE.js.map} +0 -0
  1256. /package/dist/esm/{chunk-PUQXBW2K.js.map → chunk-LPVDR7V3.js.map} +0 -0
  1257. /package/dist/esm/{chunk-JUY7CBSL.js.map → chunk-PBFSBHBS.js.map} +0 -0
  1258. /package/dist/esm/{chunk-E3754NJZ.js.map → chunk-QZ6OCMH4.js.map} +0 -0
  1259. /package/dist/esm/{chunk-54KMG7NX.js.map → chunk-TKSG7KBZ.js.map} +0 -0
  1260. /package/dist/esm/{chunk-WDDO73O5.js.map → chunk-UEHCCJYY.js.map} +0 -0
  1261. /package/dist/esm/{chunk-YKPMLM7M.js.map → components/chip.js.map} +0 -0
  1262. /package/dist/esm/components/{aspect-ratio.js.map → chip.props.js.map} +0 -0
  1263. /package/dist/esm/components/{badge.js.map → schemas/toggle.schema.js.map} +0 -0
  1264. /package/dist/esm/components/{badge.props.js.map → toggle.js.map} +0 -0
  1265. /package/schemas/{icon-button.d.ts → toggle.d.ts} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/virtual-menu.tsx", "../../../src/components/_internal/menu-context.tsx"],
4
- "sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport { useMenuContext, getMenuItemHeight } from './_internal/menu-context.js';\n\n/**\n * VirtualMenu - A virtualized menu component for rendering large lists efficiently.\n *\n * Uses TanStack Virtual to render only visible items.\n * Works inside any container (DropdownMenu.Content, Popover.Content, etc.)\n *\n * @example\n * // Simple usage with itemLabel\n * <VirtualMenu\n * items={items}\n * itemLabel={(item) => item.name}\n * onSelect={handleSelect}\n * />\n *\n * @example\n * // Custom rendering with renderItem\n * const UserItem = React.memo(({ item, ...props }) => (\n * <VirtualMenu.Item {...props}>\n * <Avatar src={item.avatar} />\n * {item.name}\n * </VirtualMenu.Item>\n * ));\n *\n * <VirtualMenu items={users} renderItem={UserItem} onSelect={handleSelect} />\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Props passed to custom renderItem components */\ninterface VirtualMenuRenderItemProps<T> {\n /** The item data */\n item: T;\n /** Index in the items array */\n index: number;\n /** Whether this item is currently highlighted */\n isHighlighted: boolean;\n /** Unique ID for accessibility */\n id: string;\n /** Positioning styles - must be applied */\n style: React.CSSProperties;\n /** Tab index for focus management */\n tabIndex: number;\n /** Data attribute for CSS styling */\n 'data-highlighted': true | undefined;\n /** Data attribute for event delegation */\n 'data-index': number;\n /** Mouse enter handler */\n onMouseEnter: (e: React.MouseEvent<HTMLElement>) => void;\n /** Mouse leave handler */\n onMouseLeave: () => void;\n /** Click handler */\n onClick: (e: React.MouseEvent<HTMLElement>) => void;\n /** Keyboard handler for Enter/Space activation */\n onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => void;\n}\n\ninterface VirtualMenuProps<T> {\n /** Array of items to render */\n items: T[];\n /**\n * Simple label accessor for basic text items.\n * Can be a property key or a function.\n * @example\n * itemLabel=\"name\"\n * itemLabel={(item) => item.name}\n */\n itemLabel?: keyof T | ((item: T) => React.ReactNode);\n /**\n * Custom component for rendering items.\n * Must be memoized (React.memo) for optimal performance.\n * @example\n * const MyItem = React.memo(({ item, ...props }) => (\n * <VirtualMenu.Item {...props}>{item.name}</VirtualMenu.Item>\n * ));\n * <VirtualMenu items={items} renderItem={MyItem} />\n */\n renderItem?: React.ComponentType<VirtualMenuRenderItemProps<T>>;\n /**\n * Menu size - controls item height.\n * Automatically inherited from parent DropdownMenu.Content/ContextMenu.Content.\n * Only set manually when using VirtualMenu outside of a menu context.\n * @default '2' (or inherited from context)\n */\n size?: '1' | '2';\n /**\n * Estimated height of each item in pixels.\n * Can be a number (same for all) or a function (per-item).\n * Usually not needed - height is automatically derived from size prop/context.\n * Use this only for custom item heights (e.g., variable height items).\n */\n estimatedItemSize?: number | ((index: number) => number);\n /** Number of items to render outside visible area */\n overscan?: number;\n /** Callback when an item is selected */\n onSelect?: (item: T, index: number) => void;\n /** Additional class name */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n /** Accessible label for the menu */\n 'aria-label'?: string;\n}\n\n// ============================================================================\n// Internal Memoized Item Component\n// ============================================================================\n\ninterface SimpleItemProps {\n label: React.ReactNode;\n isHighlighted: boolean;\n id: string;\n style: React.CSSProperties;\n tabIndex: number;\n 'data-highlighted': true | undefined;\n 'data-index': number;\n onMouseEnter: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave: () => void;\n onClick: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => void;\n}\n\nconst SimpleItem = React.memo(\n function SimpleItem({\n label,\n isHighlighted: _isHighlighted,\n id,\n style,\n tabIndex,\n 'data-highlighted': dataHighlighted,\n 'data-index': dataIndex,\n onMouseEnter,\n onMouseLeave,\n onClick,\n onKeyDown,\n }: SimpleItemProps) {\n return (\n <div\n id={id}\n role=\"menuitem\"\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-VirtualMenuItem')}\n style={style}\n tabIndex={tabIndex}\n data-highlighted={dataHighlighted}\n data-index={dataIndex}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onClick={onClick}\n onKeyDown={onKeyDown}\n >\n {label}\n </div>\n );\n },\n (prev, next) => {\n // Custom comparison - only re-render if these change\n if (prev.label !== next.label) return false;\n if (prev['data-highlighted'] !== next['data-highlighted']) return false;\n if (prev.style.height !== next.style.height) return false;\n if (prev.style.transform !== next.style.transform) return false;\n if (prev.tabIndex !== next.tabIndex) return false;\n if (prev.id !== next.id) return false;\n // Event handlers are stable, skip comparison\n return true;\n },\n);\n\n// ============================================================================\n// VirtualMenu Component\n// ============================================================================\n\nfunction VirtualMenuRoot<T>({\n items,\n itemLabel,\n renderItem: RenderItem,\n size: sizeProp,\n estimatedItemSize: estimatedItemSizeProp,\n overscan = 5,\n onSelect,\n className,\n style,\n 'aria-label': ariaLabel,\n}: VirtualMenuProps<T>) {\n const menuId = React.useId();\n const parentRef = React.useRef<HTMLDivElement>(null);\n const [highlightedIndex, setHighlightedIndex] = React.useState<number>(-1);\n const { isInsideMenu, size: contextSize, itemHeight: contextItemHeight } = useMenuContext();\n\n // Resolve item height: explicit prop > own size > parent menu > default size '2'.\n // Heights follow the theme scaling, like the --base-menu-item-height token.\n const estimatedItemSize =\n estimatedItemSizeProp ??\n (sizeProp\n ? getMenuItemHeight(sizeProp)\n : (contextItemHeight ?? getMenuItemHeight(contextSize ?? '2')));\n\n // Validate props\n if (!itemLabel && !RenderItem) {\n throw new Error('VirtualMenu requires either itemLabel or renderItem prop');\n }\n\n // Normalize itemLabel to a function\n const getLabel = React.useMemo(() => {\n if (!itemLabel) return null;\n if (typeof itemLabel === 'function') return itemLabel;\n return (item: T) => item[itemLabel] as React.ReactNode;\n }, [itemLabel]);\n\n // Derive safe highlighted index\n const safeHighlightedIndex = React.useMemo(() => {\n if (items.length === 0) return -1;\n if (highlightedIndex < 0) return -1;\n return Math.min(highlightedIndex, items.length - 1);\n }, [highlightedIndex, items.length]);\n\n // Normalize estimatedItemSize to a function\n const getItemSize = React.useMemo(\n () =>\n typeof estimatedItemSize === 'function'\n ? estimatedItemSize\n : () => estimatedItemSize,\n [estimatedItemSize],\n );\n\n const virtualizer = useVirtualizer({\n count: items.length,\n getScrollElement: () => parentRef.current,\n estimateSize: getItemSize,\n overscan,\n });\n\n const virtualItems = virtualizer.getVirtualItems();\n\n // Refs for stable handler references\n const itemsRef = React.useRef(items);\n const onSelectRef = React.useRef(onSelect);\n itemsRef.current = items;\n onSelectRef.current = onSelect;\n\n const scrollToIndexRef = React.useRef(virtualizer.scrollToIndex);\n scrollToIndexRef.current = virtualizer.scrollToIndex;\n\n const highlightedIndexRef = React.useRef(safeHighlightedIndex);\n highlightedIndexRef.current = safeHighlightedIndex;\n\n // Stable event handlers\n const handleItemMouseEnter = React.useCallback((e: React.MouseEvent<HTMLElement>) => {\n const index = e.currentTarget.dataset.index;\n if (index != null) {\n setHighlightedIndex(Number(index));\n }\n }, []);\n\n const handleItemClick = React.useCallback((e: React.MouseEvent<HTMLElement>) => {\n const index = e.currentTarget.dataset.index;\n if (index != null) {\n const idx = Number(index);\n const currentItems = itemsRef.current;\n if (idx >= 0 && idx < currentItems.length) {\n onSelectRef.current?.(currentItems[idx], idx);\n }\n }\n }, []);\n\n const noop = React.useCallback(() => {}, []);\n\n // Item-level keyboard handler for Enter/Space activation (satisfies a11y lint rule)\n const handleItemKeyDown = React.useCallback((e: React.KeyboardEvent<HTMLElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n const index = e.currentTarget.dataset.index;\n if (index != null) {\n const idx = Number(index);\n const currentItems = itemsRef.current;\n if (idx >= 0 && idx < currentItems.length) {\n onSelectRef.current?.(currentItems[idx], idx);\n }\n }\n }\n }, []);\n\n // Keyboard navigation\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n const currentItems = itemsRef.current;\n const currentHighlightedIndex = highlightedIndexRef.current;\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n const nextIndex =\n currentHighlightedIndex < currentItems.length - 1 ? currentHighlightedIndex + 1 : 0;\n setHighlightedIndex(nextIndex);\n scrollToIndexRef.current(nextIndex, { align: 'auto' });\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n const prevIndex =\n currentHighlightedIndex > 0 ? currentHighlightedIndex - 1 : currentItems.length - 1;\n setHighlightedIndex(prevIndex);\n scrollToIndexRef.current(prevIndex, { align: 'auto' });\n break;\n }\n case 'Home': {\n e.preventDefault();\n setHighlightedIndex(0);\n scrollToIndexRef.current(0, { align: 'start' });\n break;\n }\n case 'End': {\n e.preventDefault();\n const lastIndex = currentItems.length - 1;\n setHighlightedIndex(lastIndex);\n scrollToIndexRef.current(lastIndex, { align: 'end' });\n break;\n }\n case 'Enter':\n case ' ': {\n e.preventDefault();\n if (currentHighlightedIndex >= 0 && currentHighlightedIndex < currentItems.length) {\n onSelectRef.current?.(currentItems[currentHighlightedIndex], currentHighlightedIndex);\n }\n break;\n }\n case 'Tab': {\n e.preventDefault();\n break;\n }\n case 'Escape': {\n (e.currentTarget as HTMLElement).blur();\n break;\n }\n }\n }, []);\n\n // Item ID generator\n const getItemId = React.useCallback(\n (index: number) => `${menuId}-item-${index}`,\n [menuId],\n );\n\n // Memoize styles\n const rootStyle = React.useMemo(\n () => ({\n overflow: 'auto' as const,\n position: 'relative' as const,\n ...style,\n }),\n [style],\n );\n\n const totalSize = virtualizer.getTotalSize();\n const viewportStyle = React.useMemo(\n () => ({\n height: `${totalSize}px`,\n width: '100%' as const,\n position: 'relative' as const,\n }),\n [totalSize],\n );\n\n return (\n <div\n ref={parentRef}\n role={isInsideMenu ? 'group' : 'menu'}\n aria-label={ariaLabel}\n aria-activedescendant={safeHighlightedIndex >= 0 ? getItemId(safeHighlightedIndex) : undefined}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className={classNames('rt-VirtualMenuRoot', className)}\n style={rootStyle}\n >\n <div className=\"rt-VirtualMenuViewport\" style={viewportStyle}>\n {virtualItems.map((virtualRow) => {\n const item = items[virtualRow.index];\n const index = virtualRow.index;\n const isHighlighted = safeHighlightedIndex === index;\n\n const itemStyle: React.CSSProperties = {\n height: virtualRow.size,\n transform: `translateY(${virtualRow.start}px)`,\n };\n\n const commonProps = {\n id: getItemId(index),\n isHighlighted,\n style: itemStyle,\n tabIndex: isHighlighted ? 0 : -1,\n 'data-highlighted': isHighlighted ? true as const : undefined,\n 'data-index': index,\n onMouseEnter: handleItemMouseEnter,\n onMouseLeave: noop,\n onClick: handleItemClick,\n onKeyDown: handleItemKeyDown,\n };\n\n // Use renderItem if provided, otherwise use SimpleItem with itemLabel\n if (RenderItem) {\n return (\n <RenderItem\n key={virtualRow.key}\n item={item}\n index={index}\n {...commonProps}\n />\n );\n }\n\n return (\n <SimpleItem\n key={virtualRow.key}\n label={getLabel!(item)}\n {...commonProps}\n />\n );\n })}\n </div>\n </div>\n );\n}\n\nVirtualMenuRoot.displayName = 'VirtualMenu';\n\n// ============================================================================\n// VirtualMenu.Item Component (for custom renderItem usage)\n// ============================================================================\n\ninterface VirtualMenuItemProps extends React.ComponentPropsWithoutRef<'div'> {\n children: React.ReactNode;\n /** Data attribute for highlight styling */\n 'data-highlighted'?: true | undefined;\n /** Data attribute for event delegation */\n 'data-index'?: number;\n}\n\nconst VirtualMenuItemInner = React.forwardRef<HTMLDivElement, VirtualMenuItemProps>(\n ({ className, children, ...props }, forwardedRef) => {\n return (\n <div\n ref={forwardedRef}\n role=\"menuitem\"\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-VirtualMenuItem', className)}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nVirtualMenuItemInner.displayName = 'VirtualMenu.Item';\n\n// Memoized with custom comparison\nconst VirtualMenuItem = React.memo(VirtualMenuItemInner, (prevProps, nextProps) => {\n const prevStyle = prevProps.style as React.CSSProperties | undefined;\n const nextStyle = nextProps.style as React.CSSProperties | undefined;\n if (prevStyle?.height !== nextStyle?.height) return false;\n if (prevStyle?.transform !== nextStyle?.transform) return false;\n if (prevProps['data-highlighted'] !== nextProps['data-highlighted']) return false;\n if (prevProps.tabIndex !== nextProps.tabIndex) return false;\n if (prevProps.id !== nextProps.id) return false;\n if (prevProps.className !== nextProps.className) return false;\n if (prevProps.children !== nextProps.children) return false;\n return true;\n});\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nconst VirtualMenu = Object.assign(VirtualMenuRoot, {\n Item: VirtualMenuItem,\n});\n\nexport { VirtualMenu };\nexport type { VirtualMenuProps, VirtualMenuItemProps, VirtualMenuRenderItemProps };\n", "'use client';\n\nimport * as React from 'react';\n\nimport { useResolvedResponsiveValue } from './base-menu.utils.js';\n\nimport type { Responsive } from '../../props/prop-def.js';\n\n/**\n * Context to detect if a component is rendered inside a menu (DropdownMenu, ContextMenu, etc.)\n * Used by VirtualMenu to adjust its behavior:\n * - Skip role=\"menu\" when inside a parent menu (parent owns the role)\n * - Delegate certain keyboard handling to parent\n * - Use the correct item height based on menu size\n */\n\nexport type MenuSize = '1' | '2';\n\ninterface MenuContextValue {\n /** Whether we're inside a menu that owns the menu role */\n isInsideMenu: boolean;\n /** Menu size for the current breakpoint */\n size?: MenuSize;\n /** Item height in px for the current size and theme scaling */\n itemHeight?: number;\n}\n\nconst MenuContext = React.createContext<MenuContextValue>({ isInsideMenu: false });\n\ninterface MenuProviderProps {\n children: React.ReactNode;\n /** Menu size passed from parent (DropdownMenu.Content, ContextMenu.Content, etc.) */\n size?: Responsive<MenuSize>;\n}\n\n/** Menu item height in pixels per size: the control height ladder (--control-height-N). */\nexport const menuSizeToItemHeight: Record<MenuSize, number> = {\n '1': 28,\n '2': 32,\n};\n\nexport function getMenuItemHeight(size: MenuSize): number {\n return menuSizeToItemHeight[size];\n}\n\nexport function MenuProvider({ children, size }: MenuProviderProps) {\n const resolvedSize = useResolvedResponsiveValue<MenuSize | undefined>(size, undefined);\n const itemHeight = resolvedSize ? getMenuItemHeight(resolvedSize) : undefined;\n const value = React.useMemo(\n () => ({ isInsideMenu: true, size: resolvedSize, itemHeight }),\n [resolvedSize, itemHeight],\n );\n return <MenuContext.Provider value={value}>{children}</MenuContext.Provider>;\n}\n\nexport function useMenuContext() {\n return React.useContext(MenuContext);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport { useMenuContext, getMenuItemHeight } from './_internal/menu-context.js';\n\nimport type { MenuSize } from './_internal/menu-context.js';\n\n/**\n * VirtualMenu - A virtualized menu component for rendering large lists efficiently.\n *\n * Uses TanStack Virtual to render only visible items.\n * Works inside any container (DropdownMenu.Content, Popover.Content, etc.)\n *\n * @example\n * // Simple usage with itemLabel\n * <VirtualMenu\n * items={items}\n * itemLabel={(item) => item.name}\n * onSelect={handleSelect}\n * />\n *\n * @example\n * // Custom rendering with renderItem\n * const UserItem = React.memo(({ item, ...props }) => (\n * <VirtualMenu.Item {...props}>\n * <Avatar src={item.avatar} />\n * {item.name}\n * </VirtualMenu.Item>\n * ));\n *\n * <VirtualMenu items={users} renderItem={UserItem} onSelect={handleSelect} />\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Props passed to custom renderItem components */\ninterface VirtualMenuRenderItemProps<T> {\n /** The item data */\n item: T;\n /** Index in the items array */\n index: number;\n /** Whether this item is currently highlighted */\n isHighlighted: boolean;\n /** Unique ID for accessibility */\n id: string;\n /** Positioning styles - must be applied */\n style: React.CSSProperties;\n /** Tab index for focus management */\n tabIndex: number;\n /** Data attribute for CSS styling */\n 'data-highlighted': true | undefined;\n /** Data attribute for event delegation */\n 'data-index': number;\n /** Mouse enter handler */\n onMouseEnter: (e: React.MouseEvent<HTMLElement>) => void;\n /** Mouse leave handler */\n onMouseLeave: () => void;\n /** Click handler */\n onClick: (e: React.MouseEvent<HTMLElement>) => void;\n /** Keyboard handler for Enter/Space activation */\n onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => void;\n}\n\ninterface VirtualMenuProps<T> {\n /** Array of items to render */\n items: T[];\n /**\n * Simple label accessor for basic text items.\n * Can be a property key or a function.\n * @example\n * itemLabel=\"name\"\n * itemLabel={(item) => item.name}\n */\n itemLabel?: keyof T | ((item: T) => React.ReactNode);\n /**\n * Custom component for rendering items.\n * Must be memoized (React.memo) for optimal performance.\n * @example\n * const MyItem = React.memo(({ item, ...props }) => (\n * <VirtualMenu.Item {...props}>{item.name}</VirtualMenu.Item>\n * ));\n * <VirtualMenu items={items} renderItem={MyItem} />\n */\n renderItem?: React.ComponentType<VirtualMenuRenderItemProps<T>>;\n /**\n * Menu size - controls item height.\n * Automatically inherited from parent DropdownMenu.Content/ContextMenu.Content.\n * Only set manually when using VirtualMenu outside of a menu context.\n * @default '2' (or inherited from context)\n */\n size?: MenuSize;\n /**\n * Estimated height of each item in pixels.\n * Can be a number (same for all) or a function (per-item).\n * Usually not needed - height is automatically derived from size prop/context.\n * Use this only for custom item heights (e.g., variable height items).\n */\n estimatedItemSize?: number | ((index: number) => number);\n /** Number of items to render outside visible area */\n overscan?: number;\n /** Callback when an item is selected */\n onSelect?: (item: T, index: number) => void;\n /** Additional class name */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n /** Accessible label for the menu */\n 'aria-label'?: string;\n}\n\n// ============================================================================\n// Internal Memoized Item Component\n// ============================================================================\n\ninterface SimpleItemProps {\n label: React.ReactNode;\n isHighlighted: boolean;\n id: string;\n style: React.CSSProperties;\n tabIndex: number;\n 'data-highlighted': true | undefined;\n 'data-index': number;\n onMouseEnter: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave: () => void;\n onClick: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => void;\n}\n\nconst SimpleItem = React.memo(\n function SimpleItem({\n label,\n isHighlighted: _isHighlighted,\n id,\n style,\n tabIndex,\n 'data-highlighted': dataHighlighted,\n 'data-index': dataIndex,\n onMouseEnter,\n onMouseLeave,\n onClick,\n onKeyDown,\n }: SimpleItemProps) {\n return (\n <div\n id={id}\n role=\"menuitem\"\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-VirtualMenuItem')}\n style={style}\n tabIndex={tabIndex}\n data-highlighted={dataHighlighted}\n data-index={dataIndex}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onClick={onClick}\n onKeyDown={onKeyDown}\n >\n {label}\n </div>\n );\n },\n (prev, next) => {\n // Custom comparison - only re-render if these change\n if (prev.label !== next.label) return false;\n if (prev['data-highlighted'] !== next['data-highlighted']) return false;\n if (prev.style.height !== next.style.height) return false;\n if (prev.style.transform !== next.style.transform) return false;\n if (prev.tabIndex !== next.tabIndex) return false;\n if (prev.id !== next.id) return false;\n // Event handlers are stable, skip comparison\n return true;\n },\n);\n\n// ============================================================================\n// VirtualMenu Component\n// ============================================================================\n\nfunction VirtualMenuRoot<T>({\n items,\n itemLabel,\n renderItem: RenderItem,\n size: sizeProp,\n estimatedItemSize: estimatedItemSizeProp,\n overscan = 5,\n onSelect,\n className,\n style,\n 'aria-label': ariaLabel,\n}: VirtualMenuProps<T>) {\n const menuId = React.useId();\n const parentRef = React.useRef<HTMLDivElement>(null);\n const [highlightedIndex, setHighlightedIndex] = React.useState<number>(-1);\n const { isInsideMenu, size: contextSize, itemHeight: contextItemHeight } = useMenuContext();\n\n // Resolve item height: explicit prop > own size > parent menu > default size '2'.\n // Heights follow the theme scaling, like the --base-menu-item-height token.\n const estimatedItemSize =\n estimatedItemSizeProp ??\n (sizeProp\n ? getMenuItemHeight(sizeProp)\n : (contextItemHeight ?? getMenuItemHeight(contextSize ?? '2')));\n\n // Validate props\n if (!itemLabel && !RenderItem) {\n throw new Error('VirtualMenu requires either itemLabel or renderItem prop');\n }\n\n // Normalize itemLabel to a function\n const getLabel = React.useMemo(() => {\n if (!itemLabel) return null;\n if (typeof itemLabel === 'function') return itemLabel;\n return (item: T) => item[itemLabel] as React.ReactNode;\n }, [itemLabel]);\n\n // Derive safe highlighted index\n const safeHighlightedIndex = React.useMemo(() => {\n if (items.length === 0) return -1;\n if (highlightedIndex < 0) return -1;\n return Math.min(highlightedIndex, items.length - 1);\n }, [highlightedIndex, items.length]);\n\n // Normalize estimatedItemSize to a function\n const getItemSize = React.useMemo(\n () =>\n typeof estimatedItemSize === 'function'\n ? estimatedItemSize\n : () => estimatedItemSize,\n [estimatedItemSize],\n );\n\n const virtualizer = useVirtualizer({\n count: items.length,\n getScrollElement: () => parentRef.current,\n estimateSize: getItemSize,\n overscan,\n });\n\n const virtualItems = virtualizer.getVirtualItems();\n\n // Refs for stable handler references\n const itemsRef = React.useRef(items);\n const onSelectRef = React.useRef(onSelect);\n itemsRef.current = items;\n onSelectRef.current = onSelect;\n\n const scrollToIndexRef = React.useRef(virtualizer.scrollToIndex);\n scrollToIndexRef.current = virtualizer.scrollToIndex;\n\n const highlightedIndexRef = React.useRef(safeHighlightedIndex);\n highlightedIndexRef.current = safeHighlightedIndex;\n\n // Stable event handlers\n const handleItemMouseEnter = React.useCallback((e: React.MouseEvent<HTMLElement>) => {\n const index = e.currentTarget.dataset.index;\n if (index != null) {\n setHighlightedIndex(Number(index));\n }\n }, []);\n\n const handleItemClick = React.useCallback((e: React.MouseEvent<HTMLElement>) => {\n const index = e.currentTarget.dataset.index;\n if (index != null) {\n const idx = Number(index);\n const currentItems = itemsRef.current;\n if (idx >= 0 && idx < currentItems.length) {\n onSelectRef.current?.(currentItems[idx], idx);\n }\n }\n }, []);\n\n const noop = React.useCallback(() => {}, []);\n\n // Item-level keyboard handler for Enter/Space activation (satisfies a11y lint rule)\n const handleItemKeyDown = React.useCallback((e: React.KeyboardEvent<HTMLElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n const index = e.currentTarget.dataset.index;\n if (index != null) {\n const idx = Number(index);\n const currentItems = itemsRef.current;\n if (idx >= 0 && idx < currentItems.length) {\n onSelectRef.current?.(currentItems[idx], idx);\n }\n }\n }\n }, []);\n\n // Keyboard navigation\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n const currentItems = itemsRef.current;\n const currentHighlightedIndex = highlightedIndexRef.current;\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n const nextIndex =\n currentHighlightedIndex < currentItems.length - 1 ? currentHighlightedIndex + 1 : 0;\n setHighlightedIndex(nextIndex);\n scrollToIndexRef.current(nextIndex, { align: 'auto' });\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n const prevIndex =\n currentHighlightedIndex > 0 ? currentHighlightedIndex - 1 : currentItems.length - 1;\n setHighlightedIndex(prevIndex);\n scrollToIndexRef.current(prevIndex, { align: 'auto' });\n break;\n }\n case 'Home': {\n e.preventDefault();\n setHighlightedIndex(0);\n scrollToIndexRef.current(0, { align: 'start' });\n break;\n }\n case 'End': {\n e.preventDefault();\n const lastIndex = currentItems.length - 1;\n setHighlightedIndex(lastIndex);\n scrollToIndexRef.current(lastIndex, { align: 'end' });\n break;\n }\n case 'Enter':\n case ' ': {\n e.preventDefault();\n if (currentHighlightedIndex >= 0 && currentHighlightedIndex < currentItems.length) {\n onSelectRef.current?.(currentItems[currentHighlightedIndex], currentHighlightedIndex);\n }\n break;\n }\n case 'Tab': {\n e.preventDefault();\n break;\n }\n case 'Escape': {\n (e.currentTarget as HTMLElement).blur();\n break;\n }\n }\n }, []);\n\n // Item ID generator\n const getItemId = React.useCallback(\n (index: number) => `${menuId}-item-${index}`,\n [menuId],\n );\n\n // Memoize styles\n const rootStyle = React.useMemo(\n () => ({\n overflow: 'auto' as const,\n position: 'relative' as const,\n ...style,\n }),\n [style],\n );\n\n const totalSize = virtualizer.getTotalSize();\n const viewportStyle = React.useMemo(\n () => ({\n height: `${totalSize}px`,\n width: '100%' as const,\n position: 'relative' as const,\n }),\n [totalSize],\n );\n\n return (\n <div\n ref={parentRef}\n role={isInsideMenu ? 'group' : 'menu'}\n aria-label={ariaLabel}\n aria-activedescendant={safeHighlightedIndex >= 0 ? getItemId(safeHighlightedIndex) : undefined}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className={classNames('rt-VirtualMenuRoot', className)}\n style={rootStyle}\n >\n <div className=\"rt-VirtualMenuViewport\" style={viewportStyle}>\n {virtualItems.map((virtualRow) => {\n const item = items[virtualRow.index];\n const index = virtualRow.index;\n const isHighlighted = safeHighlightedIndex === index;\n\n const itemStyle: React.CSSProperties = {\n height: virtualRow.size,\n transform: `translateY(${virtualRow.start}px)`,\n };\n\n const commonProps = {\n id: getItemId(index),\n isHighlighted,\n style: itemStyle,\n tabIndex: isHighlighted ? 0 : -1,\n 'data-highlighted': isHighlighted ? true as const : undefined,\n 'data-index': index,\n onMouseEnter: handleItemMouseEnter,\n onMouseLeave: noop,\n onClick: handleItemClick,\n onKeyDown: handleItemKeyDown,\n };\n\n // Use renderItem if provided, otherwise use SimpleItem with itemLabel\n if (RenderItem) {\n return (\n <RenderItem\n key={virtualRow.key}\n item={item}\n index={index}\n {...commonProps}\n />\n );\n }\n\n return (\n <SimpleItem\n key={virtualRow.key}\n label={getLabel!(item)}\n {...commonProps}\n />\n );\n })}\n </div>\n </div>\n );\n}\n\nVirtualMenuRoot.displayName = 'VirtualMenu';\n\n// ============================================================================\n// VirtualMenu.Item Component (for custom renderItem usage)\n// ============================================================================\n\ninterface VirtualMenuItemProps extends React.ComponentPropsWithoutRef<'div'> {\n children: React.ReactNode;\n /** Data attribute for highlight styling */\n 'data-highlighted'?: true | undefined;\n /** Data attribute for event delegation */\n 'data-index'?: number;\n}\n\nconst VirtualMenuItemInner = React.forwardRef<HTMLDivElement, VirtualMenuItemProps>(\n ({ className, children, ...props }, forwardedRef) => {\n return (\n <div\n ref={forwardedRef}\n role=\"menuitem\"\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-VirtualMenuItem', className)}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nVirtualMenuItemInner.displayName = 'VirtualMenu.Item';\n\n// Memoized with custom comparison\nconst VirtualMenuItem = React.memo(VirtualMenuItemInner, (prevProps, nextProps) => {\n const prevStyle = prevProps.style as React.CSSProperties | undefined;\n const nextStyle = nextProps.style as React.CSSProperties | undefined;\n if (prevStyle?.height !== nextStyle?.height) return false;\n if (prevStyle?.transform !== nextStyle?.transform) return false;\n if (prevProps['data-highlighted'] !== nextProps['data-highlighted']) return false;\n if (prevProps.tabIndex !== nextProps.tabIndex) return false;\n if (prevProps.id !== nextProps.id) return false;\n if (prevProps.className !== nextProps.className) return false;\n if (prevProps.children !== nextProps.children) return false;\n return true;\n});\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nconst VirtualMenu = Object.assign(VirtualMenuRoot, {\n Item: VirtualMenuItem,\n});\n\nexport { VirtualMenu };\nexport type { VirtualMenuProps, VirtualMenuItemProps, VirtualMenuRenderItemProps };\n", "'use client';\n\nimport * as React from 'react';\n\nimport { useResolvedResponsiveValue } from './base-menu.utils.js';\n\nimport type { Responsive } from '../../props/prop-def.js';\n\n/**\n * Context to detect if a component is rendered inside a menu (DropdownMenu, ContextMenu, etc.)\n * Used by VirtualMenu to adjust its behavior:\n * - Skip role=\"menu\" when inside a parent menu (parent owns the role)\n * - Delegate certain keyboard handling to parent\n * - Use the correct item height based on menu size\n */\n\nexport type MenuSize = '1' | '2' | '3' | '4';\n\ninterface MenuContextValue {\n /** Whether we're inside a menu that owns the menu role */\n isInsideMenu: boolean;\n /** Menu size for the current breakpoint */\n size?: MenuSize;\n /** Item height in px for the current size and theme scaling */\n itemHeight?: number;\n}\n\nconst MenuContext = React.createContext<MenuContextValue>({ isInsideMenu: false });\n\ninterface MenuProviderProps {\n children: React.ReactNode;\n /** Menu size passed from parent (DropdownMenu.Content, ContextMenu.Content, etc.) */\n size?: Responsive<MenuSize>;\n}\n\n/**\n * Menu row height in pixels per size: the line height plus --row-inset-N above and below\n * (base-menu.css), never under the 24px target floor.\n */\nexport const menuSizeToItemHeight: Record<MenuSize, number> = {\n '1': 24,\n '2': 30,\n '3': 34,\n '4': 38,\n};\n\nexport function getMenuItemHeight(size: MenuSize): number {\n return menuSizeToItemHeight[size];\n}\n\nexport function MenuProvider({ children, size }: MenuProviderProps) {\n const resolvedSize = useResolvedResponsiveValue<MenuSize | undefined>(size, undefined);\n const itemHeight = resolvedSize ? getMenuItemHeight(resolvedSize) : undefined;\n const value = React.useMemo(\n () => ({ isInsideMenu: true, size: resolvedSize, itemHeight }),\n [resolvedSize, itemHeight],\n );\n return <MenuContext.Provider value={value}>{children}</MenuContext.Provider>;\n}\n\nexport function useMenuContext() {\n return React.useContext(MenuContext);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["virtual_menu_exports", "__export", "VirtualMenu", "__toCommonJS", "React", "import_classnames", "import_react_virtual", "React", "MenuContext", "menuSizeToItemHeight", "getMenuItemHeight", "size", "useMenuContext", "MenuContext", "SimpleItem", "label", "_isHighlighted", "id", "style", "tabIndex", "dataHighlighted", "dataIndex", "onMouseEnter", "onMouseLeave", "onClick", "onKeyDown", "classNames", "prev", "next", "VirtualMenuRoot", "items", "itemLabel", "RenderItem", "sizeProp", "estimatedItemSizeProp", "overscan", "onSelect", "className", "ariaLabel", "menuId", "parentRef", "highlightedIndex", "setHighlightedIndex", "isInsideMenu", "contextSize", "contextItemHeight", "useMenuContext", "estimatedItemSize", "getMenuItemHeight", "getLabel", "item", "safeHighlightedIndex", "getItemSize", "virtualizer", "virtualItems", "itemsRef", "onSelectRef", "scrollToIndexRef", "highlightedIndexRef", "handleItemMouseEnter", "e", "index", "handleItemClick", "idx", "currentItems", "noop", "handleItemKeyDown", "handleKeyDown", "currentHighlightedIndex", "nextIndex", "prevIndex", "lastIndex", "getItemId", "rootStyle", "totalSize", "viewportStyle", "virtualRow", "isHighlighted", "itemStyle", "commonProps", "VirtualMenuItemInner", "children", "props", "forwardedRef", "VirtualMenuItem", "prevProps", "nextProps", "prevStyle", "nextStyle", "VirtualMenu"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/index.ts", "../../../src/hooks/use-live-announcer.ts", "../../../src/hooks/use-body-pointer-events-cleanup.ts", "../../../src/hooks/use-tooltip-wrapper.ts", "../../../src/hooks/use-toggle-state.ts", "../../../src/hooks/use-appearance.ts", "../../../src/hooks/appearance-script.ts"],
4
- "sourcesContent": ["export { useLiveAnnouncer } from './use-live-announcer.js';\nexport { useBodyPointerEventsCleanup } from './use-body-pointer-events-cleanup.js';\nexport { useTooltipWrapper } from './use-tooltip-wrapper.js';\nexport { useToggleState } from './use-toggle-state.js';\nexport { useAppearance, setAppearance } from './use-appearance.js';\nexport { appearanceScript, APPEARANCE_STORAGE_KEY } from './appearance-script.js';\nexport type { AppearanceChoice, ResolvedAppearance } from './use-appearance.js';\n", "import * as React from 'react';\n\n/**\n * Reference counter to track how many components are using the live region.\n * Only remove the live region when no components are using it.\n */\nlet liveRegionRefCount = 0;\n\n/**\n * Hook for making live announcements to screen readers\n * Creates a hidden aria-live region for announcing dynamic content changes\n */\nexport function useLiveAnnouncer() {\n // Track the timeout so we can clean it up on unmount\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n // Create aria-live region if it doesn't exist\n React.useEffect(() => {\n let liveRegion = document.getElementById('rt-live-announcer');\n\n if (!liveRegion) {\n liveRegion = document.createElement('div');\n liveRegion.id = 'rt-live-announcer';\n liveRegion.setAttribute('aria-live', 'polite');\n liveRegion.setAttribute('aria-atomic', 'true');\n liveRegion.style.cssText = `\n position: absolute;\n left: -10000px;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n `;\n document.body.appendChild(liveRegion);\n }\n\n // Increment ref count when component mounts\n liveRegionRefCount++;\n\n return () => {\n // Decrement ref count when component unmounts\n liveRegionRefCount--;\n\n // Clean up timeout on unmount\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Only remove the live region if no components are using it\n if (liveRegionRefCount === 0) {\n const region = document.getElementById('rt-live-announcer');\n if (region) {\n region.remove();\n }\n }\n };\n }, []);\n\n const announce = React.useCallback((message: string) => {\n const liveRegion = document.getElementById('rt-live-announcer');\n if (liveRegion) {\n // Clear any pending timeout\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Clear previous announcements\n liveRegion.textContent = '';\n\n // Add new announcement with a small delay to ensure it's announced\n timeoutRef.current = setTimeout(() => {\n liveRegion.textContent = message;\n }, 100);\n }\n }, []);\n\n return announce;\n}\n", "import * as React from 'react';\n\nlet cleanupInstalled = false;\n\n/**\n * Hook to cleanup stuck pointer-events: none on document.body\n *\n * This addresses an issue where react-remove-scroll (used by Radix UI Dialog)\n * sometimes fails to restore body pointer-events after dialog closes,\n * leaving the page unclickable.\n */\nexport function useBodyPointerEventsCleanup() {\n React.useEffect(() => {\n if (typeof document === 'undefined') return;\n if (cleanupInstalled) return;\n\n cleanupInstalled = true;\n\n // Deferred cleanups are tracked so unmount can cancel the ones still\n // queued. A timer that outlives the document reaches for `document.body`\n // after it is gone; under jsdom that surfaces as an unhandled\n // ReferenceError attributed to whichever test happened to be running.\n const pending = new Set<ReturnType<typeof setTimeout>>();\n\n const defer = (fn: () => void, delay: number) => {\n const id = setTimeout(() => {\n pending.delete(id);\n fn();\n }, delay);\n pending.add(id);\n };\n\n const hasOpenModal = (): boolean => {\n // Check for open dialogs/alertdialogs\n const hasDialogs = Boolean(\n document.querySelector(\n '[role=\"dialog\"][aria-modal=\"true\"], [role=\"alertdialog\"][aria-modal=\"true\"]',\n ),\n );\n\n // Also check for any Radix overlays that are still mounted\n const hasRadixOverlays = Boolean(\n document.querySelector('[data-radix-popper-content-wrapper], [data-state=\"open\"]'),\n );\n\n return hasDialogs || hasRadixOverlays;\n };\n\n const forceCleanup = () => {\n // Aggressive cleanup - remove pointer-events regardless\n if (document.body.style.pointerEvents === 'none') {\n console.log('[KookieUI] Force cleaning stuck pointer-events: none from body');\n document.body.style.pointerEvents = '';\n\n // Also remove any scroll-lock related attributes\n document.body.removeAttribute('data-scroll-locked');\n document.body.removeAttribute('data-remove-scroll');\n\n // Remove any classes that might be causing issues\n document.body.classList.remove('ReactModal__Body--open');\n }\n };\n\n const safeCleanup = () => {\n if (document.body.style.pointerEvents === 'none' && !hasOpenModal()) {\n console.log('[KookieUI] Safe cleaning stuck pointer-events: none from body');\n document.body.style.pointerEvents = '';\n }\n };\n\n // Force cleanup on any click outside modal content\n const onDocumentClick = (event: Event) => {\n const target = event.target as Element;\n if (\n target &&\n !target.closest(\n '[role=\"dialog\"], [role=\"alertdialog\"], [data-radix-popper-content-wrapper]',\n )\n ) {\n // Clicked outside any modal - force cleanup after a short delay\n defer(forceCleanup, 100);\n }\n };\n\n // Force cleanup on ESC key\n const onEscapeKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n defer(forceCleanup, 200);\n }\n };\n\n // Safe cleanup on other interactions\n const onInteraction = () => {\n defer(safeCleanup, 50);\n };\n\n // Install global listeners\n document.addEventListener('click', onDocumentClick, true);\n document.addEventListener('keydown', onEscapeKey, true);\n document.addEventListener('pointerup', onInteraction, true);\n document.addEventListener('transitionend', onInteraction, true);\n document.addEventListener('animationend', onInteraction, true);\n\n // Watch for DOM changes that might indicate overlay removal\n const observer = new MutationObserver(() => {\n defer(safeCleanup, 0);\n });\n observer.observe(document.body, { childList: true, subtree: true, attributes: true });\n\n // Fallback periodic cleanup\n const intervalId = setInterval(() => {\n if (document.body.style.pointerEvents === 'none' && !hasOpenModal()) {\n console.log('[KookieUI] Periodic cleanup of stuck pointer-events');\n document.body.style.pointerEvents = '';\n }\n }, 1000);\n\n // Initial cleanup\n defer(safeCleanup, 100);\n\n // Tear everything down together. The observer is the important one: it\n // fires while React unmounts the tree, so leaving it connected keeps\n // queueing work against a document that is about to go away. Releasing the\n // latch lets a later mount reinstall.\n return () => {\n clearInterval(intervalId);\n\n pending.forEach(clearTimeout);\n pending.clear();\n\n observer.disconnect();\n\n document.removeEventListener('click', onDocumentClick, true);\n document.removeEventListener('keydown', onEscapeKey, true);\n document.removeEventListener('pointerup', onInteraction, true);\n document.removeEventListener('transitionend', onInteraction, true);\n document.removeEventListener('animationend', onInteraction, true);\n\n cleanupInstalled = false;\n };\n }, []);\n}\n", "import * as React from 'react';\n\n/**\n * Hook for managing tooltip accessibility props and conditional rendering.\n * Encapsulates tooltip ID generation and aria-describedby binding.\n *\n * @param tooltip - The tooltip content (if any)\n * @returns Object containing tooltipId, hasTooltip flag, and accessibility props\n *\n * @example\n * ```tsx\n * const { tooltipId, hasTooltip, accessibilityProps } = useTooltipWrapper(tooltip);\n *\n * const button = <button {...accessibilityProps}>Click me</button>;\n *\n * if (!hasTooltip) return button;\n *\n * return <Tooltip id={tooltipId} content={tooltip}>{button}</Tooltip>;\n * ```\n */\nexport function useTooltipWrapper(tooltip: React.ReactNode) {\n const tooltipId = React.useId();\n const hasTooltip = Boolean(tooltip);\n\n const accessibilityProps = React.useMemo(() => (hasTooltip ? { 'aria-describedby': tooltipId } : {}), [hasTooltip, tooltipId]);\n\n return { tooltipId, hasTooltip, accessibilityProps };\n}\n", "import * as React from 'react';\nimport { useLiveAnnouncer } from './use-live-announcer.js';\n\n/**\n * Options for the useToggleState hook\n */\ninterface UseToggleStateOptions {\n /** Controlled pressed state */\n pressed?: boolean;\n /** Callback when pressed state changes */\n onPressedChange?: (pressed: boolean) => void;\n /** Function to get the accessible name for announcements */\n getAccessibleName: () => string;\n /** Component name for warning messages */\n componentName: string;\n}\n\n/**\n * Hook for shared toggle button state management.\n * Provides accessibility announcements and controlled/uncontrolled warnings.\n *\n * @param options - Configuration options for the toggle state\n * @returns Object containing the handlePressedChange callback\n *\n * @example\n * ```tsx\n * const getAccessibleName = React.useCallback(() => 'Toggle button', []);\n *\n * const { handlePressedChange } = useToggleState({\n * pressed,\n * onPressedChange,\n * getAccessibleName,\n * componentName: 'ToggleButton',\n * });\n * ```\n */\nexport function useToggleState({ pressed, onPressedChange, getAccessibleName, componentName }: UseToggleStateOptions) {\n const announce = useLiveAnnouncer();\n\n // Track if we've already warned about controlled without handler\n const warnedRef = React.useRef(false);\n\n /**\n * Memoized handler for state changes with accessibility announcements.\n * Announces the new state immediately for screen readers.\n */\n const handlePressedChange = React.useCallback(\n (newPressed: boolean) => {\n const accessibleName = getAccessibleName();\n // Announce the state change for screen readers\n announce(`${accessibleName} ${newPressed ? 'pressed' : 'unpressed'}`);\n // Call the user's change handler\n onPressedChange?.(newPressed);\n },\n [announce, onPressedChange, getAccessibleName],\n );\n\n // Development-only warning for controlled/uncontrolled pattern\n // Only warns once to avoid console spam\n React.useEffect(() => {\n if (process.env.NODE_ENV === 'development' && pressed !== undefined && onPressedChange === undefined && !warnedRef.current) {\n warnedRef.current = true;\n console.warn(\n `${componentName}: You provided a \\`pressed\\` prop without an \\`onPressedChange\\` handler. ` +\n 'This will result in a read-only toggle button. If you want the button to be interactive, ' +\n 'you should provide an `onPressedChange` handler.',\n );\n }\n }, [pressed, onPressedChange, componentName]);\n\n return { handlePressedChange };\n}\n", "'use client';\n\nimport * as React from 'react';\nimport { APPEARANCE_STORAGE_KEY } from './appearance-script.js';\n\n/**\n * Light and dark mode, decided before the first paint and kept on `<html>`.\n *\n * The server cannot know the visitor's mode, so `appearanceScript` runs synchronously in\n * `<head>`: the stored choice first, `prefers-color-scheme` otherwise. It writes the `light`\n * or `dark` class (which every token and component stylesheet already keys off) and\n * `data-appearance` on `<html>`. The root `<Theme>` keeps `appearance=\"inherit\"`, so it\n * writes no class of its own and `<html>` is the one source of truth. Nested themes and\n * portals inherit it from there.\n *\n * `useAppearance` is the client half: an external store over `<html>` and the same storage\n * key. It never mirrors the mode into React state that could disagree with the DOM.\n */\n\ntype AppearanceChoice = 'system' | 'light' | 'dark';\ntype ResolvedAppearance = 'light' | 'dark';\n\nconst listeners = new Set<() => void>();\n\nfunction emit() {\n for (const listener of listeners) listener();\n}\n\nfunction readChoice(): AppearanceChoice {\n try {\n const value = globalThis.localStorage?.getItem(APPEARANCE_STORAGE_KEY);\n return value === 'light' || value === 'dark' ? value : 'system';\n } catch {\n return 'system';\n }\n}\n\nfunction systemAppearance(): ResolvedAppearance {\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n}\n\nfunction stamp(mode: ResolvedAppearance) {\n const root = document.documentElement;\n root.classList.remove('light', 'dark');\n root.classList.add(mode);\n root.setAttribute('data-appearance', mode);\n root.style.colorScheme = mode;\n}\n\nfunction readResolved(): ResolvedAppearance {\n const root = document.documentElement;\n if (root.classList.contains('dark') || root.classList.contains('dark-theme')) return 'dark';\n if (root.classList.contains('light') || root.classList.contains('light-theme')) return 'light';\n return systemAppearance();\n}\n\nlet snapshot: { choice: AppearanceChoice; resolved: ResolvedAppearance } | null = null;\n\nfunction getSnapshot() {\n const choice = readChoice();\n const resolved = readResolved();\n if (!snapshot || snapshot.choice !== choice || snapshot.resolved !== resolved) {\n snapshot = { choice, resolved };\n }\n return snapshot;\n}\n\nconst serverSnapshot = { choice: 'system' as AppearanceChoice, resolved: 'light' as ResolvedAppearance };\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n const media = window.matchMedia('(prefers-color-scheme: dark)');\n // With no stored choice, follow the system as it changes.\n const onSystemChange = () => {\n if (readChoice() === 'system') {\n stamp(systemAppearance());\n emit();\n }\n };\n // Another tab changed the choice.\n const onStorage = (event: StorageEvent) => {\n if (event.key !== APPEARANCE_STORAGE_KEY) return;\n const choice = readChoice();\n stamp(choice === 'system' ? systemAppearance() : choice);\n emit();\n };\n media.addEventListener('change', onSystemChange);\n window.addEventListener('storage', onStorage);\n return () => {\n listeners.delete(listener);\n media.removeEventListener('change', onSystemChange);\n window.removeEventListener('storage', onStorage);\n };\n}\n\n/** Applies a choice to `<html>` and stores it. The change applies even if storage is blocked. */\nfunction setAppearance(choice: AppearanceChoice) {\n try {\n if (choice === 'system') localStorage.removeItem(APPEARANCE_STORAGE_KEY);\n else localStorage.setItem(APPEARANCE_STORAGE_KEY, choice);\n } catch {\n // Storage is blocked: the mode still changes for this page.\n }\n stamp(choice === 'system' ? systemAppearance() : choice);\n emit();\n}\n\n/**\n * The page's light or dark mode. `choice` is what the person picked (`system` when they\n * haven't); `appearance` is what is showing. On the server and in the first client render it\n * reports `system` / `light`, then corrects without a hydration mismatch.\n */\nfunction useAppearance() {\n const { choice, resolved } = React.useSyncExternalStore(subscribe, getSnapshot, () => serverSnapshot);\n return { choice, appearance: resolved, setAppearance } as const;\n}\n\nexport { useAppearance, setAppearance };\nexport type { AppearanceChoice, ResolvedAppearance };\n", "/**\n * The pre-paint half of light and dark mode (see `use-appearance.ts`). Kept in its own module\n * with no client directive, so a server component such as a Next.js root layout can import the\n * string and inline it in `<head>`.\n */\n\nconst APPEARANCE_STORAGE_KEY = 'kookie-appearance';\n\n/**\n * Inline this in `<head>`, before any stylesheet paints, e.g.\n * `<script dangerouslySetInnerHTML={{ __html: appearanceScript }} />`.\n *\n * Storage is read inside its own try/catch: browsers that block site data throw on access,\n * and that must not skip the stamp. `matchMedia` always answers.\n */\nconst appearanceScript = `(function () {\n var e = document.documentElement;\n var a = null;\n try { a = localStorage.getItem(${JSON.stringify(APPEARANCE_STORAGE_KEY)}); } catch (err) {}\n var dark = a === \"light\" ? false : a === \"dark\" ? true : matchMedia(\"(prefers-color-scheme: dark)\").matches;\n var mode = dark ? \"dark\" : \"light\";\n e.classList.remove(\"light\", \"dark\");\n e.classList.add(mode);\n e.setAttribute(\"data-appearance\", mode);\n e.style.colorScheme = mode;\n})();`;\n\nexport { appearanceScript, APPEARANCE_STORAGE_KEY };\n"],
4
+ "sourcesContent": ["export { useLiveAnnouncer } from './use-live-announcer.js';\nexport { useBodyPointerEventsCleanup } from './use-body-pointer-events-cleanup.js';\nexport { useTooltipWrapper } from './use-tooltip-wrapper.js';\nexport { useToggleState } from './use-toggle-state.js';\nexport { useAppearance, setAppearance } from './use-appearance.js';\nexport { appearanceScript, APPEARANCE_STORAGE_KEY } from './appearance-script.js';\nexport type { AppearanceChoice, ResolvedAppearance } from './use-appearance.js';\n", "import * as React from 'react';\n\n/**\n * Reference counter to track how many components are using the live region.\n * Only remove the live region when no components are using it.\n */\nlet liveRegionRefCount = 0;\n\n/**\n * Hook for making live announcements to screen readers\n * Creates a hidden aria-live region for announcing dynamic content changes\n */\nexport function useLiveAnnouncer() {\n // Track the timeout so we can clean it up on unmount\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n // Create aria-live region if it doesn't exist\n React.useEffect(() => {\n let liveRegion = document.getElementById('rt-live-announcer');\n\n if (!liveRegion) {\n liveRegion = document.createElement('div');\n liveRegion.id = 'rt-live-announcer';\n liveRegion.setAttribute('aria-live', 'polite');\n liveRegion.setAttribute('aria-atomic', 'true');\n liveRegion.style.cssText = `\n position: absolute;\n left: -10000px;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n `;\n document.body.appendChild(liveRegion);\n }\n\n // Increment ref count when component mounts\n liveRegionRefCount++;\n\n return () => {\n // Decrement ref count when component unmounts\n liveRegionRefCount--;\n\n // Clean up timeout on unmount\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Only remove the live region if no components are using it\n if (liveRegionRefCount === 0) {\n const region = document.getElementById('rt-live-announcer');\n if (region) {\n region.remove();\n }\n }\n };\n }, []);\n\n const announce = React.useCallback((message: string) => {\n const liveRegion = document.getElementById('rt-live-announcer');\n if (liveRegion) {\n // Clear any pending timeout\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Clear previous announcements\n liveRegion.textContent = '';\n\n // Add new announcement with a small delay to ensure it's announced\n timeoutRef.current = setTimeout(() => {\n liveRegion.textContent = message;\n }, 100);\n }\n }, []);\n\n return announce;\n}\n", "import * as React from 'react';\n\nlet cleanupInstalled = false;\n\n/**\n * Hook to cleanup stuck pointer-events: none on document.body\n *\n * This addresses an issue where react-remove-scroll (used by Radix UI Dialog)\n * sometimes fails to restore body pointer-events after dialog closes,\n * leaving the page unclickable.\n */\nexport function useBodyPointerEventsCleanup() {\n React.useEffect(() => {\n if (typeof document === 'undefined') return;\n if (cleanupInstalled) return;\n\n cleanupInstalled = true;\n\n // Deferred cleanups are tracked so unmount can cancel the ones still\n // queued. A timer that outlives the document reaches for `document.body`\n // after it is gone; under jsdom that surfaces as an unhandled\n // ReferenceError attributed to whichever test happened to be running.\n const pending = new Set<ReturnType<typeof setTimeout>>();\n\n const defer = (fn: () => void, delay: number) => {\n const id = setTimeout(() => {\n pending.delete(id);\n fn();\n }, delay);\n pending.add(id);\n };\n\n const hasOpenModal = (): boolean => {\n // Check for open dialogs/alertdialogs\n const hasDialogs = Boolean(\n document.querySelector(\n '[role=\"dialog\"][aria-modal=\"true\"], [role=\"alertdialog\"][aria-modal=\"true\"]',\n ),\n );\n\n // Also check for any Radix overlays that are still mounted\n const hasRadixOverlays = Boolean(\n document.querySelector('[data-radix-popper-content-wrapper], [data-state=\"open\"]'),\n );\n\n return hasDialogs || hasRadixOverlays;\n };\n\n const forceCleanup = () => {\n // Aggressive cleanup - remove pointer-events regardless\n if (document.body.style.pointerEvents === 'none') {\n console.log('[KookieUI] Force cleaning stuck pointer-events: none from body');\n document.body.style.pointerEvents = '';\n\n // Also remove any scroll-lock related attributes\n document.body.removeAttribute('data-scroll-locked');\n document.body.removeAttribute('data-remove-scroll');\n\n // Remove any classes that might be causing issues\n document.body.classList.remove('ReactModal__Body--open');\n }\n };\n\n const safeCleanup = () => {\n if (document.body.style.pointerEvents === 'none' && !hasOpenModal()) {\n console.log('[KookieUI] Safe cleaning stuck pointer-events: none from body');\n document.body.style.pointerEvents = '';\n }\n };\n\n // Force cleanup on any click outside modal content\n const onDocumentClick = (event: Event) => {\n const target = event.target as Element;\n if (\n target &&\n !target.closest(\n '[role=\"dialog\"], [role=\"alertdialog\"], [data-radix-popper-content-wrapper]',\n )\n ) {\n // Clicked outside any modal - force cleanup after a short delay\n defer(forceCleanup, 100);\n }\n };\n\n // Force cleanup on ESC key\n const onEscapeKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n defer(forceCleanup, 200);\n }\n };\n\n // Safe cleanup on other interactions\n const onInteraction = () => {\n defer(safeCleanup, 50);\n };\n\n // Install global listeners\n document.addEventListener('click', onDocumentClick, true);\n document.addEventListener('keydown', onEscapeKey, true);\n document.addEventListener('pointerup', onInteraction, true);\n document.addEventListener('transitionend', onInteraction, true);\n document.addEventListener('animationend', onInteraction, true);\n\n // Watch for DOM changes that might indicate overlay removal\n const observer = new MutationObserver(() => {\n defer(safeCleanup, 0);\n });\n observer.observe(document.body, { childList: true, subtree: true, attributes: true });\n\n // Fallback periodic cleanup\n const intervalId = setInterval(() => {\n if (document.body.style.pointerEvents === 'none' && !hasOpenModal()) {\n console.log('[KookieUI] Periodic cleanup of stuck pointer-events');\n document.body.style.pointerEvents = '';\n }\n }, 1000);\n\n // Initial cleanup\n defer(safeCleanup, 100);\n\n // Tear everything down together. The observer is the important one: it\n // fires while React unmounts the tree, so leaving it connected keeps\n // queueing work against a document that is about to go away. Releasing the\n // latch lets a later mount reinstall.\n return () => {\n clearInterval(intervalId);\n\n pending.forEach(clearTimeout);\n pending.clear();\n\n observer.disconnect();\n\n document.removeEventListener('click', onDocumentClick, true);\n document.removeEventListener('keydown', onEscapeKey, true);\n document.removeEventListener('pointerup', onInteraction, true);\n document.removeEventListener('transitionend', onInteraction, true);\n document.removeEventListener('animationend', onInteraction, true);\n\n cleanupInstalled = false;\n };\n }, []);\n}\n", "import * as React from 'react';\n\n/**\n * Hook for managing tooltip accessibility props and conditional rendering.\n * Encapsulates tooltip ID generation and aria-describedby binding.\n *\n * @param tooltip - The tooltip content (if any)\n * @returns Object containing tooltipId, hasTooltip flag, and accessibility props\n *\n * @example\n * ```tsx\n * const { tooltipId, hasTooltip, accessibilityProps } = useTooltipWrapper(tooltip);\n *\n * const button = <button {...accessibilityProps}>Click me</button>;\n *\n * if (!hasTooltip) return button;\n *\n * return <Tooltip id={tooltipId} content={tooltip}>{button}</Tooltip>;\n * ```\n */\nexport function useTooltipWrapper(tooltip: React.ReactNode) {\n const tooltipId = React.useId();\n const hasTooltip = Boolean(tooltip);\n\n const accessibilityProps = React.useMemo(() => (hasTooltip ? { 'aria-describedby': tooltipId } : {}), [hasTooltip, tooltipId]);\n\n return { tooltipId, hasTooltip, accessibilityProps };\n}\n", "import * as React from 'react';\nimport { useLiveAnnouncer } from './use-live-announcer.js';\n\n/**\n * Options for the useToggleState hook\n */\ninterface UseToggleStateOptions {\n /** Controlled pressed state */\n pressed?: boolean;\n /** Callback when pressed state changes */\n onPressedChange?: (pressed: boolean) => void;\n /** Function to get the accessible name for announcements */\n getAccessibleName: () => string;\n /** Component name for warning messages */\n componentName: string;\n}\n\n/**\n * Hook for shared toggle button state management.\n * Provides accessibility announcements and controlled/uncontrolled warnings.\n *\n * @param options - Configuration options for the toggle state\n * @returns Object containing the handlePressedChange callback\n *\n * @example\n * ```tsx\n * const getAccessibleName = React.useCallback(() => 'Toggle button', []);\n *\n * const { handlePressedChange } = useToggleState({\n * pressed,\n * onPressedChange,\n * getAccessibleName,\n * componentName: 'Toggle',\n * });\n * ```\n */\nexport function useToggleState({ pressed, onPressedChange, getAccessibleName, componentName }: UseToggleStateOptions) {\n const announce = useLiveAnnouncer();\n\n // Track if we've already warned about controlled without handler\n const warnedRef = React.useRef(false);\n\n /**\n * Memoized handler for state changes with accessibility announcements.\n * Announces the new state immediately for screen readers.\n */\n const handlePressedChange = React.useCallback(\n (newPressed: boolean) => {\n const accessibleName = getAccessibleName();\n // Announce the state change for screen readers\n announce(`${accessibleName} ${newPressed ? 'pressed' : 'unpressed'}`);\n // Call the user's change handler\n onPressedChange?.(newPressed);\n },\n [announce, onPressedChange, getAccessibleName],\n );\n\n // Development-only warning for controlled/uncontrolled pattern\n // Only warns once to avoid console spam\n React.useEffect(() => {\n if (process.env.NODE_ENV === 'development' && pressed !== undefined && onPressedChange === undefined && !warnedRef.current) {\n warnedRef.current = true;\n console.warn(\n `${componentName}: You provided a \\`pressed\\` prop without an \\`onPressedChange\\` handler. ` +\n 'This will result in a read-only toggle button. If you want the button to be interactive, ' +\n 'you should provide an `onPressedChange` handler.',\n );\n }\n }, [pressed, onPressedChange, componentName]);\n\n return { handlePressedChange };\n}\n", "'use client';\n\nimport * as React from 'react';\nimport { APPEARANCE_STORAGE_KEY } from './appearance-script.js';\n\n/**\n * Light and dark mode, decided before the first paint and kept on `<html>`.\n *\n * The server cannot know the visitor's mode, so `appearanceScript` runs synchronously in\n * `<head>`: the stored choice first, `prefers-color-scheme` otherwise. It writes the `light`\n * or `dark` class (which every token and component stylesheet already keys off) and\n * `data-appearance` on `<html>`. The root `<Theme>` keeps `appearance=\"inherit\"`, so it\n * writes no class of its own and `<html>` is the one source of truth. Nested themes and\n * portals inherit it from there.\n *\n * `useAppearance` is the client half: an external store over `<html>` and the same storage\n * key. It never mirrors the mode into React state that could disagree with the DOM.\n */\n\ntype AppearanceChoice = 'system' | 'light' | 'dark';\ntype ResolvedAppearance = 'light' | 'dark';\n\nconst listeners = new Set<() => void>();\n\nfunction emit() {\n for (const listener of listeners) listener();\n}\n\nfunction readChoice(): AppearanceChoice {\n try {\n const value = globalThis.localStorage?.getItem(APPEARANCE_STORAGE_KEY);\n return value === 'light' || value === 'dark' ? value : 'system';\n } catch {\n return 'system';\n }\n}\n\nfunction systemAppearance(): ResolvedAppearance {\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n}\n\nfunction stamp(mode: ResolvedAppearance) {\n const root = document.documentElement;\n root.classList.remove('light', 'dark');\n root.classList.add(mode);\n root.setAttribute('data-appearance', mode);\n root.style.colorScheme = mode;\n}\n\nfunction readResolved(): ResolvedAppearance {\n const root = document.documentElement;\n if (root.classList.contains('dark') || root.classList.contains('dark-theme')) return 'dark';\n if (root.classList.contains('light') || root.classList.contains('light-theme')) return 'light';\n return systemAppearance();\n}\n\nlet snapshot: { choice: AppearanceChoice; resolved: ResolvedAppearance } | null = null;\n\nfunction getSnapshot() {\n const choice = readChoice();\n const resolved = readResolved();\n if (!snapshot || snapshot.choice !== choice || snapshot.resolved !== resolved) {\n snapshot = { choice, resolved };\n }\n return snapshot;\n}\n\nconst serverSnapshot = { choice: 'system' as AppearanceChoice, resolved: 'light' as ResolvedAppearance };\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n const media = window.matchMedia('(prefers-color-scheme: dark)');\n // With no stored choice, follow the system as it changes.\n const onSystemChange = () => {\n if (readChoice() === 'system') {\n stamp(systemAppearance());\n emit();\n }\n };\n // Another tab changed the choice.\n const onStorage = (event: StorageEvent) => {\n if (event.key !== APPEARANCE_STORAGE_KEY) return;\n const choice = readChoice();\n stamp(choice === 'system' ? systemAppearance() : choice);\n emit();\n };\n media.addEventListener('change', onSystemChange);\n window.addEventListener('storage', onStorage);\n return () => {\n listeners.delete(listener);\n media.removeEventListener('change', onSystemChange);\n window.removeEventListener('storage', onStorage);\n };\n}\n\n/** Applies a choice to `<html>` and stores it. The change applies even if storage is blocked. */\nfunction setAppearance(choice: AppearanceChoice) {\n try {\n if (choice === 'system') localStorage.removeItem(APPEARANCE_STORAGE_KEY);\n else localStorage.setItem(APPEARANCE_STORAGE_KEY, choice);\n } catch {\n // Storage is blocked: the mode still changes for this page.\n }\n stamp(choice === 'system' ? systemAppearance() : choice);\n emit();\n}\n\n/**\n * The page's light or dark mode. `choice` is what the person picked (`system` when they\n * haven't); `appearance` is what is showing. On the server and in the first client render it\n * reports `system` / `light`, then corrects without a hydration mismatch.\n */\nfunction useAppearance() {\n const { choice, resolved } = React.useSyncExternalStore(subscribe, getSnapshot, () => serverSnapshot);\n return { choice, appearance: resolved, setAppearance } as const;\n}\n\nexport { useAppearance, setAppearance };\nexport type { AppearanceChoice, ResolvedAppearance };\n", "/**\n * The pre-paint half of light and dark mode (see `use-appearance.ts`). Kept in its own module\n * with no client directive, so a server component such as a Next.js root layout can import the\n * string and inline it in `<head>`.\n */\n\nconst APPEARANCE_STORAGE_KEY = 'kookie-appearance';\n\n/**\n * Inline this in `<head>`, before any stylesheet paints, e.g.\n * `<script dangerouslySetInnerHTML={{ __html: appearanceScript }} />`.\n *\n * Storage is read inside its own try/catch: browsers that block site data throw on access,\n * and that must not skip the stamp. `matchMedia` always answers.\n */\nconst appearanceScript = `(function () {\n var e = document.documentElement;\n var a = null;\n try { a = localStorage.getItem(${JSON.stringify(APPEARANCE_STORAGE_KEY)}); } catch (err) {}\n var dark = a === \"light\" ? false : a === \"dark\" ? true : matchMedia(\"(prefers-color-scheme: dark)\").matches;\n var mode = dark ? \"dark\" : \"light\";\n e.classList.remove(\"light\", \"dark\");\n e.classList.add(mode);\n e.setAttribute(\"data-appearance\", mode);\n e.style.colorScheme = mode;\n})();`;\n\nexport { appearanceScript, APPEARANCE_STORAGE_KEY };\n"],
5
5
  "mappings": "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",
6
6
  "names": ["hooks_exports", "__export", "APPEARANCE_STORAGE_KEY", "appearanceScript", "setAppearance", "useAppearance", "useBodyPointerEventsCleanup", "useLiveAnnouncer", "useToggleState", "useTooltipWrapper", "__toCommonJS", "React", "liveRegionRefCount", "useLiveAnnouncer", "timeoutRef", "liveRegion", "region", "message", "React", "cleanupInstalled", "useBodyPointerEventsCleanup", "pending", "defer", "fn", "delay", "id", "hasOpenModal", "hasDialogs", "hasRadixOverlays", "forceCleanup", "safeCleanup", "onDocumentClick", "event", "target", "onEscapeKey", "onInteraction", "observer", "intervalId", "React", "useTooltipWrapper", "tooltip", "tooltipId", "hasTooltip", "accessibilityProps", "React", "useToggleState", "pressed", "onPressedChange", "getAccessibleName", "componentName", "announce", "useLiveAnnouncer", "warnedRef", "handlePressedChange", "newPressed", "accessibleName", "React", "APPEARANCE_STORAGE_KEY", "appearanceScript", "listeners", "emit", "listener", "readChoice", "value", "APPEARANCE_STORAGE_KEY", "systemAppearance", "stamp", "mode", "root", "readResolved", "snapshot", "getSnapshot", "choice", "resolved", "serverSnapshot", "subscribe", "media", "onSystemChange", "onStorage", "event", "setAppearance", "useAppearance"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  /**
3
3
  * State that tracks a prop but can also be set imperatively — the shape `Theme`
4
- * needs, where a prop sets the value and `ThemePanel` can change it at runtime.
4
+ * needs, where a prop sets the value and the context setters can change it at runtime.
5
5
  *
6
6
  * Adjusts state during render rather than syncing in a `useEffect`. An effect
7
7
  * would commit one render carrying the *old* value and schedule a second one,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/use-prop-synced-state.ts"],
4
- "sourcesContent": ["import * as React from 'react';\n\n/**\n * State that tracks a prop but can also be set imperatively \u2014 the shape `Theme`\n * needs, where a prop sets the value and `ThemePanel` can change it at runtime.\n *\n * Adjusts state during render rather than syncing in a `useEffect`. An effect\n * would commit one render carrying the *old* value and schedule a second one,\n * which for a provider means every consumer renders twice and the browser can\n * paint the stale value in between.\n *\n * @see https://react.dev/reference/react/useState#storing-information-from-previous-renders\n */\nexport function usePropSyncedState<T>(propValue: T) {\n const [value, setValue] = React.useState(propValue);\n const [previousPropValue, setPreviousPropValue] = React.useState(propValue);\n\n if (!Object.is(propValue, previousPropValue)) {\n setPreviousPropValue(propValue);\n setValue(propValue);\n }\n\n return [value, setValue] as const;\n}\n"],
4
+ "sourcesContent": ["import * as React from 'react';\n\n/**\n * State that tracks a prop but can also be set imperatively \u2014 the shape `Theme`\n * needs, where a prop sets the value and the context setters can change it at runtime.\n *\n * Adjusts state during render rather than syncing in a `useEffect`. An effect\n * would commit one render carrying the *old* value and schedule a second one,\n * which for a provider means every consumer renders twice and the browser can\n * paint the stale value in between.\n *\n * @see https://react.dev/reference/react/useState#storing-information-from-previous-renders\n */\nexport function usePropSyncedState<T>(propValue: T) {\n const [value, setValue] = React.useState(propValue);\n const [previousPropValue, setPreviousPropValue] = React.useState(propValue);\n\n if (!Object.is(propValue, previousPropValue)) {\n setPreviousPropValue(propValue);\n setValue(propValue);\n }\n\n return [value, setValue] as const;\n}\n"],
5
5
  "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAuB,oBAahB,SAASF,EAAsBG,EAAc,CAClD,GAAM,CAACC,EAAOC,CAAQ,EAAU,WAASF,CAAS,EAC5C,CAACG,EAAmBC,CAAoB,EAAU,WAASJ,CAAS,EAE1E,OAAK,OAAO,GAAGA,EAAWG,CAAiB,IACzCC,EAAqBJ,CAAS,EAC9BE,EAASF,CAAS,GAGb,CAACC,EAAOC,CAAQ,CACzB",
6
6
  "names": ["use_prop_synced_state_exports", "__export", "usePropSyncedState", "__toCommonJS", "React", "propValue", "value", "setValue", "previousPropValue", "setPreviousPropValue"]
7
7
  }
@@ -26,7 +26,7 @@ interface UseToggleStateOptions {
26
26
  * pressed,
27
27
  * onPressedChange,
28
28
  * getAccessibleName,
29
- * componentName: 'ToggleButton',
29
+ * componentName: 'Toggle',
30
30
  * });
31
31
  * ```
32
32
  */
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/use-toggle-state.ts", "../../../src/hooks/use-live-announcer.ts"],
4
- "sourcesContent": ["import * as React from 'react';\nimport { useLiveAnnouncer } from './use-live-announcer.js';\n\n/**\n * Options for the useToggleState hook\n */\ninterface UseToggleStateOptions {\n /** Controlled pressed state */\n pressed?: boolean;\n /** Callback when pressed state changes */\n onPressedChange?: (pressed: boolean) => void;\n /** Function to get the accessible name for announcements */\n getAccessibleName: () => string;\n /** Component name for warning messages */\n componentName: string;\n}\n\n/**\n * Hook for shared toggle button state management.\n * Provides accessibility announcements and controlled/uncontrolled warnings.\n *\n * @param options - Configuration options for the toggle state\n * @returns Object containing the handlePressedChange callback\n *\n * @example\n * ```tsx\n * const getAccessibleName = React.useCallback(() => 'Toggle button', []);\n *\n * const { handlePressedChange } = useToggleState({\n * pressed,\n * onPressedChange,\n * getAccessibleName,\n * componentName: 'ToggleButton',\n * });\n * ```\n */\nexport function useToggleState({ pressed, onPressedChange, getAccessibleName, componentName }: UseToggleStateOptions) {\n const announce = useLiveAnnouncer();\n\n // Track if we've already warned about controlled without handler\n const warnedRef = React.useRef(false);\n\n /**\n * Memoized handler for state changes with accessibility announcements.\n * Announces the new state immediately for screen readers.\n */\n const handlePressedChange = React.useCallback(\n (newPressed: boolean) => {\n const accessibleName = getAccessibleName();\n // Announce the state change for screen readers\n announce(`${accessibleName} ${newPressed ? 'pressed' : 'unpressed'}`);\n // Call the user's change handler\n onPressedChange?.(newPressed);\n },\n [announce, onPressedChange, getAccessibleName],\n );\n\n // Development-only warning for controlled/uncontrolled pattern\n // Only warns once to avoid console spam\n React.useEffect(() => {\n if (process.env.NODE_ENV === 'development' && pressed !== undefined && onPressedChange === undefined && !warnedRef.current) {\n warnedRef.current = true;\n console.warn(\n `${componentName}: You provided a \\`pressed\\` prop without an \\`onPressedChange\\` handler. ` +\n 'This will result in a read-only toggle button. If you want the button to be interactive, ' +\n 'you should provide an `onPressedChange` handler.',\n );\n }\n }, [pressed, onPressedChange, componentName]);\n\n return { handlePressedChange };\n}\n", "import * as React from 'react';\n\n/**\n * Reference counter to track how many components are using the live region.\n * Only remove the live region when no components are using it.\n */\nlet liveRegionRefCount = 0;\n\n/**\n * Hook for making live announcements to screen readers\n * Creates a hidden aria-live region for announcing dynamic content changes\n */\nexport function useLiveAnnouncer() {\n // Track the timeout so we can clean it up on unmount\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n // Create aria-live region if it doesn't exist\n React.useEffect(() => {\n let liveRegion = document.getElementById('rt-live-announcer');\n\n if (!liveRegion) {\n liveRegion = document.createElement('div');\n liveRegion.id = 'rt-live-announcer';\n liveRegion.setAttribute('aria-live', 'polite');\n liveRegion.setAttribute('aria-atomic', 'true');\n liveRegion.style.cssText = `\n position: absolute;\n left: -10000px;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n `;\n document.body.appendChild(liveRegion);\n }\n\n // Increment ref count when component mounts\n liveRegionRefCount++;\n\n return () => {\n // Decrement ref count when component unmounts\n liveRegionRefCount--;\n\n // Clean up timeout on unmount\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Only remove the live region if no components are using it\n if (liveRegionRefCount === 0) {\n const region = document.getElementById('rt-live-announcer');\n if (region) {\n region.remove();\n }\n }\n };\n }, []);\n\n const announce = React.useCallback((message: string) => {\n const liveRegion = document.getElementById('rt-live-announcer');\n if (liveRegion) {\n // Clear any pending timeout\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Clear previous announcements\n liveRegion.textContent = '';\n\n // Add new announcement with a small delay to ensure it's announced\n timeoutRef.current = setTimeout(() => {\n liveRegion.textContent = message;\n }, 100);\n }\n }, []);\n\n return announce;\n}\n"],
4
+ "sourcesContent": ["import * as React from 'react';\nimport { useLiveAnnouncer } from './use-live-announcer.js';\n\n/**\n * Options for the useToggleState hook\n */\ninterface UseToggleStateOptions {\n /** Controlled pressed state */\n pressed?: boolean;\n /** Callback when pressed state changes */\n onPressedChange?: (pressed: boolean) => void;\n /** Function to get the accessible name for announcements */\n getAccessibleName: () => string;\n /** Component name for warning messages */\n componentName: string;\n}\n\n/**\n * Hook for shared toggle button state management.\n * Provides accessibility announcements and controlled/uncontrolled warnings.\n *\n * @param options - Configuration options for the toggle state\n * @returns Object containing the handlePressedChange callback\n *\n * @example\n * ```tsx\n * const getAccessibleName = React.useCallback(() => 'Toggle button', []);\n *\n * const { handlePressedChange } = useToggleState({\n * pressed,\n * onPressedChange,\n * getAccessibleName,\n * componentName: 'Toggle',\n * });\n * ```\n */\nexport function useToggleState({ pressed, onPressedChange, getAccessibleName, componentName }: UseToggleStateOptions) {\n const announce = useLiveAnnouncer();\n\n // Track if we've already warned about controlled without handler\n const warnedRef = React.useRef(false);\n\n /**\n * Memoized handler for state changes with accessibility announcements.\n * Announces the new state immediately for screen readers.\n */\n const handlePressedChange = React.useCallback(\n (newPressed: boolean) => {\n const accessibleName = getAccessibleName();\n // Announce the state change for screen readers\n announce(`${accessibleName} ${newPressed ? 'pressed' : 'unpressed'}`);\n // Call the user's change handler\n onPressedChange?.(newPressed);\n },\n [announce, onPressedChange, getAccessibleName],\n );\n\n // Development-only warning for controlled/uncontrolled pattern\n // Only warns once to avoid console spam\n React.useEffect(() => {\n if (process.env.NODE_ENV === 'development' && pressed !== undefined && onPressedChange === undefined && !warnedRef.current) {\n warnedRef.current = true;\n console.warn(\n `${componentName}: You provided a \\`pressed\\` prop without an \\`onPressedChange\\` handler. ` +\n 'This will result in a read-only toggle button. If you want the button to be interactive, ' +\n 'you should provide an `onPressedChange` handler.',\n );\n }\n }, [pressed, onPressedChange, componentName]);\n\n return { handlePressedChange };\n}\n", "import * as React from 'react';\n\n/**\n * Reference counter to track how many components are using the live region.\n * Only remove the live region when no components are using it.\n */\nlet liveRegionRefCount = 0;\n\n/**\n * Hook for making live announcements to screen readers\n * Creates a hidden aria-live region for announcing dynamic content changes\n */\nexport function useLiveAnnouncer() {\n // Track the timeout so we can clean it up on unmount\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n // Create aria-live region if it doesn't exist\n React.useEffect(() => {\n let liveRegion = document.getElementById('rt-live-announcer');\n\n if (!liveRegion) {\n liveRegion = document.createElement('div');\n liveRegion.id = 'rt-live-announcer';\n liveRegion.setAttribute('aria-live', 'polite');\n liveRegion.setAttribute('aria-atomic', 'true');\n liveRegion.style.cssText = `\n position: absolute;\n left: -10000px;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n `;\n document.body.appendChild(liveRegion);\n }\n\n // Increment ref count when component mounts\n liveRegionRefCount++;\n\n return () => {\n // Decrement ref count when component unmounts\n liveRegionRefCount--;\n\n // Clean up timeout on unmount\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Only remove the live region if no components are using it\n if (liveRegionRefCount === 0) {\n const region = document.getElementById('rt-live-announcer');\n if (region) {\n region.remove();\n }\n }\n };\n }, []);\n\n const announce = React.useCallback((message: string) => {\n const liveRegion = document.getElementById('rt-live-announcer');\n if (liveRegion) {\n // Clear any pending timeout\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Clear previous announcements\n liveRegion.textContent = '';\n\n // Add new announcement with a small delay to ensure it's announced\n timeoutRef.current = setTimeout(() => {\n liveRegion.textContent = message;\n }, 100);\n }\n }, []);\n\n return announce;\n}\n"],
5
5
  "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAuB,oBCAvB,IAAAC,EAAuB,oBAMnBC,EAAqB,EAMlB,SAASC,GAAmB,CAEjC,IAAMC,EAAmB,SAAkD,MAAS,EAGpF,OAAM,YAAU,IAAM,CACpB,IAAIC,EAAa,SAAS,eAAe,mBAAmB,EAE5D,OAAKA,IACHA,EAAa,SAAS,cAAc,KAAK,EACzCA,EAAW,GAAK,oBAChBA,EAAW,aAAa,YAAa,QAAQ,EAC7CA,EAAW,aAAa,cAAe,MAAM,EAC7CA,EAAW,MAAM,QAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAS3B,SAAS,KAAK,YAAYA,CAAU,GAItCH,IAEO,IAAM,CAUX,GARAA,IAGIE,EAAW,SACb,aAAaA,EAAW,OAAO,EAI7BF,IAAuB,EAAG,CAC5B,IAAMI,EAAS,SAAS,eAAe,mBAAmB,EACtDA,GACFA,EAAO,OAAO,CAElB,CACF,CACF,EAAG,CAAC,CAAC,EAEkB,cAAaC,GAAoB,CACtD,IAAMF,EAAa,SAAS,eAAe,mBAAmB,EAC1DA,IAEED,EAAW,SACb,aAAaA,EAAW,OAAO,EAIjCC,EAAW,YAAc,GAGzBD,EAAW,QAAU,WAAW,IAAM,CACpCC,EAAW,YAAcE,CAC3B,EAAG,GAAG,EAEV,EAAG,CAAC,CAAC,CAGP,CD1CO,SAASC,EAAe,CAAE,QAAAC,EAAS,gBAAAC,EAAiB,kBAAAC,EAAmB,cAAAC,CAAc,EAA0B,CACpH,IAAMC,EAAWC,EAAiB,EAG5BC,EAAkB,SAAO,EAAK,EAM9BC,EAA4B,cAC/BC,GAAwB,CACvB,IAAMC,EAAiBP,EAAkB,EAEzCE,EAAS,GAAGK,CAAc,IAAID,EAAa,UAAY,WAAW,EAAE,EAEpEP,IAAkBO,CAAU,CAC9B,EACA,CAACJ,EAAUH,EAAiBC,CAAiB,CAC/C,EAIA,OAAM,YAAU,IAAM,CAStB,EAAG,CAACF,EAASC,EAAiBE,CAAa,CAAC,EAErC,CAAE,oBAAAI,CAAoB,CAC/B",
6
6
  "names": ["use_toggle_state_exports", "__export", "useToggleState", "__toCommonJS", "React", "React", "liveRegionRefCount", "useLiveAnnouncer", "timeoutRef", "liveRegion", "region", "message", "useToggleState", "pressed", "onPressedChange", "getAccessibleName", "componentName", "announce", "useLiveAnnouncer", "warnedRef", "handlePressedChange", "newPressed", "accessibleName"]
7
7
  }