@nori-ui/core 1.9.1 → 1.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-O6M3F7BZ.js → chunk-34TKMNID.js} +5 -5
- package/dist/{chunk-O6M3F7BZ.js.map → chunk-34TKMNID.js.map} +1 -1
- package/dist/{chunk-KLK7OMFT.js → chunk-35DVHUUE.js} +3 -3
- package/dist/{chunk-KLK7OMFT.js.map → chunk-35DVHUUE.js.map} +1 -1
- package/dist/{chunk-M4BI63P6.js → chunk-3FRCTNQH.js} +3 -3
- package/dist/{chunk-M4BI63P6.js.map → chunk-3FRCTNQH.js.map} +1 -1
- package/dist/{chunk-3CEJ5TB4.js → chunk-3H7LF45D.js} +4 -4
- package/dist/{chunk-3CEJ5TB4.js.map → chunk-3H7LF45D.js.map} +1 -1
- package/dist/{chunk-PJTCO76H.js → chunk-3KK2TXVY.js} +4 -4
- package/dist/{chunk-PJTCO76H.js.map → chunk-3KK2TXVY.js.map} +1 -1
- package/dist/{chunk-QB6RH6UU.js → chunk-3QQXYL5L.js} +4 -4
- package/dist/{chunk-QB6RH6UU.js.map → chunk-3QQXYL5L.js.map} +1 -1
- package/dist/{chunk-OELY6K44.js → chunk-3RNRVMNS.js} +3 -3
- package/dist/{chunk-OELY6K44.js.map → chunk-3RNRVMNS.js.map} +1 -1
- package/dist/{chunk-R5JMDDCB.js → chunk-3W2O4OBL.js} +4 -2
- package/dist/chunk-3W2O4OBL.js.map +1 -0
- package/dist/{chunk-MDOZGILD.js → chunk-4NBJW2JZ.js} +3 -3
- package/dist/{chunk-MDOZGILD.js.map → chunk-4NBJW2JZ.js.map} +1 -1
- package/dist/{chunk-ZGFXKYA5.js → chunk-57AVXG7D.js} +3 -3
- package/dist/{chunk-ZGFXKYA5.js.map → chunk-57AVXG7D.js.map} +1 -1
- package/dist/{chunk-HXCETKCC.js → chunk-7TESZOYQ.js} +3 -3
- package/dist/{chunk-HXCETKCC.js.map → chunk-7TESZOYQ.js.map} +1 -1
- package/dist/{chunk-TSWPHJIU.js → chunk-7UTQKMTE.js} +4 -4
- package/dist/{chunk-TSWPHJIU.js.map → chunk-7UTQKMTE.js.map} +1 -1
- package/dist/{chunk-U2ZKY2CP.js → chunk-AUNLIED3.js} +3 -3
- package/dist/{chunk-U2ZKY2CP.js.map → chunk-AUNLIED3.js.map} +1 -1
- package/dist/{chunk-J5LK2XHE.js → chunk-BBPKG3NI.js} +3 -3
- package/dist/{chunk-J5LK2XHE.js.map → chunk-BBPKG3NI.js.map} +1 -1
- package/dist/{chunk-IGBXSBF7.js → chunk-BCOXHHHC.js} +3 -3
- package/dist/{chunk-IGBXSBF7.js.map → chunk-BCOXHHHC.js.map} +1 -1
- package/dist/{chunk-L6VYDM7S.js → chunk-BJARVBFN.js} +3 -3
- package/dist/{chunk-L6VYDM7S.js.map → chunk-BJARVBFN.js.map} +1 -1
- package/dist/{chunk-BVLOX4A3.js → chunk-BJHMAGOQ.js} +3 -3
- package/dist/{chunk-BVLOX4A3.js.map → chunk-BJHMAGOQ.js.map} +1 -1
- package/dist/{chunk-VOF3S5I4.js → chunk-BOHLDAMY.js} +4 -4
- package/dist/{chunk-VOF3S5I4.js.map → chunk-BOHLDAMY.js.map} +1 -1
- package/dist/{chunk-3W3XYULK.js → chunk-C4HP2D46.js} +4 -4
- package/dist/{chunk-3W3XYULK.js.map → chunk-C4HP2D46.js.map} +1 -1
- package/dist/{chunk-C5HQPXRI.js → chunk-CMA3ZFCG.js} +4 -4
- package/dist/{chunk-C5HQPXRI.js.map → chunk-CMA3ZFCG.js.map} +1 -1
- package/dist/{chunk-EN4CLDGZ.js → chunk-D4J24WDF.js} +3 -3
- package/dist/{chunk-EN4CLDGZ.js.map → chunk-D4J24WDF.js.map} +1 -1
- package/dist/{chunk-MOAIQHR7.js → chunk-DJ3XX3CV.js} +3 -3
- package/dist/{chunk-MOAIQHR7.js.map → chunk-DJ3XX3CV.js.map} +1 -1
- package/dist/{chunk-IIVTPN62.js → chunk-DVO556JH.js} +3 -3
- package/dist/{chunk-IIVTPN62.js.map → chunk-DVO556JH.js.map} +1 -1
- package/dist/{chunk-2XJCLPNH.js → chunk-EC5TKCWA.js} +3 -3
- package/dist/{chunk-2XJCLPNH.js.map → chunk-EC5TKCWA.js.map} +1 -1
- package/dist/{chunk-VLZANXRZ.js → chunk-EMU3GXKM.js} +3 -3
- package/dist/{chunk-VLZANXRZ.js.map → chunk-EMU3GXKM.js.map} +1 -1
- package/dist/{chunk-F5UKI7XD.js → chunk-ENPBMEUW.js} +3 -3
- package/dist/{chunk-F5UKI7XD.js.map → chunk-ENPBMEUW.js.map} +1 -1
- package/dist/{chunk-V75O7QQO.js → chunk-FQDCPWLX.js} +3 -3
- package/dist/{chunk-V75O7QQO.js.map → chunk-FQDCPWLX.js.map} +1 -1
- package/dist/{chunk-3B345SQU.js → chunk-FRL5SLFT.js} +4 -4
- package/dist/{chunk-3B345SQU.js.map → chunk-FRL5SLFT.js.map} +1 -1
- package/dist/{chunk-5YHT252H.js → chunk-GTDDUPTE.js} +3 -3
- package/dist/{chunk-5YHT252H.js.map → chunk-GTDDUPTE.js.map} +1 -1
- package/dist/{chunk-OIHX5B4R.js → chunk-GYFX2I6B.js} +3 -3
- package/dist/{chunk-OIHX5B4R.js.map → chunk-GYFX2I6B.js.map} +1 -1
- package/dist/{chunk-PQW5LKAI.js → chunk-J2FSGJ2P.js} +3 -3
- package/dist/{chunk-PQW5LKAI.js.map → chunk-J2FSGJ2P.js.map} +1 -1
- package/dist/{chunk-C32XGHWO.js → chunk-KE2TP5XZ.js} +3 -3
- package/dist/{chunk-C32XGHWO.js.map → chunk-KE2TP5XZ.js.map} +1 -1
- package/dist/{chunk-USFXANEU.js → chunk-LWW3FJHF.js} +3 -3
- package/dist/{chunk-USFXANEU.js.map → chunk-LWW3FJHF.js.map} +1 -1
- package/dist/{chunk-3IIIHZHT.js → chunk-MQZXQOGY.js} +3 -3
- package/dist/{chunk-3IIIHZHT.js.map → chunk-MQZXQOGY.js.map} +1 -1
- package/dist/{chunk-BOMPFNM4.js → chunk-NSLVUCYP.js} +3 -3
- package/dist/{chunk-BOMPFNM4.js.map → chunk-NSLVUCYP.js.map} +1 -1
- package/dist/{chunk-7Z4NMNX6.js → chunk-O656K7OS.js} +3 -3
- package/dist/{chunk-7Z4NMNX6.js.map → chunk-O656K7OS.js.map} +1 -1
- package/dist/{chunk-S763GTIZ.js → chunk-PCUWBRNT.js} +3 -3
- package/dist/{chunk-S763GTIZ.js.map → chunk-PCUWBRNT.js.map} +1 -1
- package/dist/{chunk-MK57AOTI.js → chunk-QNYGQYAO.js} +5 -5
- package/dist/{chunk-MK57AOTI.js.map → chunk-QNYGQYAO.js.map} +1 -1
- package/dist/{chunk-UKDDK42K.js → chunk-QOVLTVJN.js} +3 -3
- package/dist/{chunk-UKDDK42K.js.map → chunk-QOVLTVJN.js.map} +1 -1
- package/dist/{chunk-PJXVLE24.js → chunk-QYA7HYFI.js} +5 -5
- package/dist/{chunk-PJXVLE24.js.map → chunk-QYA7HYFI.js.map} +1 -1
- package/dist/{chunk-SF6WPUC5.js → chunk-QZ6T4R44.js} +3 -3
- package/dist/{chunk-SF6WPUC5.js.map → chunk-QZ6T4R44.js.map} +1 -1
- package/dist/{chunk-7FSFJA33.js → chunk-SNGWMCZH.js} +3 -3
- package/dist/{chunk-7FSFJA33.js.map → chunk-SNGWMCZH.js.map} +1 -1
- package/dist/{chunk-XQNVWHMN.js → chunk-UHAI3QOA.js} +3 -3
- package/dist/{chunk-XQNVWHMN.js.map → chunk-UHAI3QOA.js.map} +1 -1
- package/dist/{chunk-OHWRTHGL.js → chunk-UHHW7GZ4.js} +4 -4
- package/dist/{chunk-OHWRTHGL.js.map → chunk-UHHW7GZ4.js.map} +1 -1
- package/dist/{chunk-PGYEIXCO.js → chunk-UKYSXWTI.js} +4 -4
- package/dist/{chunk-PGYEIXCO.js.map → chunk-UKYSXWTI.js.map} +1 -1
- package/dist/{chunk-IWM2XDXH.js → chunk-UPSNKESO.js} +3 -3
- package/dist/{chunk-IWM2XDXH.js.map → chunk-UPSNKESO.js.map} +1 -1
- package/dist/{chunk-BXZGCOKT.js → chunk-WEHUVESG.js} +4 -4
- package/dist/{chunk-BXZGCOKT.js.map → chunk-WEHUVESG.js.map} +1 -1
- package/dist/{chunk-ISCJST4P.js → chunk-WFR55YKL.js} +3 -3
- package/dist/{chunk-ISCJST4P.js.map → chunk-WFR55YKL.js.map} +1 -1
- package/dist/{chunk-MYBBBLYE.js → chunk-WKQUCDGP.js} +3 -3
- package/dist/{chunk-MYBBBLYE.js.map → chunk-WKQUCDGP.js.map} +1 -1
- package/dist/{chunk-STX5UKYT.js → chunk-XAXIQ55K.js} +3 -3
- package/dist/{chunk-STX5UKYT.js.map → chunk-XAXIQ55K.js.map} +1 -1
- package/dist/{chunk-H2LHWJ52.js → chunk-YHQFS4ZF.js} +4 -4
- package/dist/{chunk-H2LHWJ52.js.map → chunk-YHQFS4ZF.js.map} +1 -1
- package/dist/{chunk-VL2WNGPF.js → chunk-YUYYAMLE.js} +3 -3
- package/dist/{chunk-VL2WNGPF.js.map → chunk-YUYYAMLE.js.map} +1 -1
- package/dist/{chunk-CPIKN4BX.js → chunk-YYVL2FWF.js} +5 -5
- package/dist/{chunk-CPIKN4BX.js.map → chunk-YYVL2FWF.js.map} +1 -1
- package/dist/client.cjs +7 -5
- package/dist/client.cjs.map +1 -1
- package/dist/client.js +56 -56
- package/dist/components/Accordion/index.cjs +2 -0
- package/dist/components/Accordion/index.cjs.map +1 -1
- package/dist/components/Accordion/index.js +3 -3
- package/dist/components/Alert/index.cjs +2 -0
- package/dist/components/Alert/index.cjs.map +1 -1
- package/dist/components/Alert/index.js +3 -3
- package/dist/components/AlertDialog/index.cjs +2 -0
- package/dist/components/AlertDialog/index.cjs.map +1 -1
- package/dist/components/AlertDialog/index.js +2 -2
- package/dist/components/Avatar/index.cjs +2 -0
- package/dist/components/Avatar/index.cjs.map +1 -1
- package/dist/components/Avatar/index.js +2 -2
- package/dist/components/Badge/index.cjs +2 -0
- package/dist/components/Badge/index.cjs.map +1 -1
- package/dist/components/Badge/index.js +2 -2
- package/dist/components/Box/index.cjs +2 -0
- package/dist/components/Box/index.cjs.map +1 -1
- package/dist/components/Box/index.js +4 -4
- package/dist/components/Breadcrumb/index.cjs +2 -0
- package/dist/components/Breadcrumb/index.cjs.map +1 -1
- package/dist/components/Breadcrumb/index.js +3 -3
- package/dist/components/Button/index.cjs +2 -0
- package/dist/components/Button/index.cjs.map +1 -1
- package/dist/components/Button/index.js +2 -2
- package/dist/components/Calendar/index.cjs +2 -0
- package/dist/components/Calendar/index.cjs.map +1 -1
- package/dist/components/Calendar/index.js +4 -4
- package/dist/components/Card/index.cjs +2 -0
- package/dist/components/Card/index.cjs.map +1 -1
- package/dist/components/Card/index.js +2 -2
- package/dist/components/Checkbox/index.cjs +2 -0
- package/dist/components/Checkbox/index.cjs.map +1 -1
- package/dist/components/Checkbox/index.js +3 -3
- package/dist/components/Collapsible/index.cjs +2 -0
- package/dist/components/Collapsible/index.cjs.map +1 -1
- package/dist/components/Collapsible/index.js +2 -2
- package/dist/components/Combobox/index.cjs +2 -0
- package/dist/components/Combobox/index.cjs.map +1 -1
- package/dist/components/Combobox/index.js +4 -4
- package/dist/components/Command/index.cjs +2 -0
- package/dist/components/Command/index.cjs.map +1 -1
- package/dist/components/Command/index.js +4 -4
- package/dist/components/ContextMenu/index.cjs +3 -1
- package/dist/components/ContextMenu/index.cjs.map +1 -1
- package/dist/components/ContextMenu/index.js +4 -4
- package/dist/components/DataTable/index.cjs +2 -0
- package/dist/components/DataTable/index.cjs.map +1 -1
- package/dist/components/DataTable/index.js +3 -3
- package/dist/components/DatePicker/index.cjs +2 -0
- package/dist/components/DatePicker/index.cjs.map +1 -1
- package/dist/components/DatePicker/index.js +6 -6
- package/dist/components/Dialog/index.cjs +2 -0
- package/dist/components/Dialog/index.cjs.map +1 -1
- package/dist/components/Dialog/index.js +3 -3
- package/dist/components/DropdownMenu/index.cjs +3 -1
- package/dist/components/DropdownMenu/index.cjs.map +1 -1
- package/dist/components/DropdownMenu/index.js +3 -3
- package/dist/components/Empty/index.cjs +2 -0
- package/dist/components/Empty/index.cjs.map +1 -1
- package/dist/components/Empty/index.js +2 -2
- package/dist/components/Field/index.cjs +4 -2
- package/dist/components/Field/index.cjs.map +1 -1
- package/dist/components/Field/index.js +2 -2
- package/dist/components/FloatButton/index.cjs +2 -0
- package/dist/components/FloatButton/index.cjs.map +1 -1
- package/dist/components/FloatButton/index.js +4 -4
- package/dist/components/HStack/index.cjs +2 -0
- package/dist/components/HStack/index.cjs.map +1 -1
- package/dist/components/HStack/index.js +4 -4
- package/dist/components/HoverCard/index.cjs +2 -0
- package/dist/components/HoverCard/index.cjs.map +1 -1
- package/dist/components/HoverCard/index.js +3 -3
- package/dist/components/InputGroup/index.cjs +3 -1
- package/dist/components/InputGroup/index.cjs.map +1 -1
- package/dist/components/InputGroup/index.js +2 -2
- package/dist/components/InputOTP/index.cjs +2 -0
- package/dist/components/InputOTP/index.cjs.map +1 -1
- package/dist/components/InputOTP/index.js +2 -2
- package/dist/components/Item/index.cjs +2 -0
- package/dist/components/Item/index.cjs.map +1 -1
- package/dist/components/Item/index.js +2 -2
- package/dist/components/Kbd/index.cjs +2 -0
- package/dist/components/Kbd/index.cjs.map +1 -1
- package/dist/components/Kbd/index.js +2 -2
- package/dist/components/Label/index.cjs +3 -1
- package/dist/components/Label/index.cjs.map +1 -1
- package/dist/components/Label/index.js +2 -2
- package/dist/components/Pagination/index.cjs +2 -0
- package/dist/components/Pagination/index.cjs.map +1 -1
- package/dist/components/Pagination/index.js +4 -4
- package/dist/components/Popover/index.cjs +2 -0
- package/dist/components/Popover/index.cjs.map +1 -1
- package/dist/components/Popover/index.js +2 -2
- package/dist/components/Progress/index.cjs +2 -0
- package/dist/components/Progress/index.cjs.map +1 -1
- package/dist/components/Progress/index.js +2 -2
- package/dist/components/Radio/index.cjs +2 -0
- package/dist/components/Radio/index.cjs.map +1 -1
- package/dist/components/Radio/index.js +2 -2
- package/dist/components/SegmentedControl/index.cjs +2 -0
- package/dist/components/SegmentedControl/index.cjs.map +1 -1
- package/dist/components/SegmentedControl/index.js +2 -2
- package/dist/components/Select/index.cjs +2 -0
- package/dist/components/Select/index.cjs.map +1 -1
- package/dist/components/Select/index.js +3 -3
- package/dist/components/Separator/index.cjs +2 -0
- package/dist/components/Separator/index.cjs.map +1 -1
- package/dist/components/Separator/index.js +2 -2
- package/dist/components/Sheet/index.cjs +2 -0
- package/dist/components/Sheet/index.cjs.map +1 -1
- package/dist/components/Sheet/index.js +2 -2
- package/dist/components/Sidebar/index.cjs +2 -0
- package/dist/components/Sidebar/index.cjs.map +1 -1
- package/dist/components/Sidebar/index.js +2 -2
- package/dist/components/Skeleton/index.cjs +2 -0
- package/dist/components/Skeleton/index.cjs.map +1 -1
- package/dist/components/Skeleton/index.js +2 -2
- package/dist/components/Slider/index.cjs +2 -0
- package/dist/components/Slider/index.cjs.map +1 -1
- package/dist/components/Slider/index.js +2 -2
- package/dist/components/Switch/index.cjs +2 -0
- package/dist/components/Switch/index.cjs.map +1 -1
- package/dist/components/Switch/index.js +2 -2
- package/dist/components/Table/index.cjs +2 -0
- package/dist/components/Table/index.cjs.map +1 -1
- package/dist/components/Table/index.js +2 -2
- package/dist/components/Tabs/index.cjs +2 -0
- package/dist/components/Tabs/index.cjs.map +1 -1
- package/dist/components/Tabs/index.js +2 -2
- package/dist/components/Text/index.cjs +2 -0
- package/dist/components/Text/index.cjs.map +1 -1
- package/dist/components/Text/index.js +2 -2
- package/dist/components/TextArea/index.cjs +2 -0
- package/dist/components/TextArea/index.cjs.map +1 -1
- package/dist/components/TextArea/index.js +3 -3
- package/dist/components/TextInput/index.cjs +2 -0
- package/dist/components/TextInput/index.cjs.map +1 -1
- package/dist/components/TextInput/index.js +2 -2
- package/dist/components/Toggle/index.cjs +2 -0
- package/dist/components/Toggle/index.cjs.map +1 -1
- package/dist/components/Toggle/index.js +2 -2
- package/dist/components/Tooltip/index.cjs +2 -0
- package/dist/components/Tooltip/index.cjs.map +1 -1
- package/dist/components/Tooltip/index.js +2 -2
- package/dist/components/VStack/index.cjs +2 -0
- package/dist/components/VStack/index.cjs.map +1 -1
- package/dist/components/VStack/index.js +4 -4
- package/dist/icons/index.cjs +2 -0
- package/dist/icons/index.cjs.map +1 -1
- package/dist/icons/index.js +2 -2
- package/dist/index.cjs +7 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +53 -53
- package/dist/theme/index.cjs +2 -0
- package/dist/theme/index.cjs.map +1 -1
- package/dist/theme/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-R5JMDDCB.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Slider/slider-gesture-context.tsx","../src/components/Slider/Slider.tsx"],"names":["useState","useRef","useCallback","useEffect","useMemo","jsx"],"mappings":"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","file":"chunk-7FSFJA33.js","sourcesContent":["'use client';\n\n// Cross-tree gesture coordination for Slider. iOS UIScrollView's native\n// pan recognizer can't be preempted from JS-only responder capture, so\n// the canonical workaround is for the wrapping ScrollView to set\n// `scrollEnabled={false}` while a slider is actively being dragged. This\n// context lets the Slider broadcast \"I'm dragging\" up the tree without\n// the consumer having to wire `onInteractionStart`/`onInteractionEnd`\n// individually for every Slider instance — drop a `<SliderGestureProvider>`\n// above your scroll container and read `useSliderInteractionActive()`\n// inside it to drive `scrollEnabled`.\n\nimport { createContext, type ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\ntype Subscriber = (active: boolean) => void;\ntype Bus = {\n /** Mark the start of a drag; returns a release fn that decrements the active count. */\n begin: () => () => void;\n /** Subscribe to active-state transitions. Returns an unsubscribe fn. */\n subscribe: (s: Subscriber) => () => void;\n};\n\nconst Ctx = createContext<Bus | null>(null);\n\nexport function SliderGestureProvider({ children }: { children: ReactNode }) {\n // We track concurrent drags (theoretically multiple sliders, e.g. a\n // range with two thumbs) via a ref so begin/release are O(1) and\n // don't trigger re-renders on the provider itself.\n const activeCount = useRef(0);\n const subs = useRef(new Set<Subscriber>());\n\n const broadcast = useCallback(() => {\n const isActive = activeCount.current > 0;\n for (const s of subs.current) {\n s(isActive);\n }\n }, []);\n\n const bus = useMemo<Bus>(\n () => ({\n begin: () => {\n activeCount.current += 1;\n broadcast();\n let released = false;\n return () => {\n if (released) {\n return;\n }\n released = true;\n activeCount.current = Math.max(0, activeCount.current - 1);\n broadcast();\n };\n },\n subscribe: (s) => {\n subs.current.add(s);\n return () => {\n subs.current.delete(s);\n };\n },\n }),\n [broadcast]\n );\n\n return <Ctx.Provider value={bus}>{children}</Ctx.Provider>;\n}\n\n/**\n * Read by Slider internally — publishes drag start/end to the provider.\n * Returns { begin, end } stable across renders. No-op if no provider.\n */\nexport function useSliderGesturePublisher(): { begin: () => void; end: () => void } {\n const bus = useContext(Ctx);\n const releaseRef = useRef<null | (() => void)>(null);\n return useMemo(\n () => ({\n begin: () => {\n if (!bus) {\n return;\n }\n if (releaseRef.current) {\n return;\n }\n releaseRef.current = bus.begin();\n },\n end: () => {\n if (!bus) {\n return;\n }\n releaseRef.current?.();\n releaseRef.current = null;\n },\n }),\n [bus]\n );\n}\n\n/**\n * Read by a wrapping container (e.g. a ScrollView) to know whether any\n * descendant Slider is actively being dragged. Returns `false` when no\n * provider is mounted.\n */\nexport function useSliderInteractionActive(): boolean {\n const bus = useContext(Ctx);\n const [active, setActive] = useState(false);\n useEffect(() => {\n if (!bus) {\n return;\n }\n const unsubscribe = bus.subscribe(setActive);\n return unsubscribe;\n }, [bus]);\n return active;\n}\n","'use client';\n\nimport {\n type KeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { GestureResponderEvent, ViewStyle } from 'react-native';\nimport { Platform, View } from 'react-native';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport { useSliderGesturePublisher } from './slider-gesture-context';\n\nexport type SliderOrientation = 'horizontal' | 'vertical';\nexport type SliderDirection = 'ltr' | 'rtl';\n\nexport type SliderProps = {\n /** Controlled value(s). For a single-thumb slider pass `[n]`. */\n value?: ReadonlyArray<number>;\n /** Uncontrolled initial value(s). @defaultValue [0] */\n defaultValue?: ReadonlyArray<number>;\n /** Fires continuously while a thumb moves. */\n onChange?: (next: number[]) => void;\n /** Fires when interaction ends (pointer up, key release). */\n onValueCommit?: (next: number[]) => void;\n /**\n * Fires when a pointer/touch starts driving the slider. Pair with\n * `onInteractionEnd` to toggle a parent ScrollView's `scrollEnabled`\n * — RN's responder system can't preempt UIScrollView's native pan\n * recognizer on iOS, so the canonical fix is for the consumer to\n * disable scroll while the user is actively dragging.\n */\n onInteractionStart?: () => void;\n /** Fires when a pointer/touch releases (pair with `onInteractionStart`). */\n onInteractionEnd?: () => void;\n /** @defaultValue 0 */\n min?: number;\n /** @defaultValue 100 */\n max?: number;\n /** Step size. @defaultValue 1 */\n step?: number;\n /** Multi-thumb spacing — minimum number of `step`s required between adjacent thumbs. @defaultValue 0 */\n minStepsBetweenThumbs?: number;\n /** @defaultValue 'horizontal' */\n orientation?: SliderOrientation;\n /** Reading direction. Affects which end is min/max for horizontal sliders. @defaultValue 'ltr' */\n dir?: SliderDirection;\n /** Reverse the visual + interaction direction (useful for \"less is more\" sliders). */\n inverted?: boolean;\n /** When true, the slider is non-interactive. */\n disabled?: boolean;\n /** Group-level accessibility label. */\n 'aria-label'?: string;\n /** Per-thumb label provider — `(index) => string`. Required for multi-thumb sliders to announce sensibly. */\n ariaLabelForThumb?: (thumbIndex: number) => string;\n /** Fixed track length when orientation=\"vertical\". @defaultValue 200 */\n length?: number;\n className?: string;\n testID?: string;\n};\n\nconst TRACK_THICKNESS = 6;\nconst THUMB_SIZE = 18;\nconst THUMB_HIT_SLOP = 8;\n\n// Clamp + snap a raw value to [min, max] on the step grid.\nconst snap = (raw: number, min: number, max: number, step: number): number => {\n const clamped = Math.min(max, Math.max(min, raw));\n if (step <= 0) {\n return clamped;\n }\n const stepped = Math.round((clamped - min) / step) * step + min;\n return Math.min(max, Math.max(min, Number.parseFloat(stepped.toFixed(10))));\n};\n\n// Replace one entry in a sorted-values array, then re-sort and enforce\n// the minStepsBetweenThumbs spacing.\nconst updateAt = (values: ReadonlyArray<number>, index: number, next: number, gap: number): number[] => {\n const out = values.slice();\n out[index] = next;\n // Enforce gap by clamping against neighbors. We don't re-sort the array\n // because thumb identity matters across drags; instead each thumb is\n // bounded by its neighbors' positions.\n const left = index > 0 ? out[index - 1] : undefined;\n const right = index < out.length - 1 ? out[index + 1] : undefined;\n if (left !== undefined && next < left + gap) {\n out[index] = left + gap;\n }\n if (right !== undefined && next > right - gap) {\n out[index] = right - gap;\n }\n return out;\n};\n\n/**\n * Continuous-value slider. Single-thumb, range (two thumbs), or N-thumb\n * for multi-handle pickers. Mirrors Radix's Slider API: `value`/`defaultValue`\n * is always an array, `onChange` fires continuously while dragging,\n * and `onValueCommit` fires when interaction ends.\n *\n * Keyboard nav (per-thumb):\n * - ArrowRight/ArrowUp → +step (ArrowLeft/ArrowDown → -step). The axis\n * follows orientation; horizontal sliders honor `dir=\"rtl\"` and\n * `inverted` to flip arrow meaning.\n * - PageUp/PageDown → ±10·step (or ±10% of range, whichever is larger).\n * - Home / End → min / max.\n *\n * Pointer behavior (web): clicking the track moves the nearest thumb to\n * the click; dragging a thumb continuously updates with `pointer-capture`\n * so the cursor doesn't lose tracking when it strays off the thumb. On\n * native, tap-to-position works; long-press dragging is a future\n * enhancement.\n *\n * RTL: when `dir=\"rtl\"` (horizontal only), the visual mapping flips so\n * the higher value sits on the left, matching Radix and shadcn.\n */\nexport const Slider = ({\n value,\n defaultValue,\n onChange,\n onValueCommit,\n onInteractionStart,\n onInteractionEnd,\n min = 0,\n max = 100,\n step = 1,\n minStepsBetweenThumbs = 0,\n orientation = 'horizontal',\n dir = 'ltr',\n inverted = false,\n disabled = false,\n ariaLabelForThumb,\n length = 200,\n className,\n testID,\n ...rest\n}: SliderProps) => {\n const colors = useThemeColors();\n const ariaLabel = rest['aria-label'];\n const isVertical = orientation === 'vertical';\n // `reversed` flips the visual mapping: default vertical sliders have\n // max at the TOP (drag UP to increase, matching audio faders / volume\n // controls / brightness sliders). Horizontal LTR has max at the\n // right; horizontal RTL flips that. The `inverted` prop opts INTO\n // the opposite direction for either axis.\n const reversed = isVertical ? Boolean(inverted) : dir === 'rtl' ? !inverted : Boolean(inverted);\n const gap = step * minStepsBetweenThumbs;\n\n const initial = (defaultValue ?? value ?? [min]).map((v) => snap(v, min, max, step));\n const [inner, setInner] = useState<number[]>(initial);\n const isControlled = value !== undefined;\n const current = isControlled ? value.map((v) => snap(v, min, max, step)) : inner;\n\n const trackRef = useRef<View | null>(null);\n const trackRectRef = useRef<{ x: number; y: number; width: number; height: number } | null>(null);\n\n // Measure the track on layout (RN onLayout), and on web also on\n // window resize, since onLayout doesn't fire for window-relative shifts.\n // On native we use `measureInWindow` to get window-relative coords that\n // line up with `event.nativeEvent.pageX/pageY` from the responder.\n const measure = useCallback(() => {\n const node = trackRef.current;\n if (!node) {\n return;\n }\n if (Platform.OS === 'web') {\n const webNode = node as unknown as HTMLElement;\n if (typeof window === 'undefined' || typeof webNode.getBoundingClientRect !== 'function') {\n return;\n }\n const rect = webNode.getBoundingClientRect();\n trackRectRef.current = { x: rect.left, y: rect.top, width: rect.width, height: rect.height };\n return;\n }\n if (typeof node.measureInWindow === 'function') {\n node.measureInWindow((x, y, width, height) => {\n trackRectRef.current = { x, y, width, height };\n });\n }\n }, []);\n\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n measure();\n window.addEventListener('resize', measure);\n return () => window.removeEventListener('resize', measure);\n }, [measure]);\n\n const setValues = useCallback(\n (next: number[]) => {\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const commitValues = useCallback(\n (next: number[]) => {\n onValueCommit?.(next);\n },\n [onValueCommit]\n );\n\n // Convert pointer position → value. Returns the value the cursor maps to,\n // honoring orientation, RTL/inverted, and snapping to step.\n const valueFromClient = useCallback(\n (clientX: number, clientY: number): number => {\n const rect = trackRectRef.current;\n if (!rect) {\n return min;\n }\n const len = isVertical ? rect.height : rect.width;\n if (len <= 0) {\n return min;\n }\n const offset = isVertical ? clientY - rect.y : clientX - rect.x;\n let ratio = offset / len;\n ratio = Math.min(1, Math.max(0, ratio));\n // For vertical, the visual top is max (higher = up), so invert.\n if (isVertical) {\n ratio = 1 - ratio;\n }\n if (reversed) {\n ratio = 1 - ratio;\n }\n const raw = min + ratio * (max - min);\n return snap(raw, min, max, step);\n },\n [isVertical, reversed, min, max, step]\n );\n\n // Find the index of the thumb closest to a given value.\n const closestThumbIndex = useCallback(\n (target: number): number => {\n let best = 0;\n let bestDelta = Number.POSITIVE_INFINITY;\n for (let i = 0; i < current.length; i += 1) {\n const cv = current[i];\n if (cv === undefined) {\n continue;\n }\n const delta = Math.abs(cv - target);\n if (delta < bestDelta) {\n best = i;\n bestDelta = delta;\n }\n }\n return best;\n },\n [current]\n );\n\n const draggingRef = useRef<{ index: number; pointerId: number } | null>(null);\n // Auto-publishes drag state to a `<SliderGestureProvider>` ancestor\n // (no-op if none is mounted). Containers that need to disable scroll\n // during a drag read the same context via `useSliderInteractionActive`.\n const gesturePublisher = useSliderGesturePublisher();\n\n const onTrackPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLElement>) => {\n if (disabled) {\n return;\n }\n measure();\n const targetValue = valueFromClient(event.clientX, event.clientY);\n const idx = closestThumbIndex(targetValue);\n const next = updateAt(current, idx, targetValue, gap);\n setValues(next);\n draggingRef.current = { index: idx, pointerId: event.pointerId };\n event.currentTarget.setPointerCapture?.(event.pointerId);\n gesturePublisher.begin();\n onInteractionStart?.();\n },\n [\n disabled,\n measure,\n valueFromClient,\n closestThumbIndex,\n current,\n gap,\n setValues,\n gesturePublisher,\n onInteractionStart,\n ]\n );\n\n const onTrackPointerMove = useCallback(\n (event: ReactPointerEvent<HTMLElement>) => {\n const drag = draggingRef.current;\n if (!drag || drag.pointerId !== event.pointerId) {\n return;\n }\n const targetValue = valueFromClient(event.clientX, event.clientY);\n const next = updateAt(current, drag.index, targetValue, gap);\n setValues(next);\n },\n [valueFromClient, current, gap, setValues]\n );\n\n const onTrackPointerUp = useCallback(\n (event: ReactPointerEvent<HTMLElement>) => {\n const drag = draggingRef.current;\n if (!drag || drag.pointerId !== event.pointerId) {\n return;\n }\n draggingRef.current = null;\n commitValues(current);\n gesturePublisher.end();\n onInteractionEnd?.();\n },\n [commitValues, current, gesturePublisher, onInteractionEnd]\n );\n\n const handleThumbKeyDown = useCallback(\n (index: number) => (event: KeyboardEvent<HTMLElement>) => {\n if (disabled) {\n return;\n }\n const cv = current[index];\n if (cv === undefined) {\n return;\n }\n const range = max - min;\n const big = Math.max(step * 10, range / 10);\n const arrowSign = (key: 'inc' | 'dec') => {\n // Arrow ↑/→ is \"increase\" in default direction; flip for RTL/inverted.\n const base = key === 'inc' ? 1 : -1;\n return reversed ? -base : base;\n };\n let nextValue = cv;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n nextValue = cv + step * arrowSign('inc');\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n nextValue = cv + step * arrowSign('dec');\n break;\n case 'PageUp':\n nextValue = cv + big * arrowSign('inc');\n break;\n case 'PageDown':\n nextValue = cv + big * arrowSign('dec');\n break;\n case 'Home':\n nextValue = min;\n break;\n case 'End':\n nextValue = max;\n break;\n default:\n return;\n }\n event.preventDefault();\n const snapped = snap(nextValue, min, max, step);\n const next = updateAt(current, index, snapped, gap);\n setValues(next);\n commitValues(next);\n },\n [disabled, current, max, min, step, reversed, gap, setValues, commitValues]\n );\n\n // Visual layout. The thumb sits on top of the track at its value's\n // position; the range fills from the lowest thumb to the highest.\n const pctSig = (n: number) => `${Math.round(n * 10000) / 10000}%` as unknown as number;\n const thumbPositionStyle = (val: number): ViewStyle => {\n const ratio = (val - min) / (max - min || 1);\n const offset = pctSig((reversed ? 1 - ratio : ratio) * 100);\n if (isVertical) {\n // Vertical: top=max, bottom=min by default (reverse visual mapping).\n const verticalOffset = pctSig((reversed ? ratio : 1 - ratio) * 100);\n return {\n position: 'absolute',\n top: verticalOffset,\n left: pctSig(50),\n marginLeft: -THUMB_SIZE / 2,\n marginTop: -THUMB_SIZE / 2,\n };\n }\n return {\n position: 'absolute',\n left: offset,\n top: pctSig(50),\n marginLeft: -THUMB_SIZE / 2,\n marginTop: -THUMB_SIZE / 2,\n };\n };\n\n const sortedValues = useMemo(() => current.slice().sort((a, b) => a - b), [current]);\n // Fill behavior:\n // - Single thumb: fill from min → value (matches Radix / shadcn).\n // Without this, a single-thumb slider has no visible fill at all\n // because the start and end of the range are the same value.\n // - Multi thumb: fill from lowest thumb → highest thumb (range region).\n const isSingle = sortedValues.length <= 1;\n const fillStart = isSingle ? min : (sortedValues[0] ?? min);\n const fillEnd = isSingle ? (sortedValues[0] ?? min) : (sortedValues[sortedValues.length - 1] ?? min);\n const startRatio = (fillStart - min) / (max - min || 1);\n const endRatio = (fillEnd - min) / (max - min || 1);\n\n // Casts: RN-Web accepts percentage strings for inset properties, but\n // RN's TS surface (DimensionValue) is narrower. Cast at the boundary.\n // Round to 4 decimals so floating-point noise (`19.999999%`) doesn't\n // bleed into rendered styles.\n const pct = (n: number) => `${Math.round(n * 10000) / 10000}%` as unknown as number;\n const rangeStyle: ViewStyle = isVertical\n ? {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: pct((reversed ? 1 - endRatio : startRatio) * 100),\n top: pct((reversed ? startRatio : 1 - endRatio) * 100),\n backgroundColor: disabled ? colors.color.neutral['400'] : colors.semantic.interactive.primary,\n }\n : {\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: pct((reversed ? 1 - endRatio : startRatio) * 100),\n right: pct((reversed ? startRatio : 1 - endRatio) * 100),\n backgroundColor: disabled ? colors.color.neutral['400'] : colors.semantic.interactive.primary,\n };\n\n const trackStyle: ViewStyle = isVertical\n ? {\n width: TRACK_THICKNESS,\n height: length,\n backgroundColor: colors.semantic.background.subtle,\n borderRadius: TRACK_THICKNESS / 2,\n position: 'relative',\n // No overflow: hidden here — the thumb is a child and we don't\n // want it clipped at the track's edge. The fill below sits in\n // its own absolutely-positioned slot inside the track and\n // already paints within the track's rounded corners thanks to\n // matching borderRadius, so we don't need to clip.\n }\n : {\n height: TRACK_THICKNESS,\n width: '100%',\n backgroundColor: colors.semantic.background.subtle,\n borderRadius: TRACK_THICKNESS / 2,\n position: 'relative',\n // No overflow: hidden here — the thumb is a child and we don't\n // want it clipped at the track's edge. The fill below sits in\n // its own absolutely-positioned slot inside the track and\n // already paints within the track's rounded corners thanks to\n // matching borderRadius, so we don't need to clip.\n };\n\n const containerStyle: ViewStyle = isVertical\n ? {\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n paddingVertical: THUMB_HIT_SLOP,\n paddingHorizontal: THUMB_SIZE,\n opacity: disabled ? 0.5 : 1,\n }\n : {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: THUMB_HIT_SLOP,\n paddingHorizontal: THUMB_SIZE / 2,\n opacity: disabled ? 0.5 : 1,\n };\n\n // Native gesture handlers — claim the responder so a parent ScrollView\n // can't steal the drag, then drive the same value-from-coords logic\n // using `pageX`/`pageY` (window-relative, matches `measureInWindow`).\n const onTrackResponderGrant = useCallback(\n (event: GestureResponderEvent) => {\n if (disabled) {\n return;\n }\n // Re-measure on grant to capture any layout shift that happened\n // between mount and the first touch (e.g. inside an animated\n // ScrollView). Doing it here is cheap and guarantees fresh\n // coords for the upcoming move sequence.\n measure();\n const { pageX, pageY } = event.nativeEvent;\n const targetValue = valueFromClient(pageX, pageY);\n const idx = closestThumbIndex(targetValue);\n const next = updateAt(current, idx, targetValue, gap);\n setValues(next);\n draggingRef.current = { index: idx, pointerId: 0 };\n gesturePublisher.begin();\n onInteractionStart?.();\n },\n [\n disabled,\n measure,\n valueFromClient,\n closestThumbIndex,\n current,\n gap,\n setValues,\n gesturePublisher,\n onInteractionStart,\n ]\n );\n const onTrackResponderMove = useCallback(\n (event: GestureResponderEvent) => {\n if (!draggingRef.current) {\n return;\n }\n const { pageX, pageY } = event.nativeEvent;\n const targetValue = valueFromClient(pageX, pageY);\n const next = updateAt(current, draggingRef.current.index, targetValue, gap);\n setValues(next);\n },\n [valueFromClient, current, gap, setValues]\n );\n const onTrackResponderRelease = useCallback(() => {\n if (!draggingRef.current) {\n return;\n }\n draggingRef.current = null;\n commitValues(current);\n gesturePublisher.end();\n onInteractionEnd?.();\n }, [commitValues, current, gesturePublisher, onInteractionEnd]);\n\n // RN's View doesn't model pointer events in its TS surface; rn-web\n // forwards them. Cast at the spread boundary. Native uses the\n // GestureResponder system so a vertical slider inside a ScrollView\n // still wins the touch — `onMoveShouldSetResponderCapture` claims\n // the gesture before the ScrollView can.\n const trackPointerProps: Record<string, unknown> =\n Platform.OS === 'web'\n ? {\n onPointerDown: onTrackPointerDown,\n onPointerMove: onTrackPointerMove,\n onPointerUp: onTrackPointerUp,\n onPointerCancel: onTrackPointerUp,\n }\n : {\n // Capture variants run BEFORE non-capture handlers and\n // walk root → leaf, so they win the gesture against an\n // ancestor ScrollView whose own `onStartShould` would\n // otherwise claim the touch first. Without these, a\n // vertical slider inside a vertical ScrollView lets the\n // ScrollView swallow the drag.\n onStartShouldSetResponderCapture: () => !disabled,\n onMoveShouldSetResponderCapture: () => !disabled,\n onStartShouldSetResponder: () => !disabled,\n onMoveShouldSetResponder: () => !disabled,\n onResponderGrant: onTrackResponderGrant,\n onResponderMove: onTrackResponderMove,\n onResponderRelease: onTrackResponderRelease,\n onResponderTerminate: onTrackResponderRelease,\n onResponderTerminationRequest: () => false,\n };\n\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"group\"\n accessibilityRole=\"adjustable\"\n {...(ariaLabel !== undefined ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {})}\n {...(disabled ? { 'aria-disabled': true } : {})}\n className={cn(\n isVertical ? 'flex-col items-center' : 'flex-row items-center',\n disabled ? 'opacity-50' : undefined,\n className\n )}\n style={containerStyle}\n >\n <View\n ref={trackRef}\n onLayout={measure}\n {...trackPointerProps}\n className={cn('relative bg-neutral-200 rounded-full')}\n style={trackStyle}\n >\n {/* Inner clipper holds the range fill so its left/right\n * edges round naturally against the track's borderRadius.\n * The thumbs live OUTSIDE this clipper as direct children\n * of the track, so they aren't truncated to track height. */}\n <View\n pointerEvents=\"none\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: TRACK_THICKNESS / 2,\n overflow: 'hidden',\n }}\n >\n <View style={rangeStyle} />\n </View>\n {current.map((val, index) => {\n const ratio = (val - min) / (max - min || 1);\n const thumbProps: Record<string, unknown> = {\n role: 'slider',\n accessibilityRole: 'adjustable',\n 'aria-valuemin': min,\n 'aria-valuemax': max,\n 'aria-valuenow': val,\n 'aria-orientation': orientation,\n 'aria-label': ariaLabelForThumb?.(index) ?? ariaLabel,\n tabIndex: disabled ? -1 : 0,\n onKeyDown: handleThumbKeyDown(index),\n 'data-thumb-index': index,\n 'data-value': val,\n 'data-ratio': ratio,\n };\n return (\n <View\n // biome-ignore lint/suspicious/noArrayIndexKey: thumb identity IS its index — values preserve order across renders.\n key={`thumb-${index}`}\n {...thumbProps}\n style={[\n thumbPositionStyle(val),\n {\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: colors.semantic.background.elevated,\n borderWidth: 2,\n borderColor: disabled\n ? colors.color.neutral['400']\n : colors.semantic.interactive.primary,\n ...(Platform.OS === 'web'\n ? ({ boxShadow: '0 1px 2px rgba(0,0,0,0.1)' } as ViewStyle)\n : {}),\n },\n ]}\n />\n );\n })}\n </View>\n </View>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Slider/slider-gesture-context.tsx","../src/components/Slider/Slider.tsx"],"names":["useState","useRef","useCallback","useEffect","useMemo","jsx"],"mappings":"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","file":"chunk-SNGWMCZH.js","sourcesContent":["'use client';\n\n// Cross-tree gesture coordination for Slider. iOS UIScrollView's native\n// pan recognizer can't be preempted from JS-only responder capture, so\n// the canonical workaround is for the wrapping ScrollView to set\n// `scrollEnabled={false}` while a slider is actively being dragged. This\n// context lets the Slider broadcast \"I'm dragging\" up the tree without\n// the consumer having to wire `onInteractionStart`/`onInteractionEnd`\n// individually for every Slider instance — drop a `<SliderGestureProvider>`\n// above your scroll container and read `useSliderInteractionActive()`\n// inside it to drive `scrollEnabled`.\n\nimport { createContext, type ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\ntype Subscriber = (active: boolean) => void;\ntype Bus = {\n /** Mark the start of a drag; returns a release fn that decrements the active count. */\n begin: () => () => void;\n /** Subscribe to active-state transitions. Returns an unsubscribe fn. */\n subscribe: (s: Subscriber) => () => void;\n};\n\nconst Ctx = createContext<Bus | null>(null);\n\nexport function SliderGestureProvider({ children }: { children: ReactNode }) {\n // We track concurrent drags (theoretically multiple sliders, e.g. a\n // range with two thumbs) via a ref so begin/release are O(1) and\n // don't trigger re-renders on the provider itself.\n const activeCount = useRef(0);\n const subs = useRef(new Set<Subscriber>());\n\n const broadcast = useCallback(() => {\n const isActive = activeCount.current > 0;\n for (const s of subs.current) {\n s(isActive);\n }\n }, []);\n\n const bus = useMemo<Bus>(\n () => ({\n begin: () => {\n activeCount.current += 1;\n broadcast();\n let released = false;\n return () => {\n if (released) {\n return;\n }\n released = true;\n activeCount.current = Math.max(0, activeCount.current - 1);\n broadcast();\n };\n },\n subscribe: (s) => {\n subs.current.add(s);\n return () => {\n subs.current.delete(s);\n };\n },\n }),\n [broadcast]\n );\n\n return <Ctx.Provider value={bus}>{children}</Ctx.Provider>;\n}\n\n/**\n * Read by Slider internally — publishes drag start/end to the provider.\n * Returns { begin, end } stable across renders. No-op if no provider.\n */\nexport function useSliderGesturePublisher(): { begin: () => void; end: () => void } {\n const bus = useContext(Ctx);\n const releaseRef = useRef<null | (() => void)>(null);\n return useMemo(\n () => ({\n begin: () => {\n if (!bus) {\n return;\n }\n if (releaseRef.current) {\n return;\n }\n releaseRef.current = bus.begin();\n },\n end: () => {\n if (!bus) {\n return;\n }\n releaseRef.current?.();\n releaseRef.current = null;\n },\n }),\n [bus]\n );\n}\n\n/**\n * Read by a wrapping container (e.g. a ScrollView) to know whether any\n * descendant Slider is actively being dragged. Returns `false` when no\n * provider is mounted.\n */\nexport function useSliderInteractionActive(): boolean {\n const bus = useContext(Ctx);\n const [active, setActive] = useState(false);\n useEffect(() => {\n if (!bus) {\n return;\n }\n const unsubscribe = bus.subscribe(setActive);\n return unsubscribe;\n }, [bus]);\n return active;\n}\n","'use client';\n\nimport {\n type KeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { GestureResponderEvent, ViewStyle } from 'react-native';\nimport { Platform, View } from 'react-native';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport { useSliderGesturePublisher } from './slider-gesture-context';\n\nexport type SliderOrientation = 'horizontal' | 'vertical';\nexport type SliderDirection = 'ltr' | 'rtl';\n\nexport type SliderProps = {\n /** Controlled value(s). For a single-thumb slider pass `[n]`. */\n value?: ReadonlyArray<number>;\n /** Uncontrolled initial value(s). @defaultValue [0] */\n defaultValue?: ReadonlyArray<number>;\n /** Fires continuously while a thumb moves. */\n onChange?: (next: number[]) => void;\n /** Fires when interaction ends (pointer up, key release). */\n onValueCommit?: (next: number[]) => void;\n /**\n * Fires when a pointer/touch starts driving the slider. Pair with\n * `onInteractionEnd` to toggle a parent ScrollView's `scrollEnabled`\n * — RN's responder system can't preempt UIScrollView's native pan\n * recognizer on iOS, so the canonical fix is for the consumer to\n * disable scroll while the user is actively dragging.\n */\n onInteractionStart?: () => void;\n /** Fires when a pointer/touch releases (pair with `onInteractionStart`). */\n onInteractionEnd?: () => void;\n /** @defaultValue 0 */\n min?: number;\n /** @defaultValue 100 */\n max?: number;\n /** Step size. @defaultValue 1 */\n step?: number;\n /** Multi-thumb spacing — minimum number of `step`s required between adjacent thumbs. @defaultValue 0 */\n minStepsBetweenThumbs?: number;\n /** @defaultValue 'horizontal' */\n orientation?: SliderOrientation;\n /** Reading direction. Affects which end is min/max for horizontal sliders. @defaultValue 'ltr' */\n dir?: SliderDirection;\n /** Reverse the visual + interaction direction (useful for \"less is more\" sliders). */\n inverted?: boolean;\n /** When true, the slider is non-interactive. */\n disabled?: boolean;\n /** Group-level accessibility label. */\n 'aria-label'?: string;\n /** Per-thumb label provider — `(index) => string`. Required for multi-thumb sliders to announce sensibly. */\n ariaLabelForThumb?: (thumbIndex: number) => string;\n /** Fixed track length when orientation=\"vertical\". @defaultValue 200 */\n length?: number;\n className?: string;\n testID?: string;\n};\n\nconst TRACK_THICKNESS = 6;\nconst THUMB_SIZE = 18;\nconst THUMB_HIT_SLOP = 8;\n\n// Clamp + snap a raw value to [min, max] on the step grid.\nconst snap = (raw: number, min: number, max: number, step: number): number => {\n const clamped = Math.min(max, Math.max(min, raw));\n if (step <= 0) {\n return clamped;\n }\n const stepped = Math.round((clamped - min) / step) * step + min;\n return Math.min(max, Math.max(min, Number.parseFloat(stepped.toFixed(10))));\n};\n\n// Replace one entry in a sorted-values array, then re-sort and enforce\n// the minStepsBetweenThumbs spacing.\nconst updateAt = (values: ReadonlyArray<number>, index: number, next: number, gap: number): number[] => {\n const out = values.slice();\n out[index] = next;\n // Enforce gap by clamping against neighbors. We don't re-sort the array\n // because thumb identity matters across drags; instead each thumb is\n // bounded by its neighbors' positions.\n const left = index > 0 ? out[index - 1] : undefined;\n const right = index < out.length - 1 ? out[index + 1] : undefined;\n if (left !== undefined && next < left + gap) {\n out[index] = left + gap;\n }\n if (right !== undefined && next > right - gap) {\n out[index] = right - gap;\n }\n return out;\n};\n\n/**\n * Continuous-value slider. Single-thumb, range (two thumbs), or N-thumb\n * for multi-handle pickers. Mirrors Radix's Slider API: `value`/`defaultValue`\n * is always an array, `onChange` fires continuously while dragging,\n * and `onValueCommit` fires when interaction ends.\n *\n * Keyboard nav (per-thumb):\n * - ArrowRight/ArrowUp → +step (ArrowLeft/ArrowDown → -step). The axis\n * follows orientation; horizontal sliders honor `dir=\"rtl\"` and\n * `inverted` to flip arrow meaning.\n * - PageUp/PageDown → ±10·step (or ±10% of range, whichever is larger).\n * - Home / End → min / max.\n *\n * Pointer behavior (web): clicking the track moves the nearest thumb to\n * the click; dragging a thumb continuously updates with `pointer-capture`\n * so the cursor doesn't lose tracking when it strays off the thumb. On\n * native, tap-to-position works; long-press dragging is a future\n * enhancement.\n *\n * RTL: when `dir=\"rtl\"` (horizontal only), the visual mapping flips so\n * the higher value sits on the left, matching Radix and shadcn.\n */\nexport const Slider = ({\n value,\n defaultValue,\n onChange,\n onValueCommit,\n onInteractionStart,\n onInteractionEnd,\n min = 0,\n max = 100,\n step = 1,\n minStepsBetweenThumbs = 0,\n orientation = 'horizontal',\n dir = 'ltr',\n inverted = false,\n disabled = false,\n ariaLabelForThumb,\n length = 200,\n className,\n testID,\n ...rest\n}: SliderProps) => {\n const colors = useThemeColors();\n const ariaLabel = rest['aria-label'];\n const isVertical = orientation === 'vertical';\n // `reversed` flips the visual mapping: default vertical sliders have\n // max at the TOP (drag UP to increase, matching audio faders / volume\n // controls / brightness sliders). Horizontal LTR has max at the\n // right; horizontal RTL flips that. The `inverted` prop opts INTO\n // the opposite direction for either axis.\n const reversed = isVertical ? Boolean(inverted) : dir === 'rtl' ? !inverted : Boolean(inverted);\n const gap = step * minStepsBetweenThumbs;\n\n const initial = (defaultValue ?? value ?? [min]).map((v) => snap(v, min, max, step));\n const [inner, setInner] = useState<number[]>(initial);\n const isControlled = value !== undefined;\n const current = isControlled ? value.map((v) => snap(v, min, max, step)) : inner;\n\n const trackRef = useRef<View | null>(null);\n const trackRectRef = useRef<{ x: number; y: number; width: number; height: number } | null>(null);\n\n // Measure the track on layout (RN onLayout), and on web also on\n // window resize, since onLayout doesn't fire for window-relative shifts.\n // On native we use `measureInWindow` to get window-relative coords that\n // line up with `event.nativeEvent.pageX/pageY` from the responder.\n const measure = useCallback(() => {\n const node = trackRef.current;\n if (!node) {\n return;\n }\n if (Platform.OS === 'web') {\n const webNode = node as unknown as HTMLElement;\n if (typeof window === 'undefined' || typeof webNode.getBoundingClientRect !== 'function') {\n return;\n }\n const rect = webNode.getBoundingClientRect();\n trackRectRef.current = { x: rect.left, y: rect.top, width: rect.width, height: rect.height };\n return;\n }\n if (typeof node.measureInWindow === 'function') {\n node.measureInWindow((x, y, width, height) => {\n trackRectRef.current = { x, y, width, height };\n });\n }\n }, []);\n\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n measure();\n window.addEventListener('resize', measure);\n return () => window.removeEventListener('resize', measure);\n }, [measure]);\n\n const setValues = useCallback(\n (next: number[]) => {\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const commitValues = useCallback(\n (next: number[]) => {\n onValueCommit?.(next);\n },\n [onValueCommit]\n );\n\n // Convert pointer position → value. Returns the value the cursor maps to,\n // honoring orientation, RTL/inverted, and snapping to step.\n const valueFromClient = useCallback(\n (clientX: number, clientY: number): number => {\n const rect = trackRectRef.current;\n if (!rect) {\n return min;\n }\n const len = isVertical ? rect.height : rect.width;\n if (len <= 0) {\n return min;\n }\n const offset = isVertical ? clientY - rect.y : clientX - rect.x;\n let ratio = offset / len;\n ratio = Math.min(1, Math.max(0, ratio));\n // For vertical, the visual top is max (higher = up), so invert.\n if (isVertical) {\n ratio = 1 - ratio;\n }\n if (reversed) {\n ratio = 1 - ratio;\n }\n const raw = min + ratio * (max - min);\n return snap(raw, min, max, step);\n },\n [isVertical, reversed, min, max, step]\n );\n\n // Find the index of the thumb closest to a given value.\n const closestThumbIndex = useCallback(\n (target: number): number => {\n let best = 0;\n let bestDelta = Number.POSITIVE_INFINITY;\n for (let i = 0; i < current.length; i += 1) {\n const cv = current[i];\n if (cv === undefined) {\n continue;\n }\n const delta = Math.abs(cv - target);\n if (delta < bestDelta) {\n best = i;\n bestDelta = delta;\n }\n }\n return best;\n },\n [current]\n );\n\n const draggingRef = useRef<{ index: number; pointerId: number } | null>(null);\n // Auto-publishes drag state to a `<SliderGestureProvider>` ancestor\n // (no-op if none is mounted). Containers that need to disable scroll\n // during a drag read the same context via `useSliderInteractionActive`.\n const gesturePublisher = useSliderGesturePublisher();\n\n const onTrackPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLElement>) => {\n if (disabled) {\n return;\n }\n measure();\n const targetValue = valueFromClient(event.clientX, event.clientY);\n const idx = closestThumbIndex(targetValue);\n const next = updateAt(current, idx, targetValue, gap);\n setValues(next);\n draggingRef.current = { index: idx, pointerId: event.pointerId };\n event.currentTarget.setPointerCapture?.(event.pointerId);\n gesturePublisher.begin();\n onInteractionStart?.();\n },\n [\n disabled,\n measure,\n valueFromClient,\n closestThumbIndex,\n current,\n gap,\n setValues,\n gesturePublisher,\n onInteractionStart,\n ]\n );\n\n const onTrackPointerMove = useCallback(\n (event: ReactPointerEvent<HTMLElement>) => {\n const drag = draggingRef.current;\n if (!drag || drag.pointerId !== event.pointerId) {\n return;\n }\n const targetValue = valueFromClient(event.clientX, event.clientY);\n const next = updateAt(current, drag.index, targetValue, gap);\n setValues(next);\n },\n [valueFromClient, current, gap, setValues]\n );\n\n const onTrackPointerUp = useCallback(\n (event: ReactPointerEvent<HTMLElement>) => {\n const drag = draggingRef.current;\n if (!drag || drag.pointerId !== event.pointerId) {\n return;\n }\n draggingRef.current = null;\n commitValues(current);\n gesturePublisher.end();\n onInteractionEnd?.();\n },\n [commitValues, current, gesturePublisher, onInteractionEnd]\n );\n\n const handleThumbKeyDown = useCallback(\n (index: number) => (event: KeyboardEvent<HTMLElement>) => {\n if (disabled) {\n return;\n }\n const cv = current[index];\n if (cv === undefined) {\n return;\n }\n const range = max - min;\n const big = Math.max(step * 10, range / 10);\n const arrowSign = (key: 'inc' | 'dec') => {\n // Arrow ↑/→ is \"increase\" in default direction; flip for RTL/inverted.\n const base = key === 'inc' ? 1 : -1;\n return reversed ? -base : base;\n };\n let nextValue = cv;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n nextValue = cv + step * arrowSign('inc');\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n nextValue = cv + step * arrowSign('dec');\n break;\n case 'PageUp':\n nextValue = cv + big * arrowSign('inc');\n break;\n case 'PageDown':\n nextValue = cv + big * arrowSign('dec');\n break;\n case 'Home':\n nextValue = min;\n break;\n case 'End':\n nextValue = max;\n break;\n default:\n return;\n }\n event.preventDefault();\n const snapped = snap(nextValue, min, max, step);\n const next = updateAt(current, index, snapped, gap);\n setValues(next);\n commitValues(next);\n },\n [disabled, current, max, min, step, reversed, gap, setValues, commitValues]\n );\n\n // Visual layout. The thumb sits on top of the track at its value's\n // position; the range fills from the lowest thumb to the highest.\n const pctSig = (n: number) => `${Math.round(n * 10000) / 10000}%` as unknown as number;\n const thumbPositionStyle = (val: number): ViewStyle => {\n const ratio = (val - min) / (max - min || 1);\n const offset = pctSig((reversed ? 1 - ratio : ratio) * 100);\n if (isVertical) {\n // Vertical: top=max, bottom=min by default (reverse visual mapping).\n const verticalOffset = pctSig((reversed ? ratio : 1 - ratio) * 100);\n return {\n position: 'absolute',\n top: verticalOffset,\n left: pctSig(50),\n marginLeft: -THUMB_SIZE / 2,\n marginTop: -THUMB_SIZE / 2,\n };\n }\n return {\n position: 'absolute',\n left: offset,\n top: pctSig(50),\n marginLeft: -THUMB_SIZE / 2,\n marginTop: -THUMB_SIZE / 2,\n };\n };\n\n const sortedValues = useMemo(() => current.slice().sort((a, b) => a - b), [current]);\n // Fill behavior:\n // - Single thumb: fill from min → value (matches Radix / shadcn).\n // Without this, a single-thumb slider has no visible fill at all\n // because the start and end of the range are the same value.\n // - Multi thumb: fill from lowest thumb → highest thumb (range region).\n const isSingle = sortedValues.length <= 1;\n const fillStart = isSingle ? min : (sortedValues[0] ?? min);\n const fillEnd = isSingle ? (sortedValues[0] ?? min) : (sortedValues[sortedValues.length - 1] ?? min);\n const startRatio = (fillStart - min) / (max - min || 1);\n const endRatio = (fillEnd - min) / (max - min || 1);\n\n // Casts: RN-Web accepts percentage strings for inset properties, but\n // RN's TS surface (DimensionValue) is narrower. Cast at the boundary.\n // Round to 4 decimals so floating-point noise (`19.999999%`) doesn't\n // bleed into rendered styles.\n const pct = (n: number) => `${Math.round(n * 10000) / 10000}%` as unknown as number;\n const rangeStyle: ViewStyle = isVertical\n ? {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: pct((reversed ? 1 - endRatio : startRatio) * 100),\n top: pct((reversed ? startRatio : 1 - endRatio) * 100),\n backgroundColor: disabled ? colors.color.neutral['400'] : colors.semantic.interactive.primary,\n }\n : {\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: pct((reversed ? 1 - endRatio : startRatio) * 100),\n right: pct((reversed ? startRatio : 1 - endRatio) * 100),\n backgroundColor: disabled ? colors.color.neutral['400'] : colors.semantic.interactive.primary,\n };\n\n const trackStyle: ViewStyle = isVertical\n ? {\n width: TRACK_THICKNESS,\n height: length,\n backgroundColor: colors.semantic.background.subtle,\n borderRadius: TRACK_THICKNESS / 2,\n position: 'relative',\n // No overflow: hidden here — the thumb is a child and we don't\n // want it clipped at the track's edge. The fill below sits in\n // its own absolutely-positioned slot inside the track and\n // already paints within the track's rounded corners thanks to\n // matching borderRadius, so we don't need to clip.\n }\n : {\n height: TRACK_THICKNESS,\n width: '100%',\n backgroundColor: colors.semantic.background.subtle,\n borderRadius: TRACK_THICKNESS / 2,\n position: 'relative',\n // No overflow: hidden here — the thumb is a child and we don't\n // want it clipped at the track's edge. The fill below sits in\n // its own absolutely-positioned slot inside the track and\n // already paints within the track's rounded corners thanks to\n // matching borderRadius, so we don't need to clip.\n };\n\n const containerStyle: ViewStyle = isVertical\n ? {\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n paddingVertical: THUMB_HIT_SLOP,\n paddingHorizontal: THUMB_SIZE,\n opacity: disabled ? 0.5 : 1,\n }\n : {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: THUMB_HIT_SLOP,\n paddingHorizontal: THUMB_SIZE / 2,\n opacity: disabled ? 0.5 : 1,\n };\n\n // Native gesture handlers — claim the responder so a parent ScrollView\n // can't steal the drag, then drive the same value-from-coords logic\n // using `pageX`/`pageY` (window-relative, matches `measureInWindow`).\n const onTrackResponderGrant = useCallback(\n (event: GestureResponderEvent) => {\n if (disabled) {\n return;\n }\n // Re-measure on grant to capture any layout shift that happened\n // between mount and the first touch (e.g. inside an animated\n // ScrollView). Doing it here is cheap and guarantees fresh\n // coords for the upcoming move sequence.\n measure();\n const { pageX, pageY } = event.nativeEvent;\n const targetValue = valueFromClient(pageX, pageY);\n const idx = closestThumbIndex(targetValue);\n const next = updateAt(current, idx, targetValue, gap);\n setValues(next);\n draggingRef.current = { index: idx, pointerId: 0 };\n gesturePublisher.begin();\n onInteractionStart?.();\n },\n [\n disabled,\n measure,\n valueFromClient,\n closestThumbIndex,\n current,\n gap,\n setValues,\n gesturePublisher,\n onInteractionStart,\n ]\n );\n const onTrackResponderMove = useCallback(\n (event: GestureResponderEvent) => {\n if (!draggingRef.current) {\n return;\n }\n const { pageX, pageY } = event.nativeEvent;\n const targetValue = valueFromClient(pageX, pageY);\n const next = updateAt(current, draggingRef.current.index, targetValue, gap);\n setValues(next);\n },\n [valueFromClient, current, gap, setValues]\n );\n const onTrackResponderRelease = useCallback(() => {\n if (!draggingRef.current) {\n return;\n }\n draggingRef.current = null;\n commitValues(current);\n gesturePublisher.end();\n onInteractionEnd?.();\n }, [commitValues, current, gesturePublisher, onInteractionEnd]);\n\n // RN's View doesn't model pointer events in its TS surface; rn-web\n // forwards them. Cast at the spread boundary. Native uses the\n // GestureResponder system so a vertical slider inside a ScrollView\n // still wins the touch — `onMoveShouldSetResponderCapture` claims\n // the gesture before the ScrollView can.\n const trackPointerProps: Record<string, unknown> =\n Platform.OS === 'web'\n ? {\n onPointerDown: onTrackPointerDown,\n onPointerMove: onTrackPointerMove,\n onPointerUp: onTrackPointerUp,\n onPointerCancel: onTrackPointerUp,\n }\n : {\n // Capture variants run BEFORE non-capture handlers and\n // walk root → leaf, so they win the gesture against an\n // ancestor ScrollView whose own `onStartShould` would\n // otherwise claim the touch first. Without these, a\n // vertical slider inside a vertical ScrollView lets the\n // ScrollView swallow the drag.\n onStartShouldSetResponderCapture: () => !disabled,\n onMoveShouldSetResponderCapture: () => !disabled,\n onStartShouldSetResponder: () => !disabled,\n onMoveShouldSetResponder: () => !disabled,\n onResponderGrant: onTrackResponderGrant,\n onResponderMove: onTrackResponderMove,\n onResponderRelease: onTrackResponderRelease,\n onResponderTerminate: onTrackResponderRelease,\n onResponderTerminationRequest: () => false,\n };\n\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n role=\"group\"\n accessibilityRole=\"adjustable\"\n {...(ariaLabel !== undefined ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {})}\n {...(disabled ? { 'aria-disabled': true } : {})}\n className={cn(\n isVertical ? 'flex-col items-center' : 'flex-row items-center',\n disabled ? 'opacity-50' : undefined,\n className\n )}\n style={containerStyle}\n >\n <View\n ref={trackRef}\n onLayout={measure}\n {...trackPointerProps}\n className={cn('relative bg-neutral-200 rounded-full')}\n style={trackStyle}\n >\n {/* Inner clipper holds the range fill so its left/right\n * edges round naturally against the track's borderRadius.\n * The thumbs live OUTSIDE this clipper as direct children\n * of the track, so they aren't truncated to track height. */}\n <View\n pointerEvents=\"none\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: TRACK_THICKNESS / 2,\n overflow: 'hidden',\n }}\n >\n <View style={rangeStyle} />\n </View>\n {current.map((val, index) => {\n const ratio = (val - min) / (max - min || 1);\n const thumbProps: Record<string, unknown> = {\n role: 'slider',\n accessibilityRole: 'adjustable',\n 'aria-valuemin': min,\n 'aria-valuemax': max,\n 'aria-valuenow': val,\n 'aria-orientation': orientation,\n 'aria-label': ariaLabelForThumb?.(index) ?? ariaLabel,\n tabIndex: disabled ? -1 : 0,\n onKeyDown: handleThumbKeyDown(index),\n 'data-thumb-index': index,\n 'data-value': val,\n 'data-ratio': ratio,\n };\n return (\n <View\n // biome-ignore lint/suspicious/noArrayIndexKey: thumb identity IS its index — values preserve order across renders.\n key={`thumb-${index}`}\n {...thumbProps}\n style={[\n thumbPositionStyle(val),\n {\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: colors.semantic.background.elevated,\n borderWidth: 2,\n borderColor: disabled\n ? colors.color.neutral['400']\n : colors.semantic.interactive.primary,\n ...(Platform.OS === 'web'\n ? ({ boxShadow: '0 1px 2px rgba(0,0,0,0.1)' } as ViewStyle)\n : {}),\n },\n ]}\n />\n );\n })}\n </View>\n </View>\n );\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { px } from './chunk-5A2QOOVN.js';
|
|
2
|
-
import { useThemeColors } from './chunk-
|
|
2
|
+
import { useThemeColors } from './chunk-3W2O4OBL.js';
|
|
3
3
|
import { cn } from './chunk-CHXHRJNZ.js';
|
|
4
4
|
import { __name } from './chunk-WCQVDF3K.js';
|
|
5
5
|
import { View, Text } from 'react-native';
|
|
@@ -56,5 +56,5 @@ var Empty = /* @__PURE__ */ __name(({ icon, title, description, action, classNam
|
|
|
56
56
|
}, "Empty");
|
|
57
57
|
|
|
58
58
|
export { Empty };
|
|
59
|
-
//# sourceMappingURL=chunk-
|
|
60
|
-
//# sourceMappingURL=chunk-
|
|
59
|
+
//# sourceMappingURL=chunk-UHAI3QOA.js.map
|
|
60
|
+
//# sourceMappingURL=chunk-UHAI3QOA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Empty/Empty.tsx"],"names":["RNText"],"mappings":";;;;;;;AAoCO,IAAM,KAAA,2BAAS,EAAE,IAAA,EAAM,OAAO,WAAA,EAAa,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAO,KAAkB;AAC1F,EAAA,MAAM,SAAS,cAAA,EAAe;AAE9B,EAAA,MAAM,cAAA,GAA4B;AAAA,IAC9B,aAAA,EAAe,QAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,GAAA,EAAK,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IAC3B,eAAA,EAAiB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IACvC,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC;AAAA,GAC7C;AAEA,EAAA,uBACI,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACI,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,MAC1C,SAAA,EAAW,EAAA,CAAG,sDAAA,EAAwD,SAAS,CAAA;AAAA,MAC/E,KAAA,EAAO,cAAA;AAAA,MAEN,QAAA,EAAA;AAAA,QAAA,IAAA,IAAQ,IAAA,mBAAO,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,EAAE,YAAA,EAAc,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAE,EAAI,gBAAK,CAAA,GAAU,IAAA;AAAA,wBAExF,GAAA;AAAA,UAACA,IAAA;AAAA,UAAA;AAAA,YACG,KAAA,EAAO;AAAA,cACH,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA;AAAA,cAC5B,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,cAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAAA,cAC/B,UAAA,EAAY,OAAO,UAAA,CAAW,QAAA;AAAA,cAC9B,SAAA,EAAW;AAAA,aACf;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACL;AAAA,QAEC,eAAe,IAAA,mBACZ,GAAA;AAAA,UAACA,IAAA;AAAA,UAAA;AAAA,YACG,KAAA,EAAO;AAAA,cACH,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA;AAAA,cAC5B,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,cAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAAA,cAC/B,UAAA,EAAY,GAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA,GAAI,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA;AAAA,cACpE,SAAA,EAAW;AAAA,aACf;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACL,GACA,IAAA;AAAA,QAEH,MAAA,IAAU,IAAA,mBAAO,GAAA,CAAC,IAAA,EAAA,EAAK,OAAO,EAAE,SAAA,EAAW,EAAA,CAAG,MAAA,CAAO,QAAQ,GAAG,CAAC,CAAA,EAAE,EAAI,kBAAO,CAAA,GAAU;AAAA;AAAA;AAAA,GAC7F;AAER,CAAA,EAjDqB,OAAA","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/Empty/Empty.tsx"],"names":["RNText"],"mappings":";;;;;;;AAoCO,IAAM,KAAA,2BAAS,EAAE,IAAA,EAAM,OAAO,WAAA,EAAa,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAO,KAAkB;AAC1F,EAAA,MAAM,SAAS,cAAA,EAAe;AAE9B,EAAA,MAAM,cAAA,GAA4B;AAAA,IAC9B,aAAA,EAAe,QAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,GAAA,EAAK,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IAC3B,eAAA,EAAiB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IACvC,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC;AAAA,GAC7C;AAEA,EAAA,uBACI,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACI,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,MAC1C,SAAA,EAAW,EAAA,CAAG,sDAAA,EAAwD,SAAS,CAAA;AAAA,MAC/E,KAAA,EAAO,cAAA;AAAA,MAEN,QAAA,EAAA;AAAA,QAAA,IAAA,IAAQ,IAAA,mBAAO,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,EAAE,YAAA,EAAc,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAE,EAAI,gBAAK,CAAA,GAAU,IAAA;AAAA,wBAExF,GAAA;AAAA,UAACA,IAAA;AAAA,UAAA;AAAA,YACG,KAAA,EAAO;AAAA,cACH,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA;AAAA,cAC5B,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,cAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAAA,cAC/B,UAAA,EAAY,OAAO,UAAA,CAAW,QAAA;AAAA,cAC9B,SAAA,EAAW;AAAA,aACf;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACL;AAAA,QAEC,eAAe,IAAA,mBACZ,GAAA;AAAA,UAACA,IAAA;AAAA,UAAA;AAAA,YACG,KAAA,EAAO;AAAA,cACH,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA;AAAA,cAC5B,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,cAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAAA,cAC/B,UAAA,EAAY,GAAG,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA,GAAI,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA;AAAA,cACpE,SAAA,EAAW;AAAA,aACf;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACL,GACA,IAAA;AAAA,QAEH,MAAA,IAAU,IAAA,mBAAO,GAAA,CAAC,IAAA,EAAA,EAAK,OAAO,EAAE,SAAA,EAAW,EAAA,CAAG,MAAA,CAAO,QAAQ,GAAG,CAAC,CAAA,EAAE,EAAI,kBAAO,CAAA,GAAU;AAAA;AAAA;AAAA,GAC7F;AAER,CAAA,EAjDqB,OAAA","file":"chunk-UHAI3QOA.js","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Text as RNText, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type EmptyProps = {\n /** Optional icon or illustration rendered above the title. */\n icon?: ReactNode;\n /** Required heading text. */\n title: string;\n /** Optional secondary description below the title. */\n description?: string;\n /** Optional action slot — typically a `<Button>`. */\n action?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Empty-state container for zero-results views, onboarding prompts, and error\n * placeholders. Renders a centered column: optional icon → title → optional\n * description → optional action.\n *\n * ```tsx\n * <Empty\n * icon={<MyIcon size={48} />}\n * title=\"No results found\"\n * description=\"Try adjusting your search or filters.\"\n * action={<Button onPress={onReset}>Clear filters</Button>}\n * />\n * ```\n */\nexport const Empty = ({ icon, title, description, action, className, testID }: EmptyProps) => {\n const colors = useThemeColors();\n\n const containerStyle: ViewStyle = {\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: px(colors.spacing['3']),\n paddingVertical: px(colors.spacing['8']),\n paddingHorizontal: px(colors.spacing['4']),\n };\n\n return (\n <View\n {...(testID !== undefined ? { testID } : {})}\n className={cn('flex-col items-center justify-center gap-3 py-8 px-4', className)}\n style={containerStyle}\n >\n {icon != null ? <View style={{ marginBottom: px(colors.spacing['1']) }}>{icon}</View> : null}\n\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n fontWeight: colors.fontWeight.semibold as '600',\n textAlign: 'center',\n }}\n >\n {title}\n </RNText>\n\n {description != null ? (\n <RNText\n style={{\n color: colors.semantic.text.muted,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.sm),\n lineHeight: px(colors.fontSize.sm) * Number(colors.lineHeight.normal),\n textAlign: 'center',\n }}\n >\n {description}\n </RNText>\n ) : null}\n\n {action != null ? <View style={{ marginTop: px(colors.spacing['1']) }}>{action}</View> : null}\n </View>\n );\n};\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Dialog } from './chunk-
|
|
1
|
+
import { Dialog } from './chunk-WEHUVESG.js';
|
|
2
2
|
import { px } from './chunk-5A2QOOVN.js';
|
|
3
|
-
import { useThemeColors } from './chunk-
|
|
3
|
+
import { useThemeColors } from './chunk-3W2O4OBL.js';
|
|
4
4
|
import { cn } from './chunk-CHXHRJNZ.js';
|
|
5
5
|
import { __name } from './chunk-WCQVDF3K.js';
|
|
6
6
|
import { createContext, useContext, isValidElement, Children, useState, useCallback, useEffect, useId, cloneElement, useRef } from 'react';
|
|
@@ -491,5 +491,5 @@ var Command = Object.assign(CommandRoot, {
|
|
|
491
491
|
});
|
|
492
492
|
|
|
493
493
|
export { Command, useCommandContext };
|
|
494
|
-
//# sourceMappingURL=chunk-
|
|
495
|
-
//# sourceMappingURL=chunk-
|
|
494
|
+
//# sourceMappingURL=chunk-UHHW7GZ4.js.map
|
|
495
|
+
//# sourceMappingURL=chunk-UHHW7GZ4.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Command/Command.tsx"],"names":["RNTextInput","RNText"],"mappings":";;;;;;;;;AA2DA,IAAM,cAAA,GAAiB,cAA0C,IAAI,CAAA;AAErE,SAAS,kBAAkB,MAAA,EAAqC;AAC5D,EAAA,MAAM,GAAA,GAAM,WAAW,cAAc,CAAA;AACrC,EAAA,IAAI,CAAC,GAAA,EAAK;AACN,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,CAAA,EAAI,MAAM,CAAA,oCAAA,CAAsC,CAAA;AAAA,EACpE;AACA,EAAA,OAAO,GAAA;AACX;AANS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AA0BT,IAAM,WAAA,2BAAe,EAAE,IAAA,EAAM,cAAc,KAAA,EAAO,YAAA,EAAc,UAAS,KAAoB;AACzF,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAkB,WAAW,CAAA;AACvD,EAAA,MAAM,eAAe,IAAA,KAAS,MAAA;AAC9B,EAAA,MAAM,OAAA,GAAU,eAAgB,IAAA,GAAmB,KAAA;AACnD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,EAAE,CAAA;AAErC,EAAA,MAAM,OAAA,GAAU,WAAA;AAAA,IACZ,CAAC,IAAA,KAAkB;AACf,MAAA,IAAI,CAAC,YAAA,EAAc;AACf,QAAA,QAAA,CAAS,IAAI,CAAA;AAAA,MACjB;AACA,MAAA,IAAI,CAAC,IAAA,EAAM;AAEP,QAAA,QAAA,CAAS,EAAE,CAAA;AAAA,MACf;AACA,MAAA,YAAA,GAAe,IAAI,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,CAAC,cAAc,YAAY;AAAA,GAC/B;AAGA,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,OAAA,2BAAW,CAAA,KAAqB;AAClC,MAAA,IAAA,CAAK,EAAE,OAAA,IAAW,CAAA,CAAE,OAAA,KAAY,CAAA,CAAE,QAAQ,GAAA,EAAK;AAC3C,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,OAAA,CAAQ,CAAC,OAAO,CAAA;AAAA,MACpB;AAAA,IACJ,CAAA,EALgB,SAAA,CAAA;AAMhB,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,OAAO,CAAA;AAC1C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,OAAO,CAAA;AAAA,EAC9D,CAAA,EAAG,CAAC,OAAA,EAAS,OAAO,CAAC,CAAA;AAErB,EAAA,MAAM,QAAA,GAAgC;AAAA,IAClC,IAAA,EAAM,OAAA;AAAA,IACN,OAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACJ;AAEA,EAAA,2BAAQ,cAAA,CAAe,QAAA,EAAf,EAAwB,KAAA,EAAO,UAAW,QAAA,EAAS,CAAA;AAC/D,CAAA,EA3CoB,aAAA,CAAA;AA2DpB,IAAM,iCAAiB,MAAA,CAAA,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,QAAO,KAA2B;AAC7E,EAAA,MAAM,GAAA,GAAM,kBAAkB,iBAAiB,CAAA;AAE/C,EAAA,MAAM,IAAA,mBAAO,MAAA,CAAA,MAAM,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA,EAAtB,MAAA,CAAA;AAEb,EAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,IAAA,IAAI,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC1B,MAAA,MAAM,KAAA,GAAQ,QAAA;AAMd,MAAA,MAAM,eAAA,GAAkB,MAAM,KAAA,CAAM,OAAA;AACpC,MAAA,MAAM,eAAA,GAAkB,MAAM,KAAA,CAAM,OAAA;AACpC,MAAA,MAAM,IAAA,2BAAQ,CAAA,KAAe;AACzB,QAAA,eAAA,GAAkB,CAAC,CAAA;AACnB,QAAA,eAAA,GAAkB,CAAC,CAAA;AACnB,QAAA,IAAA,EAAK;AAAA,MACT,CAAA,EAJa,MAAA,CAAA;AAQb,MAAA,MAAM,UAAA,GAAsC;AAAA,QACxC,OAAA,EAAS,IAAA;AAAA,QACT,eAAA,EAAiB,QAAA;AAAA,QACjB,eAAA,EAAiB,GAAA,CAAI,IAAA,GAAO,MAAA,GAAS;AAAA,OACzC;AACA,MAAA,IAAI,oBAAoB,MAAA,EAAW;AAC/B,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACzB;AACA,MAAA,OAAO,YAAA,CAAa,OAAO,UAAgD,CAAA;AAAA,IAC/E;AACA,IAAA,uBACI,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACG,IAAA,EAAK,QAAA;AAAA,QACL,aAAA,EAAa,MAAA;AAAA,QACb,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,SAAS,CAAA;AAAA,QAC/C,eAAA,EAAc,QAAA;AAAA,QACd,iBAAe,GAAA,CAAI,IAAA;AAAA,QACnB,OAAA,EAAS,IAAA;AAAA,QAER;AAAA;AAAA,KACL;AAAA,EAER;AAGA,EAAA,2BACK,SAAA,EAAA,EAAU,MAAA,EAAgB,SAAS,IAAA,EAAM,iBAAA,EAAkB,UACvD,QAAA,EACL,CAAA;AAER,CAAA,EArDuB,gBAAA,CAAA;AAyEvB,IAAM,qCAAqB,MAAA,CAAA,CAAC;AAAA,EACxB,WAAA,GAAc,gCAAA;AAAA,EACd,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACJ,CAAA,KAA0B;AACtB,EAAA,MAAM,GAAA,GAAM,kBAAkB,gBAAgB,CAAA;AAC9C,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,QAAA,GAAW,OAAgC,IAAI,CAAA;AAGrD,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,CAAC,IAAI,IAAA,EAAM;AACX,MAAA;AAAA,IACJ;AACA,IAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,KAAK,UAAA,CAAW,MAAM,SAAS,OAAA,EAAS,KAAA,IAAS,EAAE,CAAA;AACzD,IAAA,OAAO,MAAM,aAAa,EAAE,CAAA;AAAA,EAChC,CAAA,EAAG,CAAC,GAAA,CAAI,IAAI,CAAC,CAAA;AAEb,EAAA,MAAM,eACF,MAAA,KAAW,MAAA,GACL,EAAE,MAAA,EAAQ,WAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,KACxD,EAAE,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAE;AAE5D,EAAA,2BACK,MAAA,EAAA,EAAO,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,cAAc,GAAA,CAAI,OAAA,EACtC,QAAA,kBAAA,GAAA,CAAC,MAAA,CAAO,SAAP,EAAgB,GAAG,YAAA,EACf,QAAA,EAAA,QAAA,CAAS,OAAO,KAAA,mBACb,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,KAAA,EAAO;AAAA,QACH,SAAA,EAAW,MAAA;AAAA,QACX,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,QAAA,EAAU,QAAA;AAAA,QACV,QAAA,EAAU;AAAA,OACd;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAA,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACG,KAAA,EAAO;AAAA,cACH,OAAA,EAAS,CAAA,EAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,cACxD,YAAA,EAAc,CAAA,UAAA,EAAa,MAAA,CAAO,QAAA,CAAS,OAAO,OAAO,CAAA,CAAA;AAAA,cACzD,OAAA,EAAS,MAAA;AAAA,cACT,UAAA,EAAY,QAAA;AAAA,cACZ,GAAA,EAAK,MAAA,CAAO,OAAA,CAAQ,GAAG;AAAA,aAC3B;AAAA,YAGA,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACG,KAAA,EAAM,IAAA;AAAA,kBACN,MAAA,EAAO,IAAA;AAAA,kBACP,OAAA,EAAQ,WAAA;AAAA,kBACR,IAAA,EAAK,MAAA;AAAA,kBACL,aAAA,EAAY,MAAA;AAAA,kBACZ,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,CAAO,SAAS,IAAA,CAAK,KAAA,EAAO,YAAY,CAAA,EAAE;AAAA,kBAE1D,QAAA,kBAAA,GAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACG,CAAA,EAAE,yDAAA;AAAA,sBACF,MAAA,EAAO,cAAA;AAAA,sBACP,WAAA,EAAY,KAAA;AAAA,sBACZ,aAAA,EAAc,OAAA;AAAA,sBACd,cAAA,EAAe;AAAA;AAAA;AACnB;AAAA,eACJ;AAAA,8BACA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACG,GAAA,EAAK,QAAA;AAAA,kBACL,IAAA,EAAK,MAAA;AAAA,kBACL,IAAA,EAAK,UAAA;AAAA,kBACL,eAAA,EAAe,IAAA;AAAA,kBACf,mBAAA,EAAkB,MAAA;AAAA,kBAClB,YAAA,EAAa,KAAA;AAAA,kBACb,UAAA,EAAY,KAAA;AAAA,kBACZ,WAAA;AAAA,kBACA,OAAO,GAAA,CAAI,KAAA;AAAA,kBACX,UAAU,CAAC,CAAA,KAAM,IAAI,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,kBAC5C,KAAA,EACI;AAAA,oBACI,IAAA,EAAM,CAAA;AAAA,oBACN,QAAA,EAAU,EAAA;AAAA,oBACV,UAAA,EAAY,aAAA;AAAA,oBACZ,MAAA,EAAQ,MAAA;AAAA,oBACR,OAAA,EAAS,MAAA;AAAA,oBACT,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA;AAAA,oBAC5B,KAAA,EAAO;AAAA;AACX;AAAA;AAER;AAAA;AAAA,SACJ;AAAA,wBAEA,GAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,SAAA,EAAU,KAAA,EAAO,EAAE,SAAA,EAAW,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAG,SAAA,EAAW,GAAA,IAC/D,QAAA,EACL;AAAA;AAAA;AAAA,sBAGJ,IAAA,CAAC,IAAA,EAAA,EAAK,OAAO,EAAE,IAAA,EAAM,GAAE,EACnB,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAACA,SAAA;AAAA,MAAA;AAAA,QACG,WAAA;AAAA,QACA,oBAAA,EAAsB,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA;AAAA,QAC3C,OAAO,GAAA,CAAI,KAAA;AAAA,QACX,cAAc,GAAA,CAAI,QAAA;AAAA,QAClB,WAAW,GAAA,CAAI,IAAA;AAAA,QACf,KAAA,EAAO;AAAA,UACH,QAAA,EAAU,EAAA;AAAA,UACV,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA;AAAA,UAC5B,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,UACzC,eAAA,EAAiB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,UACvC,iBAAA,EAAmB,CAAA;AAAA,UACnB,iBAAA,EAAmB,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO;AAAA;AAC9C;AAAA,KACJ;AAAA,wBACC,UAAA,EAAA,EAAW,KAAA,EAAO,EAAE,SAAA,EAAW,GAAA,IAAQ,QAAA,EAAS;AAAA,GAAA,EACrD,GAER,CAAA,EACJ,CAAA;AAER,CAAA,EAvH2B,oBAAA,CAAA;AAsI3B,IAAM,+BAAe,MAAA,CAAA,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,QAAO,KAAyB;AACzE,EAAA,MAAM,SAAS,cAAA,EAAe;AAE9B,EAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,IAAA,uBACI,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,aAAA,EAAa,MAAA;AAAA,QACb,IAAA,EAAK,QAAA;AAAA,QACL,WAAA,EAAU,QAAA;AAAA,QACV,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,SAAS,CAAA;AAAA,QAC7C,KAAA,EACI;AAAA,UACI,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,UAC9B,aAAA,EAAe,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,UACjC,WAAA,EAAa,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,UAC/B,YAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,UAChC,SAAA,EAAW,QAAA;AAAA,UACX,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA;AAAA,UAC5B,QAAA,EAAU;AAAA,SACd;AAAA,QAGH;AAAA;AAAA,KACL;AAAA,EAER;AACA,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,MAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACH,eAAA,EAAiB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QACvC,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QACzC,UAAA,EAAY;AAAA,OAChB;AAAA,MAEA,8BAACC,IAAA,EAAA,EAAO,KAAA,EAAO,EAAE,KAAA,EAAO,OAAO,QAAA,CAAS,IAAA,CAAK,KAAA,EAAO,QAAA,EAAU,IAAG,EAC5D,QAAA,EAAA,OAAO,QAAA,KAAa,QAAA,GAAW,WAAW,mBAAA,EAC/C;AAAA;AAAA,GACJ;AAER,CAAA,EAxCqB,cAAA,CAAA;AA0DrB,IAAM,+BAAe,MAAA,CAAA,CAAC,EAAE,SAAS,QAAA,EAAU,SAAA,EAAW,QAAO,KAAyB;AAClF,EAAA,MAAM,GAAA,GAAM,kBAAkB,eAAe,CAAA;AAC7C,EAAA,MAAM,UAAU,KAAA,EAAM;AACtB,EAAA,MAAM,SAAS,cAAA,EAAe;AAE9B,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,QAAA,EAAU,GAAA,CAAI,KAAK,CAAA;AAE1D,EAAA,IAAI,iBAAiB,CAAA,EAAG;AACpB,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,IAAA,uBACI,IAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACG,aAAA,EAAa,MAAA;AAAA,QACb,iBAAA,EAAiB,OAAA,GAAU,CAAA,EAAG,OAAO,CAAA,QAAA,CAAA,GAAa,MAAA;AAAA,QAClD,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,SAAS,CAAA;AAAA,QAE5C,QAAA,EAAA;AAAA,UAAA,OAAA,oBACG,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACG,EAAA,EAAI,GAAG,OAAO,CAAA,QAAA,CAAA;AAAA,cACd,KAAA,EACI;AAAA,gBACI,OAAA,EAAS,CAAA,EAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,gBACjF,QAAA,EAAU,EAAA;AAAA,gBACV,UAAA,EAAY,GAAA;AAAA,gBACZ,aAAA,EAAe,QAAA;AAAA,gBACf,aAAA,EAAe,WAAA;AAAA,gBACf,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK;AAAA,eAChC;AAAA,cAGH,QAAA,EAAA;AAAA;AAAA,WACL;AAAA,0BAEJ,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,aAAA,EAAe,OAAO,OAAA,CAAQ,GAAG,CAAA,EAAE,EAAI,QAAA,EAAS;AAAA;AAAA;AAAA,KAClE;AAAA,EAER;AAEA,EAAA,uBACI,IAAA,CAAC,QAAK,MAAA,EACD,QAAA,EAAA;AAAA,IAAA,OAAA,oBACG,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,KAAA,EAAO;AAAA,UACH,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,UACzC,UAAA,EAAY,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,UAClC,aAAA,EAAe,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC;AAAA,SACzC;AAAA,QAEA,QAAA,kBAAA,GAAA;AAAA,UAACA,IAAA;AAAA,UAAA;AAAA,YACG,KAAA,EAAO;AAAA,cACH,QAAA,EAAU,EAAA;AAAA,cACV,UAAA,EAAY,KAAA;AAAA,cACZ,aAAA,EAAe,WAAA;AAAA,cACf,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA;AAAA,cAC5B,aAAA,EAAe;AAAA,aACnB;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA;AACL;AAAA,KACJ;AAAA,IAEH;AAAA,GAAA,EACL,CAAA;AAER,CAAA,EAlEqB,cAAA,CAAA;AAsFrB,IAAM,WAAA,2BAAe,EAAE,QAAA,EAAU,WAAW,KAAA,EAAO,QAAA,EAAU,SAAA,EAAW,MAAA,EAAO,KAAwB;AACnG,EAAA,MAAM,GAAA,GAAM,kBAAkB,cAAc,CAAA;AAC5C,EAAA,MAAM,SAAS,cAAA,EAAe;AAE9B,EAAA,MAAM,IAAA,GAAO,YAAY,QAAQ,CAAA;AACjC,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,IAAA,EAAM,GAAA,CAAI,KAAK,CAAA;AAE5C,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,MAAM,+BAAe,MAAA,CAAA,MAAM;AACvB,IAAA,IAAI,QAAA,EAAU;AACV,MAAA;AAAA,IACJ;AACA,IAAA,QAAA,IAAW;AACX,IAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AAAA,EACrB,CAAA,EANqB,cAAA,CAAA;AAQrB,EAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,IAAA,uBACI,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,aAAA,EAAa,MAAA;AAAA,QACb,IAAA,EAAK,QAAA;AAAA,QACL,eAAA,EAAc,OAAA;AAAA,QACd,eAAA,EAAe,QAAA;AAAA,QACf,QAAA,EAAU,WAAW,EAAA,GAAK,CAAA;AAAA,QAC1B,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,SAAS,CAAA;AAAA,QAC5C,OAAA,EAAS,YAAA;AAAA,QACT,SAAA,EAAW,CAAC,CAAA,KAAM;AACd,UAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACnB,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,YAAA,EAAa;AAAA,UACjB;AAAA,QACJ,CAAA;AAAA,QACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACjB,UAAA,IAAI,CAAC,QAAA,EAAU;AACX,YAAC,CAAA,CAAE,cAA8B,KAAA,CAAM,UAAA,GAAa,GAAG,MAAA,CAAO,QAAA,CAAS,YAAY,OAAO,CAAA,EAAA,CAAA;AAAA,UAC9F;AAAA,QACJ,CAAA;AAAA,QACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACjB,UAAC,CAAA,CAAE,aAAA,CAA8B,KAAA,CAAM,UAAA,GAAa,aAAA;AAAA,QACxD,CAAA;AAAA,QACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACZ,UAAA,IAAI,CAAC,QAAA,EAAU;AACX,YAAC,CAAA,CAAE,cAA8B,KAAA,CAAM,UAAA,GAAa,GAAG,MAAA,CAAO,QAAA,CAAS,YAAY,OAAO,CAAA,EAAA,CAAA;AAAA,UAC9F;AAAA,QACJ,CAAA;AAAA,QACA,MAAA,EAAQ,CAAC,CAAA,KAAM;AACX,UAAC,CAAA,CAAE,aAAA,CAA8B,KAAA,CAAM,UAAA,GAAa,aAAA;AAAA,QACxD,CAAA;AAAA,QACA,KAAA,EACI;AAAA,UACI,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,eAAA;AAAA,UAChB,OAAA,EAAS,CAAA,EAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,UACxD,MAAA,EAAQ,WAAW,aAAA,GAAgB,SAAA;AAAA,UACnC,OAAA,EAAS,WAAW,GAAA,GAAM,CAAA;AAAA,UAC1B,QAAA,EAAU,EAAA;AAAA,UACV,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA;AAAA,UAC5B,YAAA,EAAc,OAAO,MAAA,CAAO,EAAA;AAAA,UAC5B,MAAA,EAAQ,CAAA,EAAA,EAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,UAChC,OAAA,EAAS;AAAA,SACb;AAAA,QAGH;AAAA;AAAA,KACL;AAAA,EAER;AAEA,EAAA,uBACI,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACG,MAAA;AAAA,MACA,OAAA,EAAS,YAAA;AAAA,MACT,QAAA;AAAA,MACA,iBAAA,EAAkB,QAAA;AAAA,MAClB,KAAA,EAAO,CAAC,EAAE,OAAA,EAAQ,MAA6B;AAAA,QAC3C,aAAA,EAAe,KAAA;AAAA,QACf,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,eAAA;AAAA,QAChB,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QACzC,eAAA,EAAiB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QACvC,OAAA,EAAS,QAAA,GAAW,GAAA,GAAM,OAAA,GAAU,GAAA,GAAM;AAAA,OAC9C,CAAA;AAAA,MAEC,iBAAO,QAAA,KAAa,QAAA,mBACjB,GAAA,CAACA,IAAA,EAAA,EAAO,OAAO,EAAE,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,OAAO,QAAA,CAAS,IAAA,CAAK,OAAA,EAAQ,EAAI,UAAS,CAAA,GAEhF;AAAA;AAAA,GAER;AAER,CAAA,EA9FoB,aAAA,CAAA;AA4GpB,IAAM,eAAA,mBAAkB,MAAA,CAAA,CAAC,EAAE,QAAA,EAAU,WAAU,KAA4B;AACvE,EAAA,MAAM,SAAS,cAAA,EAAe;AAE9B,EAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,IAAA,uBACI,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACG,aAAA,EAAY,MAAA;AAAA,QACZ,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA;AAAA,QAChD,KAAA,EAAO;AAAA,UACH,UAAA,EAAY,MAAA;AAAA,UACZ,QAAA,EAAU,EAAA;AAAA,UACV,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA;AAAA,UAC5B,aAAA,EAAe,QAAA;AAAA,UACf,OAAA,EAAS;AAAA,SACb;AAAA,QAEC;AAAA;AAAA,KACL;AAAA,EAER;AAEA,EAAA,uBACI,GAAA;AAAA,IAACA,IAAA;AAAA,IAAA;AAAA,MACG,KAAA,EAAO;AAAA,QACH,QAAA,EAAU,EAAA;AAAA,QACV,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA;AAAA,QAC5B,OAAA,EAAS;AAAA,OACb;AAAA,MAEC,QAAA,EAAA,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,GAAW;AAAA;AAAA,GAC/C;AAER,CAAA,EAhCwB,iBAAA,CAAA;AAuCxB,SAAS,YAAY,IAAA,EAAyB;AAC1C,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,SAAS,QAAA,EAAU;AACtD,IAAA,OAAO,OAAO,IAAI,CAAA;AAAA,EACtB;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACrB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,WAAW,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,cAAA,CAAe,IAAI,CAAA,EAAG;AACtB,IAAA,MAAM,EAAA,GAAK,IAAA;AACX,IAAA,OAAO,WAAA,CAAY,EAAA,CAAG,KAAA,CAAM,QAAQ,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,EAAA;AACX;AAZS,MAAA,CAAA,WAAA,EAAA,aAAA,CAAA;AAeT,SAAS,YAAA,CAAa,MAAc,KAAA,EAAwB;AACxD,EAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAK,EAAG;AACf,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,IAAA,CAAK,aAAY,CAAE,QAAA,CAAS,MAAM,WAAA,EAAY,CAAE,MAAM,CAAA;AACjE;AALS,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAWT,SAAS,iBAAA,CAAkB,UAAqB,KAAA,EAAuB;AACnE,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,CAAC,KAAA,KAAU;AAClC,IAAA,IAAI,CAAC,cAAA,CAAe,KAAK,CAAA,EAAG;AACxB,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AAEpB,IAAA,IAAI,UAAA,IAAc,KAAA,IAAS,EAAE,SAAA,IAAa,KAAA,CAAA,EAAQ;AAC9C,MAAA,MAAM,IAAA,GAAO,WAAA,CAAY,KAAA,CAAM,QAAqB,CAAA;AACpD,MAAA,IAAI,YAAA,CAAa,IAAA,EAAM,KAAK,CAAA,EAAG;AAC3B,QAAA,KAAA,EAAA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ,CAAC,CAAA;AACD,EAAA,OAAO,KAAA;AACX;AAhBS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AA0BT,IAAM,oBAAA,2BAAwB,KAAA,KAA8B;AACxD,EAAA,MAAM,GAAA,GAAM,kBAAkB,gBAAgB,CAAA;AAC9C,EAAA,MAAM,EAAE,QAAA,EAAU,GAAG,IAAA,EAAK,GAAI,KAAA;AAE9B,EAAA,IAAI,UAAA,GAAa,KAAA;AACjB,EAAA,IAAI,SAAA,GAAuB,IAAA;AAE3B,EAAA,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,CAAC,KAAA,KAAU;AAClC,IAAA,IAAI,CAAC,cAAA,CAAe,KAAK,CAAA,EAAG;AACxB,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,aAAa,KAAA,CAAM,KAAA;AAGzB,IAAA,IAAI,EAAE,aAAa,UAAA,CAAA,IAAe,EAAE,cAAc,UAAA,CAAA,IAAe,EAAE,UAAU,UAAA,CAAA,EAAa;AACtF,MAAA,SAAA,GAAY,KAAA;AACZ,MAAA;AAAA,IACJ;AAGA,IAAA,MAAM,gBAAgB,UAAA,CAAW,QAAA;AACjC,IAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,aAAA,EAAe,GAAA,CAAI,KAAK,CAAA;AACxD,IAAA,IAAI,QAAQ,CAAA,EAAG;AACX,MAAA,UAAA,GAAa,IAAA;AAAA,IACjB;AAAA,EACJ,CAAC,CAAA;AAED,EAAA,uBACI,GAAA,CAAC,kBAAA,EAAA,EAAoB,GAAG,IAAA,EACnB,QAAA,EAAA,UAAA,GAAa,WAAY,SAAA,oBAAa,GAAA,CAAC,YAAA,EAAA,EAAa,QAAA,EAAA,mBAAA,EAAiB,CAAA,EAC1E,CAAA;AAER,CAAA,EAhC6B,sBAAA,CAAA;AA6DtB,IAAM,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa;AAAA,EAC9C,OAAA,EAAS,cAAA;AAAA,EACT,MAAA,EAAQ,oBAAA;AAAA,EACR,KAAA,EAAO,YAAA;AAAA,EACP,KAAA,EAAO,YAAA;AAAA,EACP,IAAA,EAAM,WAAA;AAAA,EACN,QAAA,EAAU;AACd,CAAC","file":"chunk-OHWRTHGL.js","sourcesContent":["'use client';\n\n/**\n * Command — cmdk-style command palette (compound component).\n *\n * Anatomy:\n * Command Root — owns open state and filter query.\n * Command.Trigger Element that opens the palette. Default asChild.\n * Command.Dialog The modal surface (search input + item list).\n * Command.Empty Shown when no items match the current query.\n * Command.Group Labelled section of items.\n * Command.Item Selectable action/navigation entry.\n * Command.Shortcut Inline keyboard shortcut hint (right-aligned).\n *\n * Web behaviour:\n * - Global ⌘K / Ctrl+K shortcut opens the palette.\n * - Search input filters items by substring (case-insensitive).\n * - Escape closes (inherited from Dialog).\n *\n * Native behaviour:\n * - Trigger tap opens the palette (no global keyboard shortcut).\n * - Same filtering logic; scrollable list.\n *\n * Implementation note:\n * Reuses the Dialog primitive as the modal surface so we inherit focus\n * trap, scroll lock, backdrop blur, and Escape-to-close for free.\n */\n\nimport {\n Children,\n cloneElement,\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { Platform, Pressable, Text as RNText, TextInput as RNTextInput, ScrollView, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport { Dialog } from '../Dialog/Dialog';\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ntype CommandContextValue = {\n open: boolean;\n setOpen: (next: boolean) => void;\n query: string;\n setQuery: (q: string) => void;\n};\n\nconst CommandContext = createContext<CommandContextValue | null>(null);\n\nfunction useCommandContext(caller: string): CommandContextValue {\n const ctx = useContext(CommandContext);\n if (!ctx) {\n throw new Error(`<${caller}> must be rendered inside <Command>.`);\n }\n return ctx;\n}\n\n// ---------------------------------------------------------------------------\n// Root\n// ---------------------------------------------------------------------------\n\nexport type CommandProps = {\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires with the new open state. */\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n};\n\n/**\n * Root of the Command compound. Owns open state and filter query.\n * Registers the global ⌘K / Ctrl+K shortcut on web.\n */\nconst CommandRoot = ({ open, defaultOpen = false, onOpenChange, children }: CommandProps) => {\n const [inner, setInner] = useState<boolean>(defaultOpen);\n const isControlled = open !== undefined;\n const current = isControlled ? (open as boolean) : inner;\n const [query, setQuery] = useState('');\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setInner(next);\n }\n if (!next) {\n // Reset query on close so the palette starts fresh next time.\n setQuery('');\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n // Global ⌘K / Ctrl+K on web only\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n const handler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault();\n setOpen(!current);\n }\n };\n window.addEventListener('keydown', handler);\n return () => window.removeEventListener('keydown', handler);\n }, [current, setOpen]);\n\n const ctxValue: CommandContextValue = {\n open: current,\n setOpen,\n query,\n setQuery,\n };\n\n return <CommandContext.Provider value={ctxValue}>{children}</CommandContext.Provider>;\n};\n\n// ---------------------------------------------------------------------------\n// Trigger\n// ---------------------------------------------------------------------------\n\nexport type CommandTriggerProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Element that opens the command palette when activated.\n * On web it also receives aria-haspopup=\"dialog\" and aria-expanded.\n */\nconst CommandTrigger = ({ children, className, testID }: CommandTriggerProps) => {\n const ctx = useCommandContext('Command.Trigger');\n\n const open = () => ctx.setOpen(true);\n\n if (Platform.OS === 'web') {\n if (isValidElement(children)) {\n const child = children as ReactElement<{\n onClick?: (e: unknown) => void;\n onPress?: (e: unknown) => void;\n 'aria-haspopup'?: string;\n 'aria-expanded'?: string | boolean;\n }>;\n const existingOnClick = child.props.onClick;\n const existingOnPress = child.props.onPress;\n const fire = (e: unknown) => {\n existingOnClick?.(e);\n existingOnPress?.(e);\n open();\n };\n // Only forward onPress if the child already has it (i.e. it's a RN\n // Pressable-style element). Plain HTML elements (button, a, etc.)\n // don't have onPress and React DOM warns when it receives it.\n const extraProps: Record<string, unknown> = {\n onClick: fire,\n 'aria-haspopup': 'dialog',\n 'aria-expanded': ctx.open ? 'true' : 'false',\n };\n if (existingOnPress !== undefined) {\n extraProps.onPress = fire;\n }\n return cloneElement(child, extraProps as Parameters<typeof cloneElement>[1]);\n }\n return (\n <button\n type=\"button\"\n data-testid={testID}\n className={cn('nori-command-trigger', className)}\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n onClick={open}\n >\n {children}\n </button>\n );\n }\n\n // Native\n return (\n <Pressable testID={testID} onPress={open} accessibilityRole=\"button\">\n {children}\n </Pressable>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Dialog (modal surface)\n// ---------------------------------------------------------------------------\n\nexport type CommandDialogProps = {\n /** Placeholder text for the search input. @defaultValue 'Type a command or search…' */\n placeholder?: string;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * The modal surface of the command palette.\n *\n * Wraps Dialog.Content and adds a search TextInput above the item list.\n * Children are typically Command.Empty and Command.Group elements.\n */\nconst CommandDialogInner = ({\n placeholder = 'Type a command or search…',\n children,\n className,\n testID,\n}: CommandDialogProps) => {\n const ctx = useCommandContext('Command.Dialog');\n const colors = useThemeColors();\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n // Auto-focus search input when the dialog opens\n useEffect(() => {\n if (!ctx.open) {\n return;\n }\n if (Platform.OS !== 'web') {\n return;\n }\n const id = setTimeout(() => inputRef.current?.focus(), 50);\n return () => clearTimeout(id);\n }, [ctx.open]);\n\n const contentProps =\n testID !== undefined\n ? { testID, className: cn('nori-command-dialog', className) }\n : { className: cn('nori-command-dialog', className) };\n\n return (\n <Dialog open={ctx.open} onOpenChange={ctx.setOpen}>\n <Dialog.Content {...contentProps}>\n {Platform.OS === 'web' ? (\n <div\n style={{\n maxHeight: '80vh',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n minWidth: 360,\n }}\n >\n {/* Search bar */}\n <div\n style={{\n padding: `${colors.spacing['3']}px ${colors.spacing['4']}px`,\n borderBottom: `1px solid ${colors.semantic.border.default}`,\n display: 'flex',\n alignItems: 'center',\n gap: colors.spacing['2'],\n }}\n >\n {/* Magnifier icon — inline SVG; no extra dep */}\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={{ color: colors.semantic.text.muted, flexShrink: 0 }}\n >\n <path\n d=\"M6.5 11a4.5 4.5 0 1 0 0-9 4.5 4.5 0 0 0 0 9ZM14 14l-3-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <input\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={true}\n aria-autocomplete=\"list\"\n autoComplete=\"off\"\n spellCheck={false}\n placeholder={placeholder}\n value={ctx.query}\n onChange={(e) => ctx.setQuery(e.target.value)}\n style={\n {\n flex: 1,\n fontSize: 15,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n color: colors.semantic.text.default,\n width: '100%',\n } as React.CSSProperties\n }\n />\n </div>\n {/* Items list */}\n <div role=\"listbox\" style={{ overflowY: 'auto', flex: 1, maxHeight: 400 }}>\n {children}\n </div>\n </div>\n ) : (\n <View style={{ flex: 1 }}>\n <RNTextInput\n placeholder={placeholder}\n placeholderTextColor={colors.semantic.text.muted}\n value={ctx.query}\n onChangeText={ctx.setQuery}\n autoFocus={ctx.open}\n style={{\n fontSize: 15,\n color: colors.semantic.text.default,\n paddingHorizontal: px(colors.spacing['4']),\n paddingVertical: px(colors.spacing['3']),\n borderBottomWidth: 1,\n borderBottomColor: colors.semantic.border.default,\n }}\n />\n <ScrollView style={{ maxHeight: 400 }}>{children}</ScrollView>\n </View>\n )}\n </Dialog.Content>\n </Dialog>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Empty\n// ---------------------------------------------------------------------------\n\nexport type CommandEmptyProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Shown when the current query has no matching Command.Item descendants.\n */\nconst CommandEmpty = ({ children, className, testID }: CommandEmptyProps) => {\n const colors = useThemeColors();\n\n if (Platform.OS === 'web') {\n return (\n <div\n data-testid={testID}\n role=\"status\"\n aria-live=\"polite\"\n className={cn('nori-command-empty', className)}\n style={\n {\n paddingTop: colors.spacing['6'],\n paddingBottom: colors.spacing['6'],\n paddingLeft: colors.spacing['4'],\n paddingRight: colors.spacing['4'],\n textAlign: 'center',\n color: colors.semantic.text.muted,\n fontSize: 14,\n } as React.CSSProperties\n }\n >\n {children}\n </div>\n );\n }\n return (\n <View\n testID={testID}\n style={{\n paddingVertical: px(colors.spacing['6']),\n paddingHorizontal: px(colors.spacing['4']),\n alignItems: 'center',\n }}\n >\n <RNText style={{ color: colors.semantic.text.muted, fontSize: 14 }}>\n {typeof children === 'string' ? children : 'No results found.'}\n </RNText>\n </View>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Group\n// ---------------------------------------------------------------------------\n\nexport type CommandGroupProps = {\n /** Section heading. */\n heading?: string;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Labelled group of Command.Item elements.\n * Hides itself when all its items are filtered out.\n */\nconst CommandGroup = ({ heading, children, className, testID }: CommandGroupProps) => {\n const ctx = useCommandContext('Command.Group');\n const groupId = useId();\n const colors = useThemeColors();\n\n const visibleCount = countVisibleItems(children, ctx.query);\n\n if (visibleCount === 0) {\n return null;\n }\n\n if (Platform.OS === 'web') {\n return (\n <section\n data-testid={testID}\n aria-labelledby={heading ? `${groupId}-heading` : undefined}\n className={cn('nori-command-group', className)}\n >\n {heading && (\n <div\n id={`${groupId}-heading`}\n style={\n {\n padding: `${colors.spacing['2']}px ${colors.spacing['4']}px ${colors.spacing['1']}px`,\n fontSize: 11,\n fontWeight: 600,\n letterSpacing: '0.05em',\n textTransform: 'uppercase',\n color: colors.semantic.text.muted,\n } as React.CSSProperties\n }\n >\n {heading}\n </div>\n )}\n <div style={{ paddingBottom: colors.spacing['2'] }}>{children}</div>\n </section>\n );\n }\n\n return (\n <View testID={testID}>\n {heading && (\n <View\n style={{\n paddingHorizontal: px(colors.spacing['4']),\n paddingTop: px(colors.spacing['2']),\n paddingBottom: px(colors.spacing['1']),\n }}\n >\n <RNText\n style={{\n fontSize: 11,\n fontWeight: '600',\n textTransform: 'uppercase',\n color: colors.semantic.text.muted,\n letterSpacing: 0.5,\n }}\n >\n {heading}\n </RNText>\n </View>\n )}\n {children}\n </View>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Item\n// ---------------------------------------------------------------------------\n\nexport type CommandItemProps = {\n /** Fires when the item is selected (click or Enter). */\n onSelect?: () => void;\n /** Disable the item. @defaultValue false */\n disabled?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Selectable command item. Filters itself out when the current query does\n * not match its text content.\n */\nconst CommandItem = ({ onSelect, disabled = false, children, className, testID }: CommandItemProps) => {\n const ctx = useCommandContext('Command.Item');\n const colors = useThemeColors();\n\n const text = extractText(children);\n const visible = matchesQuery(text, ctx.query);\n\n if (!visible) {\n return null;\n }\n\n const handleSelect = () => {\n if (disabled) {\n return;\n }\n onSelect?.();\n ctx.setOpen(false);\n };\n\n if (Platform.OS === 'web') {\n return (\n <div\n data-testid={testID}\n role=\"option\"\n aria-selected=\"false\"\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n className={cn('nori-command-item', className)}\n onClick={handleSelect}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSelect();\n }\n }}\n onMouseEnter={(e) => {\n if (!disabled) {\n (e.currentTarget as HTMLElement).style.background = `${colors.semantic.interactive.primary}14`;\n }\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLElement).style.background = 'transparent';\n }}\n onFocus={(e) => {\n if (!disabled) {\n (e.currentTarget as HTMLElement).style.background = `${colors.semantic.interactive.primary}14`;\n }\n }}\n onBlur={(e) => {\n (e.currentTarget as HTMLElement).style.background = 'transparent';\n }}\n style={\n {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${colors.spacing['2']}px ${colors.spacing['4']}px`,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n fontSize: 14,\n color: colors.semantic.text.default,\n borderRadius: colors.radius.sm,\n margin: `0 ${colors.spacing['1']}px`,\n outline: 'none',\n } as React.CSSProperties\n }\n >\n {children}\n </div>\n );\n }\n\n return (\n <Pressable\n testID={testID}\n onPress={handleSelect}\n disabled={disabled}\n accessibilityRole=\"button\"\n style={({ pressed }: { pressed: boolean }) => ({\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n justifyContent: 'space-between' as const,\n paddingHorizontal: px(colors.spacing['4']),\n paddingVertical: px(colors.spacing['3']),\n opacity: disabled ? 0.5 : pressed ? 0.7 : 1,\n })}\n >\n {typeof children === 'string' ? (\n <RNText style={{ fontSize: 14, color: colors.semantic.text.default }}>{children}</RNText>\n ) : (\n children\n )}\n </Pressable>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Shortcut\n// ---------------------------------------------------------------------------\n\nexport type CommandShortcutProps = {\n children?: ReactNode;\n className?: string;\n};\n\n/**\n * Keyboard shortcut hint rendered right-aligned inside a Command.Item.\n */\nconst CommandShortcut = ({ children, className }: CommandShortcutProps) => {\n const colors = useThemeColors();\n\n if (Platform.OS === 'web') {\n return (\n <span\n aria-hidden=\"true\"\n className={cn('nori-command-shortcut', className)}\n style={{\n marginLeft: 'auto',\n fontSize: 12,\n color: colors.semantic.text.muted,\n letterSpacing: '0.05em',\n opacity: 0.7,\n }}\n >\n {children}\n </span>\n );\n }\n\n return (\n <RNText\n style={{\n fontSize: 12,\n color: colors.semantic.text.muted,\n opacity: 0.7,\n }}\n >\n {typeof children === 'string' ? children : null}\n </RNText>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Filter helpers\n// ---------------------------------------------------------------------------\n\n/** Extract concatenated text from a ReactNode tree for query matching. */\nfunction extractText(node: ReactNode): string {\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node);\n }\n if (Array.isArray(node)) {\n return node.map(extractText).join(' ');\n }\n if (isValidElement(node)) {\n const el = node as ReactElement<{ children?: ReactNode }>;\n return extractText(el.props.children);\n }\n return '';\n}\n\n/** Case-insensitive substring match. Empty query matches everything. */\nfunction matchesQuery(text: string, query: string): boolean {\n if (!query.trim()) {\n return true;\n }\n return text.toLowerCase().includes(query.toLowerCase().trim());\n}\n\n/**\n * Count how many Command.Item children would be visible for the given query.\n * Inspects direct CommandItem-shaped children only (duck-typed by `onSelect` prop).\n */\nfunction countVisibleItems(children: ReactNode, query: string): number {\n let count = 0;\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) {\n return;\n }\n const props = child.props as Record<string, unknown>;\n // CommandItem is duck-typed: has `onSelect` or no `heading`\n if ('onSelect' in props || !('heading' in props)) {\n const text = extractText(props.children as ReactNode);\n if (matchesQuery(text, query)) {\n count++;\n }\n }\n });\n return count;\n}\n\n// ---------------------------------------------------------------------------\n// Public Dialog wrapper: auto-show Empty when no group renders anything\n// ---------------------------------------------------------------------------\n\n/**\n * Wraps CommandDialogInner to automatically surface Command.Empty when all\n * items are filtered away. This is what is exposed as `Command.Dialog`.\n */\nconst CommandDialogWrapper = (props: CommandDialogProps) => {\n const ctx = useCommandContext('Command.Dialog');\n const { children, ...rest } = props;\n\n let anyVisible = false;\n let emptyNode: ReactNode = null;\n\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) {\n return;\n }\n const childProps = child.props as Record<string, unknown>;\n\n // Detect Empty: has no heading, no onSelect, no icon — purely a display node\n if (!('heading' in childProps) && !('onSelect' in childProps) && !('icon' in childProps)) {\n emptyNode = child;\n return;\n }\n\n // It's a Group — count visible items in its children\n const groupChildren = childProps.children as ReactNode;\n const count = countVisibleItems(groupChildren, ctx.query);\n if (count > 0) {\n anyVisible = true;\n }\n });\n\n return (\n <CommandDialogInner {...rest}>\n {anyVisible ? children : (emptyNode ?? <CommandEmpty>No results found.</CommandEmpty>)}\n </CommandDialogInner>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Compound export\n// ---------------------------------------------------------------------------\n\n/**\n * cmdk-style command palette.\n *\n * ```tsx\n * <Command>\n * <Command.Trigger>\n * <Button>Search<Kbd>⌘K</Kbd></Button>\n * </Command.Trigger>\n * <Command.Dialog placeholder=\"Type a command or search…\">\n * <Command.Empty>No results found.</Command.Empty>\n * <Command.Group heading=\"Suggestions\">\n * <Command.Item onSelect={() => navigate('/calendar')}>Calendar</Command.Item>\n * <Command.Item onSelect={() => navigate('/emoji')}>Search Emoji</Command.Item>\n * </Command.Group>\n * <Command.Group heading=\"Settings\">\n * <Command.Item onSelect={() => navigate('/profile')}>\n * Profile<Command.Shortcut>⌘P</Command.Shortcut>\n * </Command.Item>\n * </Command.Group>\n * </Command.Dialog>\n * </Command>\n * ```\n */\nexport const Command = Object.assign(CommandRoot, {\n Trigger: CommandTrigger,\n Dialog: CommandDialogWrapper,\n Empty: CommandEmpty,\n Group: CommandGroup,\n Item: CommandItem,\n Shortcut: CommandShortcut,\n});\n\n// Re-export context hook for advanced use.\nexport { useCommandContext };\n\nimport type React from 'react';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Command/Command.tsx"],"names":["RNTextInput","RNText"],"mappings":";;;;;;;;;AA2DA,IAAM,cAAA,GAAiB,cAA0C,IAAI,CAAA;AAErE,SAAS,kBAAkB,MAAA,EAAqC;AAC5D,EAAA,MAAM,GAAA,GAAM,WAAW,cAAc,CAAA;AACrC,EAAA,IAAI,CAAC,GAAA,EAAK;AACN,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,CAAA,EAAI,MAAM,CAAA,oCAAA,CAAsC,CAAA;AAAA,EACpE;AACA,EAAA,OAAO,GAAA;AACX;AANS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AA0BT,IAAM,WAAA,2BAAe,EAAE,IAAA,EAAM,cAAc,KAAA,EAAO,YAAA,EAAc,UAAS,KAAoB;AACzF,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAkB,WAAW,CAAA;AACvD,EAAA,MAAM,eAAe,IAAA,KAAS,MAAA;AAC9B,EAAA,MAAM,OAAA,GAAU,eAAgB,IAAA,GAAmB,KAAA;AACnD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,EAAE,CAAA;AAErC,EAAA,MAAM,OAAA,GAAU,WAAA;AAAA,IACZ,CAAC,IAAA,KAAkB;AACf,MAAA,IAAI,CAAC,YAAA,EAAc;AACf,QAAA,QAAA,CAAS,IAAI,CAAA;AAAA,MACjB;AACA,MAAA,IAAI,CAAC,IAAA,EAAM;AAEP,QAAA,QAAA,CAAS,EAAE,CAAA;AAAA,MACf;AACA,MAAA,YAAA,GAAe,IAAI,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,CAAC,cAAc,YAAY;AAAA,GAC/B;AAGA,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,OAAA,2BAAW,CAAA,KAAqB;AAClC,MAAA,IAAA,CAAK,EAAE,OAAA,IAAW,CAAA,CAAE,OAAA,KAAY,CAAA,CAAE,QAAQ,GAAA,EAAK;AAC3C,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,OAAA,CAAQ,CAAC,OAAO,CAAA;AAAA,MACpB;AAAA,IACJ,CAAA,EALgB,SAAA,CAAA;AAMhB,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,OAAO,CAAA;AAC1C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,OAAO,CAAA;AAAA,EAC9D,CAAA,EAAG,CAAC,OAAA,EAAS,OAAO,CAAC,CAAA;AAErB,EAAA,MAAM,QAAA,GAAgC;AAAA,IAClC,IAAA,EAAM,OAAA;AAAA,IACN,OAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACJ;AAEA,EAAA,2BAAQ,cAAA,CAAe,QAAA,EAAf,EAAwB,KAAA,EAAO,UAAW,QAAA,EAAS,CAAA;AAC/D,CAAA,EA3CoB,aAAA,CAAA;AA2DpB,IAAM,iCAAiB,MAAA,CAAA,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,QAAO,KAA2B;AAC7E,EAAA,MAAM,GAAA,GAAM,kBAAkB,iBAAiB,CAAA;AAE/C,EAAA,MAAM,IAAA,mBAAO,MAAA,CAAA,MAAM,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA,EAAtB,MAAA,CAAA;AAEb,EAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,IAAA,IAAI,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC1B,MAAA,MAAM,KAAA,GAAQ,QAAA;AAMd,MAAA,MAAM,eAAA,GAAkB,MAAM,KAAA,CAAM,OAAA;AACpC,MAAA,MAAM,eAAA,GAAkB,MAAM,KAAA,CAAM,OAAA;AACpC,MAAA,MAAM,IAAA,2BAAQ,CAAA,KAAe;AACzB,QAAA,eAAA,GAAkB,CAAC,CAAA;AACnB,QAAA,eAAA,GAAkB,CAAC,CAAA;AACnB,QAAA,IAAA,EAAK;AAAA,MACT,CAAA,EAJa,MAAA,CAAA;AAQb,MAAA,MAAM,UAAA,GAAsC;AAAA,QACxC,OAAA,EAAS,IAAA;AAAA,QACT,eAAA,EAAiB,QAAA;AAAA,QACjB,eAAA,EAAiB,GAAA,CAAI,IAAA,GAAO,MAAA,GAAS;AAAA,OACzC;AACA,MAAA,IAAI,oBAAoB,MAAA,EAAW;AAC/B,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACzB;AACA,MAAA,OAAO,YAAA,CAAa,OAAO,UAAgD,CAAA;AAAA,IAC/E;AACA,IAAA,uBACI,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACG,IAAA,EAAK,QAAA;AAAA,QACL,aAAA,EAAa,MAAA;AAAA,QACb,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,SAAS,CAAA;AAAA,QAC/C,eAAA,EAAc,QAAA;AAAA,QACd,iBAAe,GAAA,CAAI,IAAA;AAAA,QACnB,OAAA,EAAS,IAAA;AAAA,QAER;AAAA;AAAA,KACL;AAAA,EAER;AAGA,EAAA,2BACK,SAAA,EAAA,EAAU,MAAA,EAAgB,SAAS,IAAA,EAAM,iBAAA,EAAkB,UACvD,QAAA,EACL,CAAA;AAER,CAAA,EArDuB,gBAAA,CAAA;AAyEvB,IAAM,qCAAqB,MAAA,CAAA,CAAC;AAAA,EACxB,WAAA,GAAc,gCAAA;AAAA,EACd,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACJ,CAAA,KAA0B;AACtB,EAAA,MAAM,GAAA,GAAM,kBAAkB,gBAAgB,CAAA;AAC9C,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,QAAA,GAAW,OAAgC,IAAI,CAAA;AAGrD,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,CAAC,IAAI,IAAA,EAAM;AACX,MAAA;AAAA,IACJ;AACA,IAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,KAAK,UAAA,CAAW,MAAM,SAAS,OAAA,EAAS,KAAA,IAAS,EAAE,CAAA;AACzD,IAAA,OAAO,MAAM,aAAa,EAAE,CAAA;AAAA,EAChC,CAAA,EAAG,CAAC,GAAA,CAAI,IAAI,CAAC,CAAA;AAEb,EAAA,MAAM,eACF,MAAA,KAAW,MAAA,GACL,EAAE,MAAA,EAAQ,WAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,KACxD,EAAE,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAE;AAE5D,EAAA,2BACK,MAAA,EAAA,EAAO,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,cAAc,GAAA,CAAI,OAAA,EACtC,QAAA,kBAAA,GAAA,CAAC,MAAA,CAAO,SAAP,EAAgB,GAAG,YAAA,EACf,QAAA,EAAA,QAAA,CAAS,OAAO,KAAA,mBACb,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,KAAA,EAAO;AAAA,QACH,SAAA,EAAW,MAAA;AAAA,QACX,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,QAAA,EAAU,QAAA;AAAA,QACV,QAAA,EAAU;AAAA,OACd;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAA,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACG,KAAA,EAAO;AAAA,cACH,OAAA,EAAS,CAAA,EAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,cACxD,YAAA,EAAc,CAAA,UAAA,EAAa,MAAA,CAAO,QAAA,CAAS,OAAO,OAAO,CAAA,CAAA;AAAA,cACzD,OAAA,EAAS,MAAA;AAAA,cACT,UAAA,EAAY,QAAA;AAAA,cACZ,GAAA,EAAK,MAAA,CAAO,OAAA,CAAQ,GAAG;AAAA,aAC3B;AAAA,YAGA,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACG,KAAA,EAAM,IAAA;AAAA,kBACN,MAAA,EAAO,IAAA;AAAA,kBACP,OAAA,EAAQ,WAAA;AAAA,kBACR,IAAA,EAAK,MAAA;AAAA,kBACL,aAAA,EAAY,MAAA;AAAA,kBACZ,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,CAAO,SAAS,IAAA,CAAK,KAAA,EAAO,YAAY,CAAA,EAAE;AAAA,kBAE1D,QAAA,kBAAA,GAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACG,CAAA,EAAE,yDAAA;AAAA,sBACF,MAAA,EAAO,cAAA;AAAA,sBACP,WAAA,EAAY,KAAA;AAAA,sBACZ,aAAA,EAAc,OAAA;AAAA,sBACd,cAAA,EAAe;AAAA;AAAA;AACnB;AAAA,eACJ;AAAA,8BACA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACG,GAAA,EAAK,QAAA;AAAA,kBACL,IAAA,EAAK,MAAA;AAAA,kBACL,IAAA,EAAK,UAAA;AAAA,kBACL,eAAA,EAAe,IAAA;AAAA,kBACf,mBAAA,EAAkB,MAAA;AAAA,kBAClB,YAAA,EAAa,KAAA;AAAA,kBACb,UAAA,EAAY,KAAA;AAAA,kBACZ,WAAA;AAAA,kBACA,OAAO,GAAA,CAAI,KAAA;AAAA,kBACX,UAAU,CAAC,CAAA,KAAM,IAAI,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,kBAC5C,KAAA,EACI;AAAA,oBACI,IAAA,EAAM,CAAA;AAAA,oBACN,QAAA,EAAU,EAAA;AAAA,oBACV,UAAA,EAAY,aAAA;AAAA,oBACZ,MAAA,EAAQ,MAAA;AAAA,oBACR,OAAA,EAAS,MAAA;AAAA,oBACT,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA;AAAA,oBAC5B,KAAA,EAAO;AAAA;AACX;AAAA;AAER;AAAA;AAAA,SACJ;AAAA,wBAEA,GAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,SAAA,EAAU,KAAA,EAAO,EAAE,SAAA,EAAW,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAG,SAAA,EAAW,GAAA,IAC/D,QAAA,EACL;AAAA;AAAA;AAAA,sBAGJ,IAAA,CAAC,IAAA,EAAA,EAAK,OAAO,EAAE,IAAA,EAAM,GAAE,EACnB,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAACA,SAAA;AAAA,MAAA;AAAA,QACG,WAAA;AAAA,QACA,oBAAA,EAAsB,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA;AAAA,QAC3C,OAAO,GAAA,CAAI,KAAA;AAAA,QACX,cAAc,GAAA,CAAI,QAAA;AAAA,QAClB,WAAW,GAAA,CAAI,IAAA;AAAA,QACf,KAAA,EAAO;AAAA,UACH,QAAA,EAAU,EAAA;AAAA,UACV,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA;AAAA,UAC5B,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,UACzC,eAAA,EAAiB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,UACvC,iBAAA,EAAmB,CAAA;AAAA,UACnB,iBAAA,EAAmB,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO;AAAA;AAC9C;AAAA,KACJ;AAAA,wBACC,UAAA,EAAA,EAAW,KAAA,EAAO,EAAE,SAAA,EAAW,GAAA,IAAQ,QAAA,EAAS;AAAA,GAAA,EACrD,GAER,CAAA,EACJ,CAAA;AAER,CAAA,EAvH2B,oBAAA,CAAA;AAsI3B,IAAM,+BAAe,MAAA,CAAA,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,QAAO,KAAyB;AACzE,EAAA,MAAM,SAAS,cAAA,EAAe;AAE9B,EAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,IAAA,uBACI,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,aAAA,EAAa,MAAA;AAAA,QACb,IAAA,EAAK,QAAA;AAAA,QACL,WAAA,EAAU,QAAA;AAAA,QACV,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,SAAS,CAAA;AAAA,QAC7C,KAAA,EACI;AAAA,UACI,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,UAC9B,aAAA,EAAe,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,UACjC,WAAA,EAAa,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,UAC/B,YAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,UAChC,SAAA,EAAW,QAAA;AAAA,UACX,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA;AAAA,UAC5B,QAAA,EAAU;AAAA,SACd;AAAA,QAGH;AAAA;AAAA,KACL;AAAA,EAER;AACA,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,MAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACH,eAAA,EAAiB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QACvC,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QACzC,UAAA,EAAY;AAAA,OAChB;AAAA,MAEA,8BAACC,IAAA,EAAA,EAAO,KAAA,EAAO,EAAE,KAAA,EAAO,OAAO,QAAA,CAAS,IAAA,CAAK,KAAA,EAAO,QAAA,EAAU,IAAG,EAC5D,QAAA,EAAA,OAAO,QAAA,KAAa,QAAA,GAAW,WAAW,mBAAA,EAC/C;AAAA;AAAA,GACJ;AAER,CAAA,EAxCqB,cAAA,CAAA;AA0DrB,IAAM,+BAAe,MAAA,CAAA,CAAC,EAAE,SAAS,QAAA,EAAU,SAAA,EAAW,QAAO,KAAyB;AAClF,EAAA,MAAM,GAAA,GAAM,kBAAkB,eAAe,CAAA;AAC7C,EAAA,MAAM,UAAU,KAAA,EAAM;AACtB,EAAA,MAAM,SAAS,cAAA,EAAe;AAE9B,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,QAAA,EAAU,GAAA,CAAI,KAAK,CAAA;AAE1D,EAAA,IAAI,iBAAiB,CAAA,EAAG;AACpB,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,IAAA,uBACI,IAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACG,aAAA,EAAa,MAAA;AAAA,QACb,iBAAA,EAAiB,OAAA,GAAU,CAAA,EAAG,OAAO,CAAA,QAAA,CAAA,GAAa,MAAA;AAAA,QAClD,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,SAAS,CAAA;AAAA,QAE5C,QAAA,EAAA;AAAA,UAAA,OAAA,oBACG,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACG,EAAA,EAAI,GAAG,OAAO,CAAA,QAAA,CAAA;AAAA,cACd,KAAA,EACI;AAAA,gBACI,OAAA,EAAS,CAAA,EAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,gBACjF,QAAA,EAAU,EAAA;AAAA,gBACV,UAAA,EAAY,GAAA;AAAA,gBACZ,aAAA,EAAe,QAAA;AAAA,gBACf,aAAA,EAAe,WAAA;AAAA,gBACf,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK;AAAA,eAChC;AAAA,cAGH,QAAA,EAAA;AAAA;AAAA,WACL;AAAA,0BAEJ,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,aAAA,EAAe,OAAO,OAAA,CAAQ,GAAG,CAAA,EAAE,EAAI,QAAA,EAAS;AAAA;AAAA;AAAA,KAClE;AAAA,EAER;AAEA,EAAA,uBACI,IAAA,CAAC,QAAK,MAAA,EACD,QAAA,EAAA;AAAA,IAAA,OAAA,oBACG,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,KAAA,EAAO;AAAA,UACH,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,UACzC,UAAA,EAAY,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,UAClC,aAAA,EAAe,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC;AAAA,SACzC;AAAA,QAEA,QAAA,kBAAA,GAAA;AAAA,UAACA,IAAA;AAAA,UAAA;AAAA,YACG,KAAA,EAAO;AAAA,cACH,QAAA,EAAU,EAAA;AAAA,cACV,UAAA,EAAY,KAAA;AAAA,cACZ,aAAA,EAAe,WAAA;AAAA,cACf,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA;AAAA,cAC5B,aAAA,EAAe;AAAA,aACnB;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA;AACL;AAAA,KACJ;AAAA,IAEH;AAAA,GAAA,EACL,CAAA;AAER,CAAA,EAlEqB,cAAA,CAAA;AAsFrB,IAAM,WAAA,2BAAe,EAAE,QAAA,EAAU,WAAW,KAAA,EAAO,QAAA,EAAU,SAAA,EAAW,MAAA,EAAO,KAAwB;AACnG,EAAA,MAAM,GAAA,GAAM,kBAAkB,cAAc,CAAA;AAC5C,EAAA,MAAM,SAAS,cAAA,EAAe;AAE9B,EAAA,MAAM,IAAA,GAAO,YAAY,QAAQ,CAAA;AACjC,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,IAAA,EAAM,GAAA,CAAI,KAAK,CAAA;AAE5C,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,MAAM,+BAAe,MAAA,CAAA,MAAM;AACvB,IAAA,IAAI,QAAA,EAAU;AACV,MAAA;AAAA,IACJ;AACA,IAAA,QAAA,IAAW;AACX,IAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AAAA,EACrB,CAAA,EANqB,cAAA,CAAA;AAQrB,EAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,IAAA,uBACI,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,aAAA,EAAa,MAAA;AAAA,QACb,IAAA,EAAK,QAAA;AAAA,QACL,eAAA,EAAc,OAAA;AAAA,QACd,eAAA,EAAe,QAAA;AAAA,QACf,QAAA,EAAU,WAAW,EAAA,GAAK,CAAA;AAAA,QAC1B,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,SAAS,CAAA;AAAA,QAC5C,OAAA,EAAS,YAAA;AAAA,QACT,SAAA,EAAW,CAAC,CAAA,KAAM;AACd,UAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACnB,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,YAAA,EAAa;AAAA,UACjB;AAAA,QACJ,CAAA;AAAA,QACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACjB,UAAA,IAAI,CAAC,QAAA,EAAU;AACX,YAAC,CAAA,CAAE,cAA8B,KAAA,CAAM,UAAA,GAAa,GAAG,MAAA,CAAO,QAAA,CAAS,YAAY,OAAO,CAAA,EAAA,CAAA;AAAA,UAC9F;AAAA,QACJ,CAAA;AAAA,QACA,YAAA,EAAc,CAAC,CAAA,KAAM;AACjB,UAAC,CAAA,CAAE,aAAA,CAA8B,KAAA,CAAM,UAAA,GAAa,aAAA;AAAA,QACxD,CAAA;AAAA,QACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACZ,UAAA,IAAI,CAAC,QAAA,EAAU;AACX,YAAC,CAAA,CAAE,cAA8B,KAAA,CAAM,UAAA,GAAa,GAAG,MAAA,CAAO,QAAA,CAAS,YAAY,OAAO,CAAA,EAAA,CAAA;AAAA,UAC9F;AAAA,QACJ,CAAA;AAAA,QACA,MAAA,EAAQ,CAAC,CAAA,KAAM;AACX,UAAC,CAAA,CAAE,aAAA,CAA8B,KAAA,CAAM,UAAA,GAAa,aAAA;AAAA,QACxD,CAAA;AAAA,QACA,KAAA,EACI;AAAA,UACI,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,eAAA;AAAA,UAChB,OAAA,EAAS,CAAA,EAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,UACxD,MAAA,EAAQ,WAAW,aAAA,GAAgB,SAAA;AAAA,UACnC,OAAA,EAAS,WAAW,GAAA,GAAM,CAAA;AAAA,UAC1B,QAAA,EAAU,EAAA;AAAA,UACV,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA;AAAA,UAC5B,YAAA,EAAc,OAAO,MAAA,CAAO,EAAA;AAAA,UAC5B,MAAA,EAAQ,CAAA,EAAA,EAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,UAChC,OAAA,EAAS;AAAA,SACb;AAAA,QAGH;AAAA;AAAA,KACL;AAAA,EAER;AAEA,EAAA,uBACI,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACG,MAAA;AAAA,MACA,OAAA,EAAS,YAAA;AAAA,MACT,QAAA;AAAA,MACA,iBAAA,EAAkB,QAAA;AAAA,MAClB,KAAA,EAAO,CAAC,EAAE,OAAA,EAAQ,MAA6B;AAAA,QAC3C,aAAA,EAAe,KAAA;AAAA,QACf,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,eAAA;AAAA,QAChB,iBAAA,EAAmB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QACzC,eAAA,EAAiB,EAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QACvC,OAAA,EAAS,QAAA,GAAW,GAAA,GAAM,OAAA,GAAU,GAAA,GAAM;AAAA,OAC9C,CAAA;AAAA,MAEC,iBAAO,QAAA,KAAa,QAAA,mBACjB,GAAA,CAACA,IAAA,EAAA,EAAO,OAAO,EAAE,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,OAAO,QAAA,CAAS,IAAA,CAAK,OAAA,EAAQ,EAAI,UAAS,CAAA,GAEhF;AAAA;AAAA,GAER;AAER,CAAA,EA9FoB,aAAA,CAAA;AA4GpB,IAAM,eAAA,mBAAkB,MAAA,CAAA,CAAC,EAAE,QAAA,EAAU,WAAU,KAA4B;AACvE,EAAA,MAAM,SAAS,cAAA,EAAe;AAE9B,EAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACvB,IAAA,uBACI,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACG,aAAA,EAAY,MAAA;AAAA,QACZ,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA;AAAA,QAChD,KAAA,EAAO;AAAA,UACH,UAAA,EAAY,MAAA;AAAA,UACZ,QAAA,EAAU,EAAA;AAAA,UACV,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA;AAAA,UAC5B,aAAA,EAAe,QAAA;AAAA,UACf,OAAA,EAAS;AAAA,SACb;AAAA,QAEC;AAAA;AAAA,KACL;AAAA,EAER;AAEA,EAAA,uBACI,GAAA;AAAA,IAACA,IAAA;AAAA,IAAA;AAAA,MACG,KAAA,EAAO;AAAA,QACH,QAAA,EAAU,EAAA;AAAA,QACV,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA;AAAA,QAC5B,OAAA,EAAS;AAAA,OACb;AAAA,MAEC,QAAA,EAAA,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,GAAW;AAAA;AAAA,GAC/C;AAER,CAAA,EAhCwB,iBAAA,CAAA;AAuCxB,SAAS,YAAY,IAAA,EAAyB;AAC1C,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,SAAS,QAAA,EAAU;AACtD,IAAA,OAAO,OAAO,IAAI,CAAA;AAAA,EACtB;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACrB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,WAAW,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,cAAA,CAAe,IAAI,CAAA,EAAG;AACtB,IAAA,MAAM,EAAA,GAAK,IAAA;AACX,IAAA,OAAO,WAAA,CAAY,EAAA,CAAG,KAAA,CAAM,QAAQ,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,EAAA;AACX;AAZS,MAAA,CAAA,WAAA,EAAA,aAAA,CAAA;AAeT,SAAS,YAAA,CAAa,MAAc,KAAA,EAAwB;AACxD,EAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAK,EAAG;AACf,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,IAAA,CAAK,aAAY,CAAE,QAAA,CAAS,MAAM,WAAA,EAAY,CAAE,MAAM,CAAA;AACjE;AALS,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAWT,SAAS,iBAAA,CAAkB,UAAqB,KAAA,EAAuB;AACnE,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,CAAC,KAAA,KAAU;AAClC,IAAA,IAAI,CAAC,cAAA,CAAe,KAAK,CAAA,EAAG;AACxB,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AAEpB,IAAA,IAAI,UAAA,IAAc,KAAA,IAAS,EAAE,SAAA,IAAa,KAAA,CAAA,EAAQ;AAC9C,MAAA,MAAM,IAAA,GAAO,WAAA,CAAY,KAAA,CAAM,QAAqB,CAAA;AACpD,MAAA,IAAI,YAAA,CAAa,IAAA,EAAM,KAAK,CAAA,EAAG;AAC3B,QAAA,KAAA,EAAA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ,CAAC,CAAA;AACD,EAAA,OAAO,KAAA;AACX;AAhBS,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AA0BT,IAAM,oBAAA,2BAAwB,KAAA,KAA8B;AACxD,EAAA,MAAM,GAAA,GAAM,kBAAkB,gBAAgB,CAAA;AAC9C,EAAA,MAAM,EAAE,QAAA,EAAU,GAAG,IAAA,EAAK,GAAI,KAAA;AAE9B,EAAA,IAAI,UAAA,GAAa,KAAA;AACjB,EAAA,IAAI,SAAA,GAAuB,IAAA;AAE3B,EAAA,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,CAAC,KAAA,KAAU;AAClC,IAAA,IAAI,CAAC,cAAA,CAAe,KAAK,CAAA,EAAG;AACxB,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,aAAa,KAAA,CAAM,KAAA;AAGzB,IAAA,IAAI,EAAE,aAAa,UAAA,CAAA,IAAe,EAAE,cAAc,UAAA,CAAA,IAAe,EAAE,UAAU,UAAA,CAAA,EAAa;AACtF,MAAA,SAAA,GAAY,KAAA;AACZ,MAAA;AAAA,IACJ;AAGA,IAAA,MAAM,gBAAgB,UAAA,CAAW,QAAA;AACjC,IAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,aAAA,EAAe,GAAA,CAAI,KAAK,CAAA;AACxD,IAAA,IAAI,QAAQ,CAAA,EAAG;AACX,MAAA,UAAA,GAAa,IAAA;AAAA,IACjB;AAAA,EACJ,CAAC,CAAA;AAED,EAAA,uBACI,GAAA,CAAC,kBAAA,EAAA,EAAoB,GAAG,IAAA,EACnB,QAAA,EAAA,UAAA,GAAa,WAAY,SAAA,oBAAa,GAAA,CAAC,YAAA,EAAA,EAAa,QAAA,EAAA,mBAAA,EAAiB,CAAA,EAC1E,CAAA;AAER,CAAA,EAhC6B,sBAAA,CAAA;AA6DtB,IAAM,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa;AAAA,EAC9C,OAAA,EAAS,cAAA;AAAA,EACT,MAAA,EAAQ,oBAAA;AAAA,EACR,KAAA,EAAO,YAAA;AAAA,EACP,KAAA,EAAO,YAAA;AAAA,EACP,IAAA,EAAM,WAAA;AAAA,EACN,QAAA,EAAU;AACd,CAAC","file":"chunk-UHHW7GZ4.js","sourcesContent":["'use client';\n\n/**\n * Command — cmdk-style command palette (compound component).\n *\n * Anatomy:\n * Command Root — owns open state and filter query.\n * Command.Trigger Element that opens the palette. Default asChild.\n * Command.Dialog The modal surface (search input + item list).\n * Command.Empty Shown when no items match the current query.\n * Command.Group Labelled section of items.\n * Command.Item Selectable action/navigation entry.\n * Command.Shortcut Inline keyboard shortcut hint (right-aligned).\n *\n * Web behaviour:\n * - Global ⌘K / Ctrl+K shortcut opens the palette.\n * - Search input filters items by substring (case-insensitive).\n * - Escape closes (inherited from Dialog).\n *\n * Native behaviour:\n * - Trigger tap opens the palette (no global keyboard shortcut).\n * - Same filtering logic; scrollable list.\n *\n * Implementation note:\n * Reuses the Dialog primitive as the modal surface so we inherit focus\n * trap, scroll lock, backdrop blur, and Escape-to-close for free.\n */\n\nimport {\n Children,\n cloneElement,\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { Platform, Pressable, Text as RNText, TextInput as RNTextInput, ScrollView, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\nimport { Dialog } from '../Dialog/Dialog';\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ntype CommandContextValue = {\n open: boolean;\n setOpen: (next: boolean) => void;\n query: string;\n setQuery: (q: string) => void;\n};\n\nconst CommandContext = createContext<CommandContextValue | null>(null);\n\nfunction useCommandContext(caller: string): CommandContextValue {\n const ctx = useContext(CommandContext);\n if (!ctx) {\n throw new Error(`<${caller}> must be rendered inside <Command>.`);\n }\n return ctx;\n}\n\n// ---------------------------------------------------------------------------\n// Root\n// ---------------------------------------------------------------------------\n\nexport type CommandProps = {\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. @defaultValue false */\n defaultOpen?: boolean;\n /** Fires with the new open state. */\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n};\n\n/**\n * Root of the Command compound. Owns open state and filter query.\n * Registers the global ⌘K / Ctrl+K shortcut on web.\n */\nconst CommandRoot = ({ open, defaultOpen = false, onOpenChange, children }: CommandProps) => {\n const [inner, setInner] = useState<boolean>(defaultOpen);\n const isControlled = open !== undefined;\n const current = isControlled ? (open as boolean) : inner;\n const [query, setQuery] = useState('');\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setInner(next);\n }\n if (!next) {\n // Reset query on close so the palette starts fresh next time.\n setQuery('');\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange]\n );\n\n // Global ⌘K / Ctrl+K on web only\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n const handler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault();\n setOpen(!current);\n }\n };\n window.addEventListener('keydown', handler);\n return () => window.removeEventListener('keydown', handler);\n }, [current, setOpen]);\n\n const ctxValue: CommandContextValue = {\n open: current,\n setOpen,\n query,\n setQuery,\n };\n\n return <CommandContext.Provider value={ctxValue}>{children}</CommandContext.Provider>;\n};\n\n// ---------------------------------------------------------------------------\n// Trigger\n// ---------------------------------------------------------------------------\n\nexport type CommandTriggerProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Element that opens the command palette when activated.\n * On web it also receives aria-haspopup=\"dialog\" and aria-expanded.\n */\nconst CommandTrigger = ({ children, className, testID }: CommandTriggerProps) => {\n const ctx = useCommandContext('Command.Trigger');\n\n const open = () => ctx.setOpen(true);\n\n if (Platform.OS === 'web') {\n if (isValidElement(children)) {\n const child = children as ReactElement<{\n onClick?: (e: unknown) => void;\n onPress?: (e: unknown) => void;\n 'aria-haspopup'?: string;\n 'aria-expanded'?: string | boolean;\n }>;\n const existingOnClick = child.props.onClick;\n const existingOnPress = child.props.onPress;\n const fire = (e: unknown) => {\n existingOnClick?.(e);\n existingOnPress?.(e);\n open();\n };\n // Only forward onPress if the child already has it (i.e. it's a RN\n // Pressable-style element). Plain HTML elements (button, a, etc.)\n // don't have onPress and React DOM warns when it receives it.\n const extraProps: Record<string, unknown> = {\n onClick: fire,\n 'aria-haspopup': 'dialog',\n 'aria-expanded': ctx.open ? 'true' : 'false',\n };\n if (existingOnPress !== undefined) {\n extraProps.onPress = fire;\n }\n return cloneElement(child, extraProps as Parameters<typeof cloneElement>[1]);\n }\n return (\n <button\n type=\"button\"\n data-testid={testID}\n className={cn('nori-command-trigger', className)}\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n onClick={open}\n >\n {children}\n </button>\n );\n }\n\n // Native\n return (\n <Pressable testID={testID} onPress={open} accessibilityRole=\"button\">\n {children}\n </Pressable>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Dialog (modal surface)\n// ---------------------------------------------------------------------------\n\nexport type CommandDialogProps = {\n /** Placeholder text for the search input. @defaultValue 'Type a command or search…' */\n placeholder?: string;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * The modal surface of the command palette.\n *\n * Wraps Dialog.Content and adds a search TextInput above the item list.\n * Children are typically Command.Empty and Command.Group elements.\n */\nconst CommandDialogInner = ({\n placeholder = 'Type a command or search…',\n children,\n className,\n testID,\n}: CommandDialogProps) => {\n const ctx = useCommandContext('Command.Dialog');\n const colors = useThemeColors();\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n // Auto-focus search input when the dialog opens\n useEffect(() => {\n if (!ctx.open) {\n return;\n }\n if (Platform.OS !== 'web') {\n return;\n }\n const id = setTimeout(() => inputRef.current?.focus(), 50);\n return () => clearTimeout(id);\n }, [ctx.open]);\n\n const contentProps =\n testID !== undefined\n ? { testID, className: cn('nori-command-dialog', className) }\n : { className: cn('nori-command-dialog', className) };\n\n return (\n <Dialog open={ctx.open} onOpenChange={ctx.setOpen}>\n <Dialog.Content {...contentProps}>\n {Platform.OS === 'web' ? (\n <div\n style={{\n maxHeight: '80vh',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n minWidth: 360,\n }}\n >\n {/* Search bar */}\n <div\n style={{\n padding: `${colors.spacing['3']}px ${colors.spacing['4']}px`,\n borderBottom: `1px solid ${colors.semantic.border.default}`,\n display: 'flex',\n alignItems: 'center',\n gap: colors.spacing['2'],\n }}\n >\n {/* Magnifier icon — inline SVG; no extra dep */}\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={{ color: colors.semantic.text.muted, flexShrink: 0 }}\n >\n <path\n d=\"M6.5 11a4.5 4.5 0 1 0 0-9 4.5 4.5 0 0 0 0 9ZM14 14l-3-3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <input\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={true}\n aria-autocomplete=\"list\"\n autoComplete=\"off\"\n spellCheck={false}\n placeholder={placeholder}\n value={ctx.query}\n onChange={(e) => ctx.setQuery(e.target.value)}\n style={\n {\n flex: 1,\n fontSize: 15,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n color: colors.semantic.text.default,\n width: '100%',\n } as React.CSSProperties\n }\n />\n </div>\n {/* Items list */}\n <div role=\"listbox\" style={{ overflowY: 'auto', flex: 1, maxHeight: 400 }}>\n {children}\n </div>\n </div>\n ) : (\n <View style={{ flex: 1 }}>\n <RNTextInput\n placeholder={placeholder}\n placeholderTextColor={colors.semantic.text.muted}\n value={ctx.query}\n onChangeText={ctx.setQuery}\n autoFocus={ctx.open}\n style={{\n fontSize: 15,\n color: colors.semantic.text.default,\n paddingHorizontal: px(colors.spacing['4']),\n paddingVertical: px(colors.spacing['3']),\n borderBottomWidth: 1,\n borderBottomColor: colors.semantic.border.default,\n }}\n />\n <ScrollView style={{ maxHeight: 400 }}>{children}</ScrollView>\n </View>\n )}\n </Dialog.Content>\n </Dialog>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Empty\n// ---------------------------------------------------------------------------\n\nexport type CommandEmptyProps = {\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Shown when the current query has no matching Command.Item descendants.\n */\nconst CommandEmpty = ({ children, className, testID }: CommandEmptyProps) => {\n const colors = useThemeColors();\n\n if (Platform.OS === 'web') {\n return (\n <div\n data-testid={testID}\n role=\"status\"\n aria-live=\"polite\"\n className={cn('nori-command-empty', className)}\n style={\n {\n paddingTop: colors.spacing['6'],\n paddingBottom: colors.spacing['6'],\n paddingLeft: colors.spacing['4'],\n paddingRight: colors.spacing['4'],\n textAlign: 'center',\n color: colors.semantic.text.muted,\n fontSize: 14,\n } as React.CSSProperties\n }\n >\n {children}\n </div>\n );\n }\n return (\n <View\n testID={testID}\n style={{\n paddingVertical: px(colors.spacing['6']),\n paddingHorizontal: px(colors.spacing['4']),\n alignItems: 'center',\n }}\n >\n <RNText style={{ color: colors.semantic.text.muted, fontSize: 14 }}>\n {typeof children === 'string' ? children : 'No results found.'}\n </RNText>\n </View>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Group\n// ---------------------------------------------------------------------------\n\nexport type CommandGroupProps = {\n /** Section heading. */\n heading?: string;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Labelled group of Command.Item elements.\n * Hides itself when all its items are filtered out.\n */\nconst CommandGroup = ({ heading, children, className, testID }: CommandGroupProps) => {\n const ctx = useCommandContext('Command.Group');\n const groupId = useId();\n const colors = useThemeColors();\n\n const visibleCount = countVisibleItems(children, ctx.query);\n\n if (visibleCount === 0) {\n return null;\n }\n\n if (Platform.OS === 'web') {\n return (\n <section\n data-testid={testID}\n aria-labelledby={heading ? `${groupId}-heading` : undefined}\n className={cn('nori-command-group', className)}\n >\n {heading && (\n <div\n id={`${groupId}-heading`}\n style={\n {\n padding: `${colors.spacing['2']}px ${colors.spacing['4']}px ${colors.spacing['1']}px`,\n fontSize: 11,\n fontWeight: 600,\n letterSpacing: '0.05em',\n textTransform: 'uppercase',\n color: colors.semantic.text.muted,\n } as React.CSSProperties\n }\n >\n {heading}\n </div>\n )}\n <div style={{ paddingBottom: colors.spacing['2'] }}>{children}</div>\n </section>\n );\n }\n\n return (\n <View testID={testID}>\n {heading && (\n <View\n style={{\n paddingHorizontal: px(colors.spacing['4']),\n paddingTop: px(colors.spacing['2']),\n paddingBottom: px(colors.spacing['1']),\n }}\n >\n <RNText\n style={{\n fontSize: 11,\n fontWeight: '600',\n textTransform: 'uppercase',\n color: colors.semantic.text.muted,\n letterSpacing: 0.5,\n }}\n >\n {heading}\n </RNText>\n </View>\n )}\n {children}\n </View>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Item\n// ---------------------------------------------------------------------------\n\nexport type CommandItemProps = {\n /** Fires when the item is selected (click or Enter). */\n onSelect?: () => void;\n /** Disable the item. @defaultValue false */\n disabled?: boolean;\n children?: ReactNode;\n className?: string;\n testID?: string;\n};\n\n/**\n * Selectable command item. Filters itself out when the current query does\n * not match its text content.\n */\nconst CommandItem = ({ onSelect, disabled = false, children, className, testID }: CommandItemProps) => {\n const ctx = useCommandContext('Command.Item');\n const colors = useThemeColors();\n\n const text = extractText(children);\n const visible = matchesQuery(text, ctx.query);\n\n if (!visible) {\n return null;\n }\n\n const handleSelect = () => {\n if (disabled) {\n return;\n }\n onSelect?.();\n ctx.setOpen(false);\n };\n\n if (Platform.OS === 'web') {\n return (\n <div\n data-testid={testID}\n role=\"option\"\n aria-selected=\"false\"\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n className={cn('nori-command-item', className)}\n onClick={handleSelect}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSelect();\n }\n }}\n onMouseEnter={(e) => {\n if (!disabled) {\n (e.currentTarget as HTMLElement).style.background = `${colors.semantic.interactive.primary}14`;\n }\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLElement).style.background = 'transparent';\n }}\n onFocus={(e) => {\n if (!disabled) {\n (e.currentTarget as HTMLElement).style.background = `${colors.semantic.interactive.primary}14`;\n }\n }}\n onBlur={(e) => {\n (e.currentTarget as HTMLElement).style.background = 'transparent';\n }}\n style={\n {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${colors.spacing['2']}px ${colors.spacing['4']}px`,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n fontSize: 14,\n color: colors.semantic.text.default,\n borderRadius: colors.radius.sm,\n margin: `0 ${colors.spacing['1']}px`,\n outline: 'none',\n } as React.CSSProperties\n }\n >\n {children}\n </div>\n );\n }\n\n return (\n <Pressable\n testID={testID}\n onPress={handleSelect}\n disabled={disabled}\n accessibilityRole=\"button\"\n style={({ pressed }: { pressed: boolean }) => ({\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n justifyContent: 'space-between' as const,\n paddingHorizontal: px(colors.spacing['4']),\n paddingVertical: px(colors.spacing['3']),\n opacity: disabled ? 0.5 : pressed ? 0.7 : 1,\n })}\n >\n {typeof children === 'string' ? (\n <RNText style={{ fontSize: 14, color: colors.semantic.text.default }}>{children}</RNText>\n ) : (\n children\n )}\n </Pressable>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Shortcut\n// ---------------------------------------------------------------------------\n\nexport type CommandShortcutProps = {\n children?: ReactNode;\n className?: string;\n};\n\n/**\n * Keyboard shortcut hint rendered right-aligned inside a Command.Item.\n */\nconst CommandShortcut = ({ children, className }: CommandShortcutProps) => {\n const colors = useThemeColors();\n\n if (Platform.OS === 'web') {\n return (\n <span\n aria-hidden=\"true\"\n className={cn('nori-command-shortcut', className)}\n style={{\n marginLeft: 'auto',\n fontSize: 12,\n color: colors.semantic.text.muted,\n letterSpacing: '0.05em',\n opacity: 0.7,\n }}\n >\n {children}\n </span>\n );\n }\n\n return (\n <RNText\n style={{\n fontSize: 12,\n color: colors.semantic.text.muted,\n opacity: 0.7,\n }}\n >\n {typeof children === 'string' ? children : null}\n </RNText>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Filter helpers\n// ---------------------------------------------------------------------------\n\n/** Extract concatenated text from a ReactNode tree for query matching. */\nfunction extractText(node: ReactNode): string {\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node);\n }\n if (Array.isArray(node)) {\n return node.map(extractText).join(' ');\n }\n if (isValidElement(node)) {\n const el = node as ReactElement<{ children?: ReactNode }>;\n return extractText(el.props.children);\n }\n return '';\n}\n\n/** Case-insensitive substring match. Empty query matches everything. */\nfunction matchesQuery(text: string, query: string): boolean {\n if (!query.trim()) {\n return true;\n }\n return text.toLowerCase().includes(query.toLowerCase().trim());\n}\n\n/**\n * Count how many Command.Item children would be visible for the given query.\n * Inspects direct CommandItem-shaped children only (duck-typed by `onSelect` prop).\n */\nfunction countVisibleItems(children: ReactNode, query: string): number {\n let count = 0;\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) {\n return;\n }\n const props = child.props as Record<string, unknown>;\n // CommandItem is duck-typed: has `onSelect` or no `heading`\n if ('onSelect' in props || !('heading' in props)) {\n const text = extractText(props.children as ReactNode);\n if (matchesQuery(text, query)) {\n count++;\n }\n }\n });\n return count;\n}\n\n// ---------------------------------------------------------------------------\n// Public Dialog wrapper: auto-show Empty when no group renders anything\n// ---------------------------------------------------------------------------\n\n/**\n * Wraps CommandDialogInner to automatically surface Command.Empty when all\n * items are filtered away. This is what is exposed as `Command.Dialog`.\n */\nconst CommandDialogWrapper = (props: CommandDialogProps) => {\n const ctx = useCommandContext('Command.Dialog');\n const { children, ...rest } = props;\n\n let anyVisible = false;\n let emptyNode: ReactNode = null;\n\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) {\n return;\n }\n const childProps = child.props as Record<string, unknown>;\n\n // Detect Empty: has no heading, no onSelect, no icon — purely a display node\n if (!('heading' in childProps) && !('onSelect' in childProps) && !('icon' in childProps)) {\n emptyNode = child;\n return;\n }\n\n // It's a Group — count visible items in its children\n const groupChildren = childProps.children as ReactNode;\n const count = countVisibleItems(groupChildren, ctx.query);\n if (count > 0) {\n anyVisible = true;\n }\n });\n\n return (\n <CommandDialogInner {...rest}>\n {anyVisible ? children : (emptyNode ?? <CommandEmpty>No results found.</CommandEmpty>)}\n </CommandDialogInner>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Compound export\n// ---------------------------------------------------------------------------\n\n/**\n * cmdk-style command palette.\n *\n * ```tsx\n * <Command>\n * <Command.Trigger>\n * <Button>Search<Kbd>⌘K</Kbd></Button>\n * </Command.Trigger>\n * <Command.Dialog placeholder=\"Type a command or search…\">\n * <Command.Empty>No results found.</Command.Empty>\n * <Command.Group heading=\"Suggestions\">\n * <Command.Item onSelect={() => navigate('/calendar')}>Calendar</Command.Item>\n * <Command.Item onSelect={() => navigate('/emoji')}>Search Emoji</Command.Item>\n * </Command.Group>\n * <Command.Group heading=\"Settings\">\n * <Command.Item onSelect={() => navigate('/profile')}>\n * Profile<Command.Shortcut>⌘P</Command.Shortcut>\n * </Command.Item>\n * </Command.Group>\n * </Command.Dialog>\n * </Command>\n * ```\n */\nexport const Command = Object.assign(CommandRoot, {\n Trigger: CommandTrigger,\n Dialog: CommandDialogWrapper,\n Empty: CommandEmpty,\n Group: CommandGroup,\n Item: CommandItem,\n Shortcut: CommandShortcut,\n});\n\n// Re-export context hook for advanced use.\nexport { useCommandContext };\n\nimport type React from 'react';\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Popover } from './chunk-
|
|
1
|
+
import { Popover } from './chunk-7TESZOYQ.js';
|
|
2
2
|
import { useTranslation } from './chunk-GJMHNEQ3.js';
|
|
3
3
|
import { Slot } from './chunk-ZIBNLXIV.js';
|
|
4
4
|
import { px } from './chunk-5A2QOOVN.js';
|
|
5
|
-
import { useThemeColors } from './chunk-
|
|
5
|
+
import { useThemeColors } from './chunk-3W2O4OBL.js';
|
|
6
6
|
import { cn } from './chunk-CHXHRJNZ.js';
|
|
7
7
|
import { __name } from './chunk-WCQVDF3K.js';
|
|
8
8
|
import { createContext, isValidElement, useState, useRef, useCallback, useMemo, useEffect, Children, Fragment, useContext } from 'react';
|
|
@@ -1102,5 +1102,5 @@ var Breadcrumb = Object.assign(BreadcrumbRoot, {
|
|
|
1102
1102
|
});
|
|
1103
1103
|
|
|
1104
1104
|
export { Breadcrumb, getBreadcrumbJsonLd };
|
|
1105
|
-
//# sourceMappingURL=chunk-
|
|
1106
|
-
//# sourceMappingURL=chunk-
|
|
1105
|
+
//# sourceMappingURL=chunk-UKYSXWTI.js.map
|
|
1106
|
+
//# sourceMappingURL=chunk-UKYSXWTI.js.map
|