@nori-ui/core 1.6.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-7UKRN73P.js → chunk-2XJCLPNH.js} +3 -3
- package/dist/{chunk-7UKRN73P.js.map → chunk-2XJCLPNH.js.map} +1 -1
- package/dist/{chunk-5PSC5HT4.js → chunk-3B345SQU.js} +5 -5
- package/dist/{chunk-5PSC5HT4.js.map → chunk-3B345SQU.js.map} +1 -1
- package/dist/{chunk-JSAG5YO7.js → chunk-3IIIHZHT.js} +3 -3
- package/dist/{chunk-JSAG5YO7.js.map → chunk-3IIIHZHT.js.map} +1 -1
- package/dist/{chunk-DDGMLLS3.js → chunk-3W3XYULK.js} +3 -3
- package/dist/{chunk-DDGMLLS3.js.map → chunk-3W3XYULK.js.map} +1 -1
- package/dist/{chunk-WYPGQVDV.js → chunk-5YHT252H.js} +3 -3
- package/dist/{chunk-WYPGQVDV.js.map → chunk-5YHT252H.js.map} +1 -1
- package/dist/{chunk-ZMSIYLSI.js → chunk-7FSFJA33.js} +3 -3
- package/dist/{chunk-ZMSIYLSI.js.map → chunk-7FSFJA33.js.map} +1 -1
- package/dist/chunk-BOMPFNM4.js +165 -0
- package/dist/chunk-BOMPFNM4.js.map +1 -0
- package/dist/chunk-BVLOX4A3.js +256 -0
- package/dist/chunk-BVLOX4A3.js.map +1 -0
- package/dist/{chunk-YZ27OS2R.js → chunk-C32XGHWO.js} +3 -3
- package/dist/{chunk-YZ27OS2R.js.map → chunk-C32XGHWO.js.map} +1 -1
- package/dist/{chunk-UJWCEGQY.js → chunk-C5HQPXRI.js} +3 -3
- package/dist/{chunk-UJWCEGQY.js.map → chunk-C5HQPXRI.js.map} +1 -1
- package/dist/{chunk-XALU6LOT.js → chunk-EN4CLDGZ.js} +3 -3
- package/dist/{chunk-XALU6LOT.js.map → chunk-EN4CLDGZ.js.map} +1 -1
- package/dist/{chunk-6AD6KCVB.js → chunk-F5UKI7XD.js} +3 -3
- package/dist/{chunk-6AD6KCVB.js.map → chunk-F5UKI7XD.js.map} +1 -1
- package/dist/chunk-GTAXVTLF.js +43 -0
- package/dist/chunk-GTAXVTLF.js.map +1 -0
- package/dist/{chunk-NNFJKRXZ.js → chunk-H2LHWJ52.js} +3 -3
- package/dist/{chunk-NNFJKRXZ.js.map → chunk-H2LHWJ52.js.map} +1 -1
- package/dist/{chunk-PZS4A4VQ.js → chunk-HXCETKCC.js} +3 -3
- package/dist/{chunk-PZS4A4VQ.js.map → chunk-HXCETKCC.js.map} +1 -1
- package/dist/chunk-IGBXSBF7.js +71 -0
- package/dist/chunk-IGBXSBF7.js.map +1 -0
- package/dist/{chunk-JXLEMBDB.js → chunk-IIVTPN62.js} +3 -3
- package/dist/{chunk-JXLEMBDB.js.map → chunk-IIVTPN62.js.map} +1 -1
- package/dist/{chunk-PNP7L4TA.js → chunk-ISCJST4P.js} +3 -3
- package/dist/{chunk-PNP7L4TA.js.map → chunk-ISCJST4P.js.map} +1 -1
- package/dist/{chunk-TLS54G6Y.js → chunk-IWM2XDXH.js} +3 -3
- package/dist/{chunk-TLS54G6Y.js.map → chunk-IWM2XDXH.js.map} +1 -1
- package/dist/chunk-J5LK2XHE.js +118 -0
- package/dist/chunk-J5LK2XHE.js.map +1 -0
- package/dist/chunk-KFFGDET3.js +27 -0
- package/dist/chunk-KFFGDET3.js.map +1 -0
- package/dist/{chunk-MRJWPRCX.js → chunk-L6VYDM7S.js} +3 -3
- package/dist/{chunk-MRJWPRCX.js.map → chunk-L6VYDM7S.js.map} +1 -1
- package/dist/chunk-M4BI63P6.js +188 -0
- package/dist/chunk-M4BI63P6.js.map +1 -0
- package/dist/{chunk-RUWD35UI.js → chunk-MK57AOTI.js} +4 -4
- package/dist/{chunk-RUWD35UI.js.map → chunk-MK57AOTI.js.map} +1 -1
- package/dist/{chunk-3BDDPFCI.js → chunk-MOAIQHR7.js} +3 -3
- package/dist/{chunk-3BDDPFCI.js.map → chunk-MOAIQHR7.js.map} +1 -1
- package/dist/{chunk-5XEGZFG5.js → chunk-MYBBBLYE.js} +3 -3
- package/dist/{chunk-5XEGZFG5.js.map → chunk-MYBBBLYE.js.map} +1 -1
- package/dist/{chunk-WP2Z2ATO.js → chunk-O6M3F7BZ.js} +5 -5
- package/dist/{chunk-WP2Z2ATO.js.map → chunk-O6M3F7BZ.js.map} +1 -1
- package/dist/{chunk-FEPTH5RV.js → chunk-OELY6K44.js} +3 -3
- package/dist/{chunk-FEPTH5RV.js.map → chunk-OELY6K44.js.map} +1 -1
- package/dist/{chunk-BZLT6R62.js → chunk-OIHX5B4R.js} +3 -3
- package/dist/{chunk-BZLT6R62.js.map → chunk-OIHX5B4R.js.map} +1 -1
- package/dist/{chunk-QJVS2VXS.js → chunk-PGYEIXCO.js} +4 -4
- package/dist/{chunk-QJVS2VXS.js.map → chunk-PGYEIXCO.js.map} +1 -1
- package/dist/{chunk-UZD77M3J.js → chunk-PJTCO76H.js} +3 -3
- package/dist/{chunk-UZD77M3J.js.map → chunk-PJTCO76H.js.map} +1 -1
- package/dist/{chunk-4PUPKWEP.js → chunk-PJXVLE24.js} +4 -4
- package/dist/{chunk-4PUPKWEP.js.map → chunk-PJXVLE24.js.map} +1 -1
- package/dist/{chunk-WGT345SV.js → chunk-PLQPBMG2.js} +3 -3
- package/dist/{chunk-WGT345SV.js.map → chunk-PLQPBMG2.js.map} +1 -1
- package/dist/{chunk-OMU4R4Y5.js → chunk-PQW5LKAI.js} +3 -3
- package/dist/{chunk-OMU4R4Y5.js.map → chunk-PQW5LKAI.js.map} +1 -1
- package/dist/{chunk-Y5TJ7CAX.js → chunk-RI4Y2C5U.js} +3 -3
- package/dist/{chunk-Y5TJ7CAX.js.map → chunk-RI4Y2C5U.js.map} +1 -1
- package/dist/{chunk-3OIWAS2P.js → chunk-SF6WPUC5.js} +3 -3
- package/dist/{chunk-3OIWAS2P.js.map → chunk-SF6WPUC5.js.map} +1 -1
- package/dist/{chunk-MKSDYRWQ.js → chunk-STX5UKYT.js} +3 -3
- package/dist/{chunk-MKSDYRWQ.js.map → chunk-STX5UKYT.js.map} +1 -1
- package/dist/{chunk-2RL6WCFC.js → chunk-TSWPHJIU.js} +4 -4
- package/dist/{chunk-2RL6WCFC.js.map → chunk-TSWPHJIU.js.map} +1 -1
- package/dist/{chunk-SFNDR6DI.js → chunk-U2ZKY2CP.js} +3 -3
- package/dist/{chunk-SFNDR6DI.js.map → chunk-U2ZKY2CP.js.map} +1 -1
- package/dist/{chunk-PABG3IJ6.js → chunk-UKDDK42K.js} +3 -3
- package/dist/{chunk-PABG3IJ6.js.map → chunk-UKDDK42K.js.map} +1 -1
- package/dist/{chunk-VYRJ7OE5.js → chunk-USFXANEU.js} +3 -3
- package/dist/{chunk-VYRJ7OE5.js.map → chunk-USFXANEU.js.map} +1 -1
- package/dist/{chunk-CCUXO2HN.js → chunk-V5QSMDZL.js} +3 -3
- package/dist/{chunk-CCUXO2HN.js.map → chunk-V5QSMDZL.js.map} +1 -1
- package/dist/{chunk-NF7XG2FG.js → chunk-V75O7QQO.js} +3 -3
- package/dist/{chunk-NF7XG2FG.js.map → chunk-V75O7QQO.js.map} +1 -1
- package/dist/chunk-VFUV6XJR.js +257 -0
- package/dist/chunk-VFUV6XJR.js.map +1 -0
- package/dist/{chunk-NRYWNOG5.js → chunk-VL2WNGPF.js} +3 -3
- package/dist/{chunk-NRYWNOG5.js.map → chunk-VL2WNGPF.js.map} +1 -1
- package/dist/{chunk-JQQ3FBN7.js → chunk-VLZANXRZ.js} +3 -3
- package/dist/{chunk-JQQ3FBN7.js.map → chunk-VLZANXRZ.js.map} +1 -1
- package/dist/{chunk-2HMQDJ22.js → chunk-VOF3S5I4.js} +3 -3
- package/dist/{chunk-2HMQDJ22.js.map → chunk-VOF3S5I4.js.map} +1 -1
- package/dist/chunk-XQNVWHMN.js +60 -0
- package/dist/chunk-XQNVWHMN.js.map +1 -0
- package/dist/{chunk-JZ774T7U.js → chunk-ZGFXKYA5.js} +3 -3
- package/dist/{chunk-JZ774T7U.js.map → chunk-ZGFXKYA5.js.map} +1 -1
- package/dist/client.cjs +1106 -7
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +9 -0
- package/dist/client.d.ts +9 -0
- package/dist/client.js +56 -47
- package/dist/client.js.map +1 -1
- package/dist/components/Accordion/index.js +2 -2
- package/dist/components/Alert/index.js +2 -2
- package/dist/components/AlertDialog/index.js +2 -2
- package/dist/components/AspectRatio/index.cjs +67 -0
- package/dist/components/AspectRatio/index.cjs.map +1 -0
- package/dist/components/AspectRatio/index.d.cts +30 -0
- package/dist/components/AspectRatio/index.d.ts +30 -0
- package/dist/components/AspectRatio/index.js +5 -0
- package/dist/components/AspectRatio/index.js.map +1 -0
- package/dist/components/Avatar/index.js +2 -2
- package/dist/components/Badge/index.js +2 -2
- package/dist/components/Box/index.js +4 -4
- package/dist/components/Breadcrumb/index.js +3 -3
- package/dist/components/Button/index.js +2 -2
- package/dist/components/ButtonGroup/index.cjs +83 -0
- package/dist/components/ButtonGroup/index.cjs.map +1 -0
- package/dist/components/ButtonGroup/index.d.cts +45 -0
- package/dist/components/ButtonGroup/index.d.ts +45 -0
- package/dist/components/ButtonGroup/index.js +5 -0
- package/dist/components/ButtonGroup/index.js.map +1 -0
- package/dist/components/Calendar/index.js +3 -3
- package/dist/components/Card/index.js +2 -2
- package/dist/components/Carousel/index.cjs +297 -0
- package/dist/components/Carousel/index.cjs.map +1 -0
- package/dist/components/Carousel/index.d.cts +67 -0
- package/dist/components/Carousel/index.d.ts +67 -0
- package/dist/components/Carousel/index.js +5 -0
- package/dist/components/Carousel/index.js.map +1 -0
- package/dist/components/Checkbox/index.js +2 -2
- package/dist/components/Collapsible/index.cjs +512 -0
- package/dist/components/Collapsible/index.cjs.map +1 -0
- package/dist/components/Collapsible/index.d.cts +50 -0
- package/dist/components/Collapsible/index.d.ts +50 -0
- package/dist/components/Collapsible/index.js +7 -0
- package/dist/components/Collapsible/index.js.map +1 -0
- package/dist/components/Combobox/index.js +3 -3
- package/dist/components/ContextMenu/index.js +4 -4
- package/dist/components/DataTable/index.js +3 -3
- package/dist/components/DatePicker/index.js +5 -5
- package/dist/components/Dialog/index.js +2 -2
- package/dist/components/DropdownMenu/index.js +3 -3
- package/dist/components/Empty/index.cjs +385 -0
- package/dist/components/Empty/index.cjs.map +1 -0
- package/dist/components/Empty/index.d.cts +32 -0
- package/dist/components/Empty/index.d.ts +32 -0
- package/dist/components/Empty/index.js +7 -0
- package/dist/components/Empty/index.js.map +1 -0
- package/dist/components/FloatButton/index.js +3 -3
- package/dist/components/HStack/index.js +4 -4
- package/dist/components/HoverCard/index.cjs +894 -0
- package/dist/components/HoverCard/index.cjs.map +1 -0
- package/dist/components/HoverCard/index.d.cts +66 -0
- package/dist/components/HoverCard/index.d.ts +66 -0
- package/dist/components/HoverCard/index.js +9 -0
- package/dist/components/HoverCard/index.js.map +1 -0
- package/dist/components/InputGroup/index.js +2 -2
- package/dist/components/InputOTP/index.cjs +580 -0
- package/dist/components/InputOTP/index.cjs.map +1 -0
- package/dist/components/InputOTP/index.d.cts +49 -0
- package/dist/components/InputOTP/index.d.ts +49 -0
- package/dist/components/InputOTP/index.js +7 -0
- package/dist/components/InputOTP/index.js.map +1 -0
- package/dist/components/Item/index.cjs +443 -0
- package/dist/components/Item/index.cjs.map +1 -0
- package/dist/components/Item/index.d.cts +40 -0
- package/dist/components/Item/index.d.ts +40 -0
- package/dist/components/Item/index.js +7 -0
- package/dist/components/Item/index.js.map +1 -0
- package/dist/components/Kbd/index.cjs +396 -0
- package/dist/components/Kbd/index.cjs.map +1 -0
- package/dist/components/Kbd/index.d.cts +22 -0
- package/dist/components/Kbd/index.d.ts +22 -0
- package/dist/components/Kbd/index.js +7 -0
- package/dist/components/Kbd/index.js.map +1 -0
- package/dist/components/Pagination/index.js +4 -4
- package/dist/components/Popover/index.js +2 -2
- package/dist/components/Progress/index.js +2 -2
- package/dist/components/Radio/index.js +2 -2
- package/dist/components/SegmentedControl/index.js +2 -2
- package/dist/components/Select/index.js +2 -2
- package/dist/components/Separator/index.js +2 -2
- package/dist/components/Sheet/index.js +2 -2
- package/dist/components/Skeleton/index.js +2 -2
- package/dist/components/Slider/index.js +2 -2
- package/dist/components/Switch/index.js +2 -2
- package/dist/components/Table/index.js +2 -2
- package/dist/components/Tabs/index.js +2 -2
- package/dist/components/Text/index.js +2 -2
- package/dist/components/TextArea/index.js +3 -3
- package/dist/components/TextInput/index.js +2 -2
- package/dist/components/Toggle/index.js +2 -2
- package/dist/components/Tooltip/index.js +2 -2
- package/dist/components/VStack/index.js +4 -4
- package/dist/index.cjs +1106 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +54 -45
- package/package.json +1 -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":";;;;;;;;;;;;AAUA,IAAMA,KAAAA,GAAQC,OAAAA,CAAQC,GAAAA,CAAIC,QAAAA,KAAa,YAAA;AAEhC,IAAMC,qBAAAA,mBAA8BC,KAAAA,CAAAA,aAAAA,CACzC,IACF,CAAA;AACA,IAAIL,KAAAA,EAAO;AACTI,EAAAA,qBAAAA,CAAsBE,WAAAA,GAAc,uBAAA;AACtC;AAEO,IAAMC,oBAAAA,mBAA6BF,KAAAA,CAAAA,aAAAA,CAA2B,IAAI,CAAA;AACzE,IAAIL,KAAAA,EAAO;AACTO,EAAAA,oBAAAA,CAAqBD,WAAAA,GAAc,sBAAA;AACrC;AA+GeE,WAAWC,MAAAA,CAAO;EAC/BC,IAAAA,EAAM;IAAEC,IAAAA,EAAM;AAAE;AAClB,CAAC;AAwD+BP,qBAAAA,CAAsBQ;AC1CtD,IAAM,uBAAA,GAA0BP,cAAmD,IAAI,CAAA;AAMvF,IAAM,QAAA,GAA4G;AAAA,EAC9G,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,UAAU,EAAA,EAAI,QAAA,EAAU,EAAA,EAAI,IAAA,EAAM,EAAA,EAAG;AAAA,EAC5D,MAAA,EAAQ,EAAE,QAAA,EAAU,EAAA,EAAI,UAAU,EAAA,EAAI,QAAA,EAAU,EAAA,EAAI,IAAA,EAAM,EAAA,EAAG;AAAA,EAC7D,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,UAAU,EAAA,EAAI,QAAA,EAAU,EAAA,EAAI,IAAA,EAAM,EAAA;AAC7D,CAAA;AAEA,IAAM,kBAAA,GAAqB,EAAA;AAC3B,IAAM,qBAAA,GAAwB,EAAA;AAqB9B,IAAM,eAAA,2BAAmB,KAAA,KAA4B;AACjD,EAAA,MAAM,QAAA,GAAWQ,WAAW,uBAAuB,CAAA;AACnD,EAAA,MAAM,SAAS,cAAA,EAAe;AAK9B,EAAA,MAAM,MAAA,GAASA,UAAAA,CAAW,qBAAqB,CAAA,IAAK,EAAE,GAAA,EAAK,CAAA,EAAa,MAAA,EAAQ,CAAW,CAAA;AAC3F,EAAA,MAAM,EAAE,KAAA,EAAO,aAAA,EAAc,GAAI,mBAAA,EAAoB;AAErD,EAAA,MAAM;AAAA,IACF,IAAA;AAAA,IACA,KAAA;AAAA,IACA,kBAAA;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP,IAAA,GAAO,WAAW,OAAA,GAAU,QAAA;AAAA,IAC5B,OAAA,GAAU,SAAA;AAAA,IACV,OAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,OAAA,GAAU,KAAA;AAAA,IACV,OAAA,GAAU,IAAA;AAAA,IACV,SAAA,GAAY,cAAA;AAAA,IACZ,WAAA,GAAc,OAAA;AAAA,IACd,MAAA;AAAA,IACA,eAAA,GAAkB,KAAA;AAAA,IAClB,IAAA;AAAA,IACA,GAAA,GAAM,KAAA;AAAA,IACN,WAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,eAAA,EAAiB,YAAA;AAAA,IACjB,eAAA,EAAiB;AAAA,GACrB,GAAI,KAAA;AAMJ,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,IAAgB,WAAW,OAAA,EAAS;AAC7D,IAAA,OAAA,CAAQ,KAAK,8FAAyF,CAAA;AAAA,EAC1G;AACA,EAAA,MAAM,YAAY,OAAA,IAAW,OAAA;AAG7B,EAAA,MAAM,KAAA,GAA0B,SAAA,KAAc,KAAA,IAAS,IAAA,GAAO,UAAA,GAAa,QAAA,CAAA;AAC3E,EAAA,MAAM,UAAA,GAAa,SAAS,IAAI,CAAA;AAGhC,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIC,SAAS,KAAK,CAAA;AAG1D,EAAA,MAAM,iBAAA,GAAoB,OAAO,KAAK,CAAA;AAEtC,EAAA,MAAM,WAAA,GAAcC,WAAAA;AAAA,IAChB,CAAC,KAAA,KAAiC;AAC9B,MAAA,IAAI,YAAY,OAAA,EAAS;AACrB,QAAA;AAAA,MACJ;AACA,MAAA,IAAI,kBAAkB,OAAA,EAAS;AAC3B,QAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAC5B,QAAA;AAAA,MACJ;AAIA,MAAA,IAAI,QAAA,EAAU;AACV,QAAA,QAAA,CAAS,KAAA,EAAM;AAAA,MACnB;AACA,MAAC,YAAiE,KAAK,CAAA;AAAA,IAC3E,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,OAAA,EAAS,QAAA,EAAU,SAAS;AAAA,GAC3C;AAEA,EAAA,MAAM,eAAA,GAAkBA,WAAAA;AAAA,IACpB,CAAC,KAAA,KAAiC;AAC9B,MAAA,IAAI,YAAY,OAAA,EAAS;AACrB,QAAA;AAAA,MACJ;AACA,MAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAC5B,MAAA,WAAA,GAAc,KAAK,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,OAAA,EAAS,WAAW;AAAA,GACnC;AAGA,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,MAAM,mBAAA,CAAoB,OAAA,EAAS,MAAM,CAAA,EAAG,CAAC,OAAA,EAAS,MAAM,CAAC,CAAA;AAG1F,EAAA,MAAM,aAAA,GAAkC,QAAA,GAClC,IAAA,GACA,oBAAA,CAAqB;AAAA,IACjB,SAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA,EAAQ,UAAU,EAAC;AAAA,IACnB,GAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACH,CAAA;AAGP,EAAA,MAAM,gBAAA,GAAmB,OAAA,GAAW,QAAA,GAAW,GAAA,GAAM,CAAA,GAAK,CAAA;AAG1D,EAAA,MAAM,UAAA,GAAa,KAAA,KAAU,UAAA,IAAc,OAAA,CAAQ,KAAK,CAAA;AACxD,EAAA,MAAM,sBAAiC,UAAA,GACjC;AAAA,IACI,UAAU,UAAA,CAAW,QAAA;AAAA,IACrB,QAAQ,UAAA,CAAW,QAAA;AAAA,IACnB,mBAAmB,UAAA,CAAW,IAAA;AAAA,IAC9B,YAAA,EAAc,WAAW,QAAA,GAAW;AAAA,GACxC,GACA;AAAA,IACI,OAAO,UAAA,CAAW,QAAA;AAAA,IAClB,QAAQ,UAAA,CAAW,QAAA;AAAA,IACnB,YAAA,EAAc,UAAU,QAAA,GAAW,EAAA,CAAG,OAAO,MAAA,CAAO,EAAE,CAAA,GAAI,UAAA,CAAW,QAAA,GAAW;AAAA,GACpF;AAEN,EAAA,MAAM,SAAA,GAAY,sBAAsB,KAAA,IAAS,OAAA;AAEjD,EAAA,IAAI,QAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,IAAgB,CAAC,aAAa,IAAA,EAAM;AAC7D,IAAA,OAAA,CAAQ,KAAK,0FAA0F,CAAA;AAAA,EAC3G;AAGA,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,MAAM,kBAAA,CAAmB,OAAA,EAAS,MAAM,CAAA,EAAG,CAAC,OAAA,EAAS,MAAM,CAAC,CAAA;AAGxF,EAAA,MAAM,8BACF,IAAA,CAAA,QAAA,EAAA,EACK,QAAA,EAAA;AAAA,IAAA,OAAA,mBACG,GAAA,CAAC,gBAAa,KAAA,EAAO,YAAA,CAAa,IAAI,IAAA,EAAM,UAAA,CAAW,UAAU,CAAA,mBAEjE,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,KAAA,EACI;AAAA,UACI,OAAO,UAAA,CAAW,QAAA;AAAA,UAClB,QAAQ,UAAA,CAAW,QAAA;AAAA,UACnB,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,QAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMhB,OAAO,YAAA,CAAa;AAAA,SACxB;AAAA,QAGH,QAAA,EAAA,QAAA,CAAS,IAAA,EAAM,YAAA,CAAa,EAAE;AAAA;AAAA,KACnC;AAAA,IAEH,UAAA,mBACG,GAAA;AAAA,MAACC,IAAA;AAAA,MAAA;AAAA,QACG,KAAA,EAAO;AAAA,UACH,UAAA,EAAY,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,UAClC,OAAO,YAAA,CAAa,EAAA;AAAA,UACpB,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,UAC9B,UAAU,UAAA,CAAW,QAAA;AAAA,UACrB,UAAA,EAAY,OAAO,UAAA,CAAW,MAAA;AAAA,UAC9B,aAAA,EAAe,IAAA;AAAA,UACf,WAAA,EAAa,CAAC,cAAc;AAAA,SAChC;AAAA,QACA,aAAA,EAAe,CAAA;AAAA,QAEd,QAAA,EAAA;AAAA;AAAA,KACL,GACA;AAAA,GAAA,EACR,CAAA;AAIJ,EAAA,MAAM,YAAA,GAA0B;AAAA,IAC5B,GAAI,iBAAiB,EAAC;AAAA,IACtB,OAAA,EAAS,gBAAA;AAAA;AAAA,IAET,GAAI,QAAA,CAAS,EAAA,KAAO,KAAA,GACb;AAAA,MACG,kBAAA,EAAoB,oBAAA;AAAA,MACpB,kBAAA,EAAoB,OAAA;AAAA,MACpB,wBAAA,EAA0B,+BAAA;AAAA,MAC1B,aAAA,EAAe,UAAU,MAAA,GAAS;AAAA,KACtC,GACA;AAAA,GACV;AAGA,EAAA,MAAM,UAAA,mBACF,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACI,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,MAC1C,IAAA,EAAK,QAAA;AAAA,MACL,iBAAA,EAAkB,QAAA;AAAA,MAClB,kBAAA,EAAoB,SAAA;AAAA,MACpB,YAAA,EAAY,SAAA;AAAA,MACZ,UAAU,QAAA,IAAY,OAAA;AAAA,MACtB,iBAAe,QAAA,IAAY,MAAA;AAAA,MAC3B,aAAW,OAAA,IAAW,MAAA;AAAA,MACrB,GAAI,YAAA,KAAiB,MAAA,GAAY,EAAE,eAAA,EAAiB,YAAA,KAAiB,EAAC;AAAA,MACtE,GAAI,YAAA,KAAiB,MAAA,GAAY,EAAE,eAAA,EAAiB,YAAA,KAAiB,EAAC;AAAA,MACvE,OAAA,EAAS,WAAA;AAAA,MACT,WAAA,EAAa,cAAc,eAAA,GAAkB,MAAA;AAAA,MAE7C,SAAA,EAAW,MAAM,iBAAA,CAAkB,IAAI,CAAA;AAAA,MACvC,UAAA,EAAY,MAAM,iBAAA,CAAkB,KAAK,CAAA;AAAA,MACzC,OAAA,EAAS,MAAM,iBAAA,CAAkB,IAAI,CAAA;AAAA,MACrC,MAAA,EAAQ,MAAM,iBAAA,CAAkB,KAAK,CAAA;AAAA,MAMrC,KAAA,EACI,QAAA,CAAS,EAAA,KAAO,KAAA,GACV,CAAC,KAAA,KAAU;AACP,QAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAQ,GAAI,KAAA;AAC7B,QAAA,OAAO;AAAA,UACH,aAAA,EAAe,KAAA;AAAA,UACf,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,QAAA;AAAA,UAChB,iBAAiB,OAAA,GACX,YAAA,CAAa,YACb,OAAA,GACE,YAAA,CAAa,UACb,YAAA,CAAa,EAAA;AAAA,UACrB,GAAI,aAAa,WAAA,GACX,EAAE,aAAa,CAAA,EAAG,WAAA,EAAa,YAAA,CAAa,WAAA,EAAY,GACxD,IAAA;AAAA,UACN,GAAG,mBAAA;AAAA,UACH,GAAG,WAAA,CAAY,OAAA;AAAA,UACf,GAAI,OAAA,GAAU,EAAE,SAAA,EAAW,CAAC,EAAE,KAAA,EAAO,IAAA,EAAM,CAAA,EAAG,GAAG,WAAA,CAAY,SAAQ,GAAI,IAAA;AAAA,UACzE,GAAI,OAAA,IAAW,CAAC,OAAA,GACV,EAAE,SAAA,EAAW,CAAC,EAAE,UAAA,EAAY,IAAI,CAAA,EAAG,GAAG,WAAA,CAAY,OAAM,GACxD,IAAA;AAAA,UACN,GAAI;AAAA,YACA,kBAAA,EAAoB,yCAAA;AAAA,YACpB,kBAAA,EAAoB,OAAA;AAAA,YACpB,wBAAA,EAA0B,+BAAA;AAAA,YAC1B,MAAA,EAAQ,QAAA,IAAY,OAAA,GAAU,aAAA,GAAgB,SAAA;AAAA,YAC9C,YAAA,EAAc;AAAA;AAClB,SACJ;AAAA,MACJ,CAAA,GACC;AAAA,QACG,aAAA,EAAe,KAAA;AAAA,QACf,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,iBAAiB,YAAA,CAAa,EAAA;AAAA,QAC9B,GAAI,aAAa,WAAA,GACX,EAAE,aAAa,CAAA,EAAG,WAAA,EAAa,YAAA,CAAa,WAAA,EAAY,GACxD,IAAA;AAAA,QACN,GAAG,mBAAA;AAAA,QACH,GAAG,WAAA,CAAY;AAAA,OACnB;AAAA,MAGT,QAAA,EAAA;AAAA;AAAA,GACL;AAIJ,EAAA,MAAM,YAAA,GACF,IAAA,IAAQ,QAAA,CAAS,EAAA,KAAO,KAAA,mBACpB,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACG,IAAA;AAAA,MACA,YAAA,EAAY,SAAA;AAAA,MACZ,OAAO,EAAE,cAAA,EAAgB,QAAQ,KAAA,EAAO,SAAA,EAAW,SAAS,aAAA,EAAc;AAAA,MAC1E,OAAA,EAAS,CAAC,CAAA,KAAM;AACZ,QAAA,IAAI,SAAA,EAAW;AAEX,UAAC,SAAA,CAA2D;AAAA,YACxD,cAAA,kBAAgB,MAAA,CAAA,MAAM,CAAA,CAAE,cAAA,EAAe,EAAvB,gBAAA;AAAA,WACnB,CAAA;AAAA,QACL;AAAA,MACJ,CAAA;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACL,GAEA,UAAA;AAKR,EAAA,MAAM,cAAc,OAAA,KAAY,QAAA,CAAS,OAAO,KAAA,GAAQ,cAAA,GAAkB,UAAU,IAAA,IAAQ,KAAA,CAAA;AAE5F,EAAA,4BACK,IAAA,EAAA,EAAK,SAAA,EAAW,GAAG,SAAS,CAAA,EAAG,OAAO,YAAA,EACnC,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,EAAE,aAAA,EAAe,OAAO,UAAA,EAAY,QAAA,EAAU,GAAA,EAAK,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,GAAE,EACnF,QAAA,EAAA;AAAA,MAAA,WAAA,mBAAc,GAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAM,OAAA,EAAU,CAAA,GAAK,IAAA;AAAA,2BAChD,IAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,YAAW,EAC/B,QAAA,EAAA;AAAA,QAAA,YAAA;AAAA,QACA,KAAA,mBAAQ,GAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAc,MAAY,CAAA,GAAK;AAAA,OAAA,EAC1D;AAAA,KAAA,EACJ,CAAA;AAAA,IACC;AAAA,GAAA,EACL,CAAA;AAER,CAAA,EA7SwB,iBAAA,CAAA;AAwUxB,IAAM,mCAA8C,MAAA,CAAA,CAAC;AAAA,EACjD,OAAA,GAAU,OAAA;AAAA,EACV,IAAA,EAAM,QAAA;AAAA,EACN,WAAA,GAAc,KAAA;AAAA,EACd,YAAA;AAAA,EACA,SAAA,GAAY,IAAA;AAAA,EACZ,QAAA,GAAW,KAAA;AAAA,EACX,UAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACP,CAAA,KAAM;AACF,EAAA,MAAM,eAAe,QAAA,KAAa,MAAA;AAClC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIF,SAAS,WAAW,CAAA;AACtD,EAAA,MAAM,IAAA,GAAO,eAAgB,QAAA,GAAuB,SAAA;AAEpD,EAAA,MAAM,OAAA,GAAUC,WAAAA;AAAA,IACZ,CAAC,IAAA,KAAkB;AACf,MAAA,IAAI,CAAC,YAAA,EAAc;AACf,QAAA,YAAA,CAAa,IAAI,CAAA;AAAA,MACrB;AACA,MAAA,YAAA,GAAe,IAAI,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,CAAC,cAAc,YAAY;AAAA,GAC/B;AAEA,EAAA,MAAM,KAAA,GAAQA,YAAY,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACzD,EAAA,MAAM,MAAA,GAASA,WAAAA,CAAY,MAAM,OAAA,CAAQ,CAAC,IAAI,CAAA,EAAG,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA;AAGhE,EAAA,MAAM,cAAyB,OAAA,GACzB,OAAA,CAAQ,GAAA,CAAI,CAAC,QAAQ,GAAA,KAAQ;AAEzB,IAAA,2BAAQ,WAAA,EAAA,EAAuC,GAAI,MAAA,EAAA,EAA1B,CAAA,WAAA,EAAc,GAAG,CAAA,CAAsC,CAAA;AAAA,EACpF,CAAC,CAAA,GACD,QAAA;AAGN,EAAA,MAAM,aAAA,GAAgB,OAAA;AAAA,IAClB,OAAO;AAAA,MACH,IAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA,EAAa,IAAA;AAAA,MACb,QAAA,EAAU,EAAE,IAAA,EAAM,CAAA;AAAE,KACxB,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,KAAA,EAAO,SAAS;AAAA,GAC3B;AAIA,EAAA,MAAM,WAAA,GAAc,IAAA,GACb,YAAA,oBAAgB,GAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAM,UAAA,IAAc,WAAA,CAAY,IAAA,EAAM,CAAA,GACnE,UAAA,IAAc,WAAA,CAAY,IAAA;AAEjC,EAAA,uBACI,IAAA,CAAC,uBAAA,CAAwB,QAAA,EAAxB,EAAiC,OAAO,aAAA,EACpC,QAAA,EAAA;AAAA,IAAA,QAAA,IAAY,IAAA,uBAAQ,QAAA,EAAA,EAAS,OAAA,EAAS,OAAO,WAAA,EAAa,WAAA,CAAY,WAAA,IAAe,OAAA,EAAS,CAAA,GAAK,IAAA;AAAA,oBACpG,IAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACG,SAAA;AAAA,QACA,SAAA,EAAW,YAAY,SAAA,IAAa,cAAA;AAAA,QACpC,WAAA,EAAa,YAAY,WAAA,IAAe,OAAA;AAAA,QACxC,MAAA,EAAQ,WAAA,CAAY,MAAA,IAAU,EAAC;AAAA,QAC/B,GAAA,EAAK,YAAY,GAAA,IAAO,KAAA;AAAA,QAEvB,QAAA,EAAA;AAAA,UAAA,IAAA,uBAAQ,IAAA,EAAA,EAAK,KAAA,EAAO,wBAAwB,SAAS,CAAA,EAAI,uBAAY,CAAA,GAAU,IAAA;AAAA,0BAChF,GAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACI,GAAI,WAAA;AAAA,cACL,IAAA,EAAM,WAAA;AAAA,cACL,GAAI,OAAA,KAAY,OAAA,GAAU,EAAE,OAAA,EAAS,MAAA,KAAW,EAAC;AAAA,cACjD,GAAI,OAAA,KAAY,WAAA,GAAc,EAAE,WAAA,EAAa,MAAA,KAAW,EAAC;AAAA,cAC1D,eAAA,EAAc,MAAA;AAAA,cACd,eAAA,EAAe;AAAA;AAAA;AACnB;AAAA;AAAA;AACJ,GAAA,EACJ,CAAA;AAER,CAAA,EA9EoD,kBAAA,CAAA;AA6FpD,IAAM,uCAAsD,MAAA,CAAA,CAAC;AAAA,EACzD,SAAA;AAAA,EACA,mBAAA,GAAsB,GAAA;AAAA,EACtB,OAAA,GAAU,SAAA;AAAA,EACV,GAAG;AACP,CAAA,KAAM;AACF,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAID,SAAS,KAAK,CAAA;AAI5C,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,QAAA,CAAS,EAAA,KAAO,KAAA,IAAS,OAAO,WAAW,WAAA,EAAa;AACxD,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,2BAAW,MAAA,CAAA,MAAM,UAAA,CAAW,MAAA,CAAO,OAAA,GAAU,mBAAmB,CAAA,EAArD,UAAA,CAAA;AACjB,IAAA,QAAA,EAAS;AACT,IAAA,MAAA,CAAO,iBAAiB,QAAA,EAAU,QAAA,EAAU,EAAE,OAAA,EAAS,MAAM,CAAA;AAC7D,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,QAAQ,CAAA;AAAA,EAC9D,CAAA,EAAG,CAAC,mBAAmB,CAAC,CAAA;AAExB,EAAA,MAAM,OAAA,GAAUC,YAAY,MAAM;AAC9B,IAAA,IAAI,QAAA,CAAS,EAAA,KAAO,KAAA,IAAS,OAAO,WAAW,WAAA,EAAa;AACxD,MAAA,MAAA,CAAO,SAAS,EAAE,GAAA,EAAK,CAAA,EAAG,QAAA,EAAU,UAAU,CAAA;AAC9C,MAAA;AAAA,IACJ;AACA,IAAA,SAAA,EAAW,SAAS,QAAA,GAAW,EAAE,GAAG,CAAA,EAAG,QAAA,EAAU,MAAM,CAAA;AAAA,EAC3D,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,uBACI,GAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACI,GAAI,IAAA;AAAA,MACL,OAAA;AAAA,MACA,OAAA;AAAA,MACA,sBAAM,GAAA,CAAC,oBAAA,CAAqB,SAAA,EAArB,EAA+B,MAAM,EAAA,EAAI,CAAA;AAAA,MAChD,kBAAA,EAAoB,KAAK,kBAAA,IAAsB,CAAA,CAAE,yBAAyB,EAAE,YAAA,EAAc,eAAe,CAAA;AAAA,MACzG;AAAA;AAAA,GACJ;AAER,CAAA,EAvC4D,sBAAA,CAAA;AAiDrD,IAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,eAAA,EAAiB;AAAA,EACtD,KAAA,EAAO,gBAAA;AAAA,EACP,SAAA,EAAW;AACf,CAAC;AAMD,IAAM,WAAA,mBAAc,MAAA,CAAA,CAAC,EAAE,IAAA,EAAK,KAAwB;AAChD,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,2BAAA,EAA2B,IAAA;AAAA,MAC3B,yBAAA,EAA0B,qBAAA;AAAA,MAC1B,KAAA,EAAO;AAAA,QACH,eAAA,EAAiB,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,QAAA;AAAA,QAC5C,YAAA,EAAc,EAAA,CAAG,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA,GAAI,CAAA;AAAA,QACrC,WAAA,EAAa,CAAA;AAAA,QACb,WAAA,EAAa,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,OAAA;AAAA,QACpC,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QACzC,eAAA,EAAiB,CAAA;AAAA,QACjB,GAAI,QAAA,CAAS,EAAA,KAAO,QAAS,EAAE,SAAA,EAAW,8BAA6B,GAAe;AAAA,OAC1F;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAACC,IAAA;AAAA,QAAA;AAAA,UACG,KAAA,EAAO;AAAA,YACH,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA;AAAA,YAC5B,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,YAC9B,QAAA,EAAU,EAAA;AAAA,YACV,UAAA,EAAY;AAAA,WAChB;AAAA,UAEC,QAAA,EAAA;AAAA;AAAA;AACL;AAAA,GACJ;AAER,CAAA,EA5BoB,aAAA,CAAA;AA8BpB,IAAM,YAAA,mBAAe,MAAA,CAAA,CAAC,EAAE,KAAA,EAAO,MAAK,KAA0D;AAC1F,EAAA,MAAM,SAAA,GAAY,IAAA,KAAS,OAAA,GAAU,EAAA,GAAK,EAAA;AAC1C,EAAA,MAAM,WAAA,GAAc,IAAA,KAAS,OAAA,GAAU,EAAA,GAAK,EAAA;AAC5C,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,aAAA,EAAc,MAAA;AAAA,MACd,KAAA,EAAO;AAAA,QACH,QAAA,EAAU,UAAA;AAAA,QACV,GAAA,EAAK,SAAA;AAAA,QACL,KAAA,EAAO,WAAA;AAAA,QACP,MAAA,EAAQ;AAAA,OACZ;AAAA,MAEC,QAAA,EAAA,KAAA,CAAM,GAAA,mBACH,GAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAM,MAAM,IAAA,IAAQ,QAAA,EAAU,UAAA,EAAW,OAAA,EAC3C,QAAA,EAAA,GAAA,EACL,CAAA,uBAEC,KAAA,EAAA,EAAM,IAAA,EAAM,KAAA,CAAM,IAAA,IAAQ,QAAA,EAAU,UAAA,EAAW,SAC3C,QAAA,EAAA,MAAA,CAAO,KAAA,CAAM,KAAA,IAAS,CAAC,CAAA,EAC5B;AAAA;AAAA,GAER;AAER,CAAA,EAxBqB,cAAA,CAAA;AA0BrB,IAAM,YAAA,mBAAe,MAAA,CAAA,CAAC,EAAE,KAAA,EAAO,MAAK,KAAuC;AAGvE,EAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,IAAA,uBACI,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,KAAA,EACI;AAAA,UACI,KAAA,EAAO,IAAA;AAAA,UACP,MAAA,EAAQ,IAAA;AAAA,UACR,cAAc,IAAA,GAAO,CAAA;AAAA,UACrB,WAAA,EAAa,CAAA;AAAA,UACb,WAAA,EAAa,aAAA;AAAA,UACb,cAAA,EAAgB,KAAA;AAAA,UAChB,aAAA,EAAe,SAAA;AAAA,UACf,iBAAA,EAAmB,OAAA;AAAA,UACnB,uBAAA,EAAyB,UAAA;AAAA,UACzB,uBAAA,EAAyB;AAAA;AAC7B;AAAA,KAER;AAAA,EAER;AACA,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,KAAA,EAAO;AAAA,QACH,KAAA,EAAO,IAAA;AAAA,QACP,MAAA,EAAQ,IAAA;AAAA,QACR,cAAc,IAAA,GAAO,CAAA;AAAA,QACrB,WAAA,EAAa,CAAA;AAAA,QACb,WAAA,EAAa,KAAA;AAAA,QACb,OAAA,EAAS;AAAA;AACb;AAAA,GACJ;AAER,CAAA,EAnCqB,cAAA,CAAA;AAqCrB,IAAM,QAAA,mBAAW,MAAA,CAAA,CAAC,EAAE,OAAA,EAAS,aAAY,KAAkE;AACvG,EAAA,uBACI,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACG,OAAA;AAAA,MACA,kBAAA,EAAmB,OAAA;AAAA,MACnB,KAAA,EAAO;AAAA,QACH,UACI,QAAA,CAAS,EAAA,KAAO,KAAA,IAAS,WAAA,KAAgB,UAAW,OAAA,GAAoC,UAAA;AAAA,QAC5F,GAAA,EAAK,CAAA;AAAA,QACL,IAAA,EAAM,CAAA;AAAA,QACN,KAAA,EAAO,CAAA;AAAA,QACP,MAAA,EAAQ,CAAA;AAAA,QACR,eAAA,EAAiB,qBAAA;AAAA,QACjB,MAAA,EAAQ;AAAA;AACZ;AAAA,GACJ;AAER,CAAA,EAjBiB,UAAA,CAAA;AAmBjB,IAAM,WAAA,mBAAc,MAAA,CAAA,CAAC,EAAE,IAAA,EAAM,OAAM,KAA2C;AAI1E,EAAA,MAAM,UAAA,GACF,KAAA,IAAS,cAAA,CAAe,IAAI,CAAA,GAAI,aAAa,IAAA,EAA0C,EAAE,KAAA,EAAO,CAAA,GAAI,IAAA;AACxG,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,KAAA,EACI;AAAA,QACI,SAAA,EAAW,CAAC,EAAE,MAAA,EAAQ,SAAS,CAAA;AAAA;AAAA,QAE/B,GAAI,KAAA,GAAQ,EAAE,KAAA,EAAM,GAAI,IAAA;AAAA,QACxB,GAAI,QAAA,CAAS,EAAA,KAAO,KAAA,GACd;AAAA,UACI,kBAAA,EAAoB,WAAA;AAAA,UACpB,kBAAA,EAAoB,OAAA;AAAA,UACpB,wBAAA,EAA0B;AAAA,SAC9B,GACA;AAAA,OACV;AAAA,MAGH,QAAA,EAAA;AAAA;AAAA,GACL;AAER,CAAA,EA1BoB,aAAA,CAAA;AA4BpB,IAAM,8BAAc,MAAA,CAAA,CAAC;AAAA,EACjB,SAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA;AACJ,CAAA,KAOM;AAKF,EAAA,MAAM,MAAA,GAASH,UAAAA,CAAW,qBAAqB,CAAA,IAAK,EAAE,GAAA,EAAK,CAAA,EAAa,MAAA,EAAQ,CAAW,CAAA;AAC3F,EAAA,MAAM,EAAE,KAAA,EAAO,aAAA,EAAc,GAAI,mBAAA,EAAoB;AACrD,EAAA,MAAM,gBAAgB,oBAAA,CAAqB;AAAA,IACvC,SAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA,EAAiB;AAAA,GACpB,CAAA;AACD,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,KAAA,EAAO;AAAA,QACH,GAAG,aAAA;AAAA,QACH,aAAA,EAAe,SAAA,KAAc,MAAA,IAAU,SAAA,KAAc,UAAU,KAAA,GAAQ,QAAA;AAAA,QACvE,UAAA,EAAY,SAAA,KAAc,MAAA,IAAU,SAAA,KAAc,UAAU,QAAA,GAAW,UAAA;AAAA,QACvE,cAAA,EAAgB,SAAA,KAAc,IAAA,GAAO,UAAA,GAAa;AAAA,OACtD;AAAA,MAEC,QAAA,EAAA,SAAA,KAAc,IAAA,IAAQ,SAAA,KAAc,MAAA,GAC/B,WACA,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GACpB,CAAC,GAAG,QAAQ,CAAA,CAAE,SAAQ,GACtB;AAAA;AAAA,GACZ;AAER,CAAA,EA9CoB,aAAA,CAAA;AAgDpB,SAAS,wBAAwB,SAAA,EAAiD;AAC9E,EAAA,MAAM,UAAA,GAAa,SAAA,KAAc,IAAA,IAAQ,SAAA,KAAc,MAAA;AACvD,EAAA,OAAO;AAAA,IACH,aAAA,EAAe,aAAa,QAAA,GAAW,KAAA;AAAA,IACvC,UAAA,EAAY,UAAA;AAAA,IACZ,GAAA,EAAK,EAAA;AAAA,IACL,YAAA,EAAc,SAAA,KAAc,IAAA,GAAO,EAAA,GAAK,CAAA;AAAA,IACxC,SAAA,EAAW,SAAA,KAAc,MAAA,GAAS,EAAA,GAAK,CAAA;AAAA,IACvC,WAAA,EAAa,SAAA,KAAc,MAAA,GAAS,EAAA,GAAK,CAAA;AAAA,IACzC,UAAA,EAAY,SAAA,KAAc,OAAA,GAAU,EAAA,GAAK;AAAA,GAC7C;AACJ;AAXS,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AAiBT,SAAS,mBAAA,CACL,SACA,MAAA,EACoF;AACpF,EAAA,QAAQ,OAAA;AAAS,IACb,KAAK,SAAA;AACD,MAAA,OAAO;AAAA,QACH,EAAA,EAAI,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY,OAAA;AAAA,QAChC,OAAA,EAAS,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY,YAAA;AAAA,QACrC,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY,cAAA;AAAA,QACvC,EAAA,EAAI,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK;AAAA,OAC7B;AAAA,IACJ,KAAK,WAAA;AACD,MAAA,OAAO;AAAA,QACH,EAAA,EAAI,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,MAAA;AAAA,QAC/B,OAAA,EAAS,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,QAAA;AAAA,QACpC,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,MAAA;AAAA,QACtC,EAAA,EAAI,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA;AAAA,QACzB,WAAA,EAAa,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO;AAAA,OACxC;AAAA,IACJ,KAAK,UAAA;AACD,MAAA,OAAO;AAAA,QACH,EAAA,EAAI,aAAA;AAAA,QACJ,SAAS,SAAA,CAAU,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY,SAAS,IAAI,CAAA;AAAA,QAC5D,WAAW,SAAA,CAAU,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY,SAAS,IAAI,CAAA;AAAA,QAC9D,EAAA,EAAI,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY,OAAA;AAAA,QAChC,WAAA,EAAa,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY;AAAA,OAC7C;AAAA,IACJ,KAAK,SAAA;AACD,MAAA,OAAO;AAAA,QACH,EAAA,EAAI,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,QAAA;AAAA,QAC/B,OAAA,EAAS,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,MAAA;AAAA,QACpC,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,MAAA;AAAA,QACtC,EAAA,EAAI,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA;AAAA,QACzB,WAAA,EAAa,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO;AAAA,OACxC;AAAA;AAEZ;AArCS,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AAuCT,SAAS,kBAAA,CACL,SACA,MAAA,EAC4D;AAC5D,EAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AAIvB,IAAA,OAAO;AAAA,MACH,OAAA,EAAS;AAAA,QACL,aAAa,OAAA,KAAY,SAAA,GAAY,MAAA,CAAO,QAAA,CAAS,YAAY,OAAA,GAAU,MAAA;AAAA,QAC3E,YAAA,EAAc,EAAE,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAE;AAAA,QACpC,aAAA,EAAe,OAAA,KAAY,SAAA,GAAY,IAAA,GAAO,IAAA;AAAA,QAC9C,YAAA,EAAc,EAAA;AAAA,QACd,SAAA,EAAW;AAAA,OACf;AAAA,MACA,OAAO,EAAC;AAAA,MACR,OAAA,EAAS;AAAA,QACL,YAAA,EAAc,EAAE,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAE;AAAA,QACpC,YAAA,EAAc,CAAA;AAAA,QACd,SAAA,EAAW;AAAA;AACf,KACJ;AAAA,EACJ;AACA,EAAA,MAAM,OAAO,OAAA,KAAY,SAAA,GAAY,MAAA,CAAO,QAAA,CAAS,YAAY,OAAA,GAAU,MAAA;AAC3E,EAAA,OAAO;AAAA,IACH,OAAA,EAAS;AAAA,MACL,GAAI;AAAA,QACA,SAAA,EAAW,+CAA+C,SAAA,CAAU,IAAA,EAAM,YAAY,SAAA,GAAY,IAAA,GAAO,IAAI,CAAC,CAAA;AAAA;AAClH,KACJ;AAAA,IACA,KAAA,EAAO;AAAA,MACH,GAAI;AAAA,QACA,SAAA,EAAW,gDAAgD,SAAA,CAAU,IAAA,EAAM,YAAY,SAAA,GAAY,GAAA,GAAM,IAAI,CAAC,CAAA;AAAA;AAClH,KACJ;AAAA,IACA,OAAA,EAAS;AAAA,MACL,GAAI,EAAE,SAAA,EAAW,CAAA,0BAAA,CAAA;AAA6B;AAClD,GACJ;AACJ;AAxCS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AA0CT,SAAS,oBAAA,CAAqB;AAAA,EAC1B,SAAA;AAAA,EACA,WAAA,GAAc,OAAA;AAAA,EACd,MAAA;AAAA,EACA,GAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA;AACJ,CAAA,EAQc;AACV,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,EAAA,KAAO,KAAA,GAAQ,kBAAA,GAAqB,qBAAA;AACnE,EAAA,MAAM,CAAA,GAAI,OAAO,CAAA,IAAK,aAAA;AACtB,EAAA,MAAM,CAAA,GAAI,OAAO,CAAA,IAAK,aAAA;AACtB,EAAA,MAAM,aAAa,QAAA,CAAS,EAAA,KAAO,KAAA,IAAS,eAAA,GAAkB,OAAO,MAAA,GAAS,CAAA;AAC9E,EAAA,MAAM,UAAU,QAAA,CAAS,EAAA,KAAO,KAAA,IAAS,eAAA,GAAkB,OAAO,GAAA,GAAM,CAAA;AAGxE,EAAA,MAAM,gBAAA,GACF,GAAA,KAAQ,KAAA,GACF,SAAA,KAAc,cAAA,GACV,aAAA,GACA,SAAA,KAAc,aAAA,GACZ,cAAA,GACA,SAAA,KAAc,WAAA,GACZ,UAAA,GACA,WAAA,GACR,SAAA;AAKV,EAAA,MAAM,cACF,QAAA,CAAS,EAAA,KAAO,KAAA,IAAS,WAAA,KAAgB,UAAW,OAAA,GAAoC,UAAA;AAC5F,EAAA,MAAM,IAAA,GAAkB;AAAA,IACpB,QAAA,EAAU,WAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACZ;AAEA,EAAA,QAAQ,gBAAA;AAAkB,IACtB,KAAK,cAAA;AACD,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,QAAQ,CAAA,GAAI,UAAA,EAAY,OAAO,CAAA,EAAE;AAAA,IACvD,KAAK,aAAA;AACD,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,QAAQ,CAAA,GAAI,UAAA,EAAY,MAAM,CAAA,EAAE;AAAA,IACtD,KAAK,WAAA;AACD,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,KAAK,CAAA,GAAI,OAAA,EAAS,OAAO,CAAA,EAAE;AAAA,IACjD,KAAK,UAAA;AACD,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,KAAK,CAAA,GAAI,OAAA,EAAS,MAAM,CAAA,EAAE;AAAA;AAIpD,EAAA,OAAO,IAAA;AACX;AA1DS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAoET,SAAS,QAAA,CAAS,MAAiB,KAAA,EAA0B;AACzD,EAAA,IAAI,CAAC,cAAA,CAAe,IAAI,CAAA,EAAG;AACvB,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,YAAA,CAAa,IAAA,EAA0C,EAAE,KAAA,EAAO,CAAA;AAC3E;AALS,MAAA,CAAA,QAAA,EAAA,UAAA,CAAA;AAOT,SAAS,SAAA,CAAU,OAAe,KAAA,EAAuB;AACrD,EAAA,IAAI,KAAA,CAAM,WAAW,GAAG,CAAA,KAAM,MAAM,MAAA,KAAW,CAAA,IAAK,KAAA,CAAM,MAAA,KAAW,CAAA,CAAA,EAAI;AACrE,IAAA,MAAM,QAAA,GACF,KAAA,CAAM,MAAA,KAAW,CAAA,GAAI,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,GAAK,KAAA;AACjG,IAAA,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAClD,IAAA,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAClD,IAAA,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAClD,IAAA,OAAO,QAAQ,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,EAAK,CAAC,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO,KAAA;AACX;AAVS,MAAA,CAAA,SAAA,EAAA,WAAA,CAAA","file":"chunk-4PUPKWEP.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-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"]}
|
|
@@ -2,8 +2,8 @@ import { defaultSemanticIcons } from './chunk-7Z4NMNX6.js';
|
|
|
2
2
|
import { BlurBackdrop } from './chunk-KWRDJPP3.js';
|
|
3
3
|
import { Slot } from './chunk-ZIBNLXIV.js';
|
|
4
4
|
import { px } from './chunk-5A2QOOVN.js';
|
|
5
|
-
import { cn } from './chunk-CHXHRJNZ.js';
|
|
6
5
|
import { useThemeColors, useColorScheme } from './chunk-R5JMDDCB.js';
|
|
6
|
+
import { cn } from './chunk-CHXHRJNZ.js';
|
|
7
7
|
import { __name } from './chunk-WCQVDF3K.js';
|
|
8
8
|
import { createContext, useState, useCallback, useId, useRef, isValidElement, useEffect, useContext } from 'react';
|
|
9
9
|
import { Platform, Text, Pressable, View, Modal, StyleSheet } from 'react-native';
|
|
@@ -423,5 +423,5 @@ var Dialog = Object.assign(DialogRoot, {
|
|
|
423
423
|
});
|
|
424
424
|
|
|
425
425
|
export { Dialog };
|
|
426
|
-
//# sourceMappingURL=chunk-
|
|
427
|
-
//# sourceMappingURL=chunk-
|
|
426
|
+
//# sourceMappingURL=chunk-PLQPBMG2.js.map
|
|
427
|
+
//# sourceMappingURL=chunk-PLQPBMG2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Dialog/Dialog.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-WGT345SV.js","sourcesContent":["'use client';\n\nimport {\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Modal, Platform, Pressable, Text as RNText, StyleSheet, View } from 'react-native';\nimport { defaultSemanticIcons } from '../../icons/default-semantic-icons';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useColorScheme } from '../../theme/use-color-scheme';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport { BlurBackdrop } from './blur-backdrop';\n\ntype DialogContextValue = {\n open: boolean;\n setOpen: (next: boolean) => void;\n titleId: string;\n descriptionId: string;\n triggerRef: { current: HTMLElement | null };\n};\n\nconst DialogContext = createContext<DialogContextValue | null>(null);\n\nconst useDialogContext = (label: string): DialogContextValue => {\n const ctx = useContext(DialogContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Dialog>.`);\n }\n return ctx;\n};\n\nexport type DialogProps = {\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 children?: ReactNode;\n};\n\n/**\n * Modal dialog. Owns open state and provides context for `DialogTrigger`,\n * `DialogContent`, `DialogTitle`, `DialogDescription`, and `DialogClose`.\n *\n * Behavior:\n * - Click the trigger to open. Click outside the content, press Escape,\n * or click an explicit close to dismiss.\n * - Focus is trapped inside the content while open (web). On close, focus\n * returns to whatever opened the dialog.\n * - Background scrolling is locked while open (web).\n *\n * Cross-platform: uses RN `<Modal>` as the visibility/portal primitive. On\n * web, additional focus-trap / scroll-lock / Escape-key effects layer on\n * top via the platform check inside `DialogContent`.\n */\nconst DialogRoot = ({ open, defaultOpen = false, onOpenChange, children }: DialogProps) => {\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: DialogContextValue = {\n open: current,\n setOpen,\n titleId: `${baseId}-title`,\n descriptionId: `${baseId}-description`,\n triggerRef,\n };\n\n return <DialogContext.Provider value={ctxValue}>{children}</DialogContext.Provider>;\n};\n\nexport type DialogTriggerProps = {\n /** Render the child as the trigger (Slot pattern). Default true — pass `false` for an inline button. */\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Element that opens the dialog when activated. Uses `asChild` by default so\n * any element (Button, Link, custom Pressable) becomes the trigger.\n */\nexport const DialogTrigger = ({ asChild = true, children, className, testID }: DialogTriggerProps) => {\n const ctx = useDialogContext('DialogTrigger');\n const onPress = useCallback(() => ctx.setOpen(true), [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n // Pass both onClick (web HTML buttons) AND onPress (RN Pressable /\n // our own Button) so the trigger fires regardless of which event\n // model the wrapped child speaks. The child's existing handler\n // runs first, then we open.\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// On native, raw strings rendered as children of a non-Text component\n// throw \"Text strings must be rendered within a <Text> component\". On\n// web, react-native-web silently tolerates it. Wrap any string/number\n// children in an RNText so the same JSX renders cleanly on both\n// platforms. Non-string children are passed through unchanged.\nfunction wrapStringChildren(children: ReactNode): ReactNode {\n if (typeof children === 'string' || typeof children === 'number') {\n return <RNText>{children}</RNText>;\n }\n return children;\n}\n\n// Scrim + blur target values — applied at the entered state on web,\n// always on as a flat scrim on native (RN doesn't have backdrop-filter\n// and the native shim would be an extra peer dep for vanishingly little\n// visual gain on a v0 component).\n// 24% scrim + 4px blur — strong enough to push the page back but the\n// content underneath is still legible. Earlier 32%/8px felt like a frosted\n// glass slab that completely obscured the page; this lets the page show\n// through as \"behind glass, slightly out of focus.\"\nconst SCRIM_COLOR = 'rgba(0, 0, 0, 0.24)';\nconst BLUR_AMOUNT = 4;\n\n// Static overlay layout — alignment, fixed positioning. The animatable\n// bits (scrim color, backdrop-filter blur) live in a useEffect inside\n// the component that pokes them onto the DOM ref directly so rn-web's\n// style filter can't strip the non-RN keys (backdropFilter,\n// transitionProperty). On web the styles start at blur(0px) +\n// transparent and transition to the target values on the next frame.\n//\n// Why not put blur(8px) here as a constant: when blur is applied to a\n// layer that's mid-fade (e.g. RN Modal's animationType=\"fade\" fades\n// opacity from 0 → 1), Safari and Chromium GPU-composite the layer\n// without rendering backdrop-filter — so the blur appears to \"snap in\"\n// at the end of the fade. Animating blur explicitly via our own\n// transition (and disabling the Modal's fade on web) avoids the snap.\nconst OVERLAY_LAYOUT_BASE: 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 alignItems: 'center',\n justifyContent: 'center',\n // On native the BlurBackdrop sibling renders BEHIND this overlay and\n // already provides dim + frosted-glass via expo-blur's `tint`/`intensity`.\n // Painting SCRIM_COLOR on top would mask the blur entirely (the user\n // sees only a flat tint), so the overlay stays transparent and the\n // BlurView is the dominant visual on native.\n ...(Platform.OS === 'web' ? ({ zIndex: 50 } as ViewStyle) : { backgroundColor: 'transparent' }),\n};\n\n// Layout / animation only — theme-driven dimensions are merged inside\n// DialogContent below.\nconst CONTENT_LAYOUT_BASE: ViewStyle = {\n width: '100%',\n maxWidth: 480, // component-density literal — not from theme\n ...(Platform.OS === 'web'\n ? ({\n boxShadow: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)',\n } as ViewStyle)\n : { elevation: 24 }),\n};\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 type DialogContentProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * The visible dialog surface — overlay + centered card. Renders only when\n * the parent `Dialog` is open. On web: traps focus inside, locks body\n * scroll, and dismisses on Escape or overlay click.\n */\nexport const DialogContent = ({ children, className, testID }: DialogContentProps) => {\n const ctx = useDialogContext('DialogContent');\n const colors = useThemeColors();\n const scheme = useColorScheme();\n const contentRef = useRef<HTMLDivElement | null>(null);\n const overlayStyle: ViewStyle = {\n ...OVERLAY_LAYOUT_BASE,\n padding: px(colors.spacing['4']),\n };\n const contentStyle: ViewStyle = {\n ...CONTENT_LAYOUT_BASE,\n borderRadius: px(colors.radius.xl),\n padding: px(colors.spacing['6']),\n gap: px(colors.spacing['3']),\n };\n // Scale-in: render at scale(0.96) + opacity 0 first, flip to 1 in a\n // useEffect so the CSS transition has a frame to animate from. Web\n // only; native uses `Modal animationType=\"fade\"` which is enough.\n const [entered, setEntered] = useState(false);\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 const enterStyle: ViewStyle =\n Platform.OS === 'web'\n ? ({\n opacity: entered ? 1 : 0,\n transform: [{ scale: entered ? 1 : 0.96 }],\n transitionProperty: 'opacity, transform',\n transitionDuration: '150ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n } as ViewStyle)\n : {};\n\n // Overlay's scrim + backdrop-filter share the same `entered` flag as\n // the content card, so the blur starts at 0 and the scrim at 0% on\n // the first paint, then both transition to their target values at the\n // next frame — same 150ms curve as the card. The blur duration is\n // bumped slightly (200ms) so it lands a hair AFTER the scrim instead\n // of slamming to full strength immediately, which reads more natural.\n //\n // We reach for a direct DOM ref + .style assignments here rather than\n // pass the styles through `<Pressable style={...}>`. Reason: rn-web's\n // style filter drops keys it doesn't recognize as RN style props —\n // and `backdropFilter`, `transitionProperty`, etc. fall through that\n // filter, taking the whole style fragment with them. Native gets a\n // flat scrim with no blur; RN doesn't have backdrop-filter and the\n // native shim would be an extra peer dep for negligible gain.\n const overlayDomRef = useRef<HTMLElement | null>(null);\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n const node = overlayDomRef.current;\n if (!node) {\n return;\n }\n // First paint: kick off transparent + zero blur so the next\n // assignment animates from 0 to target. We only need this on\n // the very first frame — the inline style on second frame\n // overwrites these.\n node.style.transitionProperty = 'background-color, backdrop-filter, -webkit-backdrop-filter';\n node.style.transitionDuration = '150ms, 200ms, 200ms';\n node.style.transitionTimingFunction = 'ease-out';\n if (entered) {\n node.style.backgroundColor = SCRIM_COLOR;\n node.style.backdropFilter = `blur(${BLUR_AMOUNT}px)`;\n node.style.setProperty('-webkit-backdrop-filter', `blur(${BLUR_AMOUNT}px)`);\n } else {\n node.style.backgroundColor = 'rgba(0, 0, 0, 0)';\n node.style.backdropFilter = 'blur(0px)';\n node.style.setProperty('-webkit-backdrop-filter', 'blur(0px)');\n }\n }, [entered]);\n\n // Web-only side effects: focus trap, scroll lock, Escape close,\n // initial focus on the first focusable inside the dialog. RN Modal\n // handles its own focus model on native, so the platform check keeps\n // these out of the native render path.\n useEffect(() => {\n if (!ctx.open) {\n return;\n }\n if (Platform.OS !== 'web') {\n return;\n }\n if (typeof document === 'undefined') {\n return;\n }\n\n const previouslyFocused = document.activeElement as HTMLElement | null;\n\n // Lock body scroll. Preserve any previously set inline style so\n // we don't accidentally clobber a consumer's lock from elsewhere.\n const prevBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n // Move focus into the dialog. Prefer the first focusable element;\n // if there isn't one, focus the dialog container itself so it\n // receives the keydown events.\n const focusFirst = () => {\n const node = contentRef.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 = contentRef.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\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n document.body.style.overflow = prevBodyOverflow;\n // Restore focus to whatever opened the dialog (the trigger),\n // falling back to the previously focused node if the trigger\n // is gone.\n const restoreTo = ctx.triggerRef.current ?? previouslyFocused;\n restoreTo?.focus?.();\n };\n }, [ctx.open, ctx.setOpen, ctx.triggerRef]);\n\n const onOverlayPress = useCallback(() => ctx.setOpen(false), [ctx]);\n\n return (\n <Modal\n visible={ctx.open}\n transparent\n // Web: 'none' so RN's built-in fade doesn't fight our own\n // overlay/content transitions (its layer-level fade caused\n // backdrop-filter to \"snap in\" at the end). Native: 'fade'\n // is what users expect on iOS/Android and we don't have a\n // CSS transition path there anyway.\n animationType={Platform.OS === 'web' ? 'none' : 'fade'}\n onRequestClose={() => ctx.setOpen(false)}\n >\n {/* Native blur layer. Renders nothing on web (the overlay's\n CSS backdrop-filter handles it) and renders nothing if\n expo-blur isn't installed (graceful degrade — the scrim\n Pressable below still dims the background). */}\n <BlurBackdrop intensity={60} tint={scheme === 'dark' ? 'dark' : 'light'} style={StyleSheet.absoluteFill} />\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={onOverlayPress}\n >\n <Pressable\n onPress={(event) => event.stopPropagation?.()}\n ref={(node) => {\n contentRef.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 {...(testID !== undefined ? { testID } : {})}\n className={cn('w-full max-w-md rounded-xl bg-semantic-background-elevated p-6 gap-3', className)}\n style={[contentStyle, { backgroundColor: colors.semantic.background.elevated }, enterStyle]}\n >\n <View\n className=\"flex-col gap-1.5\"\n style={{ flexDirection: 'column', gap: px(colors.spacing['2']) - 2 }}\n >\n {children}\n </View>\n </Pressable>\n </Pressable>\n </Modal>\n );\n};\n\nexport type DialogTextProps = {\n children?: ReactNode;\n className?: string;\n};\n\n/** Heading inside DialogContent. Wires `aria-labelledby`. */\nexport const DialogTitle = ({ children, className }: DialogTextProps) => {\n const ctx = useDialogContext('DialogTitle');\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/** Subtitle / description inside DialogContent. Wires `aria-describedby`. */\nexport const DialogDescription = ({ children, className }: DialogTextProps) => {\n const ctx = useDialogContext('DialogDescription');\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\nexport type DialogCloseProps = {\n /** Render the child as the close button (Slot pattern). Default true. */\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n accessibilityLabel?: string;\n};\n\n/**\n * Element that closes the dialog when activated. With `asChild` (default),\n * wraps the child. Without `asChild`, renders a default ✕ button — useful\n * for the canonical top-right corner close.\n */\nexport const DialogClose = ({\n asChild = true,\n children,\n className,\n testID,\n accessibilityLabel = 'Close',\n}: DialogCloseProps) => {\n const ctx = useDialogContext('DialogClose');\n const colors = useThemeColors();\n const onPress = useCallback(() => ctx.setOpen(false), [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n // Same dual-event story as DialogTrigger: pass both onClick (web\n // button) and onPress (RN Pressable / our own Button) so the\n // wrapped element fires regardless of its event model.\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 if (children !== undefined) {\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 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={cn('absolute right-3 top-3 w-8 h-8 items-center justify-center rounded-md', className)}\n style={{\n position: 'absolute',\n right: px(colors.spacing['3']),\n top: px(colors.spacing['3']),\n // 32×32 close hit target — component-density literal — not from theme\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: px(colors.radius.md),\n }}\n >\n <defaultSemanticIcons.close size={18} color={colors.semantic.text.muted} />\n </Pressable>\n );\n};\n\nexport type DialogFooterProps = {\n children?: ReactNode;\n className?: string;\n};\n\n/** Convenience row for dialog action buttons (right-aligned). */\nexport const DialogFooter = ({ children, className }: DialogFooterProps) => {\n const colors = useThemeColors();\n return (\n <View\n className={cn('mt-4 flex-row items-center justify-end gap-2', className)}\n style={{\n marginTop: px(colors.spacing['4']),\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: px(colors.spacing['2']),\n }}\n >\n {children}\n </View>\n );\n};\n\n/**\n * Public `Dialog` value — the root function plus its `.Trigger`, `.Content`,\n * `.Title`, `.Description`, `.Footer`, and `.Close` static members. `Object.assign`\n * produces a value whose inferred type carries the static properties, so `.d.ts`\n * consumers can write `<Dialog.Content>` without a separate import.\n */\nexport const Dialog = Object.assign(DialogRoot, {\n Trigger: DialogTrigger,\n Content: DialogContent,\n Title: DialogTitle,\n Description: DialogDescription,\n Footer: DialogFooter,\n Close: DialogClose,\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Dialog/Dialog.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-PLQPBMG2.js","sourcesContent":["'use client';\n\nimport {\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Modal, Platform, Pressable, Text as RNText, StyleSheet, View } from 'react-native';\nimport { defaultSemanticIcons } from '../../icons/default-semantic-icons';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useColorScheme } from '../../theme/use-color-scheme';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport { BlurBackdrop } from './blur-backdrop';\n\ntype DialogContextValue = {\n open: boolean;\n setOpen: (next: boolean) => void;\n titleId: string;\n descriptionId: string;\n triggerRef: { current: HTMLElement | null };\n};\n\nconst DialogContext = createContext<DialogContextValue | null>(null);\n\nconst useDialogContext = (label: string): DialogContextValue => {\n const ctx = useContext(DialogContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Dialog>.`);\n }\n return ctx;\n};\n\nexport type DialogProps = {\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 children?: ReactNode;\n};\n\n/**\n * Modal dialog. Owns open state and provides context for `DialogTrigger`,\n * `DialogContent`, `DialogTitle`, `DialogDescription`, and `DialogClose`.\n *\n * Behavior:\n * - Click the trigger to open. Click outside the content, press Escape,\n * or click an explicit close to dismiss.\n * - Focus is trapped inside the content while open (web). On close, focus\n * returns to whatever opened the dialog.\n * - Background scrolling is locked while open (web).\n *\n * Cross-platform: uses RN `<Modal>` as the visibility/portal primitive. On\n * web, additional focus-trap / scroll-lock / Escape-key effects layer on\n * top via the platform check inside `DialogContent`.\n */\nconst DialogRoot = ({ open, defaultOpen = false, onOpenChange, children }: DialogProps) => {\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: DialogContextValue = {\n open: current,\n setOpen,\n titleId: `${baseId}-title`,\n descriptionId: `${baseId}-description`,\n triggerRef,\n };\n\n return <DialogContext.Provider value={ctxValue}>{children}</DialogContext.Provider>;\n};\n\nexport type DialogTriggerProps = {\n /** Render the child as the trigger (Slot pattern). Default true — pass `false` for an inline button. */\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Element that opens the dialog when activated. Uses `asChild` by default so\n * any element (Button, Link, custom Pressable) becomes the trigger.\n */\nexport const DialogTrigger = ({ asChild = true, children, className, testID }: DialogTriggerProps) => {\n const ctx = useDialogContext('DialogTrigger');\n const onPress = useCallback(() => ctx.setOpen(true), [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n // Pass both onClick (web HTML buttons) AND onPress (RN Pressable /\n // our own Button) so the trigger fires regardless of which event\n // model the wrapped child speaks. The child's existing handler\n // runs first, then we open.\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// On native, raw strings rendered as children of a non-Text component\n// throw \"Text strings must be rendered within a <Text> component\". On\n// web, react-native-web silently tolerates it. Wrap any string/number\n// children in an RNText so the same JSX renders cleanly on both\n// platforms. Non-string children are passed through unchanged.\nfunction wrapStringChildren(children: ReactNode): ReactNode {\n if (typeof children === 'string' || typeof children === 'number') {\n return <RNText>{children}</RNText>;\n }\n return children;\n}\n\n// Scrim + blur target values — applied at the entered state on web,\n// always on as a flat scrim on native (RN doesn't have backdrop-filter\n// and the native shim would be an extra peer dep for vanishingly little\n// visual gain on a v0 component).\n// 24% scrim + 4px blur — strong enough to push the page back but the\n// content underneath is still legible. Earlier 32%/8px felt like a frosted\n// glass slab that completely obscured the page; this lets the page show\n// through as \"behind glass, slightly out of focus.\"\nconst SCRIM_COLOR = 'rgba(0, 0, 0, 0.24)';\nconst BLUR_AMOUNT = 4;\n\n// Static overlay layout — alignment, fixed positioning. The animatable\n// bits (scrim color, backdrop-filter blur) live in a useEffect inside\n// the component that pokes them onto the DOM ref directly so rn-web's\n// style filter can't strip the non-RN keys (backdropFilter,\n// transitionProperty). On web the styles start at blur(0px) +\n// transparent and transition to the target values on the next frame.\n//\n// Why not put blur(8px) here as a constant: when blur is applied to a\n// layer that's mid-fade (e.g. RN Modal's animationType=\"fade\" fades\n// opacity from 0 → 1), Safari and Chromium GPU-composite the layer\n// without rendering backdrop-filter — so the blur appears to \"snap in\"\n// at the end of the fade. Animating blur explicitly via our own\n// transition (and disabling the Modal's fade on web) avoids the snap.\nconst OVERLAY_LAYOUT_BASE: 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 alignItems: 'center',\n justifyContent: 'center',\n // On native the BlurBackdrop sibling renders BEHIND this overlay and\n // already provides dim + frosted-glass via expo-blur's `tint`/`intensity`.\n // Painting SCRIM_COLOR on top would mask the blur entirely (the user\n // sees only a flat tint), so the overlay stays transparent and the\n // BlurView is the dominant visual on native.\n ...(Platform.OS === 'web' ? ({ zIndex: 50 } as ViewStyle) : { backgroundColor: 'transparent' }),\n};\n\n// Layout / animation only — theme-driven dimensions are merged inside\n// DialogContent below.\nconst CONTENT_LAYOUT_BASE: ViewStyle = {\n width: '100%',\n maxWidth: 480, // component-density literal — not from theme\n ...(Platform.OS === 'web'\n ? ({\n boxShadow: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)',\n } as ViewStyle)\n : { elevation: 24 }),\n};\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 type DialogContentProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * The visible dialog surface — overlay + centered card. Renders only when\n * the parent `Dialog` is open. On web: traps focus inside, locks body\n * scroll, and dismisses on Escape or overlay click.\n */\nexport const DialogContent = ({ children, className, testID }: DialogContentProps) => {\n const ctx = useDialogContext('DialogContent');\n const colors = useThemeColors();\n const scheme = useColorScheme();\n const contentRef = useRef<HTMLDivElement | null>(null);\n const overlayStyle: ViewStyle = {\n ...OVERLAY_LAYOUT_BASE,\n padding: px(colors.spacing['4']),\n };\n const contentStyle: ViewStyle = {\n ...CONTENT_LAYOUT_BASE,\n borderRadius: px(colors.radius.xl),\n padding: px(colors.spacing['6']),\n gap: px(colors.spacing['3']),\n };\n // Scale-in: render at scale(0.96) + opacity 0 first, flip to 1 in a\n // useEffect so the CSS transition has a frame to animate from. Web\n // only; native uses `Modal animationType=\"fade\"` which is enough.\n const [entered, setEntered] = useState(false);\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 const enterStyle: ViewStyle =\n Platform.OS === 'web'\n ? ({\n opacity: entered ? 1 : 0,\n transform: [{ scale: entered ? 1 : 0.96 }],\n transitionProperty: 'opacity, transform',\n transitionDuration: '150ms',\n transitionTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',\n } as ViewStyle)\n : {};\n\n // Overlay's scrim + backdrop-filter share the same `entered` flag as\n // the content card, so the blur starts at 0 and the scrim at 0% on\n // the first paint, then both transition to their target values at the\n // next frame — same 150ms curve as the card. The blur duration is\n // bumped slightly (200ms) so it lands a hair AFTER the scrim instead\n // of slamming to full strength immediately, which reads more natural.\n //\n // We reach for a direct DOM ref + .style assignments here rather than\n // pass the styles through `<Pressable style={...}>`. Reason: rn-web's\n // style filter drops keys it doesn't recognize as RN style props —\n // and `backdropFilter`, `transitionProperty`, etc. fall through that\n // filter, taking the whole style fragment with them. Native gets a\n // flat scrim with no blur; RN doesn't have backdrop-filter and the\n // native shim would be an extra peer dep for negligible gain.\n const overlayDomRef = useRef<HTMLElement | null>(null);\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n const node = overlayDomRef.current;\n if (!node) {\n return;\n }\n // First paint: kick off transparent + zero blur so the next\n // assignment animates from 0 to target. We only need this on\n // the very first frame — the inline style on second frame\n // overwrites these.\n node.style.transitionProperty = 'background-color, backdrop-filter, -webkit-backdrop-filter';\n node.style.transitionDuration = '150ms, 200ms, 200ms';\n node.style.transitionTimingFunction = 'ease-out';\n if (entered) {\n node.style.backgroundColor = SCRIM_COLOR;\n node.style.backdropFilter = `blur(${BLUR_AMOUNT}px)`;\n node.style.setProperty('-webkit-backdrop-filter', `blur(${BLUR_AMOUNT}px)`);\n } else {\n node.style.backgroundColor = 'rgba(0, 0, 0, 0)';\n node.style.backdropFilter = 'blur(0px)';\n node.style.setProperty('-webkit-backdrop-filter', 'blur(0px)');\n }\n }, [entered]);\n\n // Web-only side effects: focus trap, scroll lock, Escape close,\n // initial focus on the first focusable inside the dialog. RN Modal\n // handles its own focus model on native, so the platform check keeps\n // these out of the native render path.\n useEffect(() => {\n if (!ctx.open) {\n return;\n }\n if (Platform.OS !== 'web') {\n return;\n }\n if (typeof document === 'undefined') {\n return;\n }\n\n const previouslyFocused = document.activeElement as HTMLElement | null;\n\n // Lock body scroll. Preserve any previously set inline style so\n // we don't accidentally clobber a consumer's lock from elsewhere.\n const prevBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n // Move focus into the dialog. Prefer the first focusable element;\n // if there isn't one, focus the dialog container itself so it\n // receives the keydown events.\n const focusFirst = () => {\n const node = contentRef.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 = contentRef.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\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n document.body.style.overflow = prevBodyOverflow;\n // Restore focus to whatever opened the dialog (the trigger),\n // falling back to the previously focused node if the trigger\n // is gone.\n const restoreTo = ctx.triggerRef.current ?? previouslyFocused;\n restoreTo?.focus?.();\n };\n }, [ctx.open, ctx.setOpen, ctx.triggerRef]);\n\n const onOverlayPress = useCallback(() => ctx.setOpen(false), [ctx]);\n\n return (\n <Modal\n visible={ctx.open}\n transparent\n // Web: 'none' so RN's built-in fade doesn't fight our own\n // overlay/content transitions (its layer-level fade caused\n // backdrop-filter to \"snap in\" at the end). Native: 'fade'\n // is what users expect on iOS/Android and we don't have a\n // CSS transition path there anyway.\n animationType={Platform.OS === 'web' ? 'none' : 'fade'}\n onRequestClose={() => ctx.setOpen(false)}\n >\n {/* Native blur layer. Renders nothing on web (the overlay's\n CSS backdrop-filter handles it) and renders nothing if\n expo-blur isn't installed (graceful degrade — the scrim\n Pressable below still dims the background). */}\n <BlurBackdrop intensity={60} tint={scheme === 'dark' ? 'dark' : 'light'} style={StyleSheet.absoluteFill} />\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={onOverlayPress}\n >\n <Pressable\n onPress={(event) => event.stopPropagation?.()}\n ref={(node) => {\n contentRef.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 {...(testID !== undefined ? { testID } : {})}\n className={cn('w-full max-w-md rounded-xl bg-semantic-background-elevated p-6 gap-3', className)}\n style={[contentStyle, { backgroundColor: colors.semantic.background.elevated }, enterStyle]}\n >\n <View\n className=\"flex-col gap-1.5\"\n style={{ flexDirection: 'column', gap: px(colors.spacing['2']) - 2 }}\n >\n {children}\n </View>\n </Pressable>\n </Pressable>\n </Modal>\n );\n};\n\nexport type DialogTextProps = {\n children?: ReactNode;\n className?: string;\n};\n\n/** Heading inside DialogContent. Wires `aria-labelledby`. */\nexport const DialogTitle = ({ children, className }: DialogTextProps) => {\n const ctx = useDialogContext('DialogTitle');\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/** Subtitle / description inside DialogContent. Wires `aria-describedby`. */\nexport const DialogDescription = ({ children, className }: DialogTextProps) => {\n const ctx = useDialogContext('DialogDescription');\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\nexport type DialogCloseProps = {\n /** Render the child as the close button (Slot pattern). Default true. */\n asChild?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n accessibilityLabel?: string;\n};\n\n/**\n * Element that closes the dialog when activated. With `asChild` (default),\n * wraps the child. Without `asChild`, renders a default ✕ button — useful\n * for the canonical top-right corner close.\n */\nexport const DialogClose = ({\n asChild = true,\n children,\n className,\n testID,\n accessibilityLabel = 'Close',\n}: DialogCloseProps) => {\n const ctx = useDialogContext('DialogClose');\n const colors = useThemeColors();\n const onPress = useCallback(() => ctx.setOpen(false), [ctx]);\n\n if (asChild && isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n // Same dual-event story as DialogTrigger: pass both onClick (web\n // button) and onPress (RN Pressable / our own Button) so the\n // wrapped element fires regardless of its event model.\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 if (children !== undefined) {\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 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={cn('absolute right-3 top-3 w-8 h-8 items-center justify-center rounded-md', className)}\n style={{\n position: 'absolute',\n right: px(colors.spacing['3']),\n top: px(colors.spacing['3']),\n // 32×32 close hit target — component-density literal — not from theme\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: px(colors.radius.md),\n }}\n >\n <defaultSemanticIcons.close size={18} color={colors.semantic.text.muted} />\n </Pressable>\n );\n};\n\nexport type DialogFooterProps = {\n children?: ReactNode;\n className?: string;\n};\n\n/** Convenience row for dialog action buttons (right-aligned). */\nexport const DialogFooter = ({ children, className }: DialogFooterProps) => {\n const colors = useThemeColors();\n return (\n <View\n className={cn('mt-4 flex-row items-center justify-end gap-2', className)}\n style={{\n marginTop: px(colors.spacing['4']),\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: px(colors.spacing['2']),\n }}\n >\n {children}\n </View>\n );\n};\n\n/**\n * Public `Dialog` value — the root function plus its `.Trigger`, `.Content`,\n * `.Title`, `.Description`, `.Footer`, and `.Close` static members. `Object.assign`\n * produces a value whose inferred type carries the static properties, so `.d.ts`\n * consumers can write `<Dialog.Content>` without a separate import.\n */\nexport const Dialog = Object.assign(DialogRoot, {\n Trigger: DialogTrigger,\n Content: DialogContent,\n Title: DialogTitle,\n Description: DialogDescription,\n Footer: DialogFooter,\n Close: DialogClose,\n});\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { px } from './chunk-5A2QOOVN.js';
|
|
2
|
-
import { cn } from './chunk-CHXHRJNZ.js';
|
|
3
2
|
import { useThemeColors } from './chunk-R5JMDDCB.js';
|
|
3
|
+
import { cn } from './chunk-CHXHRJNZ.js';
|
|
4
4
|
import { __name } from './chunk-WCQVDF3K.js';
|
|
5
5
|
import { View, Text } from 'react-native';
|
|
6
6
|
import { jsx } from 'nativewind/jsx-runtime';
|
|
@@ -140,5 +140,5 @@ var Card = Object.assign(CardRoot, {
|
|
|
140
140
|
});
|
|
141
141
|
|
|
142
142
|
export { Card };
|
|
143
|
-
//# sourceMappingURL=chunk-
|
|
144
|
-
//# sourceMappingURL=chunk-
|
|
143
|
+
//# sourceMappingURL=chunk-PQW5LKAI.js.map
|
|
144
|
+
//# sourceMappingURL=chunk-PQW5LKAI.js.map
|