@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":["../../../node_modules/react-native-safe-area-context/SafeAreaContext.tsx","../src/components/FloatButton/FloatButton.tsx"],"names":["isDev","process","env","NODE_ENV","SafeAreaInsetsContext","createContext","displayName","SafeAreaFrameContext","StyleSheet","create","fill","flex","Consumer","useContext","useState","useCallback","RNText"],"mappings":"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","file":"chunk-PJXVLE24.js","sourcesContent":[null,"'use client';\n\n// =============================================================================\n// FloatButton — cross-platform Floating Action Button (FAB)\n//\n// Two-component public surface:\n// <FloatButton> — standalone FAB\n// <FloatButton.Group> — cluster with click/long-press expansion\n// <FloatButton.BackToTop> — preset that scrolls a target ref to top\n//\n// Design direction: restrained-editorial (Linear/Stripe energy). Two-layer\n// brand-tinted shadows, subtle hover lift, snappy press scale, no bouncy\n// physics. Cross-platform via the same Pressable + inline style pattern\n// used in Pagination.\n// =============================================================================\n\nimport {\n type ComponentProps,\n cloneElement,\n createContext,\n type FC,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { GestureResponderEvent, ViewStyle } from 'react-native';\nimport { Platform, Pressable, Text as RNText, type ScrollView, useWindowDimensions, View } from 'react-native';\nimport { SafeAreaInsetsContext } from 'react-native-safe-area-context';\nimport { useTranslation } from '../../i18n/use-translation';\nimport { defaultSemanticIcons } from '../../icons/default-semantic-icons';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport { Badge, type BadgeProps } from '../Badge';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type FloatButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'surface';\nexport type FloatButtonShape = 'circle' | 'square' | 'extended';\nexport type FloatButtonSize = 'small' | 'medium' | 'large';\nexport type FloatButtonPlacement = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\nexport type FloatButtonGroupTrigger = 'click' | 'longPress' | 'manual';\nexport type FloatButtonGroupDirection = 'up' | 'down' | 'left' | 'right';\n\n/** Badge passthrough — same shape as our `<Badge>` accepts. */\nexport type FloatButtonBadge = {\n /** Numeric badge — render the number inside a small pill. */\n count?: number;\n /** Show a dot instead of a count (overrides `count`). */\n dot?: boolean;\n /** Badge tone — defaults to `'danger'` (the canonical \"unread\" red). */\n tone?: BadgeProps['tone'];\n};\n\ntype FloatButtonBaseProps = {\n /** Required unless `label` is set. */\n icon?: ReactNode;\n /** Inline label — turns the button extended (auto-sets `shape='extended'`). */\n label?: string;\n /** A11y label — falls back to `label`; required when icon-only. */\n accessibilityLabel?: string;\n /** Visual shape. @defaultValue 'circle' (or 'extended' when both icon + label are set) */\n shape?: FloatButtonShape;\n /** Size — sm=40, md=56, lg=72. @defaultValue 'medium' */\n size?: FloatButtonSize;\n /** Color/tone variant. @defaultValue 'primary' */\n variant?: FloatButtonVariant;\n /** Tooltip — web: hover/focus tooltip; native (in a group): always-visible label chip. */\n tooltip?: string;\n /** Badge — count, dot, or tone passthrough. */\n badge?: FloatButtonBadge;\n /** Disable interaction. */\n disabled?: boolean;\n /** Show a spinner in place of the icon. */\n loading?: boolean;\n /** Animate in/out. @defaultValue true */\n visible?: boolean;\n /** Where to anchor the FAB on the screen. @defaultValue 'bottom-right' */\n placement?: FloatButtonPlacement;\n /**\n * Positioning strategy. `'fixed'` pins to the viewport (web `position: fixed`,\n * native absolute-on-root); `'absolute'` pins to the nearest positioned\n * ancestor — useful for docs previews and any contained-canvas layout.\n * @defaultValue 'fixed'\n */\n positioning?: 'fixed' | 'absolute';\n /** Additional offset from the placement corner (px). @defaultValue { x: 24, y: 24 } web; { x: 16, y: 16 } native */\n offset?: { x?: number; y?: number };\n /**\n * On native, auto-add the device's bottom safe-area inset to the offset.\n * **Default is `false`** because RN has no `position: 'fixed'` — every\n * `FloatButton` is parent-relative, and adding the screen-bottom inset\n * to a card-relative offset pushes the button up by ~34pt for no reason.\n * Set this to `true` only when you're certain the FAB's parent reaches\n * the screen edge (e.g. a root-level container without `SafeAreaView`).\n * @defaultValue false\n */\n respectSafeArea?: boolean;\n /** Anchor link — renders as an `<a>` on web. */\n href?: string;\n /** RTL flips left/right placements. @defaultValue 'ltr' */\n dir?: 'ltr' | 'rtl';\n /** Long-press handler — native first-class, web maps to contextmenu. */\n onLongPress?: (event: GestureResponderEvent) => void;\n /** Forward ARIA attributes (used internally by Group for `aria-haspopup`/`aria-expanded`). */\n 'aria-haspopup'?: 'menu' | 'true' | boolean;\n 'aria-expanded'?: boolean;\n /**\n * Press handler. We're React-Native-first, so `onPress` is the primary\n * surface and works on both platforms. `onClick` is also accepted for\n * web-mental-model consumers; if BOTH are defined, `onPress` wins (and\n * a dev-only warning fires).\n */\n onPress?: (event: GestureResponderEvent) => void;\n /** Web-y alias for `onPress` — same handler, mapped at the call site. */\n onClick?: (event: { preventDefault?: () => void }) => void;\n className?: string;\n testID?: string;\n /** Set internally when the button lives inside a `<FloatButton.Group>`. */\n children?: ReactNode;\n};\n\nexport type FloatButtonProps = FloatButtonBaseProps;\n\n// =============================================================================\n// Context — shared by Group and its children\n// =============================================================================\n\ntype FloatButtonGroupContextValue = {\n /** Whether the group is expanded. */\n open: boolean;\n /** Close the group programmatically (used by action items after press). */\n close: () => void;\n /** Direction of expansion. */\n direction: FloatButtonGroupDirection;\n /** Whether items are inside a group — used to skip per-item positioning. */\n insideGroup: true;\n /** Index of the action item, used for staggered animation. */\n indexRef: { next: number };\n};\n\nconst FloatButtonGroupContext = createContext<FloatButtonGroupContextValue | null>(null);\n\n// =============================================================================\n// Constants\n// =============================================================================\n\nconst SIZE_MAP: Record<FloatButtonSize, { diameter: number; iconSize: number; fontSize: number; padX: number }> = {\n small: { diameter: 40, iconSize: 18, fontSize: 14, padX: 16 },\n medium: { diameter: 56, iconSize: 22, fontSize: 14, padX: 20 },\n large: { diameter: 72, iconSize: 28, fontSize: 16, padX: 28 },\n};\n\nconst DEFAULT_OFFSET_WEB = 24;\nconst DEFAULT_OFFSET_NATIVE = 16;\n\n// =============================================================================\n// Standalone FloatButton\n// =============================================================================\n\n/**\n * Floating Action Button — a fixed-position button that hovers above page\n * content. Cross-platform (web + native), badge-aware, link-capable, and\n * safe-area-aware on native.\n *\n * @example\n * <FloatButton icon={<Plus />} accessibilityLabel=\"New item\" onPress={...} />\n *\n * @example\n * <FloatButton icon={<Help />} label=\"Help\" shape=\"extended\" />\n */\n// Defined here as a plain function; the Group / BackToTop static properties\n// are attached at the bottom of the file via `Object.assign` so the dist\n// `.d.ts` surface preserves them (a bare type cast on the const doesn't\n// propagate through tsup's declaration emitter).\nconst FloatButtonRoot = (props: FloatButtonProps) => {\n const groupCtx = useContext(FloatButtonGroupContext);\n const colors = useThemeColors();\n // Read the context directly (instead of `useSafeAreaInsets()`) so the\n // component degrades silently when no `<SafeAreaProvider>` is mounted —\n // the canonical case on web. With a provider, real insets flow through;\n // without one, we get zeros and no console warning.\n const insets = useContext(SafeAreaInsetsContext) ?? { top: 0, right: 0, bottom: 0, left: 0 };\n const { width: viewportWidth } = useWindowDimensions();\n\n const {\n icon,\n label,\n accessibilityLabel,\n shape: shapeProp,\n size = groupCtx ? 'small' : 'medium',\n variant = 'primary',\n tooltip,\n badge,\n disabled = false,\n loading = false,\n visible = true,\n placement = 'bottom-right',\n positioning = 'fixed',\n offset,\n respectSafeArea = false,\n href,\n dir = 'ltr',\n onLongPress,\n className,\n testID,\n children,\n onPress,\n onClick,\n 'aria-haspopup': ariaHasPopup,\n 'aria-expanded': ariaExpanded,\n } = props;\n\n // `onPress` wins when both are defined — emit a dev-only warning so the\n // intent is unambiguous. (We can't make this a TS error because\n // exactOptionalPropertyTypes + spread in FloatButton.Group fights\n // discriminated unions.)\n if (process.env.NODE_ENV !== 'production' && onPress && onClick) {\n console.warn('<FloatButton>: both `onPress` and `onClick` defined — `onPress` will be used. Pick one.');\n }\n const onPressFn = onPress ?? onClick;\n\n // Auto-extend when both icon + label are present and shape is unset.\n const shape: FloatButtonShape = shapeProp ?? (label && icon ? 'extended' : 'circle');\n const sizeTokens = SIZE_MAP[size];\n\n // Tooltip visibility (web: hover/focus; native-in-group: always when group open)\n const [tooltipVisible, setTooltipVisible] = useState(false);\n\n // Track press-tap separately so we don't run onLongPress -> onPress.\n const longPressFiredRef = useRef(false);\n\n const handlePress = useCallback(\n (event: GestureResponderEvent) => {\n if (disabled || loading) {\n return;\n }\n if (longPressFiredRef.current) {\n longPressFiredRef.current = false;\n return;\n }\n // If we're inside a Group, close it after a press (unless this IS the\n // group's trigger — group trigger is rendered from inside Group itself,\n // not by a child FloatButton).\n if (groupCtx) {\n groupCtx.close();\n }\n (onPressFn as ((e: GestureResponderEvent) => void) | undefined)?.(event);\n },\n [disabled, loading, groupCtx, onPressFn]\n );\n\n const handleLongPress = useCallback(\n (event: GestureResponderEvent) => {\n if (disabled || loading) {\n return;\n }\n longPressFiredRef.current = true;\n onLongPress?.(event);\n },\n [disabled, loading, onLongPress]\n );\n\n // ----- variant resolution -----\n const variantStyle = useMemo(() => resolveVariantStyle(variant, colors), [variant, colors]);\n\n // ----- positioning -----\n const positionStyle: ViewStyle | null = groupCtx\n ? null // children of a group don't position themselves; the group handles layout\n : resolvePositionStyle({\n placement,\n positioning,\n offset: offset ?? {},\n dir,\n insets,\n viewportWidth,\n respectSafeArea,\n });\n\n // ----- visibility / disabled opacity -----\n const containerOpacity = visible ? (disabled ? 0.4 : 1) : 0;\n\n // ----- shape dimensions -----\n const isExtended = shape === 'extended' && Boolean(label);\n const containerDimensions: ViewStyle = isExtended\n ? {\n minWidth: sizeTokens.diameter,\n height: sizeTokens.diameter,\n paddingHorizontal: sizeTokens.padX,\n borderRadius: sizeTokens.diameter / 2,\n }\n : {\n width: sizeTokens.diameter,\n height: sizeTokens.diameter,\n borderRadius: shape === 'square' ? px(colors.radius.lg) : sizeTokens.diameter / 2,\n };\n\n const a11yLabel = accessibilityLabel ?? label ?? tooltip;\n\n if (process.env.NODE_ENV !== 'production' && !a11yLabel && icon) {\n console.warn('<FloatButton>: provide `accessibilityLabel` or `label` for icon-only buttons (WCAG 2.2).');\n }\n\n // ----- shadow tokens (brand-tinted on primary) -----\n const shadowStyle = useMemo(() => resolveShadowStyle(variant, colors), [variant, colors]);\n\n // ----- inner content (icon + optional label) -----\n const contentNode = (\n <>\n {loading ? (\n <SmallSpinner color={variantStyle.fg} size={sizeTokens.iconSize} />\n ) : (\n <View\n style={\n {\n width: sizeTokens.iconSize,\n height: sizeTokens.iconSize,\n alignItems: 'center',\n justifyContent: 'center',\n // Sets CSS `color` on the wrapper div under RN-Web\n // so any nested SVG using `stroke=\"currentColor\"`\n // or `fill=\"currentColor\"` inherits the variant fg.\n // RN ignores `color` on a View (it's only valid on\n // Text) — silently dropped on native.\n color: variantStyle.fg,\n } as unknown as ViewStyle\n }\n >\n {tintIcon(icon, variantStyle.fg)}\n </View>\n )}\n {isExtended ? (\n <RNText\n style={{\n marginLeft: px(colors.spacing['2']),\n color: variantStyle.fg,\n fontFamily: colors.fontFamily.body,\n fontSize: sizeTokens.fontSize,\n fontWeight: colors.fontWeight.medium as '500',\n letterSpacing: -0.1,\n fontVariant: ['tabular-nums'],\n }}\n numberOfLines={1}\n >\n {label}\n </RNText>\n ) : null}\n </>\n );\n\n // ----- wrapper: positioning + opacity transitions -----\n const wrapperStyle: ViewStyle = {\n ...(positionStyle ?? {}),\n opacity: containerOpacity,\n // Web-only transitions for visibility/scale (silently dropped on native).\n ...(Platform.OS === 'web'\n ? ({\n transitionProperty: 'opacity, transform',\n transitionDuration: '180ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n pointerEvents: visible ? 'auto' : 'none',\n } as ViewStyle)\n : null),\n };\n\n // ----- the button itself (Pressable + visual style) -----\n const buttonNode = (\n <Pressable\n {...(testID !== undefined ? { testID } : {})}\n role=\"button\"\n accessibilityRole=\"button\"\n accessibilityLabel={a11yLabel}\n aria-label={a11yLabel}\n disabled={disabled || loading}\n aria-disabled={disabled || undefined}\n aria-busy={loading || undefined}\n {...(ariaHasPopup !== undefined ? { 'aria-haspopup': ariaHasPopup } : {})}\n {...(ariaExpanded !== undefined ? { 'aria-expanded': ariaExpanded } : {})}\n onPress={handlePress}\n onLongPress={onLongPress ? handleLongPress : undefined}\n // Web hover/focus reveals the tooltip; rely on Pressable's hover state.\n onHoverIn={() => setTooltipVisible(true)}\n onHoverOut={() => setTooltipVisible(false)}\n onFocus={() => setTooltipVisible(true)}\n onBlur={() => setTooltipVisible(false)}\n // Pre-compute the static style; iOS's Pressable renderer was\n // observed to drop properties from function-form `style` returns\n // intermittently — same bug we hit on the Pagination selected pill.\n // The function form is web-only (where it reads `hovered`); on\n // native we pass a plain object that always renders.\n style={\n Platform.OS === 'web'\n ? (state) => {\n const { pressed, hovered } = state as { pressed: boolean; hovered?: boolean };\n return {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: pressed\n ? variantStyle.bgPressed\n : hovered\n ? variantStyle.bgHover\n : variantStyle.bg,\n ...(variantStyle.borderColor\n ? { borderWidth: 1, borderColor: variantStyle.borderColor }\n : null),\n ...containerDimensions,\n ...shadowStyle.resting,\n ...(pressed ? { transform: [{ scale: 0.96 }], ...shadowStyle.pressed } : null),\n ...(hovered && !pressed\n ? { transform: [{ translateY: -1 }], ...shadowStyle.hover }\n : null),\n ...({\n transitionProperty: 'background-color, box-shadow, transform',\n transitionDuration: '150ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n cursor: disabled || loading ? 'not-allowed' : 'pointer',\n outlineWidth: 0,\n } as object),\n } as ViewStyle;\n }\n : ({\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: variantStyle.bg,\n ...(variantStyle.borderColor\n ? { borderWidth: 1, borderColor: variantStyle.borderColor }\n : null),\n ...containerDimensions,\n ...shadowStyle.resting,\n } as ViewStyle)\n }\n >\n {contentNode}\n </Pressable>\n );\n\n // Web `<a>` wrapper for href integration. Non-anchor on native.\n const linkedButton =\n href && Platform.OS === 'web' ? (\n <a\n href={href}\n aria-label={a11yLabel}\n style={{ textDecoration: 'none', color: 'inherit', display: 'inline-flex' }}\n onClick={(e) => {\n if (onPressFn) {\n // Let consumer's handler decide; if they call preventDefault we honor it.\n (onPressFn as (e: { preventDefault?: () => void }) => void)({\n preventDefault: () => e.preventDefault(),\n });\n }\n }}\n >\n {buttonNode}\n </a>\n ) : (\n buttonNode\n );\n\n // Tooltip chip — always visible on native when inside an open group;\n // hover/focus on web. Skipped if no tooltip text.\n const showTooltip = tooltip && (Platform.OS === 'web' ? tooltipVisible : (groupCtx?.open ?? false));\n\n return (\n <View className={cn(className)} style={wrapperStyle}>\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: px(colors.spacing['2']) }}>\n {showTooltip ? <TooltipChip text={tooltip!} /> : null}\n <View style={{ position: 'relative' }}>\n {linkedButton}\n {badge ? <BadgeOverlay badge={badge} size={size} /> : null}\n </View>\n </View>\n {children}\n </View>\n );\n};\n\n// =============================================================================\n// FloatButton.Group\n// =============================================================================\n\nexport type FloatButtonGroupProps = Omit<FloatButtonProps, 'onPress' | 'onClick' | 'onLongPress'> & {\n /** Trigger mode — `manual` requires `open` to be controlled. @defaultValue 'click' */\n trigger?: FloatButtonGroupTrigger;\n /** Controlled open state. */\n open?: boolean;\n /** Initial open state when uncontrolled. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires whenever the group opens or closes. */\n onOpenChange?: (open: boolean) => void;\n /** Direction the action items expand. @defaultValue 'up' */\n direction?: FloatButtonGroupDirection;\n /** Render a scrim/backdrop behind the open group. @defaultValue false */\n backdrop?: boolean;\n /** Override the trigger icon when collapsed. */\n expandIcon?: ReactNode;\n /** Override the trigger icon when expanded. @defaultValue rotated `expandIcon` (or `icon`) */\n collapseIcon?: ReactNode;\n /** Action items declared as data — alternative to children. */\n actions?: ReadonlyArray<FloatButtonProps>;\n};\n\nconst FloatButtonGroup: FC<FloatButtonGroupProps> = ({\n trigger = 'click',\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n direction = 'up',\n backdrop = false,\n expandIcon,\n collapseIcon,\n actions,\n children,\n ...buttonProps\n}) => {\n const isControlled = openProp !== undefined;\n const [innerOpen, setInnerOpen] = useState(defaultOpen);\n const open = isControlled ? (openProp as boolean) : innerOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setInnerOpen(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const close = useCallback(() => setOpen(false), [setOpen]);\n const toggle = useCallback(() => setOpen(!open), [setOpen, open]);\n\n // Action items: flatten `actions` array into FloatButton children if given.\n const actionItems: ReactNode = actions\n ? actions.map((action, idx) => {\n // biome-ignore lint/suspicious/noArrayIndexKey: deterministic order from caller's array\n return <FloatButton key={`fab-action-${idx}`} {...(action as FloatButtonProps)} />;\n })\n : children;\n\n // The group's outer container handles positioning; children render inline.\n const groupCtxValue = useMemo<FloatButtonGroupContextValue>(\n () => ({\n open,\n close,\n direction,\n insideGroup: true as const,\n indexRef: { next: 0 },\n }),\n [open, close, direction]\n );\n\n // Trigger button (uses the same FloatButton render path but without\n // group-context positioning so it stays in the corner).\n const triggerIcon = open\n ? (collapseIcon ?? <RotatedIcon node={expandIcon ?? buttonProps.icon} />)\n : (expandIcon ?? buttonProps.icon);\n\n return (\n <FloatButtonGroupContext.Provider value={groupCtxValue}>\n {backdrop && open ? <Backdrop onPress={close} positioning={buttonProps.positioning ?? 'fixed'} /> : null}\n <GroupLayout\n direction={direction}\n placement={buttonProps.placement ?? 'bottom-right'}\n positioning={buttonProps.positioning ?? 'fixed'}\n offset={buttonProps.offset ?? {}}\n dir={buttonProps.dir ?? 'ltr'}\n >\n {open ? <View style={groupActionsLayoutStyle(direction)}>{actionItems}</View> : null}\n <FloatButton\n {...(buttonProps as FloatButtonProps)}\n icon={triggerIcon}\n {...(trigger === 'click' ? { onPress: toggle } : {})}\n {...(trigger === 'longPress' ? { onLongPress: toggle } : {})}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n />\n </GroupLayout>\n </FloatButtonGroupContext.Provider>\n );\n};\n\n// (assignment moved to the bottom-of-file Object.assign)\n\n// =============================================================================\n// FloatButton.BackToTop\n// =============================================================================\n\nexport type FloatButtonBackToTopProps = Omit<FloatButtonProps, 'icon' | 'onPress' | 'onClick' | 'visible'> & {\n /** Scroll target ref — RN ScrollView. Defaults to window on web. */\n scrollRef?: { current: ScrollView | null };\n /** Show only when the scroll target is past this many px from the top. @defaultValue 400 */\n visibilityThreshold?: number;\n};\n\nconst FloatButtonBackToTop: FC<FloatButtonBackToTopProps> = ({\n scrollRef,\n visibilityThreshold = 400,\n variant = 'surface',\n ...rest\n}) => {\n const { t } = useTranslation();\n const [visible, setVisible] = useState(false);\n\n // Web: bind to window scroll. Native: caller wires onScroll on their\n // ScrollView and updates an external state — we expose a passive read here.\n useEffect(() => {\n if (Platform.OS !== 'web' || typeof window === 'undefined') {\n return;\n }\n const onScroll = () => setVisible(window.scrollY > visibilityThreshold);\n onScroll();\n window.addEventListener('scroll', onScroll, { passive: true });\n return () => window.removeEventListener('scroll', onScroll);\n }, [visibilityThreshold]);\n\n const onPress = useCallback(() => {\n if (Platform.OS === 'web' && typeof window !== 'undefined') {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n return;\n }\n scrollRef?.current?.scrollTo?.({ y: 0, animated: true });\n }, [scrollRef]);\n\n return (\n <FloatButton\n {...(rest as FloatButtonProps)}\n variant={variant}\n visible={visible}\n icon={<defaultSemanticIcons.chevronUp size={20} />}\n accessibilityLabel={rest.accessibilityLabel ?? t('floatButton.backToTop', { defaultValue: 'Back to top' })}\n onPress={onPress}\n />\n );\n};\n\n// (assignment moved to the bottom-of-file Object.assign)\n\n/**\n * Public `FloatButton` value — the root function plus its `.Group` and\n * `.BackToTop` static members. `Object.assign` produces a value whose\n * inferred type carries the static properties, so `.d.ts` consumers can\n * write `<FloatButton.Group>` without a separate import.\n */\nexport const FloatButton = Object.assign(FloatButtonRoot, {\n Group: FloatButtonGroup,\n BackToTop: FloatButtonBackToTop,\n});\n\n// =============================================================================\n// Subcomponents\n// =============================================================================\n\nconst TooltipChip = ({ text }: { text: string }) => {\n const colors = useThemeColors();\n return (\n <View\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n backgroundColor: colors.semantic.background.elevated,\n borderRadius: px(colors.radius.sm) + 2,\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: 4,\n ...(Platform.OS === 'web' ? ({ boxShadow: '0 1px 2px rgba(0,0,0,0.06)' } as object) : null),\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: 13,\n lineHeight: 16,\n }}\n >\n {text}\n </RNText>\n </View>\n );\n};\n\nconst BadgeOverlay = ({ badge, size }: { badge: FloatButtonBadge; size: FloatButtonSize }) => {\n const offsetTop = size === 'large' ? -6 : -4;\n const offsetRight = size === 'large' ? -6 : -4;\n return (\n <View\n pointerEvents=\"none\"\n style={{\n position: 'absolute',\n top: offsetTop,\n right: offsetRight,\n zIndex: 1,\n }}\n >\n {badge.dot ? (\n <Badge tone={badge.tone ?? 'danger'} appearance=\"solid\">\n {' '}\n </Badge>\n ) : (\n <Badge tone={badge.tone ?? 'danger'} appearance=\"solid\">\n {String(badge.count ?? 0)}\n </Badge>\n )}\n </View>\n );\n};\n\nconst SmallSpinner = ({ color, size }: { color: string; size: number }) => {\n // Tiny CSS spinner on web; on native, defer to an opacity pulse for v1\n // (avoids importing the spinner component into the FloatButton bundle).\n if (Platform.OS === 'web') {\n return (\n <View\n style={\n {\n width: size,\n height: size,\n borderRadius: size / 2,\n borderWidth: 2,\n borderColor: 'transparent',\n borderTopColor: color,\n animationName: 'fb-spin',\n animationDuration: '700ms',\n animationIterationCount: 'infinite',\n animationTimingFunction: 'linear',\n } as unknown as ViewStyle\n }\n />\n );\n }\n return (\n <View\n style={{\n width: size,\n height: size,\n borderRadius: size / 2,\n borderWidth: 2,\n borderColor: color,\n opacity: 0.6,\n }}\n />\n );\n};\n\nconst Backdrop = ({ onPress, positioning }: { onPress: () => void; positioning: 'fixed' | 'absolute' }) => {\n return (\n <Pressable\n onPress={onPress}\n accessibilityLabel=\"Close\"\n style={{\n position:\n Platform.OS === 'web' && positioning === 'fixed' ? ('fixed' as unknown as 'absolute') : 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.32)',\n zIndex: 49,\n }}\n />\n );\n};\n\nconst RotatedIcon = ({ node, color }: { node: ReactNode; color?: string }) => {\n // Forward the color from the outer `tintIcon` clone down to the inner\n // node — otherwise the morph-to-X icon stays at its default tint while\n // the surrounding FAB icons inherit the variant fg.\n const tintedNode =\n color && isValidElement(node) ? cloneElement(node as ReactElement<{ color?: string }>, { color }) : node;\n return (\n <View\n style={\n {\n transform: [{ rotate: '45deg' }],\n // CSS `color` cascades to nested `currentColor` SVGs on web.\n ...(color ? { color } : null),\n ...(Platform.OS === 'web'\n ? {\n transitionProperty: 'transform',\n transitionDuration: '200ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n }\n : null),\n } as unknown as ViewStyle\n }\n >\n {tintedNode}\n </View>\n );\n};\n\nconst GroupLayout = ({\n direction,\n placement,\n positioning,\n offset,\n dir,\n children,\n}: {\n direction: FloatButtonGroupDirection;\n placement: FloatButtonPlacement;\n positioning: 'fixed' | 'absolute';\n offset: { x?: number; y?: number };\n dir: 'ltr' | 'rtl';\n children: ReactNode;\n}) => {\n // Read the context directly (instead of `useSafeAreaInsets()`) so the\n // component degrades silently when no `<SafeAreaProvider>` is mounted —\n // the canonical case on web. With a provider, real insets flow through;\n // without one, we get zeros and no console warning.\n const insets = useContext(SafeAreaInsetsContext) ?? { top: 0, right: 0, bottom: 0, left: 0 };\n const { width: viewportWidth } = useWindowDimensions();\n const positionStyle = resolvePositionStyle({\n placement,\n positioning,\n offset,\n dir,\n insets,\n viewportWidth,\n respectSafeArea: false,\n });\n return (\n <View\n style={{\n ...positionStyle,\n flexDirection: direction === 'left' || direction === 'right' ? 'row' : 'column',\n alignItems: direction === 'left' || direction === 'right' ? 'center' : 'flex-end',\n justifyContent: direction === 'up' ? 'flex-end' : 'flex-start',\n }}\n >\n {direction === 'up' || direction === 'left'\n ? children\n : Array.isArray(children)\n ? [...children].reverse()\n : children}\n </View>\n );\n};\n\nfunction groupActionsLayoutStyle(direction: FloatButtonGroupDirection): ViewStyle {\n const isVertical = direction === 'up' || direction === 'down';\n return {\n flexDirection: isVertical ? 'column' : 'row',\n alignItems: 'flex-end',\n gap: 12,\n marginBottom: direction === 'up' ? 12 : 0,\n marginTop: direction === 'down' ? 12 : 0,\n marginRight: direction === 'left' ? 12 : 0,\n marginLeft: direction === 'right' ? 12 : 0,\n };\n}\n\n// =============================================================================\n// Style resolvers\n// =============================================================================\n\nfunction resolveVariantStyle(\n variant: FloatButtonVariant,\n colors: ReturnType<typeof useThemeColors>\n): { bg: string; bgHover: string; bgPressed: string; fg: string; borderColor?: string } {\n switch (variant) {\n case 'primary':\n return {\n bg: colors.semantic.interactive.primary,\n bgHover: colors.semantic.interactive.primaryHover,\n bgPressed: colors.semantic.interactive.primaryPressed,\n fg: colors.semantic.text.inverted,\n };\n case 'secondary':\n return {\n bg: colors.semantic.background.subtle,\n bgHover: colors.semantic.background.elevated,\n bgPressed: colors.semantic.background.subtle,\n fg: colors.semantic.text.default,\n borderColor: colors.semantic.border.default,\n };\n case 'tertiary':\n return {\n bg: 'transparent',\n bgHover: withAlpha(colors.semantic.interactive.primary, 0.08),\n bgPressed: withAlpha(colors.semantic.interactive.primary, 0.12),\n fg: colors.semantic.interactive.primary,\n borderColor: colors.semantic.interactive.primary,\n };\n case 'surface':\n return {\n bg: colors.semantic.background.elevated,\n bgHover: colors.semantic.background.subtle,\n bgPressed: colors.semantic.background.subtle,\n fg: colors.semantic.text.default,\n borderColor: colors.semantic.border.default,\n };\n }\n}\n\nfunction resolveShadowStyle(\n variant: FloatButtonVariant,\n colors: ReturnType<typeof useThemeColors>\n): { resting: ViewStyle; hover: ViewStyle; pressed: ViewStyle } {\n if (Platform.OS !== 'web') {\n // RN's elevation prop on Android maps via boxShadow polyfill; keep\n // it minimal to avoid the chunky M3 look. On iOS we rely on RN's\n // native shadow* props.\n return {\n resting: {\n shadowColor: variant === 'primary' ? colors.semantic.interactive.primary : '#000',\n shadowOffset: { width: 0, height: 6 },\n shadowOpacity: variant === 'primary' ? 0.25 : 0.12,\n shadowRadius: 16,\n elevation: 6,\n } as unknown as ViewStyle,\n hover: {} as ViewStyle,\n pressed: {\n shadowOffset: { width: 0, height: 2 },\n shadowRadius: 6,\n elevation: 2,\n } as unknown as ViewStyle,\n };\n }\n const tint = variant === 'primary' ? colors.semantic.interactive.primary : '#000';\n return {\n resting: {\n ...({\n boxShadow: `0 1px 2px rgba(0,0,0,0.06), 0 8px 24px -6px ${withAlpha(tint, variant === 'primary' ? 0.32 : 0.08)}`,\n } as unknown as ViewStyle),\n },\n hover: {\n ...({\n boxShadow: `0 2px 4px rgba(0,0,0,0.08), 0 12px 28px -6px ${withAlpha(tint, variant === 'primary' ? 0.4 : 0.12)}`,\n } as unknown as ViewStyle),\n },\n pressed: {\n ...({ boxShadow: `0 1px 2px rgba(0,0,0,0.06)` } as unknown as ViewStyle),\n },\n };\n}\n\nfunction resolvePositionStyle({\n placement,\n positioning = 'fixed',\n offset,\n dir,\n insets,\n viewportWidth,\n respectSafeArea,\n}: {\n placement: FloatButtonPlacement;\n positioning?: 'fixed' | 'absolute';\n offset: { x?: number; y?: number };\n dir: 'ltr' | 'rtl';\n insets: { top: number; right: number; bottom: number; left: number };\n viewportWidth: number;\n respectSafeArea: boolean;\n}): ViewStyle {\n const defaultOffset = Platform.OS === 'web' ? DEFAULT_OFFSET_WEB : DEFAULT_OFFSET_NATIVE;\n const x = offset.x ?? defaultOffset;\n const y = offset.y ?? defaultOffset;\n const safeBottom = Platform.OS !== 'web' && respectSafeArea ? insets.bottom : 0;\n const safeTop = Platform.OS !== 'web' && respectSafeArea ? insets.top : 0;\n\n // RTL flips left/right placements.\n const flippedPlacement: FloatButtonPlacement =\n dir === 'rtl'\n ? placement === 'bottom-right'\n ? 'bottom-left'\n : placement === 'bottom-left'\n ? 'bottom-right'\n : placement === 'top-right'\n ? 'top-left'\n : 'top-right'\n : placement;\n\n // RN doesn't have `position: 'fixed'` — only `'absolute'`. On web RN-Web\n // accepts the cast. The `positioning` prop also lets consumers force\n // `'absolute'` so the FAB pins to a positioned ancestor (docs previews).\n const cssPosition: ViewStyle['position'] =\n Platform.OS === 'web' && positioning === 'fixed' ? ('fixed' as unknown as 'absolute') : 'absolute';\n const base: ViewStyle = {\n position: cssPosition,\n zIndex: 50,\n };\n\n switch (flippedPlacement) {\n case 'bottom-right':\n return { ...base, bottom: y + safeBottom, right: x };\n case 'bottom-left':\n return { ...base, bottom: y + safeBottom, left: x };\n case 'top-right':\n return { ...base, top: y + safeTop, right: x };\n case 'top-left':\n return { ...base, top: y + safeTop, left: x };\n }\n // Suppress viewportWidth warning — reserved for future RTL/horizontal logic.\n void viewportWidth;\n return base;\n}\n\n/**\n * Force the icon's color to match the FAB's variant fg. Works for our\n * `IconComponentProps`-shaped icons (which accept `{ size, color }`) by\n * cloning the element with the resolved color; raw nodes pass through\n * unchanged and rely on the wrapper's CSS `color` for `currentColor`-based\n * SVGs. Consumer-supplied colors are intentionally overridden — inside a\n * primary FAB the icon should always read against the primary surface.\n */\nfunction tintIcon(icon: ReactNode, color: string): ReactNode {\n if (!isValidElement(icon)) {\n return icon;\n }\n return cloneElement(icon as ReactElement<{ color?: string }>, { color });\n}\n\nfunction withAlpha(color: string, alpha: number): string {\n if (color.startsWith('#') && (color.length === 7 || color.length === 4)) {\n const expanded =\n color.length === 4 ? `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}` : color;\n const r = Number.parseInt(expanded.slice(1, 3), 16);\n const g = Number.parseInt(expanded.slice(3, 5), 16);\n const b = Number.parseInt(expanded.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n return color;\n}\n\n// Suppress unused — ComponentProps reserved for future href-prop polymorphism.\ntype _Unused = ComponentProps<'button'>;\n"]}
1
+ {"version":3,"sources":["../../../node_modules/react-native-safe-area-context/SafeAreaContext.tsx","../src/components/FloatButton/FloatButton.tsx"],"names":["isDev","process","env","NODE_ENV","SafeAreaInsetsContext","createContext","displayName","SafeAreaFrameContext","StyleSheet","create","fill","flex","Consumer","useContext","useState","useCallback","RNText"],"mappings":"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","file":"chunk-QYA7HYFI.js","sourcesContent":[null,"'use client';\n\n// =============================================================================\n// FloatButton — cross-platform Floating Action Button (FAB)\n//\n// Two-component public surface:\n// <FloatButton> — standalone FAB\n// <FloatButton.Group> — cluster with click/long-press expansion\n// <FloatButton.BackToTop> — preset that scrolls a target ref to top\n//\n// Design direction: restrained-editorial (Linear/Stripe energy). Two-layer\n// brand-tinted shadows, subtle hover lift, snappy press scale, no bouncy\n// physics. Cross-platform via the same Pressable + inline style pattern\n// used in Pagination.\n// =============================================================================\n\nimport {\n type ComponentProps,\n cloneElement,\n createContext,\n type FC,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { GestureResponderEvent, ViewStyle } from 'react-native';\nimport { Platform, Pressable, Text as RNText, type ScrollView, useWindowDimensions, View } from 'react-native';\nimport { SafeAreaInsetsContext } from 'react-native-safe-area-context';\nimport { useTranslation } from '../../i18n/use-translation';\nimport { defaultSemanticIcons } from '../../icons/default-semantic-icons';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport { Badge, type BadgeProps } from '../Badge';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type FloatButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'surface';\nexport type FloatButtonShape = 'circle' | 'square' | 'extended';\nexport type FloatButtonSize = 'small' | 'medium' | 'large';\nexport type FloatButtonPlacement = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\nexport type FloatButtonGroupTrigger = 'click' | 'longPress' | 'manual';\nexport type FloatButtonGroupDirection = 'up' | 'down' | 'left' | 'right';\n\n/** Badge passthrough — same shape as our `<Badge>` accepts. */\nexport type FloatButtonBadge = {\n /** Numeric badge — render the number inside a small pill. */\n count?: number;\n /** Show a dot instead of a count (overrides `count`). */\n dot?: boolean;\n /** Badge tone — defaults to `'danger'` (the canonical \"unread\" red). */\n tone?: BadgeProps['tone'];\n};\n\ntype FloatButtonBaseProps = {\n /** Required unless `label` is set. */\n icon?: ReactNode;\n /** Inline label — turns the button extended (auto-sets `shape='extended'`). */\n label?: string;\n /** A11y label — falls back to `label`; required when icon-only. */\n accessibilityLabel?: string;\n /** Visual shape. @defaultValue 'circle' (or 'extended' when both icon + label are set) */\n shape?: FloatButtonShape;\n /** Size — sm=40, md=56, lg=72. @defaultValue 'medium' */\n size?: FloatButtonSize;\n /** Color/tone variant. @defaultValue 'primary' */\n variant?: FloatButtonVariant;\n /** Tooltip — web: hover/focus tooltip; native (in a group): always-visible label chip. */\n tooltip?: string;\n /** Badge — count, dot, or tone passthrough. */\n badge?: FloatButtonBadge;\n /** Disable interaction. */\n disabled?: boolean;\n /** Show a spinner in place of the icon. */\n loading?: boolean;\n /** Animate in/out. @defaultValue true */\n visible?: boolean;\n /** Where to anchor the FAB on the screen. @defaultValue 'bottom-right' */\n placement?: FloatButtonPlacement;\n /**\n * Positioning strategy. `'fixed'` pins to the viewport (web `position: fixed`,\n * native absolute-on-root); `'absolute'` pins to the nearest positioned\n * ancestor — useful for docs previews and any contained-canvas layout.\n * @defaultValue 'fixed'\n */\n positioning?: 'fixed' | 'absolute';\n /** Additional offset from the placement corner (px). @defaultValue { x: 24, y: 24 } web; { x: 16, y: 16 } native */\n offset?: { x?: number; y?: number };\n /**\n * On native, auto-add the device's bottom safe-area inset to the offset.\n * **Default is `false`** because RN has no `position: 'fixed'` — every\n * `FloatButton` is parent-relative, and adding the screen-bottom inset\n * to a card-relative offset pushes the button up by ~34pt for no reason.\n * Set this to `true` only when you're certain the FAB's parent reaches\n * the screen edge (e.g. a root-level container without `SafeAreaView`).\n * @defaultValue false\n */\n respectSafeArea?: boolean;\n /** Anchor link — renders as an `<a>` on web. */\n href?: string;\n /** RTL flips left/right placements. @defaultValue 'ltr' */\n dir?: 'ltr' | 'rtl';\n /** Long-press handler — native first-class, web maps to contextmenu. */\n onLongPress?: (event: GestureResponderEvent) => void;\n /** Forward ARIA attributes (used internally by Group for `aria-haspopup`/`aria-expanded`). */\n 'aria-haspopup'?: 'menu' | 'true' | boolean;\n 'aria-expanded'?: boolean;\n /**\n * Press handler. We're React-Native-first, so `onPress` is the primary\n * surface and works on both platforms. `onClick` is also accepted for\n * web-mental-model consumers; if BOTH are defined, `onPress` wins (and\n * a dev-only warning fires).\n */\n onPress?: (event: GestureResponderEvent) => void;\n /** Web-y alias for `onPress` — same handler, mapped at the call site. */\n onClick?: (event: { preventDefault?: () => void }) => void;\n className?: string;\n testID?: string;\n /** Set internally when the button lives inside a `<FloatButton.Group>`. */\n children?: ReactNode;\n};\n\nexport type FloatButtonProps = FloatButtonBaseProps;\n\n// =============================================================================\n// Context — shared by Group and its children\n// =============================================================================\n\ntype FloatButtonGroupContextValue = {\n /** Whether the group is expanded. */\n open: boolean;\n /** Close the group programmatically (used by action items after press). */\n close: () => void;\n /** Direction of expansion. */\n direction: FloatButtonGroupDirection;\n /** Whether items are inside a group — used to skip per-item positioning. */\n insideGroup: true;\n /** Index of the action item, used for staggered animation. */\n indexRef: { next: number };\n};\n\nconst FloatButtonGroupContext = createContext<FloatButtonGroupContextValue | null>(null);\n\n// =============================================================================\n// Constants\n// =============================================================================\n\nconst SIZE_MAP: Record<FloatButtonSize, { diameter: number; iconSize: number; fontSize: number; padX: number }> = {\n small: { diameter: 40, iconSize: 18, fontSize: 14, padX: 16 },\n medium: { diameter: 56, iconSize: 22, fontSize: 14, padX: 20 },\n large: { diameter: 72, iconSize: 28, fontSize: 16, padX: 28 },\n};\n\nconst DEFAULT_OFFSET_WEB = 24;\nconst DEFAULT_OFFSET_NATIVE = 16;\n\n// =============================================================================\n// Standalone FloatButton\n// =============================================================================\n\n/**\n * Floating Action Button — a fixed-position button that hovers above page\n * content. Cross-platform (web + native), badge-aware, link-capable, and\n * safe-area-aware on native.\n *\n * @example\n * <FloatButton icon={<Plus />} accessibilityLabel=\"New item\" onPress={...} />\n *\n * @example\n * <FloatButton icon={<Help />} label=\"Help\" shape=\"extended\" />\n */\n// Defined here as a plain function; the Group / BackToTop static properties\n// are attached at the bottom of the file via `Object.assign` so the dist\n// `.d.ts` surface preserves them (a bare type cast on the const doesn't\n// propagate through tsup's declaration emitter).\nconst FloatButtonRoot = (props: FloatButtonProps) => {\n const groupCtx = useContext(FloatButtonGroupContext);\n const colors = useThemeColors();\n // Read the context directly (instead of `useSafeAreaInsets()`) so the\n // component degrades silently when no `<SafeAreaProvider>` is mounted —\n // the canonical case on web. With a provider, real insets flow through;\n // without one, we get zeros and no console warning.\n const insets = useContext(SafeAreaInsetsContext) ?? { top: 0, right: 0, bottom: 0, left: 0 };\n const { width: viewportWidth } = useWindowDimensions();\n\n const {\n icon,\n label,\n accessibilityLabel,\n shape: shapeProp,\n size = groupCtx ? 'small' : 'medium',\n variant = 'primary',\n tooltip,\n badge,\n disabled = false,\n loading = false,\n visible = true,\n placement = 'bottom-right',\n positioning = 'fixed',\n offset,\n respectSafeArea = false,\n href,\n dir = 'ltr',\n onLongPress,\n className,\n testID,\n children,\n onPress,\n onClick,\n 'aria-haspopup': ariaHasPopup,\n 'aria-expanded': ariaExpanded,\n } = props;\n\n // `onPress` wins when both are defined — emit a dev-only warning so the\n // intent is unambiguous. (We can't make this a TS error because\n // exactOptionalPropertyTypes + spread in FloatButton.Group fights\n // discriminated unions.)\n if (process.env.NODE_ENV !== 'production' && onPress && onClick) {\n console.warn('<FloatButton>: both `onPress` and `onClick` defined — `onPress` will be used. Pick one.');\n }\n const onPressFn = onPress ?? onClick;\n\n // Auto-extend when both icon + label are present and shape is unset.\n const shape: FloatButtonShape = shapeProp ?? (label && icon ? 'extended' : 'circle');\n const sizeTokens = SIZE_MAP[size];\n\n // Tooltip visibility (web: hover/focus; native-in-group: always when group open)\n const [tooltipVisible, setTooltipVisible] = useState(false);\n\n // Track press-tap separately so we don't run onLongPress -> onPress.\n const longPressFiredRef = useRef(false);\n\n const handlePress = useCallback(\n (event: GestureResponderEvent) => {\n if (disabled || loading) {\n return;\n }\n if (longPressFiredRef.current) {\n longPressFiredRef.current = false;\n return;\n }\n // If we're inside a Group, close it after a press (unless this IS the\n // group's trigger — group trigger is rendered from inside Group itself,\n // not by a child FloatButton).\n if (groupCtx) {\n groupCtx.close();\n }\n (onPressFn as ((e: GestureResponderEvent) => void) | undefined)?.(event);\n },\n [disabled, loading, groupCtx, onPressFn]\n );\n\n const handleLongPress = useCallback(\n (event: GestureResponderEvent) => {\n if (disabled || loading) {\n return;\n }\n longPressFiredRef.current = true;\n onLongPress?.(event);\n },\n [disabled, loading, onLongPress]\n );\n\n // ----- variant resolution -----\n const variantStyle = useMemo(() => resolveVariantStyle(variant, colors), [variant, colors]);\n\n // ----- positioning -----\n const positionStyle: ViewStyle | null = groupCtx\n ? null // children of a group don't position themselves; the group handles layout\n : resolvePositionStyle({\n placement,\n positioning,\n offset: offset ?? {},\n dir,\n insets,\n viewportWidth,\n respectSafeArea,\n });\n\n // ----- visibility / disabled opacity -----\n const containerOpacity = visible ? (disabled ? 0.4 : 1) : 0;\n\n // ----- shape dimensions -----\n const isExtended = shape === 'extended' && Boolean(label);\n const containerDimensions: ViewStyle = isExtended\n ? {\n minWidth: sizeTokens.diameter,\n height: sizeTokens.diameter,\n paddingHorizontal: sizeTokens.padX,\n borderRadius: sizeTokens.diameter / 2,\n }\n : {\n width: sizeTokens.diameter,\n height: sizeTokens.diameter,\n borderRadius: shape === 'square' ? px(colors.radius.lg) : sizeTokens.diameter / 2,\n };\n\n const a11yLabel = accessibilityLabel ?? label ?? tooltip;\n\n if (process.env.NODE_ENV !== 'production' && !a11yLabel && icon) {\n console.warn('<FloatButton>: provide `accessibilityLabel` or `label` for icon-only buttons (WCAG 2.2).');\n }\n\n // ----- shadow tokens (brand-tinted on primary) -----\n const shadowStyle = useMemo(() => resolveShadowStyle(variant, colors), [variant, colors]);\n\n // ----- inner content (icon + optional label) -----\n const contentNode = (\n <>\n {loading ? (\n <SmallSpinner color={variantStyle.fg} size={sizeTokens.iconSize} />\n ) : (\n <View\n style={\n {\n width: sizeTokens.iconSize,\n height: sizeTokens.iconSize,\n alignItems: 'center',\n justifyContent: 'center',\n // Sets CSS `color` on the wrapper div under RN-Web\n // so any nested SVG using `stroke=\"currentColor\"`\n // or `fill=\"currentColor\"` inherits the variant fg.\n // RN ignores `color` on a View (it's only valid on\n // Text) — silently dropped on native.\n color: variantStyle.fg,\n } as unknown as ViewStyle\n }\n >\n {tintIcon(icon, variantStyle.fg)}\n </View>\n )}\n {isExtended ? (\n <RNText\n style={{\n marginLeft: px(colors.spacing['2']),\n color: variantStyle.fg,\n fontFamily: colors.fontFamily.body,\n fontSize: sizeTokens.fontSize,\n fontWeight: colors.fontWeight.medium as '500',\n letterSpacing: -0.1,\n fontVariant: ['tabular-nums'],\n }}\n numberOfLines={1}\n >\n {label}\n </RNText>\n ) : null}\n </>\n );\n\n // ----- wrapper: positioning + opacity transitions -----\n const wrapperStyle: ViewStyle = {\n ...(positionStyle ?? {}),\n opacity: containerOpacity,\n // Web-only transitions for visibility/scale (silently dropped on native).\n ...(Platform.OS === 'web'\n ? ({\n transitionProperty: 'opacity, transform',\n transitionDuration: '180ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n pointerEvents: visible ? 'auto' : 'none',\n } as ViewStyle)\n : null),\n };\n\n // ----- the button itself (Pressable + visual style) -----\n const buttonNode = (\n <Pressable\n {...(testID !== undefined ? { testID } : {})}\n role=\"button\"\n accessibilityRole=\"button\"\n accessibilityLabel={a11yLabel}\n aria-label={a11yLabel}\n disabled={disabled || loading}\n aria-disabled={disabled || undefined}\n aria-busy={loading || undefined}\n {...(ariaHasPopup !== undefined ? { 'aria-haspopup': ariaHasPopup } : {})}\n {...(ariaExpanded !== undefined ? { 'aria-expanded': ariaExpanded } : {})}\n onPress={handlePress}\n onLongPress={onLongPress ? handleLongPress : undefined}\n // Web hover/focus reveals the tooltip; rely on Pressable's hover state.\n onHoverIn={() => setTooltipVisible(true)}\n onHoverOut={() => setTooltipVisible(false)}\n onFocus={() => setTooltipVisible(true)}\n onBlur={() => setTooltipVisible(false)}\n // Pre-compute the static style; iOS's Pressable renderer was\n // observed to drop properties from function-form `style` returns\n // intermittently — same bug we hit on the Pagination selected pill.\n // The function form is web-only (where it reads `hovered`); on\n // native we pass a plain object that always renders.\n style={\n Platform.OS === 'web'\n ? (state) => {\n const { pressed, hovered } = state as { pressed: boolean; hovered?: boolean };\n return {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: pressed\n ? variantStyle.bgPressed\n : hovered\n ? variantStyle.bgHover\n : variantStyle.bg,\n ...(variantStyle.borderColor\n ? { borderWidth: 1, borderColor: variantStyle.borderColor }\n : null),\n ...containerDimensions,\n ...shadowStyle.resting,\n ...(pressed ? { transform: [{ scale: 0.96 }], ...shadowStyle.pressed } : null),\n ...(hovered && !pressed\n ? { transform: [{ translateY: -1 }], ...shadowStyle.hover }\n : null),\n ...({\n transitionProperty: 'background-color, box-shadow, transform',\n transitionDuration: '150ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n cursor: disabled || loading ? 'not-allowed' : 'pointer',\n outlineWidth: 0,\n } as object),\n } as ViewStyle;\n }\n : ({\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: variantStyle.bg,\n ...(variantStyle.borderColor\n ? { borderWidth: 1, borderColor: variantStyle.borderColor }\n : null),\n ...containerDimensions,\n ...shadowStyle.resting,\n } as ViewStyle)\n }\n >\n {contentNode}\n </Pressable>\n );\n\n // Web `<a>` wrapper for href integration. Non-anchor on native.\n const linkedButton =\n href && Platform.OS === 'web' ? (\n <a\n href={href}\n aria-label={a11yLabel}\n style={{ textDecoration: 'none', color: 'inherit', display: 'inline-flex' }}\n onClick={(e) => {\n if (onPressFn) {\n // Let consumer's handler decide; if they call preventDefault we honor it.\n (onPressFn as (e: { preventDefault?: () => void }) => void)({\n preventDefault: () => e.preventDefault(),\n });\n }\n }}\n >\n {buttonNode}\n </a>\n ) : (\n buttonNode\n );\n\n // Tooltip chip — always visible on native when inside an open group;\n // hover/focus on web. Skipped if no tooltip text.\n const showTooltip = tooltip && (Platform.OS === 'web' ? tooltipVisible : (groupCtx?.open ?? false));\n\n return (\n <View className={cn(className)} style={wrapperStyle}>\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: px(colors.spacing['2']) }}>\n {showTooltip ? <TooltipChip text={tooltip!} /> : null}\n <View style={{ position: 'relative' }}>\n {linkedButton}\n {badge ? <BadgeOverlay badge={badge} size={size} /> : null}\n </View>\n </View>\n {children}\n </View>\n );\n};\n\n// =============================================================================\n// FloatButton.Group\n// =============================================================================\n\nexport type FloatButtonGroupProps = Omit<FloatButtonProps, 'onPress' | 'onClick' | 'onLongPress'> & {\n /** Trigger mode — `manual` requires `open` to be controlled. @defaultValue 'click' */\n trigger?: FloatButtonGroupTrigger;\n /** Controlled open state. */\n open?: boolean;\n /** Initial open state when uncontrolled. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires whenever the group opens or closes. */\n onOpenChange?: (open: boolean) => void;\n /** Direction the action items expand. @defaultValue 'up' */\n direction?: FloatButtonGroupDirection;\n /** Render a scrim/backdrop behind the open group. @defaultValue false */\n backdrop?: boolean;\n /** Override the trigger icon when collapsed. */\n expandIcon?: ReactNode;\n /** Override the trigger icon when expanded. @defaultValue rotated `expandIcon` (or `icon`) */\n collapseIcon?: ReactNode;\n /** Action items declared as data — alternative to children. */\n actions?: ReadonlyArray<FloatButtonProps>;\n};\n\nconst FloatButtonGroup: FC<FloatButtonGroupProps> = ({\n trigger = 'click',\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n direction = 'up',\n backdrop = false,\n expandIcon,\n collapseIcon,\n actions,\n children,\n ...buttonProps\n}) => {\n const isControlled = openProp !== undefined;\n const [innerOpen, setInnerOpen] = useState(defaultOpen);\n const open = isControlled ? (openProp as boolean) : innerOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setInnerOpen(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const close = useCallback(() => setOpen(false), [setOpen]);\n const toggle = useCallback(() => setOpen(!open), [setOpen, open]);\n\n // Action items: flatten `actions` array into FloatButton children if given.\n const actionItems: ReactNode = actions\n ? actions.map((action, idx) => {\n // biome-ignore lint/suspicious/noArrayIndexKey: deterministic order from caller's array\n return <FloatButton key={`fab-action-${idx}`} {...(action as FloatButtonProps)} />;\n })\n : children;\n\n // The group's outer container handles positioning; children render inline.\n const groupCtxValue = useMemo<FloatButtonGroupContextValue>(\n () => ({\n open,\n close,\n direction,\n insideGroup: true as const,\n indexRef: { next: 0 },\n }),\n [open, close, direction]\n );\n\n // Trigger button (uses the same FloatButton render path but without\n // group-context positioning so it stays in the corner).\n const triggerIcon = open\n ? (collapseIcon ?? <RotatedIcon node={expandIcon ?? buttonProps.icon} />)\n : (expandIcon ?? buttonProps.icon);\n\n return (\n <FloatButtonGroupContext.Provider value={groupCtxValue}>\n {backdrop && open ? <Backdrop onPress={close} positioning={buttonProps.positioning ?? 'fixed'} /> : null}\n <GroupLayout\n direction={direction}\n placement={buttonProps.placement ?? 'bottom-right'}\n positioning={buttonProps.positioning ?? 'fixed'}\n offset={buttonProps.offset ?? {}}\n dir={buttonProps.dir ?? 'ltr'}\n >\n {open ? <View style={groupActionsLayoutStyle(direction)}>{actionItems}</View> : null}\n <FloatButton\n {...(buttonProps as FloatButtonProps)}\n icon={triggerIcon}\n {...(trigger === 'click' ? { onPress: toggle } : {})}\n {...(trigger === 'longPress' ? { onLongPress: toggle } : {})}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n />\n </GroupLayout>\n </FloatButtonGroupContext.Provider>\n );\n};\n\n// (assignment moved to the bottom-of-file Object.assign)\n\n// =============================================================================\n// FloatButton.BackToTop\n// =============================================================================\n\nexport type FloatButtonBackToTopProps = Omit<FloatButtonProps, 'icon' | 'onPress' | 'onClick' | 'visible'> & {\n /** Scroll target ref — RN ScrollView. Defaults to window on web. */\n scrollRef?: { current: ScrollView | null };\n /** Show only when the scroll target is past this many px from the top. @defaultValue 400 */\n visibilityThreshold?: number;\n};\n\nconst FloatButtonBackToTop: FC<FloatButtonBackToTopProps> = ({\n scrollRef,\n visibilityThreshold = 400,\n variant = 'surface',\n ...rest\n}) => {\n const { t } = useTranslation();\n const [visible, setVisible] = useState(false);\n\n // Web: bind to window scroll. Native: caller wires onScroll on their\n // ScrollView and updates an external state — we expose a passive read here.\n useEffect(() => {\n if (Platform.OS !== 'web' || typeof window === 'undefined') {\n return;\n }\n const onScroll = () => setVisible(window.scrollY > visibilityThreshold);\n onScroll();\n window.addEventListener('scroll', onScroll, { passive: true });\n return () => window.removeEventListener('scroll', onScroll);\n }, [visibilityThreshold]);\n\n const onPress = useCallback(() => {\n if (Platform.OS === 'web' && typeof window !== 'undefined') {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n return;\n }\n scrollRef?.current?.scrollTo?.({ y: 0, animated: true });\n }, [scrollRef]);\n\n return (\n <FloatButton\n {...(rest as FloatButtonProps)}\n variant={variant}\n visible={visible}\n icon={<defaultSemanticIcons.chevronUp size={20} />}\n accessibilityLabel={rest.accessibilityLabel ?? t('floatButton.backToTop', { defaultValue: 'Back to top' })}\n onPress={onPress}\n />\n );\n};\n\n// (assignment moved to the bottom-of-file Object.assign)\n\n/**\n * Public `FloatButton` value — the root function plus its `.Group` and\n * `.BackToTop` static members. `Object.assign` produces a value whose\n * inferred type carries the static properties, so `.d.ts` consumers can\n * write `<FloatButton.Group>` without a separate import.\n */\nexport const FloatButton = Object.assign(FloatButtonRoot, {\n Group: FloatButtonGroup,\n BackToTop: FloatButtonBackToTop,\n});\n\n// =============================================================================\n// Subcomponents\n// =============================================================================\n\nconst TooltipChip = ({ text }: { text: string }) => {\n const colors = useThemeColors();\n return (\n <View\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n backgroundColor: colors.semantic.background.elevated,\n borderRadius: px(colors.radius.sm) + 2,\n borderWidth: 1,\n borderColor: colors.semantic.border.default,\n paddingHorizontal: px(colors.spacing['2']),\n paddingVertical: 4,\n ...(Platform.OS === 'web' ? ({ boxShadow: '0 1px 2px rgba(0,0,0,0.06)' } as object) : null),\n }}\n >\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: 13,\n lineHeight: 16,\n }}\n >\n {text}\n </RNText>\n </View>\n );\n};\n\nconst BadgeOverlay = ({ badge, size }: { badge: FloatButtonBadge; size: FloatButtonSize }) => {\n const offsetTop = size === 'large' ? -6 : -4;\n const offsetRight = size === 'large' ? -6 : -4;\n return (\n <View\n pointerEvents=\"none\"\n style={{\n position: 'absolute',\n top: offsetTop,\n right: offsetRight,\n zIndex: 1,\n }}\n >\n {badge.dot ? (\n <Badge tone={badge.tone ?? 'danger'} appearance=\"solid\">\n {' '}\n </Badge>\n ) : (\n <Badge tone={badge.tone ?? 'danger'} appearance=\"solid\">\n {String(badge.count ?? 0)}\n </Badge>\n )}\n </View>\n );\n};\n\nconst SmallSpinner = ({ color, size }: { color: string; size: number }) => {\n // Tiny CSS spinner on web; on native, defer to an opacity pulse for v1\n // (avoids importing the spinner component into the FloatButton bundle).\n if (Platform.OS === 'web') {\n return (\n <View\n style={\n {\n width: size,\n height: size,\n borderRadius: size / 2,\n borderWidth: 2,\n borderColor: 'transparent',\n borderTopColor: color,\n animationName: 'fb-spin',\n animationDuration: '700ms',\n animationIterationCount: 'infinite',\n animationTimingFunction: 'linear',\n } as unknown as ViewStyle\n }\n />\n );\n }\n return (\n <View\n style={{\n width: size,\n height: size,\n borderRadius: size / 2,\n borderWidth: 2,\n borderColor: color,\n opacity: 0.6,\n }}\n />\n );\n};\n\nconst Backdrop = ({ onPress, positioning }: { onPress: () => void; positioning: 'fixed' | 'absolute' }) => {\n return (\n <Pressable\n onPress={onPress}\n accessibilityLabel=\"Close\"\n style={{\n position:\n Platform.OS === 'web' && positioning === 'fixed' ? ('fixed' as unknown as 'absolute') : 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.32)',\n zIndex: 49,\n }}\n />\n );\n};\n\nconst RotatedIcon = ({ node, color }: { node: ReactNode; color?: string }) => {\n // Forward the color from the outer `tintIcon` clone down to the inner\n // node — otherwise the morph-to-X icon stays at its default tint while\n // the surrounding FAB icons inherit the variant fg.\n const tintedNode =\n color && isValidElement(node) ? cloneElement(node as ReactElement<{ color?: string }>, { color }) : node;\n return (\n <View\n style={\n {\n transform: [{ rotate: '45deg' }],\n // CSS `color` cascades to nested `currentColor` SVGs on web.\n ...(color ? { color } : null),\n ...(Platform.OS === 'web'\n ? {\n transitionProperty: 'transform',\n transitionDuration: '200ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n }\n : null),\n } as unknown as ViewStyle\n }\n >\n {tintedNode}\n </View>\n );\n};\n\nconst GroupLayout = ({\n direction,\n placement,\n positioning,\n offset,\n dir,\n children,\n}: {\n direction: FloatButtonGroupDirection;\n placement: FloatButtonPlacement;\n positioning: 'fixed' | 'absolute';\n offset: { x?: number; y?: number };\n dir: 'ltr' | 'rtl';\n children: ReactNode;\n}) => {\n // Read the context directly (instead of `useSafeAreaInsets()`) so the\n // component degrades silently when no `<SafeAreaProvider>` is mounted —\n // the canonical case on web. With a provider, real insets flow through;\n // without one, we get zeros and no console warning.\n const insets = useContext(SafeAreaInsetsContext) ?? { top: 0, right: 0, bottom: 0, left: 0 };\n const { width: viewportWidth } = useWindowDimensions();\n const positionStyle = resolvePositionStyle({\n placement,\n positioning,\n offset,\n dir,\n insets,\n viewportWidth,\n respectSafeArea: false,\n });\n return (\n <View\n style={{\n ...positionStyle,\n flexDirection: direction === 'left' || direction === 'right' ? 'row' : 'column',\n alignItems: direction === 'left' || direction === 'right' ? 'center' : 'flex-end',\n justifyContent: direction === 'up' ? 'flex-end' : 'flex-start',\n }}\n >\n {direction === 'up' || direction === 'left'\n ? children\n : Array.isArray(children)\n ? [...children].reverse()\n : children}\n </View>\n );\n};\n\nfunction groupActionsLayoutStyle(direction: FloatButtonGroupDirection): ViewStyle {\n const isVertical = direction === 'up' || direction === 'down';\n return {\n flexDirection: isVertical ? 'column' : 'row',\n alignItems: 'flex-end',\n gap: 12,\n marginBottom: direction === 'up' ? 12 : 0,\n marginTop: direction === 'down' ? 12 : 0,\n marginRight: direction === 'left' ? 12 : 0,\n marginLeft: direction === 'right' ? 12 : 0,\n };\n}\n\n// =============================================================================\n// Style resolvers\n// =============================================================================\n\nfunction resolveVariantStyle(\n variant: FloatButtonVariant,\n colors: ReturnType<typeof useThemeColors>\n): { bg: string; bgHover: string; bgPressed: string; fg: string; borderColor?: string } {\n switch (variant) {\n case 'primary':\n return {\n bg: colors.semantic.interactive.primary,\n bgHover: colors.semantic.interactive.primaryHover,\n bgPressed: colors.semantic.interactive.primaryPressed,\n fg: colors.semantic.text.inverted,\n };\n case 'secondary':\n return {\n bg: colors.semantic.background.subtle,\n bgHover: colors.semantic.background.elevated,\n bgPressed: colors.semantic.background.subtle,\n fg: colors.semantic.text.default,\n borderColor: colors.semantic.border.default,\n };\n case 'tertiary':\n return {\n bg: 'transparent',\n bgHover: withAlpha(colors.semantic.interactive.primary, 0.08),\n bgPressed: withAlpha(colors.semantic.interactive.primary, 0.12),\n fg: colors.semantic.interactive.primary,\n borderColor: colors.semantic.interactive.primary,\n };\n case 'surface':\n return {\n bg: colors.semantic.background.elevated,\n bgHover: colors.semantic.background.subtle,\n bgPressed: colors.semantic.background.subtle,\n fg: colors.semantic.text.default,\n borderColor: colors.semantic.border.default,\n };\n }\n}\n\nfunction resolveShadowStyle(\n variant: FloatButtonVariant,\n colors: ReturnType<typeof useThemeColors>\n): { resting: ViewStyle; hover: ViewStyle; pressed: ViewStyle } {\n if (Platform.OS !== 'web') {\n // RN's elevation prop on Android maps via boxShadow polyfill; keep\n // it minimal to avoid the chunky M3 look. On iOS we rely on RN's\n // native shadow* props.\n return {\n resting: {\n shadowColor: variant === 'primary' ? colors.semantic.interactive.primary : '#000',\n shadowOffset: { width: 0, height: 6 },\n shadowOpacity: variant === 'primary' ? 0.25 : 0.12,\n shadowRadius: 16,\n elevation: 6,\n } as unknown as ViewStyle,\n hover: {} as ViewStyle,\n pressed: {\n shadowOffset: { width: 0, height: 2 },\n shadowRadius: 6,\n elevation: 2,\n } as unknown as ViewStyle,\n };\n }\n const tint = variant === 'primary' ? colors.semantic.interactive.primary : '#000';\n return {\n resting: {\n ...({\n boxShadow: `0 1px 2px rgba(0,0,0,0.06), 0 8px 24px -6px ${withAlpha(tint, variant === 'primary' ? 0.32 : 0.08)}`,\n } as unknown as ViewStyle),\n },\n hover: {\n ...({\n boxShadow: `0 2px 4px rgba(0,0,0,0.08), 0 12px 28px -6px ${withAlpha(tint, variant === 'primary' ? 0.4 : 0.12)}`,\n } as unknown as ViewStyle),\n },\n pressed: {\n ...({ boxShadow: `0 1px 2px rgba(0,0,0,0.06)` } as unknown as ViewStyle),\n },\n };\n}\n\nfunction resolvePositionStyle({\n placement,\n positioning = 'fixed',\n offset,\n dir,\n insets,\n viewportWidth,\n respectSafeArea,\n}: {\n placement: FloatButtonPlacement;\n positioning?: 'fixed' | 'absolute';\n offset: { x?: number; y?: number };\n dir: 'ltr' | 'rtl';\n insets: { top: number; right: number; bottom: number; left: number };\n viewportWidth: number;\n respectSafeArea: boolean;\n}): ViewStyle {\n const defaultOffset = Platform.OS === 'web' ? DEFAULT_OFFSET_WEB : DEFAULT_OFFSET_NATIVE;\n const x = offset.x ?? defaultOffset;\n const y = offset.y ?? defaultOffset;\n const safeBottom = Platform.OS !== 'web' && respectSafeArea ? insets.bottom : 0;\n const safeTop = Platform.OS !== 'web' && respectSafeArea ? insets.top : 0;\n\n // RTL flips left/right placements.\n const flippedPlacement: FloatButtonPlacement =\n dir === 'rtl'\n ? placement === 'bottom-right'\n ? 'bottom-left'\n : placement === 'bottom-left'\n ? 'bottom-right'\n : placement === 'top-right'\n ? 'top-left'\n : 'top-right'\n : placement;\n\n // RN doesn't have `position: 'fixed'` — only `'absolute'`. On web RN-Web\n // accepts the cast. The `positioning` prop also lets consumers force\n // `'absolute'` so the FAB pins to a positioned ancestor (docs previews).\n const cssPosition: ViewStyle['position'] =\n Platform.OS === 'web' && positioning === 'fixed' ? ('fixed' as unknown as 'absolute') : 'absolute';\n const base: ViewStyle = {\n position: cssPosition,\n zIndex: 50,\n };\n\n switch (flippedPlacement) {\n case 'bottom-right':\n return { ...base, bottom: y + safeBottom, right: x };\n case 'bottom-left':\n return { ...base, bottom: y + safeBottom, left: x };\n case 'top-right':\n return { ...base, top: y + safeTop, right: x };\n case 'top-left':\n return { ...base, top: y + safeTop, left: x };\n }\n // Suppress viewportWidth warning — reserved for future RTL/horizontal logic.\n void viewportWidth;\n return base;\n}\n\n/**\n * Force the icon's color to match the FAB's variant fg. Works for our\n * `IconComponentProps`-shaped icons (which accept `{ size, color }`) by\n * cloning the element with the resolved color; raw nodes pass through\n * unchanged and rely on the wrapper's CSS `color` for `currentColor`-based\n * SVGs. Consumer-supplied colors are intentionally overridden — inside a\n * primary FAB the icon should always read against the primary surface.\n */\nfunction tintIcon(icon: ReactNode, color: string): ReactNode {\n if (!isValidElement(icon)) {\n return icon;\n }\n return cloneElement(icon as ReactElement<{ color?: string }>, { color });\n}\n\nfunction withAlpha(color: string, alpha: number): string {\n if (color.startsWith('#') && (color.length === 7 || color.length === 4)) {\n const expanded =\n color.length === 4 ? `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}` : color;\n const r = Number.parseInt(expanded.slice(1, 3), 16);\n const g = Number.parseInt(expanded.slice(3, 5), 16);\n const b = Number.parseInt(expanded.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n return color;\n}\n\n// Suppress unused — ComponentProps reserved for future href-prop polymorphism.\ntype _Unused = ComponentProps<'button'>;\n"]}
@@ -1,6 +1,6 @@
1
1
  import { Slot } from './chunk-ZIBNLXIV.js';
2
2
  import { px } from './chunk-5A2QOOVN.js';
3
- import { useThemeColors } from './chunk-R5JMDDCB.js';
3
+ import { useThemeColors } from './chunk-3W2O4OBL.js';
4
4
  import { cn } from './chunk-CHXHRJNZ.js';
5
5
  import { __name } from './chunk-WCQVDF3K.js';
6
6
  import { createContext, useState, useCallback, useId, useRef, isValidElement, useEffect, useContext } from 'react';
@@ -439,5 +439,5 @@ function translateOffscreen(side) {
439
439
  __name(translateOffscreen, "translateOffscreen");
440
440
 
441
441
  export { Drawer, Sheet, SheetBody, SheetClose, SheetDescription, SheetFooter, SheetHeader, SheetPanel, SheetTitle, SheetTrigger };
442
- //# sourceMappingURL=chunk-SF6WPUC5.js.map
443
- //# sourceMappingURL=chunk-SF6WPUC5.js.map
442
+ //# sourceMappingURL=chunk-QZ6T4R44.js.map
443
+ //# sourceMappingURL=chunk-QZ6T4R44.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Sheet/Sheet.shared.tsx","../src/components/Sheet/Sheet.tsx"],"names":["RNText","useRef","useState","useCallback","jsx","Pressable"],"mappings":"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","file":"chunk-SF6WPUC5.js","sourcesContent":["'use client';\n\n/**\n * Shared Sheet internals — context, types, root, trigger, and structural\n * subcomponents (Header, Title, Description, Body, Footer, Close).\n *\n * Imported by both `Sheet.tsx` (native) and `Sheet.web.tsx` (web) to avoid\n * duplication. The panel surface (`SheetPanel`) is platform-specific and\n * lives in each of those files.\n */\n\nimport {\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type SheetSide = 'top' | 'right' | 'bottom' | 'left';\n\nexport type SheetSize = 'sm' | 'md' | 'lg' | 'full' | number;\n\nexport type SheetProps = {\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires with the new open state. */\n onOpenChange?: (open: boolean) => void;\n /**\n * Edge the sheet slides in from.\n * @defaultValue 'bottom'\n */\n side?: SheetSide;\n /**\n * Panel size: preset key or an explicit pixel value.\n * - 'sm' → 25% of viewport height/width\n * - 'md' → 50%\n * - 'lg' → 75%\n * - 'full' → 100%\n * - number → explicit px value\n * @defaultValue 'md'\n */\n size?: SheetSize;\n /**\n * Whether tapping the backdrop closes the sheet.\n * @defaultValue true\n */\n dismissible?: boolean;\n children?: ReactNode;\n};\n\nexport type SheetContextValue = {\n open: boolean;\n setOpen: (next: boolean) => void;\n titleId: string;\n descriptionId: string;\n triggerRef: { current: HTMLElement | null };\n side: SheetSide;\n size: SheetSize;\n dismissible: boolean;\n};\n\n// ─── Size helpers ─────────────────────────────────────────────────────────────\n\nexport const SIZE_PERCENT: Record<Exclude<SheetSize, number>, string> = {\n sm: '25%',\n md: '50%',\n lg: '75%',\n full: '100%',\n};\n\nexport function resolveSizeValue(size: SheetSize): string | number {\n if (typeof size === 'number') {\n return size;\n }\n return SIZE_PERCENT[size];\n}\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\nexport const SheetContext = createContext<SheetContextValue | null>(null);\n\nexport const useSheetContext = (label: string): SheetContextValue => {\n const ctx = useContext(SheetContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Sheet>.`);\n }\n return ctx;\n};\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nexport const SheetRoot = ({\n open,\n defaultOpen = false,\n onOpenChange,\n side = 'bottom',\n size = 'md',\n dismissible = true,\n children,\n}: SheetProps) => {\n const [inner, setInner] = useState<boolean>(defaultOpen);\n const isControlled = open !== undefined;\n const current = isControlled ? open : inner;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setInner(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const baseId = useId();\n const triggerRef = useRef<HTMLElement | null>(null);\n\n const ctxValue: SheetContextValue = {\n open: current,\n setOpen,\n titleId: `${baseId}-title`,\n descriptionId: `${baseId}-description`,\n triggerRef,\n side,\n size,\n dismissible,\n };\n\n return <SheetContext.Provider value={ctxValue}>{children}</SheetContext.Provider>;\n};\n\n// ─── Trigger ──────────────────────────────────────────────────────────────────\n\nexport type SheetTriggerProps = {\n /** Render the child as the trigger (Slot pattern). @defaultValue true */\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const SheetTrigger = ({ asChild = true, children, className, testID }: SheetTriggerProps) => {\n const ctx = useSheetContext('SheetTrigger');\n const onPress = useCallback(() => ctx.setOpen(true), [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n const fire = (existing: ((e: unknown) => void) | undefined) => (event: unknown) => {\n existing?.(event);\n ctx.setOpen(true);\n };\n return (\n <Slot\n ref={(node: HTMLElement | null) => {\n ctx.triggerRef.current = node;\n }}\n onClick={fire(child.props.onClick as ((e: unknown) => void) | undefined)}\n onPress={fire(child.props.onPress as ((e: unknown) => void) | undefined)}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {child}\n </Slot>\n );\n }\n\n return (\n <Pressable\n ref={(node) => {\n ctx.triggerRef.current = node as unknown as HTMLElement | null;\n }}\n onPress={onPress}\n {...(testID !== undefined ? { testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {wrapStringChildren(children)}\n </Pressable>\n );\n};\n\n// ─── Header ───────────────────────────────────────────────────────────────────\n\nexport type SheetHeaderProps = { children?: ReactNode; className?: string };\n\nexport const SheetHeader = ({ children, className }: SheetHeaderProps) => {\n const colors = useThemeColors();\n return (\n <View\n className={cn('flex-col gap-1', className)}\n style={{\n flexDirection: 'column',\n gap: px(colors.spacing['1']),\n paddingHorizontal: px(colors.spacing['6']),\n paddingTop: px(colors.spacing['6']),\n paddingBottom: px(colors.spacing['2']),\n }}\n >\n {children}\n </View>\n );\n};\n\n// ─── Title ────────────────────────────────────────────────────────────────────\n\nexport type SheetTitleProps = { children?: ReactNode; className?: string };\n\nexport const SheetTitle = ({ children, className }: SheetTitleProps) => {\n const ctx = useSheetContext('SheetTitle');\n const colors = useThemeColors();\n return (\n <RNText\n nativeID={ctx.titleId}\n id={ctx.titleId}\n role=\"heading\"\n aria-level={2}\n className={cn('text-lg font-semibold text-semantic-text-default', className)}\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.display,\n fontSize: px(colors.fontSize.lg),\n fontWeight: colors.fontWeight.semibold as '600',\n }}\n >\n {children}\n </RNText>\n );\n};\n\n// ─── Description ─────────────────────────────────────────────────────────────\n\nexport type SheetDescriptionProps = { children?: ReactNode; className?: string };\n\nexport const SheetDescription = ({ children, className }: SheetDescriptionProps) => {\n const ctx = useSheetContext('SheetDescription');\n const colors = useThemeColors();\n return (\n <RNText\n nativeID={ctx.descriptionId}\n id={ctx.descriptionId}\n className={cn('text-sm text-semantic-text-muted', className)}\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n lineHeight: px(colors.fontSize.sm) * Number(colors.lineHeight.normal),\n }}\n >\n {children}\n </RNText>\n );\n};\n\n// ─── Body ─────────────────────────────────────────────────────────────────────\n\nexport type SheetBodyProps = { children?: ReactNode; className?: string };\n\nexport const SheetBody = ({ children, className }: SheetBodyProps) => {\n const colors = useThemeColors();\n return (\n <View\n className={cn('flex-1', className)}\n style={{\n flex: 1,\n paddingHorizontal: px(colors.spacing['6']),\n paddingVertical: px(colors.spacing['4']),\n }}\n >\n {children}\n </View>\n );\n};\n\n// ─── Footer ───────────────────────────────────────────────────────────────────\n\nexport type SheetFooterProps = { children?: ReactNode; className?: string };\n\nexport const SheetFooter = ({ children, className }: SheetFooterProps) => {\n const colors = useThemeColors();\n return (\n <View\n className={cn('flex-row items-center justify-end gap-2', className)}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: px(colors.spacing['2']),\n paddingHorizontal: px(colors.spacing['6']),\n paddingBottom: px(colors.spacing['6']),\n paddingTop: px(colors.spacing['2']),\n }}\n >\n {children}\n </View>\n );\n};\n\n// ─── Close ────────────────────────────────────────────────────────────────────\n\nexport type SheetCloseProps = {\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n accessibilityLabel?: string;\n};\n\nexport const SheetClose = ({\n asChild = true,\n children,\n className,\n testID,\n accessibilityLabel = 'Close',\n}: SheetCloseProps) => {\n const ctx = useSheetContext('SheetClose');\n const onPress = useCallback(() => ctx.setOpen(false), [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n const fire = (existing: ((e: unknown) => void) | undefined) => (event: unknown) => {\n existing?.(event);\n ctx.setOpen(false);\n };\n return (\n <Slot\n onClick={fire(child.props.onClick as ((e: unknown) => void) | undefined)}\n onPress={fire(child.props.onPress as ((e: unknown) => void) | undefined)}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {child}\n </Slot>\n );\n }\n\n return (\n <Pressable\n onPress={onPress}\n role=\"button\"\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n aria-label={accessibilityLabel}\n {...(testID !== undefined ? { testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {wrapStringChildren(children)}\n </Pressable>\n );\n};\n\n// ─── Utilities ────────────────────────────────────────────────────────────────\n\nexport function wrapStringChildren(children: ReactNode): ReactNode {\n if (typeof children === 'string' || typeof children === 'number') {\n return <RNText>{children}</RNText>;\n }\n return children;\n}\n\nexport type SheetPanelProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n","'use client';\n\n/**\n * Sheet — default (native) implementation.\n *\n * Metro resolves `.native.tsx` over `.tsx` so on native builds, `Sheet.native.tsx`\n * wins. On web, `Sheet.web.tsx` wins. This file serves as the fallback for\n * environments that don't apply platform extensions (plain Node / jest node project).\n *\n * Shared context, types, and structural subcomponents live in `Sheet.shared.tsx`.\n * The `SheetPanel` here uses RN Modal with Platform.OS guards for web CSS\n * transitions and native slide animation.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Modal, Platform, Pressable } from 'react-native';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport {\n SheetBody,\n SheetClose,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n type SheetPanelProps,\n SheetRoot,\n type SheetSide,\n SheetTitle,\n SheetTrigger,\n SIZE_PERCENT,\n useSheetContext,\n} from './Sheet.shared';\n\nexport {\n SheetBody,\n SheetClose,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n type SheetPanelProps,\n type SheetProps,\n type SheetSide,\n type SheetSize,\n SheetTitle,\n SheetTrigger,\n} from './Sheet.shared';\n\n// ─── Panel ────────────────────────────────────────────────────────────────────\n\nconst SCRIM_COLOR = 'rgba(0, 0, 0, 0.40)';\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport const SheetPanel = ({ children, className, testID }: SheetPanelProps) => {\n const ctx = useSheetContext('SheetPanel');\n const colors = useThemeColors();\n const panelRef = useRef<HTMLDivElement | null>(null);\n const overlayDomRef = useRef<HTMLElement | null>(null);\n\n const [entered, setEntered] = useState(false);\n\n useEffect(() => {\n if (Platform.OS !== 'web') {\n setEntered(true);\n return;\n }\n if (!ctx.open) {\n setEntered(false);\n return;\n }\n const id = requestAnimationFrame(() => setEntered(true));\n return () => cancelAnimationFrame(id);\n }, [ctx.open]);\n\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n const node = overlayDomRef.current;\n if (!node) {\n return;\n }\n node.style.transitionProperty = 'background-color';\n node.style.transitionDuration = '200ms';\n node.style.transitionTimingFunction = 'ease-out';\n node.style.backgroundColor = entered ? SCRIM_COLOR : 'rgba(0,0,0,0)';\n }, [entered]);\n\n useEffect(() => {\n if (!ctx.open || Platform.OS !== 'web' || typeof document === 'undefined') {\n return;\n }\n const previouslyFocused = document.activeElement as HTMLElement | null;\n const prevBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n const focusFirst = () => {\n const node = panelRef.current;\n if (!node) {\n return;\n }\n const focusable = node.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR);\n const first = focusable[0];\n if (first) {\n first.focus();\n } else {\n node.setAttribute('tabindex', '-1');\n node.focus();\n }\n };\n focusFirst();\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n ctx.setOpen(false);\n return;\n }\n if (event.key !== 'Tab') {\n return;\n }\n const node = panelRef.current;\n if (!node) {\n return;\n }\n const focusable = Array.from(node.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (el) => el.offsetParent !== null || el === document.activeElement\n );\n if (focusable.length === 0) {\n event.preventDefault();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n if (!first || !last) {\n return;\n }\n if (event.shiftKey) {\n if (document.activeElement === first || !node.contains(document.activeElement)) {\n event.preventDefault();\n last.focus();\n }\n } else if (document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n document.body.style.overflow = prevBodyOverflow;\n const restoreTo = ctx.triggerRef.current ?? previouslyFocused;\n restoreTo?.focus?.();\n };\n }, [ctx.open, ctx.setOpen, ctx.triggerRef]);\n\n const onBackdropPress = useCallback(() => {\n if (ctx.dismissible) {\n ctx.setOpen(false);\n }\n }, [ctx]);\n\n const isHorizontal = ctx.side === 'left' || ctx.side === 'right';\n const dim = typeof ctx.size === 'number' ? ctx.size : SIZE_PERCENT[ctx.size];\n\n const panelStyle: ViewStyle = {\n position: 'absolute',\n backgroundColor: colors.semantic.background.elevated,\n ...(isHorizontal ? { top: 0, bottom: 0 } : { left: 0, right: 0 }),\n ...(ctx.side === 'bottom' && { bottom: 0 }),\n ...(ctx.side === 'top' && { top: 0 }),\n ...(ctx.side === 'left' && { left: 0 }),\n ...(ctx.side === 'right' && { right: 0 }),\n };\n\n const translateStyle: ViewStyle =\n Platform.OS === 'web'\n ? ({\n transform: entered ? 'translateX(0) translateY(0)' : translateOffscreen(ctx.side),\n transitionProperty: 'transform',\n transitionDuration: '280ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n } as unknown as ViewStyle)\n : {};\n\n const overlayStyle: ViewStyle = {\n position: Platform.OS === 'web' ? ('fixed' as unknown as 'absolute') : 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n ...(Platform.OS === 'web' ? ({ zIndex: 50 } as ViewStyle) : { backgroundColor: SCRIM_COLOR }),\n };\n\n const sizeStyle = isHorizontal\n ? { width: dim, height: '100%' as unknown as number }\n : { height: dim, width: '100%' as unknown as number };\n\n return (\n <Modal\n visible={ctx.open}\n transparent\n animationType={\n Platform.OS === 'web' ? 'none' : ctx.side === 'bottom' || ctx.side === 'top' ? 'slide' : 'fade'\n }\n onRequestClose={() => ctx.setOpen(false)}\n >\n <Pressable\n accessibilityRole=\"none\"\n aria-hidden={true}\n ref={(node) => {\n overlayDomRef.current = node as unknown as HTMLElement | null;\n }}\n style={overlayStyle}\n onPress={onBackdropPress}\n >\n <Pressable\n onPress={(event) => event.stopPropagation?.()}\n ref={(node) => {\n panelRef.current = node as unknown as HTMLDivElement | null;\n }}\n role=\"dialog\"\n accessibilityRole=\"none\"\n aria-modal={true}\n aria-labelledby={ctx.titleId}\n aria-describedby={ctx.descriptionId}\n data-side={ctx.side}\n {...(testID !== undefined ? { testID } : {})}\n className={cn('bg-semantic-background-elevated', className)}\n style={[\n panelStyle,\n sizeStyle as ViewStyle,\n translateStyle,\n {\n shadowColor: '#000',\n shadowOffset: { width: 0, height: -2 },\n shadowOpacity: 0.15,\n shadowRadius: 20,\n elevation: 24,\n ...(ctx.side === 'bottom' ? { borderTopLeftRadius: 16, borderTopRightRadius: 16 } : {}),\n ...(ctx.side === 'top' ? { borderBottomLeftRadius: 16, borderBottomRightRadius: 16 } : {}),\n },\n ]}\n >\n {children}\n </Pressable>\n </Pressable>\n </Modal>\n );\n};\n\n// ─── Compound export ──────────────────────────────────────────────────────────\n\nexport const Sheet = Object.assign(SheetRoot, {\n Trigger: SheetTrigger,\n Panel: SheetPanel,\n Header: SheetHeader,\n Title: SheetTitle,\n Description: SheetDescription,\n Body: SheetBody,\n Footer: SheetFooter,\n Close: SheetClose,\n});\n\nexport const Drawer = Sheet;\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction translateOffscreen(side: SheetSide): string {\n switch (side) {\n case 'bottom':\n return 'translateY(100%)';\n case 'top':\n return 'translateY(-100%)';\n case 'left':\n return 'translateX(-100%)';\n case 'right':\n return 'translateX(100%)';\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Sheet/Sheet.shared.tsx","../src/components/Sheet/Sheet.tsx"],"names":["RNText","useRef","useState","useCallback","jsx","Pressable"],"mappings":"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","file":"chunk-QZ6T4R44.js","sourcesContent":["'use client';\n\n/**\n * Shared Sheet internals — context, types, root, trigger, and structural\n * subcomponents (Header, Title, Description, Body, Footer, Close).\n *\n * Imported by both `Sheet.tsx` (native) and `Sheet.web.tsx` (web) to avoid\n * duplication. The panel surface (`SheetPanel`) is platform-specific and\n * lives in each of those files.\n */\n\nimport {\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type SheetSide = 'top' | 'right' | 'bottom' | 'left';\n\nexport type SheetSize = 'sm' | 'md' | 'lg' | 'full' | number;\n\nexport type SheetProps = {\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires with the new open state. */\n onOpenChange?: (open: boolean) => void;\n /**\n * Edge the sheet slides in from.\n * @defaultValue 'bottom'\n */\n side?: SheetSide;\n /**\n * Panel size: preset key or an explicit pixel value.\n * - 'sm' → 25% of viewport height/width\n * - 'md' → 50%\n * - 'lg' → 75%\n * - 'full' → 100%\n * - number → explicit px value\n * @defaultValue 'md'\n */\n size?: SheetSize;\n /**\n * Whether tapping the backdrop closes the sheet.\n * @defaultValue true\n */\n dismissible?: boolean;\n children?: ReactNode;\n};\n\nexport type SheetContextValue = {\n open: boolean;\n setOpen: (next: boolean) => void;\n titleId: string;\n descriptionId: string;\n triggerRef: { current: HTMLElement | null };\n side: SheetSide;\n size: SheetSize;\n dismissible: boolean;\n};\n\n// ─── Size helpers ─────────────────────────────────────────────────────────────\n\nexport const SIZE_PERCENT: Record<Exclude<SheetSize, number>, string> = {\n sm: '25%',\n md: '50%',\n lg: '75%',\n full: '100%',\n};\n\nexport function resolveSizeValue(size: SheetSize): string | number {\n if (typeof size === 'number') {\n return size;\n }\n return SIZE_PERCENT[size];\n}\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\nexport const SheetContext = createContext<SheetContextValue | null>(null);\n\nexport const useSheetContext = (label: string): SheetContextValue => {\n const ctx = useContext(SheetContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Sheet>.`);\n }\n return ctx;\n};\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nexport const SheetRoot = ({\n open,\n defaultOpen = false,\n onOpenChange,\n side = 'bottom',\n size = 'md',\n dismissible = true,\n children,\n}: SheetProps) => {\n const [inner, setInner] = useState<boolean>(defaultOpen);\n const isControlled = open !== undefined;\n const current = isControlled ? open : inner;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setInner(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n const baseId = useId();\n const triggerRef = useRef<HTMLElement | null>(null);\n\n const ctxValue: SheetContextValue = {\n open: current,\n setOpen,\n titleId: `${baseId}-title`,\n descriptionId: `${baseId}-description`,\n triggerRef,\n side,\n size,\n dismissible,\n };\n\n return <SheetContext.Provider value={ctxValue}>{children}</SheetContext.Provider>;\n};\n\n// ─── Trigger ──────────────────────────────────────────────────────────────────\n\nexport type SheetTriggerProps = {\n /** Render the child as the trigger (Slot pattern). @defaultValue true */\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const SheetTrigger = ({ asChild = true, children, className, testID }: SheetTriggerProps) => {\n const ctx = useSheetContext('SheetTrigger');\n const onPress = useCallback(() => ctx.setOpen(true), [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n const fire = (existing: ((e: unknown) => void) | undefined) => (event: unknown) => {\n existing?.(event);\n ctx.setOpen(true);\n };\n return (\n <Slot\n ref={(node: HTMLElement | null) => {\n ctx.triggerRef.current = node;\n }}\n onClick={fire(child.props.onClick as ((e: unknown) => void) | undefined)}\n onPress={fire(child.props.onPress as ((e: unknown) => void) | undefined)}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {child}\n </Slot>\n );\n }\n\n return (\n <Pressable\n ref={(node) => {\n ctx.triggerRef.current = node as unknown as HTMLElement | null;\n }}\n onPress={onPress}\n {...(testID !== undefined ? { testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {wrapStringChildren(children)}\n </Pressable>\n );\n};\n\n// ─── Header ───────────────────────────────────────────────────────────────────\n\nexport type SheetHeaderProps = { children?: ReactNode; className?: string };\n\nexport const SheetHeader = ({ children, className }: SheetHeaderProps) => {\n const colors = useThemeColors();\n return (\n <View\n className={cn('flex-col gap-1', className)}\n style={{\n flexDirection: 'column',\n gap: px(colors.spacing['1']),\n paddingHorizontal: px(colors.spacing['6']),\n paddingTop: px(colors.spacing['6']),\n paddingBottom: px(colors.spacing['2']),\n }}\n >\n {children}\n </View>\n );\n};\n\n// ─── Title ────────────────────────────────────────────────────────────────────\n\nexport type SheetTitleProps = { children?: ReactNode; className?: string };\n\nexport const SheetTitle = ({ children, className }: SheetTitleProps) => {\n const ctx = useSheetContext('SheetTitle');\n const colors = useThemeColors();\n return (\n <RNText\n nativeID={ctx.titleId}\n id={ctx.titleId}\n role=\"heading\"\n aria-level={2}\n className={cn('text-lg font-semibold text-semantic-text-default', className)}\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.display,\n fontSize: px(colors.fontSize.lg),\n fontWeight: colors.fontWeight.semibold as '600',\n }}\n >\n {children}\n </RNText>\n );\n};\n\n// ─── Description ─────────────────────────────────────────────────────────────\n\nexport type SheetDescriptionProps = { children?: ReactNode; className?: string };\n\nexport const SheetDescription = ({ children, className }: SheetDescriptionProps) => {\n const ctx = useSheetContext('SheetDescription');\n const colors = useThemeColors();\n return (\n <RNText\n nativeID={ctx.descriptionId}\n id={ctx.descriptionId}\n className={cn('text-sm text-semantic-text-muted', className)}\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n lineHeight: px(colors.fontSize.sm) * Number(colors.lineHeight.normal),\n }}\n >\n {children}\n </RNText>\n );\n};\n\n// ─── Body ─────────────────────────────────────────────────────────────────────\n\nexport type SheetBodyProps = { children?: ReactNode; className?: string };\n\nexport const SheetBody = ({ children, className }: SheetBodyProps) => {\n const colors = useThemeColors();\n return (\n <View\n className={cn('flex-1', className)}\n style={{\n flex: 1,\n paddingHorizontal: px(colors.spacing['6']),\n paddingVertical: px(colors.spacing['4']),\n }}\n >\n {children}\n </View>\n );\n};\n\n// ─── Footer ───────────────────────────────────────────────────────────────────\n\nexport type SheetFooterProps = { children?: ReactNode; className?: string };\n\nexport const SheetFooter = ({ children, className }: SheetFooterProps) => {\n const colors = useThemeColors();\n return (\n <View\n className={cn('flex-row items-center justify-end gap-2', className)}\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: px(colors.spacing['2']),\n paddingHorizontal: px(colors.spacing['6']),\n paddingBottom: px(colors.spacing['6']),\n paddingTop: px(colors.spacing['2']),\n }}\n >\n {children}\n </View>\n );\n};\n\n// ─── Close ────────────────────────────────────────────────────────────────────\n\nexport type SheetCloseProps = {\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n accessibilityLabel?: string;\n};\n\nexport const SheetClose = ({\n asChild = true,\n children,\n className,\n testID,\n accessibilityLabel = 'Close',\n}: SheetCloseProps) => {\n const ctx = useSheetContext('SheetClose');\n const onPress = useCallback(() => ctx.setOpen(false), [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n const fire = (existing: ((e: unknown) => void) | undefined) => (event: unknown) => {\n existing?.(event);\n ctx.setOpen(false);\n };\n return (\n <Slot\n onClick={fire(child.props.onClick as ((e: unknown) => void) | undefined)}\n onPress={fire(child.props.onPress as ((e: unknown) => void) | undefined)}\n {...(testID !== undefined ? { 'data-testid': testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {child}\n </Slot>\n );\n }\n\n return (\n <Pressable\n onPress={onPress}\n role=\"button\"\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n aria-label={accessibilityLabel}\n {...(testID !== undefined ? { testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {wrapStringChildren(children)}\n </Pressable>\n );\n};\n\n// ─── Utilities ────────────────────────────────────────────────────────────────\n\nexport function wrapStringChildren(children: ReactNode): ReactNode {\n if (typeof children === 'string' || typeof children === 'number') {\n return <RNText>{children}</RNText>;\n }\n return children;\n}\n\nexport type SheetPanelProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n","'use client';\n\n/**\n * Sheet — default (native) implementation.\n *\n * Metro resolves `.native.tsx` over `.tsx` so on native builds, `Sheet.native.tsx`\n * wins. On web, `Sheet.web.tsx` wins. This file serves as the fallback for\n * environments that don't apply platform extensions (plain Node / jest node project).\n *\n * Shared context, types, and structural subcomponents live in `Sheet.shared.tsx`.\n * The `SheetPanel` here uses RN Modal with Platform.OS guards for web CSS\n * transitions and native slide animation.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Modal, Platform, Pressable } from 'react-native';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport {\n SheetBody,\n SheetClose,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n type SheetPanelProps,\n SheetRoot,\n type SheetSide,\n SheetTitle,\n SheetTrigger,\n SIZE_PERCENT,\n useSheetContext,\n} from './Sheet.shared';\n\nexport {\n SheetBody,\n SheetClose,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n type SheetPanelProps,\n type SheetProps,\n type SheetSide,\n type SheetSize,\n SheetTitle,\n SheetTrigger,\n} from './Sheet.shared';\n\n// ─── Panel ────────────────────────────────────────────────────────────────────\n\nconst SCRIM_COLOR = 'rgba(0, 0, 0, 0.40)';\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport const SheetPanel = ({ children, className, testID }: SheetPanelProps) => {\n const ctx = useSheetContext('SheetPanel');\n const colors = useThemeColors();\n const panelRef = useRef<HTMLDivElement | null>(null);\n const overlayDomRef = useRef<HTMLElement | null>(null);\n\n const [entered, setEntered] = useState(false);\n\n useEffect(() => {\n if (Platform.OS !== 'web') {\n setEntered(true);\n return;\n }\n if (!ctx.open) {\n setEntered(false);\n return;\n }\n const id = requestAnimationFrame(() => setEntered(true));\n return () => cancelAnimationFrame(id);\n }, [ctx.open]);\n\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n const node = overlayDomRef.current;\n if (!node) {\n return;\n }\n node.style.transitionProperty = 'background-color';\n node.style.transitionDuration = '200ms';\n node.style.transitionTimingFunction = 'ease-out';\n node.style.backgroundColor = entered ? SCRIM_COLOR : 'rgba(0,0,0,0)';\n }, [entered]);\n\n useEffect(() => {\n if (!ctx.open || Platform.OS !== 'web' || typeof document === 'undefined') {\n return;\n }\n const previouslyFocused = document.activeElement as HTMLElement | null;\n const prevBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n const focusFirst = () => {\n const node = panelRef.current;\n if (!node) {\n return;\n }\n const focusable = node.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR);\n const first = focusable[0];\n if (first) {\n first.focus();\n } else {\n node.setAttribute('tabindex', '-1');\n node.focus();\n }\n };\n focusFirst();\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n ctx.setOpen(false);\n return;\n }\n if (event.key !== 'Tab') {\n return;\n }\n const node = panelRef.current;\n if (!node) {\n return;\n }\n const focusable = Array.from(node.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (el) => el.offsetParent !== null || el === document.activeElement\n );\n if (focusable.length === 0) {\n event.preventDefault();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n if (!first || !last) {\n return;\n }\n if (event.shiftKey) {\n if (document.activeElement === first || !node.contains(document.activeElement)) {\n event.preventDefault();\n last.focus();\n }\n } else if (document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n document.body.style.overflow = prevBodyOverflow;\n const restoreTo = ctx.triggerRef.current ?? previouslyFocused;\n restoreTo?.focus?.();\n };\n }, [ctx.open, ctx.setOpen, ctx.triggerRef]);\n\n const onBackdropPress = useCallback(() => {\n if (ctx.dismissible) {\n ctx.setOpen(false);\n }\n }, [ctx]);\n\n const isHorizontal = ctx.side === 'left' || ctx.side === 'right';\n const dim = typeof ctx.size === 'number' ? ctx.size : SIZE_PERCENT[ctx.size];\n\n const panelStyle: ViewStyle = {\n position: 'absolute',\n backgroundColor: colors.semantic.background.elevated,\n ...(isHorizontal ? { top: 0, bottom: 0 } : { left: 0, right: 0 }),\n ...(ctx.side === 'bottom' && { bottom: 0 }),\n ...(ctx.side === 'top' && { top: 0 }),\n ...(ctx.side === 'left' && { left: 0 }),\n ...(ctx.side === 'right' && { right: 0 }),\n };\n\n const translateStyle: ViewStyle =\n Platform.OS === 'web'\n ? ({\n transform: entered ? 'translateX(0) translateY(0)' : translateOffscreen(ctx.side),\n transitionProperty: 'transform',\n transitionDuration: '280ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n } as unknown as ViewStyle)\n : {};\n\n const overlayStyle: ViewStyle = {\n position: Platform.OS === 'web' ? ('fixed' as unknown as 'absolute') : 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n ...(Platform.OS === 'web' ? ({ zIndex: 50 } as ViewStyle) : { backgroundColor: SCRIM_COLOR }),\n };\n\n const sizeStyle = isHorizontal\n ? { width: dim, height: '100%' as unknown as number }\n : { height: dim, width: '100%' as unknown as number };\n\n return (\n <Modal\n visible={ctx.open}\n transparent\n animationType={\n Platform.OS === 'web' ? 'none' : ctx.side === 'bottom' || ctx.side === 'top' ? 'slide' : 'fade'\n }\n onRequestClose={() => ctx.setOpen(false)}\n >\n <Pressable\n accessibilityRole=\"none\"\n aria-hidden={true}\n ref={(node) => {\n overlayDomRef.current = node as unknown as HTMLElement | null;\n }}\n style={overlayStyle}\n onPress={onBackdropPress}\n >\n <Pressable\n onPress={(event) => event.stopPropagation?.()}\n ref={(node) => {\n panelRef.current = node as unknown as HTMLDivElement | null;\n }}\n role=\"dialog\"\n accessibilityRole=\"none\"\n aria-modal={true}\n aria-labelledby={ctx.titleId}\n aria-describedby={ctx.descriptionId}\n data-side={ctx.side}\n {...(testID !== undefined ? { testID } : {})}\n className={cn('bg-semantic-background-elevated', className)}\n style={[\n panelStyle,\n sizeStyle as ViewStyle,\n translateStyle,\n {\n shadowColor: '#000',\n shadowOffset: { width: 0, height: -2 },\n shadowOpacity: 0.15,\n shadowRadius: 20,\n elevation: 24,\n ...(ctx.side === 'bottom' ? { borderTopLeftRadius: 16, borderTopRightRadius: 16 } : {}),\n ...(ctx.side === 'top' ? { borderBottomLeftRadius: 16, borderBottomRightRadius: 16 } : {}),\n },\n ]}\n >\n {children}\n </Pressable>\n </Pressable>\n </Modal>\n );\n};\n\n// ─── Compound export ──────────────────────────────────────────────────────────\n\nexport const Sheet = Object.assign(SheetRoot, {\n Trigger: SheetTrigger,\n Panel: SheetPanel,\n Header: SheetHeader,\n Title: SheetTitle,\n Description: SheetDescription,\n Body: SheetBody,\n Footer: SheetFooter,\n Close: SheetClose,\n});\n\nexport const Drawer = Sheet;\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction translateOffscreen(side: SheetSide): string {\n switch (side) {\n case 'bottom':\n return 'translateY(100%)';\n case 'top':\n return 'translateY(-100%)';\n case 'left':\n return 'translateX(-100%)';\n case 'right':\n return 'translateX(100%)';\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { useThemeColors } from './chunk-R5JMDDCB.js';
1
+ import { useThemeColors } from './chunk-3W2O4OBL.js';
2
2
  import { cn } from './chunk-CHXHRJNZ.js';
3
3
  import { __name } from './chunk-WCQVDF3K.js';
4
4
  import { createContext, useRef, useCallback, useMemo, useContext, useState, useEffect } from 'react';
@@ -559,5 +559,5 @@ var Slider = /* @__PURE__ */ __name(({
559
559
  }, "Slider");
560
560
 
561
561
  export { Slider, SliderGestureProvider, useSliderInteractionActive };
562
- //# sourceMappingURL=chunk-7FSFJA33.js.map
563
- //# sourceMappingURL=chunk-7FSFJA33.js.map
562
+ //# sourceMappingURL=chunk-SNGWMCZH.js.map
563
+ //# sourceMappingURL=chunk-SNGWMCZH.js.map