@nori-ui/core 1.9.1 → 1.9.2

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 (267) hide show
  1. package/dist/{chunk-O6M3F7BZ.js → chunk-34TKMNID.js} +5 -5
  2. package/dist/{chunk-O6M3F7BZ.js.map → chunk-34TKMNID.js.map} +1 -1
  3. package/dist/{chunk-KLK7OMFT.js → chunk-35DVHUUE.js} +3 -3
  4. package/dist/{chunk-KLK7OMFT.js.map → chunk-35DVHUUE.js.map} +1 -1
  5. package/dist/{chunk-M4BI63P6.js → chunk-3FRCTNQH.js} +3 -3
  6. package/dist/{chunk-M4BI63P6.js.map → chunk-3FRCTNQH.js.map} +1 -1
  7. package/dist/{chunk-3CEJ5TB4.js → chunk-3H7LF45D.js} +4 -4
  8. package/dist/{chunk-3CEJ5TB4.js.map → chunk-3H7LF45D.js.map} +1 -1
  9. package/dist/{chunk-PJTCO76H.js → chunk-3KK2TXVY.js} +4 -4
  10. package/dist/{chunk-PJTCO76H.js.map → chunk-3KK2TXVY.js.map} +1 -1
  11. package/dist/{chunk-QB6RH6UU.js → chunk-3QQXYL5L.js} +4 -4
  12. package/dist/{chunk-QB6RH6UU.js.map → chunk-3QQXYL5L.js.map} +1 -1
  13. package/dist/{chunk-OELY6K44.js → chunk-3RNRVMNS.js} +3 -3
  14. package/dist/{chunk-OELY6K44.js.map → chunk-3RNRVMNS.js.map} +1 -1
  15. package/dist/{chunk-R5JMDDCB.js → chunk-3W2O4OBL.js} +4 -2
  16. package/dist/chunk-3W2O4OBL.js.map +1 -0
  17. package/dist/{chunk-MDOZGILD.js → chunk-4NBJW2JZ.js} +3 -3
  18. package/dist/{chunk-MDOZGILD.js.map → chunk-4NBJW2JZ.js.map} +1 -1
  19. package/dist/{chunk-ZGFXKYA5.js → chunk-57AVXG7D.js} +3 -3
  20. package/dist/{chunk-ZGFXKYA5.js.map → chunk-57AVXG7D.js.map} +1 -1
  21. package/dist/{chunk-HXCETKCC.js → chunk-7TESZOYQ.js} +3 -3
  22. package/dist/{chunk-HXCETKCC.js.map → chunk-7TESZOYQ.js.map} +1 -1
  23. package/dist/{chunk-TSWPHJIU.js → chunk-7UTQKMTE.js} +4 -4
  24. package/dist/{chunk-TSWPHJIU.js.map → chunk-7UTQKMTE.js.map} +1 -1
  25. package/dist/{chunk-U2ZKY2CP.js → chunk-AUNLIED3.js} +3 -3
  26. package/dist/{chunk-U2ZKY2CP.js.map → chunk-AUNLIED3.js.map} +1 -1
  27. package/dist/{chunk-J5LK2XHE.js → chunk-BBPKG3NI.js} +3 -3
  28. package/dist/{chunk-J5LK2XHE.js.map → chunk-BBPKG3NI.js.map} +1 -1
  29. package/dist/{chunk-IGBXSBF7.js → chunk-BCOXHHHC.js} +3 -3
  30. package/dist/{chunk-IGBXSBF7.js.map → chunk-BCOXHHHC.js.map} +1 -1
  31. package/dist/{chunk-L6VYDM7S.js → chunk-BJARVBFN.js} +3 -3
  32. package/dist/{chunk-L6VYDM7S.js.map → chunk-BJARVBFN.js.map} +1 -1
  33. package/dist/{chunk-BVLOX4A3.js → chunk-BJHMAGOQ.js} +3 -3
  34. package/dist/{chunk-BVLOX4A3.js.map → chunk-BJHMAGOQ.js.map} +1 -1
  35. package/dist/{chunk-VOF3S5I4.js → chunk-BOHLDAMY.js} +4 -4
  36. package/dist/{chunk-VOF3S5I4.js.map → chunk-BOHLDAMY.js.map} +1 -1
  37. package/dist/{chunk-3W3XYULK.js → chunk-C4HP2D46.js} +4 -4
  38. package/dist/{chunk-3W3XYULK.js.map → chunk-C4HP2D46.js.map} +1 -1
  39. package/dist/{chunk-C5HQPXRI.js → chunk-CMA3ZFCG.js} +4 -4
  40. package/dist/{chunk-C5HQPXRI.js.map → chunk-CMA3ZFCG.js.map} +1 -1
  41. package/dist/{chunk-EN4CLDGZ.js → chunk-D4J24WDF.js} +3 -3
  42. package/dist/{chunk-EN4CLDGZ.js.map → chunk-D4J24WDF.js.map} +1 -1
  43. package/dist/{chunk-MOAIQHR7.js → chunk-DJ3XX3CV.js} +3 -3
  44. package/dist/{chunk-MOAIQHR7.js.map → chunk-DJ3XX3CV.js.map} +1 -1
  45. package/dist/{chunk-IIVTPN62.js → chunk-DVO556JH.js} +3 -3
  46. package/dist/{chunk-IIVTPN62.js.map → chunk-DVO556JH.js.map} +1 -1
  47. package/dist/{chunk-2XJCLPNH.js → chunk-EC5TKCWA.js} +3 -3
  48. package/dist/{chunk-2XJCLPNH.js.map → chunk-EC5TKCWA.js.map} +1 -1
  49. package/dist/{chunk-VLZANXRZ.js → chunk-EMU3GXKM.js} +3 -3
  50. package/dist/{chunk-VLZANXRZ.js.map → chunk-EMU3GXKM.js.map} +1 -1
  51. package/dist/{chunk-F5UKI7XD.js → chunk-ENPBMEUW.js} +3 -3
  52. package/dist/{chunk-F5UKI7XD.js.map → chunk-ENPBMEUW.js.map} +1 -1
  53. package/dist/{chunk-V75O7QQO.js → chunk-FQDCPWLX.js} +3 -3
  54. package/dist/{chunk-V75O7QQO.js.map → chunk-FQDCPWLX.js.map} +1 -1
  55. package/dist/{chunk-3B345SQU.js → chunk-FRL5SLFT.js} +4 -4
  56. package/dist/{chunk-3B345SQU.js.map → chunk-FRL5SLFT.js.map} +1 -1
  57. package/dist/{chunk-5YHT252H.js → chunk-GTDDUPTE.js} +3 -3
  58. package/dist/{chunk-5YHT252H.js.map → chunk-GTDDUPTE.js.map} +1 -1
  59. package/dist/{chunk-OIHX5B4R.js → chunk-GYFX2I6B.js} +3 -3
  60. package/dist/{chunk-OIHX5B4R.js.map → chunk-GYFX2I6B.js.map} +1 -1
  61. package/dist/{chunk-PQW5LKAI.js → chunk-J2FSGJ2P.js} +3 -3
  62. package/dist/{chunk-PQW5LKAI.js.map → chunk-J2FSGJ2P.js.map} +1 -1
  63. package/dist/{chunk-C32XGHWO.js → chunk-KE2TP5XZ.js} +3 -3
  64. package/dist/{chunk-C32XGHWO.js.map → chunk-KE2TP5XZ.js.map} +1 -1
  65. package/dist/{chunk-USFXANEU.js → chunk-LWW3FJHF.js} +3 -3
  66. package/dist/{chunk-USFXANEU.js.map → chunk-LWW3FJHF.js.map} +1 -1
  67. package/dist/{chunk-3IIIHZHT.js → chunk-MQZXQOGY.js} +3 -3
  68. package/dist/{chunk-3IIIHZHT.js.map → chunk-MQZXQOGY.js.map} +1 -1
  69. package/dist/{chunk-BOMPFNM4.js → chunk-NSLVUCYP.js} +3 -3
  70. package/dist/{chunk-BOMPFNM4.js.map → chunk-NSLVUCYP.js.map} +1 -1
  71. package/dist/{chunk-7Z4NMNX6.js → chunk-O656K7OS.js} +3 -3
  72. package/dist/{chunk-7Z4NMNX6.js.map → chunk-O656K7OS.js.map} +1 -1
  73. package/dist/{chunk-S763GTIZ.js → chunk-PCUWBRNT.js} +3 -3
  74. package/dist/{chunk-S763GTIZ.js.map → chunk-PCUWBRNT.js.map} +1 -1
  75. package/dist/{chunk-MK57AOTI.js → chunk-QNYGQYAO.js} +5 -5
  76. package/dist/{chunk-MK57AOTI.js.map → chunk-QNYGQYAO.js.map} +1 -1
  77. package/dist/{chunk-UKDDK42K.js → chunk-QOVLTVJN.js} +3 -3
  78. package/dist/{chunk-UKDDK42K.js.map → chunk-QOVLTVJN.js.map} +1 -1
  79. package/dist/{chunk-PJXVLE24.js → chunk-QYA7HYFI.js} +5 -5
  80. package/dist/{chunk-PJXVLE24.js.map → chunk-QYA7HYFI.js.map} +1 -1
  81. package/dist/{chunk-SF6WPUC5.js → chunk-QZ6T4R44.js} +3 -3
  82. package/dist/{chunk-SF6WPUC5.js.map → chunk-QZ6T4R44.js.map} +1 -1
  83. package/dist/{chunk-7FSFJA33.js → chunk-SNGWMCZH.js} +3 -3
  84. package/dist/{chunk-7FSFJA33.js.map → chunk-SNGWMCZH.js.map} +1 -1
  85. package/dist/{chunk-XQNVWHMN.js → chunk-UHAI3QOA.js} +3 -3
  86. package/dist/{chunk-XQNVWHMN.js.map → chunk-UHAI3QOA.js.map} +1 -1
  87. package/dist/{chunk-OHWRTHGL.js → chunk-UHHW7GZ4.js} +4 -4
  88. package/dist/{chunk-OHWRTHGL.js.map → chunk-UHHW7GZ4.js.map} +1 -1
  89. package/dist/{chunk-PGYEIXCO.js → chunk-UKYSXWTI.js} +4 -4
  90. package/dist/{chunk-PGYEIXCO.js.map → chunk-UKYSXWTI.js.map} +1 -1
  91. package/dist/{chunk-IWM2XDXH.js → chunk-UPSNKESO.js} +3 -3
  92. package/dist/{chunk-IWM2XDXH.js.map → chunk-UPSNKESO.js.map} +1 -1
  93. package/dist/{chunk-BXZGCOKT.js → chunk-WEHUVESG.js} +4 -4
  94. package/dist/{chunk-BXZGCOKT.js.map → chunk-WEHUVESG.js.map} +1 -1
  95. package/dist/{chunk-ISCJST4P.js → chunk-WFR55YKL.js} +3 -3
  96. package/dist/{chunk-ISCJST4P.js.map → chunk-WFR55YKL.js.map} +1 -1
  97. package/dist/{chunk-MYBBBLYE.js → chunk-WKQUCDGP.js} +3 -3
  98. package/dist/{chunk-MYBBBLYE.js.map → chunk-WKQUCDGP.js.map} +1 -1
  99. package/dist/{chunk-STX5UKYT.js → chunk-XAXIQ55K.js} +3 -3
  100. package/dist/{chunk-STX5UKYT.js.map → chunk-XAXIQ55K.js.map} +1 -1
  101. package/dist/{chunk-H2LHWJ52.js → chunk-YHQFS4ZF.js} +4 -4
  102. package/dist/{chunk-H2LHWJ52.js.map → chunk-YHQFS4ZF.js.map} +1 -1
  103. package/dist/{chunk-VL2WNGPF.js → chunk-YUYYAMLE.js} +3 -3
  104. package/dist/{chunk-VL2WNGPF.js.map → chunk-YUYYAMLE.js.map} +1 -1
  105. package/dist/{chunk-CPIKN4BX.js → chunk-YYVL2FWF.js} +5 -5
  106. package/dist/{chunk-CPIKN4BX.js.map → chunk-YYVL2FWF.js.map} +1 -1
  107. package/dist/client.cjs +7 -5
  108. package/dist/client.cjs.map +1 -1
  109. package/dist/client.js +56 -56
  110. package/dist/components/Accordion/index.cjs +2 -0
  111. package/dist/components/Accordion/index.cjs.map +1 -1
  112. package/dist/components/Accordion/index.js +3 -3
  113. package/dist/components/Alert/index.cjs +2 -0
  114. package/dist/components/Alert/index.cjs.map +1 -1
  115. package/dist/components/Alert/index.js +3 -3
  116. package/dist/components/AlertDialog/index.cjs +2 -0
  117. package/dist/components/AlertDialog/index.cjs.map +1 -1
  118. package/dist/components/AlertDialog/index.js +2 -2
  119. package/dist/components/Avatar/index.cjs +2 -0
  120. package/dist/components/Avatar/index.cjs.map +1 -1
  121. package/dist/components/Avatar/index.js +2 -2
  122. package/dist/components/Badge/index.cjs +2 -0
  123. package/dist/components/Badge/index.cjs.map +1 -1
  124. package/dist/components/Badge/index.js +2 -2
  125. package/dist/components/Box/index.cjs +2 -0
  126. package/dist/components/Box/index.cjs.map +1 -1
  127. package/dist/components/Box/index.js +4 -4
  128. package/dist/components/Breadcrumb/index.cjs +2 -0
  129. package/dist/components/Breadcrumb/index.cjs.map +1 -1
  130. package/dist/components/Breadcrumb/index.js +3 -3
  131. package/dist/components/Button/index.cjs +2 -0
  132. package/dist/components/Button/index.cjs.map +1 -1
  133. package/dist/components/Button/index.js +2 -2
  134. package/dist/components/Calendar/index.cjs +2 -0
  135. package/dist/components/Calendar/index.cjs.map +1 -1
  136. package/dist/components/Calendar/index.js +4 -4
  137. package/dist/components/Card/index.cjs +2 -0
  138. package/dist/components/Card/index.cjs.map +1 -1
  139. package/dist/components/Card/index.js +2 -2
  140. package/dist/components/Checkbox/index.cjs +2 -0
  141. package/dist/components/Checkbox/index.cjs.map +1 -1
  142. package/dist/components/Checkbox/index.js +3 -3
  143. package/dist/components/Collapsible/index.cjs +2 -0
  144. package/dist/components/Collapsible/index.cjs.map +1 -1
  145. package/dist/components/Collapsible/index.js +2 -2
  146. package/dist/components/Combobox/index.cjs +2 -0
  147. package/dist/components/Combobox/index.cjs.map +1 -1
  148. package/dist/components/Combobox/index.js +4 -4
  149. package/dist/components/Command/index.cjs +2 -0
  150. package/dist/components/Command/index.cjs.map +1 -1
  151. package/dist/components/Command/index.js +4 -4
  152. package/dist/components/ContextMenu/index.cjs +3 -1
  153. package/dist/components/ContextMenu/index.cjs.map +1 -1
  154. package/dist/components/ContextMenu/index.js +4 -4
  155. package/dist/components/DataTable/index.cjs +2 -0
  156. package/dist/components/DataTable/index.cjs.map +1 -1
  157. package/dist/components/DataTable/index.js +3 -3
  158. package/dist/components/DatePicker/index.cjs +2 -0
  159. package/dist/components/DatePicker/index.cjs.map +1 -1
  160. package/dist/components/DatePicker/index.js +6 -6
  161. package/dist/components/Dialog/index.cjs +2 -0
  162. package/dist/components/Dialog/index.cjs.map +1 -1
  163. package/dist/components/Dialog/index.js +3 -3
  164. package/dist/components/DropdownMenu/index.cjs +3 -1
  165. package/dist/components/DropdownMenu/index.cjs.map +1 -1
  166. package/dist/components/DropdownMenu/index.js +3 -3
  167. package/dist/components/Empty/index.cjs +2 -0
  168. package/dist/components/Empty/index.cjs.map +1 -1
  169. package/dist/components/Empty/index.js +2 -2
  170. package/dist/components/Field/index.cjs +4 -2
  171. package/dist/components/Field/index.cjs.map +1 -1
  172. package/dist/components/Field/index.js +2 -2
  173. package/dist/components/FloatButton/index.cjs +2 -0
  174. package/dist/components/FloatButton/index.cjs.map +1 -1
  175. package/dist/components/FloatButton/index.js +4 -4
  176. package/dist/components/HStack/index.cjs +2 -0
  177. package/dist/components/HStack/index.cjs.map +1 -1
  178. package/dist/components/HStack/index.js +4 -4
  179. package/dist/components/HoverCard/index.cjs +2 -0
  180. package/dist/components/HoverCard/index.cjs.map +1 -1
  181. package/dist/components/HoverCard/index.js +3 -3
  182. package/dist/components/InputGroup/index.cjs +3 -1
  183. package/dist/components/InputGroup/index.cjs.map +1 -1
  184. package/dist/components/InputGroup/index.js +2 -2
  185. package/dist/components/InputOTP/index.cjs +2 -0
  186. package/dist/components/InputOTP/index.cjs.map +1 -1
  187. package/dist/components/InputOTP/index.js +2 -2
  188. package/dist/components/Item/index.cjs +2 -0
  189. package/dist/components/Item/index.cjs.map +1 -1
  190. package/dist/components/Item/index.js +2 -2
  191. package/dist/components/Kbd/index.cjs +2 -0
  192. package/dist/components/Kbd/index.cjs.map +1 -1
  193. package/dist/components/Kbd/index.js +2 -2
  194. package/dist/components/Label/index.cjs +3 -1
  195. package/dist/components/Label/index.cjs.map +1 -1
  196. package/dist/components/Label/index.js +2 -2
  197. package/dist/components/Pagination/index.cjs +2 -0
  198. package/dist/components/Pagination/index.cjs.map +1 -1
  199. package/dist/components/Pagination/index.js +4 -4
  200. package/dist/components/Popover/index.cjs +2 -0
  201. package/dist/components/Popover/index.cjs.map +1 -1
  202. package/dist/components/Popover/index.js +2 -2
  203. package/dist/components/Progress/index.cjs +2 -0
  204. package/dist/components/Progress/index.cjs.map +1 -1
  205. package/dist/components/Progress/index.js +2 -2
  206. package/dist/components/Radio/index.cjs +2 -0
  207. package/dist/components/Radio/index.cjs.map +1 -1
  208. package/dist/components/Radio/index.js +2 -2
  209. package/dist/components/SegmentedControl/index.cjs +2 -0
  210. package/dist/components/SegmentedControl/index.cjs.map +1 -1
  211. package/dist/components/SegmentedControl/index.js +2 -2
  212. package/dist/components/Select/index.cjs +2 -0
  213. package/dist/components/Select/index.cjs.map +1 -1
  214. package/dist/components/Select/index.js +3 -3
  215. package/dist/components/Separator/index.cjs +2 -0
  216. package/dist/components/Separator/index.cjs.map +1 -1
  217. package/dist/components/Separator/index.js +2 -2
  218. package/dist/components/Sheet/index.cjs +2 -0
  219. package/dist/components/Sheet/index.cjs.map +1 -1
  220. package/dist/components/Sheet/index.js +2 -2
  221. package/dist/components/Sidebar/index.cjs +2 -0
  222. package/dist/components/Sidebar/index.cjs.map +1 -1
  223. package/dist/components/Sidebar/index.js +2 -2
  224. package/dist/components/Skeleton/index.cjs +2 -0
  225. package/dist/components/Skeleton/index.cjs.map +1 -1
  226. package/dist/components/Skeleton/index.js +2 -2
  227. package/dist/components/Slider/index.cjs +2 -0
  228. package/dist/components/Slider/index.cjs.map +1 -1
  229. package/dist/components/Slider/index.js +2 -2
  230. package/dist/components/Switch/index.cjs +2 -0
  231. package/dist/components/Switch/index.cjs.map +1 -1
  232. package/dist/components/Switch/index.js +2 -2
  233. package/dist/components/Table/index.cjs +2 -0
  234. package/dist/components/Table/index.cjs.map +1 -1
  235. package/dist/components/Table/index.js +2 -2
  236. package/dist/components/Tabs/index.cjs +2 -0
  237. package/dist/components/Tabs/index.cjs.map +1 -1
  238. package/dist/components/Tabs/index.js +2 -2
  239. package/dist/components/Text/index.cjs +2 -0
  240. package/dist/components/Text/index.cjs.map +1 -1
  241. package/dist/components/Text/index.js +2 -2
  242. package/dist/components/TextArea/index.cjs +2 -0
  243. package/dist/components/TextArea/index.cjs.map +1 -1
  244. package/dist/components/TextArea/index.js +3 -3
  245. package/dist/components/TextInput/index.cjs +2 -0
  246. package/dist/components/TextInput/index.cjs.map +1 -1
  247. package/dist/components/TextInput/index.js +2 -2
  248. package/dist/components/Toggle/index.cjs +2 -0
  249. package/dist/components/Toggle/index.cjs.map +1 -1
  250. package/dist/components/Toggle/index.js +2 -2
  251. package/dist/components/Tooltip/index.cjs +2 -0
  252. package/dist/components/Tooltip/index.cjs.map +1 -1
  253. package/dist/components/Tooltip/index.js +2 -2
  254. package/dist/components/VStack/index.cjs +2 -0
  255. package/dist/components/VStack/index.cjs.map +1 -1
  256. package/dist/components/VStack/index.js +4 -4
  257. package/dist/icons/index.cjs +2 -0
  258. package/dist/icons/index.cjs.map +1 -1
  259. package/dist/icons/index.js +2 -2
  260. package/dist/index.cjs +7 -5
  261. package/dist/index.cjs.map +1 -1
  262. package/dist/index.js +53 -53
  263. package/dist/theme/index.cjs +2 -0
  264. package/dist/theme/index.cjs.map +1 -1
  265. package/dist/theme/index.js +2 -2
  266. package/package.json +1 -1
  267. package/dist/chunk-R5JMDDCB.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/theme/px.ts","../../../../tokens/build/theme.ts","../../../src/theme/context.tsx","../../../src/theme/use-color-scheme.tsx","../../../src/theme/use-theme-colors.ts","../../../src/utils/cn.ts","../../../src/components/Toggle/Toggle.tsx"],"names":["createContext","Platform","useContext","useState","Appearance","useEffect","useCallback","jsx","Pressable","RNText","current","useRef","useMemo","View"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Strip the `px` suffix from a CSS-flavored token value and return a\n * number, the form React Native style props expect for properties like\n * `borderRadius`, `paddingHorizontal`, `fontSize`, etc.\n *\n * The tokens package emits all dimensional tokens as `${number}px`\n * strings (it's the lingua franca for both CSS and Style Dictionary\n * consumers); inside RN we need the unitless number. RN-Web tolerates\n * both, but native is strict.\n *\n * Falls through unchanged for tokens that already came in as numbers\n * (forward-compat).\n *\n * Examples:\n * px('6px') → 6\n * px('1.5px') → 1.5\n * px(6) → 6\n * px('foo') → 0 (defensive — bad input shouldn't crash render)\n */\nexport function px(value: string | number): number {\n if (typeof value === 'number') {\n return value;\n }\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : 0;\n}\n","// GENERATED by @nori-ui/tokens — DO NOT EDIT.\n// Run `yarn build:tokens` to regenerate.\n\n// Generated for light mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const theme = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#fafafa\",\n elevated: \"#ffffff\",\n subtle: \"#f4f4f5\",\n },\n border: {\n default: \"#e4e4e7\",\n strong: \"#d4d4d8\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#0d9488\",\n primaryHover: \"#0f766e\",\n primaryPressed: \"#115e59\",\n },\n text: {\n default: \"#18181b\",\n inverted: \"#fafafa\",\n muted: \"#52525b\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\nexport type Theme = typeof theme;\n\n\n// Dark mode overrides\n// Generated for dark mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const themeDark = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#18181b\",\n elevated: \"#3f3f46\",\n subtle: \"#27272a\",\n },\n border: {\n default: \"#3f3f46\",\n strong: \"#52525b\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#2dd4bf\",\n primaryHover: \"#5eead4\",\n primaryPressed: \"#99f6e4\",\n },\n text: {\n default: \"#fafafa\",\n inverted: \"#18181b\",\n muted: \"#a1a1aa\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\n","'use client';\n\nimport { themeDark as defaultDark, theme as defaultLight, type Theme } from '@nori-ui/tokens';\nimport type { ReactNode } from 'react';\nimport { createContext } from 'react';\n\n/**\n * A `NoriTheme` is a paired light/dark palette. The active half is picked\n * by `useColorScheme()` so the same theme object covers both schemes.\n *\n * Build one yourself by spreading the defaults and overriding the colors\n * you care about, or pick a preset from `@nori-ui/core/themes` (see the\n * Theming docs for examples).\n */\nexport type NoriTheme = {\n light: Theme;\n dark: Theme;\n};\n\n/**\n * Default Nori palette — teal primary on a warm-paper light surface, and\n * teal-400 primary on a deep-zinc dark surface. Mirrors the `theme` /\n * `themeDark` exports from @nori-ui/tokens.\n */\nexport const defaultTheme: NoriTheme = {\n light: defaultLight,\n dark: defaultDark as unknown as Theme,\n};\n\n// Context value is the FULL pair, not the active half. `useThemeColors`\n// (the hook components reach for) resolves it to the right one based on\n// the current color scheme. Storing the pair means a parent only has to\n// declare the theme once — switching scheme is a separate concern.\nexport const ThemeContext = createContext<NoriTheme>(defaultTheme);\nThemeContext.displayName = 'ThemeContext';\n\nexport type ThemeProviderProps = {\n /**\n * The theme to apply to descendants. Pass either:\n * - a full `NoriTheme` (`{ light, dark }`) — both schemes covered\n * - a single `Theme` — used for both light and dark (rare; mostly\n * useful when you ONLY ever render in one scheme)\n * - omit — falls back to the Nori default (teal palette)\n */\n theme?: NoriTheme | Theme;\n children?: ReactNode;\n};\n\nconst isFullTheme = (t: NoriTheme | Theme): t is NoriTheme => 'light' in t && 'dark' in t;\n\nexport function ThemeProvider({ theme, children }: ThemeProviderProps) {\n const value: NoriTheme =\n theme === undefined ? defaultTheme : isFullTheme(theme) ? theme : { light: theme, dark: theme };\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n","'use client';\n\nimport { createContext, type ReactNode, useContext, useEffect, useState } from 'react';\nimport { Appearance, Platform } from 'react-native';\n\nexport type ColorScheme = 'light' | 'dark';\n\n// Override channel so a parent can force a scheme (e.g. an app shell with\n// hard-coded dark chrome that wants nested components to render against\n// the dark token half regardless of the OS Appearance). `null` means\n// \"no override — use the system signal\".\nconst ColorSchemeOverrideContext = createContext<ColorScheme | null>(null);\nColorSchemeOverrideContext.displayName = 'ColorSchemeOverrideContext';\n\nexport type ColorSchemeProviderProps = {\n /** Force a specific scheme for descendants. */\n value: ColorScheme;\n children?: ReactNode;\n};\n\n/**\n * Forces a color scheme for all descendants. Useful when a screen's chrome\n * is hard-coded to one scheme (e.g. a forced-dark editorial surface) and\n * you want library components inside it to follow that, not the OS.\n */\nexport function ColorSchemeProvider({ value, children }: ColorSchemeProviderProps) {\n return <ColorSchemeOverrideContext.Provider value={value}>{children}</ColorSchemeOverrideContext.Provider>;\n}\n\nconst isWeb = Platform.OS === 'web';\n\n// Web: a document is \"in dark mode\" when the root <html> element carries\n// the `dark` class (Tailwind / Fumadocs convention) OR a `data-theme=\"dark\"`\n// attribute (matches the `darkMode` selectors in our Tailwind preset).\n// We deliberately don't fall back to `prefers-color-scheme` — the app\n// usually owns that decision and writes it onto <html>; tracking the system\n// preference too would fight the app's chosen value.\nfunction readWebScheme(): ColorScheme {\n if (typeof document === 'undefined') {\n return 'light';\n }\n const root = document.documentElement;\n if (root.classList.contains('dark')) {\n return 'dark';\n }\n if (root.getAttribute('data-theme') === 'dark') {\n return 'dark';\n }\n return 'light';\n}\n\n/**\n * Returns the current color scheme — `'light'` or `'dark'`.\n *\n * On web: observes the root `<html>` element's `class=\"dark\"` and\n * `data-theme=\"dark\"` attribute (the same signals our Tailwind preset\n * keys on). Updates live as those flip.\n *\n * On native: delegates to `react-native`'s `Appearance` API so the hook\n * tracks the OS preference without extra wiring.\n *\n * Components consume this indirectly via `useThemeColors()`; reach for\n * this directly when you need the raw scheme (e.g. to swap an icon).\n */\nexport function useColorScheme(): ColorScheme {\n // A `<ColorSchemeProvider value=\"dark\">` ancestor (or NoriProvider's\n // `colorScheme` prop, which mounts one) wins over the OS signal — the\n // app shell knows which scheme its chrome is locked to.\n const override = useContext(ColorSchemeOverrideContext);\n\n const [scheme, setScheme] = useState<ColorScheme>(() => {\n if (isWeb) {\n return readWebScheme();\n }\n return (Appearance.getColorScheme() ?? 'light') as ColorScheme;\n });\n\n useEffect(() => {\n if (isWeb) {\n const root = document.documentElement;\n const update = () => setScheme(readWebScheme());\n const observer = new MutationObserver(update);\n observer.observe(root, { attributes: true, attributeFilter: ['class', 'data-theme'] });\n // Sync once after mount in case SSR shipped a different value.\n update();\n return () => observer.disconnect();\n }\n\n const sub = Appearance.addChangeListener(({ colorScheme }) => {\n setScheme((colorScheme ?? 'light') as ColorScheme);\n });\n return () => sub.remove();\n }, []);\n\n return override ?? scheme;\n}\n","'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport { useContext } from 'react';\nimport { ThemeContext } from './context';\nimport { useColorScheme } from './use-color-scheme';\n\n/**\n * Returns the active token palette — `theme.light` in light mode,\n * `theme.dark` in dark mode. Resolves the theme via `ThemeContext` so\n * any ancestor `<ThemeProvider theme={...}>` flows through. With no\n * provider in the tree, the default Nori palette (teal) is used.\n *\n * Use this **inside a component** when you need a hex value for a React\n * Native `style` prop (`backgroundColor`, `borderColor`, etc.).\n *\n * Note: className-based styles (e.g. `bg-semantic-interactive-primary`)\n * compile against the @nori-ui/tokens palette at build time and don't\n * follow `<ThemeProvider>` overrides today. Inline styles via this hook\n * always do — and inline beats class on CSS specificity, so the visible\n * color you see is whatever the hook resolves to. CSS-variable theming\n * for the className path is a planned follow-up.\n */\nexport function useThemeColors(): Theme {\n const scheme = useColorScheme();\n const themePair = useContext(ThemeContext);\n return scheme === 'dark' ? themePair.dark : themePair.light;\n}\n","// cn — class-name merger. clsx-compatible shape.\n//\n// Intentionally does NOT deduplicate Tailwind conflicts (e.g. \"text-sm text-lg\").\n// That's `tailwind-merge`'s job; we defer adding it until a component actually\n// needs it, to keep the core tree-shakable and the runtime zero-dep.\n\nexport type ClassInput =\n | string\n | number\n | boolean\n | null\n | undefined\n | ClassInput[]\n | Record<string, boolean | number | null | undefined>;\n\nexport function cn(...inputs: ClassInput[]): string {\n const out: string[] = [];\n for (const input of inputs) {\n append(out, input);\n }\n return out.join(' ');\n}\n\nfunction append(out: string[], input: ClassInput): void {\n if (!input) {\n return;\n }\n if (typeof input === 'string') {\n if (input.length > 0) {\n out.push(input);\n }\n return;\n }\n if (typeof input === 'number') {\n return; // numbers are never class names\n }\n if (Array.isArray(input)) {\n for (const inner of input) {\n append(out, inner);\n }\n return;\n }\n if (typeof input === 'object') {\n for (const key of Object.keys(input)) {\n if (input[key]) {\n out.push(key);\n }\n }\n }\n}\n","'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport {\n createContext,\n type KeyboardEvent,\n type ReactNode,\n type RefObject,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type ToggleVariant = 'default' | 'outline';\nexport type ToggleSize = 'sm' | 'md' | 'lg';\n\ntype SizeTokens = {\n height: number; // component-density literal — not from theme\n paddingHKey: keyof Theme['spacing'];\n fontKey: keyof Theme['fontSize'];\n iconSize: number; // component-density literal — not from theme\n};\n\n// Heights and icon sizes are intentionally hardcoded — they're tightly\n// coupled to the toggle's overall density. PaddingH and fontSize are\n// pulled from the active theme so a custom theme that scales the\n// spacing / fontSize ramps also scales every Toggle on the page.\nconst SIZE_TOKENS: Record<ToggleSize, SizeTokens> = {\n sm: { height: 32, paddingHKey: '2', fontKey: 'sm', iconSize: 14 }, // 8px (closest to legacy 10) / fontSize sm 14\n md: { height: 40, paddingHKey: '3', fontKey: 'sm', iconSize: 16 }, // 12px / fontSize sm 14\n lg: { height: 48, paddingHKey: '4', fontKey: 'md', iconSize: 20 }, // 16px / fontSize md 16\n};\n\n// ---------- standalone <Toggle> -----------------------------------------------\n\nexport type ToggleProps = {\n /** Controlled pressed state. Pair with `onChange`. */\n pressed?: boolean;\n /** Uncontrolled initial pressed state. Ignored when `pressed` is provided. */\n defaultPressed?: boolean;\n /** Fires with the next pressed state when the user toggles. */\n onChange?: (next: boolean) => void;\n /**\n * Visual treatment.\n * - `default` — transparent when off, filled with `interactive.primary` when on.\n * - `outline` — bordered when off, tinted background + accent border when on.\n * @defaultValue 'default'\n */\n variant?: ToggleVariant;\n /** @defaultValue 'md' */\n size?: ToggleSize;\n /** Group-level disable (also forwarded by `<ToggleGroup>` to its items). */\n disabled?: boolean;\n /** Visible label or icon content. */\n children?: ReactNode;\n /** Required when `children` is icon-only. */\n 'aria-label'?: string;\n accessibilityLabel?: string;\n className?: string;\n testID?: string;\n};\n\n/**\n * A two-state button — like the bold / italic buttons in a rich-text\n * toolbar. Use `<Toggle>` standalone for a single bistable action; reach\n * for `<ToggleGroup>` when you need a clustered set with shared selection\n * semantics.\n *\n * Reach for `<Switch>` instead when the control flips a setting in a form\n * (a \"darkmode on/off\" preference). Reach for `<Checkbox>` when the\n * control selects a value inside a form. `<Toggle>` is for buttons that\n * carry an on/off visual.\n */\nconst ToggleRoot = ({\n pressed,\n defaultPressed = false,\n onChange,\n variant = 'default',\n size = 'md',\n disabled = false,\n children,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n className,\n testID,\n}: ToggleProps) => {\n const [inner, setInner] = useState<boolean>(defaultPressed);\n const isControlled = pressed !== undefined;\n const isOn = isControlled ? Boolean(pressed) : inner;\n\n const handlePress = useCallback(() => {\n if (disabled) {\n return;\n }\n const next = !isOn;\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n }, [disabled, isControlled, isOn, onChange]);\n\n return (\n <ToggleVisual\n isOn={isOn}\n disabled={disabled}\n variant={variant}\n size={size}\n onPress={handlePress}\n ariaLabel={ariaLabel ?? accessibilityLabel}\n className={className}\n testID={testID}\n >\n {children}\n </ToggleVisual>\n );\n};\n\n// ---------- shared visual -----------------------------------------------------\n\ntype ToggleVisualProps = {\n isOn: boolean;\n disabled: boolean;\n variant: ToggleVariant;\n size: ToggleSize;\n onPress: () => void;\n onKeyDown?: ((event: KeyboardEvent<HTMLElement>) => void) | undefined;\n onFocus?: (() => void) | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n testID?: string | undefined;\n children?: ReactNode | undefined;\n /**\n * Group-aware roving tabindex. `undefined` means \"the natural tab\n * stop\" (standalone Toggle); inside a group, a number is supplied.\n */\n tabIndex?: number | undefined;\n /** Border-radius override for grouped items (square middle, rounded ends). */\n borderRadius?: number | { topLeft: number; topRight: number; bottomLeft: number; bottomRight: number } | undefined;\n /** Suppress the right border so adjacent items share a single seam. */\n suppressRightBorder?: boolean | undefined;\n /** Force the bordered look (used by grouped `default` items so the row reads as one chip). */\n forceBorder?: boolean | undefined;\n refCallback?: ((node: HTMLElement | null) => void) | undefined;\n};\n\nconst ToggleVisual = ({\n isOn,\n disabled,\n variant,\n size,\n onPress,\n onKeyDown,\n onFocus,\n ariaLabel,\n className,\n testID,\n children,\n tabIndex,\n borderRadius,\n suppressRightBorder,\n forceBorder,\n refCallback,\n}: ToggleVisualProps) => {\n const colors = useThemeColors();\n const tokens = SIZE_TOKENS[size];\n const paddingH = px(colors.spacing[tokens.paddingHKey]);\n const fontSize = px(colors.fontSize[tokens.fontKey]);\n\n const radiusEach = borderRadius && typeof borderRadius !== 'number' ? borderRadius : undefined;\n const radiusValue = typeof borderRadius === 'number' ? borderRadius : radiusEach ? undefined : px(colors.radius.md);\n\n const baseStyle: ViewStyle = {\n height: tokens.height,\n paddingHorizontal: paddingH,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: px(colors.spacing['2']) - 2, // closest theme-rooted approximation of legacy 6\n ...(radiusValue !== undefined ? { borderRadius: radiusValue } : null),\n ...(radiusEach\n ? {\n borderTopLeftRadius: radiusEach.topLeft,\n borderTopRightRadius: radiusEach.topRight,\n borderBottomLeftRadius: radiusEach.bottomLeft,\n borderBottomRightRadius: radiusEach.bottomRight,\n }\n : null),\n // 200ms color/background transition. Web only; native ignores it.\n ...({\n transitionProperty: 'background-color, border-color, color',\n transitionDuration: '200ms',\n transitionTimingFunction: 'ease',\n } as ViewStyle),\n };\n\n const surfaceFor = (hovered: boolean): ViewStyle => {\n if (variant === 'outline' || forceBorder) {\n return {\n backgroundColor: isOn\n ? variant === 'outline'\n ? colors.semantic.background.subtle\n : colors.semantic.interactive.primary\n : hovered\n ? colors.semantic.background.subtle\n : 'transparent',\n borderWidth: 1,\n borderColor: isOn ? colors.semantic.interactive.primary : colors.semantic.border.default,\n ...(suppressRightBorder ? { borderRightWidth: 0 } : null),\n };\n }\n // Default variant, standalone — give the off state a subtle\n // resting bg + 1px border so the control reads as a button. The\n // earlier \"transparent off\" look only made sense inside a group\n // where the cluster's shared seams told the eye \"this is a row of\n // buttons\"; standalone it just looked like text.\n return {\n backgroundColor: isOn\n ? colors.semantic.interactive.primary\n : hovered\n ? colors.semantic.background.subtle\n : colors.semantic.background.elevated,\n borderWidth: 1,\n borderColor: isOn ? colors.semantic.interactive.primary : colors.semantic.border.default,\n };\n };\n\n // Text color: inverted on the filled-on surface, accent-colored on the\n // outline-on surface, default text otherwise.\n const textColor =\n variant === 'outline'\n ? isOn\n ? colors.semantic.interactive.primary\n : colors.semantic.text.default\n : isOn\n ? colors.semantic.text.inverted\n : colors.semantic.text.default;\n\n const accessibilityProps: Record<string, unknown> = {\n role: 'button',\n accessibilityRole: 'button',\n 'aria-pressed': isOn,\n accessibilityState: { selected: isOn, disabled },\n ...(ariaLabel ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {}),\n ...(disabled ? { 'aria-disabled': true } : {}),\n ...(testID !== undefined ? { testID } : {}),\n ...(tabIndex !== undefined ? { tabIndex } : {}),\n ...(onKeyDown ? { onKeyDown } : {}),\n ...(onFocus ? { onFocus } : {}),\n };\n\n // RN-Web's Pressable on web doesn't reliably invoke the style callback\n // (the hovered/pressed state isn't always wired through to a re-render\n // — at least in the version we ship against). Compute the static style\n // upfront with `hovered=false` and overlay a `:hover` color via CSS\n // class for the off-state hover. Active-state hover is for outline\n // variant only and doesn't change the look enough to justify the\n // complexity of a style-callback path here.\n const surfaceStatic = surfaceFor(false);\n\n return (\n <Pressable\n ref={(node: unknown) => {\n refCallback?.(node as HTMLElement | null);\n }}\n disabled={disabled}\n onPress={() => {\n if (!disabled) {\n onPress();\n }\n }}\n {...accessibilityProps}\n className={cn(\n 'inline-flex flex-row items-center justify-center select-none',\n disabled ? 'opacity-50' : undefined,\n className\n )}\n style={[baseStyle, surfaceStatic, disabled ? { opacity: 0.5 } : null]}\n >\n {/* Always wrap children in an RNText so the dynamic\n * `textColor` (inverted on the on-state surface, default\n * otherwise) reaches both string children and arbitrary\n * inline elements (B/I/U spans, lucide icons, etc.) via\n * CSS color inheritance. Without this wrapper, non-string\n * children render with their parent's color regardless of\n * selected state — so an italic \"I\" stays dark on the\n * dark filled-on background and disappears.\n */}\n <RNText\n style={{\n color: textColor,\n fontFamily: colors.fontFamily.body,\n fontSize,\n fontWeight: colors.fontWeight.medium as '500',\n }}\n >\n {children}\n </RNText>\n </Pressable>\n );\n};\n\n// ---------- <ToggleGroup> + context ------------------------------------------\n\ntype ToggleGroupContextValue = {\n type: 'single' | 'multiple';\n setValue: (value: string) => void;\n isPressed: (value: string) => boolean;\n disabled: boolean;\n variant: ToggleVariant;\n size: ToggleSize;\n register: (value: string, ref: RefObject<HTMLElement | null>) => void;\n unregister: (value: string) => void;\n rovingValue: string | undefined;\n setRovingValue: (next: string) => void;\n moveBy: (delta: 1 | -1, current: string) => void;\n moveTo: (position: 'first' | 'last') => void;\n /** Live ordered list of registered item values — drives border math. */\n order: string[];\n};\n\nconst ToggleGroupContext = createContext<ToggleGroupContextValue | null>(null);\n\nconst useToggleGroupContext = () => {\n const ctx = useContext(ToggleGroupContext);\n if (!ctx) {\n throw new Error('<ToggleGroupItem> must be rendered inside a <ToggleGroup>.');\n }\n return ctx;\n};\n\ntype ToggleGroupCommonProps = {\n /** Group-level disable. Each item's `disabled` is OR-ed with this. */\n disabled?: boolean;\n /** @defaultValue 'default' */\n variant?: ToggleVariant;\n /** @defaultValue 'md' */\n size?: ToggleSize;\n children?: ReactNode;\n className?: string;\n testID?: string;\n 'aria-label'?: string;\n accessibilityLabel?: string;\n};\n\nexport type ToggleGroupSingleProps = ToggleGroupCommonProps & {\n /** Multi-select gives an array; single-select gives a string (or undefined). */\n type: 'single';\n // `| undefined` is intentional under exactOptionalPropertyTypes — clicking\n // the active item clears the selection, so consumers MUST be allowed to\n // pass `undefined` as the controlled value, not just omit the prop.\n value?: string | undefined;\n defaultValue?: string | undefined;\n onChange?: (next: string | undefined) => void;\n};\n\nexport type ToggleGroupMultipleProps = ToggleGroupCommonProps & {\n type: 'multiple';\n value?: string[] | undefined;\n defaultValue?: string[] | undefined;\n onChange?: (next: string[]) => void;\n};\n\nexport type ToggleGroupProps = ToggleGroupSingleProps | ToggleGroupMultipleProps;\n\n/**\n * Cluster of `<ToggleGroupItem>`s with shared selection semantics.\n *\n * - `type=\"multiple\"` — value is `string[]`. Clicking toggles a value\n * in/out of the array. ARIA exposes a plain `role=\"group\"`.\n * - `type=\"single\"` — value is `string | undefined`. Clicking sets it;\n * re-clicking the active one clears it. ARIA exposes `role=\"radiogroup\"`\n * so AT users hear \"1 of N selected\" semantics.\n *\n * Keyboard: `ArrowRight` / `ArrowLeft` move focus between items (roving\n * tabindex), `Home` / `End` jump to the ends, and `Space` / `Enter`\n * toggle the focused item.\n */\nexport const ToggleGroup = (props: ToggleGroupProps) => {\n const {\n type,\n disabled = false,\n variant = 'default',\n size = 'md',\n children,\n className,\n testID,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n } = props;\n\n // Controlled / uncontrolled state, branching on `type`.\n const [innerSingle, setInnerSingle] = useState<string | undefined>(\n type === 'single' ? (props as ToggleGroupSingleProps).defaultValue : undefined\n );\n const [innerMultiple, setInnerMultiple] = useState<string[]>(\n type === 'multiple' ? ((props as ToggleGroupMultipleProps).defaultValue ?? []) : []\n );\n\n const isSingle = type === 'single';\n const isControlled = isSingle\n ? (props as ToggleGroupSingleProps).value !== undefined\n : (props as ToggleGroupMultipleProps).value !== undefined;\n\n const setValue = useCallback(\n (next: string) => {\n if (disabled) {\n return;\n }\n if (isSingle) {\n const current = isControlled ? (props as ToggleGroupSingleProps).value : innerSingle;\n const updated = current === next ? undefined : next;\n if (!isControlled) {\n setInnerSingle(updated);\n }\n (props as ToggleGroupSingleProps).onChange?.(updated);\n } else {\n const current: string[] =\n (isControlled ? (props as ToggleGroupMultipleProps).value : innerMultiple) ?? [];\n const updated = current.includes(next) ? current.filter((v) => v !== next) : [...current, next];\n if (!isControlled) {\n setInnerMultiple(updated);\n }\n (props as ToggleGroupMultipleProps).onChange?.(updated);\n }\n },\n [disabled, isSingle, isControlled, innerSingle, innerMultiple, props]\n );\n\n const isPressed = useCallback(\n (v: string) => {\n if (isSingle) {\n const current = isControlled ? (props as ToggleGroupSingleProps).value : innerSingle;\n return current === v;\n }\n const current = (isControlled ? (props as ToggleGroupMultipleProps).value : innerMultiple) ?? [];\n return current.includes(v);\n },\n [isSingle, isControlled, innerSingle, innerMultiple, props]\n );\n\n // --- roving tabindex order management ---\n const refs = useRef<Map<string, RefObject<HTMLElement | null>>>(new Map());\n // Live ordered list — re-render the group whenever items register so\n // border math (first/last) and roving init see the current order.\n const [order, setOrder] = useState<string[]>([]);\n const [rovingValue, setRovingValueState] = useState<string | undefined>(undefined);\n\n const register = useCallback((v: string, ref: RefObject<HTMLElement | null>) => {\n refs.current.set(v, ref);\n setOrder((prev) => (prev.includes(v) ? prev : [...prev, v]));\n setRovingValueState((current) => current ?? v);\n }, []);\n\n const unregister = useCallback((v: string) => {\n refs.current.delete(v);\n setOrder((prev) => prev.filter((x) => x !== v));\n setRovingValueState((current) => (current === v ? undefined : current));\n }, []);\n\n const focusValue = useCallback((v: string) => {\n refs.current.get(v)?.current?.focus?.();\n }, []);\n\n const setRovingValue = useCallback((v: string) => setRovingValueState(v), []);\n\n const moveBy = useCallback(\n (delta: 1 | -1, current: string) => {\n const list = order;\n if (list.length === 0) {\n return;\n }\n const idx = list.indexOf(current);\n const start = idx === -1 ? 0 : idx;\n const next = list[(start + delta + list.length) % list.length];\n if (!next) {\n return;\n }\n setRovingValueState(next);\n focusValue(next);\n },\n [order, focusValue]\n );\n\n const moveTo = useCallback(\n (position: 'first' | 'last') => {\n const list = order;\n if (list.length === 0) {\n return;\n }\n const next = position === 'first' ? list[0] : list[list.length - 1];\n if (!next) {\n return;\n }\n setRovingValueState(next);\n focusValue(next);\n },\n [order, focusValue]\n );\n\n const ctxValue = useMemo<ToggleGroupContextValue>(\n () => ({\n type,\n setValue,\n isPressed,\n disabled,\n variant,\n size,\n register,\n unregister,\n rovingValue,\n setRovingValue,\n moveBy,\n moveTo,\n order,\n }),\n [\n type,\n setValue,\n isPressed,\n disabled,\n variant,\n size,\n register,\n unregister,\n rovingValue,\n setRovingValue,\n moveBy,\n moveTo,\n order,\n ]\n );\n\n const groupRole = isSingle ? 'radiogroup' : 'group';\n const label = ariaLabel ?? accessibilityLabel;\n\n const groupProps: Record<string, unknown> = {\n role: groupRole,\n accessibilityRole: groupRole,\n ...(label ? { 'aria-label': label, accessibilityLabel: label } : {}),\n ...(disabled ? { 'aria-disabled': true } : {}),\n ...(testID !== undefined ? { testID } : {}),\n };\n\n // For the `default` variant we render items zero-gap so they share\n // borders, like a UISegmentedControl. For `outline` we keep a small\n // gap so the bordered cells don't double up their seams.\n const colors = useThemeColors();\n const containerStyle: ViewStyle =\n variant === 'default'\n ? { flexDirection: 'row', alignItems: 'stretch', gap: 0 }\n : { flexDirection: 'row', alignItems: 'stretch', gap: px(colors.spacing['1']) };\n\n return (\n <ToggleGroupContext.Provider value={ctxValue}>\n <View\n {...groupProps}\n className={cn(\n 'inline-flex flex-row items-stretch',\n variant === 'default' ? 'gap-0' : 'gap-1',\n disabled ? 'opacity-60' : undefined,\n className\n )}\n style={[containerStyle, disabled ? { opacity: 0.6 } : null]}\n >\n {children}\n </View>\n </ToggleGroupContext.Provider>\n );\n};\n\nexport type ToggleGroupItemProps = {\n /** Unique identifier within the group — written into `value` when pressed. */\n value: string;\n /** Disable just this item (OR-ed with group-level `disabled`). */\n disabled?: boolean;\n children?: ReactNode;\n 'aria-label'?: string;\n accessibilityLabel?: string;\n className?: string;\n testID?: string;\n};\n\n/**\n * One toggle inside a `<ToggleGroup>`. Throws with a clear message when\n * rendered outside of one.\n */\nexport const ToggleGroupItem = ({\n value,\n disabled,\n children,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n className,\n testID,\n}: ToggleGroupItemProps) => {\n const ctx = useToggleGroupContext();\n const ownRef = useRef<HTMLElement | null>(null);\n // Capture register/unregister in a ref so the effect's deps stay\n // value-only — otherwise a new context object on every render (driven\n // by setOrder inside register) would re-fire the effect → setState\n // loop → \"Maximum update depth exceeded\".\n const registryRef = useRef({ register: ctx.register, unregister: ctx.unregister });\n registryRef.current = { register: ctx.register, unregister: ctx.unregister };\n\n useEffect(() => {\n // Read-through holder so the registered ref always sees the latest node.\n const holder: RefObject<HTMLElement | null> = {\n get current() {\n return ownRef.current;\n },\n set current(_v) {\n /* no-op — read-through to ownRef */\n },\n } as unknown as RefObject<HTMLElement | null>;\n registryRef.current.register(value, holder);\n return () => registryRef.current.unregister(value);\n }, [value]);\n\n const isOn = ctx.isPressed(value);\n const isDisabled = disabled || ctx.disabled;\n const isRoving = ctx.rovingValue === value;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown': {\n event.preventDefault();\n ctx.moveBy(1, value);\n return;\n }\n case 'ArrowLeft':\n case 'ArrowUp': {\n event.preventDefault();\n ctx.moveBy(-1, value);\n return;\n }\n case 'Home': {\n event.preventDefault();\n ctx.moveTo('first');\n return;\n }\n case 'End': {\n event.preventDefault();\n ctx.moveTo('last');\n return;\n }\n case ' ':\n case 'Enter': {\n event.preventDefault();\n if (!isDisabled) {\n ctx.setValue(value);\n }\n return;\n }\n }\n },\n [ctx, isDisabled, value]\n );\n\n const handleFocus = useCallback(() => {\n ctx.setRovingValue(value);\n }, [ctx, value]);\n\n // Items inside a `default`-variant group share borders: only the first\n // rounds the left, the last rounds the right; everything else is square.\n const colors = useThemeColors();\n const idx = ctx.order.indexOf(value);\n const isFirst = idx === 0;\n const isLast = idx === ctx.order.length - 1;\n const sharedRadius = px(colors.radius.md);\n const isClustered = ctx.order.length > 1;\n const borderRadius = isClustered\n ? {\n topLeft: isFirst ? sharedRadius : 0,\n bottomLeft: isFirst ? sharedRadius : 0,\n topRight: isLast ? sharedRadius : 0,\n bottomRight: isLast ? sharedRadius : 0,\n }\n : sharedRadius;\n\n return (\n <ToggleVisual\n isOn={isOn}\n disabled={Boolean(isDisabled)}\n variant={ctx.variant}\n size={ctx.size}\n onPress={() => ctx.setValue(value)}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n ariaLabel={ariaLabel ?? accessibilityLabel}\n className={className}\n testID={testID}\n tabIndex={isRoving ? 0 : -1}\n borderRadius={borderRadius}\n forceBorder={ctx.variant === 'default' && isClustered}\n suppressRightBorder={isClustered && !isLast}\n refCallback={(node) => {\n ownRef.current = node;\n }}\n >\n {children}\n </ToggleVisual>\n );\n};\n\n/**\n * Public `Toggle` value — the standalone toggle plus its `.Group` and `.Item`\n * static members. Use `<Toggle.Group>` to wrap a list of `<Toggle.Item>`s.\n *\n * `Object.assign` produces a value whose inferred type carries the static\n * properties, so `.d.ts` consumers can write `<Toggle.Group>` without a\n * separate import.\n */\nexport const Toggle = Object.assign(ToggleRoot, {\n Group: ToggleGroup,\n Item: ToggleGroupItem,\n});\n"]}
1
+ {"version":3,"sources":["../../../src/theme/px.ts","../../../../tokens/build/theme.ts","../../../src/theme/context.tsx","../../../src/theme/use-color-scheme.tsx","../../../src/theme/use-theme-colors.ts","../../../src/utils/cn.ts","../../../src/components/Toggle/Toggle.tsx"],"names":["createContext","Platform","useContext","useState","Appearance","useEffect","useCallback","jsx","Pressable","RNText","current","useRef","useMemo","View"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Strip the `px` suffix from a CSS-flavored token value and return a\n * number, the form React Native style props expect for properties like\n * `borderRadius`, `paddingHorizontal`, `fontSize`, etc.\n *\n * The tokens package emits all dimensional tokens as `${number}px`\n * strings (it's the lingua franca for both CSS and Style Dictionary\n * consumers); inside RN we need the unitless number. RN-Web tolerates\n * both, but native is strict.\n *\n * Falls through unchanged for tokens that already came in as numbers\n * (forward-compat).\n *\n * Examples:\n * px('6px') → 6\n * px('1.5px') → 1.5\n * px(6) → 6\n * px('foo') → 0 (defensive — bad input shouldn't crash render)\n */\nexport function px(value: string | number): number {\n if (typeof value === 'number') {\n return value;\n }\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : 0;\n}\n","// GENERATED by @nori-ui/tokens — DO NOT EDIT.\n// Run `yarn build:tokens` to regenerate.\n\n// Generated for light mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const theme = {\n color: {\n danger: \"#ef4444\",\n dangerText: \"#b91c1c\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#fafafa\",\n elevated: \"#ffffff\",\n subtle: \"#f4f4f5\",\n },\n border: {\n default: \"#e4e4e7\",\n strong: \"#d4d4d8\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#0d9488\",\n primaryHover: \"#0f766e\",\n primaryPressed: \"#115e59\",\n },\n text: {\n default: \"#18181b\",\n inverted: \"#fafafa\",\n muted: \"#52525b\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\nexport type Theme = typeof theme;\n\n\n// Dark mode overrides\n// Generated for dark mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const themeDark = {\n color: {\n danger: \"#ef4444\",\n dangerText: \"#b91c1c\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#18181b\",\n elevated: \"#3f3f46\",\n subtle: \"#27272a\",\n },\n border: {\n default: \"#3f3f46\",\n strong: \"#52525b\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#2dd4bf\",\n primaryHover: \"#5eead4\",\n primaryPressed: \"#99f6e4\",\n },\n text: {\n default: \"#fafafa\",\n inverted: \"#18181b\",\n muted: \"#a1a1aa\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\n","'use client';\n\nimport { themeDark as defaultDark, theme as defaultLight, type Theme } from '@nori-ui/tokens';\nimport type { ReactNode } from 'react';\nimport { createContext } from 'react';\n\n/**\n * A `NoriTheme` is a paired light/dark palette. The active half is picked\n * by `useColorScheme()` so the same theme object covers both schemes.\n *\n * Build one yourself by spreading the defaults and overriding the colors\n * you care about, or pick a preset from `@nori-ui/core/themes` (see the\n * Theming docs for examples).\n */\nexport type NoriTheme = {\n light: Theme;\n dark: Theme;\n};\n\n/**\n * Default Nori palette — teal primary on a warm-paper light surface, and\n * teal-400 primary on a deep-zinc dark surface. Mirrors the `theme` /\n * `themeDark` exports from @nori-ui/tokens.\n */\nexport const defaultTheme: NoriTheme = {\n light: defaultLight,\n dark: defaultDark as unknown as Theme,\n};\n\n// Context value is the FULL pair, not the active half. `useThemeColors`\n// (the hook components reach for) resolves it to the right one based on\n// the current color scheme. Storing the pair means a parent only has to\n// declare the theme once — switching scheme is a separate concern.\nexport const ThemeContext = createContext<NoriTheme>(defaultTheme);\nThemeContext.displayName = 'ThemeContext';\n\nexport type ThemeProviderProps = {\n /**\n * The theme to apply to descendants. Pass either:\n * - a full `NoriTheme` (`{ light, dark }`) — both schemes covered\n * - a single `Theme` — used for both light and dark (rare; mostly\n * useful when you ONLY ever render in one scheme)\n * - omit — falls back to the Nori default (teal palette)\n */\n theme?: NoriTheme | Theme;\n children?: ReactNode;\n};\n\nconst isFullTheme = (t: NoriTheme | Theme): t is NoriTheme => 'light' in t && 'dark' in t;\n\nexport function ThemeProvider({ theme, children }: ThemeProviderProps) {\n const value: NoriTheme =\n theme === undefined ? defaultTheme : isFullTheme(theme) ? theme : { light: theme, dark: theme };\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n","'use client';\n\nimport { createContext, type ReactNode, useContext, useEffect, useState } from 'react';\nimport { Appearance, Platform } from 'react-native';\n\nexport type ColorScheme = 'light' | 'dark';\n\n// Override channel so a parent can force a scheme (e.g. an app shell with\n// hard-coded dark chrome that wants nested components to render against\n// the dark token half regardless of the OS Appearance). `null` means\n// \"no override — use the system signal\".\nconst ColorSchemeOverrideContext = createContext<ColorScheme | null>(null);\nColorSchemeOverrideContext.displayName = 'ColorSchemeOverrideContext';\n\nexport type ColorSchemeProviderProps = {\n /** Force a specific scheme for descendants. */\n value: ColorScheme;\n children?: ReactNode;\n};\n\n/**\n * Forces a color scheme for all descendants. Useful when a screen's chrome\n * is hard-coded to one scheme (e.g. a forced-dark editorial surface) and\n * you want library components inside it to follow that, not the OS.\n */\nexport function ColorSchemeProvider({ value, children }: ColorSchemeProviderProps) {\n return <ColorSchemeOverrideContext.Provider value={value}>{children}</ColorSchemeOverrideContext.Provider>;\n}\n\nconst isWeb = Platform.OS === 'web';\n\n// Web: a document is \"in dark mode\" when the root <html> element carries\n// the `dark` class (Tailwind / Fumadocs convention) OR a `data-theme=\"dark\"`\n// attribute (matches the `darkMode` selectors in our Tailwind preset).\n// We deliberately don't fall back to `prefers-color-scheme` — the app\n// usually owns that decision and writes it onto <html>; tracking the system\n// preference too would fight the app's chosen value.\nfunction readWebScheme(): ColorScheme {\n if (typeof document === 'undefined') {\n return 'light';\n }\n const root = document.documentElement;\n if (root.classList.contains('dark')) {\n return 'dark';\n }\n if (root.getAttribute('data-theme') === 'dark') {\n return 'dark';\n }\n return 'light';\n}\n\n/**\n * Returns the current color scheme — `'light'` or `'dark'`.\n *\n * On web: observes the root `<html>` element's `class=\"dark\"` and\n * `data-theme=\"dark\"` attribute (the same signals our Tailwind preset\n * keys on). Updates live as those flip.\n *\n * On native: delegates to `react-native`'s `Appearance` API so the hook\n * tracks the OS preference without extra wiring.\n *\n * Components consume this indirectly via `useThemeColors()`; reach for\n * this directly when you need the raw scheme (e.g. to swap an icon).\n */\nexport function useColorScheme(): ColorScheme {\n // A `<ColorSchemeProvider value=\"dark\">` ancestor (or NoriProvider's\n // `colorScheme` prop, which mounts one) wins over the OS signal — the\n // app shell knows which scheme its chrome is locked to.\n const override = useContext(ColorSchemeOverrideContext);\n\n const [scheme, setScheme] = useState<ColorScheme>(() => {\n if (isWeb) {\n return readWebScheme();\n }\n return (Appearance.getColorScheme() ?? 'light') as ColorScheme;\n });\n\n useEffect(() => {\n if (isWeb) {\n const root = document.documentElement;\n const update = () => setScheme(readWebScheme());\n const observer = new MutationObserver(update);\n observer.observe(root, { attributes: true, attributeFilter: ['class', 'data-theme'] });\n // Sync once after mount in case SSR shipped a different value.\n update();\n return () => observer.disconnect();\n }\n\n const sub = Appearance.addChangeListener(({ colorScheme }) => {\n setScheme((colorScheme ?? 'light') as ColorScheme);\n });\n return () => sub.remove();\n }, []);\n\n return override ?? scheme;\n}\n","'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport { useContext } from 'react';\nimport { ThemeContext } from './context';\nimport { useColorScheme } from './use-color-scheme';\n\n/**\n * Returns the active token palette — `theme.light` in light mode,\n * `theme.dark` in dark mode. Resolves the theme via `ThemeContext` so\n * any ancestor `<ThemeProvider theme={...}>` flows through. With no\n * provider in the tree, the default Nori palette (teal) is used.\n *\n * Use this **inside a component** when you need a hex value for a React\n * Native `style` prop (`backgroundColor`, `borderColor`, etc.).\n *\n * Note: className-based styles (e.g. `bg-semantic-interactive-primary`)\n * compile against the @nori-ui/tokens palette at build time and don't\n * follow `<ThemeProvider>` overrides today. Inline styles via this hook\n * always do — and inline beats class on CSS specificity, so the visible\n * color you see is whatever the hook resolves to. CSS-variable theming\n * for the className path is a planned follow-up.\n */\nexport function useThemeColors(): Theme {\n const scheme = useColorScheme();\n const themePair = useContext(ThemeContext);\n return scheme === 'dark' ? themePair.dark : themePair.light;\n}\n","// cn — class-name merger. clsx-compatible shape.\n//\n// Intentionally does NOT deduplicate Tailwind conflicts (e.g. \"text-sm text-lg\").\n// That's `tailwind-merge`'s job; we defer adding it until a component actually\n// needs it, to keep the core tree-shakable and the runtime zero-dep.\n\nexport type ClassInput =\n | string\n | number\n | boolean\n | null\n | undefined\n | ClassInput[]\n | Record<string, boolean | number | null | undefined>;\n\nexport function cn(...inputs: ClassInput[]): string {\n const out: string[] = [];\n for (const input of inputs) {\n append(out, input);\n }\n return out.join(' ');\n}\n\nfunction append(out: string[], input: ClassInput): void {\n if (!input) {\n return;\n }\n if (typeof input === 'string') {\n if (input.length > 0) {\n out.push(input);\n }\n return;\n }\n if (typeof input === 'number') {\n return; // numbers are never class names\n }\n if (Array.isArray(input)) {\n for (const inner of input) {\n append(out, inner);\n }\n return;\n }\n if (typeof input === 'object') {\n for (const key of Object.keys(input)) {\n if (input[key]) {\n out.push(key);\n }\n }\n }\n}\n","'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport {\n createContext,\n type KeyboardEvent,\n type ReactNode,\n type RefObject,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type ToggleVariant = 'default' | 'outline';\nexport type ToggleSize = 'sm' | 'md' | 'lg';\n\ntype SizeTokens = {\n height: number; // component-density literal — not from theme\n paddingHKey: keyof Theme['spacing'];\n fontKey: keyof Theme['fontSize'];\n iconSize: number; // component-density literal — not from theme\n};\n\n// Heights and icon sizes are intentionally hardcoded — they're tightly\n// coupled to the toggle's overall density. PaddingH and fontSize are\n// pulled from the active theme so a custom theme that scales the\n// spacing / fontSize ramps also scales every Toggle on the page.\nconst SIZE_TOKENS: Record<ToggleSize, SizeTokens> = {\n sm: { height: 32, paddingHKey: '2', fontKey: 'sm', iconSize: 14 }, // 8px (closest to legacy 10) / fontSize sm 14\n md: { height: 40, paddingHKey: '3', fontKey: 'sm', iconSize: 16 }, // 12px / fontSize sm 14\n lg: { height: 48, paddingHKey: '4', fontKey: 'md', iconSize: 20 }, // 16px / fontSize md 16\n};\n\n// ---------- standalone <Toggle> -----------------------------------------------\n\nexport type ToggleProps = {\n /** Controlled pressed state. Pair with `onChange`. */\n pressed?: boolean;\n /** Uncontrolled initial pressed state. Ignored when `pressed` is provided. */\n defaultPressed?: boolean;\n /** Fires with the next pressed state when the user toggles. */\n onChange?: (next: boolean) => void;\n /**\n * Visual treatment.\n * - `default` — transparent when off, filled with `interactive.primary` when on.\n * - `outline` — bordered when off, tinted background + accent border when on.\n * @defaultValue 'default'\n */\n variant?: ToggleVariant;\n /** @defaultValue 'md' */\n size?: ToggleSize;\n /** Group-level disable (also forwarded by `<ToggleGroup>` to its items). */\n disabled?: boolean;\n /** Visible label or icon content. */\n children?: ReactNode;\n /** Required when `children` is icon-only. */\n 'aria-label'?: string;\n accessibilityLabel?: string;\n className?: string;\n testID?: string;\n};\n\n/**\n * A two-state button — like the bold / italic buttons in a rich-text\n * toolbar. Use `<Toggle>` standalone for a single bistable action; reach\n * for `<ToggleGroup>` when you need a clustered set with shared selection\n * semantics.\n *\n * Reach for `<Switch>` instead when the control flips a setting in a form\n * (a \"darkmode on/off\" preference). Reach for `<Checkbox>` when the\n * control selects a value inside a form. `<Toggle>` is for buttons that\n * carry an on/off visual.\n */\nconst ToggleRoot = ({\n pressed,\n defaultPressed = false,\n onChange,\n variant = 'default',\n size = 'md',\n disabled = false,\n children,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n className,\n testID,\n}: ToggleProps) => {\n const [inner, setInner] = useState<boolean>(defaultPressed);\n const isControlled = pressed !== undefined;\n const isOn = isControlled ? Boolean(pressed) : inner;\n\n const handlePress = useCallback(() => {\n if (disabled) {\n return;\n }\n const next = !isOn;\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n }, [disabled, isControlled, isOn, onChange]);\n\n return (\n <ToggleVisual\n isOn={isOn}\n disabled={disabled}\n variant={variant}\n size={size}\n onPress={handlePress}\n ariaLabel={ariaLabel ?? accessibilityLabel}\n className={className}\n testID={testID}\n >\n {children}\n </ToggleVisual>\n );\n};\n\n// ---------- shared visual -----------------------------------------------------\n\ntype ToggleVisualProps = {\n isOn: boolean;\n disabled: boolean;\n variant: ToggleVariant;\n size: ToggleSize;\n onPress: () => void;\n onKeyDown?: ((event: KeyboardEvent<HTMLElement>) => void) | undefined;\n onFocus?: (() => void) | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n testID?: string | undefined;\n children?: ReactNode | undefined;\n /**\n * Group-aware roving tabindex. `undefined` means \"the natural tab\n * stop\" (standalone Toggle); inside a group, a number is supplied.\n */\n tabIndex?: number | undefined;\n /** Border-radius override for grouped items (square middle, rounded ends). */\n borderRadius?: number | { topLeft: number; topRight: number; bottomLeft: number; bottomRight: number } | undefined;\n /** Suppress the right border so adjacent items share a single seam. */\n suppressRightBorder?: boolean | undefined;\n /** Force the bordered look (used by grouped `default` items so the row reads as one chip). */\n forceBorder?: boolean | undefined;\n refCallback?: ((node: HTMLElement | null) => void) | undefined;\n};\n\nconst ToggleVisual = ({\n isOn,\n disabled,\n variant,\n size,\n onPress,\n onKeyDown,\n onFocus,\n ariaLabel,\n className,\n testID,\n children,\n tabIndex,\n borderRadius,\n suppressRightBorder,\n forceBorder,\n refCallback,\n}: ToggleVisualProps) => {\n const colors = useThemeColors();\n const tokens = SIZE_TOKENS[size];\n const paddingH = px(colors.spacing[tokens.paddingHKey]);\n const fontSize = px(colors.fontSize[tokens.fontKey]);\n\n const radiusEach = borderRadius && typeof borderRadius !== 'number' ? borderRadius : undefined;\n const radiusValue = typeof borderRadius === 'number' ? borderRadius : radiusEach ? undefined : px(colors.radius.md);\n\n const baseStyle: ViewStyle = {\n height: tokens.height,\n paddingHorizontal: paddingH,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: px(colors.spacing['2']) - 2, // closest theme-rooted approximation of legacy 6\n ...(radiusValue !== undefined ? { borderRadius: radiusValue } : null),\n ...(radiusEach\n ? {\n borderTopLeftRadius: radiusEach.topLeft,\n borderTopRightRadius: radiusEach.topRight,\n borderBottomLeftRadius: radiusEach.bottomLeft,\n borderBottomRightRadius: radiusEach.bottomRight,\n }\n : null),\n // 200ms color/background transition. Web only; native ignores it.\n ...({\n transitionProperty: 'background-color, border-color, color',\n transitionDuration: '200ms',\n transitionTimingFunction: 'ease',\n } as ViewStyle),\n };\n\n const surfaceFor = (hovered: boolean): ViewStyle => {\n if (variant === 'outline' || forceBorder) {\n return {\n backgroundColor: isOn\n ? variant === 'outline'\n ? colors.semantic.background.subtle\n : colors.semantic.interactive.primary\n : hovered\n ? colors.semantic.background.subtle\n : 'transparent',\n borderWidth: 1,\n borderColor: isOn ? colors.semantic.interactive.primary : colors.semantic.border.default,\n ...(suppressRightBorder ? { borderRightWidth: 0 } : null),\n };\n }\n // Default variant, standalone — give the off state a subtle\n // resting bg + 1px border so the control reads as a button. The\n // earlier \"transparent off\" look only made sense inside a group\n // where the cluster's shared seams told the eye \"this is a row of\n // buttons\"; standalone it just looked like text.\n return {\n backgroundColor: isOn\n ? colors.semantic.interactive.primary\n : hovered\n ? colors.semantic.background.subtle\n : colors.semantic.background.elevated,\n borderWidth: 1,\n borderColor: isOn ? colors.semantic.interactive.primary : colors.semantic.border.default,\n };\n };\n\n // Text color: inverted on the filled-on surface, accent-colored on the\n // outline-on surface, default text otherwise.\n const textColor =\n variant === 'outline'\n ? isOn\n ? colors.semantic.interactive.primary\n : colors.semantic.text.default\n : isOn\n ? colors.semantic.text.inverted\n : colors.semantic.text.default;\n\n const accessibilityProps: Record<string, unknown> = {\n role: 'button',\n accessibilityRole: 'button',\n 'aria-pressed': isOn,\n accessibilityState: { selected: isOn, disabled },\n ...(ariaLabel ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {}),\n ...(disabled ? { 'aria-disabled': true } : {}),\n ...(testID !== undefined ? { testID } : {}),\n ...(tabIndex !== undefined ? { tabIndex } : {}),\n ...(onKeyDown ? { onKeyDown } : {}),\n ...(onFocus ? { onFocus } : {}),\n };\n\n // RN-Web's Pressable on web doesn't reliably invoke the style callback\n // (the hovered/pressed state isn't always wired through to a re-render\n // — at least in the version we ship against). Compute the static style\n // upfront with `hovered=false` and overlay a `:hover` color via CSS\n // class for the off-state hover. Active-state hover is for outline\n // variant only and doesn't change the look enough to justify the\n // complexity of a style-callback path here.\n const surfaceStatic = surfaceFor(false);\n\n return (\n <Pressable\n ref={(node: unknown) => {\n refCallback?.(node as HTMLElement | null);\n }}\n disabled={disabled}\n onPress={() => {\n if (!disabled) {\n onPress();\n }\n }}\n {...accessibilityProps}\n className={cn(\n 'inline-flex flex-row items-center justify-center select-none',\n disabled ? 'opacity-50' : undefined,\n className\n )}\n style={[baseStyle, surfaceStatic, disabled ? { opacity: 0.5 } : null]}\n >\n {/* Always wrap children in an RNText so the dynamic\n * `textColor` (inverted on the on-state surface, default\n * otherwise) reaches both string children and arbitrary\n * inline elements (B/I/U spans, lucide icons, etc.) via\n * CSS color inheritance. Without this wrapper, non-string\n * children render with their parent's color regardless of\n * selected state — so an italic \"I\" stays dark on the\n * dark filled-on background and disappears.\n */}\n <RNText\n style={{\n color: textColor,\n fontFamily: colors.fontFamily.body,\n fontSize,\n fontWeight: colors.fontWeight.medium as '500',\n }}\n >\n {children}\n </RNText>\n </Pressable>\n );\n};\n\n// ---------- <ToggleGroup> + context ------------------------------------------\n\ntype ToggleGroupContextValue = {\n type: 'single' | 'multiple';\n setValue: (value: string) => void;\n isPressed: (value: string) => boolean;\n disabled: boolean;\n variant: ToggleVariant;\n size: ToggleSize;\n register: (value: string, ref: RefObject<HTMLElement | null>) => void;\n unregister: (value: string) => void;\n rovingValue: string | undefined;\n setRovingValue: (next: string) => void;\n moveBy: (delta: 1 | -1, current: string) => void;\n moveTo: (position: 'first' | 'last') => void;\n /** Live ordered list of registered item values — drives border math. */\n order: string[];\n};\n\nconst ToggleGroupContext = createContext<ToggleGroupContextValue | null>(null);\n\nconst useToggleGroupContext = () => {\n const ctx = useContext(ToggleGroupContext);\n if (!ctx) {\n throw new Error('<ToggleGroupItem> must be rendered inside a <ToggleGroup>.');\n }\n return ctx;\n};\n\ntype ToggleGroupCommonProps = {\n /** Group-level disable. Each item's `disabled` is OR-ed with this. */\n disabled?: boolean;\n /** @defaultValue 'default' */\n variant?: ToggleVariant;\n /** @defaultValue 'md' */\n size?: ToggleSize;\n children?: ReactNode;\n className?: string;\n testID?: string;\n 'aria-label'?: string;\n accessibilityLabel?: string;\n};\n\nexport type ToggleGroupSingleProps = ToggleGroupCommonProps & {\n /** Multi-select gives an array; single-select gives a string (or undefined). */\n type: 'single';\n // `| undefined` is intentional under exactOptionalPropertyTypes — clicking\n // the active item clears the selection, so consumers MUST be allowed to\n // pass `undefined` as the controlled value, not just omit the prop.\n value?: string | undefined;\n defaultValue?: string | undefined;\n onChange?: (next: string | undefined) => void;\n};\n\nexport type ToggleGroupMultipleProps = ToggleGroupCommonProps & {\n type: 'multiple';\n value?: string[] | undefined;\n defaultValue?: string[] | undefined;\n onChange?: (next: string[]) => void;\n};\n\nexport type ToggleGroupProps = ToggleGroupSingleProps | ToggleGroupMultipleProps;\n\n/**\n * Cluster of `<ToggleGroupItem>`s with shared selection semantics.\n *\n * - `type=\"multiple\"` — value is `string[]`. Clicking toggles a value\n * in/out of the array. ARIA exposes a plain `role=\"group\"`.\n * - `type=\"single\"` — value is `string | undefined`. Clicking sets it;\n * re-clicking the active one clears it. ARIA exposes `role=\"radiogroup\"`\n * so AT users hear \"1 of N selected\" semantics.\n *\n * Keyboard: `ArrowRight` / `ArrowLeft` move focus between items (roving\n * tabindex), `Home` / `End` jump to the ends, and `Space` / `Enter`\n * toggle the focused item.\n */\nexport const ToggleGroup = (props: ToggleGroupProps) => {\n const {\n type,\n disabled = false,\n variant = 'default',\n size = 'md',\n children,\n className,\n testID,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n } = props;\n\n // Controlled / uncontrolled state, branching on `type`.\n const [innerSingle, setInnerSingle] = useState<string | undefined>(\n type === 'single' ? (props as ToggleGroupSingleProps).defaultValue : undefined\n );\n const [innerMultiple, setInnerMultiple] = useState<string[]>(\n type === 'multiple' ? ((props as ToggleGroupMultipleProps).defaultValue ?? []) : []\n );\n\n const isSingle = type === 'single';\n const isControlled = isSingle\n ? (props as ToggleGroupSingleProps).value !== undefined\n : (props as ToggleGroupMultipleProps).value !== undefined;\n\n const setValue = useCallback(\n (next: string) => {\n if (disabled) {\n return;\n }\n if (isSingle) {\n const current = isControlled ? (props as ToggleGroupSingleProps).value : innerSingle;\n const updated = current === next ? undefined : next;\n if (!isControlled) {\n setInnerSingle(updated);\n }\n (props as ToggleGroupSingleProps).onChange?.(updated);\n } else {\n const current: string[] =\n (isControlled ? (props as ToggleGroupMultipleProps).value : innerMultiple) ?? [];\n const updated = current.includes(next) ? current.filter((v) => v !== next) : [...current, next];\n if (!isControlled) {\n setInnerMultiple(updated);\n }\n (props as ToggleGroupMultipleProps).onChange?.(updated);\n }\n },\n [disabled, isSingle, isControlled, innerSingle, innerMultiple, props]\n );\n\n const isPressed = useCallback(\n (v: string) => {\n if (isSingle) {\n const current = isControlled ? (props as ToggleGroupSingleProps).value : innerSingle;\n return current === v;\n }\n const current = (isControlled ? (props as ToggleGroupMultipleProps).value : innerMultiple) ?? [];\n return current.includes(v);\n },\n [isSingle, isControlled, innerSingle, innerMultiple, props]\n );\n\n // --- roving tabindex order management ---\n const refs = useRef<Map<string, RefObject<HTMLElement | null>>>(new Map());\n // Live ordered list — re-render the group whenever items register so\n // border math (first/last) and roving init see the current order.\n const [order, setOrder] = useState<string[]>([]);\n const [rovingValue, setRovingValueState] = useState<string | undefined>(undefined);\n\n const register = useCallback((v: string, ref: RefObject<HTMLElement | null>) => {\n refs.current.set(v, ref);\n setOrder((prev) => (prev.includes(v) ? prev : [...prev, v]));\n setRovingValueState((current) => current ?? v);\n }, []);\n\n const unregister = useCallback((v: string) => {\n refs.current.delete(v);\n setOrder((prev) => prev.filter((x) => x !== v));\n setRovingValueState((current) => (current === v ? undefined : current));\n }, []);\n\n const focusValue = useCallback((v: string) => {\n refs.current.get(v)?.current?.focus?.();\n }, []);\n\n const setRovingValue = useCallback((v: string) => setRovingValueState(v), []);\n\n const moveBy = useCallback(\n (delta: 1 | -1, current: string) => {\n const list = order;\n if (list.length === 0) {\n return;\n }\n const idx = list.indexOf(current);\n const start = idx === -1 ? 0 : idx;\n const next = list[(start + delta + list.length) % list.length];\n if (!next) {\n return;\n }\n setRovingValueState(next);\n focusValue(next);\n },\n [order, focusValue]\n );\n\n const moveTo = useCallback(\n (position: 'first' | 'last') => {\n const list = order;\n if (list.length === 0) {\n return;\n }\n const next = position === 'first' ? list[0] : list[list.length - 1];\n if (!next) {\n return;\n }\n setRovingValueState(next);\n focusValue(next);\n },\n [order, focusValue]\n );\n\n const ctxValue = useMemo<ToggleGroupContextValue>(\n () => ({\n type,\n setValue,\n isPressed,\n disabled,\n variant,\n size,\n register,\n unregister,\n rovingValue,\n setRovingValue,\n moveBy,\n moveTo,\n order,\n }),\n [\n type,\n setValue,\n isPressed,\n disabled,\n variant,\n size,\n register,\n unregister,\n rovingValue,\n setRovingValue,\n moveBy,\n moveTo,\n order,\n ]\n );\n\n const groupRole = isSingle ? 'radiogroup' : 'group';\n const label = ariaLabel ?? accessibilityLabel;\n\n const groupProps: Record<string, unknown> = {\n role: groupRole,\n accessibilityRole: groupRole,\n ...(label ? { 'aria-label': label, accessibilityLabel: label } : {}),\n ...(disabled ? { 'aria-disabled': true } : {}),\n ...(testID !== undefined ? { testID } : {}),\n };\n\n // For the `default` variant we render items zero-gap so they share\n // borders, like a UISegmentedControl. For `outline` we keep a small\n // gap so the bordered cells don't double up their seams.\n const colors = useThemeColors();\n const containerStyle: ViewStyle =\n variant === 'default'\n ? { flexDirection: 'row', alignItems: 'stretch', gap: 0 }\n : { flexDirection: 'row', alignItems: 'stretch', gap: px(colors.spacing['1']) };\n\n return (\n <ToggleGroupContext.Provider value={ctxValue}>\n <View\n {...groupProps}\n className={cn(\n 'inline-flex flex-row items-stretch',\n variant === 'default' ? 'gap-0' : 'gap-1',\n disabled ? 'opacity-60' : undefined,\n className\n )}\n style={[containerStyle, disabled ? { opacity: 0.6 } : null]}\n >\n {children}\n </View>\n </ToggleGroupContext.Provider>\n );\n};\n\nexport type ToggleGroupItemProps = {\n /** Unique identifier within the group — written into `value` when pressed. */\n value: string;\n /** Disable just this item (OR-ed with group-level `disabled`). */\n disabled?: boolean;\n children?: ReactNode;\n 'aria-label'?: string;\n accessibilityLabel?: string;\n className?: string;\n testID?: string;\n};\n\n/**\n * One toggle inside a `<ToggleGroup>`. Throws with a clear message when\n * rendered outside of one.\n */\nexport const ToggleGroupItem = ({\n value,\n disabled,\n children,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n className,\n testID,\n}: ToggleGroupItemProps) => {\n const ctx = useToggleGroupContext();\n const ownRef = useRef<HTMLElement | null>(null);\n // Capture register/unregister in a ref so the effect's deps stay\n // value-only — otherwise a new context object on every render (driven\n // by setOrder inside register) would re-fire the effect → setState\n // loop → \"Maximum update depth exceeded\".\n const registryRef = useRef({ register: ctx.register, unregister: ctx.unregister });\n registryRef.current = { register: ctx.register, unregister: ctx.unregister };\n\n useEffect(() => {\n // Read-through holder so the registered ref always sees the latest node.\n const holder: RefObject<HTMLElement | null> = {\n get current() {\n return ownRef.current;\n },\n set current(_v) {\n /* no-op — read-through to ownRef */\n },\n } as unknown as RefObject<HTMLElement | null>;\n registryRef.current.register(value, holder);\n return () => registryRef.current.unregister(value);\n }, [value]);\n\n const isOn = ctx.isPressed(value);\n const isDisabled = disabled || ctx.disabled;\n const isRoving = ctx.rovingValue === value;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown': {\n event.preventDefault();\n ctx.moveBy(1, value);\n return;\n }\n case 'ArrowLeft':\n case 'ArrowUp': {\n event.preventDefault();\n ctx.moveBy(-1, value);\n return;\n }\n case 'Home': {\n event.preventDefault();\n ctx.moveTo('first');\n return;\n }\n case 'End': {\n event.preventDefault();\n ctx.moveTo('last');\n return;\n }\n case ' ':\n case 'Enter': {\n event.preventDefault();\n if (!isDisabled) {\n ctx.setValue(value);\n }\n return;\n }\n }\n },\n [ctx, isDisabled, value]\n );\n\n const handleFocus = useCallback(() => {\n ctx.setRovingValue(value);\n }, [ctx, value]);\n\n // Items inside a `default`-variant group share borders: only the first\n // rounds the left, the last rounds the right; everything else is square.\n const colors = useThemeColors();\n const idx = ctx.order.indexOf(value);\n const isFirst = idx === 0;\n const isLast = idx === ctx.order.length - 1;\n const sharedRadius = px(colors.radius.md);\n const isClustered = ctx.order.length > 1;\n const borderRadius = isClustered\n ? {\n topLeft: isFirst ? sharedRadius : 0,\n bottomLeft: isFirst ? sharedRadius : 0,\n topRight: isLast ? sharedRadius : 0,\n bottomRight: isLast ? sharedRadius : 0,\n }\n : sharedRadius;\n\n return (\n <ToggleVisual\n isOn={isOn}\n disabled={Boolean(isDisabled)}\n variant={ctx.variant}\n size={ctx.size}\n onPress={() => ctx.setValue(value)}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n ariaLabel={ariaLabel ?? accessibilityLabel}\n className={className}\n testID={testID}\n tabIndex={isRoving ? 0 : -1}\n borderRadius={borderRadius}\n forceBorder={ctx.variant === 'default' && isClustered}\n suppressRightBorder={isClustered && !isLast}\n refCallback={(node) => {\n ownRef.current = node;\n }}\n >\n {children}\n </ToggleVisual>\n );\n};\n\n/**\n * Public `Toggle` value — the standalone toggle plus its `.Group` and `.Item`\n * static members. Use `<Toggle.Group>` to wrap a list of `<Toggle.Item>`s.\n *\n * `Object.assign` produces a value whose inferred type carries the static\n * properties, so `.d.ts` consumers can write `<Toggle.Group>` without a\n * separate import.\n */\nexport const Toggle = Object.assign(ToggleRoot, {\n Group: ToggleGroup,\n Item: ToggleGroupItem,\n});\n"]}
@@ -1,6 +1,6 @@
1
- export { Toggle } from '../../chunk-STX5UKYT.js';
1
+ export { Toggle } from '../../chunk-XAXIQ55K.js';
2
2
  import '../../chunk-5A2QOOVN.js';
3
- import '../../chunk-R5JMDDCB.js';
3
+ import '../../chunk-3W2O4OBL.js';
4
4
  import '../../chunk-CHXHRJNZ.js';
5
5
  import '../../chunk-WCQVDF3K.js';
6
6
  //# sourceMappingURL=index.js.map
@@ -101,6 +101,7 @@ __name(px, "px");
101
101
  var theme = {
102
102
  color: {
103
103
  danger: "#ef4444",
104
+ dangerText: "#b91c1c",
104
105
  info: "#3b82f6",
105
106
  neutral: {
106
107
  "100": "#f4f4f5",
@@ -210,6 +211,7 @@ var theme = {
210
211
  var themeDark = {
211
212
  color: {
212
213
  danger: "#ef4444",
214
+ dangerText: "#b91c1c",
213
215
  info: "#3b82f6",
214
216
  neutral: {
215
217
  "100": "#f4f4f5",