@womp/kookie-ui 0.26.2 → 0.26.3

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 (294) hide show
  1. package/components.css +27 -4
  2. package/dist/cjs/components/_internal/base-button.js +1 -1
  3. package/dist/cjs/components/_internal/base-button.js.map +2 -2
  4. package/dist/cjs/components/_internal/pane-band-context.d.ts +4 -3
  5. package/dist/cjs/components/_internal/pane-band-context.d.ts.map +1 -1
  6. package/dist/cjs/components/_internal/pane-band-context.js.map +2 -2
  7. package/dist/cjs/components/_internal/pane-chrome.js.map +2 -2
  8. package/dist/cjs/components/_internal/portal-theme.d.ts +9 -0
  9. package/dist/cjs/components/_internal/portal-theme.d.ts.map +1 -0
  10. package/dist/cjs/components/_internal/portal-theme.js +3 -0
  11. package/dist/cjs/components/_internal/portal-theme.js.map +7 -0
  12. package/dist/cjs/components/_internal/shell-sidebar.js.map +2 -2
  13. package/dist/cjs/components/alert-dialog.js +1 -1
  14. package/dist/cjs/components/alert-dialog.js.map +4 -4
  15. package/dist/cjs/components/button.js +1 -1
  16. package/dist/cjs/components/button.js.map +4 -4
  17. package/dist/cjs/components/chatbar.js +1 -1
  18. package/dist/cjs/components/chatbar.js.map +4 -4
  19. package/dist/cjs/components/chip.js +1 -1
  20. package/dist/cjs/components/chip.js.map +4 -4
  21. package/dist/cjs/components/combobox.d.ts.map +1 -1
  22. package/dist/cjs/components/combobox.js +1 -1
  23. package/dist/cjs/components/combobox.js.map +4 -4
  24. package/dist/cjs/components/context-menu.d.ts.map +1 -1
  25. package/dist/cjs/components/context-menu.js +1 -1
  26. package/dist/cjs/components/context-menu.js.map +4 -4
  27. package/dist/cjs/components/dialog.js +1 -1
  28. package/dist/cjs/components/dialog.js.map +4 -4
  29. package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
  30. package/dist/cjs/components/dropdown-menu.js +1 -1
  31. package/dist/cjs/components/dropdown-menu.js.map +4 -4
  32. package/dist/cjs/components/index.js +2 -2
  33. package/dist/cjs/components/index.js.map +4 -4
  34. package/dist/cjs/components/message-scroller.js +1 -1
  35. package/dist/cjs/components/message-scroller.js.map +4 -4
  36. package/dist/cjs/components/notice.js +1 -1
  37. package/dist/cjs/components/notice.js.map +4 -4
  38. package/dist/cjs/components/popover.js +1 -1
  39. package/dist/cjs/components/popover.js.map +4 -4
  40. package/dist/cjs/components/select.d.ts.map +1 -1
  41. package/dist/cjs/components/select.js +1 -1
  42. package/dist/cjs/components/select.js.map +4 -4
  43. package/dist/cjs/components/sheet.js +1 -1
  44. package/dist/cjs/components/sheet.js.map +4 -4
  45. package/dist/cjs/components/shell.js.map +2 -2
  46. package/dist/cjs/components/sidebar.js +1 -1
  47. package/dist/cjs/components/sidebar.js.map +4 -4
  48. package/dist/cjs/components/spinner.d.ts.map +1 -1
  49. package/dist/cjs/components/spinner.js +1 -1
  50. package/dist/cjs/components/spinner.js.map +2 -2
  51. package/dist/cjs/components/text-area.d.ts.map +1 -1
  52. package/dist/cjs/components/text-area.js +1 -1
  53. package/dist/cjs/components/text-area.js.map +2 -2
  54. package/dist/cjs/components/text-field.d.ts.map +1 -1
  55. package/dist/cjs/components/text-field.js +2 -2
  56. package/dist/cjs/components/text-field.js.map +2 -2
  57. package/dist/cjs/components/theme.d.ts.map +1 -1
  58. package/dist/cjs/components/theme.js +1 -1
  59. package/dist/cjs/components/theme.js.map +4 -4
  60. package/dist/cjs/components/toggle.js +1 -1
  61. package/dist/cjs/components/toggle.js.map +4 -4
  62. package/dist/cjs/components/toolbar.js +1 -1
  63. package/dist/cjs/components/toolbar.js.map +4 -4
  64. package/dist/cjs/components/tooltip.js +1 -1
  65. package/dist/cjs/components/tooltip.js.map +4 -4
  66. package/dist/cjs/index.js +4 -4
  67. package/dist/cjs/index.js.map +4 -4
  68. package/dist/esm/{chunk-UG73IGRF.js → chunk-27XQ5PN5.js} +2 -2
  69. package/dist/esm/{chunk-F2722F7B.js → chunk-2NWHEGKZ.js} +2 -2
  70. package/dist/esm/chunk-2NWHEGKZ.js.map +7 -0
  71. package/dist/esm/{chunk-5FWEGTP6.js → chunk-2R7WQPXX.js} +2 -2
  72. package/dist/esm/chunk-2R7WQPXX.js.map +7 -0
  73. package/dist/esm/{chunk-H2TSRYQ5.js → chunk-324VC67W.js} +2 -2
  74. package/dist/esm/{chunk-TFGUTYZK.js → chunk-3UIODOPE.js} +2 -2
  75. package/dist/esm/chunk-4CIQRUYW.js +6 -0
  76. package/dist/esm/chunk-4CIQRUYW.js.map +7 -0
  77. package/dist/esm/{chunk-OTCVSJT7.js → chunk-4MNRLB57.js} +2 -2
  78. package/dist/esm/{chunk-E6BDD3PN.js → chunk-6C6EK2B5.js} +2 -2
  79. package/dist/esm/{chunk-W4CPV4PO.js → chunk-6JGF6PQH.js} +2 -2
  80. package/dist/esm/{chunk-NYBE3U3V.js → chunk-7QBNXNEN.js} +2 -2
  81. package/dist/esm/{chunk-C2WKAIZM.js → chunk-ACMANOVD.js} +2 -2
  82. package/dist/esm/{chunk-KQIZMPSW.js → chunk-ANQLWGFN.js} +1 -1
  83. package/dist/esm/{chunk-KQIZMPSW.js.map → chunk-ANQLWGFN.js.map} +2 -2
  84. package/dist/esm/chunk-BUXK5VGR.js +3 -0
  85. package/dist/esm/chunk-BUXK5VGR.js.map +7 -0
  86. package/dist/esm/{chunk-7QP6JFPO.js → chunk-C67MM24U.js} +2 -2
  87. package/dist/esm/{chunk-ULCHGKI3.js → chunk-CGFLZ3DC.js} +2 -2
  88. package/dist/esm/{chunk-LFAUMDU5.js → chunk-D2C2A2ZK.js} +2 -2
  89. package/dist/esm/{chunk-MS2ONKJJ.js → chunk-DSM5SUH3.js} +2 -2
  90. package/dist/esm/{chunk-AJANJ22M.js → chunk-E2LSWNWZ.js} +2 -2
  91. package/dist/esm/{chunk-BVQDDN5Q.js → chunk-EB4AG3OL.js} +2 -2
  92. package/dist/esm/{chunk-5PQCTVZB.js → chunk-ENQV6SEA.js} +2 -2
  93. package/dist/esm/{chunk-VVLUY4WR.js → chunk-EPGIYTFK.js} +2 -2
  94. package/dist/esm/{chunk-6M6HGIGN.js → chunk-FK434VPA.js} +2 -2
  95. package/dist/esm/{chunk-TFFMELAL.js → chunk-FYTLUDL3.js} +2 -2
  96. package/dist/esm/chunk-GMWCTK5G.js +3 -0
  97. package/dist/esm/chunk-GMWCTK5G.js.map +7 -0
  98. package/dist/esm/{chunk-F364PDDM.js → chunk-HLIOHDEX.js} +2 -2
  99. package/dist/esm/{chunk-ONJYRJ66.js → chunk-IDEDEPBM.js} +2 -2
  100. package/dist/esm/{chunk-ZKQCSGL3.js → chunk-ISCZ57VL.js} +2 -2
  101. package/dist/esm/{chunk-HVMRB3AH.js → chunk-JD4KR6VZ.js} +2 -2
  102. package/dist/esm/{chunk-NS573D6O.js → chunk-JP36JSNP.js} +2 -2
  103. package/dist/esm/{chunk-N3B6EGXL.js → chunk-KLYI5E6F.js} +2 -2
  104. package/dist/esm/{chunk-GOXGRJO6.js → chunk-MCHK36NI.js} +2 -2
  105. package/dist/esm/{chunk-VIVM525H.js → chunk-MGWGD6KI.js} +2 -2
  106. package/dist/esm/{chunk-K55IQP5H.js → chunk-MPCCYR7L.js} +2 -2
  107. package/dist/esm/chunk-MPCCYR7L.js.map +7 -0
  108. package/dist/esm/{chunk-EERKYRYI.js → chunk-NWXODCTD.js} +2 -2
  109. package/dist/esm/{chunk-3ZWHKNHI.js → chunk-OLTRWCQK.js} +2 -2
  110. package/dist/esm/{chunk-RD4T2MCC.js → chunk-OLWUS7PC.js} +2 -2
  111. package/dist/esm/chunk-OLWUS7PC.js.map +7 -0
  112. package/dist/esm/chunk-OUOP6Q3Z.js +3 -0
  113. package/dist/esm/chunk-OUOP6Q3Z.js.map +7 -0
  114. package/dist/esm/{chunk-UR5BUNNT.js → chunk-Q2TLWILH.js} +2 -2
  115. package/dist/esm/{chunk-VCZ2GYOF.js → chunk-Q5SANVIW.js} +2 -2
  116. package/dist/esm/{chunk-LGZCNQBS.js → chunk-QPRUTOLI.js} +2 -2
  117. package/dist/esm/{chunk-TTW3EAQT.js → chunk-QRV32INS.js} +2 -2
  118. package/dist/esm/chunk-R7YHDIFM.js +3 -0
  119. package/dist/esm/{chunk-M7IQIKB4.js.map → chunk-R7YHDIFM.js.map} +2 -2
  120. package/dist/esm/{chunk-UBUGG2OB.js → chunk-RP5ORPPH.js} +2 -2
  121. package/dist/esm/chunk-T2DZDW5Y.js +3 -0
  122. package/dist/esm/chunk-T2DZDW5Y.js.map +7 -0
  123. package/dist/esm/{chunk-2TWPPDII.js → chunk-UMR4AF35.js} +2 -2
  124. package/dist/esm/chunk-VPP5IDW7.js +3 -0
  125. package/dist/esm/chunk-VPP5IDW7.js.map +7 -0
  126. package/dist/esm/chunk-W3ES2XSB.js +3 -0
  127. package/dist/esm/chunk-W3ES2XSB.js.map +7 -0
  128. package/dist/esm/{chunk-TF6WAIUQ.js → chunk-W4Z6ORYO.js} +2 -2
  129. package/dist/esm/{chunk-ADL3LEOQ.js → chunk-WD66RYF6.js} +2 -2
  130. package/dist/esm/{chunk-TFFU435D.js → chunk-WYKNBNM5.js} +2 -2
  131. package/dist/esm/chunk-WYKNBNM5.js.map +7 -0
  132. package/dist/esm/{chunk-DIY2XQKR.js → chunk-X7JHZ3HA.js} +2 -2
  133. package/dist/esm/{chunk-H33NTGVF.js → chunk-XD3C3GVF.js} +2 -2
  134. package/dist/esm/{chunk-POP5NB33.js → chunk-XGES2VBG.js} +2 -2
  135. package/dist/esm/{chunk-VPUFKJQA.js → chunk-YMUERC2J.js} +2 -2
  136. package/dist/esm/chunk-YOZXIUZY.js +3 -0
  137. package/dist/esm/chunk-YOZXIUZY.js.map +7 -0
  138. package/dist/esm/{chunk-TXVZOS3E.js → chunk-Z5W4ACO2.js} +2 -2
  139. package/dist/esm/{chunk-3QN4C5LW.js → chunk-ZIAA2C4H.js} +2 -2
  140. package/dist/esm/components/_internal/base-button.js +1 -1
  141. package/dist/esm/components/_internal/base-menu.utils.js +1 -1
  142. package/dist/esm/components/_internal/menu-context.js +1 -1
  143. package/dist/esm/components/_internal/pane-band-context.d.ts +4 -3
  144. package/dist/esm/components/_internal/pane-band-context.d.ts.map +1 -1
  145. package/dist/esm/components/_internal/pane-band-context.js +1 -1
  146. package/dist/esm/components/_internal/pane-chrome.js +1 -1
  147. package/dist/esm/components/_internal/portal-theme.d.ts +9 -0
  148. package/dist/esm/components/_internal/portal-theme.d.ts.map +1 -0
  149. package/dist/esm/components/_internal/portal-theme.js +3 -0
  150. package/dist/esm/components/_internal/portal-theme.js.map +7 -0
  151. package/dist/esm/components/_internal/shell-bottom.js +1 -1
  152. package/dist/esm/components/_internal/shell-inspector.js +1 -1
  153. package/dist/esm/components/_internal/shell-sidebar.js +1 -1
  154. package/dist/esm/components/accordion.js +1 -1
  155. package/dist/esm/components/alert-dialog.js +1 -1
  156. package/dist/esm/components/avatar.js +1 -1
  157. package/dist/esm/components/blockquote.js +1 -1
  158. package/dist/esm/components/box.js +1 -1
  159. package/dist/esm/components/button.js +1 -1
  160. package/dist/esm/components/card.js +1 -1
  161. package/dist/esm/components/chatbar.js +1 -1
  162. package/dist/esm/components/checkbox-group.js +1 -1
  163. package/dist/esm/components/checkbox.js +1 -1
  164. package/dist/esm/components/chip.js +1 -1
  165. package/dist/esm/components/code.js +1 -1
  166. package/dist/esm/components/combobox.d.ts.map +1 -1
  167. package/dist/esm/components/combobox.js +1 -1
  168. package/dist/esm/components/context-menu.d.ts.map +1 -1
  169. package/dist/esm/components/context-menu.js +1 -1
  170. package/dist/esm/components/dialog.js +1 -1
  171. package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
  172. package/dist/esm/components/dropdown-menu.js +1 -1
  173. package/dist/esm/components/flex.js +1 -1
  174. package/dist/esm/components/grid.js +1 -1
  175. package/dist/esm/components/heading.js +1 -1
  176. package/dist/esm/components/image.js +1 -1
  177. package/dist/esm/components/index.js +1 -1
  178. package/dist/esm/components/kbd.js +1 -1
  179. package/dist/esm/components/link.js +1 -1
  180. package/dist/esm/components/message-scroller.js +1 -1
  181. package/dist/esm/components/navbar.js +1 -1
  182. package/dist/esm/components/notice.js +1 -1
  183. package/dist/esm/components/popover.js +1 -1
  184. package/dist/esm/components/progress.js +1 -1
  185. package/dist/esm/components/radio-group.js +1 -1
  186. package/dist/esm/components/radio.js +1 -1
  187. package/dist/esm/components/scroll-area.js +1 -1
  188. package/dist/esm/components/segmented-control.js +1 -1
  189. package/dist/esm/components/select.d.ts.map +1 -1
  190. package/dist/esm/components/select.js +1 -1
  191. package/dist/esm/components/separator.js +1 -1
  192. package/dist/esm/components/sheet.js +1 -1
  193. package/dist/esm/components/shell.js +1 -1
  194. package/dist/esm/components/sidebar.js +1 -1
  195. package/dist/esm/components/slider.js +1 -1
  196. package/dist/esm/components/spinner.d.ts.map +1 -1
  197. package/dist/esm/components/spinner.js +1 -1
  198. package/dist/esm/components/switch.js +1 -1
  199. package/dist/esm/components/table.js +1 -1
  200. package/dist/esm/components/tabs.js +1 -1
  201. package/dist/esm/components/text-area.d.ts.map +1 -1
  202. package/dist/esm/components/text-area.js +1 -1
  203. package/dist/esm/components/text-field.d.ts.map +1 -1
  204. package/dist/esm/components/text-field.js +1 -1
  205. package/dist/esm/components/text.js +1 -1
  206. package/dist/esm/components/theme.d.ts.map +1 -1
  207. package/dist/esm/components/theme.js +1 -1
  208. package/dist/esm/components/toggle.js +1 -1
  209. package/dist/esm/components/toolbar.js +1 -1
  210. package/dist/esm/components/tooltip.js +1 -1
  211. package/dist/esm/components/virtual-menu.js +1 -1
  212. package/dist/esm/index.js +1 -1
  213. package/package.json +1 -1
  214. package/src/components/_internal/pane-band-context.ts +4 -3
  215. package/src/components/_internal/portal-theme.tsx +18 -0
  216. package/src/components/alert-dialog.tsx +3 -3
  217. package/src/components/combobox.tsx +4 -3
  218. package/src/components/context-menu.tsx +6 -5
  219. package/src/components/dialog.tsx +3 -3
  220. package/src/components/dropdown-menu.tsx +6 -5
  221. package/src/components/popover.tsx +3 -3
  222. package/src/components/select.tsx +4 -3
  223. package/src/components/sheet.tsx +3 -3
  224. package/src/components/spinner.css +16 -1
  225. package/src/components/spinner.tsx +14 -13
  226. package/src/components/text-area.css +7 -2
  227. package/src/components/text-area.tsx +10 -8
  228. package/src/components/text-field.css +7 -2
  229. package/src/components/text-field.tsx +10 -8
  230. package/src/components/theme.tsx +24 -30
  231. package/src/components/tooltip.tsx +3 -3
  232. package/styles.css +27 -4
  233. package/dist/esm/chunk-3C4Q6PMS.js +0 -3
  234. package/dist/esm/chunk-3C4Q6PMS.js.map +0 -7
  235. package/dist/esm/chunk-457Z4R5W.js +0 -3
  236. package/dist/esm/chunk-457Z4R5W.js.map +0 -7
  237. package/dist/esm/chunk-5FWEGTP6.js.map +0 -7
  238. package/dist/esm/chunk-5MEWNLNH.js +0 -3
  239. package/dist/esm/chunk-5MEWNLNH.js.map +0 -7
  240. package/dist/esm/chunk-BEHAT3GI.js +0 -3
  241. package/dist/esm/chunk-BEHAT3GI.js.map +0 -7
  242. package/dist/esm/chunk-DG2KIH54.js +0 -6
  243. package/dist/esm/chunk-DG2KIH54.js.map +0 -7
  244. package/dist/esm/chunk-DQCE7DHY.js +0 -3
  245. package/dist/esm/chunk-DQCE7DHY.js.map +0 -7
  246. package/dist/esm/chunk-F2722F7B.js.map +0 -7
  247. package/dist/esm/chunk-GE7FRBZ4.js +0 -3
  248. package/dist/esm/chunk-GE7FRBZ4.js.map +0 -7
  249. package/dist/esm/chunk-K55IQP5H.js.map +0 -7
  250. package/dist/esm/chunk-M7IQIKB4.js +0 -3
  251. package/dist/esm/chunk-RD4T2MCC.js.map +0 -7
  252. package/dist/esm/chunk-TFFU435D.js.map +0 -7
  253. /package/dist/esm/{chunk-UG73IGRF.js.map → chunk-27XQ5PN5.js.map} +0 -0
  254. /package/dist/esm/{chunk-H2TSRYQ5.js.map → chunk-324VC67W.js.map} +0 -0
  255. /package/dist/esm/{chunk-TFGUTYZK.js.map → chunk-3UIODOPE.js.map} +0 -0
  256. /package/dist/esm/{chunk-OTCVSJT7.js.map → chunk-4MNRLB57.js.map} +0 -0
  257. /package/dist/esm/{chunk-E6BDD3PN.js.map → chunk-6C6EK2B5.js.map} +0 -0
  258. /package/dist/esm/{chunk-W4CPV4PO.js.map → chunk-6JGF6PQH.js.map} +0 -0
  259. /package/dist/esm/{chunk-NYBE3U3V.js.map → chunk-7QBNXNEN.js.map} +0 -0
  260. /package/dist/esm/{chunk-C2WKAIZM.js.map → chunk-ACMANOVD.js.map} +0 -0
  261. /package/dist/esm/{chunk-7QP6JFPO.js.map → chunk-C67MM24U.js.map} +0 -0
  262. /package/dist/esm/{chunk-ULCHGKI3.js.map → chunk-CGFLZ3DC.js.map} +0 -0
  263. /package/dist/esm/{chunk-LFAUMDU5.js.map → chunk-D2C2A2ZK.js.map} +0 -0
  264. /package/dist/esm/{chunk-MS2ONKJJ.js.map → chunk-DSM5SUH3.js.map} +0 -0
  265. /package/dist/esm/{chunk-AJANJ22M.js.map → chunk-E2LSWNWZ.js.map} +0 -0
  266. /package/dist/esm/{chunk-BVQDDN5Q.js.map → chunk-EB4AG3OL.js.map} +0 -0
  267. /package/dist/esm/{chunk-5PQCTVZB.js.map → chunk-ENQV6SEA.js.map} +0 -0
  268. /package/dist/esm/{chunk-VVLUY4WR.js.map → chunk-EPGIYTFK.js.map} +0 -0
  269. /package/dist/esm/{chunk-6M6HGIGN.js.map → chunk-FK434VPA.js.map} +0 -0
  270. /package/dist/esm/{chunk-TFFMELAL.js.map → chunk-FYTLUDL3.js.map} +0 -0
  271. /package/dist/esm/{chunk-F364PDDM.js.map → chunk-HLIOHDEX.js.map} +0 -0
  272. /package/dist/esm/{chunk-ONJYRJ66.js.map → chunk-IDEDEPBM.js.map} +0 -0
  273. /package/dist/esm/{chunk-ZKQCSGL3.js.map → chunk-ISCZ57VL.js.map} +0 -0
  274. /package/dist/esm/{chunk-HVMRB3AH.js.map → chunk-JD4KR6VZ.js.map} +0 -0
  275. /package/dist/esm/{chunk-NS573D6O.js.map → chunk-JP36JSNP.js.map} +0 -0
  276. /package/dist/esm/{chunk-N3B6EGXL.js.map → chunk-KLYI5E6F.js.map} +0 -0
  277. /package/dist/esm/{chunk-GOXGRJO6.js.map → chunk-MCHK36NI.js.map} +0 -0
  278. /package/dist/esm/{chunk-VIVM525H.js.map → chunk-MGWGD6KI.js.map} +0 -0
  279. /package/dist/esm/{chunk-EERKYRYI.js.map → chunk-NWXODCTD.js.map} +0 -0
  280. /package/dist/esm/{chunk-3ZWHKNHI.js.map → chunk-OLTRWCQK.js.map} +0 -0
  281. /package/dist/esm/{chunk-UR5BUNNT.js.map → chunk-Q2TLWILH.js.map} +0 -0
  282. /package/dist/esm/{chunk-VCZ2GYOF.js.map → chunk-Q5SANVIW.js.map} +0 -0
  283. /package/dist/esm/{chunk-LGZCNQBS.js.map → chunk-QPRUTOLI.js.map} +0 -0
  284. /package/dist/esm/{chunk-TTW3EAQT.js.map → chunk-QRV32INS.js.map} +0 -0
  285. /package/dist/esm/{chunk-UBUGG2OB.js.map → chunk-RP5ORPPH.js.map} +0 -0
  286. /package/dist/esm/{chunk-2TWPPDII.js.map → chunk-UMR4AF35.js.map} +0 -0
  287. /package/dist/esm/{chunk-TF6WAIUQ.js.map → chunk-W4Z6ORYO.js.map} +0 -0
  288. /package/dist/esm/{chunk-ADL3LEOQ.js.map → chunk-WD66RYF6.js.map} +0 -0
  289. /package/dist/esm/{chunk-DIY2XQKR.js.map → chunk-X7JHZ3HA.js.map} +0 -0
  290. /package/dist/esm/{chunk-H33NTGVF.js.map → chunk-XD3C3GVF.js.map} +0 -0
  291. /package/dist/esm/{chunk-POP5NB33.js.map → chunk-XGES2VBG.js.map} +0 -0
  292. /package/dist/esm/{chunk-VPUFKJQA.js.map → chunk-YMUERC2J.js.map} +0 -0
  293. /package/dist/esm/{chunk-TXVZOS3E.js.map → chunk-Z5W4ACO2.js.map} +0 -0
  294. /package/dist/esm/{chunk-3QN4C5LW.js.map → chunk-ZIAA2C4H.js.map} +0 -0
package/dist/esm/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import"./chunk-AYKOOEZR.js";import{a as uo}from"./chunk-RIHTVZVJ.js";import{a as vo,b as wo,c as yo,d as zo}from"./chunk-3LIF53YY.js";import{a as so}from"./chunk-WTP2KIK3.js";import"./chunk-NG54K6FL.js";import{c as fo}from"./chunk-DG2KIH54.js";import{a as mo}from"./chunk-2TWPPDII.js";import{a as po,c as to,d as xo,e as ao,f as bo,g as co,h as go,i as ho,j as io}from"./chunk-6M6HGIGN.js";import{a as jo}from"./chunk-NYBE3U3V.js";import{l as ko}from"./chunk-UR5BUNNT.js";import{a as _}from"./chunk-ONJYRJ66.js";import{a as $}from"./chunk-MS2ONKJJ.js";import{h as oo}from"./chunk-DIY2XQKR.js";import{e as ro}from"./chunk-3QN4C5LW.js";import{a as eo}from"./chunk-M7IQIKB4.js";import{c as X}from"./chunk-TF6WAIUQ.js";import{h as Y}from"./chunk-5MEWNLNH.js";import{a as Z}from"./chunk-H2TSRYQ5.js";import{g as no}from"./chunk-5FWEGTP6.js";import{h as lo}from"./chunk-POP5NB33.js";import"./chunk-4G3FJUER.js";import"./chunk-ZG2XQUOH.js";import{a as V}from"./chunk-W4CPV4PO.js";import{a as W}from"./chunk-L66IUPDW.js";import{a as Q}from"./chunk-7QP6JFPO.js";import{i as qo}from"./chunk-TXVZOS3E.js";import{e as R}from"./chunk-EERKYRYI.js";import{a as S}from"./chunk-AXODGYRY.js";import{a as T}from"./chunk-LFAUMDU5.js";import{c as U}from"./chunk-AJANJ22M.js";import{o as N}from"./chunk-457Z4R5W.js";import{a as O}from"./chunk-VCZ2GYOF.js";import{a as P}from"./chunk-5PQCTVZB.js";import{c as F}from"./chunk-TFFMELAL.js";import"./chunk-2VSRZ4IT.js";import{a as G}from"./chunk-HVMRB3AH.js";import"./chunk-4KIZRO52.js";import{a as H}from"./chunk-TFGUTYZK.js";import{a as I}from"./chunk-ADL3LEOQ.js";import{l as K}from"./chunk-BEHAT3GI.js";import{g as J}from"./chunk-RD4T2MCC.js";import{n as L}from"./chunk-3C4Q6PMS.js";import"./chunk-2ACVWLFA.js";import{g as M}from"./chunk-TFFU435D.js";import{f as d}from"./chunk-UBUGG2OB.js";import{h as n}from"./chunk-F2722F7B.js";import"./chunk-FATCGZZE.js";import{a as l}from"./chunk-7VJF6EXN.js";import{a as g}from"./chunk-NS573D6O.js";import"./chunk-TGRHRMQI.js";import{a as q}from"./chunk-GOXGRJO6.js";import{a as s}from"./chunk-F364PDDM.js";import{a as u}from"./chunk-H33NTGVF.js";import{a as A}from"./chunk-VVLUY4WR.js";import{m as E}from"./chunk-N3B6EGXL.js";import{b as B,c as C}from"./chunk-E6BDD3PN.js";import{a as D}from"./chunk-WUCBFB25.js";import{a as z}from"./chunk-ULCHGKI3.js";import{a as y}from"./chunk-Y2DBXOLT.js";import{a as v,b as w}from"./chunk-K55IQP5H.js";import{a as h}from"./chunk-OTCVSJT7.js";import"./chunk-BQC2P3SN.js";import{a as i,b as j,c as k}from"./chunk-GE7FRBZ4.js";import"./chunk-GHUAUFG7.js";import"./chunk-UJ7JERJ5.js";import"./chunk-VPUFKJQA.js";import"./chunk-C2WKAIZM.js";import{a as c}from"./chunk-B6YGNB3V.js";import"./chunk-UG73IGRF.js";import{a as f}from"./chunk-DQCE7DHY.js";import{a as e}from"./chunk-KVVRFWGQ.js";import"./chunk-YCLPURTD.js";import"./chunk-CR65RYGM.js";import{a as m,b as p,c as t,d as x}from"./chunk-GKDGNPBD.js";import"./chunk-HBWBPBSA.js";import"./chunk-7N2Q5WOM.js";import"./chunk-OAJ5DARR.js";import{b as o,c as r}from"./chunk-5KMEUZWN.js";import"./chunk-5ON3XLRD.js";import"./chunk-5JYSYTHA.js";import"./chunk-ZKQCSGL3.js";import"./chunk-BVQDDN5Q.js";import{a}from"./chunk-LGZCNQBS.js";import"./chunk-3ZWHKNHI.js";import{a as b}from"./chunk-VIVM525H.js";import"./chunk-KOAWATCI.js";import"./chunk-5KJIPH2N.js";import"./chunk-YOSLXJI5.js";import"./chunk-XU74PNM2.js";import"./chunk-LPLW7OWA.js";import"./chunk-L54FWKJE.js";import"./chunk-CLJ6SEGP.js";import"./chunk-OKQAVYW4.js";import"./chunk-KQIZMPSW.js";import"./chunk-TTW3EAQT.js";import"./chunk-LTUW36HM.js";import"./chunk-QKCNGEX4.js";import"./chunk-XUCR7L4G.js";import"./chunk-G66WDIIV.js";import"./chunk-GHWEXMF6.js";import"./chunk-MAA6LEE2.js";import"./chunk-3QWGSRYC.js";import"./chunk-WEBNIUEX.js";import"./chunk-VQPANPMI.js";export{vo as APPEARANCE_STORAGE_KEY,c as AccessibleIcon,d as Accordion,n as AlertDialog,q as Avatar,s as Blockquote,u as Box,z as Button,A as Card,E as Chatbar,G as Checkbox,F as CheckboxGroup,t as ChevronDownIcon,H as Chip,I as Code,K as Combobox,C as Confirmation,L as ContextMenu,M as Dialog,N as DropdownMenu,e as Flex,O as Grid,g as Heading,P as Image,a as Kbd,Q as Link,qo as MessageScroller,R as Navbar,B as Notice,J as Popover,S as Portal,T as Progress,V as Radio,U as RadioGroup,W as Reset,b as ScrollArea,X as SegmentedControl,Y as Select,Z as Separator,no as Sheet,lo as Shell,ko as Sidebar,_ as Slider,o as Slot,r as Slottable,f as Spinner,$ as Switch,oo as Table,ro as Tabs,h as Text,eo as TextArea,fo as TextField,k as Theme,i as ThemeContext,p as ThickCheckIcon,x as ThickChevronRightIcon,m as ThickDividerHorizontalIcon,mo as Toggle,io as Toolbar,xo as ToolbarButton,co as ToolbarFill,to as ToolbarGroup,ao as ToolbarOverflow,go as ToolbarSeparator,bo as ToolbarSlot,ho as ToolbarTitle,w as Tooltip,v as TooltipProvider,jo as VirtualMenu,D as VisuallyHidden,wo as appearanceScript,yo as setAppearance,zo as useAppearance,l as useBodyPointerEventsCleanup,so as useLiveAnnouncer,j as useThemeContext,uo as useToggleState,po as useToolbarOverflow,y as useTooltipWrapper};
2
+ import"./chunk-AYKOOEZR.js";import{a as uo}from"./chunk-RIHTVZVJ.js";import{a as vo,b as wo,c as yo,d as zo}from"./chunk-3LIF53YY.js";import{a as so}from"./chunk-WTP2KIK3.js";import"./chunk-NG54K6FL.js";import{a as eo}from"./chunk-R7YHDIFM.js";import{c as fo}from"./chunk-4CIQRUYW.js";import{a as mo}from"./chunk-UMR4AF35.js";import{a as po,c as to,d as xo,e as ao,f as bo,g as co,h as go,i as ho,j as io}from"./chunk-FK434VPA.js";import{a as jo}from"./chunk-7QBNXNEN.js";import{l as ko}from"./chunk-Q2TLWILH.js";import{a as _}from"./chunk-IDEDEPBM.js";import{a as $}from"./chunk-DSM5SUH3.js";import{h as oo}from"./chunk-X7JHZ3HA.js";import{e as ro}from"./chunk-ZIAA2C4H.js";import{c as X}from"./chunk-W4Z6ORYO.js";import{h as Y}from"./chunk-OUOP6Q3Z.js";import{a as Z}from"./chunk-324VC67W.js";import{g as no}from"./chunk-2R7WQPXX.js";import{h as lo}from"./chunk-XGES2VBG.js";import"./chunk-4G3FJUER.js";import"./chunk-ZG2XQUOH.js";import{c as U}from"./chunk-E2LSWNWZ.js";import{a as V}from"./chunk-6JGF6PQH.js";import{a as W}from"./chunk-L66IUPDW.js";import{a as Q}from"./chunk-C67MM24U.js";import{i as qo}from"./chunk-Z5W4ACO2.js";import{e as R}from"./chunk-NWXODCTD.js";import{a as S}from"./chunk-AXODGYRY.js";import{a as T}from"./chunk-D2C2A2ZK.js";import{g as M}from"./chunk-WYKNBNM5.js";import{o as N}from"./chunk-VPP5IDW7.js";import{a as O}from"./chunk-Q5SANVIW.js";import{a as P}from"./chunk-ENQV6SEA.js";import{m as E}from"./chunk-KLYI5E6F.js";import{b as B,c as C}from"./chunk-6C6EK2B5.js";import{c as F}from"./chunk-FYTLUDL3.js";import"./chunk-2VSRZ4IT.js";import{a as G}from"./chunk-JD4KR6VZ.js";import"./chunk-4KIZRO52.js";import{a as H}from"./chunk-3UIODOPE.js";import{a as I}from"./chunk-WD66RYF6.js";import{l as K}from"./chunk-GMWCTK5G.js";import{g as J}from"./chunk-OLWUS7PC.js";import{a as D}from"./chunk-WUCBFB25.js";import{n as L}from"./chunk-W3ES2XSB.js";import"./chunk-2ACVWLFA.js";import{a as h}from"./chunk-B6YGNB3V.js";import{f as i}from"./chunk-RP5ORPPH.js";import{h as n}from"./chunk-2NWHEGKZ.js";import"./chunk-FATCGZZE.js";import{a as l}from"./chunk-7VJF6EXN.js";import{a as j}from"./chunk-JP36JSNP.js";import"./chunk-TGRHRMQI.js";import{a as q}from"./chunk-MCHK36NI.js";import{a as s}from"./chunk-HLIOHDEX.js";import{a as u}from"./chunk-XD3C3GVF.js";import{a as z}from"./chunk-CGFLZ3DC.js";import{a as y}from"./chunk-Y2DBXOLT.js";import{a as v,b as w}from"./chunk-MPCCYR7L.js";import{a as k}from"./chunk-4MNRLB57.js";import"./chunk-BQC2P3SN.js";import"./chunk-UJ7JERJ5.js";import{a as A}from"./chunk-EPGIYTFK.js";import"./chunk-YMUERC2J.js";import"./chunk-ACMANOVD.js";import"./chunk-27XQ5PN5.js";import{a as f}from"./chunk-BUXK5VGR.js";import{a as e}from"./chunk-KVVRFWGQ.js";import"./chunk-YCLPURTD.js";import"./chunk-CR65RYGM.js";import{a as m,b as p,c as t,d as x}from"./chunk-GKDGNPBD.js";import"./chunk-7N2Q5WOM.js";import"./chunk-OAJ5DARR.js";import{b as o,c as r}from"./chunk-5KMEUZWN.js";import"./chunk-5JYSYTHA.js";import"./chunk-ISCZ57VL.js";import"./chunk-EB4AG3OL.js";import{a}from"./chunk-QPRUTOLI.js";import"./chunk-OLTRWCQK.js";import{a as b}from"./chunk-MGWGD6KI.js";import"./chunk-KOAWATCI.js";import"./chunk-5KJIPH2N.js";import"./chunk-YOSLXJI5.js";import"./chunk-LPLW7OWA.js";import"./chunk-L54FWKJE.js";import"./chunk-OKQAVYW4.js";import"./chunk-T2DZDW5Y.js";import{a as c,b as d,c as g}from"./chunk-YOZXIUZY.js";import"./chunk-GHUAUFG7.js";import"./chunk-HBWBPBSA.js";import"./chunk-5ON3XLRD.js";import"./chunk-XU74PNM2.js";import"./chunk-CLJ6SEGP.js";import"./chunk-ANQLWGFN.js";import"./chunk-QRV32INS.js";import"./chunk-3QWGSRYC.js";import"./chunk-LTUW36HM.js";import"./chunk-QKCNGEX4.js";import"./chunk-WEBNIUEX.js";import"./chunk-XUCR7L4G.js";import"./chunk-G66WDIIV.js";import"./chunk-GHWEXMF6.js";import"./chunk-MAA6LEE2.js";import"./chunk-VQPANPMI.js";export{vo as APPEARANCE_STORAGE_KEY,h as AccessibleIcon,i as Accordion,n as AlertDialog,q as Avatar,s as Blockquote,u as Box,z as Button,A as Card,E as Chatbar,G as Checkbox,F as CheckboxGroup,t as ChevronDownIcon,H as Chip,I as Code,K as Combobox,C as Confirmation,L as ContextMenu,M as Dialog,N as DropdownMenu,e as Flex,O as Grid,j as Heading,P as Image,a as Kbd,Q as Link,qo as MessageScroller,R as Navbar,B as Notice,J as Popover,S as Portal,T as Progress,V as Radio,U as RadioGroup,W as Reset,b as ScrollArea,X as SegmentedControl,Y as Select,Z as Separator,no as Sheet,lo as Shell,ko as Sidebar,_ as Slider,o as Slot,r as Slottable,f as Spinner,$ as Switch,oo as Table,ro as Tabs,k as Text,eo as TextArea,fo as TextField,g as Theme,c as ThemeContext,p as ThickCheckIcon,x as ThickChevronRightIcon,m as ThickDividerHorizontalIcon,mo as Toggle,io as Toolbar,xo as ToolbarButton,co as ToolbarFill,to as ToolbarGroup,ao as ToolbarOverflow,go as ToolbarSeparator,bo as ToolbarSlot,ho as ToolbarTitle,w as Tooltip,v as TooltipProvider,jo as VirtualMenu,D as VisuallyHidden,wo as appearanceScript,yo as setAppearance,zo as useAppearance,l as useBodyPointerEventsCleanup,so as useLiveAnnouncer,d as useThemeContext,uo as useToggleState,po as useToolbarOverflow,y as useTooltipWrapper};
3
3
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@womp/kookie-ui",
3
- "version": "0.26.2",
3
+ "version": "0.26.3",
4
4
  "description": "Kookie UI v1: a React component library with design tokens, flexible theming, a full layout shell, and comprehensive documentation.",
5
5
  "keywords": [
6
6
  "react",
@@ -4,11 +4,12 @@ type BandSize = '1' | '2' | '3' | '4';
4
4
 
5
5
  /**
6
6
  * Set by `Shell.PaneHeader` and `Shell.PaneFooter` to their band size, and by `Shell.Scroll` to
7
- * null (a scrolling list has no band). A `Theme asChild`, the root of every portalled surface
7
+ * null (a scrolling list has no band). `PortalTheme`, the root of every portalled surface
8
8
  * (Popover, Dialog, Sheet, menus), sets null too, so a Toolbar in one does not take the Shell's
9
- * step. `Shell.Root` clears it again. Unset (`undefined`) everywhere else.
9
+ * step; a `Theme asChild` an app nests in a pane leaves it alone. `Shell.Root` clears it again.
10
+ * Unset (`undefined`) everywhere else.
10
11
  *
11
- * Its own module so Theme can reset it without bringing the Shell.
12
+ * Its own module so PortalTheme can reset it without bringing the Shell.
12
13
  */
13
14
  const PaneBandSizeContext = React.createContext<BandSize | null | undefined>(undefined);
14
15
 
@@ -0,0 +1,18 @@
1
+ import * as React from 'react';
2
+
3
+ import { Theme } from '../theme.js';
4
+ import { PaneBandSizeContext } from './pane-band-context.js';
5
+
6
+ /**
7
+ * The Theme at the root of a portalled surface (Popover, Dialog, Sheet, menus, Tooltip). The
8
+ * surface renders outside any Shell pane even though context flows into it, so a Toolbar in it
9
+ * does not take the pane's band size. A `Theme asChild` an app nests in a pane keeps the band.
10
+ */
11
+ const PortalTheme = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<typeof Theme>>((props, forwardedRef) => (
12
+ <PaneBandSizeContext.Provider value={null}>
13
+ <Theme {...props} ref={forwardedRef} />
14
+ </PaneBandSizeContext.Provider>
15
+ ));
16
+ PortalTheme.displayName = 'PortalTheme';
17
+
18
+ export { PortalTheme };
@@ -5,7 +5,7 @@ import { AlertDialog as AlertDialogPrimitive } from 'radix-ui';
5
5
  import { alertDialogContentPropDefs } from './alert-dialog.props.js';
6
6
  import { Heading } from './heading.js';
7
7
  import { Text } from './text.js';
8
- import { Theme } from './theme.js';
8
+ import { PortalTheme } from './_internal/portal-theme.js';
9
9
  import { extractProps } from '../helpers/extract-props.js';
10
10
  import { useThemeSizeProps } from '../hooks/theme-size.js';
11
11
  import { requireReactElement } from '../helpers/require-react-element.js';
@@ -48,7 +48,7 @@ const AlertDialogContent = React.forwardRef<AlertDialogContentElement, AlertDial
48
48
 
49
49
  return (
50
50
  <AlertDialogPrimitive.Portal container={container} forceMount={forceMount}>
51
- <Theme asChild>
51
+ <PortalTheme asChild>
52
52
  <AlertDialogPrimitive.Overlay className="kui-BaseDialogOverlay kui-AlertDialogOverlay">
53
53
  <div className="kui-BaseDialogScroll kui-AlertDialogScroll">
54
54
  <div className={`kui-BaseDialogScrollPadding kui-AlertDialogScrollPadding ${alignClassName}`}>
@@ -67,7 +67,7 @@ const AlertDialogContent = React.forwardRef<AlertDialogContentElement, AlertDial
67
67
  </div>
68
68
  </div>
69
69
  </AlertDialogPrimitive.Overlay>
70
- </Theme>
70
+ </PortalTheme>
71
71
  </AlertDialogPrimitive.Portal>
72
72
  );
73
73
  });
@@ -29,7 +29,8 @@ import { useThemeSize } from '../hooks/theme-size.js';
29
29
  import { comboboxRootPropDefs, comboboxTriggerPropDefs, comboboxContentPropDefs } from './combobox.props.js';
30
30
  import { ChevronDownIcon, ThickCheckIcon } from './icons.js';
31
31
  import { Spinner } from './spinner.js';
32
- import { Theme, useThemeContext } from './theme.js';
32
+ import { useThemeContext } from './theme.js';
33
+ import { PortalTheme } from './_internal/portal-theme.js';
33
34
  import { requireReactElement } from '../helpers/require-react-element.js';
34
35
  import * as Popover from './popover.js';
35
36
  import { Slottable } from './slot.js';
@@ -543,7 +544,7 @@ const ComboboxContent = React.forwardRef<ComboboxContentElement, ComboboxContent
543
544
 
544
545
  return (
545
546
  <PopoverPrimitive.Portal container={container} forceMount={forceMount ? true : undefined}>
546
- <Theme asChild>
547
+ <PortalTheme asChild>
547
548
  <PopoverPrimitive.Content
548
549
  data-accent-color={resolvedColor}
549
550
  align="start"
@@ -573,7 +574,7 @@ const ComboboxContent = React.forwardRef<ComboboxContentElement, ComboboxContent
573
574
  </CommandPrimitive>
574
575
  </ComboboxContentContext.Provider>
575
576
  </PopoverPrimitive.Content>
576
- </Theme>
577
+ </PortalTheme>
577
578
  </PopoverPrimitive.Portal>
578
579
  );
579
580
  });
@@ -17,7 +17,8 @@ import {
17
17
  contextMenuCheckboxItemPropDefs,
18
18
  contextMenuRadioItemPropDefs,
19
19
  } from './context-menu.props.js';
20
- import { Theme, useThemeContext } from './theme.js';
20
+ import { useThemeContext } from './theme.js';
21
+ import { PortalTheme } from './_internal/portal-theme.js';
21
22
  import { ThickCheckIcon, ThickChevronRightIcon, ThickDotIcon } from './icons.js';
22
23
  import { extractProps } from '../helpers/extract-props.js';
23
24
  import { useThemeSizeProps } from '../hooks/theme-size.js';
@@ -133,7 +134,7 @@ const ContextMenuContent = React.forwardRef<ContextMenuContentElement, ContextMe
133
134
 
134
135
  return (
135
136
  <ContextMenuPrimitive.Portal container={container} forceMount={forceMount}>
136
- <Theme asChild>
137
+ <PortalTheme asChild>
137
138
  <ContextMenuPrimitive.Content
138
139
  data-accent-color={resolvedColor}
139
140
  alignOffset={getMenuAlignOffset(scalarSize)}
@@ -159,7 +160,7 @@ const ContextMenuContent = React.forwardRef<ContextMenuContentElement, ContextMe
159
160
  </ScrollArea>
160
161
  )}
161
162
  </ContextMenuPrimitive.Content>
162
- </Theme>
163
+ </PortalTheme>
163
164
  </ContextMenuPrimitive.Portal>
164
165
  );
165
166
  },
@@ -419,7 +420,7 @@ const ContextMenuSubContent = React.forwardRef<
419
420
 
420
421
  return (
421
422
  <ContextMenuPrimitive.Portal container={container} forceMount={forceMount}>
422
- <Theme asChild>
423
+ <PortalTheme asChild>
423
424
  <ContextMenuPrimitive.SubContent
424
425
  data-accent-color={color}
425
426
  alignOffset={getMenuAlignOffset(scalarSize)}
@@ -449,7 +450,7 @@ const ContextMenuSubContent = React.forwardRef<
449
450
  </ScrollArea>
450
451
  )}
451
452
  </ContextMenuPrimitive.SubContent>
452
- </Theme>
453
+ </PortalTheme>
453
454
  </ContextMenuPrimitive.Portal>
454
455
  );
455
456
  });
@@ -5,7 +5,7 @@ import { Dialog as DialogPrimitive } from 'radix-ui';
5
5
  import { dialogContentPropDefs } from './dialog.props.js';
6
6
  import { Heading } from './heading.js';
7
7
  import { Text } from './text.js';
8
- import { Theme } from './theme.js';
8
+ import { PortalTheme } from './_internal/portal-theme.js';
9
9
  import { extractProps } from '../helpers/extract-props.js';
10
10
  import { useThemeSizeProps } from '../hooks/theme-size.js';
11
11
  import { requireReactElement } from '../helpers/require-react-element.js';
@@ -48,7 +48,7 @@ const DialogContent = React.forwardRef<DialogContentElement, DialogContentProps>
48
48
 
49
49
  return (
50
50
  <DialogPrimitive.Portal container={container} forceMount={forceMount}>
51
- <Theme asChild>
51
+ <PortalTheme asChild>
52
52
  <DialogPrimitive.Overlay className="kui-BaseDialogOverlay kui-DialogOverlay">
53
53
  <div className="kui-BaseDialogScroll kui-DialogScroll">
54
54
  <div className={`kui-BaseDialogScrollPadding kui-DialogScrollPadding ${alignClassName}`}>
@@ -67,7 +67,7 @@ const DialogContent = React.forwardRef<DialogContentElement, DialogContentProps>
67
67
  </div>
68
68
  </div>
69
69
  </DialogPrimitive.Overlay>
70
- </Theme>
70
+ </PortalTheme>
71
71
  </DialogPrimitive.Portal>
72
72
  );
73
73
  });
@@ -13,7 +13,8 @@ import {
13
13
  dropdownMenuCheckboxItemPropDefs,
14
14
  dropdownMenuRadioItemPropDefs,
15
15
  } from './dropdown-menu.props.js';
16
- import { Theme, useThemeContext } from './theme.js';
16
+ import { useThemeContext } from './theme.js';
17
+ import { PortalTheme } from './_internal/portal-theme.js';
17
18
  import { ChevronDownIcon, ThickCheckIcon, ThickChevronLeftIcon, ThickChevronRightIcon, ThickDotIcon } from './icons.js';
18
19
  import { extractProps } from '../helpers/extract-props.js';
19
20
  import { useThemeSizeProps } from '../hooks/theme-size.js';
@@ -196,7 +197,7 @@ const DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, Dropdow
196
197
 
197
198
  return (
198
199
  <DropdownMenuPrimitive.Portal container={container} forceMount={forceMount}>
199
- <Theme asChild>
200
+ <PortalTheme asChild>
200
201
  <DropdownMenuPrimitive.Content
201
202
  data-accent-color={resolvedColor}
202
203
  align="start"
@@ -227,7 +228,7 @@ const DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, Dropdow
227
228
  </ScrollArea>
228
229
  )}
229
230
  </DropdownMenuPrimitive.Content>
230
- </Theme>
231
+ </PortalTheme>
231
232
  </DropdownMenuPrimitive.Portal>
232
233
  );
233
234
  },
@@ -724,7 +725,7 @@ const CascadeSubContent = React.forwardRef<DropdownMenuSubContentElement, Dropdo
724
725
 
725
726
  return (
726
727
  <DropdownMenuPrimitive.Portal container={container} forceMount={forceMount}>
727
- <Theme asChild>
728
+ <PortalTheme asChild>
728
729
  <DropdownMenuPrimitive.SubContent
729
730
  data-accent-color={color}
730
731
  alignOffset={getMenuAlignOffset(scalarSize)}
@@ -754,7 +755,7 @@ const CascadeSubContent = React.forwardRef<DropdownMenuSubContentElement, Dropdo
754
755
  </ScrollArea>
755
756
  )}
756
757
  </DropdownMenuPrimitive.SubContent>
757
- </Theme>
758
+ </PortalTheme>
758
759
  </DropdownMenuPrimitive.Portal>
759
760
  );
760
761
  },
@@ -6,7 +6,7 @@ import { extractProps } from '../helpers/extract-props.js';
6
6
  import { useThemeSizeProps } from '../hooks/theme-size.js';
7
7
  import { requireReactElement } from '../helpers/require-react-element.js';
8
8
  import { popoverContentPropDefs } from './popover.props.js';
9
- import { Theme } from './theme.js';
9
+ import { PortalTheme } from './_internal/portal-theme.js';
10
10
 
11
11
  import type { PopoverContentOwnProps } from './popover.props.js';
12
12
  import type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';
@@ -69,7 +69,7 @@ const PopoverContent = React.forwardRef<PopoverContentElement, PopoverContentPro
69
69
 
70
70
  return (
71
71
  <PopoverPrimitive.Portal container={container} forceMount={forceMount}>
72
- <Theme asChild>
72
+ <PortalTheme asChild>
73
73
  <PopoverPrimitive.Content
74
74
  align="start"
75
75
  sideOffset={8}
@@ -84,7 +84,7 @@ const PopoverContent = React.forwardRef<PopoverContentElement, PopoverContentPro
84
84
  {props.children}
85
85
  </PopoverContentContext.Provider>
86
86
  </PopoverPrimitive.Content>
87
- </Theme>
87
+ </PortalTheme>
88
88
  </PopoverPrimitive.Portal>
89
89
  );
90
90
  },
@@ -13,7 +13,8 @@ import {
13
13
  selectTriggerPropDefs,
14
14
  selectContentPropDefs,
15
15
  } from './select.props.js';
16
- import { useThemeContext, Theme } from './theme.js';
16
+ import { useThemeContext } from './theme.js';
17
+ import { PortalTheme } from './_internal/portal-theme.js';
17
18
  import { useThumbSync } from '../hooks/use-thumb-sync.js';
18
19
 
19
20
  import type { GetPropDefTypes } from '../props/prop-def.js';
@@ -203,7 +204,7 @@ const SelectContent = React.forwardRef<SelectContentElement, SelectContentProps>
203
204
  const resolvedColor = color || themeContext.accentColor;
204
205
  return (
205
206
  <SelectPrimitive.Portal container={container}>
206
- <Theme asChild>
207
+ <PortalTheme asChild>
207
208
  <SelectPrimitive.Content
208
209
  data-accent-color={resolvedColor}
209
210
  sideOffset={4}
@@ -220,7 +221,7 @@ const SelectContent = React.forwardRef<SelectContentElement, SelectContentProps>
220
221
  >
221
222
  <SelectScrollArea>{children}</SelectScrollArea>
222
223
  </SelectPrimitive.Content>
223
- </Theme>
224
+ </PortalTheme>
224
225
  </SelectPrimitive.Portal>
225
226
  );
226
227
  },
@@ -38,7 +38,7 @@ import { Dialog as DialogPrimitive } from 'radix-ui';
38
38
 
39
39
  import { dialogContentPropDefs } from './dialog.props.js';
40
40
  import type { DialogContentOwnProps } from './dialog.props.js';
41
- import { Theme } from './theme.js';
41
+ import { PortalTheme } from './_internal/portal-theme.js';
42
42
  import { Heading } from './heading.js';
43
43
  import { Text } from './text.js';
44
44
  import { extractProps } from '../helpers/extract-props.js';
@@ -147,7 +147,7 @@ const Content = React.forwardRef<SheetContentElement, SheetContentProps>((allPro
147
147
  return (
148
148
  <DialogPrimitive.Portal container={container} forceMount={forceMount}>
149
149
  <SheetTitleCountContext.Provider value={titleCountRef}>
150
- <Theme asChild>
150
+ <PortalTheme asChild>
151
151
  <DialogPrimitive.Overlay className="kui-BaseDialogOverlay kui-DialogOverlay kui-SheetOverlay">
152
152
  <DialogPrimitive.Content
153
153
  {...contentProps}
@@ -157,7 +157,7 @@ const Content = React.forwardRef<SheetContentElement, SheetContentProps>((allPro
157
157
  aria-modal="true"
158
158
  />
159
159
  </DialogPrimitive.Overlay>
160
- </Theme>
160
+ </PortalTheme>
161
161
  </SheetTitleCountContext.Provider>
162
162
  </DialogPrimitive.Portal>
163
163
  );
@@ -98,8 +98,23 @@
98
98
  }
99
99
  }
100
100
 
101
+ /* A Spinner with children is one tree, loading or not. At rest it steps out of layout. */
102
+ .kui-SpinnerHost:where(:not([data-loading])) {
103
+ display: contents;
104
+ }
105
+
106
+ .kui-SpinnerHost:where([data-loading]) {
107
+ position: relative;
108
+ display: flex;
109
+ align-items: center;
110
+ justify-content: center;
111
+ }
112
+
113
+ .kui-SpinnerChildren {
114
+ display: contents;
115
+ }
116
+
101
117
  /* Children of a Spinner keep their space but are not shown while it spins. A class, not an inline style. */
102
118
  .kui-SpinnerHiddenChildren {
103
- display: contents;
104
119
  visibility: hidden;
105
120
  }
@@ -19,7 +19,8 @@ const Spinner = React.forwardRef<SpinnerElement, SpinnerProps>((props, forwarded
19
19
  spinnerPropDefs
20
20
  );
21
21
 
22
- if (!loading) return children;
22
+ // Without children a Spinner is only the wheel, shown while loading.
23
+ if (children === undefined && !loading) return null;
23
24
 
24
25
  // Decorative unless named: a named spinner is a status message, an unnamed one is hidden.
25
26
  const named =
@@ -50,22 +51,22 @@ const Spinner = React.forwardRef<SpinnerElement, SpinnerProps>((props, forwarded
50
51
 
51
52
  if (children === undefined) return spinner;
52
53
 
54
+ // With children, one tree whether loading or not, so starting or stopping never remounts them
55
+ // (their state, focus and refs survive). At rest the host is `display: contents`; while loading
56
+ // it centres the wheel over the children, which keep their space but are hidden.
53
57
  return (
54
- <Flex asChild position="relative" align="center" justify="center">
55
- <span aria-busy="true">
56
- {/**
57
- * `display: contents` removes the content from the accessibility tree in some browsers,
58
- * so we force remove it with `aria-hidden`
59
- */}
60
- <span aria-hidden className="kui-SpinnerHiddenChildren">
61
- {children}
62
- </span>
63
-
58
+ <span className="kui-SpinnerHost" data-loading={loading || undefined} aria-busy={loading || undefined}>
59
+ {/* `display: contents` removes the content from the accessibility tree in some browsers, so
60
+ while loading it is removed with `aria-hidden` too. */}
61
+ <span aria-hidden={loading || undefined} className={classNames('kui-SpinnerChildren', loading && 'kui-SpinnerHiddenChildren')}>
62
+ {children}
63
+ </span>
64
+ {loading ? (
64
65
  <Flex asChild align="center" justify="center" position="absolute" inset="0">
65
66
  <span>{spinner}</span>
66
67
  </Flex>
67
- </span>
68
- </Flex>
68
+ ) : null}
69
+ </span>
69
70
  );
70
71
  });
71
72
  Spinner.displayName = 'Spinner';
@@ -464,8 +464,13 @@
464
464
  * *
465
465
  ***************************************************************************************************/
466
466
 
467
- /* With an error message, one box holds the field and the message below it. */
468
- .kui-TextAreaWrapper {
467
+ /* With an error message, one box holds the field and the message below it. Without one the
468
+ wrapper steps out of layout, and the field is the box. */
469
+ .kui-TextAreaWrapper:where(:not([data-message])) {
470
+ display: contents;
471
+ }
472
+
473
+ .kui-TextAreaWrapper:where([data-message]) {
469
474
  display: flex;
470
475
  flex-direction: column;
471
476
  min-width: 0;
@@ -81,16 +81,18 @@ const TextArea = React.forwardRef<TextAreaElement, TextAreaProps>((ownProps, for
81
81
  />
82
82
  </div>
83
83
  );
84
- if (!wrapped) return field;
85
-
86
- // With a message, one wrapper holds the box and the message below it, so the parent still
87
- // lays out a single box and the caller's className and style size the pair.
84
+ // The wrapper is always there, so a message coming or going never moves the field in the tree:
85
+ // moving it would remount the input, dropping focus, the caret and an uncontrolled value. With
86
+ // no message it is `display: contents` and the field is the box the parent lays out; with one
87
+ // it holds the field and the message below it, and the caller's className and style size the pair.
88
88
  return (
89
- <div className={classNames('kui-TextAreaWrapper', ownClassName)} style={ownStyle}>
89
+ <div className={classNames('kui-TextAreaWrapper', wrapped && ownClassName)} style={wrapped ? ownStyle : undefined} data-message={wrapped || undefined}>
90
90
  {field}
91
- <div id={errorId} className="kui-TextAreaErrorMessage" role="alert">
92
- {textAreaProps.errorMessage}
93
- </div>
91
+ {wrapped ? (
92
+ <div id={errorId} className="kui-TextAreaErrorMessage" role="alert">
93
+ {textAreaProps.errorMessage}
94
+ </div>
95
+ ) : null}
94
96
  </div>
95
97
  );
96
98
  });
@@ -645,8 +645,13 @@
645
645
  }
646
646
 
647
647
  /* Error message styling */
648
- /* With an error message, one box holds the field and the message below it. */
649
- .kui-TextFieldWrapper {
648
+ /* With an error message, one box holds the field and the message below it. Without one the
649
+ wrapper steps out of layout, and the field is the box. */
650
+ .kui-TextFieldWrapper:where(:not([data-message])) {
651
+ display: contents;
652
+ }
653
+
654
+ .kui-TextFieldWrapper:where([data-message]) {
650
655
  display: flex;
651
656
  flex-direction: column;
652
657
  min-width: 0;
@@ -120,16 +120,18 @@ const TextFieldRoot = React.forwardRef<TextFieldRootElement, TextFieldRootProps>
120
120
  <TextFieldContext.Provider value={contextValue}>{children}</TextFieldContext.Provider>
121
121
  </div>
122
122
  );
123
- if (!wrapped) return field;
124
-
125
- // With a message, one wrapper holds the field and the message below it, so the parent still
126
- // lays out a single box and the caller's className and style size the pair.
123
+ // The wrapper is always there, so a message coming or going never moves the field in the tree:
124
+ // moving it would remount the input, dropping focus, the caret and an uncontrolled value. With
125
+ // no message it is `display: contents` and the field is the box the parent lays out; with one
126
+ // it holds the field and the message below it, and the caller's className and style size the pair.
127
127
  return (
128
- <div className={classNames('kui-TextFieldWrapper', ownClassName)} style={ownStyle}>
128
+ <div className={classNames('kui-TextFieldWrapper', wrapped && ownClassName)} style={wrapped ? ownStyle : undefined} data-message={wrapped || undefined}>
129
129
  {field}
130
- <div id={errorId} className="kui-TextFieldErrorMessage" role="alert">
131
- {inputProps.errorMessage}
132
- </div>
130
+ {wrapped ? (
131
+ <div id={errorId} className="kui-TextFieldErrorMessage" role="alert">
132
+ {inputProps.errorMessage}
133
+ </div>
134
+ ) : null}
133
135
  </div>
134
136
  );
135
137
  });
@@ -6,7 +6,6 @@ import { Direction, Slot } from 'radix-ui';
6
6
 
7
7
  import { getMatchingGrayColor } from '../helpers/get-matching-gray-color.js';
8
8
  import { ThemeSizeContext } from '../hooks/theme-size.js';
9
- import { PaneBandSizeContext } from './_internal/pane-band-context.js';
10
9
  import { usePropSyncedState } from '../hooks/use-prop-synced-state.js';
11
10
  import { themePropDefs } from './theme.props.js';
12
11
 
@@ -150,7 +149,6 @@ interface ThemeImplPrivateProps extends Partial<ThemeChangeHandlers> {
150
149
  }
151
150
  const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, forwardedRef) => {
152
151
  const context = React.useContext(ThemeContext);
153
- const outerBand = React.useContext(PaneBandSizeContext);
154
152
  const {
155
153
  asChild,
156
154
  isRoot,
@@ -221,34 +219,30 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
221
219
  ],
222
220
  )}
223
221
  >
224
- {/* A nested `Theme asChild` is the root of a portalled surface (Popover, Dialog, Sheet,
225
- menus), which sits outside any Shell pane even though context flows into it. */}
226
- <PaneBandSizeContext.Provider value={asChild && !isRoot ? null : outerBand}>
227
- {/* Size travels on its own context as a bare string, so the components
228
- that read it do not re-render when another theme value changes. */}
229
- <ThemeSizeContext.Provider value={size}>
230
- <Comp
231
- data-is-root-theme={isRoot ? 'true' : 'false'}
232
- data-accent-color={accentColor}
233
- data-gray-color={resolvedGrayColor}
234
- // for nested `Theme` background
235
- data-has-background={hasBackground ? 'true' : 'false'}
236
- data-radius={radius}
237
- data-font-family={fontFamily}
238
- data-heading-font-family={headingFontFamily}
239
- ref={forwardedRef}
240
- {...themeProps}
241
- className={classNames(
242
- 'kui-theme',
243
- {
244
- light: appearance === 'light',
245
- dark: appearance === 'dark',
246
- },
247
- themeProps.className,
248
- )}
249
- />
250
- </ThemeSizeContext.Provider>
251
- </PaneBandSizeContext.Provider>
222
+ {/* Size travels on its own context as a bare string, so the components
223
+ that read it do not re-render when another theme value changes. */}
224
+ <ThemeSizeContext.Provider value={size}>
225
+ <Comp
226
+ data-is-root-theme={isRoot ? 'true' : 'false'}
227
+ data-accent-color={accentColor}
228
+ data-gray-color={resolvedGrayColor}
229
+ // for nested `Theme` background
230
+ data-has-background={hasBackground ? 'true' : 'false'}
231
+ data-radius={radius}
232
+ data-font-family={fontFamily}
233
+ data-heading-font-family={headingFontFamily}
234
+ ref={forwardedRef}
235
+ {...themeProps}
236
+ className={classNames(
237
+ 'kui-theme',
238
+ {
239
+ light: appearance === 'light',
240
+ dark: appearance === 'dark',
241
+ },
242
+ themeProps.className,
243
+ )}
244
+ />
245
+ </ThemeSizeContext.Provider>
252
246
  </ThemeContext.Provider>
253
247
  );
254
248
  });
@@ -3,7 +3,7 @@ import classNames from 'classnames';
3
3
  import { Tooltip as TooltipPrimitive } from 'radix-ui';
4
4
 
5
5
  import { Text } from './text.js';
6
- import { Theme } from './theme.js';
6
+ import { PortalTheme } from './_internal/portal-theme.js';
7
7
  import { extractProps } from '../helpers/extract-props.js';
8
8
  import { tooltipPropDefs } from './tooltip.props.js';
9
9
 
@@ -63,7 +63,7 @@ const Tooltip = React.forwardRef<TooltipElement, TooltipProps>((props, forwarded
63
63
  <TooltipPrimitive.Root {...rootProps}>
64
64
  <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>
65
65
  <TooltipPrimitive.Portal container={container} forceMount={forceMount}>
66
- <Theme asChild>
66
+ <PortalTheme asChild>
67
67
  <TooltipPrimitive.Content
68
68
  sideOffset={4}
69
69
  collisionPadding={10}
@@ -77,7 +77,7 @@ const Tooltip = React.forwardRef<TooltipElement, TooltipProps>((props, forwarded
77
77
  </Text>
78
78
  <TooltipPrimitive.Arrow className="kui-TooltipArrow" />
79
79
  </TooltipPrimitive.Content>
80
- </Theme>
80
+ </PortalTheme>
81
81
  </TooltipPrimitive.Portal>
82
82
  </TooltipPrimitive.Root>
83
83
  );