@nori-ui/core 1.5.0 → 1.7.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/Table.shared-BymRgTnY.d.cts +54 -0
- package/dist/Table.shared-BymRgTnY.d.ts +54 -0
- 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-76FZF4GM.js → chunk-3B345SQU.js} +8 -125
- package/dist/chunk-3B345SQU.js.map +1 -0
- package/dist/{chunk-WOF67PKT.js → chunk-3CEJ5TB4.js} +3 -3
- package/dist/{chunk-WOF67PKT.js.map → chunk-3CEJ5TB4.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-46OT4PA6.js → chunk-3W3XYULK.js} +3 -3
- package/dist/{chunk-46OT4PA6.js.map → chunk-3W3XYULK.js.map} +1 -1
- package/dist/{chunk-6PO2IWB3.js → chunk-4UFAZLSZ.js} +5 -3
- package/dist/chunk-4UFAZLSZ.js.map +1 -0
- package/dist/chunk-5YHT252H.js +145 -0
- package/dist/chunk-5YHT252H.js.map +1 -0
- package/dist/chunk-73CUV7MW.js +125 -0
- package/dist/chunk-73CUV7MW.js.map +1 -0
- 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-C32XGHWO.js +202 -0
- package/dist/chunk-C32XGHWO.js.map +1 -0
- package/dist/{chunk-UUXWRDWW.js → chunk-C5HQPXRI.js} +3 -3
- package/dist/{chunk-UUXWRDWW.js.map → chunk-C5HQPXRI.js.map} +1 -1
- package/dist/{chunk-2UXKXUX2.js → chunk-CPIKN4BX.js} +3 -3
- package/dist/{chunk-2UXKXUX2.js.map → chunk-CPIKN4BX.js.map} +1 -1
- package/dist/{chunk-GELLSU64.js → chunk-EN4CLDGZ.js} +3 -3
- package/dist/{chunk-GELLSU64.js.map → chunk-EN4CLDGZ.js.map} +1 -1
- package/dist/{chunk-WAKKQROH.js → chunk-F5UKI7XD.js} +3 -3
- package/dist/{chunk-WAKKQROH.js.map → chunk-F5UKI7XD.js.map} +1 -1
- package/dist/{chunk-MJ4AGXS7.js → chunk-GJMHNEQ3.js} +3 -3
- package/dist/{chunk-MJ4AGXS7.js.map → chunk-GJMHNEQ3.js.map} +1 -1
- package/dist/chunk-GTAXVTLF.js +43 -0
- package/dist/chunk-GTAXVTLF.js.map +1 -0
- package/dist/{chunk-WTNDPO2V.js → chunk-H2LHWJ52.js} +3 -3
- package/dist/{chunk-WTNDPO2V.js.map → chunk-H2LHWJ52.js.map} +1 -1
- package/dist/{chunk-L5X4SYJ4.js → chunk-HXCETKCC.js} +3 -3
- package/dist/{chunk-L5X4SYJ4.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-O4NMS3KB.js → chunk-IIVTPN62.js} +3 -3
- package/dist/{chunk-O4NMS3KB.js.map → chunk-IIVTPN62.js.map} +1 -1
- package/dist/{chunk-RM5TSXVE.js → chunk-ISCJST4P.js} +3 -3
- package/dist/{chunk-RM5TSXVE.js.map → chunk-ISCJST4P.js.map} +1 -1
- package/dist/{chunk-UF5OENHV.js → chunk-IWM2XDXH.js} +3 -3
- package/dist/{chunk-UF5OENHV.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-AFQIK6JI.js → chunk-L6VYDM7S.js} +3 -3
- package/dist/{chunk-AFQIK6JI.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-H7MFAFV4.js → chunk-MK57AOTI.js} +4 -4
- package/dist/{chunk-H7MFAFV4.js.map → chunk-MK57AOTI.js.map} +1 -1
- package/dist/{chunk-FDBQOQMW.js → chunk-MOAIQHR7.js} +3 -3
- package/dist/{chunk-FDBQOQMW.js.map → chunk-MOAIQHR7.js.map} +1 -1
- package/dist/{chunk-LWQZ257T.js → chunk-MYBBBLYE.js} +3 -3
- package/dist/{chunk-LWQZ257T.js.map → chunk-MYBBBLYE.js.map} +1 -1
- package/dist/{chunk-F7G6R373.js → chunk-O6M3F7BZ.js} +5 -5
- package/dist/{chunk-F7G6R373.js.map → chunk-O6M3F7BZ.js.map} +1 -1
- package/dist/{chunk-XP55RZ3D.js → chunk-OELY6K44.js} +3 -3
- package/dist/{chunk-XP55RZ3D.js.map → chunk-OELY6K44.js.map} +1 -1
- package/dist/{chunk-GRDVE3IR.js → chunk-OIHX5B4R.js} +3 -3
- package/dist/{chunk-GRDVE3IR.js.map → chunk-OIHX5B4R.js.map} +1 -1
- package/dist/{chunk-4I37QSEM.js → chunk-PGYEIXCO.js} +5 -5
- package/dist/{chunk-4I37QSEM.js.map → chunk-PGYEIXCO.js.map} +1 -1
- package/dist/{chunk-UJ5KFRDE.js → chunk-PJTCO76H.js} +3 -3
- package/dist/{chunk-UJ5KFRDE.js.map → chunk-PJTCO76H.js.map} +1 -1
- package/dist/{chunk-6JVUVBZH.js → chunk-PJXVLE24.js} +5 -5
- package/dist/{chunk-6JVUVBZH.js.map → chunk-PJXVLE24.js.map} +1 -1
- package/dist/{chunk-IGLMPAWE.js → chunk-PLQPBMG2.js} +3 -3
- package/dist/{chunk-IGLMPAWE.js.map → chunk-PLQPBMG2.js.map} +1 -1
- package/dist/{chunk-HTF6FDB6.js → chunk-PQW5LKAI.js} +3 -3
- package/dist/{chunk-HTF6FDB6.js.map → chunk-PQW5LKAI.js.map} +1 -1
- package/dist/{chunk-VMAGFYHG.js → chunk-RI4Y2C5U.js} +3 -3
- package/dist/{chunk-VMAGFYHG.js.map → chunk-RI4Y2C5U.js.map} +1 -1
- package/dist/{chunk-BNDUQNG7.js → chunk-SF6WPUC5.js} +3 -3
- package/dist/{chunk-BNDUQNG7.js.map → chunk-SF6WPUC5.js.map} +1 -1
- package/dist/{chunk-SINLREQV.js → chunk-STX5UKYT.js} +3 -3
- package/dist/{chunk-SINLREQV.js.map → chunk-STX5UKYT.js.map} +1 -1
- package/dist/{chunk-KCLWPSV5.js → chunk-TSWPHJIU.js} +4 -4
- package/dist/{chunk-KCLWPSV5.js.map → chunk-TSWPHJIU.js.map} +1 -1
- package/dist/{chunk-5BM6H2CD.js → chunk-U2ZKY2CP.js} +3 -3
- package/dist/{chunk-5BM6H2CD.js.map → chunk-U2ZKY2CP.js.map} +1 -1
- package/dist/{chunk-C6TRLHMW.js → chunk-UKDDK42K.js} +3 -3
- package/dist/{chunk-C6TRLHMW.js.map → chunk-UKDDK42K.js.map} +1 -1
- package/dist/{chunk-UPVNZPFV.js → chunk-USFXANEU.js} +3 -3
- package/dist/{chunk-UPVNZPFV.js.map → chunk-USFXANEU.js.map} +1 -1
- package/dist/{chunk-Y4ZRSW35.js → chunk-V5QSMDZL.js} +3 -3
- package/dist/{chunk-Y4ZRSW35.js.map → chunk-V5QSMDZL.js.map} +1 -1
- package/dist/{chunk-EFK7726V.js → chunk-V75O7QQO.js} +3 -3
- package/dist/{chunk-EFK7726V.js.map → chunk-V75O7QQO.js.map} +1 -1
- package/dist/{chunk-CGQIVFCN.js → chunk-VL2WNGPF.js} +3 -3
- package/dist/{chunk-CGQIVFCN.js.map → chunk-VL2WNGPF.js.map} +1 -1
- package/dist/{chunk-VCJF75T2.js → chunk-VLZANXRZ.js} +3 -3
- package/dist/{chunk-VCJF75T2.js.map → chunk-VLZANXRZ.js.map} +1 -1
- package/dist/{chunk-ND7MRYW7.js → chunk-VOF3S5I4.js} +4 -4
- package/dist/{chunk-ND7MRYW7.js.map → chunk-VOF3S5I4.js.map} +1 -1
- package/dist/chunk-VP7DRJUZ.js +3 -0
- package/dist/chunk-VP7DRJUZ.js.map +1 -0
- package/dist/chunk-XQNVWHMN.js +60 -0
- package/dist/chunk-XQNVWHMN.js.map +1 -0
- package/dist/{chunk-W3HMOOON.js → chunk-ZGFXKYA5.js} +3 -3
- package/dist/{chunk-W3HMOOON.js.map → chunk-ZGFXKYA5.js.map} +1 -1
- package/dist/client.cjs +935 -156
- 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 +57 -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.cjs +3 -1
- package/dist/components/Breadcrumb/index.cjs.map +1 -1
- package/dist/components/Breadcrumb/index.js +5 -5
- 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.cjs +3 -1
- package/dist/components/Calendar/index.cjs.map +1 -1
- package/dist/components/Calendar/index.js +5 -5
- package/dist/components/Card/index.js +2 -2
- 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.cjs +770 -0
- package/dist/components/DataTable/index.cjs.map +1 -0
- package/dist/components/DataTable/index.d.cts +53 -0
- package/dist/components/DataTable/index.d.ts +53 -0
- package/dist/components/DataTable/index.js +8 -0
- package/dist/components/DataTable/index.js.map +1 -0
- package/dist/components/DatePicker/index.cjs +3 -1
- package/dist/components/DatePicker/index.cjs.map +1 -1
- package/dist/components/DatePicker/index.js +7 -7
- 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/Field/index.cjs +3 -1
- package/dist/components/Field/index.cjs.map +1 -1
- package/dist/components/Field/index.d.cts +2 -2
- package/dist/components/Field/index.d.ts +2 -2
- package/dist/components/Field/index.js +3 -3
- package/dist/components/FloatButton/index.cjs +3 -1
- package/dist/components/FloatButton/index.cjs.map +1 -1
- package/dist/components/FloatButton/index.js +5 -5
- package/dist/components/HStack/index.js +4 -4
- package/dist/components/InputGroup/index.js +2 -2
- 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/Label/index.cjs +3 -1
- package/dist/components/Label/index.cjs.map +1 -1
- package/dist/components/Label/index.js +3 -3
- package/dist/components/Pagination/index.cjs +3 -1
- package/dist/components/Pagination/index.cjs.map +1 -1
- package/dist/components/Pagination/index.js +6 -5
- 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.cjs +461 -0
- package/dist/components/Table/index.cjs.map +1 -0
- package/dist/components/Table/index.d.cts +16 -0
- package/dist/components/Table/index.d.ts +16 -0
- package/dist/components/Table/index.js +7 -0
- package/dist/components/Table/index.js.map +1 -0
- 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/i18n/index.cjs +3 -1
- package/dist/i18n/index.cjs.map +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/index.cjs +935 -156
- 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 -44
- package/dist/slot/index.d.cts +2 -2
- package/dist/slot/index.d.ts +2 -2
- package/package.json +1 -1
- package/dist/chunk-6PO2IWB3.js.map +0 -1
- package/dist/chunk-76FZF4GM.js.map +0 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { cn } from './chunk-CHXHRJNZ.js';
|
|
2
|
+
import { __name } from './chunk-WCQVDF3K.js';
|
|
3
|
+
import { View } from 'react-native';
|
|
4
|
+
import { jsx } from 'nativewind/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var BASE_STYLE = {
|
|
7
|
+
overflow: "hidden"
|
|
8
|
+
};
|
|
9
|
+
var AspectRatio = /* @__PURE__ */ __name(({ ratio, children, className, testID }) => {
|
|
10
|
+
const containerStyle = {
|
|
11
|
+
...BASE_STYLE,
|
|
12
|
+
aspectRatio: ratio
|
|
13
|
+
};
|
|
14
|
+
return /* @__PURE__ */ jsx(
|
|
15
|
+
View,
|
|
16
|
+
{
|
|
17
|
+
...testID !== void 0 ? { testID } : {},
|
|
18
|
+
className: cn("overflow-hidden", className),
|
|
19
|
+
style: containerStyle,
|
|
20
|
+
children
|
|
21
|
+
}
|
|
22
|
+
);
|
|
23
|
+
}, "AspectRatio");
|
|
24
|
+
|
|
25
|
+
export { AspectRatio };
|
|
26
|
+
//# sourceMappingURL=chunk-KFFGDET3.js.map
|
|
27
|
+
//# sourceMappingURL=chunk-KFFGDET3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/AspectRatio/AspectRatio.tsx"],"names":[],"mappings":";;;;;AAqBA,IAAM,UAAA,GAAwB;AAAA,EAC1B,QAAA,EAAU;AACd,CAAA;AAaO,IAAM,8BAAc,MAAA,CAAA,CAAC,EAAE,OAAO,QAAA,EAAU,SAAA,EAAW,QAAO,KAAwB;AACrF,EAAA,MAAM,cAAA,GAA4B;AAAA,IAC9B,GAAG,UAAA;AAAA,IACH,WAAA,EAAa;AAAA,GACjB;AAEA,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACI,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,MAC1C,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA;AAAA,MAC1C,KAAA,EAAO,cAAA;AAAA,MAEN;AAAA;AAAA,GACL;AAER,CAAA,EAf2B,aAAA","file":"chunk-KFFGDET3.js","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { View } from 'react-native';\nimport { cn } from '../../utils/cn';\n\nexport type AspectRatioProps = {\n /**\n * The ratio expressed as width / height. Common values:\n * - `16 / 9` (1.777…) — widescreen video\n * - `4 / 3` (1.333…) — classic photo\n * - `1` — square\n * - `2 / 3` (0.666…) — portrait\n */\n ratio: number;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nconst BASE_STYLE: ViewStyle = {\n overflow: 'hidden',\n};\n\n/**\n * Wraps children in a container that maintains a fixed width-to-height ratio.\n * Works identically on web and native — React Native's `aspectRatio` style\n * property maps to the CSS `aspect-ratio` property via react-native-web.\n *\n * ```tsx\n * <AspectRatio ratio={16 / 9}>\n * <Image source={src} style={{ width: '100%', height: '100%' }} />\n * </AspectRatio>\n * ```\n */\nexport const AspectRatio = ({ ratio, children, className, testID }: AspectRatioProps) => {\n const containerStyle: ViewStyle = {\n ...BASE_STYLE,\n aspectRatio: ratio,\n };\n\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n className={cn('overflow-hidden', className)}\n style={containerStyle}\n >\n {children}\n </View>\n );\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { wrapStringChildren } from './chunk-
|
|
1
|
+
import { wrapStringChildren } from './chunk-VLZANXRZ.js';
|
|
2
2
|
import { cn } from './chunk-CHXHRJNZ.js';
|
|
3
3
|
import { __name } from './chunk-WCQVDF3K.js';
|
|
4
4
|
import { View } from 'react-native';
|
|
@@ -76,5 +76,5 @@ var VStack = /* @__PURE__ */ __name(({ gap, align, justify, className, children,
|
|
|
76
76
|
}, "VStack");
|
|
77
77
|
|
|
78
78
|
export { VStack };
|
|
79
|
-
//# sourceMappingURL=chunk-
|
|
80
|
-
//# sourceMappingURL=chunk-
|
|
79
|
+
//# sourceMappingURL=chunk-L6VYDM7S.js.map
|
|
80
|
+
//# sourceMappingURL=chunk-L6VYDM7S.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/VStack/VStack.tsx"],"names":[],"mappings":";;;;;;AAcA,IAAM,WAAA,GAA0C;AAAA,EAC5C,KAAA,EAAO,aAAA;AAAA,EACP,MAAA,EAAQ,cAAA;AAAA,EACR,GAAA,EAAK,WAAA;AAAA,EACL,OAAA,EAAS,eAAA;AAAA,EACT,QAAA,EAAU;AACd,CAAA;AAEA,IAAM,aAAA,GAA8C;AAAA,EAChD,KAAA,EAAO,eAAA;AAAA,EACP,MAAA,EAAQ,gBAAA;AAAA,EACR,GAAA,EAAK,aAAA;AAAA,EACL,OAAA,EAAS,iBAAA;AAAA,EACT,MAAA,EAAQ,gBAAA;AAAA,EACR,MAAA,EAAQ;AACZ,CAAA;AAEA,IAAM,WAAA,GAA2D;AAAA,EAC7D,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAK,UAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU;AACd,CAAA;AAEA,IAAM,aAAA,GAAmE;AAAA,EACrE,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAK,UAAA;AAAA,EACL,OAAA,EAAS,eAAA;AAAA,EACT,MAAA,EAAQ,cAAA;AAAA,EACR,MAAA,EAAQ;AACZ,CAAA;AAEA,IAAM,MAAA,GAAmC;AAAA,EACrC,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI;AACR,CAAA;AAOO,IAAM,MAAA,mBAAS,MAAA,CAAA,CAAC,EAAE,GAAA,EAAK,KAAA,EAAO,OAAA,EAAS,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,GAAG,IAAA,EAAK,KAAmB;AACjG,EAAA,MAAM,MAAA,GAAoB,EAAE,aAAA,EAAe,QAAA,EAAS;AACpD,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,KAAQ,CAAA,EAAG;AAChC,IAAA,MAAA,CAAO,GAAA,GAAM,OAAO,GAAG,CAAA;AAAA,EAC3B;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACrB,IAAA,MAAA,CAAO,UAAA,GAAa,YAAY,KAAK,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,YAAY,MAAA,EAAW;AACvB,IAAA,MAAA,CAAO,cAAA,GAAiB,cAAc,OAAO,CAAA;AAAA,EACjD;AACA,EAAA,MAAM,SAAS,KAAA,KAAU,MAAA,GAAY,MAAA,GAAU,CAAC,QAAQ,KAAK,CAAA;AAC7D,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACI,GAAG,IAAA;AAAA,MACJ,KAAA,EAAO,MAAA;AAAA,MACP,SAAA,EAAW,EAAA;AAAA,QACP,UAAA;AAAA,QACA,QAAQ,MAAA,IAAa,GAAA,KAAQ,CAAA,GAAI,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA,GAAK,MAAA;AAAA,QAChD,KAAA,KAAU,MAAA,GAAY,WAAA,CAAY,KAAK,CAAA,GAAI,MAAA;AAAA,QAC3C,OAAA,KAAY,MAAA,GAAY,aAAA,CAAc,OAAO,CAAA,GAAI,MAAA;AAAA,QACjD;AAAA,OACJ;AAAA,MAEC,6BAAmB,QAAQ;AAAA;AAAA,GAChC;AAER,CAAA,EA3BsB,QAAA","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/VStack/VStack.tsx"],"names":[],"mappings":";;;;;;AAcA,IAAM,WAAA,GAA0C;AAAA,EAC5C,KAAA,EAAO,aAAA;AAAA,EACP,MAAA,EAAQ,cAAA;AAAA,EACR,GAAA,EAAK,WAAA;AAAA,EACL,OAAA,EAAS,eAAA;AAAA,EACT,QAAA,EAAU;AACd,CAAA;AAEA,IAAM,aAAA,GAA8C;AAAA,EAChD,KAAA,EAAO,eAAA;AAAA,EACP,MAAA,EAAQ,gBAAA;AAAA,EACR,GAAA,EAAK,aAAA;AAAA,EACL,OAAA,EAAS,iBAAA;AAAA,EACT,MAAA,EAAQ,gBAAA;AAAA,EACR,MAAA,EAAQ;AACZ,CAAA;AAEA,IAAM,WAAA,GAA2D;AAAA,EAC7D,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAK,UAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU;AACd,CAAA;AAEA,IAAM,aAAA,GAAmE;AAAA,EACrE,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAK,UAAA;AAAA,EACL,OAAA,EAAS,eAAA;AAAA,EACT,MAAA,EAAQ,cAAA;AAAA,EACR,MAAA,EAAQ;AACZ,CAAA;AAEA,IAAM,MAAA,GAAmC;AAAA,EACrC,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI;AACR,CAAA;AAOO,IAAM,MAAA,mBAAS,MAAA,CAAA,CAAC,EAAE,GAAA,EAAK,KAAA,EAAO,OAAA,EAAS,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,GAAG,IAAA,EAAK,KAAmB;AACjG,EAAA,MAAM,MAAA,GAAoB,EAAE,aAAA,EAAe,QAAA,EAAS;AACpD,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,KAAQ,CAAA,EAAG;AAChC,IAAA,MAAA,CAAO,GAAA,GAAM,OAAO,GAAG,CAAA;AAAA,EAC3B;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACrB,IAAA,MAAA,CAAO,UAAA,GAAa,YAAY,KAAK,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,YAAY,MAAA,EAAW;AACvB,IAAA,MAAA,CAAO,cAAA,GAAiB,cAAc,OAAO,CAAA;AAAA,EACjD;AACA,EAAA,MAAM,SAAS,KAAA,KAAU,MAAA,GAAY,MAAA,GAAU,CAAC,QAAQ,KAAK,CAAA;AAC7D,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACI,GAAG,IAAA;AAAA,MACJ,KAAA,EAAO,MAAA;AAAA,MACP,SAAA,EAAW,EAAA;AAAA,QACP,UAAA;AAAA,QACA,QAAQ,MAAA,IAAa,GAAA,KAAQ,CAAA,GAAI,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA,GAAK,MAAA;AAAA,QAChD,KAAA,KAAU,MAAA,GAAY,WAAA,CAAY,KAAK,CAAA,GAAI,MAAA;AAAA,QAC3C,OAAA,KAAY,MAAA,GAAY,aAAA,CAAc,OAAO,CAAA,GAAI,MAAA;AAAA,QACjD;AAAA,OACJ;AAAA,MAEC,6BAAmB,QAAQ;AAAA;AAAA,GAChC;AAER,CAAA,EA3BsB,QAAA","file":"chunk-L6VYDM7S.js","sourcesContent":["import type { ViewProps, ViewStyle } from 'react-native';\nimport { View } from 'react-native';\nimport { cn } from '../../utils/cn';\nimport { wrapStringChildren } from '../../utils/wrap-string-children';\nimport type { StackAlign, StackGap, StackJustify } from '../HStack/HStack';\n\nexport type VStackProps = ViewProps & {\n gap?: StackGap;\n align?: StackAlign;\n justify?: StackJustify;\n className?: string;\n testID?: string;\n};\n\nconst ALIGN_CLASS: Record<StackAlign, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n};\n\nconst JUSTIFY_CLASS: Record<StackJustify, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n};\n\nconst ALIGN_STYLE: Record<StackAlign, ViewStyle['alignItems']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n};\n\nconst JUSTIFY_STYLE: Record<StackJustify, ViewStyle['justifyContent']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n};\n\nconst GAP_PX: Record<StackGap, number> = {\n 0: 0,\n 1: 4,\n 2: 8,\n 3: 12,\n 4: 16,\n 5: 20,\n 6: 24,\n 8: 32,\n 10: 40,\n 12: 48,\n};\n\n/**\n * Vertical flex layout primitive. RSC-safe.\n *\n * Layout is driven by inline style; see HStack for the rationale.\n */\nexport const VStack = ({ gap, align, justify, className, children, style, ...rest }: VStackProps) => {\n const inline: ViewStyle = { flexDirection: 'column' };\n if (gap !== undefined && gap !== 0) {\n inline.gap = GAP_PX[gap];\n }\n if (align !== undefined) {\n inline.alignItems = ALIGN_STYLE[align];\n }\n if (justify !== undefined) {\n inline.justifyContent = JUSTIFY_STYLE[justify];\n }\n const merged = style === undefined ? inline : ([inline, style] as ViewStyle[]);\n return (\n <View\n {...rest}\n style={merged}\n className={cn(\n 'flex-col',\n gap !== undefined && gap !== 0 ? `gap-${gap}` : undefined,\n align !== undefined ? ALIGN_CLASS[align] : undefined,\n justify !== undefined ? JUSTIFY_CLASS[justify] : undefined,\n className\n )}\n >\n {wrapStringChildren(children)}\n </View>\n );\n};\n"]}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { px } from './chunk-5A2QOOVN.js';
|
|
2
|
+
import { useThemeColors } from './chunk-R5JMDDCB.js';
|
|
3
|
+
import { cn } from './chunk-CHXHRJNZ.js';
|
|
4
|
+
import { __name } from './chunk-WCQVDF3K.js';
|
|
5
|
+
import { createContext, useId, useState, useCallback, useMemo, useRef, useEffect, useContext } from 'react';
|
|
6
|
+
import { View, Platform, Pressable, Text } from 'react-native';
|
|
7
|
+
import { jsx } from 'nativewind/jsx-runtime';
|
|
8
|
+
|
|
9
|
+
var CollapsibleContext = createContext(null);
|
|
10
|
+
var useCollapsibleContext = /* @__PURE__ */ __name((label) => {
|
|
11
|
+
const ctx = useContext(CollapsibleContext);
|
|
12
|
+
if (!ctx) {
|
|
13
|
+
throw new Error(`<${label}> must be rendered inside a <Collapsible>.`);
|
|
14
|
+
}
|
|
15
|
+
return ctx;
|
|
16
|
+
}, "useCollapsibleContext");
|
|
17
|
+
var CollapsibleRoot = /* @__PURE__ */ __name(({
|
|
18
|
+
open: controlledOpen,
|
|
19
|
+
defaultOpen = false,
|
|
20
|
+
onOpenChange,
|
|
21
|
+
children,
|
|
22
|
+
className,
|
|
23
|
+
testID
|
|
24
|
+
}) => {
|
|
25
|
+
const baseId = useId();
|
|
26
|
+
const [innerOpen, setInnerOpen] = useState(defaultOpen);
|
|
27
|
+
const isControlled = controlledOpen !== void 0;
|
|
28
|
+
const open = isControlled ? controlledOpen : innerOpen;
|
|
29
|
+
const toggle = useCallback(() => {
|
|
30
|
+
const next = !open;
|
|
31
|
+
if (!isControlled) {
|
|
32
|
+
setInnerOpen(next);
|
|
33
|
+
}
|
|
34
|
+
onOpenChange?.(next);
|
|
35
|
+
}, [open, isControlled, onOpenChange]);
|
|
36
|
+
const ctx = useMemo(
|
|
37
|
+
() => ({
|
|
38
|
+
open,
|
|
39
|
+
toggle,
|
|
40
|
+
contentId: `${baseId}-content`,
|
|
41
|
+
triggerId: `${baseId}-trigger`
|
|
42
|
+
}),
|
|
43
|
+
[open, toggle, baseId]
|
|
44
|
+
);
|
|
45
|
+
return /* @__PURE__ */ jsx(CollapsibleContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx(
|
|
46
|
+
View,
|
|
47
|
+
{
|
|
48
|
+
...testID !== void 0 ? { testID } : {},
|
|
49
|
+
className: cn("flex-col", className),
|
|
50
|
+
style: { flexDirection: "column" },
|
|
51
|
+
children
|
|
52
|
+
}
|
|
53
|
+
) });
|
|
54
|
+
}, "CollapsibleRoot");
|
|
55
|
+
var CollapsibleTrigger = /* @__PURE__ */ __name(({ children, className, testID }) => {
|
|
56
|
+
const { open, toggle, contentId, triggerId } = useCollapsibleContext("Collapsible.Trigger");
|
|
57
|
+
const colors = useThemeColors();
|
|
58
|
+
const triggerStyle = {
|
|
59
|
+
flexDirection: "row",
|
|
60
|
+
alignItems: "center",
|
|
61
|
+
paddingVertical: px(colors.spacing["2"]),
|
|
62
|
+
paddingHorizontal: px(colors.spacing["1"])
|
|
63
|
+
};
|
|
64
|
+
return /* @__PURE__ */ jsx(
|
|
65
|
+
Pressable,
|
|
66
|
+
{
|
|
67
|
+
id: triggerId,
|
|
68
|
+
...testID !== void 0 ? { testID } : {},
|
|
69
|
+
role: "button",
|
|
70
|
+
accessibilityRole: "button",
|
|
71
|
+
"aria-expanded": open,
|
|
72
|
+
"aria-controls": contentId,
|
|
73
|
+
onPress: toggle,
|
|
74
|
+
className: cn("flex-row items-center py-2 px-1", className),
|
|
75
|
+
style: triggerStyle,
|
|
76
|
+
children: typeof children === "string" ? /* @__PURE__ */ jsx(
|
|
77
|
+
Text,
|
|
78
|
+
{
|
|
79
|
+
style: {
|
|
80
|
+
color: colors.semantic.text.default,
|
|
81
|
+
fontFamily: colors.fontFamily.body,
|
|
82
|
+
fontSize: px(colors.fontSize.sm),
|
|
83
|
+
fontWeight: colors.fontWeight.medium
|
|
84
|
+
},
|
|
85
|
+
children
|
|
86
|
+
}
|
|
87
|
+
) : children
|
|
88
|
+
}
|
|
89
|
+
);
|
|
90
|
+
}, "CollapsibleTrigger");
|
|
91
|
+
var CollapsibleContent = /* @__PURE__ */ __name(({ children, className, testID }) => {
|
|
92
|
+
const { open, contentId, triggerId } = useCollapsibleContext("Collapsible.Content");
|
|
93
|
+
const wrapperRef = useRef(null);
|
|
94
|
+
const innerRef = useRef(null);
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
if (Platform.OS !== "web") {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const wrapper = wrapperRef.current;
|
|
100
|
+
const inner = innerRef.current;
|
|
101
|
+
if (!wrapper || !inner) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const isFirstPaint = wrapper.dataset.noriPainted !== "1";
|
|
105
|
+
wrapper.dataset.noriPainted = "1";
|
|
106
|
+
wrapper.style.overflow = "hidden";
|
|
107
|
+
wrapper.style.transitionProperty = "max-height, opacity";
|
|
108
|
+
wrapper.style.transitionDuration = "200ms";
|
|
109
|
+
wrapper.style.transitionTimingFunction = "cubic-bezier(0.16, 1, 0.3, 1)";
|
|
110
|
+
if (open) {
|
|
111
|
+
const target = inner.scrollHeight;
|
|
112
|
+
if (isFirstPaint) {
|
|
113
|
+
wrapper.style.maxHeight = `${target}px`;
|
|
114
|
+
wrapper.style.opacity = "1";
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
wrapper.style.maxHeight = "0px";
|
|
118
|
+
wrapper.style.opacity = "0";
|
|
119
|
+
void wrapper.offsetHeight;
|
|
120
|
+
requestAnimationFrame(() => {
|
|
121
|
+
wrapper.style.maxHeight = `${target}px`;
|
|
122
|
+
wrapper.style.opacity = "1";
|
|
123
|
+
});
|
|
124
|
+
} else {
|
|
125
|
+
if (isFirstPaint) {
|
|
126
|
+
wrapper.style.maxHeight = "0px";
|
|
127
|
+
wrapper.style.opacity = "0";
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const current = inner.scrollHeight;
|
|
131
|
+
wrapper.style.maxHeight = `${current}px`;
|
|
132
|
+
wrapper.style.opacity = "1";
|
|
133
|
+
void wrapper.offsetHeight;
|
|
134
|
+
requestAnimationFrame(() => {
|
|
135
|
+
wrapper.style.maxHeight = "0px";
|
|
136
|
+
wrapper.style.opacity = "0";
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}, [open]);
|
|
140
|
+
if (Platform.OS !== "web") {
|
|
141
|
+
if (!open) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
return /* @__PURE__ */ jsx(
|
|
145
|
+
View,
|
|
146
|
+
{
|
|
147
|
+
...testID !== void 0 ? { testID } : {},
|
|
148
|
+
id: contentId,
|
|
149
|
+
"aria-labelledby": triggerId,
|
|
150
|
+
className: cn("flex-col", className),
|
|
151
|
+
style: { flexDirection: "column" },
|
|
152
|
+
children
|
|
153
|
+
}
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
return /* @__PURE__ */ jsx(
|
|
157
|
+
View,
|
|
158
|
+
{
|
|
159
|
+
ref: (node) => {
|
|
160
|
+
wrapperRef.current = node;
|
|
161
|
+
},
|
|
162
|
+
...testID !== void 0 ? { testID } : {},
|
|
163
|
+
id: contentId,
|
|
164
|
+
"aria-labelledby": triggerId,
|
|
165
|
+
"aria-hidden": !open,
|
|
166
|
+
className: cn("overflow-hidden", className),
|
|
167
|
+
children: /* @__PURE__ */ jsx(
|
|
168
|
+
View,
|
|
169
|
+
{
|
|
170
|
+
ref: (node) => {
|
|
171
|
+
innerRef.current = node;
|
|
172
|
+
},
|
|
173
|
+
className: "flex-col",
|
|
174
|
+
style: { flexDirection: "column" },
|
|
175
|
+
children
|
|
176
|
+
}
|
|
177
|
+
)
|
|
178
|
+
}
|
|
179
|
+
);
|
|
180
|
+
}, "CollapsibleContent");
|
|
181
|
+
var Collapsible = Object.assign(CollapsibleRoot, {
|
|
182
|
+
Trigger: CollapsibleTrigger,
|
|
183
|
+
Content: CollapsibleContent
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
export { Collapsible };
|
|
187
|
+
//# sourceMappingURL=chunk-M4BI63P6.js.map
|
|
188
|
+
//# sourceMappingURL=chunk-M4BI63P6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Collapsible/Collapsible.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-M4BI63P6.js","sourcesContent":["'use client';\n\nimport {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Platform, Pressable, Text as RNText, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ntype CollapsibleContextValue = {\n open: boolean;\n toggle: () => void;\n contentId: string;\n triggerId: string;\n};\n\nconst CollapsibleContext = createContext<CollapsibleContextValue | null>(null);\n\nconst useCollapsibleContext = (label: string): CollapsibleContextValue => {\n const ctx = useContext(CollapsibleContext);\n if (!ctx) {\n throw new Error(`<${label}> must be rendered inside a <Collapsible>.`);\n }\n return ctx;\n};\n\n// ---------------------------------------------------------------------------\n// Root\n// ---------------------------------------------------------------------------\n\nexport type CollapsibleProps = {\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires when the open state changes. */\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nconst CollapsibleRoot = ({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n children,\n className,\n testID,\n}: CollapsibleProps) => {\n const baseId = useId();\n const [innerOpen, setInnerOpen] = useState(defaultOpen);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : innerOpen;\n\n const toggle = useCallback(() => {\n const next = !open;\n if (!isControlled) {\n setInnerOpen(next);\n }\n onOpenChange?.(next);\n }, [open, isControlled, onOpenChange]);\n\n const ctx = useMemo<CollapsibleContextValue>(\n () => ({\n open,\n toggle,\n contentId: `${baseId}-content`,\n triggerId: `${baseId}-trigger`,\n }),\n [open, toggle, baseId]\n );\n\n return (\n <CollapsibleContext.Provider value={ctx}>\n <View\n {...(testID !== undefined ? { testID } : {})}\n className={cn('flex-col', className)}\n style={{ flexDirection: 'column' }}\n >\n {children}\n </View>\n </CollapsibleContext.Provider>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Trigger\n// ---------------------------------------------------------------------------\n\nexport type CollapsibleTriggerProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nconst CollapsibleTrigger = ({ children, className, testID }: CollapsibleTriggerProps) => {\n const { open, toggle, contentId, triggerId } = useCollapsibleContext('Collapsible.Trigger');\n const colors = useThemeColors();\n\n const triggerStyle: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: px(colors.spacing['2']),\n paddingHorizontal: px(colors.spacing['1']),\n };\n\n return (\n <Pressable\n id={triggerId}\n {...(testID !== undefined ? { testID } : {})}\n role=\"button\"\n accessibilityRole=\"button\"\n aria-expanded={open}\n aria-controls={contentId}\n onPress={toggle}\n className={cn('flex-row items-center py-2 px-1', className)}\n style={triggerStyle}\n >\n {typeof children === 'string' ? (\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n fontWeight: colors.fontWeight.medium as '500',\n }}\n >\n {children}\n </RNText>\n ) : (\n children\n )}\n </Pressable>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Content\n// ---------------------------------------------------------------------------\n\nexport type CollapsibleContentProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nconst CollapsibleContent = ({ children, className, testID }: CollapsibleContentProps) => {\n const { open, contentId, triggerId } = useCollapsibleContext('Collapsible.Content');\n const wrapperRef = useRef<HTMLElement | null>(null);\n const innerRef = useRef<HTMLElement | null>(null);\n\n // Web: animate max-height via CSS transition for smooth open/close.\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n const wrapper = wrapperRef.current;\n const inner = innerRef.current;\n if (!wrapper || !inner) {\n return;\n }\n\n const isFirstPaint = wrapper.dataset.noriPainted !== '1';\n wrapper.dataset.noriPainted = '1';\n\n wrapper.style.overflow = 'hidden';\n wrapper.style.transitionProperty = 'max-height, opacity';\n wrapper.style.transitionDuration = '200ms';\n wrapper.style.transitionTimingFunction = 'cubic-bezier(0.16, 1, 0.3, 1)';\n\n if (open) {\n const target = inner.scrollHeight;\n if (isFirstPaint) {\n wrapper.style.maxHeight = `${target}px`;\n wrapper.style.opacity = '1';\n return;\n }\n wrapper.style.maxHeight = '0px';\n wrapper.style.opacity = '0';\n void wrapper.offsetHeight;\n requestAnimationFrame(() => {\n wrapper.style.maxHeight = `${target}px`;\n wrapper.style.opacity = '1';\n });\n } else {\n if (isFirstPaint) {\n wrapper.style.maxHeight = '0px';\n wrapper.style.opacity = '0';\n return;\n }\n const current = inner.scrollHeight;\n wrapper.style.maxHeight = `${current}px`;\n wrapper.style.opacity = '1';\n void wrapper.offsetHeight;\n requestAnimationFrame(() => {\n wrapper.style.maxHeight = '0px';\n wrapper.style.opacity = '0';\n });\n }\n }, [open]);\n\n // Native: just toggle visibility. Animation deferred to v2.\n if (Platform.OS !== 'web') {\n if (!open) {\n return null;\n }\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n id={contentId}\n aria-labelledby={triggerId}\n className={cn('flex-col', className)}\n style={{ flexDirection: 'column' }}\n >\n {children}\n </View>\n );\n }\n\n return (\n <View\n ref={(node: unknown) => {\n wrapperRef.current = node as HTMLElement | null;\n }}\n {...(testID !== undefined ? { testID } : {})}\n id={contentId}\n aria-labelledby={triggerId}\n aria-hidden={!open}\n className={cn('overflow-hidden', className)}\n >\n <View\n ref={(node: unknown) => {\n innerRef.current = node as HTMLElement | null;\n }}\n className=\"flex-col\"\n style={{ flexDirection: 'column' }}\n >\n {children}\n </View>\n </View>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public export\n// ---------------------------------------------------------------------------\n\n/**\n * Single open/close disclosure. Compose with `Collapsible.Trigger` and\n * `Collapsible.Content`:\n *\n * ```tsx\n * <Collapsible>\n * <Collapsible.Trigger>Show details</Collapsible.Trigger>\n * <Collapsible.Content>\n * <Text>Hidden until the trigger is pressed.</Text>\n * </Collapsible.Content>\n * </Collapsible>\n * ```\n *\n * Controlled usage: pass `open` + `onOpenChange`. Uncontrolled: pass\n * `defaultOpen` (or neither for closed-by-default).\n *\n * On web, `Content` animates via a CSS max-height / opacity transition\n * (200ms). On native, the content mounts/unmounts immediately — animated\n * height transition is a v2 follow-up.\n */\nexport const Collapsible = Object.assign(CollapsibleRoot, {\n Trigger: CollapsibleTrigger,\n Content: CollapsibleContent,\n});\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Popover, usePopoverContext } from './chunk-
|
|
1
|
+
import { Popover, usePopoverContext } from './chunk-HXCETKCC.js';
|
|
2
2
|
import { Slot } from './chunk-ZIBNLXIV.js';
|
|
3
|
-
import { cn } from './chunk-CHXHRJNZ.js';
|
|
4
3
|
import { px } from './chunk-5A2QOOVN.js';
|
|
5
4
|
import { useThemeColors } from './chunk-R5JMDDCB.js';
|
|
5
|
+
import { cn } from './chunk-CHXHRJNZ.js';
|
|
6
6
|
import { __name } from './chunk-WCQVDF3K.js';
|
|
7
7
|
import { createContext, useContext, useRef, useEffect, useCallback, useState, isValidElement } from 'react';
|
|
8
8
|
import { Platform, View, Pressable, Text } from 'react-native';
|
|
@@ -299,5 +299,5 @@ var DropdownMenu = Object.assign(DropdownMenuRoot, {
|
|
|
299
299
|
});
|
|
300
300
|
|
|
301
301
|
export { DropdownMenu, MenuContent, MenuContextProvider, MenuItem, MenuLabel, MenuSeparator };
|
|
302
|
-
//# sourceMappingURL=chunk-
|
|
303
|
-
//# sourceMappingURL=chunk-
|
|
302
|
+
//# sourceMappingURL=chunk-MK57AOTI.js.map
|
|
303
|
+
//# sourceMappingURL=chunk-MK57AOTI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/DropdownMenu/DropdownMenu.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-H7MFAFV4.js","sourcesContent":["'use client';\n\nimport {\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Platform, Pressable, Text as RNText, View } from 'react-native';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport { Popover, usePopoverContext } from '../Popover/Popover';\n\n// ---------------------------------------------------------------------------\n// Internal menu context — carries open state + toggle/close for sub-components\n// ---------------------------------------------------------------------------\n\ntype MenuContextValue = {\n open: boolean;\n toggle: () => void;\n close: () => void;\n};\n\nconst MenuContext = createContext<MenuContextValue | null>(null);\n\n/**\n * @internal — provides MenuContext; exported so ContextMenu can reuse it\n * without re-implementing the provider.\n */\nexport const MenuContextProvider = ({\n open,\n toggle,\n close,\n children,\n}: {\n open: boolean;\n /** Optional — DropdownMenu passes it; ContextMenu items only need close. */\n toggle?: () => void;\n close: () => void;\n children: ReactNode;\n}) => <MenuContext.Provider value={{ open, toggle: toggle ?? close, close }}>{children}</MenuContext.Provider>;\n\n/** @internal */\nexport function useMenuContext(caller: string): MenuContextValue {\n const ctx = useContext(MenuContext);\n if (!ctx) {\n throw new Error(`<${caller}> must be rendered inside a <DropdownMenu> or <ContextMenu>.`);\n }\n return ctx;\n}\n\n// ---------------------------------------------------------------------------\n// Shared menu surface sub-components\n// ---------------------------------------------------------------------------\n\nexport type MenuContentProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n 'aria-label'?: string;\n};\n\n/**\n * The floating menu surface. Wraps `Popover.Content` and applies\n * `role=\"menu\"` so assistive tech announces the list of items.\n *\n * Web keyboard navigation:\n * - ArrowDown / ArrowUp — cycle focus between enabled items.\n * - Home / End — jump to first / last enabled item.\n * - Escape — closes the menu (handled by Popover.Content already).\n * - Enter / Space — activates the focused item.\n */\nexport const MenuContent = ({\n children,\n className,\n testID,\n side = 'bottom',\n align = 'start',\n 'aria-label': ariaLabel,\n}: MenuContentProps) => {\n const colors = useThemeColors();\n const containerRef = useRef<View | null>(null);\n\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n if (typeof document === 'undefined') {\n return;\n }\n\n const container = containerRef.current as unknown as HTMLElement | null;\n if (!container) {\n return;\n }\n\n const getItems = (): HTMLElement[] =>\n Array.from(container.querySelectorAll<HTMLElement>('[role=\"menuitem\"]:not([aria-disabled=\"true\"])'));\n\n const onKeyDown = (e: KeyboardEvent) => {\n const items = getItems();\n if (items.length === 0) {\n return;\n }\n const focused = document.activeElement as HTMLElement | null;\n const idx = focused ? items.indexOf(focused) : -1;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n items[idx < items.length - 1 ? idx + 1 : 0]?.focus();\n break;\n case 'ArrowUp':\n e.preventDefault();\n items[idx > 0 ? idx - 1 : items.length - 1]?.focus();\n break;\n case 'Home':\n e.preventDefault();\n items[0]?.focus();\n break;\n case 'End':\n e.preventDefault();\n items[items.length - 1]?.focus();\n break;\n default:\n break;\n }\n };\n\n container.addEventListener('keydown', onKeyDown);\n return () => container.removeEventListener('keydown', onKeyDown);\n });\n\n return (\n <Popover.Content\n side={side}\n align={align}\n {...(testID !== undefined ? { testID } : {})}\n {...(ariaLabel !== undefined ? { 'aria-label': ariaLabel } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n <View\n ref={containerRef}\n {...({\n role: 'menu',\n ...(ariaLabel !== undefined ? { 'aria-label': ariaLabel } : {}),\n } as Record<string, unknown>)}\n style={{\n minWidth: 160,\n paddingVertical: px(colors.spacing['1']),\n margin: -px(colors.spacing['4']),\n borderRadius: px(colors.radius.lg),\n overflow: 'hidden',\n }}\n >\n {children}\n </View>\n </Popover.Content>\n );\n};\nMenuContent.displayName = 'MenuContent';\n\n// ---- MenuItem --------------------------------------------------------------\n\nexport type MenuItemProps = {\n /** Fired when the item is selected. Also closes the menu. */\n onSelect?: () => void;\n /** Prevents interaction and dims the item visually. */\n disabled?: boolean;\n /** Renders the item in a danger/destructive tone. */\n destructive?: boolean;\n /** Leading icon node. */\n icon?: ReactNode;\n /**\n * Keyboard shortcut hint shown on the trailing edge.\n * Purely presentational — web only, no function key binding.\n */\n shortcut?: string;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const MenuItem = ({\n onSelect,\n disabled = false,\n destructive = false,\n icon,\n shortcut,\n children,\n className,\n testID,\n}: MenuItemProps) => {\n const colors = useThemeColors();\n const menu = useMenuContext('MenuItem');\n\n const handlePress = useCallback(() => {\n if (disabled) {\n return;\n }\n onSelect?.();\n menu.close();\n }, [disabled, onSelect, menu]);\n\n const textColor = destructive\n ? colors.color.danger\n : disabled\n ? colors.semantic.text.muted\n : colors.semantic.text.default;\n\n return (\n <Pressable\n onPress={handlePress}\n disabled={disabled}\n {...({\n role: 'menuitem',\n 'aria-disabled': disabled ? 'true' : undefined,\n tabIndex: disabled ? -1 : 0,\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handlePress();\n }\n },\n } as Record<string, unknown>)}\n {...(testID !== undefined ? { testID } : {})}\n className={cn('flex-row items-center gap-2 px-3 py-2', className)}\n style={{ opacity: disabled ? 0.4 : 1 }}\n accessibilityRole=\"menuitem\"\n accessibilityState={{ disabled }}\n >\n {icon !== undefined && (\n <View style={{ width: 16, height: 16, alignItems: 'center', justifyContent: 'center' }}>{icon}</View>\n )}\n <RNText\n style={{\n flex: 1,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: textColor,\n }}\n >\n {children}\n </RNText>\n {shortcut !== undefined && Platform.OS === 'web' && (\n <RNText\n {...({ 'aria-hidden': 'true' } as Record<string, unknown>)}\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.xs),\n color: colors.semantic.text.muted,\n }}\n >\n {shortcut}\n </RNText>\n )}\n </Pressable>\n );\n};\nMenuItem.displayName = 'MenuItem';\n\n// ---- MenuSeparator ---------------------------------------------------------\n\nexport type MenuSeparatorProps = {\n className?: string;\n testID?: string;\n};\n\nexport const MenuSeparator = ({ className, testID }: MenuSeparatorProps) => {\n const colors = useThemeColors();\n return (\n <View\n {...({ role: 'separator' } as Record<string, unknown>)}\n accessibilityRole=\"none\"\n {...(testID !== undefined ? { testID } : {})}\n className={cn('mx-1 my-1', className)}\n style={{\n height: 1,\n marginVertical: 4,\n marginHorizontal: 4,\n backgroundColor: colors.semantic.border.default,\n }}\n />\n );\n};\nMenuSeparator.displayName = 'MenuSeparator';\n\n// ---- MenuLabel -------------------------------------------------------------\n\nexport type MenuLabelProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const MenuLabel = ({ children, className, testID }: MenuLabelProps) => {\n const colors = useThemeColors();\n return (\n <View\n {...({ role: 'presentation' } as Record<string, unknown>)}\n {...(testID !== undefined ? { testID } : {})}\n className={cn('px-3 pt-2 pb-1', className)}\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.xs),\n color: colors.semantic.text.muted,\n textTransform: 'uppercase',\n letterSpacing: 0.6,\n fontWeight: '600',\n }}\n >\n {children}\n </RNText>\n </View>\n );\n};\nMenuLabel.displayName = 'MenuLabel';\n\n// ---------------------------------------------------------------------------\n// DropdownMenu root\n// ---------------------------------------------------------------------------\n\nexport type DropdownMenuProps = {\n /** Controlled open state. */\n open?: boolean;\n /** Initial open state (uncontrolled). @defaultValue false */\n defaultOpen?: boolean;\n /** Fires with the new open state. */\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n};\n\n/**\n * Click-triggered dropdown menu.\n *\n * Compound parts:\n * - `DropdownMenu.Trigger` — wraps any element; click opens the menu.\n * - `DropdownMenu.Content` — the floating menu surface.\n * - `DropdownMenu.Item` — interactive menu item.\n * - `DropdownMenu.Separator` — visual divider.\n * - `DropdownMenu.Label` — non-interactive section heading.\n *\n * ```tsx\n * <DropdownMenu>\n * <DropdownMenu.Trigger>\n * <Button>Options</Button>\n * </DropdownMenu.Trigger>\n * <DropdownMenu.Content>\n * <DropdownMenu.Item onSelect={() => console.log('edit')}>Edit</DropdownMenu.Item>\n * <DropdownMenu.Separator />\n * <DropdownMenu.Item destructive onSelect={() => console.log('delete')}>Delete</DropdownMenu.Item>\n * </DropdownMenu.Content>\n * </DropdownMenu>\n * ```\n */\nconst DropdownMenuRoot = ({ open, defaultOpen = false, onOpenChange, children }: DropdownMenuProps) => {\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 toggle = useCallback(() => setOpen(!current), [setOpen, current]);\n const close = useCallback(() => setOpen(false), [setOpen]);\n\n return (\n <MenuContextProvider open={current} toggle={toggle} close={close}>\n <Popover open={current} onOpenChange={setOpen}>\n {children}\n </Popover>\n </MenuContextProvider>\n );\n};\n\n// ---------------------------------------------------------------------------\n// DropdownMenu.Trigger\n// ---------------------------------------------------------------------------\n\nexport type DropdownMenuTriggerProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Element that toggles the dropdown menu on click/press. Uses asChild by\n * default — the wrapped child becomes the trigger. Gets `aria-haspopup=\"menu\"`\n * and `aria-expanded`.\n *\n * Internally uses the Popover context to measure the trigger rect (needed for\n * positioning) and set the triggerRef — same as PopoverTrigger, but with\n * `aria-haspopup=\"menu\"` instead of `\"dialog\"`.\n */\nconst DropdownMenuTrigger = ({ children, className, testID }: DropdownMenuTriggerProps) => {\n const menu = useMenuContext('DropdownMenu.Trigger');\n const popover = usePopoverContext('DropdownMenu.Trigger');\n\n const onPress = useCallback(() => {\n popover.measureTrigger();\n popover.setOpen(!popover.open);\n }, [popover]);\n\n if (isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n const fire = (existing: ((e: unknown) => void) | undefined) => (event: unknown) => {\n existing?.(event);\n popover.measureTrigger();\n popover.setOpen(!popover.open);\n };\n\n return (\n <Slot\n ref={(node: HTMLElement | null) => {\n popover.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 {...({\n 'aria-haspopup': 'menu',\n 'aria-expanded': menu.open,\n 'aria-controls': popover.contentId,\n } as Record<string, unknown>)}\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 popover.triggerRef.current = node as unknown as HTMLElement | null;\n }}\n onPress={onPress}\n {...({\n 'aria-haspopup': 'menu',\n 'aria-expanded': menu.open,\n 'aria-controls': popover.contentId,\n } as Record<string, unknown>)}\n {...(testID !== undefined ? { testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {typeof children === 'string' || typeof children === 'number' ? <RNText>{children}</RNText> : children}\n </Pressable>\n );\n};\n\n// ---------------------------------------------------------------------------\n// DropdownMenu.Content\n// ---------------------------------------------------------------------------\n\nexport type DropdownMenuContentProps = MenuContentProps;\n\nconst DropdownMenuContent = (props: DropdownMenuContentProps) => <MenuContent {...props} />;\n\n// ---------------------------------------------------------------------------\n// Public compound export\n// ---------------------------------------------------------------------------\n\nexport const DropdownMenu = Object.assign(DropdownMenuRoot, {\n Trigger: DropdownMenuTrigger,\n Content: DropdownMenuContent,\n Item: MenuItem,\n Separator: MenuSeparator,\n Label: MenuLabel,\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/DropdownMenu/DropdownMenu.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-MK57AOTI.js","sourcesContent":["'use client';\n\nimport {\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Platform, Pressable, Text as RNText, View } from 'react-native';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport { Popover, usePopoverContext } from '../Popover/Popover';\n\n// ---------------------------------------------------------------------------\n// Internal menu context — carries open state + toggle/close for sub-components\n// ---------------------------------------------------------------------------\n\ntype MenuContextValue = {\n open: boolean;\n toggle: () => void;\n close: () => void;\n};\n\nconst MenuContext = createContext<MenuContextValue | null>(null);\n\n/**\n * @internal — provides MenuContext; exported so ContextMenu can reuse it\n * without re-implementing the provider.\n */\nexport const MenuContextProvider = ({\n open,\n toggle,\n close,\n children,\n}: {\n open: boolean;\n /** Optional — DropdownMenu passes it; ContextMenu items only need close. */\n toggle?: () => void;\n close: () => void;\n children: ReactNode;\n}) => <MenuContext.Provider value={{ open, toggle: toggle ?? close, close }}>{children}</MenuContext.Provider>;\n\n/** @internal */\nexport function useMenuContext(caller: string): MenuContextValue {\n const ctx = useContext(MenuContext);\n if (!ctx) {\n throw new Error(`<${caller}> must be rendered inside a <DropdownMenu> or <ContextMenu>.`);\n }\n return ctx;\n}\n\n// ---------------------------------------------------------------------------\n// Shared menu surface sub-components\n// ---------------------------------------------------------------------------\n\nexport type MenuContentProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n 'aria-label'?: string;\n};\n\n/**\n * The floating menu surface. Wraps `Popover.Content` and applies\n * `role=\"menu\"` so assistive tech announces the list of items.\n *\n * Web keyboard navigation:\n * - ArrowDown / ArrowUp — cycle focus between enabled items.\n * - Home / End — jump to first / last enabled item.\n * - Escape — closes the menu (handled by Popover.Content already).\n * - Enter / Space — activates the focused item.\n */\nexport const MenuContent = ({\n children,\n className,\n testID,\n side = 'bottom',\n align = 'start',\n 'aria-label': ariaLabel,\n}: MenuContentProps) => {\n const colors = useThemeColors();\n const containerRef = useRef<View | null>(null);\n\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n if (typeof document === 'undefined') {\n return;\n }\n\n const container = containerRef.current as unknown as HTMLElement | null;\n if (!container) {\n return;\n }\n\n const getItems = (): HTMLElement[] =>\n Array.from(container.querySelectorAll<HTMLElement>('[role=\"menuitem\"]:not([aria-disabled=\"true\"])'));\n\n const onKeyDown = (e: KeyboardEvent) => {\n const items = getItems();\n if (items.length === 0) {\n return;\n }\n const focused = document.activeElement as HTMLElement | null;\n const idx = focused ? items.indexOf(focused) : -1;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n items[idx < items.length - 1 ? idx + 1 : 0]?.focus();\n break;\n case 'ArrowUp':\n e.preventDefault();\n items[idx > 0 ? idx - 1 : items.length - 1]?.focus();\n break;\n case 'Home':\n e.preventDefault();\n items[0]?.focus();\n break;\n case 'End':\n e.preventDefault();\n items[items.length - 1]?.focus();\n break;\n default:\n break;\n }\n };\n\n container.addEventListener('keydown', onKeyDown);\n return () => container.removeEventListener('keydown', onKeyDown);\n });\n\n return (\n <Popover.Content\n side={side}\n align={align}\n {...(testID !== undefined ? { testID } : {})}\n {...(ariaLabel !== undefined ? { 'aria-label': ariaLabel } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n <View\n ref={containerRef}\n {...({\n role: 'menu',\n ...(ariaLabel !== undefined ? { 'aria-label': ariaLabel } : {}),\n } as Record<string, unknown>)}\n style={{\n minWidth: 160,\n paddingVertical: px(colors.spacing['1']),\n margin: -px(colors.spacing['4']),\n borderRadius: px(colors.radius.lg),\n overflow: 'hidden',\n }}\n >\n {children}\n </View>\n </Popover.Content>\n );\n};\nMenuContent.displayName = 'MenuContent';\n\n// ---- MenuItem --------------------------------------------------------------\n\nexport type MenuItemProps = {\n /** Fired when the item is selected. Also closes the menu. */\n onSelect?: () => void;\n /** Prevents interaction and dims the item visually. */\n disabled?: boolean;\n /** Renders the item in a danger/destructive tone. */\n destructive?: boolean;\n /** Leading icon node. */\n icon?: ReactNode;\n /**\n * Keyboard shortcut hint shown on the trailing edge.\n * Purely presentational — web only, no function key binding.\n */\n shortcut?: string;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const MenuItem = ({\n onSelect,\n disabled = false,\n destructive = false,\n icon,\n shortcut,\n children,\n className,\n testID,\n}: MenuItemProps) => {\n const colors = useThemeColors();\n const menu = useMenuContext('MenuItem');\n\n const handlePress = useCallback(() => {\n if (disabled) {\n return;\n }\n onSelect?.();\n menu.close();\n }, [disabled, onSelect, menu]);\n\n const textColor = destructive\n ? colors.color.danger\n : disabled\n ? colors.semantic.text.muted\n : colors.semantic.text.default;\n\n return (\n <Pressable\n onPress={handlePress}\n disabled={disabled}\n {...({\n role: 'menuitem',\n 'aria-disabled': disabled ? 'true' : undefined,\n tabIndex: disabled ? -1 : 0,\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handlePress();\n }\n },\n } as Record<string, unknown>)}\n {...(testID !== undefined ? { testID } : {})}\n className={cn('flex-row items-center gap-2 px-3 py-2', className)}\n style={{ opacity: disabled ? 0.4 : 1 }}\n accessibilityRole=\"menuitem\"\n accessibilityState={{ disabled }}\n >\n {icon !== undefined && (\n <View style={{ width: 16, height: 16, alignItems: 'center', justifyContent: 'center' }}>{icon}</View>\n )}\n <RNText\n style={{\n flex: 1,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n color: textColor,\n }}\n >\n {children}\n </RNText>\n {shortcut !== undefined && Platform.OS === 'web' && (\n <RNText\n {...({ 'aria-hidden': 'true' } as Record<string, unknown>)}\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.xs),\n color: colors.semantic.text.muted,\n }}\n >\n {shortcut}\n </RNText>\n )}\n </Pressable>\n );\n};\nMenuItem.displayName = 'MenuItem';\n\n// ---- MenuSeparator ---------------------------------------------------------\n\nexport type MenuSeparatorProps = {\n className?: string;\n testID?: string;\n};\n\nexport const MenuSeparator = ({ className, testID }: MenuSeparatorProps) => {\n const colors = useThemeColors();\n return (\n <View\n {...({ role: 'separator' } as Record<string, unknown>)}\n accessibilityRole=\"none\"\n {...(testID !== undefined ? { testID } : {})}\n className={cn('mx-1 my-1', className)}\n style={{\n height: 1,\n marginVertical: 4,\n marginHorizontal: 4,\n backgroundColor: colors.semantic.border.default,\n }}\n />\n );\n};\nMenuSeparator.displayName = 'MenuSeparator';\n\n// ---- MenuLabel -------------------------------------------------------------\n\nexport type MenuLabelProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\nexport const MenuLabel = ({ children, className, testID }: MenuLabelProps) => {\n const colors = useThemeColors();\n return (\n <View\n {...({ role: 'presentation' } as Record<string, unknown>)}\n {...(testID !== undefined ? { testID } : {})}\n className={cn('px-3 pt-2 pb-1', className)}\n >\n <RNText\n style={{\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.xs),\n color: colors.semantic.text.muted,\n textTransform: 'uppercase',\n letterSpacing: 0.6,\n fontWeight: '600',\n }}\n >\n {children}\n </RNText>\n </View>\n );\n};\nMenuLabel.displayName = 'MenuLabel';\n\n// ---------------------------------------------------------------------------\n// DropdownMenu root\n// ---------------------------------------------------------------------------\n\nexport type DropdownMenuProps = {\n /** Controlled open state. */\n open?: boolean;\n /** Initial open state (uncontrolled). @defaultValue false */\n defaultOpen?: boolean;\n /** Fires with the new open state. */\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n};\n\n/**\n * Click-triggered dropdown menu.\n *\n * Compound parts:\n * - `DropdownMenu.Trigger` — wraps any element; click opens the menu.\n * - `DropdownMenu.Content` — the floating menu surface.\n * - `DropdownMenu.Item` — interactive menu item.\n * - `DropdownMenu.Separator` — visual divider.\n * - `DropdownMenu.Label` — non-interactive section heading.\n *\n * ```tsx\n * <DropdownMenu>\n * <DropdownMenu.Trigger>\n * <Button>Options</Button>\n * </DropdownMenu.Trigger>\n * <DropdownMenu.Content>\n * <DropdownMenu.Item onSelect={() => console.log('edit')}>Edit</DropdownMenu.Item>\n * <DropdownMenu.Separator />\n * <DropdownMenu.Item destructive onSelect={() => console.log('delete')}>Delete</DropdownMenu.Item>\n * </DropdownMenu.Content>\n * </DropdownMenu>\n * ```\n */\nconst DropdownMenuRoot = ({ open, defaultOpen = false, onOpenChange, children }: DropdownMenuProps) => {\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 toggle = useCallback(() => setOpen(!current), [setOpen, current]);\n const close = useCallback(() => setOpen(false), [setOpen]);\n\n return (\n <MenuContextProvider open={current} toggle={toggle} close={close}>\n <Popover open={current} onOpenChange={setOpen}>\n {children}\n </Popover>\n </MenuContextProvider>\n );\n};\n\n// ---------------------------------------------------------------------------\n// DropdownMenu.Trigger\n// ---------------------------------------------------------------------------\n\nexport type DropdownMenuTriggerProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Element that toggles the dropdown menu on click/press. Uses asChild by\n * default — the wrapped child becomes the trigger. Gets `aria-haspopup=\"menu\"`\n * and `aria-expanded`.\n *\n * Internally uses the Popover context to measure the trigger rect (needed for\n * positioning) and set the triggerRef — same as PopoverTrigger, but with\n * `aria-haspopup=\"menu\"` instead of `\"dialog\"`.\n */\nconst DropdownMenuTrigger = ({ children, className, testID }: DropdownMenuTriggerProps) => {\n const menu = useMenuContext('DropdownMenu.Trigger');\n const popover = usePopoverContext('DropdownMenu.Trigger');\n\n const onPress = useCallback(() => {\n popover.measureTrigger();\n popover.setOpen(!popover.open);\n }, [popover]);\n\n if (isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n const fire = (existing: ((e: unknown) => void) | undefined) => (event: unknown) => {\n existing?.(event);\n popover.measureTrigger();\n popover.setOpen(!popover.open);\n };\n\n return (\n <Slot\n ref={(node: HTMLElement | null) => {\n popover.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 {...({\n 'aria-haspopup': 'menu',\n 'aria-expanded': menu.open,\n 'aria-controls': popover.contentId,\n } as Record<string, unknown>)}\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 popover.triggerRef.current = node as unknown as HTMLElement | null;\n }}\n onPress={onPress}\n {...({\n 'aria-haspopup': 'menu',\n 'aria-expanded': menu.open,\n 'aria-controls': popover.contentId,\n } as Record<string, unknown>)}\n {...(testID !== undefined ? { testID } : {})}\n {...(className !== undefined ? { className } : {})}\n >\n {typeof children === 'string' || typeof children === 'number' ? <RNText>{children}</RNText> : children}\n </Pressable>\n );\n};\n\n// ---------------------------------------------------------------------------\n// DropdownMenu.Content\n// ---------------------------------------------------------------------------\n\nexport type DropdownMenuContentProps = MenuContentProps;\n\nconst DropdownMenuContent = (props: DropdownMenuContentProps) => <MenuContent {...props} />;\n\n// ---------------------------------------------------------------------------\n// Public compound export\n// ---------------------------------------------------------------------------\n\nexport const DropdownMenu = Object.assign(DropdownMenuRoot, {\n Trigger: DropdownMenuTrigger,\n Content: DropdownMenuContent,\n Item: MenuItem,\n Separator: MenuSeparator,\n Label: MenuLabel,\n});\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { cn } from './chunk-CHXHRJNZ.js';
|
|
2
1
|
import { px } from './chunk-5A2QOOVN.js';
|
|
3
2
|
import { useThemeColors, useColorScheme } 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';
|
|
@@ -104,5 +104,5 @@ var Badge = /* @__PURE__ */ __name(({ tone = "neutral", appearance = "soft", chi
|
|
|
104
104
|
}, "Badge");
|
|
105
105
|
|
|
106
106
|
export { Badge };
|
|
107
|
-
//# sourceMappingURL=chunk-
|
|
108
|
-
//# sourceMappingURL=chunk-
|
|
107
|
+
//# sourceMappingURL=chunk-MOAIQHR7.js.map
|
|
108
|
+
//# sourceMappingURL=chunk-MOAIQHR7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Badge/Badge.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-FDBQOQMW.js","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport type { TextStyle, ViewStyle } from 'react-native';\nimport { Text as RNText, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useColorScheme } from '../../theme/use-color-scheme';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type BadgeTone = 'neutral' | 'primary' | 'success' | 'warning' | 'danger';\nexport type BadgeAppearance = 'solid' | 'outline' | 'soft';\n\nexport type BadgeProps = {\n /**\n * Semantic color of the badge.\n * @defaultValue 'neutral'\n */\n tone?: BadgeTone;\n /**\n * Visual treatment.\n * - `soft` (default) — tinted background with darker tone-colored text. Modern, calm.\n * - `solid` — filled tone background, white text. Loud, used sparingly.\n * - `outline` — border in tone, transparent background, tone-colored text.\n * @defaultValue 'soft'\n */\n appearance?: BadgeAppearance;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n// Layout-only base; theme-driven dimensions are merged inside the\n// component so a custom theme reshapes the badge.\nconst BASE_CONTAINER_LAYOUT: ViewStyle = {\n alignSelf: 'flex-start',\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 2, // component-density literal — not from theme (no 2px spacing token)\n borderWidth: 1,\n borderColor: 'transparent',\n};\n\n/**\n * Compact pill for status, counts, or labels. Use sparingly — every badge\n * draws the eye, so a row of five is no longer a row of badges.\n *\n * Tone palettes flip with the active color scheme — light mode uses the\n * familiar pastel scale (Tailwind 50/200/800), dark mode uses the deep\n * 950/700/100 scale so a soft success badge reads as a calm tinted chip\n * on either surface, never as a glaring pastel on a dark page.\n */\nexport const Badge = ({ tone = 'neutral', appearance = 'soft', children, className, testID }: BadgeProps) => {\n const colors = useThemeColors();\n const isDark = useColorScheme() === 'dark';\n const invertedText = colors.semantic.text.inverted;\n\n let palette: {\n soft: { bg: string; fg: string };\n solid: { bg: string; fg: string };\n outline: { border: string; fg: string };\n };\n if (tone === 'neutral') {\n palette = {\n soft: isDark\n ? { bg: colors.color.neutral['800'], fg: colors.color.neutral['100'] }\n : { bg: colors.color.neutral['100'], fg: colors.color.neutral['700'] },\n solid: {\n bg: isDark ? colors.color.neutral['200'] : colors.color.neutral['700'],\n fg: isDark ? colors.color.neutral['900'] : invertedText,\n },\n outline: {\n border: isDark ? colors.color.neutral['600'] : colors.color.neutral['300'],\n fg: isDark ? colors.color.neutral['100'] : colors.color.neutral['700'],\n },\n };\n } else if (tone === 'primary') {\n palette = {\n soft: isDark\n ? { bg: colors.color.primary['900'], fg: colors.color.primary['200'] }\n : { bg: colors.color.primary['100'], fg: colors.color.primary['800'] },\n solid: {\n bg: isDark ? colors.color.primary['400'] : colors.color.primary['600'],\n fg: isDark ? colors.color.primary['900'] : invertedText,\n },\n outline: {\n border: isDark ? colors.color.primary['400'] : colors.color.primary['300'],\n fg: isDark ? colors.color.primary['200'] : colors.color.primary['700'],\n },\n };\n } else if (tone === 'success') {\n palette = {\n soft: isDark ? { bg: '#14532d', fg: '#bbf7d0' } : { bg: '#dcfce7', fg: '#166534' },\n solid: { bg: colors.color.success, fg: invertedText },\n outline: { border: colors.color.success, fg: isDark ? '#bbf7d0' : '#166534' },\n };\n } else if (tone === 'warning') {\n palette = {\n soft: isDark ? { bg: '#78350f', fg: '#fde68a' } : { bg: '#fef3c7', fg: '#92400e' },\n solid: { bg: colors.color.warning, fg: invertedText },\n outline: { border: colors.color.warning, fg: isDark ? '#fde68a' : '#92400e' },\n };\n } else {\n palette = {\n soft: isDark ? { bg: '#7f1d1d', fg: '#fecaca' } : { bg: '#fee2e2', fg: '#991b1b' },\n solid: { bg: colors.color.danger, fg: invertedText },\n outline: { border: colors.color.danger, fg: isDark ? '#fecaca' : '#991b1b' },\n };\n }\n\n const baseContainer: ViewStyle = {\n ...BASE_CONTAINER_LAYOUT,\n gap: px(colors.spacing['1']),\n paddingHorizontal: px(colors.spacing['2']),\n borderRadius: px(colors.radius.full),\n };\n const containerStyle: ViewStyle = (() => {\n if (appearance === 'solid') {\n return { ...baseContainer, backgroundColor: palette.solid.bg };\n }\n if (appearance === 'outline') {\n return { ...baseContainer, backgroundColor: 'transparent', borderColor: palette.outline.border };\n }\n return { ...baseContainer, backgroundColor: palette.soft.bg };\n })();\n const textColor = (() => {\n if (appearance === 'solid') {\n return palette.solid.fg;\n }\n if (appearance === 'outline') {\n return palette.outline.fg;\n }\n return palette.soft.fg;\n })();\n const baseText: TextStyle = {\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.xs),\n fontWeight: colors.fontWeight.medium as '500',\n lineHeight: px(colors.fontSize.xs) * Number(colors.lineHeight.normal),\n };\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n className={cn('inline-flex flex-row items-center gap-1 rounded-full px-2 py-0.5 border', className)}\n style={containerStyle}\n >\n <RNText style={{ ...baseText, color: textColor }}>{children}</RNText>\n </View>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Badge/Badge.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-MOAIQHR7.js","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport type { TextStyle, ViewStyle } from 'react-native';\nimport { Text as RNText, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useColorScheme } from '../../theme/use-color-scheme';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type BadgeTone = 'neutral' | 'primary' | 'success' | 'warning' | 'danger';\nexport type BadgeAppearance = 'solid' | 'outline' | 'soft';\n\nexport type BadgeProps = {\n /**\n * Semantic color of the badge.\n * @defaultValue 'neutral'\n */\n tone?: BadgeTone;\n /**\n * Visual treatment.\n * - `soft` (default) — tinted background with darker tone-colored text. Modern, calm.\n * - `solid` — filled tone background, white text. Loud, used sparingly.\n * - `outline` — border in tone, transparent background, tone-colored text.\n * @defaultValue 'soft'\n */\n appearance?: BadgeAppearance;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n// Layout-only base; theme-driven dimensions are merged inside the\n// component so a custom theme reshapes the badge.\nconst BASE_CONTAINER_LAYOUT: ViewStyle = {\n alignSelf: 'flex-start',\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 2, // component-density literal — not from theme (no 2px spacing token)\n borderWidth: 1,\n borderColor: 'transparent',\n};\n\n/**\n * Compact pill for status, counts, or labels. Use sparingly — every badge\n * draws the eye, so a row of five is no longer a row of badges.\n *\n * Tone palettes flip with the active color scheme — light mode uses the\n * familiar pastel scale (Tailwind 50/200/800), dark mode uses the deep\n * 950/700/100 scale so a soft success badge reads as a calm tinted chip\n * on either surface, never as a glaring pastel on a dark page.\n */\nexport const Badge = ({ tone = 'neutral', appearance = 'soft', children, className, testID }: BadgeProps) => {\n const colors = useThemeColors();\n const isDark = useColorScheme() === 'dark';\n const invertedText = colors.semantic.text.inverted;\n\n let palette: {\n soft: { bg: string; fg: string };\n solid: { bg: string; fg: string };\n outline: { border: string; fg: string };\n };\n if (tone === 'neutral') {\n palette = {\n soft: isDark\n ? { bg: colors.color.neutral['800'], fg: colors.color.neutral['100'] }\n : { bg: colors.color.neutral['100'], fg: colors.color.neutral['700'] },\n solid: {\n bg: isDark ? colors.color.neutral['200'] : colors.color.neutral['700'],\n fg: isDark ? colors.color.neutral['900'] : invertedText,\n },\n outline: {\n border: isDark ? colors.color.neutral['600'] : colors.color.neutral['300'],\n fg: isDark ? colors.color.neutral['100'] : colors.color.neutral['700'],\n },\n };\n } else if (tone === 'primary') {\n palette = {\n soft: isDark\n ? { bg: colors.color.primary['900'], fg: colors.color.primary['200'] }\n : { bg: colors.color.primary['100'], fg: colors.color.primary['800'] },\n solid: {\n bg: isDark ? colors.color.primary['400'] : colors.color.primary['600'],\n fg: isDark ? colors.color.primary['900'] : invertedText,\n },\n outline: {\n border: isDark ? colors.color.primary['400'] : colors.color.primary['300'],\n fg: isDark ? colors.color.primary['200'] : colors.color.primary['700'],\n },\n };\n } else if (tone === 'success') {\n palette = {\n soft: isDark ? { bg: '#14532d', fg: '#bbf7d0' } : { bg: '#dcfce7', fg: '#166534' },\n solid: { bg: colors.color.success, fg: invertedText },\n outline: { border: colors.color.success, fg: isDark ? '#bbf7d0' : '#166534' },\n };\n } else if (tone === 'warning') {\n palette = {\n soft: isDark ? { bg: '#78350f', fg: '#fde68a' } : { bg: '#fef3c7', fg: '#92400e' },\n solid: { bg: colors.color.warning, fg: invertedText },\n outline: { border: colors.color.warning, fg: isDark ? '#fde68a' : '#92400e' },\n };\n } else {\n palette = {\n soft: isDark ? { bg: '#7f1d1d', fg: '#fecaca' } : { bg: '#fee2e2', fg: '#991b1b' },\n solid: { bg: colors.color.danger, fg: invertedText },\n outline: { border: colors.color.danger, fg: isDark ? '#fecaca' : '#991b1b' },\n };\n }\n\n const baseContainer: ViewStyle = {\n ...BASE_CONTAINER_LAYOUT,\n gap: px(colors.spacing['1']),\n paddingHorizontal: px(colors.spacing['2']),\n borderRadius: px(colors.radius.full),\n };\n const containerStyle: ViewStyle = (() => {\n if (appearance === 'solid') {\n return { ...baseContainer, backgroundColor: palette.solid.bg };\n }\n if (appearance === 'outline') {\n return { ...baseContainer, backgroundColor: 'transparent', borderColor: palette.outline.border };\n }\n return { ...baseContainer, backgroundColor: palette.soft.bg };\n })();\n const textColor = (() => {\n if (appearance === 'solid') {\n return palette.solid.fg;\n }\n if (appearance === 'outline') {\n return palette.outline.fg;\n }\n return palette.soft.fg;\n })();\n const baseText: TextStyle = {\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.xs),\n fontWeight: colors.fontWeight.medium as '500',\n lineHeight: px(colors.fontSize.xs) * Number(colors.lineHeight.normal),\n };\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n className={cn('inline-flex flex-row items-center gap-1 rounded-full px-2 py-0.5 border', className)}\n style={containerStyle}\n >\n <RNText style={{ ...baseText, color: textColor }}>{children}</RNText>\n </View>\n );\n};\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Spinner } from './chunk-ACLHDHX3.js';
|
|
2
2
|
import { Slot } from './chunk-ZIBNLXIV.js';
|
|
3
|
-
import { cn } from './chunk-CHXHRJNZ.js';
|
|
4
3
|
import { px } from './chunk-5A2QOOVN.js';
|
|
5
4
|
import { useThemeColors } from './chunk-R5JMDDCB.js';
|
|
5
|
+
import { cn } from './chunk-CHXHRJNZ.js';
|
|
6
6
|
import { __name } from './chunk-WCQVDF3K.js';
|
|
7
7
|
import { useState, useCallback } from 'react';
|
|
8
8
|
import { Pressable, Text } from 'react-native';
|
|
@@ -204,5 +204,5 @@ var Button = /* @__PURE__ */ __name(({
|
|
|
204
204
|
}, "Button");
|
|
205
205
|
|
|
206
206
|
export { Button };
|
|
207
|
-
//# sourceMappingURL=chunk-
|
|
208
|
-
//# sourceMappingURL=chunk-
|
|
207
|
+
//# sourceMappingURL=chunk-MYBBBLYE.js.map
|
|
208
|
+
//# sourceMappingURL=chunk-MYBBBLYE.js.map
|