@nori-ui/core 0.0.5 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation/animated-view.cjs +13 -0
- package/dist/animation/animated-view.cjs.map +1 -0
- package/dist/animation/animated-view.d.cts +6 -0
- package/dist/animation/animated-view.d.ts +6 -0
- package/dist/animation/animated-view.js +4 -0
- package/dist/animation/animated-view.js.map +1 -0
- package/dist/animation/animated-view.web.cjs +9 -0
- package/dist/animation/animated-view.web.cjs.map +1 -0
- package/dist/animation/animated-view.web.d.cts +5 -0
- package/dist/animation/animated-view.web.d.ts +5 -0
- package/dist/animation/animated-view.web.js +8 -0
- package/dist/animation/animated-view.web.js.map +1 -0
- package/dist/animation/use-animated-number.cjs +80 -0
- package/dist/animation/use-animated-number.cjs.map +1 -0
- package/dist/animation/use-animated-number.d.cts +8 -0
- package/dist/animation/use-animated-number.d.ts +8 -0
- package/dist/animation/use-animated-number.js +4 -0
- package/dist/animation/use-animated-number.js.map +1 -0
- package/dist/animation/use-animated-number.web.cjs +28 -0
- package/dist/animation/use-animated-number.web.cjs.map +1 -0
- package/dist/animation/use-animated-number.web.d.cts +8 -0
- package/dist/animation/use-animated-number.web.d.ts +8 -0
- package/dist/animation/use-animated-number.web.js +25 -0
- package/dist/animation/use-animated-number.web.js.map +1 -0
- package/dist/{chunk-RX7UULY3.js → chunk-33S7ADWM.js} +3 -3
- package/dist/{chunk-RX7UULY3.js.map → chunk-33S7ADWM.js.map} +1 -1
- package/dist/chunk-3BDDPFCI.js +108 -0
- package/dist/chunk-3BDDPFCI.js.map +1 -0
- package/dist/chunk-3F4TXKDY.js +314 -0
- package/dist/chunk-3F4TXKDY.js.map +1 -0
- package/dist/chunk-5A2QOOVN.js +15 -0
- package/dist/chunk-5A2QOOVN.js.map +1 -0
- package/dist/chunk-5XEGZFG5.js +208 -0
- package/dist/chunk-5XEGZFG5.js.map +1 -0
- package/dist/chunk-6AD6KCVB.js +178 -0
- package/dist/chunk-6AD6KCVB.js.map +1 -0
- package/dist/chunk-7GPDNQSX.js +967 -0
- package/dist/chunk-7GPDNQSX.js.map +1 -0
- package/dist/chunk-7UKRN73P.js +42 -0
- package/dist/chunk-7UKRN73P.js.map +1 -0
- package/dist/chunk-7Z4NMNX6.js +64 -0
- package/dist/chunk-7Z4NMNX6.js.map +1 -0
- package/dist/chunk-ACLHDHX3.js +29 -0
- package/dist/chunk-ACLHDHX3.js.map +1 -0
- package/dist/chunk-BZLT6R62.js +80 -0
- package/dist/chunk-BZLT6R62.js.map +1 -0
- package/dist/chunk-CCUXO2HN.js +450 -0
- package/dist/chunk-CCUXO2HN.js.map +1 -0
- package/dist/chunk-CHXHRJNZ.js +43 -0
- package/dist/chunk-CHXHRJNZ.js.map +1 -0
- package/dist/chunk-DDGMLLS3.js +188 -0
- package/dist/chunk-DDGMLLS3.js.map +1 -0
- package/dist/chunk-EWWQQ5DB.js +654 -0
- package/dist/chunk-EWWQQ5DB.js.map +1 -0
- package/dist/chunk-FEPTH5RV.js +169 -0
- package/dist/chunk-FEPTH5RV.js.map +1 -0
- package/dist/{chunk-SSTXLK5I.js → chunk-FT2XBBQJ.js} +42 -6
- package/dist/chunk-FT2XBBQJ.js.map +1 -0
- package/dist/chunk-IKLA2CVQ.js +260 -0
- package/dist/chunk-IKLA2CVQ.js.map +1 -0
- package/dist/chunk-JQQ3FBN7.js +18 -0
- package/dist/chunk-JQQ3FBN7.js.map +1 -0
- package/dist/chunk-JSAG5YO7.js +69 -0
- package/dist/chunk-JSAG5YO7.js.map +1 -0
- package/dist/chunk-JZ774T7U.js +76 -0
- package/dist/chunk-JZ774T7U.js.map +1 -0
- package/dist/chunk-KWRDJPP3.js +10 -0
- package/dist/chunk-KWRDJPP3.js.map +1 -0
- package/dist/chunk-LVWNMQGR.js +1106 -0
- package/dist/chunk-LVWNMQGR.js.map +1 -0
- package/dist/chunk-LWLK6HSW.js +143 -0
- package/dist/chunk-LWLK6HSW.js.map +1 -0
- package/dist/chunk-MDOZGILD.js +134 -0
- package/dist/chunk-MDOZGILD.js.map +1 -0
- package/dist/chunk-MKSDYRWQ.js +446 -0
- package/dist/chunk-MKSDYRWQ.js.map +1 -0
- package/dist/chunk-MRJWPRCX.js +80 -0
- package/dist/chunk-MRJWPRCX.js.map +1 -0
- package/dist/chunk-NRYWNOG5.js +410 -0
- package/dist/chunk-NRYWNOG5.js.map +1 -0
- package/dist/chunk-OMU4R4Y5.js +144 -0
- package/dist/chunk-OMU4R4Y5.js.map +1 -0
- package/dist/chunk-PNP7L4TA.js +103 -0
- package/dist/chunk-PNP7L4TA.js.map +1 -0
- package/dist/chunk-QI6646JZ.js +3 -0
- package/dist/{chunk-UAKFCMWK.js.map → chunk-QI6646JZ.js.map} +1 -1
- package/dist/chunk-QJNV7YQP.js +138 -0
- package/dist/chunk-QJNV7YQP.js.map +1 -0
- package/dist/chunk-R5JMDDCB.js +292 -0
- package/dist/chunk-R5JMDDCB.js.map +1 -0
- package/dist/chunk-RB3YBWQ4.js +77 -0
- package/dist/chunk-RB3YBWQ4.js.map +1 -0
- package/dist/chunk-RFW5SRZA.js +23 -0
- package/dist/chunk-RFW5SRZA.js.map +1 -0
- package/dist/chunk-RGJ3NBKE.js +8 -0
- package/dist/chunk-RGJ3NBKE.js.map +1 -0
- package/dist/chunk-SFNDR6DI.js +485 -0
- package/dist/chunk-SFNDR6DI.js.map +1 -0
- package/dist/chunk-SWC5CNKE.js +13 -0
- package/dist/chunk-SWC5CNKE.js.map +1 -0
- package/dist/chunk-TLS54G6Y.js +15 -0
- package/dist/chunk-TLS54G6Y.js.map +1 -0
- package/dist/chunk-WCQVDF3K.js +12 -0
- package/dist/{chunk-7QVYU63E.js.map → chunk-WCQVDF3K.js.map} +1 -1
- package/dist/chunk-WGT345SV.js +427 -0
- package/dist/chunk-WGT345SV.js.map +1 -0
- package/dist/chunk-X7APG7G2.js +1566 -0
- package/dist/chunk-X7APG7G2.js.map +1 -0
- package/dist/chunk-XALU6LOT.js +306 -0
- package/dist/chunk-XALU6LOT.js.map +1 -0
- package/dist/chunk-YNKKEO2A.js +336 -0
- package/dist/chunk-YNKKEO2A.js.map +1 -0
- package/dist/chunk-ZBW3BA5R.js +148 -0
- package/dist/chunk-ZBW3BA5R.js.map +1 -0
- package/dist/{chunk-FXKIWONG.js → chunk-ZIBNLXIV.js} +12 -6
- package/dist/chunk-ZIBNLXIV.js.map +1 -0
- package/dist/chunk-ZMSIYLSI.js +563 -0
- package/dist/chunk-ZMSIYLSI.js.map +1 -0
- package/dist/chunk-ZQMNGPLE.js +981 -0
- package/dist/chunk-ZQMNGPLE.js.map +1 -0
- package/dist/chunk-ZRD4FQBT.js +153 -0
- package/dist/chunk-ZRD4FQBT.js.map +1 -0
- package/dist/client.cjs +11289 -439
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +68 -117
- package/dist/client.d.ts +68 -117
- package/dist/client.js +58 -40
- package/dist/client.js.map +1 -1
- package/dist/components/Accordion/index.cjs +900 -0
- package/dist/components/Accordion/index.cjs.map +1 -0
- package/dist/components/Accordion/index.d.cts +72 -0
- package/dist/components/Accordion/index.d.ts +72 -0
- package/dist/components/Accordion/index.js +10 -0
- package/dist/components/Accordion/index.js.map +1 -0
- package/dist/components/Alert/index.cjs +567 -0
- package/dist/components/Alert/index.cjs.map +1 -0
- package/dist/components/Alert/index.d.cts +41 -0
- package/dist/components/Alert/index.d.ts +41 -0
- package/dist/components/Alert/index.js +8 -0
- package/dist/components/Alert/index.js.map +1 -0
- package/dist/components/AlertDialog/index.cjs +892 -0
- package/dist/components/AlertDialog/index.cjs.map +1 -0
- package/dist/components/AlertDialog/index.d.cts +68 -0
- package/dist/components/AlertDialog/index.d.ts +68 -0
- package/dist/components/AlertDialog/index.js +9 -0
- package/dist/components/AlertDialog/index.js.map +1 -0
- package/dist/components/Avatar/index.cjs +427 -0
- package/dist/components/Avatar/index.cjs.map +1 -0
- package/dist/components/Avatar/index.d.cts +40 -0
- package/dist/components/Avatar/index.d.ts +40 -0
- package/dist/components/Avatar/index.js +7 -0
- package/dist/components/Avatar/index.js.map +1 -0
- package/dist/components/Badge/index.cjs +433 -0
- package/dist/components/Badge/index.cjs.map +1 -0
- package/dist/components/Badge/index.d.cts +35 -0
- package/dist/components/Badge/index.d.ts +35 -0
- package/dist/components/Badge/index.js +7 -0
- package/dist/components/Badge/index.js.map +1 -0
- package/dist/components/Box/index.cjs +415 -0
- package/dist/components/Box/index.cjs.map +1 -0
- package/dist/components/Box/index.d.cts +24 -0
- package/dist/components/Box/index.d.ts +24 -0
- package/dist/components/Box/index.js +9 -0
- package/dist/components/Box/index.js.map +1 -0
- package/dist/components/Breadcrumb/index.cjs +1939 -0
- package/dist/components/Breadcrumb/index.cjs.map +1 -0
- package/dist/components/Breadcrumb/index.d.cts +186 -0
- package/dist/components/Breadcrumb/index.d.ts +186 -0
- package/dist/components/Breadcrumb/index.js +11 -0
- package/dist/components/Breadcrumb/index.js.map +1 -0
- package/dist/components/Button/index.cjs +631 -0
- package/dist/components/Button/index.cjs.map +1 -0
- package/dist/components/Button/index.d.cts +27 -0
- package/dist/components/Button/index.d.ts +27 -0
- package/dist/components/Button/index.js +9 -0
- package/dist/components/Button/index.js.map +1 -0
- package/dist/components/Calendar/index.cjs +3017 -0
- package/dist/components/Calendar/index.cjs.map +1 -0
- package/dist/components/Calendar/index.d.cts +169 -0
- package/dist/components/Calendar/index.d.ts +169 -0
- package/dist/components/Calendar/index.js +11 -0
- package/dist/components/Calendar/index.js.map +1 -0
- package/dist/components/Card/index.cjs +469 -0
- package/dist/components/Card/index.cjs.map +1 -0
- package/dist/components/Card/index.d.cts +33 -0
- package/dist/components/Card/index.d.ts +33 -0
- package/dist/components/Card/index.js +7 -0
- package/dist/components/Card/index.js.map +1 -0
- package/dist/components/Checkbox/index.cjs +590 -0
- package/dist/components/Checkbox/index.cjs.map +1 -0
- package/dist/components/Checkbox/index.d.cts +22 -0
- package/dist/components/Checkbox/index.d.ts +22 -0
- package/dist/components/Checkbox/index.js +9 -0
- package/dist/components/Checkbox/index.js.map +1 -0
- package/dist/components/Dialog/index.cjs +888 -0
- package/dist/components/Dialog/index.cjs.map +1 -0
- package/dist/components/Dialog/index.d.cts +56 -0
- package/dist/components/Dialog/index.d.ts +56 -0
- package/dist/components/Dialog/index.js +10 -0
- package/dist/components/Dialog/index.js.map +1 -0
- package/dist/components/FloatButton/index.cjs +1254 -0
- package/dist/components/FloatButton/index.cjs.map +1 -0
- package/dist/components/FloatButton/index.d.cts +133 -0
- package/dist/components/FloatButton/index.d.ts +133 -0
- package/dist/components/FloatButton/index.js +11 -0
- package/dist/components/FloatButton/index.js.map +1 -0
- package/dist/components/HStack/index.cjs +480 -0
- package/dist/components/HStack/index.cjs.map +1 -0
- package/dist/components/HStack/index.d.cts +24 -0
- package/dist/components/HStack/index.d.ts +24 -0
- package/dist/components/HStack/index.js +9 -0
- package/dist/components/HStack/index.js.map +1 -0
- package/dist/components/InputGroup/index.cjs +638 -0
- package/dist/components/InputGroup/index.cjs.map +1 -0
- package/dist/components/InputGroup/index.d.cts +33 -0
- package/dist/components/InputGroup/index.d.ts +33 -0
- package/dist/components/InputGroup/index.js +7 -0
- package/dist/components/InputGroup/index.js.map +1 -0
- package/dist/components/Pagination/index.cjs +2501 -0
- package/dist/components/Pagination/index.cjs.map +1 -0
- package/dist/components/Pagination/index.d.cts +164 -0
- package/dist/components/Pagination/index.d.ts +164 -0
- package/dist/components/Pagination/index.js +12 -0
- package/dist/components/Pagination/index.js.map +1 -0
- package/dist/components/Popover/index.cjs +739 -0
- package/dist/components/Popover/index.cjs.map +1 -0
- package/dist/components/Popover/index.d.cts +44 -0
- package/dist/components/Popover/index.d.ts +44 -0
- package/dist/components/Popover/index.js +8 -0
- package/dist/components/Popover/index.js.map +1 -0
- package/dist/components/Progress/index.cjs +493 -0
- package/dist/components/Progress/index.cjs.map +1 -0
- package/dist/components/Progress/index.d.cts +63 -0
- package/dist/components/Progress/index.d.ts +63 -0
- package/dist/components/Progress/index.js +7 -0
- package/dist/components/Progress/index.js.map +1 -0
- package/dist/components/Radio/index.cjs +584 -0
- package/dist/components/Radio/index.cjs.map +1 -0
- package/dist/components/Radio/index.d.cts +51 -0
- package/dist/components/Radio/index.d.ts +51 -0
- package/dist/components/Radio/index.js +7 -0
- package/dist/components/Radio/index.js.map +1 -0
- package/dist/components/SegmentedControl/index.cjs +502 -0
- package/dist/components/SegmentedControl/index.cjs.map +1 -0
- package/dist/components/SegmentedControl/index.d.cts +45 -0
- package/dist/components/SegmentedControl/index.d.ts +45 -0
- package/dist/components/SegmentedControl/index.js +7 -0
- package/dist/components/SegmentedControl/index.js.map +1 -0
- package/dist/components/Select/index.cjs +1359 -0
- package/dist/components/Select/index.cjs.map +1 -0
- package/dist/components/Select/index.d.cts +140 -0
- package/dist/components/Select/index.d.ts +140 -0
- package/dist/components/Select/index.js +8 -0
- package/dist/components/Select/index.js.map +1 -0
- package/dist/components/Separator/index.cjs +358 -0
- package/dist/components/Separator/index.cjs.map +1 -0
- package/dist/components/Separator/index.d.cts +28 -0
- package/dist/components/Separator/index.d.ts +28 -0
- package/dist/components/Separator/index.js +6 -0
- package/dist/components/Separator/index.js.map +1 -0
- package/dist/components/Skeleton/index.cjs +384 -0
- package/dist/components/Skeleton/index.cjs.map +1 -0
- package/dist/components/Skeleton/index.d.cts +30 -0
- package/dist/components/Skeleton/index.d.ts +30 -0
- package/dist/components/Skeleton/index.js +6 -0
- package/dist/components/Skeleton/index.js.map +1 -0
- package/dist/components/Slider/index.cjs +880 -0
- package/dist/components/Slider/index.cjs.map +1 -0
- package/dist/components/Slider/index.d.cts +84 -0
- package/dist/components/Slider/index.d.ts +84 -0
- package/dist/components/Slider/index.js +6 -0
- package/dist/components/Slider/index.js.map +1 -0
- package/dist/components/Spinner/index.cjs +32 -0
- package/dist/components/Spinner/index.cjs.map +1 -0
- package/dist/components/Spinner/index.d.cts +25 -0
- package/dist/components/Spinner/index.d.ts +25 -0
- package/dist/components/Spinner/index.js +4 -0
- package/dist/components/Spinner/index.js.map +1 -0
- package/dist/components/Switch/index.cjs +623 -0
- package/dist/components/Switch/index.cjs.map +1 -0
- package/dist/components/Switch/index.d.cts +22 -0
- package/dist/components/Switch/index.d.ts +22 -0
- package/dist/components/Switch/index.js +10 -0
- package/dist/components/Switch/index.js.map +1 -0
- package/dist/components/Tabs/index.cjs +630 -0
- package/dist/components/Tabs/index.cjs.map +1 -0
- package/dist/components/Tabs/index.d.cts +63 -0
- package/dist/components/Tabs/index.d.ts +63 -0
- package/dist/components/Tabs/index.js +7 -0
- package/dist/components/Tabs/index.js.map +1 -0
- package/dist/components/Text/index.cjs +401 -0
- package/dist/components/Text/index.cjs.map +1 -0
- package/dist/components/Text/index.d.cts +24 -0
- package/dist/components/Text/index.d.ts +24 -0
- package/dist/components/Text/index.js +7 -0
- package/dist/components/Text/index.js.map +1 -0
- package/dist/components/TextArea/index.cjs +482 -0
- package/dist/components/TextArea/index.cjs.map +1 -0
- package/dist/components/TextArea/index.d.cts +25 -0
- package/dist/components/TextArea/index.d.ts +25 -0
- package/dist/components/TextArea/index.js +8 -0
- package/dist/components/TextArea/index.js.map +1 -0
- package/dist/components/TextInput/index.cjs +477 -0
- package/dist/components/TextInput/index.cjs.map +1 -0
- package/dist/components/TextInput/index.d.cts +33 -0
- package/dist/components/TextInput/index.d.ts +33 -0
- package/dist/components/TextInput/index.js +7 -0
- package/dist/components/TextInput/index.js.map +1 -0
- package/dist/components/Toast/index.cjs +167 -0
- package/dist/components/Toast/index.cjs.map +1 -0
- package/dist/components/Toast/index.d.cts +143 -0
- package/dist/components/Toast/index.d.ts +143 -0
- package/dist/components/Toast/index.js +4 -0
- package/dist/components/Toast/index.js.map +1 -0
- package/dist/components/Toggle/index.cjs +770 -0
- package/dist/components/Toggle/index.cjs.map +1 -0
- package/dist/components/Toggle/index.d.cts +83 -0
- package/dist/components/Toggle/index.d.ts +83 -0
- package/dist/components/Toggle/index.js +7 -0
- package/dist/components/Toggle/index.js.map +1 -0
- package/dist/components/Tooltip/index.cjs +813 -0
- package/dist/components/Tooltip/index.cjs.map +1 -0
- package/dist/components/Tooltip/index.d.cts +55 -0
- package/dist/components/Tooltip/index.d.ts +55 -0
- package/dist/components/Tooltip/index.js +8 -0
- package/dist/components/Tooltip/index.js.map +1 -0
- package/dist/components/VStack/index.cjs +480 -0
- package/dist/components/VStack/index.cjs.map +1 -0
- package/dist/components/VStack/index.d.cts +19 -0
- package/dist/components/VStack/index.d.ts +19 -0
- package/dist/components/VStack/index.js +9 -0
- package/dist/components/VStack/index.js.map +1 -0
- package/dist/i18n/index.cjs +39 -3
- package/dist/i18n/index.cjs.map +1 -1
- package/dist/i18n/index.d.cts +4 -60
- package/dist/i18n/index.d.ts +4 -60
- package/dist/i18n/index.js +3 -2
- package/dist/icons/index.cjs +326 -26
- package/dist/icons/index.cjs.map +1 -1
- package/dist/icons/index.js +4 -3
- package/dist/index-D3_M3G6U.d.ts +19 -0
- package/dist/index-uXPK_Rg8.d.cts +19 -0
- package/dist/index.cjs +11176 -463
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +39 -183
- package/dist/index.d.ts +39 -183
- package/dist/index.js +49 -9
- package/dist/resolve-D-GOaxZy.d.cts +60 -0
- package/dist/resolve-D-GOaxZy.d.ts +60 -0
- package/dist/slot/index.cjs +9 -3
- package/dist/slot/index.cjs.map +1 -1
- package/dist/slot/index.js +2 -2
- package/dist/stories/index.cjs +108 -0
- package/dist/stories/index.cjs.map +1 -0
- package/dist/stories/index.d.cts +46 -0
- package/dist/stories/index.d.ts +46 -0
- package/dist/stories/index.js +94 -0
- package/dist/stories/index.js.map +1 -0
- package/dist/theme/index.cjs +259 -26
- package/dist/theme/index.cjs.map +1 -1
- package/dist/theme/index.d.cts +26 -0
- package/dist/theme/index.d.ts +26 -0
- package/dist/theme/index.js +4 -3
- package/dist/use-theme-CoqfnvRs.d.cts +112 -0
- package/dist/use-theme-CoqfnvRs.d.ts +112 -0
- package/dist/utils/cn.cjs +18 -6
- package/dist/utils/cn.cjs.map +1 -1
- package/dist/utils/cn.js +2 -2
- package/package.json +41 -10
- package/dist/chunk-6OABNXBY.js +0 -213
- package/dist/chunk-6OABNXBY.js.map +0 -1
- package/dist/chunk-7QVYU63E.js +0 -6
- package/dist/chunk-FXKIWONG.js.map +0 -1
- package/dist/chunk-NDEDMCHT.js +0 -40
- package/dist/chunk-NDEDMCHT.js.map +0 -1
- package/dist/chunk-SSTXLK5I.js.map +0 -1
- package/dist/chunk-UAKFCMWK.js +0 -3
- package/dist/chunk-X3AJNNF6.js +0 -539
- package/dist/chunk-X3AJNNF6.js.map +0 -1
- package/dist/chunk-XGM2K4TT.js +0 -31
- package/dist/chunk-XGM2K4TT.js.map +0 -1
- package/dist/stories/story-registry.cjs +0 -776
- package/dist/stories/story-registry.cjs.map +0 -1
- package/dist/stories/story-registry.d.cts +0 -13
- package/dist/stories/story-registry.d.ts +0 -13
- package/dist/stories/story-registry.js +0 -106
- package/dist/stories/story-registry.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/theme/px.ts","../../../../tokens/build/theme.ts","../../../src/theme/context.tsx","../../../src/theme/use-color-scheme.tsx","../../../src/theme/use-theme-colors.ts","../../../src/utils/cn.ts","../../../src/components/TextInput/TextInput.tsx"],"names":["createContext","Platform","useContext","useState","Appearance","useEffect","useId","useRef","jsxs","View","jsx","Pressable","RNText","RNTextInput"],"mappings":";;;;;;;;;;AAmBO,SAAS,GAAG,KAAA,EAAgC;AAC/C,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,MAAM,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AACjC,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA;AACpC;AANgB,MAAA,CAAA,EAAA,EAAA,IAAA,CAAA;;;ACbT,IAAM,KAAA,GAAQ;AAAA,EACjB,KAAA,EAAO;AAAA,IACH,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACX;AAAA,IACA,OAAA,EAAS;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACX;AAAA,IACA,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACb;AAAA,EACA,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,mFAAA;AAAA,IACN,OAAA,EAAS,6CAAA;AAAA,IACT,IAAA,EAAM;AAAA,GACV;AAAA,EACA,QAAA,EAAU;AAAA,IACN,KAAA,EAAO,MAAA;AAAA,IACP,KAAA,EAAO,MAAA;AAAA,IACP,KAAA,EAAO,MAAA;AAAA,IACP,EAAA,EAAI,MAAA;AAAA,IACJ,EAAA,EAAI,MAAA;AAAA,IACJ,EAAA,EAAI,MAAA;AAAA,IACJ,EAAA,EAAI,MAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACR;AAAA,EACA,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,KAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA,EAAS,KAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACd;AAAA,EACA,UAAA,EAAY;AAAA,IACR,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA,EAAS,KAAA;AAAA,IACT,KAAA,EAAO;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACJ,KAAA,EAAO,MAAA;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,EAAA,EAAI,KAAA;AAAA,IACJ,EAAA,EAAI,KAAA;AAAA,IACJ,IAAA,EAAM,KAAA;AAAA,IACN,EAAA,EAAI,KAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACR;AAAA,EACA,QAAA,EAAU;AAAA,IACN,UAAA,EAAY;AAAA,MACR,OAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAU,SAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACZ;AAAA,IACA,MAAA,EAAQ;AAAA,MACJ,OAAA,EAAS,SAAA;AAAA,MACT,MAAA,EAAQ;AAAA,KACZ;AAAA,IACA,WAAA,EAAa;AAAA,MACT,WAAA,EAAa,SAAA;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,YAAA,EAAc,SAAA;AAAA,MACd,cAAA,EAAgB;AAAA,KACpB;AAAA,IACA,IAAA,EAAM;AAAA,MACF,OAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAU,SAAA;AAAA,MACV,KAAA,EAAO;AAAA;AACX,GACJ;AAAA,EACA,MAAA,EAAQ;AAAA,IACJ,EAAA,EAAI,wEAAA;AAAA,IACJ,EAAA,EAAI,sEAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACR;AAAA,EACA,OAAA,EAAS;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,GAAA,EAAK,KAAA;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK;AAAA;AAEb,CAAA;AASO,IAAM,SAAA,GAAY;AAAA,EACrB,KAAA,EAAO;AAAA,IACH,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACX;AAAA,IACA,OAAA,EAAS;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACX;AAAA,IACA,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACb;AAAA,EACA,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,mFAAA;AAAA,IACN,OAAA,EAAS,6CAAA;AAAA,IACT,IAAA,EAAM;AAAA,GACV;AAAA,EACA,QAAA,EAAU;AAAA,IACN,KAAA,EAAO,MAAA;AAAA,IACP,KAAA,EAAO,MAAA;AAAA,IACP,KAAA,EAAO,MAAA;AAAA,IACP,EAAA,EAAI,MAAA;AAAA,IACJ,EAAA,EAAI,MAAA;AAAA,IACJ,EAAA,EAAI,MAAA;AAAA,IACJ,EAAA,EAAI,MAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACR;AAAA,EACA,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,KAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA,EAAS,KAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACd;AAAA,EACA,UAAA,EAAY;AAAA,IACR,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA,EAAS,KAAA;AAAA,IACT,KAAA,EAAO;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACJ,KAAA,EAAO,MAAA;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,EAAA,EAAI,KAAA;AAAA,IACJ,EAAA,EAAI,KAAA;AAAA,IACJ,IAAA,EAAM,KAAA;AAAA,IACN,EAAA,EAAI,KAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACR;AAAA,EACA,QAAA,EAAU;AAAA,IACN,UAAA,EAAY;AAAA,MACR,OAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAU,SAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACZ;AAAA,IACA,MAAA,EAAQ;AAAA,MACJ,OAAA,EAAS,SAAA;AAAA,MACT,MAAA,EAAQ;AAAA,KACZ;AAAA,IACA,WAAA,EAAa;AAAA,MACT,WAAA,EAAa,SAAA;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,YAAA,EAAc,SAAA;AAAA,MACd,cAAA,EAAgB;AAAA,KACpB;AAAA,IACA,IAAA,EAAM;AAAA,MACF,OAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAU,SAAA;AAAA,MACV,KAAA,EAAO;AAAA;AACX,GACJ;AAAA,EACA,MAAA,EAAQ;AAAA,IACJ,EAAA,EAAI,wEAAA;AAAA,IACJ,EAAA,EAAI,sEAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACR;AAAA,EACA,OAAA,EAAS;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,GAAA,EAAK,KAAA;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,MAAA;AAAA,IACN,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK;AAAA;AAEb,CAAA;AC/MO,IAAM,YAAA,GAA0B;AAAA,EACnC,KAAA,EAAO,KAAA;AAAA,EACP,IAAA,EAAM;AACV,CAAA;AAMO,IAAM,YAAA,GAAeA,oBAAyB,YAAY,CAAA;AACjE,YAAA,CAAa,WAAA,GAAc,cAAA;ACvB3B,IAAM,0BAAA,GAA6BA,oBAAkC,IAAI,CAAA;AACzE,0BAAA,CAA2B,WAAA,GAAc,4BAAA;AAiBzC,IAAM,KAAA,GAAQC,qBAAS,EAAA,KAAO,KAAA;AAQ9B,SAAS,aAAA,GAA6B;AAClC,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACjC,IAAA,OAAO,OAAA;AAAA,EACX;AACA,EAAA,MAAM,OAAO,QAAA,CAAS,eAAA;AACtB,EAAA,IAAI,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA,EAAG;AACjC,IAAA,OAAO,MAAA;AAAA,EACX;AACA,EAAA,IAAI,IAAA,CAAK,YAAA,CAAa,YAAY,CAAA,KAAM,MAAA,EAAQ;AAC5C,IAAA,OAAO,MAAA;AAAA,EACX;AACA,EAAA,OAAO,OAAA;AACX;AAZS,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AA2BF,SAAS,cAAA,GAA8B;AAI1C,EAAA,MAAM,QAAA,GAAWC,iBAAW,0BAA0B,CAAA;AAEtD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,eAAsB,MAAM;AACpD,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,OAAO,aAAA,EAAc;AAAA,IACzB;AACA,IAAA,OAAQC,sBAAA,CAAW,gBAAe,IAAK,OAAA;AAAA,EAC3C,CAAC,CAAA;AAED,EAAAC,eAAA,CAAU,MAAM;AACZ,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,MAAM,OAAO,QAAA,CAAS,eAAA;AACtB,MAAA,MAAM,MAAA,mBAAS,MAAA,CAAA,MAAM,SAAA,CAAU,aAAA,EAAe,CAAA,EAA/B,QAAA,CAAA;AACf,MAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB,MAAM,CAAA;AAC5C,MAAA,QAAA,CAAS,OAAA,CAAQ,IAAA,EAAM,EAAE,UAAA,EAAY,IAAA,EAAM,iBAAiB,CAAC,OAAA,EAAS,YAAY,CAAA,EAAG,CAAA;AAErF,MAAA,MAAA,EAAO;AACP,MAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,IACrC;AAEA,IAAA,MAAM,MAAMD,sBAAA,CAAW,iBAAA,CAAkB,CAAC,EAAE,aAAY,KAAM;AAC1D,MAAA,SAAA,CAAW,eAAe,OAAuB,CAAA;AAAA,IACrD,CAAC,CAAA;AACD,IAAA,OAAO,MAAM,IAAI,MAAA,EAAO;AAAA,EAC5B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,QAAA,IAAY,MAAA;AACvB;AA/BgB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;;;ACzCT,SAAS,cAAA,GAAwB;AACpC,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,SAAA,GAAYF,iBAAW,YAAY,CAAA;AACzC,EAAA,OAAO,MAAA,KAAW,MAAA,GAAS,SAAA,CAAU,IAAA,GAAO,SAAA,CAAU,KAAA;AAC1D;AAJgB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;;;ACRT,SAAS,MAAM,MAAA,EAA8B;AAChD,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AACxB,IAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,EACrB;AACA,EAAA,OAAO,GAAA,CAAI,KAAK,GAAG,CAAA;AACvB;AANgB,MAAA,CAAA,EAAA,EAAA,IAAA,CAAA;AAQhB,SAAS,MAAA,CAAO,KAAe,KAAA,EAAyB;AACpD,EAAA,IAAI,CAAC,KAAA,EAAO;AACR,IAAA;AAAA,EACJ;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AAClB,MAAA,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,IAClB;AACA,IAAA;AAAA,EACJ;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,IAAA;AAAA,EACJ;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,IAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACvB,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,IACrB;AACA,IAAA;AAAA,EACJ;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,EAAG;AAClC,MAAA,IAAI,KAAA,CAAM,GAAG,CAAA,EAAG;AACZ,QAAA,GAAA,CAAI,KAAK,GAAG,CAAA;AAAA,MAChB;AAAA,IACJ;AAAA,EACJ;AACJ;AA1BS,MAAA,CAAA,MAAA,EAAA,QAAA,CAAA;ACMT,IAAM,qBAAA,GAAmC,EAAE,aAAA,EAAe,QAAA,EAAS;AACnE,IAAM,iBAAA,GAA+B;AAAA,EACjC,aAAA,EAAe,KAAA;AAAA,EACf,UAAA,EAAY,QAAA;AAAA,EACZ,WAAA,EAAa,CAAA;AAAA;AAAA;AAAA;AAAA,EAIb,QAAA,EAAU;AACd,CAAA;AAWO,IAAM,4BAAY,MAAA,CAAA,CAAC;AAAA,EACtB,KAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,GAAG;AACP,CAAA,KAAsB;AAClB,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,UAAUI,WAAA,EAAM;AACtB,EAAA,MAAM,OAAA,GAAU,MAAA,IAAU,CAAA,cAAA,EAAiB,OAAO,CAAA,CAAA;AAClD,EAAA,MAAM,QAAA,GAAWC,aAA2B,IAAI,CAAA;AAMhD,EAAA,MAAM,6BAAa,MAAA,CAAA,MAAM;AACrB,IAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,EAC5B,CAAA,EAFmB,YAAA,CAAA;AAGnB,EAAA,MAAM,UAAA,GAAa,GAAG,OAAO,CAAA,SAAA,CAAA;AAC7B,EAAA,MAAM,QAAA,GAAW,QAAQ,KAAK,CAAA;AAC9B,EAAA,MAAM,WAAA,GAAc,KAAA,IAAS,UAAA,GAAa,UAAA,GAAa,MAAA;AAEvD,EAAA,MAAM,cAAuC,EAAC;AAC9C,EAAA,IAAI,WAAW,MAAA,EAAW;AACtB,IAAA,WAAA,CAAY,MAAA,GAAS,MAAA;AAAA,EACzB;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACrB,IAAA,WAAA,CAAY,kBAAA,GAAqB,KAAA;AAAA,EACrC;AACA,EAAA,IAAI,QAAA,EAAU;AACV,IAAA,WAAA,CAAY,cAAc,CAAA,GAAI,IAAA;AAAA,EAClC;AACA,EAAA,IAAI,gBAAgB,MAAA,EAAW;AAC3B,IAAA,WAAA,CAAY,kBAAkB,CAAA,GAAI,WAAA;AAAA,EACtC;AACA,EAAA,IAAI,cAAc,MAAA,EAAW;AACzB,IAAA,WAAA,CAAY,SAAA,GAAY,SAAA;AAAA,EAC5B;AACA,EAAA,IAAI,kBAAkB,MAAA,EAAW;AAC7B,IAAA,WAAA,CAAY,aAAA,GAAgB,aAAA;AAAA,EAChC;AACA,EAAA,IAAI,iBAAiB,MAAA,EAAW;AAC5B,IAAA,WAAA,CAAY,YAAA,GAAe,YAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,UAAA,GAAwB;AAAA,IAC1B,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,IAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAAA,IAC/B,UAAA,EAAY,OAAO,UAAA,CAAW,MAAA;AAAA,IAC9B,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK;AAAA,GAChC;AACA,EAAA,MAAM,UAAA,GAAwB;AAAA,IAC1B,IAAA,EAAM,CAAA;AAAA,IACN,eAAA,EAAiB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IACvC,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,IAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAAA,IAC/B,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK;AAAA,GAChC;AACA,EAAA,MAAM,WAAA,GAAyB;AAAA,IAC3B,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,IAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAAA,IAC/B,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK;AAAA,GAChC;AACA,EAAA,MAAM,UAAA,GAAwB;AAAA,IAC1B,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,IAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAAA,IAC/B,KAAA,EAAO,OAAO,KAAA,CAAM;AAAA,GACxB;AACA,EAAA,MAAM,cAAA,GAA4B,EAAE,GAAG,qBAAA,EAAuB,GAAA,EAAK,GAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAE;AAC3F,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,iBAAA;AAAA,IACA;AAAA,MACI,YAAA,EAAc,EAAA,CAAG,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAAA,MACjC,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,MACzC,eAAA,EAAiB,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,QAAA;AAAA,MAC5C,aAAa,QAAA,GAAW,MAAA,CAAO,MAAM,MAAA,GAAS,MAAA,CAAO,SAAS,MAAA,CAAO;AAAA,KACzE;AAAA,IACA,QAAA,GAAW,EAAE,OAAA,EAAS,GAAA,EAAI,GAAI;AAAA,GAClC;AAEA,EAAA,uBACIC,eAAA,CAACC,oBAAK,SAAA,EAAW,EAAA,CAAG,uBAAuB,kBAAkB,CAAA,EAAG,OAAO,cAAA,EAWlE,QAAA,EAAA;AAAA,IAAA,KAAA,KAAU,MAAA,mBACPC,cAAAA,CAACC,qBAAA,EAAA,EAAU,SAAS,UAAA,EAAY,iBAAA,EAAkB,MAAA,EAAO,QAAA,EACrD,QAAA,kBAAAD,cAAAA;AAAA,MAACE,gBAAA;AAAA,MAAA;AAAA,QACG,QAAA,EAAU,GAAG,OAAO,CAAA,MAAA,CAAA;AAAA,QACpB,iBAAA,EAAkB,MAAA;AAAA,QAClB,SAAA,EAAU,gDAAA;AAAA,QACV,KAAA,EAAO,UAAA;AAAA,QAEN,QAAA,EAAA;AAAA;AAAA,OAET,CAAA,GACA,IAAA;AAAA,oBACJJ,eAAA;AAAA,MAACC,gBAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAW,EAAA;AAAA,UACP,8CAAA;AAAA,UACA,WAAW,yCAAA,GAA4C,gCAAA;AAAA,UACvD,WAAW,YAAA,GAAe;AAAA,SAC9B;AAAA,QACA,KAAA,EAAO,UAAA;AAAA,QAEN,QAAA,EAAA;AAAA,UAAA,OAAA,mBACGC,cAAAA,CAACD,gBAAA,EAAA,EAAK,SAAA,EAAU,MAAA,EAAO,OAAO,EAAE,WAAA,EAAa,EAAA,CAAG,MAAA,CAAO,QAAQ,GAAG,CAAC,CAAA,EAAE,EAChE,mBACL,CAAA,GACA,IAAA;AAAA,0BACJC,cAAAA;AAAA,YAACG,qBAAA;AAAA,YAAA;AAAA,cACG,GAAA,EAAK,QAAA;AAAA,cACL,QAAA,EAAU,OAAA;AAAA,cACV,UAAU,CAAC,QAAA;AAAA,cACX,SAAA,EAAW,EAAA,CAAG,6DAAA,EAA+D,SAAS,CAAA;AAAA,cACtF,oBAAA,EAAsB,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA;AAAA,cAC1C,GAAG,WAAA;AAAA,cACH,GAAG,IAAA;AAAA,cAGJ,KAAA,EAAO,CAAC,UAAA,EAAY,IAAA,CAAK,KAAK;AAAA;AAAA,WAClC;AAAA,UACC,2BACGH,cAAAA,CAACD,gBAAA,EAAA,EAAK,SAAA,EAAU,QAAO,KAAA,EAAO,EAAE,UAAA,EAAY,EAAA,CAAG,OAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAE,EAC/D,oBACL,CAAA,GACA;AAAA;AAAA;AAAA,KACR;AAAA,IACC,wBACGC,cAAAA;AAAA,MAACE,gBAAA;AAAA,MAAA;AAAA,QACG,QAAA,EAAU,UAAA;AAAA,QACV,SAAA,EAAU,+CAAA;AAAA,QACV,KAAA,EAAO,UAAA;AAAA,QAEN,QAAA,EAAA;AAAA;AAAA,KACL,GACA,UAAA,mBACAF,cAAAA,CAACE,gBAAA,EAAA,EAAO,QAAA,EAAU,UAAA,EAAY,SAAA,EAAU,kCAAA,EAAmC,KAAA,EAAO,WAAA,EAC7E,QAAA,EAAA,UAAA,EACL,CAAA,GACA;AAAA,GAAA,EACR,CAAA;AAER,CAAA,EA/JyB,WAAA","file":"index.cjs","sourcesContent":["/**\n * Strip the `px` suffix from a CSS-flavored token value and return a\n * number, the form React Native style props expect for properties like\n * `borderRadius`, `paddingHorizontal`, `fontSize`, etc.\n *\n * The tokens package emits all dimensional tokens as `${number}px`\n * strings (it's the lingua franca for both CSS and Style Dictionary\n * consumers); inside RN we need the unitless number. RN-Web tolerates\n * both, but native is strict.\n *\n * Falls through unchanged for tokens that already came in as numbers\n * (forward-compat).\n *\n * Examples:\n * px('6px') → 6\n * px('1.5px') → 1.5\n * px(6) → 6\n * px('foo') → 0 (defensive — bad input shouldn't crash render)\n */\nexport function px(value: string | number): number {\n if (typeof value === 'number') {\n return value;\n }\n const n = Number.parseFloat(value);\n return Number.isFinite(n) ? n : 0;\n}\n","// GENERATED by @nori-ui/tokens — DO NOT EDIT.\n// Run `yarn build:tokens` to regenerate.\n\n// Generated for light mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const theme = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#fafafa\",\n elevated: \"#ffffff\",\n subtle: \"#f4f4f5\",\n },\n border: {\n default: \"#e4e4e7\",\n strong: \"#d4d4d8\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#0d9488\",\n primaryHover: \"#0f766e\",\n primaryPressed: \"#115e59\",\n },\n text: {\n default: \"#18181b\",\n inverted: \"#fafafa\",\n muted: \"#52525b\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\nexport type Theme = typeof theme;\n\n\n// Dark mode overrides\n// Generated for dark mode.\n// Do not edit — run `yarn build:tokens`.\n\nexport const themeDark = {\n color: {\n danger: \"#ef4444\",\n info: \"#3b82f6\",\n neutral: {\n \"100\": \"#f4f4f5\",\n \"200\": \"#e4e4e7\",\n \"300\": \"#d4d4d8\",\n \"400\": \"#a1a1aa\",\n \"50\": \"#fafafa\",\n \"500\": \"#71717a\",\n \"600\": \"#52525b\",\n \"700\": \"#3f3f46\",\n \"800\": \"#27272a\",\n \"900\": \"#18181b\",\n },\n primary: {\n \"100\": \"#ccfbf1\",\n \"200\": \"#99f6e4\",\n \"300\": \"#5eead4\",\n \"400\": \"#2dd4bf\",\n \"50\": \"#f0fdfa\",\n \"500\": \"#14b8a6\",\n \"600\": \"#0d9488\",\n \"700\": \"#0f766e\",\n \"800\": \"#115e59\",\n \"900\": \"#134e4a\",\n },\n success: \"#22c55e\",\n warning: \"#f59e0b\",\n },\n fontFamily: {\n body: \"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n display: \"ui-serif, Georgia, 'Times New Roman', serif\",\n mono: \"ui-monospace, 'SF Mono', Menlo, Consolas, 'DejaVu Sans Mono', monospace\",\n },\n fontSize: {\n \"2xl\": \"24px\",\n \"3xl\": \"30px\",\n \"4xl\": \"36px\",\n lg: \"18px\",\n md: \"16px\",\n sm: \"14px\",\n xl: \"20px\",\n xs: \"12px\",\n },\n fontWeight: {\n bold: \"700\",\n medium: \"500\",\n regular: \"400\",\n semibold: \"600\",\n },\n lineHeight: {\n normal: \"1.4\",\n relaxed: \"1.6\",\n tight: \"1.2\",\n },\n radius: {\n \"2xl\": \"16px\",\n full: \"9999px\",\n lg: \"8px\",\n md: \"6px\",\n none: \"0px\",\n sm: \"4px\",\n xl: \"12px\",\n },\n semantic: {\n background: {\n default: \"#18181b\",\n elevated: \"#3f3f46\",\n subtle: \"#27272a\",\n },\n border: {\n default: \"#3f3f46\",\n strong: \"#52525b\",\n },\n interactive: {\n destructive: \"#ef4444\",\n primary: \"#2dd4bf\",\n primaryHover: \"#5eead4\",\n primaryPressed: \"#99f6e4\",\n },\n text: {\n default: \"#fafafa\",\n inverted: \"#18181b\",\n muted: \"#a1a1aa\",\n },\n },\n shadow: {\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\",\n sm: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n },\n spacing: {\n \"0\": \"0px\",\n \"1\": \"4px\",\n \"10\": \"40px\",\n \"12\": \"48px\",\n \"16\": \"64px\",\n \"2\": \"8px\",\n \"20\": \"80px\",\n \"24\": \"96px\",\n \"3\": \"12px\",\n \"4\": \"16px\",\n \"5\": \"20px\",\n \"6\": \"24px\",\n \"8\": \"32px\",\n },\n} as const;\n\n","'use client';\n\nimport { themeDark as defaultDark, theme as defaultLight, type Theme } from '@nori-ui/tokens';\nimport type { ReactNode } from 'react';\nimport { createContext } from 'react';\n\n/**\n * A `NoriTheme` is a paired light/dark palette. The active half is picked\n * by `useColorScheme()` so the same theme object covers both schemes.\n *\n * Build one yourself by spreading the defaults and overriding the colors\n * you care about, or pick a preset from `@nori-ui/core/themes` (see the\n * Theming docs for examples).\n */\nexport type NoriTheme = {\n light: Theme;\n dark: Theme;\n};\n\n/**\n * Default Nori palette — teal primary on a warm-paper light surface, and\n * teal-400 primary on a deep-zinc dark surface. Mirrors the `theme` /\n * `themeDark` exports from @nori-ui/tokens.\n */\nexport const defaultTheme: NoriTheme = {\n light: defaultLight,\n dark: defaultDark as unknown as Theme,\n};\n\n// Context value is the FULL pair, not the active half. `useThemeColors`\n// (the hook components reach for) resolves it to the right one based on\n// the current color scheme. Storing the pair means a parent only has to\n// declare the theme once — switching scheme is a separate concern.\nexport const ThemeContext = createContext<NoriTheme>(defaultTheme);\nThemeContext.displayName = 'ThemeContext';\n\nexport type ThemeProviderProps = {\n /**\n * The theme to apply to descendants. Pass either:\n * - a full `NoriTheme` (`{ light, dark }`) — both schemes covered\n * - a single `Theme` — used for both light and dark (rare; mostly\n * useful when you ONLY ever render in one scheme)\n * - omit — falls back to the Nori default (teal palette)\n */\n theme?: NoriTheme | Theme;\n children?: ReactNode;\n};\n\nconst isFullTheme = (t: NoriTheme | Theme): t is NoriTheme => 'light' in t && 'dark' in t;\n\nexport function ThemeProvider({ theme, children }: ThemeProviderProps) {\n const value: NoriTheme =\n theme === undefined ? defaultTheme : isFullTheme(theme) ? theme : { light: theme, dark: theme };\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n","'use client';\n\nimport { createContext, type ReactNode, useContext, useEffect, useState } from 'react';\nimport { Appearance, Platform } from 'react-native';\n\nexport type ColorScheme = 'light' | 'dark';\n\n// Override channel so a parent can force a scheme (e.g. an app shell with\n// hard-coded dark chrome that wants nested components to render against\n// the dark token half regardless of the OS Appearance). `null` means\n// \"no override — use the system signal\".\nconst ColorSchemeOverrideContext = createContext<ColorScheme | null>(null);\nColorSchemeOverrideContext.displayName = 'ColorSchemeOverrideContext';\n\nexport type ColorSchemeProviderProps = {\n /** Force a specific scheme for descendants. */\n value: ColorScheme;\n children?: ReactNode;\n};\n\n/**\n * Forces a color scheme for all descendants. Useful when a screen's chrome\n * is hard-coded to one scheme (e.g. a forced-dark editorial surface) and\n * you want library components inside it to follow that, not the OS.\n */\nexport function ColorSchemeProvider({ value, children }: ColorSchemeProviderProps) {\n return <ColorSchemeOverrideContext.Provider value={value}>{children}</ColorSchemeOverrideContext.Provider>;\n}\n\nconst isWeb = Platform.OS === 'web';\n\n// Web: a document is \"in dark mode\" when the root <html> element carries\n// the `dark` class (Tailwind / Fumadocs convention) OR a `data-theme=\"dark\"`\n// attribute (matches the `darkMode` selectors in our Tailwind preset).\n// We deliberately don't fall back to `prefers-color-scheme` — the app\n// usually owns that decision and writes it onto <html>; tracking the system\n// preference too would fight the app's chosen value.\nfunction readWebScheme(): ColorScheme {\n if (typeof document === 'undefined') {\n return 'light';\n }\n const root = document.documentElement;\n if (root.classList.contains('dark')) {\n return 'dark';\n }\n if (root.getAttribute('data-theme') === 'dark') {\n return 'dark';\n }\n return 'light';\n}\n\n/**\n * Returns the current color scheme — `'light'` or `'dark'`.\n *\n * On web: observes the root `<html>` element's `class=\"dark\"` and\n * `data-theme=\"dark\"` attribute (the same signals our Tailwind preset\n * keys on). Updates live as those flip.\n *\n * On native: delegates to `react-native`'s `Appearance` API so the hook\n * tracks the OS preference without extra wiring.\n *\n * Components consume this indirectly via `useThemeColors()`; reach for\n * this directly when you need the raw scheme (e.g. to swap an icon).\n */\nexport function useColorScheme(): ColorScheme {\n // A `<ColorSchemeProvider value=\"dark\">` ancestor (or NoriProvider's\n // `colorScheme` prop, which mounts one) wins over the OS signal — the\n // app shell knows which scheme its chrome is locked to.\n const override = useContext(ColorSchemeOverrideContext);\n\n const [scheme, setScheme] = useState<ColorScheme>(() => {\n if (isWeb) {\n return readWebScheme();\n }\n return (Appearance.getColorScheme() ?? 'light') as ColorScheme;\n });\n\n useEffect(() => {\n if (isWeb) {\n const root = document.documentElement;\n const update = () => setScheme(readWebScheme());\n const observer = new MutationObserver(update);\n observer.observe(root, { attributes: true, attributeFilter: ['class', 'data-theme'] });\n // Sync once after mount in case SSR shipped a different value.\n update();\n return () => observer.disconnect();\n }\n\n const sub = Appearance.addChangeListener(({ colorScheme }) => {\n setScheme((colorScheme ?? 'light') as ColorScheme);\n });\n return () => sub.remove();\n }, []);\n\n return override ?? scheme;\n}\n","'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport { useContext } from 'react';\nimport { ThemeContext } from './context';\nimport { useColorScheme } from './use-color-scheme';\n\n/**\n * Returns the active token palette — `theme.light` in light mode,\n * `theme.dark` in dark mode. Resolves the theme via `ThemeContext` so\n * any ancestor `<ThemeProvider theme={...}>` flows through. With no\n * provider in the tree, the default Nori palette (teal) is used.\n *\n * Use this **inside a component** when you need a hex value for a React\n * Native `style` prop (`backgroundColor`, `borderColor`, etc.).\n *\n * Note: className-based styles (e.g. `bg-semantic-interactive-primary`)\n * compile against the @nori-ui/tokens palette at build time and don't\n * follow `<ThemeProvider>` overrides today. Inline styles via this hook\n * always do — and inline beats class on CSS specificity, so the visible\n * color you see is whatever the hook resolves to. CSS-variable theming\n * for the className path is a planned follow-up.\n */\nexport function useThemeColors(): Theme {\n const scheme = useColorScheme();\n const themePair = useContext(ThemeContext);\n return scheme === 'dark' ? themePair.dark : themePair.light;\n}\n","// cn — class-name merger. clsx-compatible shape.\n//\n// Intentionally does NOT deduplicate Tailwind conflicts (e.g. \"text-sm text-lg\").\n// That's `tailwind-merge`'s job; we defer adding it until a component actually\n// needs it, to keep the core tree-shakable and the runtime zero-dep.\n\nexport type ClassInput =\n | string\n | number\n | boolean\n | null\n | undefined\n | ClassInput[]\n | Record<string, boolean | number | null | undefined>;\n\nexport function cn(...inputs: ClassInput[]): string {\n const out: string[] = [];\n for (const input of inputs) {\n append(out, input);\n }\n return out.join(' ');\n}\n\nfunction append(out: string[], input: ClassInput): void {\n if (!input) {\n return;\n }\n if (typeof input === 'string') {\n if (input.length > 0) {\n out.push(input);\n }\n return;\n }\n if (typeof input === 'number') {\n return; // numbers are never class names\n }\n if (Array.isArray(input)) {\n for (const inner of input) {\n append(out, inner);\n }\n return;\n }\n if (typeof input === 'object') {\n for (const key of Object.keys(input)) {\n if (input[key]) {\n out.push(key);\n }\n }\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useId, useRef } from 'react';\nimport type { TextInputProps as RNTextInputProps, TextStyle, ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, TextInput as RNTextInput, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type TextInputProps = Omit<RNTextInputProps, 'editable'> & {\n label?: string;\n helperText?: string;\n error?: string;\n disabled?: boolean;\n leading?: ReactNode;\n trailing?: ReactNode;\n /** Pass through a custom wrapper className */\n containerClassName?: string;\n className?: string;\n testID?: string;\n /** Controlled text handler. Optional so uncontrolled usage works too. */\n onChangeText?: (text: string) => void;\n /** Multi-line mode — flipped by TextArea. Default false. */\n multiline?: boolean;\n numberOfLines?: number;\n};\n\n// Layout-only bases; theme-driven dimensions are merged inside the component.\nconst CONTAINER_LAYOUT_BASE: ViewStyle = { flexDirection: 'column' };\nconst FIELD_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n borderWidth: 1,\n // Clip the textarea's browser-drawn resize grippy inside the rounded\n // border. Without this, the grippy escapes the corner and looks like\n // it belongs to the page, not the input.\n overflow: 'hidden',\n};\n\n/**\n * Single-line text input with label, helper, error, and leading/trailing slots.\n *\n * a11y: label is a <label for={id}>; the input is `aria-invalid=true` + labelled\n * by the error/helper text via aria-describedby when present.\n *\n * Color flips with the active scheme — the field surface, border, label, and\n * placeholder all read from the resolved palette via `useThemeColors`.\n */\nexport const TextInput = ({\n label,\n helperText,\n error,\n disabled,\n leading,\n trailing,\n containerClassName,\n className,\n testID,\n onChangeText,\n multiline,\n numberOfLines,\n ...rest\n}: TextInputProps) => {\n const colors = useThemeColors();\n const reactId = useId();\n const inputId = testID ?? `nori-ui-input-${reactId}`;\n const inputRef = useRef<RNTextInput | null>(null);\n // Tap on the label → focus the input. Cross-platform: Pressable's\n // onPress fires on web (click) and native (tap), and RNTextInput's\n // imperative `.focus()` works on both. This restores the\n // `<label htmlFor>` UX without resurrecting the host-element crash\n // we hit on native (see comment near the label render).\n const focusInput = () => {\n inputRef.current?.focus();\n };\n const describeId = `${inputId}-describe`;\n const hasError = Boolean(error);\n const describedBy = error || helperText ? describeId : undefined;\n\n const inputExtras: Record<string, unknown> = {};\n if (testID !== undefined) {\n inputExtras.testID = testID;\n }\n if (label !== undefined) {\n inputExtras.accessibilityLabel = label;\n }\n if (hasError) {\n inputExtras['aria-invalid'] = true;\n }\n if (describedBy !== undefined) {\n inputExtras['aria-describedby'] = describedBy;\n }\n if (multiline !== undefined) {\n inputExtras.multiline = multiline;\n }\n if (numberOfLines !== undefined) {\n inputExtras.numberOfLines = numberOfLines;\n }\n if (onChangeText !== undefined) {\n inputExtras.onChangeText = onChangeText;\n }\n\n const labelStyle: TextStyle = {\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.medium as '500',\n color: colors.semantic.text.default,\n };\n const inputStyle: TextStyle = {\n flex: 1,\n paddingVertical: px(colors.spacing['2']),\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n color: colors.semantic.text.default,\n };\n const helperStyle: TextStyle = {\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.semantic.text.muted,\n };\n const errorStyle: TextStyle = {\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: colors.color.danger,\n };\n const containerStyle: ViewStyle = { ...CONTAINER_LAYOUT_BASE, gap: px(colors.spacing['1']) };\n const fieldStyle = [\n FIELD_LAYOUT_BASE,\n {\n borderRadius: px(colors.radius.md),\n paddingHorizontal: px(colors.spacing['3']),\n backgroundColor: colors.semantic.background.elevated,\n borderColor: hasError ? colors.color.danger : colors.semantic.border.default,\n },\n disabled ? { opacity: 0.6 } : null,\n ];\n\n return (\n <View className={cn('flex flex-col gap-1', containerClassName)} style={containerStyle}>\n {/*\n * Use RNText for the label so the component renders on both\n * platforms. The previous `<label htmlFor>` worked only on\n * the web (rn-web compiled it through), but on native RN\n * tries to look up `label` as a host component and crashes\n * with \"View config getter callback for component `label`\n * must be a function\". Click-to-focus on web is a small\n * cost we accept; the underlying RNTextInput still gets\n * `accessibilityLabel={label}` (above) for screen readers.\n */}\n {label !== undefined ? (\n <Pressable onPress={focusInput} accessibilityRole=\"none\" disabled={disabled}>\n <RNText\n nativeID={`${inputId}-label`}\n accessibilityRole=\"text\"\n className=\"text-sm font-medium text-semantic-text-default\"\n style={labelStyle}\n >\n {label}\n </RNText>\n </Pressable>\n ) : null}\n <View\n className={cn(\n 'flex-row items-center rounded-md border px-3',\n hasError ? 'border-semantic-interactive-destructive' : 'border-semantic-border-default',\n disabled ? 'opacity-60' : undefined\n )}\n style={fieldStyle}\n >\n {leading ? (\n <View className=\"mr-2\" style={{ marginRight: px(colors.spacing['2']) }}>\n {leading}\n </View>\n ) : null}\n <RNTextInput\n ref={inputRef}\n nativeID={inputId}\n editable={!disabled}\n className={cn('flex-1 py-2 text-md text-semantic-text-default outline-none', className)}\n placeholderTextColor={colors.semantic.text.muted}\n {...inputExtras}\n {...rest}\n // Spread `rest` first so callers can extend the input style without\n // losing inputStyle — RN merges array styles in order, last wins.\n style={[inputStyle, rest.style]}\n />\n {trailing ? (\n <View className=\"ml-2\" style={{ marginLeft: px(colors.spacing['2']) }}>\n {trailing}\n </View>\n ) : null}\n </View>\n {error ? (\n <RNText\n nativeID={describeId}\n className=\"text-sm text-semantic-interactive-destructive\"\n style={errorStyle}\n >\n {error}\n </RNText>\n ) : helperText ? (\n <RNText nativeID={describeId} className=\"text-sm text-semantic-text-muted\" style={helperStyle}>\n {helperText}\n </RNText>\n ) : null}\n </View>\n );\n};\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { TextInputProps as TextInputProps$1 } from 'react-native';
|
|
4
|
+
|
|
5
|
+
type TextInputProps = Omit<TextInputProps$1, 'editable'> & {
|
|
6
|
+
label?: string;
|
|
7
|
+
helperText?: string;
|
|
8
|
+
error?: string;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
leading?: ReactNode;
|
|
11
|
+
trailing?: ReactNode;
|
|
12
|
+
/** Pass through a custom wrapper className */
|
|
13
|
+
containerClassName?: string;
|
|
14
|
+
className?: string;
|
|
15
|
+
testID?: string;
|
|
16
|
+
/** Controlled text handler. Optional so uncontrolled usage works too. */
|
|
17
|
+
onChangeText?: (text: string) => void;
|
|
18
|
+
/** Multi-line mode — flipped by TextArea. Default false. */
|
|
19
|
+
multiline?: boolean;
|
|
20
|
+
numberOfLines?: number;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Single-line text input with label, helper, error, and leading/trailing slots.
|
|
24
|
+
*
|
|
25
|
+
* a11y: label is a <label for={id}>; the input is `aria-invalid=true` + labelled
|
|
26
|
+
* by the error/helper text via aria-describedby when present.
|
|
27
|
+
*
|
|
28
|
+
* Color flips with the active scheme — the field surface, border, label, and
|
|
29
|
+
* placeholder all read from the resolved palette via `useThemeColors`.
|
|
30
|
+
*/
|
|
31
|
+
declare const TextInput: ({ label, helperText, error, disabled, leading, trailing, containerClassName, className, testID, onChangeText, multiline, numberOfLines, ...rest }: TextInputProps) => react_jsx_runtime.JSX.Element;
|
|
32
|
+
|
|
33
|
+
export { TextInput, type TextInputProps };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { TextInputProps as TextInputProps$1 } from 'react-native';
|
|
4
|
+
|
|
5
|
+
type TextInputProps = Omit<TextInputProps$1, 'editable'> & {
|
|
6
|
+
label?: string;
|
|
7
|
+
helperText?: string;
|
|
8
|
+
error?: string;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
leading?: ReactNode;
|
|
11
|
+
trailing?: ReactNode;
|
|
12
|
+
/** Pass through a custom wrapper className */
|
|
13
|
+
containerClassName?: string;
|
|
14
|
+
className?: string;
|
|
15
|
+
testID?: string;
|
|
16
|
+
/** Controlled text handler. Optional so uncontrolled usage works too. */
|
|
17
|
+
onChangeText?: (text: string) => void;
|
|
18
|
+
/** Multi-line mode — flipped by TextArea. Default false. */
|
|
19
|
+
multiline?: boolean;
|
|
20
|
+
numberOfLines?: number;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Single-line text input with label, helper, error, and leading/trailing slots.
|
|
24
|
+
*
|
|
25
|
+
* a11y: label is a <label for={id}>; the input is `aria-invalid=true` + labelled
|
|
26
|
+
* by the error/helper text via aria-describedby when present.
|
|
27
|
+
*
|
|
28
|
+
* Color flips with the active scheme — the field surface, border, label, and
|
|
29
|
+
* placeholder all read from the resolved palette via `useThemeColors`.
|
|
30
|
+
*/
|
|
31
|
+
declare const TextInput: ({ label, helperText, error, disabled, leading, trailing, containerClassName, className, testID, onChangeText, multiline, numberOfLines, ...rest }: TextInputProps) => react_jsx_runtime.JSX.Element;
|
|
32
|
+
|
|
33
|
+
export { TextInput, type TextInputProps };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { TextInput } from '../../chunk-ZRD4FQBT.js';
|
|
2
|
+
import '../../chunk-5A2QOOVN.js';
|
|
3
|
+
import '../../chunk-CHXHRJNZ.js';
|
|
4
|
+
import '../../chunk-R5JMDDCB.js';
|
|
5
|
+
import '../../chunk-WCQVDF3K.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var reactNative = require('react-native');
|
|
5
|
+
var SonnerModule = require('sonner');
|
|
6
|
+
|
|
7
|
+
function _interopNamespace(e) {
|
|
8
|
+
if (e && e.__esModule) return e;
|
|
9
|
+
var n = Object.create(null);
|
|
10
|
+
if (e) {
|
|
11
|
+
Object.keys(e).forEach(function (k) {
|
|
12
|
+
if (k !== 'default') {
|
|
13
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
14
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function () { return e[k]; }
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
n.default = e;
|
|
22
|
+
return Object.freeze(n);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var SonnerModule__namespace = /*#__PURE__*/_interopNamespace(SonnerModule);
|
|
26
|
+
|
|
27
|
+
var __defProp = Object.defineProperty;
|
|
28
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
29
|
+
var cached;
|
|
30
|
+
function tryLoad() {
|
|
31
|
+
if (cached !== void 0) {
|
|
32
|
+
return cached;
|
|
33
|
+
}
|
|
34
|
+
if (reactNative.Platform.OS !== "web") {
|
|
35
|
+
cached = null;
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
if (typeof SonnerModule__namespace.toast !== "function" || SonnerModule__namespace.Toaster == null) {
|
|
39
|
+
cached = null;
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
cached = { toast: SonnerModule__namespace.toast, Toaster: SonnerModule__namespace.Toaster };
|
|
43
|
+
return cached;
|
|
44
|
+
}
|
|
45
|
+
__name(tryLoad, "tryLoad");
|
|
46
|
+
function getSonner() {
|
|
47
|
+
return tryLoad();
|
|
48
|
+
}
|
|
49
|
+
__name(getSonner, "getSonner");
|
|
50
|
+
var HAS_SONNER = reactNative.Platform.OS === "web";
|
|
51
|
+
|
|
52
|
+
// src/components/Toast/sonner-native-bridge.tsx
|
|
53
|
+
function getSonnerNative() {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
__name(getSonnerNative, "getSonnerNative");
|
|
57
|
+
|
|
58
|
+
// src/components/Toast/Toaster.tsx
|
|
59
|
+
var Toaster2 = /* @__PURE__ */ __name((props) => {
|
|
60
|
+
const {
|
|
61
|
+
position = "top-center",
|
|
62
|
+
visibleToasts = 3,
|
|
63
|
+
duration = 4e3,
|
|
64
|
+
closeButton = false,
|
|
65
|
+
richColors = false,
|
|
66
|
+
expand = false,
|
|
67
|
+
offset = 24,
|
|
68
|
+
gap = 14
|
|
69
|
+
} = props;
|
|
70
|
+
if (reactNative.Platform.OS === "web") {
|
|
71
|
+
const sonner = getSonner();
|
|
72
|
+
if (!sonner) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
return react.createElement(sonner.Toaster, {
|
|
76
|
+
position: mapPositionForSonner(position),
|
|
77
|
+
visibleToasts,
|
|
78
|
+
duration,
|
|
79
|
+
closeButton,
|
|
80
|
+
richColors,
|
|
81
|
+
expand,
|
|
82
|
+
offset,
|
|
83
|
+
gap
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
{
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}, "Toaster");
|
|
90
|
+
function mapPositionForSonner(p) {
|
|
91
|
+
return p;
|
|
92
|
+
}
|
|
93
|
+
__name(mapPositionForSonner, "mapPositionForSonner");
|
|
94
|
+
function getActive() {
|
|
95
|
+
if (HAS_SONNER) {
|
|
96
|
+
return getSonner();
|
|
97
|
+
}
|
|
98
|
+
if (reactNative.Platform.OS !== "web") {
|
|
99
|
+
return getSonnerNative();
|
|
100
|
+
}
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
__name(getActive, "getActive");
|
|
104
|
+
function dispatch(tone, title, options) {
|
|
105
|
+
const active = getActive();
|
|
106
|
+
if (!active) {
|
|
107
|
+
return void 0;
|
|
108
|
+
}
|
|
109
|
+
const mapped = { ...options };
|
|
110
|
+
if (options.action) {
|
|
111
|
+
mapped.action = { label: options.action.label, onClick: options.action.onClick };
|
|
112
|
+
}
|
|
113
|
+
if (options.cancel) {
|
|
114
|
+
mapped.cancel = { label: options.cancel.label, onClick: options.cancel.onClick };
|
|
115
|
+
}
|
|
116
|
+
delete mapped.tone;
|
|
117
|
+
switch (tone) {
|
|
118
|
+
case "success":
|
|
119
|
+
return active.toast.success(title, mapped);
|
|
120
|
+
case "danger":
|
|
121
|
+
return active.toast.error(title, mapped);
|
|
122
|
+
case "warning":
|
|
123
|
+
return active.toast.warning(title, mapped);
|
|
124
|
+
case "info":
|
|
125
|
+
return active.toast.info(title, mapped);
|
|
126
|
+
default:
|
|
127
|
+
return active.toast(title, mapped);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
__name(dispatch, "dispatch");
|
|
131
|
+
function show(title, options = {}) {
|
|
132
|
+
const tone = options.tone ?? "default";
|
|
133
|
+
const id = dispatch(tone, title, options);
|
|
134
|
+
return id ?? `nori-toast-${Date.now()}`;
|
|
135
|
+
}
|
|
136
|
+
__name(show, "show");
|
|
137
|
+
var toastFn = show;
|
|
138
|
+
toastFn.success = (title, options = {}) => show(title, { ...options, tone: "success" });
|
|
139
|
+
toastFn.error = (title, options = {}) => show(title, { ...options, tone: "danger" });
|
|
140
|
+
toastFn.warning = (title, options = {}) => show(title, { ...options, tone: "warning" });
|
|
141
|
+
toastFn.info = (title, options = {}) => show(title, { ...options, tone: "info" });
|
|
142
|
+
toastFn.message = (title, options = {}) => show(title, { ...options, tone: "default" });
|
|
143
|
+
toastFn.dismiss = (id) => {
|
|
144
|
+
const active = getActive();
|
|
145
|
+
if (!active) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (id === void 0) {
|
|
149
|
+
active.toast.dismiss();
|
|
150
|
+
} else {
|
|
151
|
+
active.toast.dismiss(id);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
toastFn.promise = (promise, opts) => {
|
|
155
|
+
const resolved = typeof promise === "function" ? promise() : promise;
|
|
156
|
+
const active = getActive();
|
|
157
|
+
if (!active) {
|
|
158
|
+
return `nori-toast-${Date.now()}`;
|
|
159
|
+
}
|
|
160
|
+
return active.toast.promise(resolved, opts);
|
|
161
|
+
};
|
|
162
|
+
var toast2 = toastFn;
|
|
163
|
+
|
|
164
|
+
exports.Toaster = Toaster2;
|
|
165
|
+
exports.toast = toast2;
|
|
166
|
+
//# sourceMappingURL=index.cjs.map
|
|
167
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Toast/sonner-bridge.ts","../../../src/components/Toast/sonner-native-bridge.tsx","../../../src/components/Toast/Toaster.tsx","../../../src/components/Toast/toast.ts"],"names":["Platform","SonnerModule","Toaster","createElement","toast"],"mappings":"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","file":"index.cjs","sourcesContent":["'use client';\n\n/**\n * Sonner bridge.\n *\n * Strategy: a STATIC `import` of sonner so the consumer's bundler\n * (Next.js / Vite / etc.) resolves the module the way it normally\n * would. Tsup keeps `sonner` external (see tsup.config.ts) so the\n * import survives bundling and the consumer's webpack/rollup pulls in\n * the right copy.\n *\n * `sonner` is web-only — it imports `react-dom`, which is unavailable\n * on a pure-RN Metro bundle. To keep this safe across platforms we\n * gate by `Platform.OS === 'web'` and wrap the static import in a\n * try/catch via a small async-isolated trick: the import is\n * eagerly-resolved at module load, but its identifier may resolve to\n * `undefined` if the consumer marked sonner as `false` in their\n * webpack config (e.g. an Expo + RN-only build that excludes sonner).\n *\n * Userland never branches on Platform.OS — `<Toaster />` renders the\n * sonner Toaster on web and our own Animated viewport on native; the\n * imperative `toast(...)` dispatches to the right one transparently.\n */\n\nimport { Platform } from 'react-native';\nimport * as SonnerModule from 'sonner';\n\ntype Sonner = {\n toast: typeof SonnerModule.toast;\n Toaster: typeof SonnerModule.Toaster;\n};\n\nlet cached: Sonner | null | undefined;\n\nfunction tryLoad(): Sonner | null {\n if (cached !== undefined) {\n return cached;\n }\n if (Platform.OS !== 'web') {\n cached = null;\n return null;\n }\n // `Toaster` is a `forwardRef` exotic, so `typeof === 'function'`\n // would reject a perfectly valid sonner build. Truthy + `toast`\n // callable is the actual contract we need.\n if (typeof SonnerModule.toast !== 'function' || SonnerModule.Toaster == null) {\n cached = null;\n return null;\n }\n cached = { toast: SonnerModule.toast, Toaster: SonnerModule.Toaster };\n return cached;\n}\n\n/** Returns sonner on web, `null` on native or if sonner is unavailable. */\nexport function getSonner(): Sonner | null {\n return tryLoad();\n}\n\n/** Web vs native discriminator — internal to the Toast subsystem. */\nexport const HAS_SONNER: boolean = Platform.OS === 'web';\n","'use client';\n\n// Web stub for the sonner-native bridge. Metro picks\n// `sonner-native-bridge.native.tsx` for RN bundles; web bundles get\n// this no-op so `react-native-gesture-handler` and friends don't end\n// up in the web build. The web Toaster path uses `sonner-bridge.ts`\n// instead.\n\nimport type { ComponentType, ReactNode } from 'react';\n\nexport type SonnerNativeToastOptions = Record<string, unknown>;\nexport type SonnerNativeToastFn = ((message: ReactNode, options?: SonnerNativeToastOptions) => string | number) & {\n success: (message: ReactNode, options?: SonnerNativeToastOptions) => string | number;\n error: (message: ReactNode, options?: SonnerNativeToastOptions) => string | number;\n info: (message: ReactNode, options?: SonnerNativeToastOptions) => string | number;\n warning: (message: ReactNode, options?: SonnerNativeToastOptions) => string | number;\n dismiss: (id?: string | number) => void;\n};\n\nexport type SonnerNativeToaster = ComponentType<Record<string, unknown>>;\n\nexport const HAS_SONNER_NATIVE = false;\nexport function getSonnerNative(): { toast: SonnerNativeToastFn; Toaster: SonnerNativeToaster } | null {\n return null;\n}\n","'use client';\n\nimport { createElement } from 'react';\nimport { Platform } from 'react-native';\nimport { getSonner } from './sonner-bridge';\nimport { getSonnerNative } from './sonner-native-bridge';\nimport type { ToasterPosition, ToasterProps } from './types';\n\n/**\n * Toast viewport. Mount once near the app root; the imperative\n * `toast(...)` function pushes to it.\n *\n * Implementation is platform-split:\n *\n * - Web: delegates to `sonner`'s `<Toaster>` (Emil Kowalski's original).\n * Sonner already handles stacking, expand-on-hover, swipe-to-dismiss\n * on touch screens, position, rich colors, etc.\n *\n * - Native: delegates to `sonner-native`'s `<Toaster>` (Gunnar Torfi's\n * port, built on Reanimated 3 + Gesture Handler). Same behavior:\n * stacked layering with the front toast in focus, tap-to-expand\n * (since hover doesn't exist on touch), swipe up/down to dismiss,\n * slide+fade in/out from the anchored edge. Six positions\n * (top|bottom × left|center|right) align with sonner's positions.\n *\n * Both packages share the imperative `toast(...)` API, which keeps\n * userland identical across platforms.\n */\nexport const Toaster = (props: ToasterProps): ReturnType<typeof createElement> | null => {\n const {\n position = 'top-center',\n visibleToasts = 3,\n duration = 4000,\n closeButton = false,\n richColors = false,\n expand = false,\n offset = 24,\n gap = 14,\n } = props;\n\n if (Platform.OS === 'web') {\n const sonner = getSonner();\n if (!sonner) {\n return null;\n }\n // sonner's Toaster accepts the same prop names we expose. Pass\n // through verbatim — any drift is contained here.\n return createElement(sonner.Toaster as unknown as React.ComponentType<Record<string, unknown>>, {\n position: mapPositionForSonner(position),\n visibleToasts,\n duration,\n closeButton,\n richColors,\n expand,\n offset,\n gap,\n });\n }\n\n const native = getSonnerNative();\n if (!native) {\n return null;\n }\n // sonner-native's Toaster API matches sonner's almost 1:1. The same\n // position strings work, and `visibleToasts`/`expand`/`closeButton`\n // are already wired upstream.\n return createElement(native.Toaster as unknown as React.ComponentType<Record<string, unknown>>, {\n position: mapPositionForSonner(position),\n visibleToasts,\n duration,\n closeButton,\n richColors,\n // On touch the equivalent of hover-to-expand is tap-to-expand,\n // which sonner-native already implements when `expand` is set.\n expand,\n offset,\n gap,\n });\n};\n\nfunction mapPositionForSonner(p: ToasterPosition): string {\n return p;\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { Platform } from 'react-native';\nimport { getSonner, HAS_SONNER } from './sonner-bridge';\nimport { getSonnerNative } from './sonner-native-bridge';\nimport type { ToastOptions, ToastTone } from './types';\n\n/**\n * Imperative toast API.\n *\n * - Web → delegates to `sonner` (Emil Kowalski).\n * - Native → delegates to `sonner-native` (Gunnar Torfi's port).\n *\n * Userland never branches on `Platform.OS` — `toast(...)`, `toast.success(...)`\n * and friends call the right package transparently.\n *\n * Example:\n * ```tsx\n * import { toast, Toaster } from '@nori-ui/core';\n *\n * function App() {\n * return (\n * <>\n * <Button onPress={() => toast.success('Saved')}>Save</Button>\n * <Toaster position=\"top-right\" richColors />\n * </>\n * );\n * }\n * ```\n */\n\ntype ToastId = string | number;\n// Both sonner and sonner-native expose the same callable shape on\n// their `toast` export — default callable plus `success` / `error` /\n// `warning` / `info` / `dismiss` / `promise`. The exact types differ\n// upstream (sonner ships ExternalToast options; sonner-native ships its\n// own option shape), but the runtime contract is identical for our\n// purposes. Use a structural shim and cast at the bridge boundary.\ntype ToastFn = {\n (message: ReactNode, options?: Record<string, unknown>): ToastId;\n success: (message: ReactNode, options?: Record<string, unknown>) => ToastId;\n error: (message: ReactNode, options?: Record<string, unknown>) => ToastId;\n warning: (message: ReactNode, options?: Record<string, unknown>) => ToastId;\n info: (message: ReactNode, options?: Record<string, unknown>) => ToastId;\n dismiss: (id?: ToastId) => void;\n promise: <T>(p: Promise<T>, opts: unknown) => ToastId;\n};\ntype SonnerLike = { toast: ToastFn };\n\nfunction getActive(): SonnerLike | null {\n if (HAS_SONNER) {\n return getSonner() as SonnerLike | null;\n }\n if (Platform.OS !== 'web') {\n return getSonnerNative() as SonnerLike | null;\n }\n return null;\n}\n\n/**\n * Map our cross-platform `tone` to sonner's named methods. Both sonner\n * and sonner-native expose the same `success` / `error` / `warning` /\n * `info` shortcuts plus a default callable, so a single dispatcher\n * works for both.\n */\nfunction dispatch(tone: ToastTone, title: ReactNode, options: ToastOptions): ToastId | undefined {\n const active = getActive();\n if (!active) {\n return undefined;\n }\n const mapped: Record<string, unknown> = { ...options };\n if (options.action) {\n mapped.action = { label: options.action.label, onClick: options.action.onClick };\n }\n if (options.cancel) {\n mapped.cancel = { label: options.cancel.label, onClick: options.cancel.onClick };\n }\n delete mapped.tone;\n switch (tone) {\n case 'success':\n return active.toast.success(title, mapped);\n case 'danger':\n return active.toast.error(title, mapped);\n case 'warning':\n return active.toast.warning(title, mapped);\n case 'info':\n return active.toast.info(title, mapped);\n default:\n return active.toast(title, mapped);\n }\n}\n\nfunction show(title: ReactNode, options: ToastOptions = {}): ToastId {\n const tone: ToastTone = options.tone ?? 'default';\n const id = dispatch(tone, title, options);\n // Both sonner and sonner-native return string|number ids. If the\n // active provider couldn't dispatch (e.g. the package isn't installed\n // on a particular platform), return a synthetic id so the caller's\n // chained `.dismiss(id)` still resolves cleanly.\n return id ?? `nori-toast-${Date.now()}`;\n}\n\nconst toastFn = show as ((title: ReactNode, options?: ToastOptions) => ToastId) & {\n success: (title: ReactNode, options?: ToastOptions) => ToastId;\n error: (title: ReactNode, options?: ToastOptions) => ToastId;\n warning: (title: ReactNode, options?: ToastOptions) => ToastId;\n info: (title: ReactNode, options?: ToastOptions) => ToastId;\n message: (title: ReactNode, options?: ToastOptions) => ToastId;\n dismiss: (id?: ToastId) => void;\n promise: <T>(\n promise: Promise<T> | (() => Promise<T>),\n opts: {\n loading: ReactNode;\n success: ReactNode | ((data: T) => ReactNode);\n error: ReactNode | ((err: unknown) => ReactNode);\n }\n ) => ToastId;\n};\n\ntoastFn.success = (title, options = {}) => show(title, { ...options, tone: 'success' });\ntoastFn.error = (title, options = {}) => show(title, { ...options, tone: 'danger' });\ntoastFn.warning = (title, options = {}) => show(title, { ...options, tone: 'warning' });\ntoastFn.info = (title, options = {}) => show(title, { ...options, tone: 'info' });\ntoastFn.message = (title, options = {}) => show(title, { ...options, tone: 'default' });\n\ntoastFn.dismiss = (id) => {\n const active = getActive();\n if (!active) {\n return;\n }\n if (id === undefined) {\n active.toast.dismiss();\n } else {\n active.toast.dismiss(id);\n }\n};\n\ntoastFn.promise = (promise, opts) => {\n const resolved = typeof promise === 'function' ? promise() : promise;\n const active = getActive();\n if (!active) {\n return `nori-toast-${Date.now()}`;\n }\n return active.toast.promise(resolved, opts) as ToastId;\n};\n\nexport const toast = toastFn;\n"]}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { ReactNode, createElement } from 'react';
|
|
2
|
+
|
|
3
|
+
type ToastTone = 'default' | 'info' | 'success' | 'warning' | 'danger';
|
|
4
|
+
type ToasterPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
|
|
5
|
+
type ToastAction = {
|
|
6
|
+
/** Visible button label. */
|
|
7
|
+
label: string;
|
|
8
|
+
/** Click handler. */
|
|
9
|
+
onClick: () => void;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Options accepted by `toast(...)` and the per-tone shortcuts. Mirrors
|
|
13
|
+
* sonner's options with one renaming for cross-platform clarity:
|
|
14
|
+
* `description` is the body line under the title, `action` and `cancel`
|
|
15
|
+
* are buttons rendered inline.
|
|
16
|
+
*/
|
|
17
|
+
type ToastOptions = {
|
|
18
|
+
/** Body line below the title. */
|
|
19
|
+
description?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Auto-dismiss after this many milliseconds. Pass `Infinity` (or a
|
|
22
|
+
* negative number) to keep the toast open until manually dismissed.
|
|
23
|
+
* @defaultValue 4000
|
|
24
|
+
*/
|
|
25
|
+
duration?: number;
|
|
26
|
+
/** Inline action button (typically "Undo"). */
|
|
27
|
+
action?: ToastAction;
|
|
28
|
+
/** Inline cancel button. */
|
|
29
|
+
cancel?: ToastAction;
|
|
30
|
+
/**
|
|
31
|
+
* Visible severity tone. Drives the icon and accent. Library
|
|
32
|
+
* convenience helpers (`toast.success`, etc.) set this for you.
|
|
33
|
+
* @defaultValue 'default'
|
|
34
|
+
*/
|
|
35
|
+
tone?: ToastTone;
|
|
36
|
+
/** Stable id — useful for updating an existing toast or dismissing it. */
|
|
37
|
+
id?: string | number;
|
|
38
|
+
/** Override the global `<Toaster position>` for this toast only. */
|
|
39
|
+
position?: ToasterPosition;
|
|
40
|
+
/** Custom icon override. Applied to all platforms. */
|
|
41
|
+
icon?: ReactNode;
|
|
42
|
+
/** Optional className for the toast surface (web only — native ignores). */
|
|
43
|
+
className?: string;
|
|
44
|
+
};
|
|
45
|
+
type ToasterProps = {
|
|
46
|
+
/** Where the toast stack anchors. @defaultValue 'top-center' */
|
|
47
|
+
position?: ToasterPosition;
|
|
48
|
+
/**
|
|
49
|
+
* Maximum number of toasts visible at once. Older toasts collapse
|
|
50
|
+
* behind newer ones (web) or pop off the top of the stack (native).
|
|
51
|
+
* @defaultValue 3
|
|
52
|
+
*/
|
|
53
|
+
visibleToasts?: number;
|
|
54
|
+
/** Spacing between stacked toasts in px. @defaultValue 14 */
|
|
55
|
+
gap?: number;
|
|
56
|
+
/**
|
|
57
|
+
* Pad the toaster away from the viewport edges by this many px.
|
|
58
|
+
* @defaultValue 24
|
|
59
|
+
*/
|
|
60
|
+
offset?: number;
|
|
61
|
+
/**
|
|
62
|
+
* Show a small close button in the top-right corner of each toast.
|
|
63
|
+
* @defaultValue false
|
|
64
|
+
*/
|
|
65
|
+
closeButton?: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Web only: full-color toasts per tone (sonner's `richColors`). On
|
|
68
|
+
* native this is honored visually too, with the same palette recipe.
|
|
69
|
+
* @defaultValue false
|
|
70
|
+
*/
|
|
71
|
+
richColors?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Web only: expand the stack on hover (sonner's `expand`). Native
|
|
74
|
+
* always renders the visible toasts uncollapsed, so this is a no-op
|
|
75
|
+
* there.
|
|
76
|
+
* @defaultValue false
|
|
77
|
+
*/
|
|
78
|
+
expand?: boolean;
|
|
79
|
+
/** Default duration in ms for toasts that don't pass their own. @defaultValue 4000 */
|
|
80
|
+
duration?: number;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Toast viewport. Mount once near the app root; the imperative
|
|
85
|
+
* `toast(...)` function pushes to it.
|
|
86
|
+
*
|
|
87
|
+
* Implementation is platform-split:
|
|
88
|
+
*
|
|
89
|
+
* - Web: delegates to `sonner`'s `<Toaster>` (Emil Kowalski's original).
|
|
90
|
+
* Sonner already handles stacking, expand-on-hover, swipe-to-dismiss
|
|
91
|
+
* on touch screens, position, rich colors, etc.
|
|
92
|
+
*
|
|
93
|
+
* - Native: delegates to `sonner-native`'s `<Toaster>` (Gunnar Torfi's
|
|
94
|
+
* port, built on Reanimated 3 + Gesture Handler). Same behavior:
|
|
95
|
+
* stacked layering with the front toast in focus, tap-to-expand
|
|
96
|
+
* (since hover doesn't exist on touch), swipe up/down to dismiss,
|
|
97
|
+
* slide+fade in/out from the anchored edge. Six positions
|
|
98
|
+
* (top|bottom × left|center|right) align with sonner's positions.
|
|
99
|
+
*
|
|
100
|
+
* Both packages share the imperative `toast(...)` API, which keeps
|
|
101
|
+
* userland identical across platforms.
|
|
102
|
+
*/
|
|
103
|
+
declare const Toaster: (props: ToasterProps) => ReturnType<typeof createElement> | null;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Imperative toast API.
|
|
107
|
+
*
|
|
108
|
+
* - Web → delegates to `sonner` (Emil Kowalski).
|
|
109
|
+
* - Native → delegates to `sonner-native` (Gunnar Torfi's port).
|
|
110
|
+
*
|
|
111
|
+
* Userland never branches on `Platform.OS` — `toast(...)`, `toast.success(...)`
|
|
112
|
+
* and friends call the right package transparently.
|
|
113
|
+
*
|
|
114
|
+
* Example:
|
|
115
|
+
* ```tsx
|
|
116
|
+
* import { toast, Toaster } from '@nori-ui/core';
|
|
117
|
+
*
|
|
118
|
+
* function App() {
|
|
119
|
+
* return (
|
|
120
|
+
* <>
|
|
121
|
+
* <Button onPress={() => toast.success('Saved')}>Save</Button>
|
|
122
|
+
* <Toaster position="top-right" richColors />
|
|
123
|
+
* </>
|
|
124
|
+
* );
|
|
125
|
+
* }
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
type ToastId = string | number;
|
|
129
|
+
declare const toast: ((title: ReactNode, options?: ToastOptions) => ToastId) & {
|
|
130
|
+
success: (title: ReactNode, options?: ToastOptions) => ToastId;
|
|
131
|
+
error: (title: ReactNode, options?: ToastOptions) => ToastId;
|
|
132
|
+
warning: (title: ReactNode, options?: ToastOptions) => ToastId;
|
|
133
|
+
info: (title: ReactNode, options?: ToastOptions) => ToastId;
|
|
134
|
+
message: (title: ReactNode, options?: ToastOptions) => ToastId;
|
|
135
|
+
dismiss: (id?: ToastId) => void;
|
|
136
|
+
promise: <T>(promise: Promise<T> | (() => Promise<T>), opts: {
|
|
137
|
+
loading: ReactNode;
|
|
138
|
+
success: ReactNode | ((data: T) => ReactNode);
|
|
139
|
+
error: ReactNode | ((err: unknown) => ReactNode);
|
|
140
|
+
}) => ToastId;
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
export { type ToastAction, type ToastOptions, type ToastTone, Toaster, type ToasterPosition, type ToasterProps, toast };
|