@cloudraker/reki 2.6.1 → 2.7.1

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 (381) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +1 -1
  3. package/ai/component-registry.json +1271 -41
  4. package/ai/component-registry.md +1310 -34
  5. package/ai/schemas.ts +226 -2
  6. package/dist/.build-complete +1 -1
  7. package/dist/ai/schemas.d.ts +554 -5
  8. package/dist/ai/schemas.d.ts.map +1 -1
  9. package/dist/ai/schemas.js +1699 -1405
  10. package/dist/ai/schemas.js.map +1 -1
  11. package/dist/chunks/{SankeyChart-jwwpwps4npqzbrvn.js → SankeyChart-gogf860o4u387kjn.js} +2 -2
  12. package/dist/chunks/{SankeyChart-jwwpwps4npqzbrvn.js.map → SankeyChart-gogf860o4u387kjn.js.map} +1 -1
  13. package/dist/chunks/actor-display-izds1bhw0yswurqm.js +35 -0
  14. package/dist/chunks/actor-display-izds1bhw0yswurqm.js.map +1 -0
  15. package/dist/chunks/address-input-g1la0xqrpg8ic6ak.js +80 -0
  16. package/dist/chunks/address-input-g1la0xqrpg8ic6ak.js.map +1 -0
  17. package/dist/chunks/array-display-lu1259ap3qrl847e.js +12 -0
  18. package/dist/chunks/array-display-lu1259ap3qrl847e.js.map +1 -0
  19. package/dist/chunks/{autocomplete-f4vetako14h2aqsw.js → autocomplete-htuy5t9ag29qhuwa.js} +4 -4
  20. package/dist/chunks/{autocomplete-f4vetako14h2aqsw.js.map → autocomplete-htuy5t9ag29qhuwa.js.map} +1 -1
  21. package/dist/chunks/avatar-g40cun6cn17fcxd4.js +57 -0
  22. package/dist/chunks/avatar-g40cun6cn17fcxd4.js.map +1 -0
  23. package/dist/chunks/avatar-group-fpcaziey1yu7226v.js +23 -0
  24. package/dist/chunks/avatar-group-fpcaziey1yu7226v.js.map +1 -0
  25. package/dist/chunks/{breadcrumbs-d6149hyct4puz3x4.js → breadcrumbs-mq1utzm0q4u2r5v5.js} +2 -2
  26. package/dist/chunks/{breadcrumbs-d6149hyct4puz3x4.js.map → breadcrumbs-mq1utzm0q4u2r5v5.js.map} +1 -1
  27. package/dist/chunks/{button-nc5p1h28cwes0tjw.js → button-fvlz1rzc3s1hpyxs.js} +14 -14
  28. package/dist/chunks/button-fvlz1rzc3s1hpyxs.js.map +1 -0
  29. package/dist/chunks/{checkbox-g2661n3eodgoispq.js → checkbox-h3kfhlron3b6sfhv.js} +3 -3
  30. package/dist/chunks/{checkbox-g2661n3eodgoispq.js.map → checkbox-h3kfhlron3b6sfhv.js.map} +1 -1
  31. package/dist/chunks/chip-iu7movvthovdurgb.js +69 -0
  32. package/dist/chunks/chip-iu7movvthovdurgb.js.map +1 -0
  33. package/dist/chunks/circular-progress-bar-ofg0ps2axad1wsr6.js +60 -0
  34. package/dist/chunks/circular-progress-bar-ofg0ps2axad1wsr6.js.map +1 -0
  35. package/dist/chunks/{clipboard-text-g3659lejx2d7i93e.js → clipboard-text-ogue8iq06n1z7q7v.js} +4 -4
  36. package/dist/chunks/{clipboard-text-g3659lejx2d7i93e.js.map → clipboard-text-ogue8iq06n1z7q7v.js.map} +1 -1
  37. package/dist/chunks/{collapsible-ndvmgo29s5iqfcor.js → collapsible-ivqat099ene9z3bv.js} +2 -2
  38. package/dist/chunks/{collapsible-ndvmgo29s5iqfcor.js.map → collapsible-ivqat099ene9z3bv.js.map} +1 -1
  39. package/dist/chunks/color-sample-h7hspma3rb91go3z.js +32 -0
  40. package/dist/chunks/color-sample-h7hspma3rb91go3z.js.map +1 -0
  41. package/dist/chunks/{combobox-i38w67netm8ukw4f.js → combobox-iytvpzp5poljxgek.js} +4 -4
  42. package/dist/chunks/{combobox-i38w67netm8ukw4f.js.map → combobox-iytvpzp5poljxgek.js.map} +1 -1
  43. package/dist/chunks/{command-palette-fe5cjfdgsg3t17vq.js → command-palette-k6vrx8ely8rmf4a5.js} +4 -4
  44. package/dist/chunks/command-palette-k6vrx8ely8rmf4a5.js.map +1 -0
  45. package/dist/chunks/data-grid-i7kfgm7zr5tj0e0a.js +3110 -0
  46. package/dist/chunks/data-grid-i7kfgm7zr5tj0e0a.js.map +1 -0
  47. package/dist/chunks/{dialog-m4go8xof25fospqo.js → dialog-ggx34i6k4eulfvgk.js} +3 -3
  48. package/dist/chunks/{dialog-m4go8xof25fospqo.js.map → dialog-ggx34i6k4eulfvgk.js.map} +1 -1
  49. package/dist/chunks/double-text-input-k0i5xnfq6khv01wu.js +39 -0
  50. package/dist/chunks/double-text-input-k0i5xnfq6khv01wu.js.map +1 -0
  51. package/dist/chunks/{dropdown-j5uht8mn4z7xc9fc.js → dropdown-bt1lfs2jli0khnex.js} +2 -2
  52. package/dist/chunks/{dropdown-j5uht8mn4z7xc9fc.js.map → dropdown-bt1lfs2jli0khnex.js.map} +1 -1
  53. package/dist/chunks/emails-display-nsbqzscr0f9bqimg.js +12 -0
  54. package/dist/chunks/emails-display-nsbqzscr0f9bqimg.js.map +1 -0
  55. package/dist/chunks/{empty-kazxr0248zjemw6n.js → empty-dxy8jti5bsxxh905.js} +2 -2
  56. package/dist/chunks/{empty-kazxr0248zjemw6n.js.map → empty-dxy8jti5bsxxh905.js.map} +1 -1
  57. package/dist/chunks/expandable-list-bjceh467ocazog53.js +26 -0
  58. package/dist/chunks/expandable-list-bjceh467ocazog53.js.map +1 -0
  59. package/dist/chunks/{field-fe5m8z3vbpvtctbe.js → field-b0aywboxuss4rpu7.js} +3 -3
  60. package/dist/chunks/{field-fe5m8z3vbpvtctbe.js.map → field-b0aywboxuss4rpu7.js.map} +1 -1
  61. package/dist/chunks/{input-area-ciw85g3fno06t4tw.js → input-area-cuijpofpark5w5qq.js} +4 -4
  62. package/dist/chunks/{input-area-ciw85g3fno06t4tw.js.map → input-area-cuijpofpark5w5qq.js.map} +1 -1
  63. package/dist/chunks/{input-i5nefqk213n4z7pr.js → input-eno4q26x68rx3i8q.js} +3 -3
  64. package/dist/chunks/{input-i5nefqk213n4z7pr.js.map → input-eno4q26x68rx3i8q.js.map} +1 -1
  65. package/dist/chunks/{input-group-mo7tq7jr19hmgor5.js → input-group-dl9htnza7kq4om4c.js} +5 -5
  66. package/dist/chunks/{input-group-mo7tq7jr19hmgor5.js.map → input-group-dl9htnza7kq4om4c.js.map} +1 -1
  67. package/dist/chunks/json-display-fy0t2khc4itn130p.js +31 -0
  68. package/dist/chunks/json-display-fy0t2khc4itn130p.js.map +1 -0
  69. package/dist/chunks/{label-fcho4757rbdess0c.js → label-ld57mr4ocdxsf06p.js} +3 -3
  70. package/dist/chunks/{label-fcho4757rbdess0c.js.map → label-ld57mr4ocdxsf06p.js.map} +1 -1
  71. package/dist/chunks/{layer-card-kzu48dhzxm3e9p4u.js → layer-card-iuquuc1w3116umfw.js} +2 -2
  72. package/dist/chunks/{layer-card-kzu48dhzxm3e9p4u.js.map → layer-card-iuquuc1w3116umfw.js.map} +1 -1
  73. package/dist/chunks/{link-j2gu5dr3nr4i4yf0.js → link-8pn6y27h3m3ud8fl.js} +2 -2
  74. package/dist/chunks/{link-j2gu5dr3nr4i4yf0.js.map → link-8pn6y27h3m3ud8fl.js.map} +1 -1
  75. package/dist/chunks/link-chip-cz5v6lw9icmcndzl.js +58 -0
  76. package/dist/chunks/link-chip-cz5v6lw9icmcndzl.js.map +1 -0
  77. package/dist/chunks/links-display-dfaehepz86s2wxx1.js +20 -0
  78. package/dist/chunks/links-display-dfaehepz86s2wxx1.js.map +1 -0
  79. package/dist/chunks/menu-item-kyqq7o2krghxbpw5.js +178 -0
  80. package/dist/chunks/menu-item-kyqq7o2krghxbpw5.js.map +1 -0
  81. package/dist/chunks/{menubar-ir5gbjmsizsddz7g.js → menubar-56kqktsa5a28xyzj.js} +2 -2
  82. package/dist/chunks/{menubar-ir5gbjmsizsddz7g.js.map → menubar-56kqktsa5a28xyzj.js.map} +1 -1
  83. package/dist/chunks/{meter-o5yd7ctjf80vvyjx.js → meter-b5rnmibceu4z8i6a.js} +2 -2
  84. package/dist/chunks/{meter-o5yd7ctjf80vvyjx.js.map → meter-b5rnmibceu4z8i6a.js.map} +1 -1
  85. package/dist/chunks/notification-counter-hiq85elmcydnhzoo.js +30 -0
  86. package/dist/chunks/notification-counter-hiq85elmcydnhzoo.js.map +1 -0
  87. package/dist/chunks/overflowing-text-mm8bkx7voc6h8ra4.js +49 -0
  88. package/dist/chunks/overflowing-text-mm8bkx7voc6h8ra4.js.map +1 -0
  89. package/dist/chunks/{pagination-bryw6rohfr7mm3km.js → pagination-iczb9ooenevbxslx.js} +3 -3
  90. package/dist/chunks/{pagination-bryw6rohfr7mm3km.js.map → pagination-iczb9ooenevbxslx.js.map} +1 -1
  91. package/dist/chunks/phones-display-cdsrl07dv6obf4eg.js +19 -0
  92. package/dist/chunks/phones-display-cdsrl07dv6obf4eg.js.map +1 -0
  93. package/dist/chunks/pill-pfpvgbcnqhtyksz5.js +22 -0
  94. package/dist/chunks/pill-pfpvgbcnqhtyksz5.js.map +1 -0
  95. package/dist/chunks/{popover-elxcmvv7mu7m7uk4.js → popover-ldqdlpv6sqvkjume.js} +2 -2
  96. package/dist/chunks/{popover-elxcmvv7mu7m7uk4.js.map → popover-ldqdlpv6sqvkjume.js.map} +1 -1
  97. package/dist/chunks/{radio-newyq331uk4lltr6.js → radio-lyeniil3x20cyb8z.js} +2 -2
  98. package/dist/chunks/{radio-newyq331uk4lltr6.js.map → radio-lyeniil3x20cyb8z.js.map} +1 -1
  99. package/dist/chunks/rating-yyd4t8e62ast4obo.js +48 -0
  100. package/dist/chunks/rating-yyd4t8e62ast4obo.js.map +1 -0
  101. package/dist/chunks/record-board-iapx3cw5rusehrta.js +3395 -0
  102. package/dist/chunks/record-board-iapx3cw5rusehrta.js.map +1 -0
  103. package/dist/chunks/{select-h5480mbro0ypxu0b.js → select-hmoccee4zagd34tq.js} +6 -6
  104. package/dist/chunks/{select-h5480mbro0ypxu0b.js.map → select-hmoccee4zagd34tq.js.map} +1 -1
  105. package/dist/chunks/{sensitive-input-lqugq6uvx0lkpu0u.js → sensitive-input-nkfx72rduc7aijaf.js} +4 -4
  106. package/dist/chunks/{sensitive-input-lqugq6uvx0lkpu0u.js.map → sensitive-input-nkfx72rduc7aijaf.js.map} +1 -1
  107. package/dist/chunks/{sidebar-noz668nhdu2gso12.js → sidebar-gwfibai76tw069d4.js} +34 -33
  108. package/dist/chunks/sidebar-gwfibai76tw069d4.js.map +1 -0
  109. package/dist/chunks/status-ot0itdwxloqgahi0.js +29 -0
  110. package/dist/chunks/status-ot0itdwxloqgahi0.js.map +1 -0
  111. package/dist/chunks/{surface-cyxme7mlr49l33f8.js → surface-fqmma34ju0agh5pe.js} +2 -2
  112. package/dist/chunks/{surface-cyxme7mlr49l33f8.js.map → surface-fqmma34ju0agh5pe.js.map} +1 -1
  113. package/dist/chunks/{switch-bigo96fyjlh7ivbi.js → switch-nhtmn65n5s7gg6vb.js} +3 -3
  114. package/dist/chunks/{switch-bigo96fyjlh7ivbi.js.map → switch-nhtmn65n5s7gg6vb.js.map} +1 -1
  115. package/dist/chunks/{table-mwcmwp6a80zvyrxw.js → table-cjj894o3niouq4tg.js} +2 -2
  116. package/dist/chunks/{table-mwcmwp6a80zvyrxw.js.map → table-cjj894o3niouq4tg.js.map} +1 -1
  117. package/dist/chunks/{tabs-e4pcjkw94kpe35x0.js → tabs-klj6wapad6fpd9at.js} +14 -16
  118. package/dist/chunks/tabs-klj6wapad6fpd9at.js.map +1 -0
  119. package/dist/chunks/tag-h5kwf5eh7dyyvc2c.js +58 -0
  120. package/dist/chunks/tag-h5kwf5eh7dyyvc2c.js.map +1 -0
  121. package/dist/chunks/timeline-lqurr2lcxkayomk2.js +109 -0
  122. package/dist/chunks/timeline-lqurr2lcxkayomk2.js.map +1 -0
  123. package/dist/chunks/{toast-ivr4097bstjcjotf.js → toast-j47dl441zpxa1yw3.js} +3 -3
  124. package/dist/chunks/{toast-ivr4097bstjcjotf.js.map → toast-j47dl441zpxa1yw3.js.map} +1 -1
  125. package/dist/chunks/{tooltip-ncaia8n1lavkyw8n.js → tooltip-bkgxuz77xzg5fooc.js} +2 -2
  126. package/dist/chunks/{tooltip-ncaia8n1lavkyw8n.js.map → tooltip-bkgxuz77xzg5fooc.js.map} +1 -1
  127. package/dist/chunks/{vendor-base-ui-bgl9g5nkvqy3tn36.js → vendor-base-ui-djdjrfuoxlb1lubi.js} +2358 -2358
  128. package/dist/chunks/{vendor-base-ui-bgl9g5nkvqy3tn36.js.map → vendor-base-ui-djdjrfuoxlb1lubi.js.map} +1 -1
  129. package/dist/code.js +1 -1
  130. package/dist/components/actor-display.js +6 -0
  131. package/dist/components/actor-display.js.map +1 -0
  132. package/dist/components/address-input.js +6 -0
  133. package/dist/components/address-input.js.map +1 -0
  134. package/dist/components/array-display.js +6 -0
  135. package/dist/components/array-display.js.map +1 -0
  136. package/dist/components/autocomplete.js +1 -1
  137. package/dist/components/avatar-group.js +6 -0
  138. package/dist/components/avatar-group.js.map +1 -0
  139. package/dist/components/avatar.js +6 -0
  140. package/dist/components/avatar.js.map +1 -0
  141. package/dist/components/breadcrumbs.js +1 -1
  142. package/dist/components/button.js +1 -1
  143. package/dist/components/chart.js +1 -1
  144. package/dist/components/checkbox.js +1 -1
  145. package/dist/components/chip.js +8 -0
  146. package/dist/components/chip.js.map +1 -0
  147. package/dist/components/circular-progress-bar.js +6 -0
  148. package/dist/components/circular-progress-bar.js.map +1 -0
  149. package/dist/components/clipboard-text.js +1 -1
  150. package/dist/components/collapsible.js +1 -1
  151. package/dist/components/color-sample.js +6 -0
  152. package/dist/components/color-sample.js.map +1 -0
  153. package/dist/components/combobox.js +1 -1
  154. package/dist/components/command-palette.js +1 -1
  155. package/dist/components/data-grid.js +8 -0
  156. package/dist/components/data-grid.js.map +1 -0
  157. package/dist/components/dialog.js +1 -1
  158. package/dist/components/double-text-input.js +6 -0
  159. package/dist/components/double-text-input.js.map +1 -0
  160. package/dist/components/dropdown.js +1 -1
  161. package/dist/components/emails-display.js +6 -0
  162. package/dist/components/emails-display.js.map +1 -0
  163. package/dist/components/empty.js +1 -1
  164. package/dist/components/expandable-list.js +6 -0
  165. package/dist/components/expandable-list.js.map +1 -0
  166. package/dist/components/field.js +1 -1
  167. package/dist/components/input-group.js +1 -1
  168. package/dist/components/input.js +3 -3
  169. package/dist/components/json-display.js +6 -0
  170. package/dist/components/json-display.js.map +1 -0
  171. package/dist/components/label.js +1 -1
  172. package/dist/components/layer-card.js +1 -1
  173. package/dist/components/link-chip.js +6 -0
  174. package/dist/components/link-chip.js.map +1 -0
  175. package/dist/components/link.js +1 -1
  176. package/dist/components/links-display.js +6 -0
  177. package/dist/components/links-display.js.map +1 -0
  178. package/dist/components/menu-item.js +11 -0
  179. package/dist/components/menu-item.js.map +1 -0
  180. package/dist/components/menubar.js +1 -1
  181. package/dist/components/meter.js +1 -1
  182. package/dist/components/notification-counter.js +6 -0
  183. package/dist/components/notification-counter.js.map +1 -0
  184. package/dist/components/overflowing-text.js +6 -0
  185. package/dist/components/overflowing-text.js.map +1 -0
  186. package/dist/components/pagination.js +1 -1
  187. package/dist/components/phones-display.js +6 -0
  188. package/dist/components/phones-display.js.map +1 -0
  189. package/dist/components/pill.js +6 -0
  190. package/dist/components/pill.js.map +1 -0
  191. package/dist/components/popover.js +1 -1
  192. package/dist/components/radio.js +1 -1
  193. package/dist/components/rating.js +6 -0
  194. package/dist/components/rating.js.map +1 -0
  195. package/dist/components/record-board.js +8 -0
  196. package/dist/components/record-board.js.map +1 -0
  197. package/dist/components/select.js +1 -1
  198. package/dist/components/sensitive-input.js +1 -1
  199. package/dist/components/sidebar.js +1 -1
  200. package/dist/components/status.js +6 -0
  201. package/dist/components/status.js.map +1 -0
  202. package/dist/components/surface.js +1 -1
  203. package/dist/components/switch.js +1 -1
  204. package/dist/components/table.js +1 -1
  205. package/dist/components/tabs.js +1 -1
  206. package/dist/components/tag.js +10 -0
  207. package/dist/components/tag.js.map +1 -0
  208. package/dist/components/timeline.js +8 -0
  209. package/dist/components/timeline.js.map +1 -0
  210. package/dist/components/toast.js +2 -2
  211. package/dist/components/tooltip.js +1 -1
  212. package/dist/index.js +380 -251
  213. package/dist/index.js.map +1 -1
  214. package/dist/primitives/accordion.js +1 -1
  215. package/dist/primitives/alert-dialog.js +1 -1
  216. package/dist/primitives/autocomplete.js +1 -1
  217. package/dist/primitives/avatar.js +1 -1
  218. package/dist/primitives/button.js +1 -1
  219. package/dist/primitives/checkbox-group.js +1 -1
  220. package/dist/primitives/checkbox.js +1 -1
  221. package/dist/primitives/collapsible.js +1 -1
  222. package/dist/primitives/combobox.js +1 -1
  223. package/dist/primitives/context-menu.js +1 -1
  224. package/dist/primitives/csp-provider.js +1 -1
  225. package/dist/primitives/dialog.js +1 -1
  226. package/dist/primitives/direction-provider.js +1 -1
  227. package/dist/primitives/drawer.js +1 -1
  228. package/dist/primitives/field.js +1 -1
  229. package/dist/primitives/fieldset.js +1 -1
  230. package/dist/primitives/form.js +1 -1
  231. package/dist/primitives/input.js +1 -1
  232. package/dist/primitives/menu.js +1 -1
  233. package/dist/primitives/menubar.js +1 -1
  234. package/dist/primitives/meter.js +1 -1
  235. package/dist/primitives/navigation-menu.js +1 -1
  236. package/dist/primitives/number-field.js +1 -1
  237. package/dist/primitives/otp-field.js +1 -1
  238. package/dist/primitives/popover.js +1 -1
  239. package/dist/primitives/preview-card.js +1 -1
  240. package/dist/primitives/progress.js +1 -1
  241. package/dist/primitives/radio-group.js +1 -1
  242. package/dist/primitives/radio.js +1 -1
  243. package/dist/primitives/scroll-area.js +1 -1
  244. package/dist/primitives/select.js +1 -1
  245. package/dist/primitives/separator.js +1 -1
  246. package/dist/primitives/slider.js +1 -1
  247. package/dist/primitives/switch.js +1 -1
  248. package/dist/primitives/tabs.js +1 -1
  249. package/dist/primitives/toast.js +1 -1
  250. package/dist/primitives/toggle-group.js +1 -1
  251. package/dist/primitives/toggle.js +1 -1
  252. package/dist/primitives/toolbar.js +1 -1
  253. package/dist/primitives/tooltip.js +1 -1
  254. package/dist/primitives.js +1 -1
  255. package/dist/scripts/theme-generator/config.d.ts.map +1 -1
  256. package/dist/scripts/theme-generator/config.js +229 -5
  257. package/dist/scripts/theme-generator/config.js.map +1 -1
  258. package/dist/src/components/actor-display/actor-display.d.ts +33 -0
  259. package/dist/src/components/actor-display/actor-display.d.ts.map +1 -0
  260. package/dist/src/components/actor-display/index.d.ts +2 -0
  261. package/dist/src/components/actor-display/index.d.ts.map +1 -0
  262. package/dist/src/components/address-input/address-input.d.ts +42 -0
  263. package/dist/src/components/address-input/address-input.d.ts.map +1 -0
  264. package/dist/src/components/address-input/index.d.ts +2 -0
  265. package/dist/src/components/address-input/index.d.ts.map +1 -0
  266. package/dist/src/components/array-display/array-display.d.ts +30 -0
  267. package/dist/src/components/array-display/array-display.d.ts.map +1 -0
  268. package/dist/src/components/array-display/index.d.ts +2 -0
  269. package/dist/src/components/array-display/index.d.ts.map +1 -0
  270. package/dist/src/components/avatar/avatar.d.ts +80 -0
  271. package/dist/src/components/avatar/avatar.d.ts.map +1 -0
  272. package/dist/src/components/avatar/index.d.ts +2 -0
  273. package/dist/src/components/avatar/index.d.ts.map +1 -0
  274. package/dist/src/components/avatar-group/avatar-group.d.ts +35 -0
  275. package/dist/src/components/avatar-group/avatar-group.d.ts.map +1 -0
  276. package/dist/src/components/avatar-group/index.d.ts +2 -0
  277. package/dist/src/components/avatar-group/index.d.ts.map +1 -0
  278. package/dist/src/components/button/button.d.ts +4 -4
  279. package/dist/src/components/chip/chip.d.ts +78 -0
  280. package/dist/src/components/chip/chip.d.ts.map +1 -0
  281. package/dist/src/components/chip/index.d.ts +2 -0
  282. package/dist/src/components/chip/index.d.ts.map +1 -0
  283. package/dist/src/components/circular-progress-bar/circular-progress-bar.d.ts +35 -0
  284. package/dist/src/components/circular-progress-bar/circular-progress-bar.d.ts.map +1 -0
  285. package/dist/src/components/circular-progress-bar/index.d.ts +2 -0
  286. package/dist/src/components/circular-progress-bar/index.d.ts.map +1 -0
  287. package/dist/src/components/color-sample/color-sample.d.ts +56 -0
  288. package/dist/src/components/color-sample/color-sample.d.ts.map +1 -0
  289. package/dist/src/components/color-sample/index.d.ts +2 -0
  290. package/dist/src/components/color-sample/index.d.ts.map +1 -0
  291. package/dist/src/components/data-grid/data-grid.d.ts +25 -0
  292. package/dist/src/components/data-grid/data-grid.d.ts.map +1 -0
  293. package/dist/src/components/data-grid/index.d.ts +3 -0
  294. package/dist/src/components/data-grid/index.d.ts.map +1 -0
  295. package/dist/src/components/data-grid/types.d.ts +103 -0
  296. package/dist/src/components/data-grid/types.d.ts.map +1 -0
  297. package/dist/src/components/data-grid/use-data-grid-edit.d.ts +34 -0
  298. package/dist/src/components/data-grid/use-data-grid-edit.d.ts.map +1 -0
  299. package/dist/src/components/double-text-input/double-text-input.d.ts +47 -0
  300. package/dist/src/components/double-text-input/double-text-input.d.ts.map +1 -0
  301. package/dist/src/components/double-text-input/index.d.ts +2 -0
  302. package/dist/src/components/double-text-input/index.d.ts.map +1 -0
  303. package/dist/src/components/emails-display/emails-display.d.ts +30 -0
  304. package/dist/src/components/emails-display/emails-display.d.ts.map +1 -0
  305. package/dist/src/components/emails-display/index.d.ts +2 -0
  306. package/dist/src/components/emails-display/index.d.ts.map +1 -0
  307. package/dist/src/components/expandable-list/expandable-list.d.ts +41 -0
  308. package/dist/src/components/expandable-list/expandable-list.d.ts.map +1 -0
  309. package/dist/src/components/expandable-list/index.d.ts +2 -0
  310. package/dist/src/components/expandable-list/index.d.ts.map +1 -0
  311. package/dist/src/components/json-display/index.d.ts +2 -0
  312. package/dist/src/components/json-display/index.d.ts.map +1 -0
  313. package/dist/src/components/json-display/json-display.d.ts +29 -0
  314. package/dist/src/components/json-display/json-display.d.ts.map +1 -0
  315. package/dist/src/components/link-chip/index.d.ts +2 -0
  316. package/dist/src/components/link-chip/index.d.ts.map +1 -0
  317. package/dist/src/components/link-chip/link-chip.d.ts +50 -0
  318. package/dist/src/components/link-chip/link-chip.d.ts.map +1 -0
  319. package/dist/src/components/links-display/index.d.ts +2 -0
  320. package/dist/src/components/links-display/index.d.ts.map +1 -0
  321. package/dist/src/components/links-display/links-display.d.ts +37 -0
  322. package/dist/src/components/links-display/links-display.d.ts.map +1 -0
  323. package/dist/src/components/menu-item/index.d.ts +2 -0
  324. package/dist/src/components/menu-item/index.d.ts.map +1 -0
  325. package/dist/src/components/menu-item/menu-item.d.ts +104 -0
  326. package/dist/src/components/menu-item/menu-item.d.ts.map +1 -0
  327. package/dist/src/components/notification-counter/index.d.ts +2 -0
  328. package/dist/src/components/notification-counter/index.d.ts.map +1 -0
  329. package/dist/src/components/notification-counter/notification-counter.d.ts +51 -0
  330. package/dist/src/components/notification-counter/notification-counter.d.ts.map +1 -0
  331. package/dist/src/components/overflowing-text/index.d.ts +2 -0
  332. package/dist/src/components/overflowing-text/index.d.ts.map +1 -0
  333. package/dist/src/components/overflowing-text/overflowing-text.d.ts +48 -0
  334. package/dist/src/components/overflowing-text/overflowing-text.d.ts.map +1 -0
  335. package/dist/src/components/phones-display/index.d.ts +2 -0
  336. package/dist/src/components/phones-display/index.d.ts.map +1 -0
  337. package/dist/src/components/phones-display/phones-display.d.ts +31 -0
  338. package/dist/src/components/phones-display/phones-display.d.ts.map +1 -0
  339. package/dist/src/components/pill/index.d.ts +2 -0
  340. package/dist/src/components/pill/index.d.ts.map +1 -0
  341. package/dist/src/components/pill/pill.d.ts +31 -0
  342. package/dist/src/components/pill/pill.d.ts.map +1 -0
  343. package/dist/src/components/rating/index.d.ts +2 -0
  344. package/dist/src/components/rating/index.d.ts.map +1 -0
  345. package/dist/src/components/rating/rating.d.ts +37 -0
  346. package/dist/src/components/rating/rating.d.ts.map +1 -0
  347. package/dist/src/components/record-board/index.d.ts +2 -0
  348. package/dist/src/components/record-board/index.d.ts.map +1 -0
  349. package/dist/src/components/record-board/record-board.d.ts +75 -0
  350. package/dist/src/components/record-board/record-board.d.ts.map +1 -0
  351. package/dist/src/components/sidebar/sidebar.d.ts.map +1 -1
  352. package/dist/src/components/status/index.d.ts +2 -0
  353. package/dist/src/components/status/index.d.ts.map +1 -0
  354. package/dist/src/components/status/status.d.ts +52 -0
  355. package/dist/src/components/status/status.d.ts.map +1 -0
  356. package/dist/src/components/tabs/tabs.d.ts.map +1 -1
  357. package/dist/src/components/tag/index.d.ts +2 -0
  358. package/dist/src/components/tag/index.d.ts.map +1 -0
  359. package/dist/src/components/tag/tag.d.ts +153 -0
  360. package/dist/src/components/tag/tag.d.ts.map +1 -0
  361. package/dist/src/components/timeline/index.d.ts +2 -0
  362. package/dist/src/components/timeline/index.d.ts.map +1 -0
  363. package/dist/src/components/timeline/timeline.d.ts +155 -0
  364. package/dist/src/components/timeline/timeline.d.ts.map +1 -0
  365. package/dist/src/index.d.ts +26 -0
  366. package/dist/src/index.d.ts.map +1 -1
  367. package/dist/src/utils/use-is-dark-mode.d.ts +18 -0
  368. package/dist/src/utils/use-is-dark-mode.d.ts.map +1 -0
  369. package/dist/styles/reki-standalone.css +1 -1
  370. package/dist/styles/reki.css +19 -0
  371. package/dist/styles/theme-fedramp.css +6 -0
  372. package/dist/styles/theme-reki.css +164 -10
  373. package/package.json +118 -4
  374. package/scripts/component-registry/index.ts +6 -11
  375. package/scripts/extract-demo-examples.ts +323 -0
  376. package/scripts/generate-stories.ts +205 -0
  377. package/scripts/theme-generator/config.ts +230 -5
  378. package/dist/chunks/button-nc5p1h28cwes0tjw.js.map +0 -1
  379. package/dist/chunks/command-palette-fe5cjfdgsg3t17vq.js.map +0 -1
  380. package/dist/chunks/sidebar-noz668nhdu2gso12.js.map +0 -1
  381. package/dist/chunks/tabs-e4pcjkw94kpe35x0.js.map +0 -1
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ import { jsx as e } from "react/jsx-runtime";
3
+ import { L as t } from "./link-chip-cz5v6lw9icmcndzl.js";
4
+ import { E as s } from "./expandable-list-bjceh467ocazog53.js";
5
+ import { c as m } from "./cn-ct4n7r74mh8y0f48.js";
6
+ function p({ phones: a, max: i = 1, className: l }) {
7
+ return a.length === 0 ? null : /* @__PURE__ */ e(s, { max: i, className: m(l), children: a.map((r) => /* @__PURE__ */ e(
8
+ t,
9
+ {
10
+ label: r,
11
+ href: `tel:${r.replace(/\s+/g, "")}`
12
+ },
13
+ r
14
+ )) });
15
+ }
16
+ export {
17
+ p as P
18
+ };
19
+ //# sourceMappingURL=phones-display-cdsrl07dv6obf4eg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phones-display-cdsrl07dv6obf4eg.js","sources":["../../src/components/phones-display/phones-display.tsx"],"sourcesContent":["import { LinkChip } from \"../link-chip\";\nimport { ExpandableList } from \"../expandable-list\";\nimport { cn } from \"../../utils/cn\";\n\n/** Variant standard export (reki convention). */\nexport const REKI_PHONES_DISPLAY_VARIANTS = {} as const;\n\nexport const REKI_PHONES_DISPLAY_DEFAULT_VARIANTS = {} as const;\n\n/**\n * PhonesDisplay component props.\n *\n * @example\n * ```tsx\n * <PhonesDisplay phones={[\"+1 415 555 0100\", \"+44 20 7946 0000\"]} />\n * ```\n */\nexport interface PhonesDisplayProps {\n /** Pre-formatted phone numbers, primary first. */\n phones: string[];\n /** Items shown inline before collapsing into a `+N` chip. @default 1 */\n max?: number;\n /** Additional CSS classes merged via `cn()`. Use reki semantic tokens only. */\n className?: string;\n}\n\n/**\n * Renders a `phones` field as a collapsible list of `tel:` link chips. Format\n * the numbers in your field-cell layer (e.g. via `libphonenumber-js`) and pass\n * display strings.\n *\n * @example\n * ```tsx\n * <PhonesDisplay phones={formattedPhones} />\n * ```\n */\nexport function PhonesDisplay({ phones, max = 1, className }: PhonesDisplayProps) {\n if (phones.length === 0) {\n return null;\n }\n return (\n <ExpandableList max={max} className={cn(className)}>\n {phones.map((phone) => (\n <LinkChip\n key={phone}\n label={phone}\n href={`tel:${phone.replace(/\\s+/g, \"\")}`}\n />\n ))}\n </ExpandableList>\n );\n}\n"],"names":["PhonesDisplay","phones","max","className","jsx","ExpandableList","cn","phone","LinkChip"],"mappings":";;;;;AAoCO,SAASA,EAAc,EAAE,QAAAC,GAAQ,KAAAC,IAAM,GAAG,WAAAC,KAAiC;AAChF,SAAIF,EAAO,WAAW,IACb,OAGP,gBAAAG,EAACC,GAAA,EAAe,KAAAH,GAAU,WAAWI,EAAGH,CAAS,GAC9C,UAAAF,EAAO,IAAI,CAACM,MACX,gBAAAH;AAAA,IAACI;AAAA,IAAA;AAAA,MAEC,OAAOD;AAAA,MACP,MAAM,OAAOA,EAAM,QAAQ,QAAQ,EAAE,CAAC;AAAA,IAAA;AAAA,IAFjCA;AAAA,EAAA,CAIR,GACH;AAEJ;"}
@@ -0,0 +1,22 @@
1
+ "use client";
2
+ import { jsxs as r, jsx as s } from "react/jsx-runtime";
3
+ import { c as n } from "./cn-ct4n7r74mh8y0f48.js";
4
+ function a({ label: i, icon: e, className: t }) {
5
+ return /* @__PURE__ */ r(
6
+ "span",
7
+ {
8
+ className: n(
9
+ "inline-flex h-4 w-fit items-center gap-1 rounded-sm bg-reki-fill px-1 text-[0.6875rem] font-medium text-reki-subtle",
10
+ t
11
+ ),
12
+ children: [
13
+ e ? /* @__PURE__ */ s(e, { "aria-hidden": !0, className: "size-3" }) : null,
14
+ i
15
+ ]
16
+ }
17
+ );
18
+ }
19
+ export {
20
+ a as P
21
+ };
22
+ //# sourceMappingURL=pill-pfpvgbcnqhtyksz5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pill-pfpvgbcnqhtyksz5.js","sources":["../../src/components/pill/pill.tsx"],"sourcesContent":["import type { ComponentType, SVGProps } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\n/** Variant standard export (reki convention). */\nexport const REKI_PILL_VARIANTS = {} as const;\n\nexport const REKI_PILL_DEFAULT_VARIANTS = {} as const;\n\n/**\n * Pill component props.\n *\n * @example\n * ```tsx\n * <Pill label=\"Beta\" />\n * ```\n */\nexport interface PillProps {\n /** Text label. */\n label: string;\n /** Optional leading icon (phosphor or any SVG component). */\n icon?: ComponentType<SVGProps<SVGSVGElement>>;\n /** Additional CSS classes merged via `cn()`. Use reki semantic tokens only. */\n className?: string;\n}\n\n/**\n * A tiny static label for inline annotations (counts, flags, hints). Smaller\n * and quieter than {@link Tag} or {@link Badge}; not interactive.\n *\n * @example\n * ```tsx\n * <Pill label=\"3 records\" />\n * ```\n */\nexport function Pill({ label, icon: Icon, className }: PillProps) {\n return (\n <span\n className={cn(\n \"inline-flex h-4 w-fit items-center gap-1 rounded-sm bg-reki-fill px-1 text-[0.6875rem] font-medium text-reki-subtle\",\n className,\n )}\n >\n {Icon ? <Icon aria-hidden className=\"size-3\" /> : null}\n {label}\n </span>\n );\n}\n"],"names":["Pill","label","Icon","className","jsxs","cn"],"mappings":";;;AAkCO,SAASA,EAAK,EAAE,OAAAC,GAAO,MAAMC,GAAM,WAAAC,KAAwB;AAChE,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAF;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAAD,sBAAQA,GAAA,EAAK,eAAW,IAAC,WAAU,UAAS,IAAK;AAAA,QACjDD;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -2,7 +2,7 @@
2
2
  import { jsx as o, jsxs as p } from "react/jsx-runtime";
3
3
  import { c as i } from "./cn-ct4n7r74mh8y0f48.js";
4
4
  import { u as h } from "./portal-provider-off76og7tjyz96ys.js";
5
- import { bl as C, bm as x, bn as N, bo as y, bp as L, bq as R, br as k, bs as T, bt as w } from "./vendor-base-ui-bgl9g5nkvqy3tn36.js";
5
+ import { bl as C, bm as x, bn as N, bo as y, bp as L, bq as R, br as k, bs as T, bt as w } from "./vendor-base-ui-djdjrfuoxlb1lubi.js";
6
6
  const $ = {
7
7
  side: {
8
8
  top: {
@@ -178,4 +178,4 @@ export {
178
178
  d as f,
179
179
  $ as g
180
180
  };
181
- //# sourceMappingURL=popover-elxcmvv7mu7m7uk4.js.map
181
+ //# sourceMappingURL=popover-ldqdlpv6sqvkjume.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"popover-elxcmvv7mu7m7uk4.js","sources":["../../src/components/popover/popover.tsx"],"sourcesContent":["import { Popover as PopoverBase } from \"@base-ui/react/popover\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n usePortalContainer,\n type PortalContainer,\n} from \"../../utils/portal-provider\";\n\n/** Popover side variant definitions mapping positions to their Tailwind classes. */\nexport const REKI_POPOVER_VARIANTS = {\n side: {\n top: {\n classes: \"\",\n description: \"Popover appears above the trigger\",\n },\n bottom: {\n classes: \"\",\n description: \"Popover appears below the trigger\",\n },\n left: {\n classes: \"\",\n description: \"Popover appears to the left of the trigger\",\n },\n right: {\n classes: \"\",\n description: \"Popover appears to the right of the trigger\",\n },\n },\n} as const;\n\nexport const REKI_POPOVER_DEFAULT_VARIANTS = {\n side: \"bottom\",\n} as const;\n\n// Derived types from REKI_POPOVER_VARIANTS\nexport type RekiPopoverSide = keyof typeof REKI_POPOVER_VARIANTS.side;\n\nexport interface RekiPopoverVariantsProps {\n /**\n * Which side of the trigger the popover appears on.\n * - `\"top\"` — Above the trigger\n * - `\"bottom\"` — Below the trigger\n * - `\"left\"` — Left of the trigger\n * - `\"right\"` — Right of the trigger\n * @default \"bottom\"\n */\n side?: RekiPopoverSide;\n}\n\n// ============================================================================\n// Popover Root\n// ============================================================================\n\ntype BasePopoverRootProps = ComponentPropsWithoutRef<typeof PopoverBase.Root>;\n\nexport type PopoverRootProps = BasePopoverRootProps;\n\nfunction PopoverRoot({ children, ...props }: PopoverRootProps) {\n return <PopoverBase.Root {...props}>{children}</PopoverBase.Root>;\n}\n\nPopoverRoot.displayName = \"Popover\";\n\n// ============================================================================\n// Popover Trigger\n// ============================================================================\n\ntype BasePopoverTriggerProps = ComponentPropsWithoutRef<\n typeof PopoverBase.Trigger\n>;\n\nexport type PopoverTriggerProps = BasePopoverTriggerProps & {\n /**\n * @deprecated Use the `render` prop instead.\n * @example `<Popover.Trigger render={<Button />}>Open</Popover.Trigger>` instead of `<Popover.Trigger asChild><Button>Open</Button></Popover.Trigger>`\n */\n asChild?: boolean;\n};\n\nfunction PopoverTrigger({\n children,\n className,\n asChild,\n render,\n ...props\n}: PopoverTriggerProps) {\n // Support both render prop (preferred) and deprecated asChild pattern\n // When using asChild, children IS the render element, so don't pass it as children\n const resolvedRender =\n render ??\n (asChild ? (children as BasePopoverTriggerProps[\"render\"]) : undefined);\n\n return (\n <PopoverBase.Trigger\n data-reki-component=\"Popover\"\n data-reki-part=\"trigger\"\n className={className}\n render={resolvedRender}\n {...props}\n >\n {asChild ? undefined : children}\n </PopoverBase.Trigger>\n );\n}\n\nPopoverTrigger.displayName = \"Popover.Trigger\";\n\n// ============================================================================\n// Popover Content\n// ============================================================================\n\n/** Alignment options for popover positioning */\ntype PopoverAlign = \"start\" | \"center\" | \"end\";\n\ntype BasePopoverPositionerProps = ComponentPropsWithoutRef<\n typeof PopoverBase.Positioner\n>;\n\n/**\n * Popover content panel props.\n *\n * @example\n * ```tsx\n * <Popover.Content side=\"top\" align=\"start\" sideOffset={12}>\n * <p>Popover body</p>\n * </Popover.Content>\n * ```\n */\nexport type PopoverContentProps = RekiPopoverVariantsProps & {\n /**\n * An element to position the popup against.\n * By default, the popup will be positioned against the trigger.\n *\n * Accepts a DOM element, a ref to a DOM element, a virtual element\n * (object with a `getBoundingClientRect` method), or a function\n * returning any of these.\n *\n * This is useful when the popover trigger and the desired anchor point\n * are in different component trees, or when positioning against a\n * coordinate (e.g., a `DOMRect` from `getBoundingClientRect()`).\n *\n * @example Virtual element (e.g., anchoring to a DOMRect)\n * ```tsx\n * <Popover open={open} onOpenChange={setOpen}>\n * <Popover.Content anchor={{ getBoundingClientRect: () => anchorRect }}>\n * <p>Anchored content</p>\n * </Popover.Content>\n * </Popover>\n * ```\n */\n anchor?: BasePopoverPositionerProps[\"anchor\"];\n /**\n * How to align the popover relative to the trigger.\n * @default \"center\"\n */\n align?: PopoverAlign;\n /**\n * Distance between the trigger and the popover in pixels.\n * @default 8\n */\n sideOffset?: number;\n /**\n * Additional offset along the alignment axis in pixels.\n * @default 0\n */\n alignOffset?: number;\n /**\n * Determines which CSS `position` property to use.\n * Use \"fixed\" when the popover needs to escape stacking contexts (e.g., inside sticky headers).\n * @default \"absolute\"\n */\n positionMethod?: \"absolute\" | \"fixed\";\n /** Additional CSS classes merged via `cn()`. */\n className?: string;\n /** Content to render inside the popover. */\n children?: ReactNode;\n /**\n * Container element for the portal. Use this to render the popover inside\n * a Shadow DOM or custom container. Overrides `RekiPortalProvider` context.\n * @default document.body (or RekiPortalProvider container if set)\n */\n container?: PortalContainer;\n};\n\nfunction PopoverContent({\n children,\n side = REKI_POPOVER_DEFAULT_VARIANTS.side,\n align = \"center\",\n sideOffset = 8,\n alignOffset = 0,\n positionMethod = \"absolute\",\n anchor,\n className,\n container: containerProp,\n}: PopoverContentProps) {\n const contextContainer = usePortalContainer();\n const container = containerProp ?? contextContainer ?? undefined;\n\n return (\n <PopoverBase.Portal container={container}>\n <PopoverBase.Positioner\n anchor={anchor}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n positionMethod={positionMethod}\n >\n <PopoverBase.Popup\n className={cn(\n \"flex origin-(--transform-origin) flex-col rounded-lg bg-reki-base px-4 py-3 text-sm text-reki-default\",\n \"shadow-lg shadow-reki-tip-shadow outline outline-reki-fill\",\n \"transition-[transform,scale,opacity] duration-150\",\n \"data-starting-style:scale-90 data-starting-style:opacity-0\",\n \"data-ending-style:scale-90 data-ending-style:opacity-0\",\n \"data-instant:duration-0\",\n \"reki-popover-popup\",\n className,\n )}\n >\n <PopoverBase.Arrow\n className={cn(\n \"flex\",\n \"data-[side=bottom]:-top-2\",\n \"data-[side=left]:right-[-13px] data-[side=left]:rotate-90\",\n \"data-[side=right]:left-[-13px] data-[side=right]:-rotate-90\",\n \"data-[side=top]:-bottom-2 data-[side=top]:rotate-180\",\n )}\n >\n <ArrowSvg />\n </PopoverBase.Arrow>\n {children}\n </PopoverBase.Popup>\n </PopoverBase.Positioner>\n </PopoverBase.Portal>\n );\n}\n\nPopoverContent.displayName = \"Popover.Content\";\n\n// ============================================================================\n// Popover Title\n// ============================================================================\n\ntype BasePopoverTitleProps = ComponentPropsWithoutRef<typeof PopoverBase.Title>;\n\nexport type PopoverTitleProps = BasePopoverTitleProps;\n\nfunction PopoverTitle({ className, ...props }: PopoverTitleProps) {\n return (\n <PopoverBase.Title\n className={cn(\"m-0 text-base leading-6 font-medium\", className)}\n {...props}\n />\n );\n}\n\nPopoverTitle.displayName = \"Popover.Title\";\n\n// ============================================================================\n// Popover Description\n// ============================================================================\n\ntype BasePopoverDescriptionProps = ComponentPropsWithoutRef<\n typeof PopoverBase.Description\n>;\n\nexport type PopoverDescriptionProps = BasePopoverDescriptionProps;\n\nfunction PopoverDescription({ className, ...props }: PopoverDescriptionProps) {\n return (\n <PopoverBase.Description\n className={cn(\"m-0 text-base leading-6 text-reki-subtle\", className)}\n {...props}\n />\n );\n}\n\nPopoverDescription.displayName = \"Popover.Description\";\n\n// ============================================================================\n// Popover Close\n// ============================================================================\n\ntype BasePopoverCloseProps = ComponentPropsWithoutRef<typeof PopoverBase.Close>;\n\nexport type PopoverCloseProps = BasePopoverCloseProps & {\n /**\n * @deprecated Use the `render` prop instead.\n * @example `<Popover.Close render={<Button />}>Close</Popover.Close>` instead of `<Popover.Close asChild><Button>Close</Button></Popover.Close>`\n */\n asChild?: boolean;\n};\n\nfunction PopoverClose({\n children,\n className,\n asChild,\n render,\n ...props\n}: PopoverCloseProps) {\n // Support both render prop (preferred) and deprecated asChild pattern\n // When using asChild, children IS the render element, so don't pass it as children\n const resolvedRender =\n render ??\n (asChild ? (children as BasePopoverCloseProps[\"render\"]) : undefined);\n\n return (\n <PopoverBase.Close className={className} render={resolvedRender} {...props}>\n {asChild ? undefined : children}\n </PopoverBase.Close>\n );\n}\n\nPopoverClose.displayName = \"Popover.Close\";\n\n// ============================================================================\n// Arrow SVG\n// ============================================================================\n\n/**\n * Arrow SVG with three paths for proper border rendering in both light and dark modes.\n * This approach matches Base UI's popover/tooltip implementation.\n *\n * The three paths are:\n * 1. ArrowFill - The main arrow body, matches popover background\n * 2. ArrowOuterStroke - Border visible in light mode only (transparent in dark)\n * 3. ArrowInnerStroke - Border visible in dark mode only (transparent in light)\n *\n * This is necessary because the outer and inner stroke paths have different geometries,\n * and using both ensures the arrow border aligns perfectly with the popover's outline\n * in both color modes.\n *\n * @see https://base-ui.com/react/components/popover\n */\nfunction ArrowSvg(props: React.ComponentProps<\"svg\">) {\n return (\n <svg width=\"20\" height=\"10\" viewBox=\"0 0 20 10\" fill=\"none\" {...props}>\n <path\n d=\"M9.66437 2.60207L4.80758 6.97318C4.07308 7.63423 3.11989 8 2.13172 8H0V10H20V8H18.5349C17.5468 8 16.5936 7.63423 15.8591 6.97318L11.0023 2.60207C10.622 2.2598 10.0447 2.25979 9.66437 2.60207Z\"\n className=\"fill-reki-base\"\n />\n <path\n d=\"M8.99542 1.85876C9.75604 1.17425 10.9106 1.17422 11.6713 1.85878L16.5281 6.22989C17.0789 6.72568 17.7938 7.00001 18.5349 7.00001L15.89 7L11.0023 2.60207C10.622 2.2598 10.0447 2.2598 9.66436 2.60207L4.77734 7L2.13171 7.00001C2.87284 7.00001 3.58774 6.72568 4.13861 6.22989L8.99542 1.85876Z\"\n className=\"fill-reki-tip-shadow\"\n />\n <path\n d=\"M10.3333 3.34539L5.47654 7.71648C4.55842 8.54279 3.36693 9 2.13172 9H0V8H2.13172C3.11989 8 4.07308 7.63423 4.80758 6.97318L9.66437 2.60207C10.0447 2.25979 10.622 2.2598 11.0023 2.60207L15.8591 6.97318C16.5936 7.63423 17.5468 8 18.5349 8H20V9H18.5349C17.2998 9 16.1083 8.54278 15.1901 7.71648L10.3333 3.34539Z\"\n className=\"fill-reki-tip-stroke\"\n />\n </svg>\n );\n}\n\n// ============================================================================\n// Compound Component Export\n// ============================================================================\n\n/**\n * Popover component for displaying accessible popup content anchored to a trigger.\n *\n * @example\n * ```tsx\n * <Popover>\n * <Popover.Trigger render={<Button>Open</Button>} />\n * <Popover.Content>\n * <Popover.Title>Notifications</Popover.Title>\n * <Popover.Description>You are all caught up!</Popover.Description>\n * </Popover.Content>\n * </Popover>\n * ```\n *\n * @see https://base-ui.com/react/components/popover\n */\nexport const Popover = Object.assign(PopoverRoot, {\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n Title: PopoverTitle,\n Description: PopoverDescription,\n Close: PopoverClose,\n});\n\n// Export sub-components for direct access and type inference\nexport {\n PopoverRoot,\n PopoverTrigger,\n PopoverContent,\n PopoverTitle,\n PopoverDescription,\n PopoverClose,\n};\n"],"names":["REKI_POPOVER_VARIANTS","REKI_POPOVER_DEFAULT_VARIANTS","PopoverRoot","children","props","PopoverBase.Root","PopoverTrigger","className","asChild","render","jsx","PopoverBase.Trigger","PopoverContent","side","align","sideOffset","alignOffset","positionMethod","anchor","containerProp","contextContainer","usePortalContainer","PopoverBase.Portal","PopoverBase.Positioner","jsxs","PopoverBase.Popup","cn","PopoverBase.Arrow","ArrowSvg","PopoverTitle","PopoverBase.Title","PopoverDescription","PopoverBase.Description","PopoverClose","PopoverBase.Close","Popover"],"mappings":"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"}
1
+ {"version":3,"file":"popover-ldqdlpv6sqvkjume.js","sources":["../../src/components/popover/popover.tsx"],"sourcesContent":["import { Popover as PopoverBase } from \"@base-ui/react/popover\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n usePortalContainer,\n type PortalContainer,\n} from \"../../utils/portal-provider\";\n\n/** Popover side variant definitions mapping positions to their Tailwind classes. */\nexport const REKI_POPOVER_VARIANTS = {\n side: {\n top: {\n classes: \"\",\n description: \"Popover appears above the trigger\",\n },\n bottom: {\n classes: \"\",\n description: \"Popover appears below the trigger\",\n },\n left: {\n classes: \"\",\n description: \"Popover appears to the left of the trigger\",\n },\n right: {\n classes: \"\",\n description: \"Popover appears to the right of the trigger\",\n },\n },\n} as const;\n\nexport const REKI_POPOVER_DEFAULT_VARIANTS = {\n side: \"bottom\",\n} as const;\n\n// Derived types from REKI_POPOVER_VARIANTS\nexport type RekiPopoverSide = keyof typeof REKI_POPOVER_VARIANTS.side;\n\nexport interface RekiPopoverVariantsProps {\n /**\n * Which side of the trigger the popover appears on.\n * - `\"top\"` — Above the trigger\n * - `\"bottom\"` — Below the trigger\n * - `\"left\"` — Left of the trigger\n * - `\"right\"` — Right of the trigger\n * @default \"bottom\"\n */\n side?: RekiPopoverSide;\n}\n\n// ============================================================================\n// Popover Root\n// ============================================================================\n\ntype BasePopoverRootProps = ComponentPropsWithoutRef<typeof PopoverBase.Root>;\n\nexport type PopoverRootProps = BasePopoverRootProps;\n\nfunction PopoverRoot({ children, ...props }: PopoverRootProps) {\n return <PopoverBase.Root {...props}>{children}</PopoverBase.Root>;\n}\n\nPopoverRoot.displayName = \"Popover\";\n\n// ============================================================================\n// Popover Trigger\n// ============================================================================\n\ntype BasePopoverTriggerProps = ComponentPropsWithoutRef<\n typeof PopoverBase.Trigger\n>;\n\nexport type PopoverTriggerProps = BasePopoverTriggerProps & {\n /**\n * @deprecated Use the `render` prop instead.\n * @example `<Popover.Trigger render={<Button />}>Open</Popover.Trigger>` instead of `<Popover.Trigger asChild><Button>Open</Button></Popover.Trigger>`\n */\n asChild?: boolean;\n};\n\nfunction PopoverTrigger({\n children,\n className,\n asChild,\n render,\n ...props\n}: PopoverTriggerProps) {\n // Support both render prop (preferred) and deprecated asChild pattern\n // When using asChild, children IS the render element, so don't pass it as children\n const resolvedRender =\n render ??\n (asChild ? (children as BasePopoverTriggerProps[\"render\"]) : undefined);\n\n return (\n <PopoverBase.Trigger\n data-reki-component=\"Popover\"\n data-reki-part=\"trigger\"\n className={className}\n render={resolvedRender}\n {...props}\n >\n {asChild ? undefined : children}\n </PopoverBase.Trigger>\n );\n}\n\nPopoverTrigger.displayName = \"Popover.Trigger\";\n\n// ============================================================================\n// Popover Content\n// ============================================================================\n\n/** Alignment options for popover positioning */\ntype PopoverAlign = \"start\" | \"center\" | \"end\";\n\ntype BasePopoverPositionerProps = ComponentPropsWithoutRef<\n typeof PopoverBase.Positioner\n>;\n\n/**\n * Popover content panel props.\n *\n * @example\n * ```tsx\n * <Popover.Content side=\"top\" align=\"start\" sideOffset={12}>\n * <p>Popover body</p>\n * </Popover.Content>\n * ```\n */\nexport type PopoverContentProps = RekiPopoverVariantsProps & {\n /**\n * An element to position the popup against.\n * By default, the popup will be positioned against the trigger.\n *\n * Accepts a DOM element, a ref to a DOM element, a virtual element\n * (object with a `getBoundingClientRect` method), or a function\n * returning any of these.\n *\n * This is useful when the popover trigger and the desired anchor point\n * are in different component trees, or when positioning against a\n * coordinate (e.g., a `DOMRect` from `getBoundingClientRect()`).\n *\n * @example Virtual element (e.g., anchoring to a DOMRect)\n * ```tsx\n * <Popover open={open} onOpenChange={setOpen}>\n * <Popover.Content anchor={{ getBoundingClientRect: () => anchorRect }}>\n * <p>Anchored content</p>\n * </Popover.Content>\n * </Popover>\n * ```\n */\n anchor?: BasePopoverPositionerProps[\"anchor\"];\n /**\n * How to align the popover relative to the trigger.\n * @default \"center\"\n */\n align?: PopoverAlign;\n /**\n * Distance between the trigger and the popover in pixels.\n * @default 8\n */\n sideOffset?: number;\n /**\n * Additional offset along the alignment axis in pixels.\n * @default 0\n */\n alignOffset?: number;\n /**\n * Determines which CSS `position` property to use.\n * Use \"fixed\" when the popover needs to escape stacking contexts (e.g., inside sticky headers).\n * @default \"absolute\"\n */\n positionMethod?: \"absolute\" | \"fixed\";\n /** Additional CSS classes merged via `cn()`. */\n className?: string;\n /** Content to render inside the popover. */\n children?: ReactNode;\n /**\n * Container element for the portal. Use this to render the popover inside\n * a Shadow DOM or custom container. Overrides `RekiPortalProvider` context.\n * @default document.body (or RekiPortalProvider container if set)\n */\n container?: PortalContainer;\n};\n\nfunction PopoverContent({\n children,\n side = REKI_POPOVER_DEFAULT_VARIANTS.side,\n align = \"center\",\n sideOffset = 8,\n alignOffset = 0,\n positionMethod = \"absolute\",\n anchor,\n className,\n container: containerProp,\n}: PopoverContentProps) {\n const contextContainer = usePortalContainer();\n const container = containerProp ?? contextContainer ?? undefined;\n\n return (\n <PopoverBase.Portal container={container}>\n <PopoverBase.Positioner\n anchor={anchor}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n positionMethod={positionMethod}\n >\n <PopoverBase.Popup\n className={cn(\n \"flex origin-(--transform-origin) flex-col rounded-lg bg-reki-base px-4 py-3 text-sm text-reki-default\",\n \"shadow-lg shadow-reki-tip-shadow outline outline-reki-fill\",\n \"transition-[transform,scale,opacity] duration-150\",\n \"data-starting-style:scale-90 data-starting-style:opacity-0\",\n \"data-ending-style:scale-90 data-ending-style:opacity-0\",\n \"data-instant:duration-0\",\n \"reki-popover-popup\",\n className,\n )}\n >\n <PopoverBase.Arrow\n className={cn(\n \"flex\",\n \"data-[side=bottom]:-top-2\",\n \"data-[side=left]:right-[-13px] data-[side=left]:rotate-90\",\n \"data-[side=right]:left-[-13px] data-[side=right]:-rotate-90\",\n \"data-[side=top]:-bottom-2 data-[side=top]:rotate-180\",\n )}\n >\n <ArrowSvg />\n </PopoverBase.Arrow>\n {children}\n </PopoverBase.Popup>\n </PopoverBase.Positioner>\n </PopoverBase.Portal>\n );\n}\n\nPopoverContent.displayName = \"Popover.Content\";\n\n// ============================================================================\n// Popover Title\n// ============================================================================\n\ntype BasePopoverTitleProps = ComponentPropsWithoutRef<typeof PopoverBase.Title>;\n\nexport type PopoverTitleProps = BasePopoverTitleProps;\n\nfunction PopoverTitle({ className, ...props }: PopoverTitleProps) {\n return (\n <PopoverBase.Title\n className={cn(\"m-0 text-base leading-6 font-medium\", className)}\n {...props}\n />\n );\n}\n\nPopoverTitle.displayName = \"Popover.Title\";\n\n// ============================================================================\n// Popover Description\n// ============================================================================\n\ntype BasePopoverDescriptionProps = ComponentPropsWithoutRef<\n typeof PopoverBase.Description\n>;\n\nexport type PopoverDescriptionProps = BasePopoverDescriptionProps;\n\nfunction PopoverDescription({ className, ...props }: PopoverDescriptionProps) {\n return (\n <PopoverBase.Description\n className={cn(\"m-0 text-base leading-6 text-reki-subtle\", className)}\n {...props}\n />\n );\n}\n\nPopoverDescription.displayName = \"Popover.Description\";\n\n// ============================================================================\n// Popover Close\n// ============================================================================\n\ntype BasePopoverCloseProps = ComponentPropsWithoutRef<typeof PopoverBase.Close>;\n\nexport type PopoverCloseProps = BasePopoverCloseProps & {\n /**\n * @deprecated Use the `render` prop instead.\n * @example `<Popover.Close render={<Button />}>Close</Popover.Close>` instead of `<Popover.Close asChild><Button>Close</Button></Popover.Close>`\n */\n asChild?: boolean;\n};\n\nfunction PopoverClose({\n children,\n className,\n asChild,\n render,\n ...props\n}: PopoverCloseProps) {\n // Support both render prop (preferred) and deprecated asChild pattern\n // When using asChild, children IS the render element, so don't pass it as children\n const resolvedRender =\n render ??\n (asChild ? (children as BasePopoverCloseProps[\"render\"]) : undefined);\n\n return (\n <PopoverBase.Close className={className} render={resolvedRender} {...props}>\n {asChild ? undefined : children}\n </PopoverBase.Close>\n );\n}\n\nPopoverClose.displayName = \"Popover.Close\";\n\n// ============================================================================\n// Arrow SVG\n// ============================================================================\n\n/**\n * Arrow SVG with three paths for proper border rendering in both light and dark modes.\n * This approach matches Base UI's popover/tooltip implementation.\n *\n * The three paths are:\n * 1. ArrowFill - The main arrow body, matches popover background\n * 2. ArrowOuterStroke - Border visible in light mode only (transparent in dark)\n * 3. ArrowInnerStroke - Border visible in dark mode only (transparent in light)\n *\n * This is necessary because the outer and inner stroke paths have different geometries,\n * and using both ensures the arrow border aligns perfectly with the popover's outline\n * in both color modes.\n *\n * @see https://base-ui.com/react/components/popover\n */\nfunction ArrowSvg(props: React.ComponentProps<\"svg\">) {\n return (\n <svg width=\"20\" height=\"10\" viewBox=\"0 0 20 10\" fill=\"none\" {...props}>\n <path\n d=\"M9.66437 2.60207L4.80758 6.97318C4.07308 7.63423 3.11989 8 2.13172 8H0V10H20V8H18.5349C17.5468 8 16.5936 7.63423 15.8591 6.97318L11.0023 2.60207C10.622 2.2598 10.0447 2.25979 9.66437 2.60207Z\"\n className=\"fill-reki-base\"\n />\n <path\n d=\"M8.99542 1.85876C9.75604 1.17425 10.9106 1.17422 11.6713 1.85878L16.5281 6.22989C17.0789 6.72568 17.7938 7.00001 18.5349 7.00001L15.89 7L11.0023 2.60207C10.622 2.2598 10.0447 2.2598 9.66436 2.60207L4.77734 7L2.13171 7.00001C2.87284 7.00001 3.58774 6.72568 4.13861 6.22989L8.99542 1.85876Z\"\n className=\"fill-reki-tip-shadow\"\n />\n <path\n d=\"M10.3333 3.34539L5.47654 7.71648C4.55842 8.54279 3.36693 9 2.13172 9H0V8H2.13172C3.11989 8 4.07308 7.63423 4.80758 6.97318L9.66437 2.60207C10.0447 2.25979 10.622 2.2598 11.0023 2.60207L15.8591 6.97318C16.5936 7.63423 17.5468 8 18.5349 8H20V9H18.5349C17.2998 9 16.1083 8.54278 15.1901 7.71648L10.3333 3.34539Z\"\n className=\"fill-reki-tip-stroke\"\n />\n </svg>\n );\n}\n\n// ============================================================================\n// Compound Component Export\n// ============================================================================\n\n/**\n * Popover component for displaying accessible popup content anchored to a trigger.\n *\n * @example\n * ```tsx\n * <Popover>\n * <Popover.Trigger render={<Button>Open</Button>} />\n * <Popover.Content>\n * <Popover.Title>Notifications</Popover.Title>\n * <Popover.Description>You are all caught up!</Popover.Description>\n * </Popover.Content>\n * </Popover>\n * ```\n *\n * @see https://base-ui.com/react/components/popover\n */\nexport const Popover = Object.assign(PopoverRoot, {\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n Title: PopoverTitle,\n Description: PopoverDescription,\n Close: PopoverClose,\n});\n\n// Export sub-components for direct access and type inference\nexport {\n PopoverRoot,\n PopoverTrigger,\n PopoverContent,\n PopoverTitle,\n PopoverDescription,\n PopoverClose,\n};\n"],"names":["REKI_POPOVER_VARIANTS","REKI_POPOVER_DEFAULT_VARIANTS","PopoverRoot","children","props","PopoverBase.Root","PopoverTrigger","className","asChild","render","jsx","PopoverBase.Trigger","PopoverContent","side","align","sideOffset","alignOffset","positionMethod","anchor","containerProp","contextContainer","usePortalContainer","PopoverBase.Portal","PopoverBase.Positioner","jsxs","PopoverBase.Popup","cn","PopoverBase.Arrow","ArrowSvg","PopoverTitle","PopoverBase.Title","PopoverDescription","PopoverBase.Description","PopoverClose","PopoverBase.Close","Popover"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { jsx as e, jsxs as g } from "react/jsx-runtime";
3
3
  import { forwardRef as C, createContext as _, useContext as G } from "react";
4
4
  import { c as i } from "./cn-ct4n7r74mh8y0f48.js";
5
5
  import { r as x } from "./resolve-variant-t8jcltsizeg29ege.js";
6
- import { R as L, U as S, Q as w, bu as v, bv as R } from "./vendor-base-ui-bgl9g5nkvqy3tn36.js";
6
+ import { R as L, U as S, Q as w, bu as v, bv as R } from "./vendor-base-ui-djdjrfuoxlb1lubi.js";
7
7
  const N = {
8
8
  variant: {
9
9
  default: {
@@ -223,4 +223,4 @@ export {
223
223
  k as c,
224
224
  T as r
225
225
  };
226
- //# sourceMappingURL=radio-newyq331uk4lltr6.js.map
226
+ //# sourceMappingURL=radio-lyeniil3x20cyb8z.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"radio-newyq331uk4lltr6.js","sources":["../../src/components/radio/radio.tsx"],"sourcesContent":["import {\n forwardRef,\n createContext,\n useContext,\n type ReactNode,\n type ReactElement,\n type ForwardedRef,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { resolveVariant } from \"../../utils/resolve-variant\";\nimport { Fieldset } from \"@base-ui/react/fieldset\";\nimport {\n RadioGroup as BaseRadioGroup,\n type RadioGroup as BaseRadioGroupNamespace,\n} from \"@base-ui/react/radio-group\";\nimport { Radio as BaseRadio } from \"@base-ui/react/radio\";\n\n/**\n * Event details passed as the second argument to `onValueChange`. Carries the\n * native event and interaction metadata. Re-exported from Base UI.\n */\nexport type RadioGroupChangeEventDetails =\n BaseRadioGroupNamespace.ChangeEventDetails;\n\n/** Radio variant definitions mapping variant names to their Tailwind classes. */\nexport const REKI_RADIO_VARIANTS = {\n variant: {\n default: {\n classes: \"ring-reki-hairline\",\n description: \"Default radio appearance\",\n },\n error: {\n classes: \"ring-reki-danger\",\n description: \"Error state for validation failures\",\n },\n },\n appearance: {\n default: {\n classes: \"\",\n description: \"Standard inline radio item\",\n },\n card: {\n classes:\n \"rounded-lg border border-reki-hairline bg-reki-base p-3 transition-colors hover:bg-reki-tint has-[[data-checked]]:border-reki-interact has-[[data-checked]]:bg-reki-tint\",\n description:\n \"Choice card appearance with border, padding, and highlighted selection state\",\n },\n },\n} as const;\n\nexport const REKI_RADIO_DEFAULT_VARIANTS = {\n variant: \"default\",\n appearance: \"default\",\n} as const;\n\n// Derived types from REKI_RADIO_VARIANTS\nexport type RekiRadioVariant = keyof typeof REKI_RADIO_VARIANTS.variant;\nexport type RekiRadioAppearance = keyof typeof REKI_RADIO_VARIANTS.appearance;\n\nexport interface RekiRadioVariantsProps {\n /**\n * Visual variant.\n * - `\"default\"` — Standard radio appearance\n * - `\"error\"` — Error state for validation failures\n * @default \"default\"\n */\n variant?: RekiRadioVariant;\n /**\n * Visual appearance.\n * - `\"default\"` — Standard inline radio item\n * - `\"card\"` — Choice card with border, padding, and highlighted selection state\n * @default \"default\"\n */\n appearance?: RekiRadioAppearance;\n}\n\nexport function radioVariants({\n variant = REKI_RADIO_DEFAULT_VARIANTS.variant,\n appearance = REKI_RADIO_DEFAULT_VARIANTS.appearance,\n}: RekiRadioVariantsProps = {}) {\n return cn(\n resolveVariant(\n REKI_RADIO_VARIANTS.variant,\n variant,\n REKI_RADIO_DEFAULT_VARIANTS.variant,\n ).classes,\n resolveVariant(\n REKI_RADIO_VARIANTS.appearance,\n appearance,\n REKI_RADIO_DEFAULT_VARIANTS.appearance,\n ).classes,\n );\n}\n\n// Legacy type alias for backwards compatibility\nexport type RadioVariant = RekiRadioVariant;\n\n/** Position of the radio control relative to its label */\nexport type RadioControlPosition = \"start\" | \"end\";\n\n// Context for passing controlPosition and appearance from Group to Items.\n// `controlPosition` may be undefined so each item can fall back to an\n// appearance-appropriate default (start for default, end for card).\nconst RadioGroupContext = createContext<{\n controlPosition: RadioControlPosition | undefined;\n appearance: RekiRadioAppearance;\n}>({\n controlPosition: undefined,\n appearance: \"default\",\n});\n\n/**\n * Radio group component props (with built-in Fieldset and RadioGroup)\n *\n * @example\n * // Basic usage\n * ```tsx\n * <Radio.Group legend=\"Notification preference\" defaultValue=\"email\">\n * <Radio.Item label=\"Email\" value=\"email\" />\n * <Radio.Item label=\"SMS\" value=\"sms\" />\n * <Radio.Item label=\"Push\" value=\"push\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Horizontal layout\n * ```tsx\n * <Radio.Group legend=\"Size\" orientation=\"horizontal\" defaultValue=\"md\">\n * <Radio.Item label=\"Small\" value=\"sm\" />\n * <Radio.Item label=\"Medium\" value=\"md\" />\n * <Radio.Item label=\"Large\" value=\"lg\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // With error and description\n * ```tsx\n * <Radio.Group\n * legend=\"Payment method\"\n * error=\"Please select a payment method\"\n * description=\"Choose how you'd like to pay\"\n * >\n * <Radio.Item label=\"Credit Card\" value=\"card\" />\n * <Radio.Item label=\"PayPal\" value=\"paypal\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Controlled\n * ```tsx\n * const [value, setValue] = useState(\"email\");\n * <Radio.Group legend=\"Contact\" value={value} onValueChange={setValue}>\n * <Radio.Item label=\"Email\" value=\"email\" />\n * <Radio.Item label=\"Phone\" value=\"phone\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Label before radio (controlPosition=\"end\")\n * ```tsx\n * <Radio.Group legend=\"Options\" controlPosition=\"end\" defaultValue=\"a\">\n * <Radio.Item label=\"Option A\" value=\"a\" />\n * <Radio.Item label=\"Option B\" value=\"b\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Typed values — pass a type parameter to constrain `value`\n * ```tsx\n * <Radio.Group<number> legend=\"Items per page\" defaultValue={10}>\n * <Radio.Item<number> label=\"10\" value={10} />\n * <Radio.Item<number> label=\"25\" value={25} />\n * </Radio.Group>\n * ```\n */\n/**\n * Props for Radio.Legend — a composable sub-component for labeling a Radio.Group.\n *\n * Place as a direct child of `<Radio.Group>` to provide a styled, accessible legend.\n * Accepts `className` for full styling control (e.g. `className=\"sr-only\"` to visually hide).\n *\n * @example\n * ```tsx\n * <Radio.Group>\n * <Radio.Legend className=\"sr-only\">Paths</Radio.Legend>\n * <Radio.Item label=\"Allow all paths\" value=\"all\" />\n * </Radio.Group>\n * ```\n */\nexport interface RadioLegendProps {\n /** Legend content */\n children: ReactNode;\n /** Additional CSS classes (e.g. \"sr-only\" to visually hide the legend) */\n className?: string;\n}\n\n/**\n * Radio.Group component props.\n *\n * Parameterised by the radio value type `Value` (defaults to `string`). Pass a\n * type argument — e.g. `<Radio.Group<number>>` — to type `value`,\n * `defaultValue`, and the value passed to `onValueChange`.\n *\n * Note: the generic only types the group-level value props. It does **not**\n * guarantee that the `value` of each `Radio.Item` child conforms to `Value`,\n * since children are passed as `ReactNode` and are not cross-checked at compile\n * time. Annotate items (`<Radio.Item<number>>`) for matching inference.\n */\nexport interface RadioGroupProps<Value = string> {\n /**\n * Legend text for the group (required for accessibility).\n * For more control over legend styling, omit this prop and use `<Radio.Legend>` as a child instead.\n */\n legend?: string;\n /** Child Radio.Item components (and optionally a Radio.Legend) */\n children: ReactNode;\n /** Layout direction of the radio items */\n orientation?: \"vertical\" | \"horizontal\";\n /**\n * Visual appearance applied to all Radio.Item children.\n * - `\"default\"` — Standard inline radio items\n * - `\"card\"` — Choice card with border, padding, and highlighted selection state\n *\n * Individual items can override this with their own `appearance` prop.\n * @default \"default\"\n */\n appearance?: RekiRadioAppearance;\n /** Error message for the group */\n error?: string;\n /** Helper text for the group */\n description?: ReactNode;\n /** Value of the radio that should be initially selected (uncontrolled) */\n defaultValue?: Value;\n /** Value of the radio that should be selected (controlled) */\n value?: Value;\n /**\n * Event handler called when the radio value changes. The second argument\n * carries native event details about the interaction.\n */\n onValueChange?: (\n value: Value,\n eventDetails: RadioGroupChangeEventDetails,\n ) => void;\n /** Whether all radios in the group are disabled */\n disabled?: boolean;\n /** Position of radio control relative to label: \"start\" puts radio before label, \"end\" puts label before radio. Defaults to \"start\" for default appearance and \"end\" for card appearance. */\n controlPosition?: RadioControlPosition;\n /** Form submission name for the radio group */\n name?: string;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Individual radio item within a group\n *\n * @example\n * ```tsx\n * <Radio.Item label=\"Option A\" value=\"a\" />\n * ```\n *\n * @example\n * // Disabled item\n * ```tsx\n * <Radio.Item label=\"Unavailable\" value=\"unavailable\" disabled />\n * ```\n */\n/**\n * Radio.Item component props.\n *\n * Parameterised by the radio value type `Value` (defaults to `string`). Pass a\n * type argument — e.g. `<Radio.Item<number>>` — to type `value` to match the\n * enclosing `Radio.Group`'s value type.\n */\nexport type RadioItemProps<Value = string> = {\n /** Visual variant: \"default\" or \"error\" for validation failures */\n variant?: RadioVariant;\n /**\n * Visual appearance of the radio item.\n * - `\"default\"` — Standard inline radio item\n * - `\"card\"` — Choice card with border, padding, and highlighted selection state\n *\n * When set on an individual item, overrides the group-level `appearance`.\n * @default \"default\"\n */\n appearance?: RekiRadioAppearance;\n /** Label content displayed next to radio (required). Accepts strings or React nodes for rich content. */\n label: ReactNode;\n /** Description text displayed below the label (only visible in card appearance) */\n description?: ReactNode;\n /** Value of the radio (required) */\n value: Value;\n /** Additional CSS classes for the label wrapper */\n className?: string;\n /** Whether the radio is disabled */\n disabled?: boolean;\n};\n\n// Radio.Item for use within Radio.Group\nfunction _RadioItem<T = string>(\n {\n className,\n disabled,\n variant = \"default\",\n appearance: appearanceProp,\n label,\n description,\n value,\n }: RadioItemProps<T>,\n ref: ForwardedRef<HTMLButtonElement>,\n) {\n const { controlPosition, appearance: groupAppearance } =\n useContext(RadioGroupContext);\n const appearance = appearanceProp ?? groupAppearance;\n const isCard = appearance === \"card\";\n\n // Fall back to an appearance-appropriate default when controlPosition is\n // not provided: card defaults to \"end\" (radio on the right), default\n // appearance defaults to \"start\" (radio on the left).\n const effectiveControlPosition: RadioControlPosition =\n controlPosition ?? (isCard ? \"end\" : \"start\");\n\n if (isCard) {\n const controlAtStart = effectiveControlPosition === \"start\";\n return (\n <label\n data-reki-component=\"Radio\"\n data-reki-part=\"item-label\"\n className={cn(\n \"m-0 group relative flex items-start gap-3 rounded-lg border border-reki-hairline bg-reki-base p-3 transition-colors has-[[data-checked]]:border-reki-interact has-[[data-checked]]:bg-reki-tint\",\n controlAtStart && \"flex-row-reverse\",\n variant === \"error\" &&\n \"border-reki-danger has-[[data-checked]]:border-reki-danger has-[[data-checked]]:bg-reki-base\",\n disabled\n ? \"cursor-not-allowed opacity-50\"\n : cn(\n \"has-[[data-disabled]]:cursor-not-allowed has-[[data-disabled]]:opacity-50 cursor-pointer\",\n variant !== \"error\" &&\n \"hover:not-has-[[data-disabled]]:bg-reki-tint\",\n ),\n className,\n )}\n >\n <div className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n <span className=\"text-base font-medium text-reki-default\">\n {label}\n </span>\n {description && (\n <span className=\"text-sm text-reki-subtle\">{description}</span>\n )}\n </div>\n <BaseRadio.Root\n ref={ref}\n data-reki-component=\"Radio\"\n data-reki-part=\"item\"\n value={value}\n disabled={disabled}\n className={cn(\n \"relative mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full border-0 bg-reki-base ring ring-2 focus:outline-none focus:ring-reki-focus focus-visible:ring-2 focus-visible:ring-reki-brand\",\n variant === \"error\" ? \"ring-reki-danger\" : \"ring-reki-line\",\n !disabled &&\n variant !== \"error\" &&\n \"group-hover:ring-reki-hairline focus-visible:outline-offset-3\",\n !disabled &&\n variant === \"error\" &&\n \"focus-visible:outline-offset-3\",\n \"data-[checked]:bg-reki-contrast\",\n )}\n >\n <BaseRadio.Indicator\n keepMounted\n className=\"flex items-center justify-center\"\n >\n <span className=\"h-2 w-2 rounded-full bg-reki-base\" />\n </BaseRadio.Indicator>\n </BaseRadio.Root>\n </label>\n );\n }\n\n return (\n <label\n data-reki-component=\"Radio\"\n data-reki-part=\"item-label\"\n className={cn(\n \"m-0 group relative inline-flex items-start gap-2\",\n // \"start\" (default): radio before label\n // \"end\": label before radio using flex-row-reverse\n effectiveControlPosition === \"end\" && \"flex-row-reverse justify-end\",\n disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\",\n className,\n )}\n >\n <BaseRadio.Root\n ref={ref}\n data-reki-component=\"Radio\"\n data-reki-part=\"item\"\n value={value}\n disabled={disabled}\n className={cn(\n \"relative mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full border-0 bg-reki-base ring focus:outline-none after:absolute after:-inset-x-3 after:-inset-y-2\",\n variant === \"error\" ? \"ring-reki-danger\" : \"ring-reki-line\",\n !disabled &&\n variant !== \"error\" &&\n \"group-hover:ring-reki-hairline focus:ring-reki-focus focus:ring-2 focus-visible:ring-2 focus-visible:ring-reki-brand focus-visible:outline-offset-3\",\n !disabled &&\n variant === \"error\" &&\n \"focus:ring-reki-focus focus:ring-2 focus-visible:ring-2 focus-visible:ring-reki-brand focus-visible:outline-offset-3\",\n \"data-[checked]:bg-reki-contrast\",\n )}\n >\n <BaseRadio.Indicator\n keepMounted\n className=\"flex items-center justify-center\"\n >\n <span className=\"h-2 w-2 rounded-full bg-reki-base\" />\n </BaseRadio.Indicator>\n </BaseRadio.Root>\n <span className=\"text-base text-reki-default\">{label}</span>\n </label>\n );\n}\n\n// React's `forwardRef` erases generic type parameters, so we cast the result\n// back to a generic call signature. The cast is required to support React 18\n// consumers (where function components can't receive `ref` as a plain prop).\nconst RadioItem = forwardRef(_RadioItem) as <T = string>(\n props: RadioItemProps<T> & { ref?: ForwardedRef<HTMLButtonElement> },\n) => ReactElement;\n\n(RadioItem as unknown as { displayName: string }).displayName = \"Radio.Item\";\n\n// Radio.Legend — composable legend sub-component for Radio.Group\nfunction RadioLegend({ children, className }: RadioLegendProps) {\n return (\n <Fieldset.Legend\n className={cn(\"text-base font-medium text-reki-default\", className)}\n >\n {children}\n </Fieldset.Legend>\n );\n}\n\nRadioLegend.displayName = \"Radio.Legend\";\n\n// Radio.Group with built-in Fieldset and RadioGroup\nfunction RadioGroup<Value = string>({\n legend,\n children,\n orientation = \"vertical\",\n appearance = \"default\",\n error,\n description,\n defaultValue,\n value,\n onValueChange,\n disabled,\n controlPosition,\n name,\n className,\n}: RadioGroupProps<Value>) {\n return (\n <RadioGroupContext.Provider value={{ controlPosition, appearance }}>\n <BaseRadioGroup<Value>\n defaultValue={defaultValue}\n value={value}\n onValueChange={(newValue, eventDetails) =>\n onValueChange?.(newValue, eventDetails)\n }\n disabled={disabled}\n name={name}\n >\n <Fieldset.Root\n disabled={disabled}\n className={cn(\"flex flex-col gap-4\", className)}\n >\n {legend && (\n <Fieldset.Legend className=\"text-base font-medium text-reki-default\">\n {legend}\n </Fieldset.Legend>\n )}\n <div\n className={cn(\n orientation === \"vertical\"\n ? cn(\"flex flex-col\", appearance === \"card\" ? \"gap-3\" : \"gap-2\")\n : appearance === \"card\"\n ? \"grid grid-cols-2 gap-3\"\n : \"flex flex-row flex-wrap gap-2\",\n )}\n >\n {children}\n </div>\n {error && <p className=\"text-sm text-reki-danger\">{error}</p>}\n {description && (\n <p className=\"text-sm text-reki-subtle\">{description}</p>\n )}\n </Fieldset.Root>\n </BaseRadioGroup>\n </RadioGroupContext.Provider>\n );\n}\n\nRadioGroup.displayName = \"Radio.Group\";\n\n// Export RadioGroup directly for external usage\nexport { RadioGroup };\n\n/**\n * Radio — radio button group for single-select choices.\n *\n * Compound component: `Radio.Group` (with built-in Fieldset), `Radio.Item`, and `Radio.Legend`.\n * Built on `@base-ui/react/radio-group` + `@base-ui/react/radio`.\n *\n * @example\n * ```tsx\n * // Simple: legend as a string prop\n * <Radio.Group legend=\"Notification preference\" defaultValue=\"email\">\n * <Radio.Item label=\"Email\" value=\"email\" />\n * <Radio.Item label=\"SMS\" value=\"sms\" />\n * <Radio.Item label=\"Push\" value=\"push\" />\n * </Radio.Group>\n *\n * // Composable: Radio.Legend for full styling control (e.g. visually hidden)\n * <Radio.Group defaultValue=\"email\">\n * <Radio.Legend className=\"sr-only\">Notification preference</Radio.Legend>\n * <Radio.Item label=\"Email\" value=\"email\" />\n * <Radio.Item label=\"SMS\" value=\"sms\" />\n * </Radio.Group>\n * ```\n */\nexport const Radio = Object.assign(RadioGroup, {\n Item: RadioItem,\n Group: RadioGroup,\n Legend: RadioLegend,\n});\n"],"names":["REKI_RADIO_VARIANTS","REKI_RADIO_DEFAULT_VARIANTS","radioVariants","variant","appearance","cn","resolveVariant","RadioGroupContext","createContext","_RadioItem","className","disabled","appearanceProp","label","description","value","ref","controlPosition","groupAppearance","useContext","isCard","effectiveControlPosition","jsxs","jsx","BaseRadio.Root","BaseRadio.Indicator","RadioItem","forwardRef","RadioLegend","children","Fieldset.Legend","RadioGroup","legend","orientation","error","defaultValue","onValueChange","name","BaseRadioGroup","newValue","eventDetails","Fieldset.Root","Radio"],"mappings":"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"}
1
+ {"version":3,"file":"radio-lyeniil3x20cyb8z.js","sources":["../../src/components/radio/radio.tsx"],"sourcesContent":["import {\n forwardRef,\n createContext,\n useContext,\n type ReactNode,\n type ReactElement,\n type ForwardedRef,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { resolveVariant } from \"../../utils/resolve-variant\";\nimport { Fieldset } from \"@base-ui/react/fieldset\";\nimport {\n RadioGroup as BaseRadioGroup,\n type RadioGroup as BaseRadioGroupNamespace,\n} from \"@base-ui/react/radio-group\";\nimport { Radio as BaseRadio } from \"@base-ui/react/radio\";\n\n/**\n * Event details passed as the second argument to `onValueChange`. Carries the\n * native event and interaction metadata. Re-exported from Base UI.\n */\nexport type RadioGroupChangeEventDetails =\n BaseRadioGroupNamespace.ChangeEventDetails;\n\n/** Radio variant definitions mapping variant names to their Tailwind classes. */\nexport const REKI_RADIO_VARIANTS = {\n variant: {\n default: {\n classes: \"ring-reki-hairline\",\n description: \"Default radio appearance\",\n },\n error: {\n classes: \"ring-reki-danger\",\n description: \"Error state for validation failures\",\n },\n },\n appearance: {\n default: {\n classes: \"\",\n description: \"Standard inline radio item\",\n },\n card: {\n classes:\n \"rounded-lg border border-reki-hairline bg-reki-base p-3 transition-colors hover:bg-reki-tint has-[[data-checked]]:border-reki-interact has-[[data-checked]]:bg-reki-tint\",\n description:\n \"Choice card appearance with border, padding, and highlighted selection state\",\n },\n },\n} as const;\n\nexport const REKI_RADIO_DEFAULT_VARIANTS = {\n variant: \"default\",\n appearance: \"default\",\n} as const;\n\n// Derived types from REKI_RADIO_VARIANTS\nexport type RekiRadioVariant = keyof typeof REKI_RADIO_VARIANTS.variant;\nexport type RekiRadioAppearance = keyof typeof REKI_RADIO_VARIANTS.appearance;\n\nexport interface RekiRadioVariantsProps {\n /**\n * Visual variant.\n * - `\"default\"` — Standard radio appearance\n * - `\"error\"` — Error state for validation failures\n * @default \"default\"\n */\n variant?: RekiRadioVariant;\n /**\n * Visual appearance.\n * - `\"default\"` — Standard inline radio item\n * - `\"card\"` — Choice card with border, padding, and highlighted selection state\n * @default \"default\"\n */\n appearance?: RekiRadioAppearance;\n}\n\nexport function radioVariants({\n variant = REKI_RADIO_DEFAULT_VARIANTS.variant,\n appearance = REKI_RADIO_DEFAULT_VARIANTS.appearance,\n}: RekiRadioVariantsProps = {}) {\n return cn(\n resolveVariant(\n REKI_RADIO_VARIANTS.variant,\n variant,\n REKI_RADIO_DEFAULT_VARIANTS.variant,\n ).classes,\n resolveVariant(\n REKI_RADIO_VARIANTS.appearance,\n appearance,\n REKI_RADIO_DEFAULT_VARIANTS.appearance,\n ).classes,\n );\n}\n\n// Legacy type alias for backwards compatibility\nexport type RadioVariant = RekiRadioVariant;\n\n/** Position of the radio control relative to its label */\nexport type RadioControlPosition = \"start\" | \"end\";\n\n// Context for passing controlPosition and appearance from Group to Items.\n// `controlPosition` may be undefined so each item can fall back to an\n// appearance-appropriate default (start for default, end for card).\nconst RadioGroupContext = createContext<{\n controlPosition: RadioControlPosition | undefined;\n appearance: RekiRadioAppearance;\n}>({\n controlPosition: undefined,\n appearance: \"default\",\n});\n\n/**\n * Radio group component props (with built-in Fieldset and RadioGroup)\n *\n * @example\n * // Basic usage\n * ```tsx\n * <Radio.Group legend=\"Notification preference\" defaultValue=\"email\">\n * <Radio.Item label=\"Email\" value=\"email\" />\n * <Radio.Item label=\"SMS\" value=\"sms\" />\n * <Radio.Item label=\"Push\" value=\"push\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Horizontal layout\n * ```tsx\n * <Radio.Group legend=\"Size\" orientation=\"horizontal\" defaultValue=\"md\">\n * <Radio.Item label=\"Small\" value=\"sm\" />\n * <Radio.Item label=\"Medium\" value=\"md\" />\n * <Radio.Item label=\"Large\" value=\"lg\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // With error and description\n * ```tsx\n * <Radio.Group\n * legend=\"Payment method\"\n * error=\"Please select a payment method\"\n * description=\"Choose how you'd like to pay\"\n * >\n * <Radio.Item label=\"Credit Card\" value=\"card\" />\n * <Radio.Item label=\"PayPal\" value=\"paypal\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Controlled\n * ```tsx\n * const [value, setValue] = useState(\"email\");\n * <Radio.Group legend=\"Contact\" value={value} onValueChange={setValue}>\n * <Radio.Item label=\"Email\" value=\"email\" />\n * <Radio.Item label=\"Phone\" value=\"phone\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Label before radio (controlPosition=\"end\")\n * ```tsx\n * <Radio.Group legend=\"Options\" controlPosition=\"end\" defaultValue=\"a\">\n * <Radio.Item label=\"Option A\" value=\"a\" />\n * <Radio.Item label=\"Option B\" value=\"b\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Typed values — pass a type parameter to constrain `value`\n * ```tsx\n * <Radio.Group<number> legend=\"Items per page\" defaultValue={10}>\n * <Radio.Item<number> label=\"10\" value={10} />\n * <Radio.Item<number> label=\"25\" value={25} />\n * </Radio.Group>\n * ```\n */\n/**\n * Props for Radio.Legend — a composable sub-component for labeling a Radio.Group.\n *\n * Place as a direct child of `<Radio.Group>` to provide a styled, accessible legend.\n * Accepts `className` for full styling control (e.g. `className=\"sr-only\"` to visually hide).\n *\n * @example\n * ```tsx\n * <Radio.Group>\n * <Radio.Legend className=\"sr-only\">Paths</Radio.Legend>\n * <Radio.Item label=\"Allow all paths\" value=\"all\" />\n * </Radio.Group>\n * ```\n */\nexport interface RadioLegendProps {\n /** Legend content */\n children: ReactNode;\n /** Additional CSS classes (e.g. \"sr-only\" to visually hide the legend) */\n className?: string;\n}\n\n/**\n * Radio.Group component props.\n *\n * Parameterised by the radio value type `Value` (defaults to `string`). Pass a\n * type argument — e.g. `<Radio.Group<number>>` — to type `value`,\n * `defaultValue`, and the value passed to `onValueChange`.\n *\n * Note: the generic only types the group-level value props. It does **not**\n * guarantee that the `value` of each `Radio.Item` child conforms to `Value`,\n * since children are passed as `ReactNode` and are not cross-checked at compile\n * time. Annotate items (`<Radio.Item<number>>`) for matching inference.\n */\nexport interface RadioGroupProps<Value = string> {\n /**\n * Legend text for the group (required for accessibility).\n * For more control over legend styling, omit this prop and use `<Radio.Legend>` as a child instead.\n */\n legend?: string;\n /** Child Radio.Item components (and optionally a Radio.Legend) */\n children: ReactNode;\n /** Layout direction of the radio items */\n orientation?: \"vertical\" | \"horizontal\";\n /**\n * Visual appearance applied to all Radio.Item children.\n * - `\"default\"` — Standard inline radio items\n * - `\"card\"` — Choice card with border, padding, and highlighted selection state\n *\n * Individual items can override this with their own `appearance` prop.\n * @default \"default\"\n */\n appearance?: RekiRadioAppearance;\n /** Error message for the group */\n error?: string;\n /** Helper text for the group */\n description?: ReactNode;\n /** Value of the radio that should be initially selected (uncontrolled) */\n defaultValue?: Value;\n /** Value of the radio that should be selected (controlled) */\n value?: Value;\n /**\n * Event handler called when the radio value changes. The second argument\n * carries native event details about the interaction.\n */\n onValueChange?: (\n value: Value,\n eventDetails: RadioGroupChangeEventDetails,\n ) => void;\n /** Whether all radios in the group are disabled */\n disabled?: boolean;\n /** Position of radio control relative to label: \"start\" puts radio before label, \"end\" puts label before radio. Defaults to \"start\" for default appearance and \"end\" for card appearance. */\n controlPosition?: RadioControlPosition;\n /** Form submission name for the radio group */\n name?: string;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Individual radio item within a group\n *\n * @example\n * ```tsx\n * <Radio.Item label=\"Option A\" value=\"a\" />\n * ```\n *\n * @example\n * // Disabled item\n * ```tsx\n * <Radio.Item label=\"Unavailable\" value=\"unavailable\" disabled />\n * ```\n */\n/**\n * Radio.Item component props.\n *\n * Parameterised by the radio value type `Value` (defaults to `string`). Pass a\n * type argument — e.g. `<Radio.Item<number>>` — to type `value` to match the\n * enclosing `Radio.Group`'s value type.\n */\nexport type RadioItemProps<Value = string> = {\n /** Visual variant: \"default\" or \"error\" for validation failures */\n variant?: RadioVariant;\n /**\n * Visual appearance of the radio item.\n * - `\"default\"` — Standard inline radio item\n * - `\"card\"` — Choice card with border, padding, and highlighted selection state\n *\n * When set on an individual item, overrides the group-level `appearance`.\n * @default \"default\"\n */\n appearance?: RekiRadioAppearance;\n /** Label content displayed next to radio (required). Accepts strings or React nodes for rich content. */\n label: ReactNode;\n /** Description text displayed below the label (only visible in card appearance) */\n description?: ReactNode;\n /** Value of the radio (required) */\n value: Value;\n /** Additional CSS classes for the label wrapper */\n className?: string;\n /** Whether the radio is disabled */\n disabled?: boolean;\n};\n\n// Radio.Item for use within Radio.Group\nfunction _RadioItem<T = string>(\n {\n className,\n disabled,\n variant = \"default\",\n appearance: appearanceProp,\n label,\n description,\n value,\n }: RadioItemProps<T>,\n ref: ForwardedRef<HTMLButtonElement>,\n) {\n const { controlPosition, appearance: groupAppearance } =\n useContext(RadioGroupContext);\n const appearance = appearanceProp ?? groupAppearance;\n const isCard = appearance === \"card\";\n\n // Fall back to an appearance-appropriate default when controlPosition is\n // not provided: card defaults to \"end\" (radio on the right), default\n // appearance defaults to \"start\" (radio on the left).\n const effectiveControlPosition: RadioControlPosition =\n controlPosition ?? (isCard ? \"end\" : \"start\");\n\n if (isCard) {\n const controlAtStart = effectiveControlPosition === \"start\";\n return (\n <label\n data-reki-component=\"Radio\"\n data-reki-part=\"item-label\"\n className={cn(\n \"m-0 group relative flex items-start gap-3 rounded-lg border border-reki-hairline bg-reki-base p-3 transition-colors has-[[data-checked]]:border-reki-interact has-[[data-checked]]:bg-reki-tint\",\n controlAtStart && \"flex-row-reverse\",\n variant === \"error\" &&\n \"border-reki-danger has-[[data-checked]]:border-reki-danger has-[[data-checked]]:bg-reki-base\",\n disabled\n ? \"cursor-not-allowed opacity-50\"\n : cn(\n \"has-[[data-disabled]]:cursor-not-allowed has-[[data-disabled]]:opacity-50 cursor-pointer\",\n variant !== \"error\" &&\n \"hover:not-has-[[data-disabled]]:bg-reki-tint\",\n ),\n className,\n )}\n >\n <div className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n <span className=\"text-base font-medium text-reki-default\">\n {label}\n </span>\n {description && (\n <span className=\"text-sm text-reki-subtle\">{description}</span>\n )}\n </div>\n <BaseRadio.Root\n ref={ref}\n data-reki-component=\"Radio\"\n data-reki-part=\"item\"\n value={value}\n disabled={disabled}\n className={cn(\n \"relative mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full border-0 bg-reki-base ring ring-2 focus:outline-none focus:ring-reki-focus focus-visible:ring-2 focus-visible:ring-reki-brand\",\n variant === \"error\" ? \"ring-reki-danger\" : \"ring-reki-line\",\n !disabled &&\n variant !== \"error\" &&\n \"group-hover:ring-reki-hairline focus-visible:outline-offset-3\",\n !disabled &&\n variant === \"error\" &&\n \"focus-visible:outline-offset-3\",\n \"data-[checked]:bg-reki-contrast\",\n )}\n >\n <BaseRadio.Indicator\n keepMounted\n className=\"flex items-center justify-center\"\n >\n <span className=\"h-2 w-2 rounded-full bg-reki-base\" />\n </BaseRadio.Indicator>\n </BaseRadio.Root>\n </label>\n );\n }\n\n return (\n <label\n data-reki-component=\"Radio\"\n data-reki-part=\"item-label\"\n className={cn(\n \"m-0 group relative inline-flex items-start gap-2\",\n // \"start\" (default): radio before label\n // \"end\": label before radio using flex-row-reverse\n effectiveControlPosition === \"end\" && \"flex-row-reverse justify-end\",\n disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\",\n className,\n )}\n >\n <BaseRadio.Root\n ref={ref}\n data-reki-component=\"Radio\"\n data-reki-part=\"item\"\n value={value}\n disabled={disabled}\n className={cn(\n \"relative mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full border-0 bg-reki-base ring focus:outline-none after:absolute after:-inset-x-3 after:-inset-y-2\",\n variant === \"error\" ? \"ring-reki-danger\" : \"ring-reki-line\",\n !disabled &&\n variant !== \"error\" &&\n \"group-hover:ring-reki-hairline focus:ring-reki-focus focus:ring-2 focus-visible:ring-2 focus-visible:ring-reki-brand focus-visible:outline-offset-3\",\n !disabled &&\n variant === \"error\" &&\n \"focus:ring-reki-focus focus:ring-2 focus-visible:ring-2 focus-visible:ring-reki-brand focus-visible:outline-offset-3\",\n \"data-[checked]:bg-reki-contrast\",\n )}\n >\n <BaseRadio.Indicator\n keepMounted\n className=\"flex items-center justify-center\"\n >\n <span className=\"h-2 w-2 rounded-full bg-reki-base\" />\n </BaseRadio.Indicator>\n </BaseRadio.Root>\n <span className=\"text-base text-reki-default\">{label}</span>\n </label>\n );\n}\n\n// React's `forwardRef` erases generic type parameters, so we cast the result\n// back to a generic call signature. The cast is required to support React 18\n// consumers (where function components can't receive `ref` as a plain prop).\nconst RadioItem = forwardRef(_RadioItem) as <T = string>(\n props: RadioItemProps<T> & { ref?: ForwardedRef<HTMLButtonElement> },\n) => ReactElement;\n\n(RadioItem as unknown as { displayName: string }).displayName = \"Radio.Item\";\n\n// Radio.Legend — composable legend sub-component for Radio.Group\nfunction RadioLegend({ children, className }: RadioLegendProps) {\n return (\n <Fieldset.Legend\n className={cn(\"text-base font-medium text-reki-default\", className)}\n >\n {children}\n </Fieldset.Legend>\n );\n}\n\nRadioLegend.displayName = \"Radio.Legend\";\n\n// Radio.Group with built-in Fieldset and RadioGroup\nfunction RadioGroup<Value = string>({\n legend,\n children,\n orientation = \"vertical\",\n appearance = \"default\",\n error,\n description,\n defaultValue,\n value,\n onValueChange,\n disabled,\n controlPosition,\n name,\n className,\n}: RadioGroupProps<Value>) {\n return (\n <RadioGroupContext.Provider value={{ controlPosition, appearance }}>\n <BaseRadioGroup<Value>\n defaultValue={defaultValue}\n value={value}\n onValueChange={(newValue, eventDetails) =>\n onValueChange?.(newValue, eventDetails)\n }\n disabled={disabled}\n name={name}\n >\n <Fieldset.Root\n disabled={disabled}\n className={cn(\"flex flex-col gap-4\", className)}\n >\n {legend && (\n <Fieldset.Legend className=\"text-base font-medium text-reki-default\">\n {legend}\n </Fieldset.Legend>\n )}\n <div\n className={cn(\n orientation === \"vertical\"\n ? cn(\"flex flex-col\", appearance === \"card\" ? \"gap-3\" : \"gap-2\")\n : appearance === \"card\"\n ? \"grid grid-cols-2 gap-3\"\n : \"flex flex-row flex-wrap gap-2\",\n )}\n >\n {children}\n </div>\n {error && <p className=\"text-sm text-reki-danger\">{error}</p>}\n {description && (\n <p className=\"text-sm text-reki-subtle\">{description}</p>\n )}\n </Fieldset.Root>\n </BaseRadioGroup>\n </RadioGroupContext.Provider>\n );\n}\n\nRadioGroup.displayName = \"Radio.Group\";\n\n// Export RadioGroup directly for external usage\nexport { RadioGroup };\n\n/**\n * Radio — radio button group for single-select choices.\n *\n * Compound component: `Radio.Group` (with built-in Fieldset), `Radio.Item`, and `Radio.Legend`.\n * Built on `@base-ui/react/radio-group` + `@base-ui/react/radio`.\n *\n * @example\n * ```tsx\n * // Simple: legend as a string prop\n * <Radio.Group legend=\"Notification preference\" defaultValue=\"email\">\n * <Radio.Item label=\"Email\" value=\"email\" />\n * <Radio.Item label=\"SMS\" value=\"sms\" />\n * <Radio.Item label=\"Push\" value=\"push\" />\n * </Radio.Group>\n *\n * // Composable: Radio.Legend for full styling control (e.g. visually hidden)\n * <Radio.Group defaultValue=\"email\">\n * <Radio.Legend className=\"sr-only\">Notification preference</Radio.Legend>\n * <Radio.Item label=\"Email\" value=\"email\" />\n * <Radio.Item label=\"SMS\" value=\"sms\" />\n * </Radio.Group>\n * ```\n */\nexport const Radio = Object.assign(RadioGroup, {\n Item: RadioItem,\n Group: RadioGroup,\n Legend: RadioLegend,\n});\n"],"names":["REKI_RADIO_VARIANTS","REKI_RADIO_DEFAULT_VARIANTS","radioVariants","variant","appearance","cn","resolveVariant","RadioGroupContext","createContext","_RadioItem","className","disabled","appearanceProp","label","description","value","ref","controlPosition","groupAppearance","useContext","isCard","effectiveControlPosition","jsxs","jsx","BaseRadio.Root","BaseRadio.Indicator","RadioItem","forwardRef","RadioLegend","children","Fieldset.Legend","RadioGroup","legend","orientation","error","defaultValue","onValueChange","name","BaseRadioGroup","newValue","eventDetails","Fieldset.Root","Radio"],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ "use client";
2
+ import { jsx as i } from "react/jsx-runtime";
3
+ import { useState as p } from "react";
4
+ import { StarIcon as c } from "@phosphor-icons/react";
5
+ import { c as a } from "./cn-ct4n7r74mh8y0f48.js";
6
+ function w({
7
+ value: t,
8
+ max: l = 5,
9
+ onChange: u,
10
+ readonly: n = !1,
11
+ className: m
12
+ }) {
13
+ const [f, s] = p(null), d = f ?? t ?? 0, h = (r) => {
14
+ n || u?.(r === t ? null : r);
15
+ };
16
+ return /* @__PURE__ */ i(
17
+ "div",
18
+ {
19
+ role: "slider",
20
+ "aria-label": "Rating",
21
+ "aria-valuemin": 1,
22
+ "aria-valuemax": l,
23
+ "aria-valuenow": t ?? void 0,
24
+ tabIndex: n ? void 0 : 0,
25
+ className: a("inline-flex items-center", m),
26
+ children: Array.from({ length: l }, (r, v) => {
27
+ const e = v + 1, o = e <= d ? "text-reki-default" : "text-reki-inactive";
28
+ return n ? /* @__PURE__ */ i("span", { className: a("inline-flex", o), children: /* @__PURE__ */ i(c, { weight: "fill", className: "size-4", "aria-hidden": !0 }) }, e) : /* @__PURE__ */ i(
29
+ "button",
30
+ {
31
+ type: "button",
32
+ "aria-label": `${e}`,
33
+ onClick: () => h(e),
34
+ onMouseEnter: () => s(e),
35
+ onMouseLeave: () => s(null),
36
+ className: a("inline-flex cursor-pointer", o),
37
+ children: /* @__PURE__ */ i(c, { weight: "fill", className: "size-4", "aria-hidden": !0 })
38
+ },
39
+ e
40
+ );
41
+ })
42
+ }
43
+ );
44
+ }
45
+ export {
46
+ w as R
47
+ };
48
+ //# sourceMappingURL=rating-yyd4t8e62ast4obo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rating-yyd4t8e62ast4obo.js","sources":["../../src/components/rating/rating.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { StarIcon } from \"@phosphor-icons/react\";\nimport { cn } from \"../../utils/cn\";\n\n/** Variant standard export (reki convention). */\nexport const REKI_RATING_VARIANTS = {} as const;\n\nexport const REKI_RATING_DEFAULT_VARIANTS = {} as const;\n\n/**\n * Rating component props.\n *\n * @example\n * ```tsx\n * <Rating value={3} readonly />\n * <Rating value={rating} onChange={setRating} />\n * ```\n */\nexport interface RatingProps {\n /** Current rating (1..max), or `null` for unrated. */\n value: number | null;\n /** Number of stars. @default 5 */\n max?: number;\n /** Called with the new rating, or `null` when the current value is cleared. */\n onChange?: (value: number | null) => void;\n /** Renders as read-only (no hover/click). @default false */\n readonly?: boolean;\n /** Additional CSS classes merged via `cn()`. Use reki semantic tokens only. */\n className?: string;\n}\n\n/**\n * Star rating for the `rating` field type. Read-only by default for cell\n * display; pass `onChange` for an editable control (clicking the current value\n * clears it).\n *\n * @example\n * ```tsx\n * <Rating value={4} readonly />\n * <Rating value={rating} onChange={setRating} />\n * ```\n */\nexport function Rating({\n value,\n max = 5,\n onChange,\n readonly = false,\n className,\n}: RatingProps) {\n const [hovered, setHovered] = useState<number | null>(null);\n const current = hovered ?? value ?? 0;\n\n const handleClick = (rating: number) => {\n if (readonly) {\n return;\n }\n onChange?.(rating === value ? null : rating);\n };\n\n return (\n <div\n role=\"slider\"\n aria-label=\"Rating\"\n aria-valuemin={1}\n aria-valuemax={max}\n aria-valuenow={value ?? undefined}\n tabIndex={readonly ? undefined : 0}\n className={cn(\"inline-flex items-center\", className)}\n >\n {Array.from({ length: max }, (_, index) => {\n const rating = index + 1;\n const isActive = rating <= current;\n const colorClass = isActive\n ? \"text-reki-default\"\n : \"text-reki-inactive\";\n\n if (readonly) {\n return (\n <span key={rating} className={cn(\"inline-flex\", colorClass)}>\n <StarIcon weight=\"fill\" className=\"size-4\" aria-hidden />\n </span>\n );\n }\n\n return (\n <button\n type=\"button\"\n key={rating}\n aria-label={`${rating}`}\n onClick={() => handleClick(rating)}\n onMouseEnter={() => setHovered(rating)}\n onMouseLeave={() => setHovered(null)}\n className={cn(\"inline-flex cursor-pointer\", colorClass)}\n >\n <StarIcon weight=\"fill\" className=\"size-4\" aria-hidden />\n </button>\n );\n })}\n </div>\n );\n}\n"],"names":["Rating","value","max","onChange","readonly","className","hovered","setHovered","useState","current","handleClick","rating","jsx","cn","_","index","colorClass","StarIcon"],"mappings":";;;;;AA0CO,SAASA,EAAO;AAAA,EACrB,OAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,UAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC;AACF,GAAgB;AACd,QAAM,CAACC,GAASC,CAAU,IAAIC,EAAwB,IAAI,GACpDC,IAAUH,KAAWL,KAAS,GAE9BS,IAAc,CAACC,MAAmB;AACtC,IAAIP,KAGJD,IAAWQ,MAAWV,IAAQ,OAAOU,CAAM;AAAA,EAC7C;AAEA,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAW;AAAA,MACX,iBAAe;AAAA,MACf,iBAAeV;AAAA,MACf,iBAAeD,KAAS;AAAA,MACxB,UAAUG,IAAW,SAAY;AAAA,MACjC,WAAWS,EAAG,4BAA4BR,CAAS;AAAA,MAElD,UAAA,MAAM,KAAK,EAAE,QAAQH,KAAO,CAACY,GAAGC,MAAU;AACzC,cAAMJ,IAASI,IAAQ,GAEjBC,IADWL,KAAUF,IAEvB,sBACA;AAEJ,eAAIL,sBAEC,QAAA,EAAkB,WAAWS,EAAG,eAAeG,CAAU,GACxD,UAAA,gBAAAJ,EAACK,GAAA,EAAS,QAAO,QAAO,WAAU,UAAS,eAAW,GAAA,CAAC,KAD9CN,CAEX,IAKF,gBAAAC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YAEL,cAAY,GAAGD,CAAM;AAAA,YACrB,SAAS,MAAMD,EAAYC,CAAM;AAAA,YACjC,cAAc,MAAMJ,EAAWI,CAAM;AAAA,YACrC,cAAc,MAAMJ,EAAW,IAAI;AAAA,YACnC,WAAWM,EAAG,8BAA8BG,CAAU;AAAA,YAEtD,4BAACC,GAAA,EAAS,QAAO,QAAO,WAAU,UAAS,eAAW,GAAA,CAAC;AAAA,UAAA;AAAA,UAPlDN;AAAA,QAAA;AAAA,MAUX,CAAC;AAAA,IAAA;AAAA,EAAA;AAGP;"}