@xploreu/components 0.4.14 → 0.4.16
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-2XZRLJCN.js +2 -0
- package/dist/chunk-2XZRLJCN.js.map +1 -0
- package/dist/{chunk-7WQRDDWL.js → chunk-6AKSAK5F.js} +2 -2
- package/dist/{chunk-7WQRDDWL.js.map → chunk-6AKSAK5F.js.map} +1 -1
- package/dist/chunk-AVJU2H5V.js +2 -0
- package/dist/{chunk-ITR3T6UB.js.map → chunk-AVJU2H5V.js.map} +1 -1
- package/dist/chunk-BTVE2DOC.js +2 -0
- package/dist/chunk-BTVE2DOC.js.map +1 -0
- package/dist/chunk-CPRMLK2G.js +2 -0
- package/dist/chunk-CPRMLK2G.js.map +1 -0
- package/dist/{chunk-ZZWSZRER.js → chunk-EL7P7FN5.js} +2 -2
- package/dist/{chunk-ZZWSZRER.js.map → chunk-EL7P7FN5.js.map} +1 -1
- package/dist/{chunk-WCAQIMAH.js → chunk-FE2732UW.js} +2 -2
- package/dist/{chunk-WCAQIMAH.js.map → chunk-FE2732UW.js.map} +1 -1
- package/dist/{chunk-C3FYXQCF.js → chunk-JILBFCPY.js} +2 -2
- package/dist/{chunk-C3FYXQCF.js.map → chunk-JILBFCPY.js.map} +1 -1
- package/dist/chunk-JLZNZFOO.js +2 -0
- package/dist/chunk-JLZNZFOO.js.map +1 -0
- package/dist/{chunk-DNO5M44I.js → chunk-KYVYO45Y.js} +2 -2
- package/dist/{chunk-DNO5M44I.js.map → chunk-KYVYO45Y.js.map} +1 -1
- package/dist/chunk-PU426AFH.js +2 -0
- package/dist/chunk-PU426AFH.js.map +1 -0
- package/dist/{chunk-KKE76CHJ.js → chunk-R4WEEB5H.js} +2 -2
- package/dist/{chunk-KKE76CHJ.js.map → chunk-R4WEEB5H.js.map} +1 -1
- package/dist/{chunk-MMCL4HWD.js → chunk-RJ2SAHLO.js} +2 -2
- package/dist/{chunk-MMCL4HWD.js.map → chunk-RJ2SAHLO.js.map} +1 -1
- package/dist/{chunk-SFMNEY3D.js → chunk-RVQZK2AK.js} +2 -2
- package/dist/{chunk-SFMNEY3D.js.map → chunk-RVQZK2AK.js.map} +1 -1
- package/dist/{chunk-RCA6JRHN.js → chunk-V2D72N26.js} +2 -2
- package/dist/{chunk-RCA6JRHN.js.map → chunk-V2D72N26.js.map} +1 -1
- package/dist/{chunk-FDXCGFD2.js → chunk-VHXY2BUM.js} +2 -2
- package/dist/{chunk-FDXCGFD2.js.map → chunk-VHXY2BUM.js.map} +1 -1
- package/dist/{chunk-JP737TCG.js → chunk-VNU37GJC.js} +2 -2
- package/dist/{chunk-JP737TCG.js.map → chunk-VNU37GJC.js.map} +1 -1
- package/dist/{chunk-7YSKM6DP.js → chunk-ZWZMXZGN.js} +2 -2
- package/dist/{chunk-7YSKM6DP.js.map → chunk-ZWZMXZGN.js.map} +1 -1
- package/dist/composites/combobox-chip-outside.js +1 -1
- package/dist/composites/combobox-chip.js +1 -1
- package/dist/composites/combobox-simple.js +1 -1
- package/dist/composites/filter-combobox.js +1 -1
- package/dist/composites/index.js +1 -1
- package/dist/composites/phone-input.js +1 -1
- package/dist/composites/profile-avatar.d.ts +1 -1
- package/dist/composites/profile-avatar.js +1 -1
- package/dist/effects/highlight.js +1 -1
- package/dist/effects/index.js +1 -1
- package/dist/primitives/combobox.js +1 -1
- package/dist/primitives/index.js +1 -1
- package/dist/primitives/menu.js +1 -1
- package/dist/primitives/tabs.js +1 -1
- package/dist/ui/badge.d.ts +18 -8
- package/dist/ui/badge.js +1 -1
- package/dist/ui/button.d.ts +1 -1
- package/dist/ui/combobox.js +1 -1
- package/dist/ui/date-multiple-picker.js +1 -1
- package/dist/ui/dialog.d.ts +10 -1
- package/dist/ui/dialog.js +1 -1
- package/dist/ui/index.d.ts +30 -6
- package/dist/ui/index.js +1 -1
- package/dist/ui/menu.js +1 -1
- package/dist/ui/pagination.js +1 -1
- package/dist/ui/tabs.d.ts +1 -1
- package/dist/ui/tabs.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-AGTMOMFO.js +0 -2
- package/dist/chunk-AGTMOMFO.js.map +0 -1
- package/dist/chunk-AKTRVGKT.js +0 -2
- package/dist/chunk-AKTRVGKT.js.map +0 -1
- package/dist/chunk-DZKJRP4J.js +0 -2
- package/dist/chunk-DZKJRP4J.js.map +0 -1
- package/dist/chunk-ITR3T6UB.js +0 -2
- package/dist/chunk-KYD4ATTG.js +0 -2
- package/dist/chunk-KYD4ATTG.js.map +0 -1
- package/dist/chunk-ZP4ZPH65.js +0 -2
- package/dist/chunk-ZP4ZPH65.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/primitives/tabs.tsx"],"names":["TabsProvider","useTabs","getStrictContext","Tabs","props","value","setValue","useControlledState","jsx","TabsPrimitive","TabsHighlight","transition","Highlight","TabsList","TabsHighlightItem","HighlightItem","TabsTab","TabsPanel","keepMounted","AnimatePresence","motion","defaultTransition","isAutoMode","TabsPanels","children","autoProps","AutoHeight","style","layoutProps"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/primitives/tabs.tsx"],"names":["TabsProvider","useTabs","getStrictContext","Tabs","props","value","setValue","useControlledState","jsx","TabsPrimitive","TabsHighlight","transition","Highlight","TabsList","TabsHighlightItem","HighlightItem","TabsTab","TabsPanel","keepMounted","AnimatePresence","motion","defaultTransition","isAutoMode","TabsPanels","children","autoProps","AutoHeight","style","layoutProps"],"mappings":"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","file":"chunk-RJ2SAHLO.js","sourcesContent":["'use client';\r\n\r\nimport * as React from 'react';\r\nimport { Tabs as TabsPrimitive } from '@base-ui/react/tabs';\r\nimport {\r\n motion,\r\n AnimatePresence,\r\n type HTMLMotionProps,\r\n type Transition,\r\n} from 'motion/react';\r\n\r\nimport {\r\n Highlight,\r\n HighlightItem,\r\n type HighlightProps,\r\n type HighlightItemProps,\r\n} from \"../effects/highlight\"\r\nimport { getStrictContext } from \"@xploreu/lib/get-strict-context\";\r\nimport { useControlledState } from '@xploreu/hooks/use-controlled-state';\r\nimport {\r\n AutoHeight,\r\n type AutoHeightProps,\r\n} from '../effects/auto-height';\r\n\r\ntype TabsContextType = {\r\n value: string | undefined;\r\n setValue: TabsProps['onValueChange'];\r\n};\r\n\r\nconst [TabsProvider, useTabs] =\r\n getStrictContext<TabsContextType>('TabsContext');\r\n\r\ntype TabsProps = React.ComponentProps<typeof TabsPrimitive.Root>;\r\n\r\nfunction Tabs(props: TabsProps) {\r\n const [value, setValue] = useControlledState({\r\n value: props.value,\r\n defaultValue: props.defaultValue,\r\n onChange: props.onValueChange,\r\n });\r\n\r\n return (\r\n <TabsProvider value={{ value, setValue }}>\r\n <TabsPrimitive.Root\r\n data-slot=\"tabs\"\r\n {...props}\r\n onValueChange={setValue}\r\n />\r\n </TabsProvider>\r\n );\r\n}\r\n\r\ntype TabsHighlightProps = Omit<HighlightProps, 'controlledItems' | 'value'>;\r\n\r\nfunction TabsHighlight({\r\n transition = { type: 'spring', stiffness: 200, damping: 25 },\r\n ...props\r\n}: TabsHighlightProps) {\r\n const { value } = useTabs();\r\n\r\n return (\r\n <Highlight\r\n data-slot=\"tabs-highlight\"\r\n controlledItems\r\n value={value}\r\n transition={transition}\r\n click={false}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype TabsListProps = React.ComponentProps<typeof TabsPrimitive.List>;\r\n\r\nfunction TabsList(props: TabsListProps) {\r\n return <TabsPrimitive.List data-slot=\"tabs-list\" {...props} />;\r\n}\r\n\r\ntype TabsHighlightItemProps = HighlightItemProps & {\r\n value: string;\r\n};\r\n\r\nfunction TabsHighlightItem(props: TabsHighlightItemProps) {\r\n return <HighlightItem data-slot=\"tabs-highlight-item\" {...props} />;\r\n}\r\n\r\ntype TabsTabProps = React.ComponentProps<typeof TabsPrimitive.Tab>;\r\n\r\nfunction TabsTab(props: TabsTabProps) {\r\n return <TabsPrimitive.Tab data-slot=\"tabs-tab\" {...props} />;\r\n}\r\n\r\ntype TabsPanelProps = React.ComponentProps<typeof TabsPrimitive.Panel> &\r\n HTMLMotionProps<'div'>;\r\n\r\nfunction TabsPanel({\r\n value,\r\n keepMounted,\r\n transition = { duration: 0.5, ease: 'easeInOut' },\r\n ...props\r\n}: TabsPanelProps) {\r\n return (\r\n <AnimatePresence mode=\"wait\">\r\n <TabsPrimitive.Panel\r\n render={\r\n <motion.div\r\n data-slot=\"tabs-panel\"\r\n layout\r\n layoutDependency={value}\r\n initial={{ opacity: 0, filter: 'blur(4px)' }}\r\n animate={{ opacity: 1, filter: 'blur(0px)' }}\r\n exit={{ opacity: 0, filter: 'blur(4px)' }}\r\n transition={transition}\r\n {...props}\r\n />\r\n }\r\n keepMounted={keepMounted}\r\n value={value}\r\n />\r\n </AnimatePresence>\r\n );\r\n}\r\n\r\ntype TabsPanelsAutoProps = Omit<AutoHeightProps, 'children'> & {\r\n mode?: 'auto-height';\r\n children: React.ReactNode;\r\n transition?: Transition;\r\n};\r\n\r\ntype TabsPanelsLayoutProps = Omit<HTMLMotionProps<'div'>, 'children'> & {\r\n mode: 'layout';\r\n children: React.ReactNode;\r\n transition?: Transition;\r\n};\r\n\r\ntype TabsPanelsProps = TabsPanelsAutoProps | TabsPanelsLayoutProps;\r\n\r\nconst defaultTransition: Transition = {\r\n type: 'spring',\r\n stiffness: 200,\r\n damping: 30,\r\n};\r\n\r\nfunction isAutoMode(props: TabsPanelsProps): props is TabsPanelsAutoProps {\r\n return !props.mode || props.mode === 'auto-height';\r\n}\r\n\r\nfunction TabsPanels(props: TabsPanelsProps) {\r\n const { value } = useTabs();\r\n\r\n if (isAutoMode(props)) {\r\n const { children, transition = defaultTransition, ...autoProps } = props;\r\n\r\n return (\r\n <AutoHeight\r\n data-slot=\"tabs-panels\"\r\n deps={[value]}\r\n transition={transition}\r\n {...autoProps}\r\n >\r\n <React.Fragment key={value}>{children}</React.Fragment>\r\n </AutoHeight>\r\n );\r\n }\r\n\r\n const {\r\n children,\r\n style,\r\n transition = defaultTransition,\r\n ...layoutProps\r\n } = props;\r\n\r\n return (\r\n <motion.div\r\n data-slot=\"tabs-panels\"\r\n layout=\"size\"\r\n layoutDependency={value}\r\n transition={{ layout: transition }}\r\n style={{ overflow: 'hidden', ...style }}\r\n {...layoutProps}\r\n >\r\n <React.Fragment key={value}>{children}</React.Fragment>\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport {\r\n Tabs,\r\n TabsHighlight,\r\n TabsHighlightItem,\r\n TabsList,\r\n TabsTab,\r\n TabsPanel,\r\n TabsPanels,\r\n type TabsProps,\r\n type TabsHighlightProps,\r\n type TabsHighlightItemProps,\r\n type TabsListProps,\r\n type TabsTabProps,\r\n type TabsPanelProps,\r\n type TabsPanelsProps,\r\n};"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a as a$1,b,m,e,q,s,w}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a as a$1,b,m,e,q,s,w}from'./chunk-EL7P7FN5.js';import {a}from'./chunk-JH6RZ3QH.js';import*as t from'react';import*as C from'react-phone-number-input';import Y from'react-phone-number-input/flags';import {cn}from'@xploreu/lib/cn';import'@base-ui/react/combobox';import {ChevronsUpDownIcon}from'lucide-react';import {jsx,jsxs}from'react/jsx-runtime';var R=({country:l,countryName:o})=>{let s=l?Y[l]:void 0;return jsx("span",{className:"flex h-4 w-6 shrink-0 overflow-hidden rounded-sm bg-fg-quaternary/20 [&_svg:not([class*='size-'])]:size-full",children:s&&jsx(s,{title:o})})},d=44,k=288,H=6;function D({disabled:l,value:o,options:s$1,onChange:i}){let[c,r]=t.useState(false),[b$1,g]=t.useState(""),[y,N]=t.useState(0),v=t.useRef(null),m$1=t.useMemo(()=>s$1.filter(e=>!!e.value),[s$1]),u=t.useMemo(()=>{let e=b$1.trim().toLowerCase();return e?m$1.filter(a=>{let f=C.getCountryCallingCode(a.value);return a.label.toLowerCase().includes(e)||a.value.toLowerCase().includes(e)||f.includes(e.replace(/^\+/,""))}):m$1},[b$1,m$1]),_=t.useMemo(()=>m$1.find(e=>e.value===o)??null,[m$1,o]);t.useEffect(()=>{N(0),v.current&&(v.current.scrollTop=0);},[b$1]);let z=Math.min(u.length*d,k),h=t.useMemo(()=>{let e=Math.floor(y/d),a=Math.max(0,e-H),f=Math.ceil(k/d),P=Math.min(u.length,e+f+H);return {startIndex:a,endIndex:P,items:u.slice(a,P)}},[u,y]),F=h.startIndex*d,U=Math.max(0,(u.length-h.endIndex)*d),q$1=t.useCallback(e=>{e?.value&&(i(e.value),g(""),r(false));},[i]);return jsxs(a$1,{behavior:"default",disabled:l,inputValue:b$1,items:u,open:c,value:_,virtualized:true,filter:null,isItemEqualToValue:(e,a)=>e.value===a.value,openOnInputClick:false,onValueChange:q$1,onInputValueChange:g,onOpenChange:e=>{r(e),e||g("");},children:[jsx(b,{render:jsxs("button",{type:"button",className:cn(a(),"h-11 w-18 shrink-0 justify-between gap-1 rounded-r-none border-r-0 px-3","hover:bg-bg-primary-hover focus-visible:z-10 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand","disabled:pointer-events-none disabled:opacity-50"),disabled:l,children:[jsxs("span",{className:"flex items-center gap-1.5 overflow-hidden",children:[jsx(R,{country:o,countryName:o}),o&&jsx("span",{className:"text-body-medium-3 text-text-primary",children:o})]}),jsx(ChevronsUpDownIcon,{className:"size-3.5 shrink-0 text-fg-quaternary"})]})}),jsxs(m,{className:"w-72",children:[jsx(e,{placeholder:"Search country...","aria-label":"Search country"}),jsx(q,{status:u.length===0?"empty":null}),jsx(s,{ref:v,className:"relative gap-0",style:{height:z},onScroll:e=>N(e.currentTarget.scrollTop),children:jsx("div",{className:"flex w-full shrink-0 flex-col",style:{paddingTop:F,paddingBottom:U},children:h.items.map((e,a)=>{let f=h.startIndex+a;return jsx(w,{index:f,value:e,children:jsxs("div",{className:"flex items-center gap-2 w-full min-w-0",children:[jsx(R,{country:e.value,countryName:e.label}),jsx("span",{className:"flex-1 text-sm truncate",children:e.label}),jsxs("span",{className:"text-sm text-text-tertiary shrink-0",children:["+",C.getCountryCallingCode(e.value)]})]})},e.value)})})})]})]})}var L=t.forwardRef(({className:l,onChange:o,...s},i)=>{let c=t.useCallback(r=>{r.currentTarget.value==="+"&&(r.currentTarget.value=""),o?.(r);},[o]);return jsx("input",{className:cn(a(),"h-11 flex-1 rounded-l-none text-body-regular-2",l),ref:i,type:"tel",onChange:c,...s})});L.displayName="InputComponent";var G=t.forwardRef(({className:l,onChange:o,value:s,...i},c)=>jsx(C.default,{ref:c,className:cn("flex w-full min-w-0 items-center",l),flagComponent:R,countrySelectComponent:D,inputComponent:L,smartCaret:false,value:s||void 0,onChange:r=>o?.(r||""),...i}));G.displayName="PhoneInput";export{G as a};//# sourceMappingURL=chunk-RVQZK2AK.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-RVQZK2AK.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/composites/phone-input.tsx"],"names":["FlagComponent","country","countryName","Flag","flags","jsx","COUNTRY_ROW_HEIGHT","COUNTRY_LIST_HEIGHT","COUNTRY_OVERSCAN","CountrySelect","disabled","selectedCountry","countryList","onChange","open","setOpen","inputValue","setInputValue","scrollTop","setScrollTop","listRef","items","item","filteredItems","search","callingCode","value","listHeight","virtualRange","visibleStartIndex","startIndex","visibleCount","endIndex","paddingTop","paddingBottom","handleValueChange","jsxs","Combobox","a","b","ComboboxTrigger","cn","inputVariants","ChevronsUpDownIcon","ComboboxPopup","ComboboxInput","ComboboxStatus","ComboboxList","event","virtualIndex","index","ComboboxItem","InputComponent","className","props","ref","handleChange","PhoneInput"],"mappings":"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","file":"chunk-SFMNEY3D.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as RPNInput from \"react-phone-number-input\"\r\nimport flags from \"react-phone-number-input/flags\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxInput,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n} from \"../ui/combobox\"\r\nimport { inputVariants } from \"../ui/input\"\r\nimport { ChevronsUpDownIcon } from \"lucide-react\"\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\ntype PhoneInputProps = Omit<\r\n React.ComponentProps<\"input\">,\r\n \"onChange\" | \"value\" | \"ref\"\r\n> &\r\n Omit<RPNInput.Props<typeof RPNInput.default>, \"onChange\"> & {\r\n onChange?: (value: RPNInput.Value) => void\r\n }\r\n\r\n// ---------------------------------------------------------------------------\r\n// Flag\r\n// ---------------------------------------------------------------------------\r\n\r\nconst FlagComponent = ({ country, countryName }: RPNInput.FlagProps) => {\r\n const Flag = country ? flags[country] : undefined\r\n\r\n return (\r\n <span className=\"flex h-4 w-6 shrink-0 overflow-hidden rounded-sm bg-fg-quaternary/20 [&_svg:not([class*='size-'])]:size-full\">\r\n {Flag && <Flag title={countryName} />}\r\n </span>\r\n )\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Country Select — uses base-ui Combobox\r\n// ---------------------------------------------------------------------------\r\n\r\ntype CountryEntry = { label: string; value: RPNInput.Country | undefined }\r\ntype CountryItem = { label: string; value: RPNInput.Country }\r\n\r\nconst COUNTRY_ROW_HEIGHT = 44\r\nconst COUNTRY_LIST_HEIGHT = 288\r\nconst COUNTRY_OVERSCAN = 6\r\n\r\ntype CountrySelectProps = {\r\n disabled?: boolean\r\n value: RPNInput.Country\r\n options: CountryEntry[]\r\n onChange: (country: RPNInput.Country) => void\r\n}\r\n\r\nfunction CountrySelect({\r\n disabled,\r\n value: selectedCountry,\r\n options: countryList,\r\n onChange,\r\n}: CountrySelectProps) {\r\n const [open, setOpen] = React.useState(false)\r\n const [inputValue, setInputValue] = React.useState(\"\")\r\n const [scrollTop, setScrollTop] = React.useState(0)\r\n const listRef = React.useRef<HTMLDivElement>(null)\r\n\r\n const items = React.useMemo(\r\n () => countryList.filter((item): item is CountryItem => Boolean(item.value)),\r\n [countryList]\r\n )\r\n\r\n const filteredItems = React.useMemo(() => {\r\n const search = inputValue.trim().toLowerCase()\r\n\r\n if (!search) return items\r\n\r\n return items.filter((item) => {\r\n const callingCode = RPNInput.getCountryCallingCode(item.value)\r\n\r\n return item.label.toLowerCase().includes(search)\r\n || item.value.toLowerCase().includes(search)\r\n || callingCode.includes(search.replace(/^\\+/, \"\"))\r\n })\r\n }, [inputValue, items])\r\n\r\n const value = React.useMemo(\r\n () => items.find((item) => item.value === selectedCountry) ?? null,\r\n [items, selectedCountry]\r\n )\r\n\r\n React.useEffect(() => {\r\n setScrollTop(0)\r\n if (listRef.current) listRef.current.scrollTop = 0\r\n }, [inputValue])\r\n\r\n const listHeight = Math.min(\r\n filteredItems.length * COUNTRY_ROW_HEIGHT,\r\n COUNTRY_LIST_HEIGHT\r\n )\r\n\r\n const virtualRange = React.useMemo(() => {\r\n const visibleStartIndex = Math.floor(scrollTop / COUNTRY_ROW_HEIGHT)\r\n const startIndex = Math.max(\r\n 0,\r\n visibleStartIndex - COUNTRY_OVERSCAN\r\n )\r\n const visibleCount = Math.ceil(COUNTRY_LIST_HEIGHT / COUNTRY_ROW_HEIGHT)\r\n const endIndex = Math.min(\r\n filteredItems.length,\r\n visibleStartIndex + visibleCount + COUNTRY_OVERSCAN\r\n )\r\n\r\n return {\r\n startIndex,\r\n endIndex,\r\n items: filteredItems.slice(startIndex, endIndex),\r\n }\r\n }, [filteredItems, scrollTop])\r\n\r\n const paddingTop = virtualRange.startIndex * COUNTRY_ROW_HEIGHT\r\n const paddingBottom = Math.max(\r\n 0,\r\n (filteredItems.length - virtualRange.endIndex) * COUNTRY_ROW_HEIGHT\r\n )\r\n\r\n const handleValueChange = React.useCallback(\r\n (item: CountryItem | null) => {\r\n if (!item?.value) return\r\n\r\n onChange(item.value)\r\n setInputValue(\"\")\r\n setOpen(false)\r\n },\r\n [onChange]\r\n )\r\n\r\n return (\r\n <Combobox\r\n behavior=\"default\"\r\n disabled={disabled}\r\n inputValue={inputValue}\r\n items={filteredItems}\r\n open={open}\r\n value={value}\r\n virtualized\r\n filter={null}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n openOnInputClick={false}\r\n onValueChange={handleValueChange}\r\n onInputValueChange={setInputValue}\r\n onOpenChange={(open) => {\r\n setOpen(open)\r\n if (!open) setInputValue(\"\")\r\n }}\r\n >\r\n {/* Visible trigger button styled as part of the input */}\r\n <ComboboxTrigger\r\n render={\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n inputVariants(),\r\n \"h-11 w-18 shrink-0 justify-between gap-1 rounded-r-none border-r-0 px-3\",\r\n \"hover:bg-bg-primary-hover focus-visible:z-10 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\r\n \"disabled:pointer-events-none disabled:opacity-50\"\r\n )}\r\n disabled={disabled}\r\n >\r\n <span className=\"flex items-center gap-1.5 overflow-hidden\">\r\n <FlagComponent\r\n country={selectedCountry}\r\n countryName={selectedCountry}\r\n />\r\n {selectedCountry && (\r\n <span className=\"text-body-medium-3 text-text-primary\">\r\n {selectedCountry}\r\n </span>\r\n )}\r\n </span>\r\n <ChevronsUpDownIcon className=\"size-3.5 shrink-0 text-fg-quaternary\" />\r\n </button>\r\n }\r\n />\r\n\r\n {/* Dropdown content */}\r\n <ComboboxPopup className=\"w-72\">\r\n <ComboboxInput\r\n placeholder=\"Search country...\"\r\n aria-label=\"Search country\"\r\n />\r\n <ComboboxStatus status={filteredItems.length === 0 ? \"empty\" : null} />\r\n <ComboboxList\r\n ref={listRef}\r\n className=\"relative gap-0\"\r\n style={{ height: listHeight }}\r\n onScroll={(event) => setScrollTop(event.currentTarget.scrollTop)}\r\n >\r\n <div\r\n className=\"flex w-full shrink-0 flex-col\"\r\n style={{ paddingTop, paddingBottom }}\r\n >\r\n {virtualRange.items.map((item, virtualIndex) => {\r\n const index = virtualRange.startIndex + virtualIndex\r\n\r\n return (\r\n <ComboboxItem\r\n key={item.value}\r\n index={index}\r\n value={item}\r\n >\r\n <div className=\"flex items-center gap-2 w-full min-w-0\">\r\n <FlagComponent country={item.value} countryName={item.label} />\r\n <span className=\"flex-1 text-sm truncate\">{item.label}</span>\r\n <span className=\"text-sm text-text-tertiary shrink-0\">\r\n +{RPNInput.getCountryCallingCode(item.value)}\r\n </span>\r\n </div>\r\n </ComboboxItem>\r\n )\r\n })}\r\n </div>\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox >\r\n )\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Input Component\r\n// ---------------------------------------------------------------------------\r\n\r\nconst InputComponent = React.forwardRef<\r\n HTMLInputElement,\r\n React.ComponentProps<\"input\">\r\n>(({ className, onChange, ...props }, ref) => {\r\n const handleChange = React.useCallback(\r\n (event: React.ChangeEvent<HTMLInputElement>) => {\r\n if (event.currentTarget.value === \"+\") {\r\n event.currentTarget.value = \"\"\r\n }\r\n\r\n onChange?.(event)\r\n },\r\n [onChange]\r\n )\r\n\r\n return (\r\n <input\r\n className={cn(\r\n inputVariants(),\r\n \"h-11 flex-1 rounded-l-none text-body-regular-2\",\r\n className\r\n )}\r\n ref={ref}\r\n type=\"tel\"\r\n onChange={handleChange}\r\n {...props}\r\n />\r\n )\r\n})\r\nInputComponent.displayName = \"InputComponent\"\r\n\r\n// ---------------------------------------------------------------------------\r\n// Phone Input\r\n// ---------------------------------------------------------------------------\r\n\r\nconst PhoneInput: React.ForwardRefExoticComponent<PhoneInputProps> =\r\n React.forwardRef<\r\n React.ElementRef<typeof RPNInput.default>,\r\n PhoneInputProps\r\n >(({\r\n className,\r\n onChange,\r\n value,\r\n ...props\r\n }, ref) => {\r\n return (\r\n <RPNInput.default\r\n ref={ref}\r\n className={cn(\r\n \"flex w-full min-w-0 items-center\",\r\n className\r\n )}\r\n flagComponent={FlagComponent}\r\n countrySelectComponent={CountrySelect}\r\n inputComponent={InputComponent}\r\n smartCaret={false}\r\n value={value || undefined}\r\n onChange={(value) => onChange?.(value || (\"\" as RPNInput.Value))}\r\n {...props}\r\n />\r\n )\r\n })\r\nPhoneInput.displayName = \"PhoneInput\"\r\n\r\nexport { PhoneInput, type PhoneInputProps }\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/composites/phone-input.tsx"],"names":["FlagComponent","country","countryName","Flag","flags","jsx","COUNTRY_ROW_HEIGHT","COUNTRY_LIST_HEIGHT","COUNTRY_OVERSCAN","CountrySelect","disabled","selectedCountry","countryList","onChange","open","setOpen","inputValue","setInputValue","scrollTop","setScrollTop","listRef","items","item","filteredItems","search","callingCode","value","listHeight","virtualRange","visibleStartIndex","startIndex","visibleCount","endIndex","paddingTop","paddingBottom","handleValueChange","jsxs","Combobox","a","b","ComboboxTrigger","cn","inputVariants","ChevronsUpDownIcon","ComboboxPopup","ComboboxInput","ComboboxStatus","ComboboxList","event","virtualIndex","index","ComboboxItem","InputComponent","className","props","ref","handleChange","PhoneInput"],"mappings":"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","file":"chunk-RVQZK2AK.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as RPNInput from \"react-phone-number-input\"\r\nimport flags from \"react-phone-number-input/flags\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxInput,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n} from \"../ui/combobox\"\r\nimport { inputVariants } from \"../ui/input\"\r\nimport { ChevronsUpDownIcon } from \"lucide-react\"\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\ntype PhoneInputProps = Omit<\r\n React.ComponentProps<\"input\">,\r\n \"onChange\" | \"value\" | \"ref\"\r\n> &\r\n Omit<RPNInput.Props<typeof RPNInput.default>, \"onChange\"> & {\r\n onChange?: (value: RPNInput.Value) => void\r\n }\r\n\r\n// ---------------------------------------------------------------------------\r\n// Flag\r\n// ---------------------------------------------------------------------------\r\n\r\nconst FlagComponent = ({ country, countryName }: RPNInput.FlagProps) => {\r\n const Flag = country ? flags[country] : undefined\r\n\r\n return (\r\n <span className=\"flex h-4 w-6 shrink-0 overflow-hidden rounded-sm bg-fg-quaternary/20 [&_svg:not([class*='size-'])]:size-full\">\r\n {Flag && <Flag title={countryName} />}\r\n </span>\r\n )\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Country Select — uses base-ui Combobox\r\n// ---------------------------------------------------------------------------\r\n\r\ntype CountryEntry = { label: string; value: RPNInput.Country | undefined }\r\ntype CountryItem = { label: string; value: RPNInput.Country }\r\n\r\nconst COUNTRY_ROW_HEIGHT = 44\r\nconst COUNTRY_LIST_HEIGHT = 288\r\nconst COUNTRY_OVERSCAN = 6\r\n\r\ntype CountrySelectProps = {\r\n disabled?: boolean\r\n value: RPNInput.Country\r\n options: CountryEntry[]\r\n onChange: (country: RPNInput.Country) => void\r\n}\r\n\r\nfunction CountrySelect({\r\n disabled,\r\n value: selectedCountry,\r\n options: countryList,\r\n onChange,\r\n}: CountrySelectProps) {\r\n const [open, setOpen] = React.useState(false)\r\n const [inputValue, setInputValue] = React.useState(\"\")\r\n const [scrollTop, setScrollTop] = React.useState(0)\r\n const listRef = React.useRef<HTMLDivElement>(null)\r\n\r\n const items = React.useMemo(\r\n () => countryList.filter((item): item is CountryItem => Boolean(item.value)),\r\n [countryList]\r\n )\r\n\r\n const filteredItems = React.useMemo(() => {\r\n const search = inputValue.trim().toLowerCase()\r\n\r\n if (!search) return items\r\n\r\n return items.filter((item) => {\r\n const callingCode = RPNInput.getCountryCallingCode(item.value)\r\n\r\n return item.label.toLowerCase().includes(search)\r\n || item.value.toLowerCase().includes(search)\r\n || callingCode.includes(search.replace(/^\\+/, \"\"))\r\n })\r\n }, [inputValue, items])\r\n\r\n const value = React.useMemo(\r\n () => items.find((item) => item.value === selectedCountry) ?? null,\r\n [items, selectedCountry]\r\n )\r\n\r\n React.useEffect(() => {\r\n setScrollTop(0)\r\n if (listRef.current) listRef.current.scrollTop = 0\r\n }, [inputValue])\r\n\r\n const listHeight = Math.min(\r\n filteredItems.length * COUNTRY_ROW_HEIGHT,\r\n COUNTRY_LIST_HEIGHT\r\n )\r\n\r\n const virtualRange = React.useMemo(() => {\r\n const visibleStartIndex = Math.floor(scrollTop / COUNTRY_ROW_HEIGHT)\r\n const startIndex = Math.max(\r\n 0,\r\n visibleStartIndex - COUNTRY_OVERSCAN\r\n )\r\n const visibleCount = Math.ceil(COUNTRY_LIST_HEIGHT / COUNTRY_ROW_HEIGHT)\r\n const endIndex = Math.min(\r\n filteredItems.length,\r\n visibleStartIndex + visibleCount + COUNTRY_OVERSCAN\r\n )\r\n\r\n return {\r\n startIndex,\r\n endIndex,\r\n items: filteredItems.slice(startIndex, endIndex),\r\n }\r\n }, [filteredItems, scrollTop])\r\n\r\n const paddingTop = virtualRange.startIndex * COUNTRY_ROW_HEIGHT\r\n const paddingBottom = Math.max(\r\n 0,\r\n (filteredItems.length - virtualRange.endIndex) * COUNTRY_ROW_HEIGHT\r\n )\r\n\r\n const handleValueChange = React.useCallback(\r\n (item: CountryItem | null) => {\r\n if (!item?.value) return\r\n\r\n onChange(item.value)\r\n setInputValue(\"\")\r\n setOpen(false)\r\n },\r\n [onChange]\r\n )\r\n\r\n return (\r\n <Combobox\r\n behavior=\"default\"\r\n disabled={disabled}\r\n inputValue={inputValue}\r\n items={filteredItems}\r\n open={open}\r\n value={value}\r\n virtualized\r\n filter={null}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n openOnInputClick={false}\r\n onValueChange={handleValueChange}\r\n onInputValueChange={setInputValue}\r\n onOpenChange={(open) => {\r\n setOpen(open)\r\n if (!open) setInputValue(\"\")\r\n }}\r\n >\r\n {/* Visible trigger button styled as part of the input */}\r\n <ComboboxTrigger\r\n render={\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n inputVariants(),\r\n \"h-11 w-18 shrink-0 justify-between gap-1 rounded-r-none border-r-0 px-3\",\r\n \"hover:bg-bg-primary-hover focus-visible:z-10 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\r\n \"disabled:pointer-events-none disabled:opacity-50\"\r\n )}\r\n disabled={disabled}\r\n >\r\n <span className=\"flex items-center gap-1.5 overflow-hidden\">\r\n <FlagComponent\r\n country={selectedCountry}\r\n countryName={selectedCountry}\r\n />\r\n {selectedCountry && (\r\n <span className=\"text-body-medium-3 text-text-primary\">\r\n {selectedCountry}\r\n </span>\r\n )}\r\n </span>\r\n <ChevronsUpDownIcon className=\"size-3.5 shrink-0 text-fg-quaternary\" />\r\n </button>\r\n }\r\n />\r\n\r\n {/* Dropdown content */}\r\n <ComboboxPopup className=\"w-72\">\r\n <ComboboxInput\r\n placeholder=\"Search country...\"\r\n aria-label=\"Search country\"\r\n />\r\n <ComboboxStatus status={filteredItems.length === 0 ? \"empty\" : null} />\r\n <ComboboxList\r\n ref={listRef}\r\n className=\"relative gap-0\"\r\n style={{ height: listHeight }}\r\n onScroll={(event) => setScrollTop(event.currentTarget.scrollTop)}\r\n >\r\n <div\r\n className=\"flex w-full shrink-0 flex-col\"\r\n style={{ paddingTop, paddingBottom }}\r\n >\r\n {virtualRange.items.map((item, virtualIndex) => {\r\n const index = virtualRange.startIndex + virtualIndex\r\n\r\n return (\r\n <ComboboxItem\r\n key={item.value}\r\n index={index}\r\n value={item}\r\n >\r\n <div className=\"flex items-center gap-2 w-full min-w-0\">\r\n <FlagComponent country={item.value} countryName={item.label} />\r\n <span className=\"flex-1 text-sm truncate\">{item.label}</span>\r\n <span className=\"text-sm text-text-tertiary shrink-0\">\r\n +{RPNInput.getCountryCallingCode(item.value)}\r\n </span>\r\n </div>\r\n </ComboboxItem>\r\n )\r\n })}\r\n </div>\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox >\r\n )\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Input Component\r\n// ---------------------------------------------------------------------------\r\n\r\nconst InputComponent = React.forwardRef<\r\n HTMLInputElement,\r\n React.ComponentProps<\"input\">\r\n>(({ className, onChange, ...props }, ref) => {\r\n const handleChange = React.useCallback(\r\n (event: React.ChangeEvent<HTMLInputElement>) => {\r\n if (event.currentTarget.value === \"+\") {\r\n event.currentTarget.value = \"\"\r\n }\r\n\r\n onChange?.(event)\r\n },\r\n [onChange]\r\n )\r\n\r\n return (\r\n <input\r\n className={cn(\r\n inputVariants(),\r\n \"h-11 flex-1 rounded-l-none text-body-regular-2\",\r\n className\r\n )}\r\n ref={ref}\r\n type=\"tel\"\r\n onChange={handleChange}\r\n {...props}\r\n />\r\n )\r\n})\r\nInputComponent.displayName = \"InputComponent\"\r\n\r\n// ---------------------------------------------------------------------------\r\n// Phone Input\r\n// ---------------------------------------------------------------------------\r\n\r\nconst PhoneInput: React.ForwardRefExoticComponent<PhoneInputProps> =\r\n React.forwardRef<\r\n React.ElementRef<typeof RPNInput.default>,\r\n PhoneInputProps\r\n >(({\r\n className,\r\n onChange,\r\n value,\r\n ...props\r\n }, ref) => {\r\n return (\r\n <RPNInput.default\r\n ref={ref}\r\n className={cn(\r\n \"flex w-full min-w-0 items-center\",\r\n className\r\n )}\r\n flagComponent={FlagComponent}\r\n countrySelectComponent={CountrySelect}\r\n inputComponent={InputComponent}\r\n smartCaret={false}\r\n value={value || undefined}\r\n onChange={(value) => onChange?.(value || (\"\" as RPNInput.Value))}\r\n {...props}\r\n />\r\n )\r\n })\r\nPhoneInput.displayName = \"PhoneInput\"\r\n\r\nexport { PhoneInput, type PhoneInputProps }\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {c,d,e,f,g,m,h,i,n,o,p,q as q$1,r,s,t,j as j$1,k,l,u,v}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {c,d,e,f,g,m,h,i,n,o,p,q as q$1,r,s,t,j as j$1,k,l,u,v}from'./chunk-VNU37GJC.js';import'react';import {cn}from'@xploreu/lib/cn';import {CheckIcon,CircleIcon,ChevronRightIcon}from'lucide-react';import {jsx,jsxs}from'react/jsx-runtime';function O(e){return jsx(c,{...e})}function j(e){return jsx(d,{...e})}function T(e$1){return jsx(e,{...e$1})}function q({className:e,finalFocus:t,id:i,children:n,sideOffset:o=4,transition:a={duration:.2},...p}){return jsx(T,{children:jsx(f,{className:"z-50",sideOffset:o,...p,children:jsx(g,{finalFocus:t,id:i,transition:a,className:cn("bg-bg-primary text-text-primary max-h-(--available-height) min-w-[8rem] origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border-primary p-1 shadow-xp-lg outline-hidden",e),children:jsx(m,{className:"absolute inset-0 z-0 rounded-sm bg-bg-primary-hover",children:n})})})})}function B(e){return jsx(h,{...e})}function D({className:e,inset:t,...i$1}){return jsx(i,{"data-inset":t,className:cn("px-2 py-1.5 text-label-semibold-4 text-text-secondary data-[inset]:pl-8",e),...i$1})}function E({className:e,inset:t,variant:i="default",disabled:n$1,...o$1}){return jsx(n,{activeClassName:i==="destructive"?"bg-bg-error-primary":"",disabled:n$1,children:jsx(o,{disabled:n$1,"data-inset":t,"data-variant":i,className:cn("focus:text-text-primary data-[variant=destructive]:text-text-error-primary data-[variant=destructive]:focus:text-text-error-primary data-[variant=destructive]:*:[svg]:!text-fg-error-primary [&_svg:not([class*='text-'])]:text-fg-secondary relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-body-regular-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...o$1})})}function J({className:e,children:t,checked:i,disabled:n$1,...o}){return jsx(n,{disabled:n$1,children:jsxs(p,{disabled:n$1,className:cn("focus:text-text-primary relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-body-regular outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),checked:i,...o,children:[jsx("span",{className:"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center",children:jsx(q$1,{animate:{opacity:1,scale:1},initial:{opacity:0,scale:.5},children:jsx(CheckIcon,{className:"size-4"})})}),t]})})}function K(e){return jsx(r,{...e})}function Q({className:e,children:t$1,disabled:i,...n$1}){return jsx(n,{disabled:i,children:jsxs(s,{disabled:i,className:cn("focus:text-text-primary relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-body-regular outline-hidden select-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...n$1,children:[jsx("span",{className:"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center",children:jsx(t,{layoutId:"menu-item-indicator-radio",children:jsx(CircleIcon,{className:"size-2 fill-current"})})}),t$1]})})}function U({className:e,...t}){return jsx(j$1,{className:cn("-mx-1 my-1 h-px bg-border-primary",e),...t})}function V({className:e,...t}){return jsx(k,{className:cn("text-text-quaternary ml-auto text-body-regular-xs tracking-widest",e),...t})}function W(e){return jsx(l,{...e})}function X(e){return jsx(u,{...e})}function Y({disabled:e,className:t,inset:i,children:n$1,...o}){return jsx(n,{disabled:e,children:jsxs(v,{disabled:e,"data-inset":i,className:cn("focus:text-text-primary data-[state=open]:text-text-primary flex cursor-default items-center rounded-sm px-2 py-1.5 text-body-regular outline-hidden select-none data-[inset]:pl-8","aria-[expanded=true]:[&_[data-slot=chevron]]:rotate-90 [&_[data-slot=chevron]]:transition-transform [&_[data-slot=chevron]]:duration-300 [&_[data-slot=chevron]]:ease-in-out",t),...o,children:[n$1,jsx(ChevronRightIcon,{"data-slot":"chevron",className:"ml-auto size-4"})]})})}function Z({className:e,finalFocus:t,id:i,children:n,sideOffset:o=4,transition:a={duration:.2},...p}){return jsx(T,{children:jsx(f,{className:"z-50",sideOffset:o,...p,children:jsx(g,{finalFocus:t,id:i,transition:a,className:cn("bg-bg-primary text-text-primary max-h-(--available-height) min-w-[8rem] origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border-primary p-1 shadow-xp-lg",e),children:n})})})}export{O as a,j as b,T as c,q as d,B as e,D as f,E as g,J as h,K as i,Q as j,U as k,V as l,W as m,X as n,Y as o,Z as p};//# sourceMappingURL=chunk-V2D72N26.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-V2D72N26.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/menu.tsx"],"names":["Menu","props","jsx","MenuTrigger","MenuPortal","MenuPanel","className","finalFocus","id","children","sideOffset","transition","MenuPositioner","MenuPopup","cn","MenuHighlight","MenuGroup","MenuGroupLabel","inset","MenuItem","variant","disabled","MenuHighlightItem","MenuCheckboxItem","checked","jsxs","MenuCheckboxItemIndicator","CheckIcon","MenuRadioGroup","MenuRadioItem","MenuRadioItemIndicator","CircleIcon","MenuSeparator","MenuShortcut","MenuArrow","MenuSubmenu","MenuSubmenuTrigger","ChevronRightIcon","MenuSubmenuPanel"],"mappings":"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","file":"chunk-RCA6JRHN.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport {\r\n Menu as MenuPrimitive,\r\n MenuArrow as MenuArrowPrimitive,\r\n MenuCheckboxItem as MenuCheckboxItemPrimitive,\r\n MenuCheckboxItemIndicator as MenuCheckboxItemIndicatorPrimitive,\r\n MenuGroup as MenuGroupPrimitive,\r\n MenuGroupLabel as MenuGroupLabelPrimitive,\r\n MenuHighlight as MenuHighlightPrimitive,\r\n MenuHighlightItem as MenuHighlightItemPrimitive,\r\n MenuItem as MenuItemPrimitive,\r\n MenuPortal as MenuPortalPrimitive,\r\n MenuPopup as MenuPopupPrimitive,\r\n MenuPositioner as MenuPositionerPrimitive,\r\n MenuRadioGroup as MenuRadioGroupPrimitive,\r\n MenuRadioItem as MenuRadioItemPrimitive,\r\n MenuRadioItemIndicator as MenuRadioItemIndicatorPrimitive,\r\n MenuSeparator as MenuSeparatorPrimitive,\r\n MenuShortcut as MenuShortcutPrimitive,\r\n MenuSubmenu as MenuSubmenuPrimitive,\r\n MenuSubmenuTrigger as MenuSubmenuTriggerPrimitive,\r\n MenuTrigger as MenuTriggerPrimitive,\r\n type MenuArrowProps as MenuArrowPrimitiveProps,\r\n type MenuCheckboxItemIndicatorProps as MenuCheckboxItemIndicatorPrimitiveProps,\r\n type MenuCheckboxItemProps as MenuCheckboxItemPrimitiveProps,\r\n type MenuGroupLabelProps as MenuGroupLabelPrimitiveProps,\r\n type MenuGroupProps as MenuGroupPrimitiveProps,\r\n type MenuHighlightItemProps as MenuHighlightItemPrimitiveProps,\r\n type MenuHighlightProps as MenuHighlightPrimitiveProps,\r\n type MenuItemProps as MenuItemPrimitiveProps,\r\n type MenuPopupProps as MenuPopupPrimitiveProps,\r\n type MenuPortalProps as MenuPortalPrimitiveProps,\r\n type MenuPositionerProps as MenuPositionerPrimitiveProps,\r\n type MenuProps as MenuPrimitiveProps,\r\n type MenuRadioGroupProps as MenuRadioGroupPrimitiveProps,\r\n type MenuRadioItemProps as MenuRadioItemPrimitiveProps,\r\n type MenuRadioItemIndicatorProps as MenuRadioItemIndicatorPrimitiveProps,\r\n type MenuSeparatorProps as MenuSeparatorPrimitiveProps,\r\n type MenuShortcutProps as MenuShortcutPrimitiveProps,\r\n type MenuSubmenuProps as MenuSubmenuPrimitiveProps,\r\n type MenuSubmenuTriggerProps as MenuSubmenuTriggerPrimitiveProps,\r\n type MenuTriggerProps as MenuTriggerPrimitiveProps,\r\n} from \"../primitives/menu\"\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\r\n\r\ntype MenuProps = MenuPrimitiveProps\r\n\r\nfunction Menu(props: MenuProps) {\r\n return <MenuPrimitive {...props} />\r\n}\r\n\r\ntype MenuTriggerProps = MenuTriggerPrimitiveProps\r\n\r\nfunction MenuTrigger(props: MenuTriggerProps) {\r\n return <MenuTriggerPrimitive {...props} />\r\n}\r\n\r\ntype MenuPortalProps = MenuPortalPrimitiveProps\r\n\r\nfunction MenuPortal(props: MenuPortalProps) {\r\n return <MenuPortalPrimitive {...props} />\r\n}\r\n\r\ntype MenuPanelProps = MenuPopupPrimitiveProps & MenuPositionerPrimitiveProps\r\n\r\nfunction MenuPanel({\r\n className,\r\n finalFocus,\r\n id,\r\n children,\r\n sideOffset = 4,\r\n transition = { duration: 0.2 },\r\n ...props\r\n}: MenuPanelProps) {\r\n return (\r\n <MenuPortal>\r\n <MenuPositionerPrimitive\r\n className=\"z-50\"\r\n sideOffset={sideOffset}\r\n {...props}\r\n >\r\n <MenuPopupPrimitive\r\n finalFocus={finalFocus}\r\n id={id}\r\n transition={transition}\r\n className={cn(\r\n \"bg-bg-primary text-text-primary max-h-(--available-height) min-w-[8rem] origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border-primary p-1 shadow-xp-lg outline-hidden\",\r\n className,\r\n )}\r\n >\r\n <MenuHighlightPrimitive className=\"absolute inset-0 z-0 rounded-sm bg-bg-primary-hover\">\r\n {children}\r\n </MenuHighlightPrimitive>\r\n </MenuPopupPrimitive>\r\n </MenuPositionerPrimitive>\r\n </MenuPortal>\r\n )\r\n}\r\n\r\ntype MenuGroupProps = MenuGroupPrimitiveProps\r\n\r\nfunction MenuGroup(props: MenuGroupProps) {\r\n return <MenuGroupPrimitive {...props} />\r\n}\r\n\r\ntype MenuGroupLabelProps = MenuGroupLabelPrimitiveProps & {\r\n inset?: boolean;\r\n}\r\n\r\nfunction MenuGroupLabel({ className, inset, ...props }: MenuGroupLabelProps) {\r\n return (\r\n <MenuGroupLabelPrimitive\r\n data-inset={inset}\r\n className={cn(\r\n \"px-2 py-1.5 text-label-semibold-4 text-text-secondary data-[inset]:pl-8\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuItemProps = MenuItemPrimitiveProps & {\r\n inset?: boolean;\r\n variant?: \"default\" | \"destructive\";\r\n}\r\n\r\nfunction MenuItem({\r\n className,\r\n inset,\r\n variant = \"default\",\r\n disabled,\r\n ...props\r\n}: MenuItemProps) {\r\n return (\r\n <MenuHighlightItemPrimitive\r\n activeClassName={\r\n variant === \"destructive\" ? \"bg-bg-error-primary\" : \"\"\r\n }\r\n disabled={disabled}\r\n >\r\n <MenuItemPrimitive\r\n disabled={disabled}\r\n data-inset={inset}\r\n data-variant={variant}\r\n className={cn(\r\n \"focus:text-text-primary data-[variant=destructive]:text-text-error-primary data-[variant=destructive]:focus:text-text-error-primary data-[variant=destructive]:*:[svg]:!text-fg-error-primary [&_svg:not([class*='text-'])]:text-fg-secondary relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-body-regular-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n </MenuHighlightItemPrimitive>\r\n )\r\n}\r\n\r\ntype MenuCheckboxItemProps = MenuCheckboxItemPrimitiveProps\r\n\r\nfunction MenuCheckboxItem({\r\n className,\r\n children,\r\n checked,\r\n disabled,\r\n ...props\r\n}: MenuCheckboxItemProps) {\r\n return (\r\n <MenuHighlightItemPrimitive disabled={disabled}>\r\n <MenuCheckboxItemPrimitive\r\n disabled={disabled}\r\n className={cn(\r\n \"focus:text-text-primary relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-body-regular outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className,\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <MenuCheckboxItemIndicatorPrimitive\r\n animate={{ opacity: 1, scale: 1 }}\r\n initial={{ opacity: 0, scale: 0.5 }}\r\n >\r\n <CheckIcon className=\"size-4\" />\r\n </MenuCheckboxItemIndicatorPrimitive>\r\n </span>\r\n {children}\r\n </MenuCheckboxItemPrimitive>\r\n </MenuHighlightItemPrimitive>\r\n )\r\n}\r\n\r\ntype MenuRadioGroupProps = MenuRadioGroupPrimitiveProps\r\n\r\nfunction MenuRadioGroup(props: MenuRadioGroupProps) {\r\n return <MenuRadioGroupPrimitive {...props} />\r\n}\r\n\r\ntype MenuRadioItemProps = MenuRadioItemPrimitiveProps\r\n\r\nfunction MenuRadioItem({\r\n className,\r\n children,\r\n disabled,\r\n ...props\r\n}: MenuRadioItemProps) {\r\n return (\r\n <MenuHighlightItemPrimitive disabled={disabled}>\r\n <MenuRadioItemPrimitive\r\n disabled={disabled}\r\n className={cn(\r\n \"focus:text-text-primary relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-body-regular outline-hidden select-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <MenuRadioItemIndicatorPrimitive layoutId=\"menu-item-indicator-radio\">\r\n <CircleIcon className=\"size-2 fill-current\" />\r\n </MenuRadioItemIndicatorPrimitive>\r\n </span>\r\n {children}\r\n </MenuRadioItemPrimitive>\r\n </MenuHighlightItemPrimitive>\r\n )\r\n}\r\n\r\ntype MenuSeparatorProps = MenuSeparatorPrimitiveProps\r\n\r\nfunction MenuSeparator({ className, ...props }: MenuSeparatorProps) {\r\n return (\r\n <MenuSeparatorPrimitive\r\n className={cn(\"-mx-1 my-1 h-px bg-border-primary\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuShortcutProps = MenuShortcutPrimitiveProps\r\n\r\nfunction MenuShortcut({ className, ...props }: MenuShortcutProps) {\r\n return (\r\n <MenuShortcutPrimitive\r\n className={cn(\r\n \"text-text-quaternary ml-auto text-body-regular-xs tracking-widest\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuArrowProps = MenuArrowPrimitiveProps\r\n\r\nfunction MenuArrow(props: MenuArrowProps) {\r\n return <MenuArrowPrimitive {...props} />\r\n}\r\n\r\ntype MenuSubmenuProps = MenuSubmenuPrimitiveProps\r\n\r\nfunction MenuSubmenu(props: MenuSubmenuProps) {\r\n return <MenuSubmenuPrimitive {...props} />\r\n}\r\n\r\ntype MenuSubmenuTriggerProps = MenuSubmenuTriggerPrimitiveProps & {\r\n inset?: boolean;\r\n children?: React.ReactNode;\r\n}\r\n\r\nfunction MenuSubmenuTrigger({\r\n disabled,\r\n className,\r\n inset,\r\n children,\r\n ...props\r\n}: MenuSubmenuTriggerProps) {\r\n return (\r\n <MenuHighlightItemPrimitive disabled={disabled}>\r\n <MenuSubmenuTriggerPrimitive\r\n disabled={disabled}\r\n data-inset={inset}\r\n className={cn(\r\n \"focus:text-text-primary data-[state=open]:text-text-primary flex cursor-default items-center rounded-sm px-2 py-1.5 text-body-regular outline-hidden select-none data-[inset]:pl-8\",\r\n \"aria-[expanded=true]:[&_[data-slot=chevron]]:rotate-90 [&_[data-slot=chevron]]:transition-transform [&_[data-slot=chevron]]:duration-300 [&_[data-slot=chevron]]:ease-in-out\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRightIcon\r\n data-slot=\"chevron\"\r\n className=\"ml-auto size-4\"\r\n />\r\n </MenuSubmenuTriggerPrimitive>\r\n </MenuHighlightItemPrimitive>\r\n )\r\n}\r\n\r\ntype MenuSubmenuPanelProps = MenuPopupPrimitiveProps &\r\n MenuPositionerPrimitiveProps\r\n\r\nfunction MenuSubmenuPanel({\r\n className,\r\n finalFocus,\r\n id,\r\n children,\r\n sideOffset = 4,\r\n transition = { duration: 0.2 },\r\n ...props\r\n}: MenuSubmenuPanelProps) {\r\n return (\r\n <MenuPortal>\r\n <MenuPositionerPrimitive\r\n className=\"z-50\"\r\n sideOffset={sideOffset}\r\n {...props}\r\n >\r\n <MenuPopupPrimitive\r\n finalFocus={finalFocus}\r\n id={id}\r\n transition={transition}\r\n className={cn(\r\n \"bg-bg-primary text-text-primary max-h-(--available-height) min-w-[8rem] origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border-primary p-1 shadow-xp-lg\",\r\n className,\r\n )}\r\n >\r\n {children}\r\n </MenuPopupPrimitive>\r\n </MenuPositionerPrimitive>\r\n </MenuPortal>\r\n )\r\n}\r\n\r\nexport {\r\n Menu,\r\n MenuTrigger,\r\n MenuPortal,\r\n MenuPanel,\r\n MenuGroup,\r\n MenuGroupLabel,\r\n MenuItem,\r\n MenuCheckboxItem,\r\n MenuRadioGroup,\r\n MenuRadioItem,\r\n MenuSeparator,\r\n MenuShortcut,\r\n MenuArrow,\r\n MenuSubmenu,\r\n MenuSubmenuTrigger,\r\n MenuSubmenuPanel,\r\n type MenuProps,\r\n type MenuTriggerProps,\r\n type MenuPortalProps,\r\n type MenuPanelProps,\r\n type MenuGroupProps,\r\n type MenuGroupLabelProps,\r\n type MenuItemProps,\r\n type MenuCheckboxItemProps,\r\n type MenuRadioGroupProps,\r\n type MenuRadioItemProps,\r\n type MenuSeparatorProps,\r\n type MenuShortcutProps,\r\n type MenuArrowProps,\r\n type MenuSubmenuProps,\r\n type MenuSubmenuTriggerProps,\r\n type MenuSubmenuPanelProps,\r\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/ui/menu.tsx"],"names":["Menu","props","jsx","MenuTrigger","MenuPortal","MenuPanel","className","finalFocus","id","children","sideOffset","transition","MenuPositioner","MenuPopup","cn","MenuHighlight","MenuGroup","MenuGroupLabel","inset","MenuItem","variant","disabled","MenuHighlightItem","MenuCheckboxItem","checked","jsxs","MenuCheckboxItemIndicator","CheckIcon","MenuRadioGroup","MenuRadioItem","MenuRadioItemIndicator","CircleIcon","MenuSeparator","MenuShortcut","MenuArrow","MenuSubmenu","MenuSubmenuTrigger","ChevronRightIcon","MenuSubmenuPanel"],"mappings":"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","file":"chunk-V2D72N26.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport {\r\n Menu as MenuPrimitive,\r\n MenuArrow as MenuArrowPrimitive,\r\n MenuCheckboxItem as MenuCheckboxItemPrimitive,\r\n MenuCheckboxItemIndicator as MenuCheckboxItemIndicatorPrimitive,\r\n MenuGroup as MenuGroupPrimitive,\r\n MenuGroupLabel as MenuGroupLabelPrimitive,\r\n MenuHighlight as MenuHighlightPrimitive,\r\n MenuHighlightItem as MenuHighlightItemPrimitive,\r\n MenuItem as MenuItemPrimitive,\r\n MenuPortal as MenuPortalPrimitive,\r\n MenuPopup as MenuPopupPrimitive,\r\n MenuPositioner as MenuPositionerPrimitive,\r\n MenuRadioGroup as MenuRadioGroupPrimitive,\r\n MenuRadioItem as MenuRadioItemPrimitive,\r\n MenuRadioItemIndicator as MenuRadioItemIndicatorPrimitive,\r\n MenuSeparator as MenuSeparatorPrimitive,\r\n MenuShortcut as MenuShortcutPrimitive,\r\n MenuSubmenu as MenuSubmenuPrimitive,\r\n MenuSubmenuTrigger as MenuSubmenuTriggerPrimitive,\r\n MenuTrigger as MenuTriggerPrimitive,\r\n type MenuArrowProps as MenuArrowPrimitiveProps,\r\n type MenuCheckboxItemIndicatorProps as MenuCheckboxItemIndicatorPrimitiveProps,\r\n type MenuCheckboxItemProps as MenuCheckboxItemPrimitiveProps,\r\n type MenuGroupLabelProps as MenuGroupLabelPrimitiveProps,\r\n type MenuGroupProps as MenuGroupPrimitiveProps,\r\n type MenuHighlightItemProps as MenuHighlightItemPrimitiveProps,\r\n type MenuHighlightProps as MenuHighlightPrimitiveProps,\r\n type MenuItemProps as MenuItemPrimitiveProps,\r\n type MenuPopupProps as MenuPopupPrimitiveProps,\r\n type MenuPortalProps as MenuPortalPrimitiveProps,\r\n type MenuPositionerProps as MenuPositionerPrimitiveProps,\r\n type MenuProps as MenuPrimitiveProps,\r\n type MenuRadioGroupProps as MenuRadioGroupPrimitiveProps,\r\n type MenuRadioItemProps as MenuRadioItemPrimitiveProps,\r\n type MenuRadioItemIndicatorProps as MenuRadioItemIndicatorPrimitiveProps,\r\n type MenuSeparatorProps as MenuSeparatorPrimitiveProps,\r\n type MenuShortcutProps as MenuShortcutPrimitiveProps,\r\n type MenuSubmenuProps as MenuSubmenuPrimitiveProps,\r\n type MenuSubmenuTriggerProps as MenuSubmenuTriggerPrimitiveProps,\r\n type MenuTriggerProps as MenuTriggerPrimitiveProps,\r\n} from \"../primitives/menu\"\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\r\n\r\ntype MenuProps = MenuPrimitiveProps\r\n\r\nfunction Menu(props: MenuProps) {\r\n return <MenuPrimitive {...props} />\r\n}\r\n\r\ntype MenuTriggerProps = MenuTriggerPrimitiveProps\r\n\r\nfunction MenuTrigger(props: MenuTriggerProps) {\r\n return <MenuTriggerPrimitive {...props} />\r\n}\r\n\r\ntype MenuPortalProps = MenuPortalPrimitiveProps\r\n\r\nfunction MenuPortal(props: MenuPortalProps) {\r\n return <MenuPortalPrimitive {...props} />\r\n}\r\n\r\ntype MenuPanelProps = MenuPopupPrimitiveProps & MenuPositionerPrimitiveProps\r\n\r\nfunction MenuPanel({\r\n className,\r\n finalFocus,\r\n id,\r\n children,\r\n sideOffset = 4,\r\n transition = { duration: 0.2 },\r\n ...props\r\n}: MenuPanelProps) {\r\n return (\r\n <MenuPortal>\r\n <MenuPositionerPrimitive\r\n className=\"z-50\"\r\n sideOffset={sideOffset}\r\n {...props}\r\n >\r\n <MenuPopupPrimitive\r\n finalFocus={finalFocus}\r\n id={id}\r\n transition={transition}\r\n className={cn(\r\n \"bg-bg-primary text-text-primary max-h-(--available-height) min-w-[8rem] origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border-primary p-1 shadow-xp-lg outline-hidden\",\r\n className,\r\n )}\r\n >\r\n <MenuHighlightPrimitive className=\"absolute inset-0 z-0 rounded-sm bg-bg-primary-hover\">\r\n {children}\r\n </MenuHighlightPrimitive>\r\n </MenuPopupPrimitive>\r\n </MenuPositionerPrimitive>\r\n </MenuPortal>\r\n )\r\n}\r\n\r\ntype MenuGroupProps = MenuGroupPrimitiveProps\r\n\r\nfunction MenuGroup(props: MenuGroupProps) {\r\n return <MenuGroupPrimitive {...props} />\r\n}\r\n\r\ntype MenuGroupLabelProps = MenuGroupLabelPrimitiveProps & {\r\n inset?: boolean;\r\n}\r\n\r\nfunction MenuGroupLabel({ className, inset, ...props }: MenuGroupLabelProps) {\r\n return (\r\n <MenuGroupLabelPrimitive\r\n data-inset={inset}\r\n className={cn(\r\n \"px-2 py-1.5 text-label-semibold-4 text-text-secondary data-[inset]:pl-8\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuItemProps = MenuItemPrimitiveProps & {\r\n inset?: boolean;\r\n variant?: \"default\" | \"destructive\";\r\n}\r\n\r\nfunction MenuItem({\r\n className,\r\n inset,\r\n variant = \"default\",\r\n disabled,\r\n ...props\r\n}: MenuItemProps) {\r\n return (\r\n <MenuHighlightItemPrimitive\r\n activeClassName={\r\n variant === \"destructive\" ? \"bg-bg-error-primary\" : \"\"\r\n }\r\n disabled={disabled}\r\n >\r\n <MenuItemPrimitive\r\n disabled={disabled}\r\n data-inset={inset}\r\n data-variant={variant}\r\n className={cn(\r\n \"focus:text-text-primary data-[variant=destructive]:text-text-error-primary data-[variant=destructive]:focus:text-text-error-primary data-[variant=destructive]:*:[svg]:!text-fg-error-primary [&_svg:not([class*='text-'])]:text-fg-secondary relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-body-regular-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n </MenuHighlightItemPrimitive>\r\n )\r\n}\r\n\r\ntype MenuCheckboxItemProps = MenuCheckboxItemPrimitiveProps\r\n\r\nfunction MenuCheckboxItem({\r\n className,\r\n children,\r\n checked,\r\n disabled,\r\n ...props\r\n}: MenuCheckboxItemProps) {\r\n return (\r\n <MenuHighlightItemPrimitive disabled={disabled}>\r\n <MenuCheckboxItemPrimitive\r\n disabled={disabled}\r\n className={cn(\r\n \"focus:text-text-primary relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-body-regular outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className,\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <MenuCheckboxItemIndicatorPrimitive\r\n animate={{ opacity: 1, scale: 1 }}\r\n initial={{ opacity: 0, scale: 0.5 }}\r\n >\r\n <CheckIcon className=\"size-4\" />\r\n </MenuCheckboxItemIndicatorPrimitive>\r\n </span>\r\n {children}\r\n </MenuCheckboxItemPrimitive>\r\n </MenuHighlightItemPrimitive>\r\n )\r\n}\r\n\r\ntype MenuRadioGroupProps = MenuRadioGroupPrimitiveProps\r\n\r\nfunction MenuRadioGroup(props: MenuRadioGroupProps) {\r\n return <MenuRadioGroupPrimitive {...props} />\r\n}\r\n\r\ntype MenuRadioItemProps = MenuRadioItemPrimitiveProps\r\n\r\nfunction MenuRadioItem({\r\n className,\r\n children,\r\n disabled,\r\n ...props\r\n}: MenuRadioItemProps) {\r\n return (\r\n <MenuHighlightItemPrimitive disabled={disabled}>\r\n <MenuRadioItemPrimitive\r\n disabled={disabled}\r\n className={cn(\r\n \"focus:text-text-primary relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-body-regular outline-hidden select-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\r\n <MenuRadioItemIndicatorPrimitive layoutId=\"menu-item-indicator-radio\">\r\n <CircleIcon className=\"size-2 fill-current\" />\r\n </MenuRadioItemIndicatorPrimitive>\r\n </span>\r\n {children}\r\n </MenuRadioItemPrimitive>\r\n </MenuHighlightItemPrimitive>\r\n )\r\n}\r\n\r\ntype MenuSeparatorProps = MenuSeparatorPrimitiveProps\r\n\r\nfunction MenuSeparator({ className, ...props }: MenuSeparatorProps) {\r\n return (\r\n <MenuSeparatorPrimitive\r\n className={cn(\"-mx-1 my-1 h-px bg-border-primary\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuShortcutProps = MenuShortcutPrimitiveProps\r\n\r\nfunction MenuShortcut({ className, ...props }: MenuShortcutProps) {\r\n return (\r\n <MenuShortcutPrimitive\r\n className={cn(\r\n \"text-text-quaternary ml-auto text-body-regular-xs tracking-widest\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuArrowProps = MenuArrowPrimitiveProps\r\n\r\nfunction MenuArrow(props: MenuArrowProps) {\r\n return <MenuArrowPrimitive {...props} />\r\n}\r\n\r\ntype MenuSubmenuProps = MenuSubmenuPrimitiveProps\r\n\r\nfunction MenuSubmenu(props: MenuSubmenuProps) {\r\n return <MenuSubmenuPrimitive {...props} />\r\n}\r\n\r\ntype MenuSubmenuTriggerProps = MenuSubmenuTriggerPrimitiveProps & {\r\n inset?: boolean;\r\n children?: React.ReactNode;\r\n}\r\n\r\nfunction MenuSubmenuTrigger({\r\n disabled,\r\n className,\r\n inset,\r\n children,\r\n ...props\r\n}: MenuSubmenuTriggerProps) {\r\n return (\r\n <MenuHighlightItemPrimitive disabled={disabled}>\r\n <MenuSubmenuTriggerPrimitive\r\n disabled={disabled}\r\n data-inset={inset}\r\n className={cn(\r\n \"focus:text-text-primary data-[state=open]:text-text-primary flex cursor-default items-center rounded-sm px-2 py-1.5 text-body-regular outline-hidden select-none data-[inset]:pl-8\",\r\n \"aria-[expanded=true]:[&_[data-slot=chevron]]:rotate-90 [&_[data-slot=chevron]]:transition-transform [&_[data-slot=chevron]]:duration-300 [&_[data-slot=chevron]]:ease-in-out\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRightIcon\r\n data-slot=\"chevron\"\r\n className=\"ml-auto size-4\"\r\n />\r\n </MenuSubmenuTriggerPrimitive>\r\n </MenuHighlightItemPrimitive>\r\n )\r\n}\r\n\r\ntype MenuSubmenuPanelProps = MenuPopupPrimitiveProps &\r\n MenuPositionerPrimitiveProps\r\n\r\nfunction MenuSubmenuPanel({\r\n className,\r\n finalFocus,\r\n id,\r\n children,\r\n sideOffset = 4,\r\n transition = { duration: 0.2 },\r\n ...props\r\n}: MenuSubmenuPanelProps) {\r\n return (\r\n <MenuPortal>\r\n <MenuPositionerPrimitive\r\n className=\"z-50\"\r\n sideOffset={sideOffset}\r\n {...props}\r\n >\r\n <MenuPopupPrimitive\r\n finalFocus={finalFocus}\r\n id={id}\r\n transition={transition}\r\n className={cn(\r\n \"bg-bg-primary text-text-primary max-h-(--available-height) min-w-[8rem] origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border-primary p-1 shadow-xp-lg\",\r\n className,\r\n )}\r\n >\r\n {children}\r\n </MenuPopupPrimitive>\r\n </MenuPositionerPrimitive>\r\n </MenuPortal>\r\n )\r\n}\r\n\r\nexport {\r\n Menu,\r\n MenuTrigger,\r\n MenuPortal,\r\n MenuPanel,\r\n MenuGroup,\r\n MenuGroupLabel,\r\n MenuItem,\r\n MenuCheckboxItem,\r\n MenuRadioGroup,\r\n MenuRadioItem,\r\n MenuSeparator,\r\n MenuShortcut,\r\n MenuArrow,\r\n MenuSubmenu,\r\n MenuSubmenuTrigger,\r\n MenuSubmenuPanel,\r\n type MenuProps,\r\n type MenuTriggerProps,\r\n type MenuPortalProps,\r\n type MenuPanelProps,\r\n type MenuGroupProps,\r\n type MenuGroupLabelProps,\r\n type MenuItemProps,\r\n type MenuCheckboxItemProps,\r\n type MenuRadioGroupProps,\r\n type MenuRadioItemProps,\r\n type MenuSeparatorProps,\r\n type MenuShortcutProps,\r\n type MenuArrowProps,\r\n type MenuSubmenuProps,\r\n type MenuSubmenuTriggerProps,\r\n type MenuSubmenuPanelProps,\r\n}"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a,b,m,e,q,s,w,x,F}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a,b,m,e,q,s,w,x,F}from'./chunk-EL7P7FN5.js';import*as r from'react';import {ChevronDownIcon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function Y(o){let{items:n,placeholder:b$1="Select",icon:I,container:R,isPending:v,className:w$1,triggerClassName:L,contentClassName:k,disabled:T,infiniteScroll:P}=o,a$1=o.multiple===true,u=r.useMemo(()=>{if(a$1)return o.value;let e=o.value;return e?[e]:[]},[a$1,o.value,o.value]),$=r.useMemo(()=>{if(a$1)return o.defaultValue??[];let e=o.defaultValue;return e?[e]:[]},[a$1,o.defaultValue,o.defaultValue]),[q$1,c]=r.useState(()=>(u!==void 0?u:$)??[]);r.useEffect(()=>{u!==void 0&&c(u);},[u]);let m$1=q$1??[],s$1=m$1.length>0,[p,z]=r.useState(""),S=r.useMemo(()=>{if(!p.trim())return n;let e=p.toLowerCase();return n?.filter(l=>l.label.toLowerCase().includes(e)||l.value.toLowerCase().includes(e))},[n,p]),A=e=>{let l=e;if(a$1)c(l),o.onValueChange?.(l);else {let x=l.length>0?l[l.length-1]:null;c(x?[x]:[]),o.onValueChange?.(x);}},B=()=>{c([]),a$1?o.onValueChange?.([]):o.onValueChange?.(null);},E=r.useMemo(()=>s$1?a$1?`${b$1} (${m$1.length})`:m$1[0]?.label??b$1:a$1?`All ${b$1}`:b$1,[s$1,a$1,b$1,m$1]);return jsxs(a,{multiple:true,items:n,value:m$1,onValueChange:A,isItemEqualToValue:(e,l)=>e.value===l.value,disabled:T,children:[jsxs(b,{className:cn("group flex h-9 w-fit max-w-[220px] items-center gap-2 rounded-xp-card-base border bg-bg-primary px-3 text-body-medium-3 transition-colors","border-border-primary text-text-secondary hover:bg-bg-primary-hover",s$1&&"border-border-brand bg-bg-brand-primary text-text-brand-secondary","disabled:pointer-events-none disabled:opacity-50","data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary",L,w$1),children:[I&&jsx("span",{className:cn("size-4 shrink-0",s$1?"text-fg-brand-primary":"text-fg-quaternary"),children:I}),jsx("span",{className:"truncate",children:E}),jsx(ChevronDownIcon,{className:cn("size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180",s$1?"text-fg-brand-primary":"text-fg-quaternary")})]}),jsx(m,{container:R,className:cn("w-72",k),align:"start",sideOffset:8,children:a$1?jsxs("div",{className:"flex flex-col",children:[jsxs("div",{className:"flex items-center justify-between px-3 py-2 border-b border-border-primary",children:[jsx("span",{className:"text-label-semibold-3 text-text-primary",children:b$1}),jsxs("button",{type:"button",disabled:!s$1,onClick:B,className:cn("text-body-medium-3 transition-colors",s$1?"cursor-pointer text-text-brand-secondary hover:text-text-brand-secondary-hover":"cursor-not-allowed text-text-disabled"),children:["Clear",s$1?` (${m$1.length})`:""]})]}),jsx(e,{value:p,onChange:e=>z(e.target.value),placeholder:`Search ${b$1.toLowerCase()}...`}),jsx(q,{status:v||n===void 0?"pending":S?.length===0?"empty":null}),jsxs(s,{children:[S?.map(e=>jsx(w,{indicator:"checkbox",value:e,children:jsx(x,{children:e.label})},e.value)),jsx(F,{...P})]})]}):jsxs(Fragment,{children:[jsx(q,{status:v||n===void 0?"pending":n?.length===0?"empty":null}),jsxs(s,{children:[n?.map(e=>jsx(w,{value:e,children:jsx(x,{children:e.label})},e.value)),jsx(F,{...P})]})]})})]})}export{Y as a};//# sourceMappingURL=chunk-VHXY2BUM.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-VHXY2BUM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/composites/filter-combobox.tsx"],"names":["FilterCombobox","props","items","placeholder","icon","container","isPending","className","triggerClassName","contentClassName","disabled","infiniteScroll","isMultiple","controlledArray","single","defaultArray","internalValue","setInternalValue","valueArray","hasValue","search","setSearch","filteredItems","q","it","handleValueChange","next","arr","handleClear","triggerLabel","jsxs","Combobox","a","b","ComboboxTrigger","cn","jsx","ChevronDownIcon","ComboboxPopup","ComboboxInput","ComboboxStatus","ComboboxList","item","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll","Fragment"],"mappings":"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","file":"chunk-FDXCGFD2.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckCircle2Icon, ChevronDownIcon, SearchIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport {\r\n ComboboxItemIndicator as ComboboxItemIndicatorPrimitive\r\n} from \"../primitives/combobox\"\r\nimport { ComboboxHighlightItem, ComboboxItem, ComboboxItemTitle } from \"../ui/combobox\"\r\nimport { Input } from \"../ui/input\"\r\nimport {\r\n Combobox,\r\n ComboboxInfiniteScroll,\r\n ComboboxInput,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxPortal,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n type ComboboxProps,\r\n} from \"../ui/combobox\"\r\n\r\n// ─── Types ───\r\n\r\nexport type FilterComboboxItem = {\r\n label: string\r\n value: string\r\n}\r\n\r\ntype BaseProps = {\r\n items: FilterComboboxItem[] | undefined\r\n placeholder?: string\r\n icon?: React.ReactNode\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n isPending?: boolean\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n disabled?: boolean\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n}\r\n\r\ntype SingleProps = BaseProps & {\r\n multiple?: false\r\n value?: FilterComboboxItem | null\r\n defaultValue?: FilterComboboxItem | null\r\n onValueChange?: (value: FilterComboboxItem | null) => void\r\n}\r\n\r\ntype MultipleProps = BaseProps & {\r\n multiple: true\r\n value?: FilterComboboxItem[]\r\n defaultValue?: FilterComboboxItem[]\r\n onValueChange?: (value: FilterComboboxItem[]) => void\r\n}\r\n\r\nexport type FilterComboboxProps = SingleProps | MultipleProps\r\n\r\n// ─── Component ───\r\n\r\nfunction FilterCombobox(props: FilterComboboxProps) {\r\n const {\r\n items,\r\n placeholder = \"Select\",\r\n icon,\r\n container,\r\n isPending,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n disabled,\r\n infiniteScroll,\r\n } = props\r\n\r\n const isMultiple = props.multiple === true\r\n\r\n // Normalize controlled value to array for internal combobox (always multiple=true internally)\r\n const controlledArray = React.useMemo(() => {\r\n if (isMultiple) {\r\n return (props as MultipleProps).value\r\n }\r\n const single = (props as SingleProps).value\r\n return single ? [single] : []\r\n }, [isMultiple, (props as SingleProps).value, (props as MultipleProps).value])\r\n\r\n const defaultArray = React.useMemo(() => {\r\n if (isMultiple) {\r\n return (props as MultipleProps).defaultValue ?? []\r\n }\r\n const single = (props as SingleProps).defaultValue\r\n return single ? [single] : []\r\n }, [isMultiple, (props as SingleProps).defaultValue, (props as MultipleProps).defaultValue])\r\n\r\n const [internalValue, setInternalValue] = React.useState<FilterComboboxItem[]>(\r\n () =>\r\n (controlledArray !== undefined\r\n ? (controlledArray as FilterComboboxItem[])\r\n : (defaultArray as FilterComboboxItem[])) ?? []\r\n )\r\n\r\n // Sync when controlled value changes externally\r\n React.useEffect(() => {\r\n if (controlledArray !== undefined) {\r\n setInternalValue(controlledArray as FilterComboboxItem[])\r\n }\r\n }, [controlledArray])\r\n\r\n const valueArray = internalValue ?? []\r\n const hasValue = valueArray.length > 0\r\n\r\n // Search for multiple variant\r\n const [search, setSearch] = React.useState(\"\")\r\n\r\n const filteredItems = React.useMemo(() => {\r\n if (!search.trim()) return items\r\n const q = search.toLowerCase()\r\n return items?.filter(\r\n (it) => it.label.toLowerCase().includes(q) || it.value.toLowerCase().includes(q)\r\n )\r\n }, [items, search])\r\n\r\n const handleValueChange: ComboboxProps<FilterComboboxItem, boolean>[\"onValueChange\"] = (\r\n next\r\n ) => {\r\n const arr = next as FilterComboboxItem[]\r\n if (isMultiple) {\r\n setInternalValue(arr)\r\n ; (props as MultipleProps).onValueChange?.(arr)\r\n } else {\r\n // single: take last selected (base-ui gives array)\r\n const single = arr.length > 0 ? arr[arr.length - 1] : null\r\n const normalized = single ? [single] : []\r\n setInternalValue(normalized)\r\n ; (props as SingleProps).onValueChange?.(single)\r\n }\r\n }\r\n\r\n const handleClear = () => {\r\n setInternalValue([])\r\n if (isMultiple) {\r\n ; (props as MultipleProps).onValueChange?.([])\r\n } else {\r\n ; (props as SingleProps).onValueChange?.(null)\r\n }\r\n }\r\n\r\n // Trigger label\r\n const triggerLabel = React.useMemo(() => {\r\n if (!hasValue) {\r\n return isMultiple ? `All ${placeholder}` : placeholder\r\n }\r\n if (isMultiple) {\r\n return `${placeholder} (${valueArray.length})`\r\n }\r\n return valueArray[0]?.label ?? placeholder\r\n }, [hasValue, isMultiple, placeholder, valueArray])\r\n\r\n return (\r\n <Combobox\r\n multiple\r\n items={items}\r\n value={valueArray}\r\n onValueChange={handleValueChange}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n \"group flex h-9 w-fit max-w-[220px] items-center gap-2 rounded-xp-card-base border bg-bg-primary px-3 text-body-medium-3 transition-colors\",\r\n \"border-border-primary text-text-secondary hover:bg-bg-primary-hover\",\r\n hasValue && \"border-border-brand bg-bg-brand-primary text-text-brand-secondary\",\r\n \"disabled:pointer-events-none disabled:opacity-50\",\r\n \"data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {icon && (\r\n <span\r\n className={cn(\r\n \"size-4 shrink-0\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n >\r\n {icon}\r\n </span>\r\n )}\r\n <span className=\"truncate\">{triggerLabel}</span>\r\n <ChevronDownIcon\r\n className={cn(\r\n \"size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup\r\n container={container}\r\n className={cn(\"w-72\", contentClassName)}\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n {isMultiple ? (\r\n <div className=\"flex flex-col\">\r\n {/* Header: title + Clear (n) */}\r\n <div className=\"flex items-center justify-between px-3 py-2 border-b border-border-primary\">\r\n <span className=\"text-label-semibold-3 text-text-primary\">{placeholder}</span>\r\n <button\r\n type=\"button\"\r\n disabled={!hasValue}\r\n onClick={handleClear}\r\n className={cn(\r\n \"text-body-medium-3 transition-colors\",\r\n hasValue\r\n ? \"cursor-pointer text-text-brand-secondary hover:text-text-brand-secondary-hover\"\r\n : \"cursor-not-allowed text-text-disabled\"\r\n )}\r\n >\r\n Clear{hasValue ? ` (${valueArray.length})` : \"\"}\r\n </button>\r\n </div>\r\n\r\n {/* Search */}\r\n <ComboboxInput\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n placeholder={`Search ${placeholder.toLowerCase()}...`}\r\n />\r\n\r\n {/* List */}\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : filteredItems?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {filteredItems?.map((item) => (\r\n <ComboboxItem indicator=\"checkbox\" key={item.value} value={item}>\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n )\r\n )}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </div>\r\n ) : (\r\n <>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem key={item.value} value={item}>\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n ))}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </>\r\n )}\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { FilterCombobox }\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/composites/filter-combobox.tsx"],"names":["FilterCombobox","props","items","placeholder","icon","container","isPending","className","triggerClassName","contentClassName","disabled","infiniteScroll","isMultiple","controlledArray","single","defaultArray","internalValue","setInternalValue","valueArray","hasValue","search","setSearch","filteredItems","q","it","handleValueChange","next","arr","handleClear","triggerLabel","jsxs","Combobox","a","b","ComboboxTrigger","cn","jsx","ChevronDownIcon","ComboboxPopup","ComboboxInput","ComboboxStatus","ComboboxList","item","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll","Fragment"],"mappings":"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","file":"chunk-VHXY2BUM.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckCircle2Icon, ChevronDownIcon, SearchIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport {\r\n ComboboxItemIndicator as ComboboxItemIndicatorPrimitive\r\n} from \"../primitives/combobox\"\r\nimport { ComboboxHighlightItem, ComboboxItem, ComboboxItemTitle } from \"../ui/combobox\"\r\nimport { Input } from \"../ui/input\"\r\nimport {\r\n Combobox,\r\n ComboboxInfiniteScroll,\r\n ComboboxInput,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxPortal,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n type ComboboxProps,\r\n} from \"../ui/combobox\"\r\n\r\n// ─── Types ───\r\n\r\nexport type FilterComboboxItem = {\r\n label: string\r\n value: string\r\n}\r\n\r\ntype BaseProps = {\r\n items: FilterComboboxItem[] | undefined\r\n placeholder?: string\r\n icon?: React.ReactNode\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n isPending?: boolean\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n disabled?: boolean\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n}\r\n\r\ntype SingleProps = BaseProps & {\r\n multiple?: false\r\n value?: FilterComboboxItem | null\r\n defaultValue?: FilterComboboxItem | null\r\n onValueChange?: (value: FilterComboboxItem | null) => void\r\n}\r\n\r\ntype MultipleProps = BaseProps & {\r\n multiple: true\r\n value?: FilterComboboxItem[]\r\n defaultValue?: FilterComboboxItem[]\r\n onValueChange?: (value: FilterComboboxItem[]) => void\r\n}\r\n\r\nexport type FilterComboboxProps = SingleProps | MultipleProps\r\n\r\n// ─── Component ───\r\n\r\nfunction FilterCombobox(props: FilterComboboxProps) {\r\n const {\r\n items,\r\n placeholder = \"Select\",\r\n icon,\r\n container,\r\n isPending,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n disabled,\r\n infiniteScroll,\r\n } = props\r\n\r\n const isMultiple = props.multiple === true\r\n\r\n // Normalize controlled value to array for internal combobox (always multiple=true internally)\r\n const controlledArray = React.useMemo(() => {\r\n if (isMultiple) {\r\n return (props as MultipleProps).value\r\n }\r\n const single = (props as SingleProps).value\r\n return single ? [single] : []\r\n }, [isMultiple, (props as SingleProps).value, (props as MultipleProps).value])\r\n\r\n const defaultArray = React.useMemo(() => {\r\n if (isMultiple) {\r\n return (props as MultipleProps).defaultValue ?? []\r\n }\r\n const single = (props as SingleProps).defaultValue\r\n return single ? [single] : []\r\n }, [isMultiple, (props as SingleProps).defaultValue, (props as MultipleProps).defaultValue])\r\n\r\n const [internalValue, setInternalValue] = React.useState<FilterComboboxItem[]>(\r\n () =>\r\n (controlledArray !== undefined\r\n ? (controlledArray as FilterComboboxItem[])\r\n : (defaultArray as FilterComboboxItem[])) ?? []\r\n )\r\n\r\n // Sync when controlled value changes externally\r\n React.useEffect(() => {\r\n if (controlledArray !== undefined) {\r\n setInternalValue(controlledArray as FilterComboboxItem[])\r\n }\r\n }, [controlledArray])\r\n\r\n const valueArray = internalValue ?? []\r\n const hasValue = valueArray.length > 0\r\n\r\n // Search for multiple variant\r\n const [search, setSearch] = React.useState(\"\")\r\n\r\n const filteredItems = React.useMemo(() => {\r\n if (!search.trim()) return items\r\n const q = search.toLowerCase()\r\n return items?.filter(\r\n (it) => it.label.toLowerCase().includes(q) || it.value.toLowerCase().includes(q)\r\n )\r\n }, [items, search])\r\n\r\n const handleValueChange: ComboboxProps<FilterComboboxItem, boolean>[\"onValueChange\"] = (\r\n next\r\n ) => {\r\n const arr = next as FilterComboboxItem[]\r\n if (isMultiple) {\r\n setInternalValue(arr)\r\n ; (props as MultipleProps).onValueChange?.(arr)\r\n } else {\r\n // single: take last selected (base-ui gives array)\r\n const single = arr.length > 0 ? arr[arr.length - 1] : null\r\n const normalized = single ? [single] : []\r\n setInternalValue(normalized)\r\n ; (props as SingleProps).onValueChange?.(single)\r\n }\r\n }\r\n\r\n const handleClear = () => {\r\n setInternalValue([])\r\n if (isMultiple) {\r\n ; (props as MultipleProps).onValueChange?.([])\r\n } else {\r\n ; (props as SingleProps).onValueChange?.(null)\r\n }\r\n }\r\n\r\n // Trigger label\r\n const triggerLabel = React.useMemo(() => {\r\n if (!hasValue) {\r\n return isMultiple ? `All ${placeholder}` : placeholder\r\n }\r\n if (isMultiple) {\r\n return `${placeholder} (${valueArray.length})`\r\n }\r\n return valueArray[0]?.label ?? placeholder\r\n }, [hasValue, isMultiple, placeholder, valueArray])\r\n\r\n return (\r\n <Combobox\r\n multiple\r\n items={items}\r\n value={valueArray}\r\n onValueChange={handleValueChange}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n \"group flex h-9 w-fit max-w-[220px] items-center gap-2 rounded-xp-card-base border bg-bg-primary px-3 text-body-medium-3 transition-colors\",\r\n \"border-border-primary text-text-secondary hover:bg-bg-primary-hover\",\r\n hasValue && \"border-border-brand bg-bg-brand-primary text-text-brand-secondary\",\r\n \"disabled:pointer-events-none disabled:opacity-50\",\r\n \"data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {icon && (\r\n <span\r\n className={cn(\r\n \"size-4 shrink-0\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n >\r\n {icon}\r\n </span>\r\n )}\r\n <span className=\"truncate\">{triggerLabel}</span>\r\n <ChevronDownIcon\r\n className={cn(\r\n \"size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup\r\n container={container}\r\n className={cn(\"w-72\", contentClassName)}\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n {isMultiple ? (\r\n <div className=\"flex flex-col\">\r\n {/* Header: title + Clear (n) */}\r\n <div className=\"flex items-center justify-between px-3 py-2 border-b border-border-primary\">\r\n <span className=\"text-label-semibold-3 text-text-primary\">{placeholder}</span>\r\n <button\r\n type=\"button\"\r\n disabled={!hasValue}\r\n onClick={handleClear}\r\n className={cn(\r\n \"text-body-medium-3 transition-colors\",\r\n hasValue\r\n ? \"cursor-pointer text-text-brand-secondary hover:text-text-brand-secondary-hover\"\r\n : \"cursor-not-allowed text-text-disabled\"\r\n )}\r\n >\r\n Clear{hasValue ? ` (${valueArray.length})` : \"\"}\r\n </button>\r\n </div>\r\n\r\n {/* Search */}\r\n <ComboboxInput\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n placeholder={`Search ${placeholder.toLowerCase()}...`}\r\n />\r\n\r\n {/* List */}\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : filteredItems?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {filteredItems?.map((item) => (\r\n <ComboboxItem indicator=\"checkbox\" key={item.value} value={item}>\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n )\r\n )}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </div>\r\n ) : (\r\n <>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem key={item.value} value={item}>\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n ))}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </>\r\n )}\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { FilterCombobox }\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {b,c as c$1}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {b,c as c$1}from'./chunk-2XZRLJCN.js';import*as C from'react';import {Menu}from'@base-ui/react/menu';import {AnimatePresence,motion}from'motion/react';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {useDataState}from'@xploreu/hooks/use-data-state';import {getStrictContext}from'@xploreu/lib/get-strict-context';import {jsx}from'react/jsx-runtime';var [T,c]=getStrictContext("MenuActiveValueContext"),[R,k]=getStrictContext("MenuContext");function A(e){let[n,o]=useControlledState({value:e?.open,defaultValue:e?.defaultOpen,onChange:e?.onOpenChange}),[i,u]=C.useState(null);return jsx(T,{value:{highlightedValue:i,setHighlightedValue:u},children:jsx(R,{value:{isOpen:n,setIsOpen:o},children:jsx(Menu.Root,{"data-slot":"menu",...e,onOpenChange:o})})})}function w(e){return jsx(Menu.Trigger,{"data-slot":"menu-trigger",...e})}function D(e){let{isOpen:n}=k();return jsx(AnimatePresence,{children:n&&jsx(Menu.Portal,{"data-slot":"menu-portal",keepMounted:true,...e})})}function B(e){return jsx(Menu.Positioner,{"data-slot":"menu-positioner",...e})}function E({finalFocus:e,id:n,transition:o={duration:.2},style:i,...u}){return jsx(Menu.Popup,{finalFocus:e,id:n,render:jsx(motion.div,{animate:{opacity:1,scale:1},"data-slot":"menu-popup",exit:{opacity:0,scale:.95},initial:{opacity:0,scale:.95},style:{willChange:"opacity, transform",...i},transition:o,...u},"menu-popup")})}function F(e){return jsx(Menu.Group,{"data-slot":"menu-group",...e})}function q(e){return jsx(Menu.GroupLabel,{"data-slot":"menu-group-label",...e})}function z(e){return jsx(Menu.Separator,{"data-slot":"menu-separator",...e})}function J(e){return jsx("span",{"data-slot":"menu-shortcut",...e})}function K(e){return jsx(Menu.Arrow,{"data-slot":"menu-arrow",...e})}function N({transition:e={type:"spring",stiffness:350,damping:35},...n}){let{highlightedValue:o}=c();return jsx(b,{click:false,controlledItems:true,"data-slot":"menu-highlight",transition:e,value:o,...n})}function Q(e){return jsx(c$1,{"data-slot":"menu-highlight-item",...e})}function U({disabled:e,label:n,closeOnClick:o,nativeButton:i,id:u,...s}){let{setHighlightedValue:m}=c(),[,p]=useDataState("highlighted",void 0,a=>{if(a===true){let d=p.current,l=d?.dataset.value||d?.id||null;l&&m(l);}});return jsx(Menu.Item,{ref:p,closeOnClick:o,"data-slot":"menu-item",disabled:e,id:u,label:n,nativeButton:i,...s})}function W({label:e,defaultChecked:n,checked:o,onCheckedChange:i,disabled:u,closeOnClick:s,nativeButton:m,id:p,...a}){let{setHighlightedValue:d}=c(),[,l]=useDataState("highlighted",void 0,M=>{if(M===true){let h=l.current,y=h?.dataset.value||h?.id||null;y&&d(y);}});return jsx(Menu.CheckboxItem,{ref:l,checked:o,closeOnClick:s,"data-slot":"menu-checkbox-item",defaultChecked:n,disabled:u,id:p,label:e,nativeButton:m,onCheckedChange:i,...a})}function X({keepMounted:e,...n}){return jsx(Menu.CheckboxItemIndicator,{"data-slot":"menu-checkbox-item-indicator",keepMounted:e,render:jsx(motion.div,{"data-slot":"menu-checkbox-item-indicator",...n})})}function Y(e){return jsx(Menu.RadioGroup,{"data-slot":"menu-radio-group",...e})}function Z({value:e,disabled:n,label:o,closeOnClick:i,nativeButton:u,id:s,...m}){let{setHighlightedValue:p}=c(),[,a]=useDataState("highlighted",void 0,d=>{if(d===true){let l=a.current,M=l?.dataset.value||l?.id||null;M&&p(M);}});return jsx(Menu.RadioItem,{ref:a,closeOnClick:i,"data-slot":"menu-radio-item",disabled:n,id:s,label:o,nativeButton:u,value:e,...m})}function _({keepMounted:e,...n}){return jsx(Menu.RadioItemIndicator,{"data-slot":"menu-radio-item-indicator",keepMounted:e,render:jsx(motion.div,{"data-slot":"menu-radio-item-indicator",...n})})}function $(e){let[n,o]=useControlledState({value:e?.open,defaultValue:e?.defaultOpen,onChange:e?.onOpenChange});return jsx(R,{value:{isOpen:n,setIsOpen:o},children:jsx(Menu.SubmenuRoot,{"data-slot":"menu-submenu",...e,onOpenChange:o})})}function j({label:e,id:n,nativeButton:o,...i}){let{setHighlightedValue:u}=c(),[,s]=useDataState("highlighted",void 0,m=>{if(m===true){let p=s.current,a=p?.dataset.value||p?.id||null;a&&u(a);}});return jsx(Menu.SubmenuTrigger,{ref:s,"data-slot":"menu-submenu-trigger",id:n,label:e,nativeButton:o,...i})}export{c as a,k as b,A as c,w as d,D as e,B as f,E as g,F as h,q as i,z as j,J as k,K as l,N as m,Q as n,U as o,W as p,X as q,Y as r,Z as s,_ as t,$ as u,j as v};//# sourceMappingURL=chunk-VNU37GJC.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-VNU37GJC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/primitives/menu.tsx"],"names":["MenuActiveValueProvider","useMenuActiveValue","getStrictContext","MenuProvider","useMenu","Menu","props","isOpen","setIsOpen","useControlledState","highlightedValue","setHighlightedValue","jsx","MenuPrimitive","MenuTrigger","MenuPortal","AnimatePresence","MenuPositioner","MenuPopup","finalFocus","id","transition","style","motion","MenuGroup","MenuGroupLabel","MenuSeparator","MenuShortcut","MenuArrow","MenuHighlight","Highlight","MenuHighlightItem","HighlightItem","MenuItem","disabled","label","closeOnClick","nativeButton","highlightedRef","useDataState","value","el","v","MenuCheckboxItem","defaultChecked","checked","onCheckedChange","MenuCheckboxItemIndicator","keepMounted","MenuRadioGroup","MenuRadioItem","MenuRadioItemIndicator","MenuSubmenu","MenuSubmenuTrigger"],"mappings":"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","file":"chunk-JP737TCG.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\r\nimport {\r\n AnimatePresence,\r\n type HTMLMotionProps,\r\n motion\r\n} from \"motion/react\"\r\n\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { useDataState } from \"@xploreu/hooks/use-data-state\"\r\nimport { getStrictContext } from \"@xploreu/lib/get-strict-context\"\r\n\r\nimport {\r\n Highlight,\r\n HighlightItem,\r\n type HighlightItemProps,\r\n type HighlightProps\r\n} from \"../effects/highlight\"\r\n\r\ntype MenuActiveValueContextType = {\r\n highlightedValue: string | null;\r\n setHighlightedValue: (value: string | null) => void;\r\n}\r\n\r\ntype MenuContextType = {\r\n isOpen: boolean;\r\n setIsOpen: MenuProps[\"onOpenChange\"];\r\n}\r\n\r\nconst [MenuActiveValueProvider, useMenuActiveValue] =\r\n getStrictContext<MenuActiveValueContextType>(\"MenuActiveValueContext\")\r\n\r\nconst [MenuProvider, useMenu] =\r\n getStrictContext<MenuContextType>(\"MenuContext\")\r\n\r\ntype MenuProps = React.ComponentProps<typeof MenuPrimitive.Root>\r\n\r\nfunction Menu(props: MenuProps) {\r\n const [isOpen, setIsOpen] = useControlledState({\r\n value: props?.open,\r\n defaultValue: props?.defaultOpen,\r\n onChange: props?.onOpenChange,\r\n })\r\n const [highlightedValue, setHighlightedValue] = React.useState<string | null>(\r\n null,\r\n )\r\n\r\n return (\r\n <MenuActiveValueProvider value={{ highlightedValue, setHighlightedValue }}>\r\n <MenuProvider value={{ isOpen, setIsOpen }}>\r\n <MenuPrimitive.Root\r\n data-slot=\"menu\"\r\n {...props}\r\n onOpenChange={setIsOpen}\r\n />\r\n </MenuProvider>\r\n </MenuActiveValueProvider>\r\n )\r\n}\r\n\r\ntype MenuTriggerProps = React.ComponentProps<typeof MenuPrimitive.Trigger>\r\n\r\nfunction MenuTrigger(props: MenuTriggerProps) {\r\n return <MenuPrimitive.Trigger data-slot=\"menu-trigger\" {...props} />\r\n}\r\n\r\ntype MenuPortalProps = Omit<\r\n React.ComponentProps<typeof MenuPrimitive.Portal>,\r\n \"keepMounted\"\r\n>\r\n\r\nfunction MenuPortal(props: MenuPortalProps) {\r\n const { isOpen } = useMenu()\r\n\r\n return (\r\n <AnimatePresence>\r\n {isOpen && (\r\n <MenuPrimitive.Portal\r\n data-slot=\"menu-portal\"\r\n keepMounted\r\n {...props}\r\n />\r\n )}\r\n </AnimatePresence>\r\n )\r\n}\r\n\r\ntype MenuPositionerProps = React.ComponentProps<\r\n typeof MenuPrimitive.Positioner\r\n>\r\n\r\nfunction MenuPositioner(props: MenuPositionerProps) {\r\n return (\r\n <MenuPrimitive.Positioner\r\n data-slot=\"menu-positioner\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuPopupProps = Omit<\r\n React.ComponentProps<typeof MenuPrimitive.Popup>,\r\n \"render\"\r\n> &\r\n HTMLMotionProps<\"div\">\r\n\r\nfunction MenuPopup({\r\n finalFocus,\r\n id,\r\n transition = { duration: 0.2 },\r\n style,\r\n ...props\r\n}: MenuPopupProps) {\r\n return (\r\n <MenuPrimitive.Popup\r\n finalFocus={finalFocus}\r\n id={id}\r\n render={\r\n <motion.div\r\n key=\"menu-popup\"\r\n animate={{ opacity: 1, scale: 1 }}\r\n data-slot=\"menu-popup\"\r\n exit={{ opacity: 0, scale: 0.95 }}\r\n initial={{ opacity: 0, scale: 0.95 }}\r\n style={{ willChange: \"opacity, transform\", ...style }}\r\n transition={transition}\r\n {...props}\r\n />\r\n }\r\n />\r\n )\r\n}\r\n\r\ntype MenuGroupProps = React.ComponentProps<typeof MenuPrimitive.Group>\r\n\r\nfunction MenuGroup(props: MenuGroupProps) {\r\n return <MenuPrimitive.Group data-slot=\"menu-group\" {...props} />\r\n}\r\n\r\ntype MenuGroupLabelProps = React.ComponentProps<\r\n typeof MenuPrimitive.GroupLabel\r\n>\r\n\r\nfunction MenuGroupLabel(props: MenuGroupLabelProps) {\r\n return (\r\n <MenuPrimitive.GroupLabel\r\n data-slot=\"menu-group-label\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuSeparatorProps = React.ComponentProps<typeof MenuPrimitive.Separator>\r\n\r\nfunction MenuSeparator(props: MenuSeparatorProps) {\r\n return <MenuPrimitive.Separator data-slot=\"menu-separator\" {...props} />\r\n}\r\n\r\ntype MenuShortcutProps = React.ComponentProps<\"span\">\r\n\r\nfunction MenuShortcut(props: MenuShortcutProps) {\r\n return <span data-slot=\"menu-shortcut\" {...props} />\r\n}\r\n\r\ntype MenuArrowProps = React.ComponentProps<typeof MenuPrimitive.Arrow>\r\n\r\nfunction MenuArrow(props: MenuArrowProps) {\r\n return <MenuPrimitive.Arrow data-slot=\"menu-arrow\" {...props} />\r\n}\r\n\r\ntype MenuHighlightProps = Omit<\r\n HighlightProps,\r\n \"controlledItems\" | \"enabled\" | \"hover\"\r\n> & {\r\n animateOnHover?: boolean;\r\n}\r\n\r\nfunction MenuHighlight({\r\n transition = { type: \"spring\", stiffness: 350, damping: 35 },\r\n ...props\r\n}: MenuHighlightProps) {\r\n const { highlightedValue } = useMenuActiveValue()\r\n\r\n return (\r\n <Highlight\r\n click={false}\r\n controlledItems\r\n data-slot=\"menu-highlight\"\r\n transition={transition}\r\n value={highlightedValue}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuHighlightItemProps = HighlightItemProps\r\n\r\nfunction MenuHighlightItem(props: MenuHighlightItemProps) {\r\n return <HighlightItem data-slot=\"menu-highlight-item\" {...props} />\r\n}\r\n\r\ntype MenuItemProps = Omit<\r\n React.ComponentProps<typeof MenuPrimitive.Item>,\r\n \"render\"\r\n> &\r\n HTMLMotionProps<\"div\">\r\n\r\nfunction MenuItem({\r\n disabled,\r\n label,\r\n closeOnClick,\r\n nativeButton,\r\n id,\r\n ...props\r\n}: MenuItemProps) {\r\n const { setHighlightedValue } = useMenuActiveValue()\r\n const [, highlightedRef] = useDataState<HTMLDivElement>(\r\n \"highlighted\",\r\n undefined,\r\n (value) => {\r\n if (value === true) {\r\n const el = highlightedRef.current\r\n const v = el?.dataset.value || el?.id || null\r\n if (v) setHighlightedValue(v)\r\n }\r\n },\r\n )\r\n\r\n return (\r\n <MenuPrimitive.Item\r\n ref={highlightedRef}\r\n closeOnClick={closeOnClick}\r\n data-slot=\"menu-item\"\r\n disabled={disabled}\r\n id={id}\r\n label={label}\r\n nativeButton={nativeButton}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuCheckboxItemProps = Omit<\r\n React.ComponentProps<typeof MenuPrimitive.CheckboxItem>,\r\n \"render\"\r\n>\r\n\r\nfunction MenuCheckboxItem({\r\n label,\r\n defaultChecked,\r\n checked,\r\n onCheckedChange,\r\n disabled,\r\n closeOnClick,\r\n nativeButton,\r\n id,\r\n ...props\r\n}: MenuCheckboxItemProps) {\r\n const { setHighlightedValue } = useMenuActiveValue()\r\n const [, highlightedRef] = useDataState<HTMLDivElement>(\r\n \"highlighted\",\r\n undefined,\r\n (value) => {\r\n if (value === true) {\r\n const el = highlightedRef.current\r\n const v = el?.dataset.value || el?.id || null\r\n if (v) setHighlightedValue(v)\r\n }\r\n },\r\n )\r\n\r\n return (\r\n <MenuPrimitive.CheckboxItem\r\n ref={highlightedRef}\r\n checked={checked}\r\n closeOnClick={closeOnClick}\r\n data-slot=\"menu-checkbox-item\"\r\n defaultChecked={defaultChecked}\r\n disabled={disabled}\r\n id={id}\r\n label={label}\r\n nativeButton={nativeButton}\r\n onCheckedChange={onCheckedChange}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuCheckboxItemIndicatorProps = Omit<\r\n React.ComponentProps<typeof MenuPrimitive.CheckboxItemIndicator>,\r\n \"render\"\r\n> &\r\n HTMLMotionProps<\"div\">\r\n\r\nfunction MenuCheckboxItemIndicator({\r\n keepMounted,\r\n ...props\r\n}: MenuCheckboxItemIndicatorProps) {\r\n return (\r\n <MenuPrimitive.CheckboxItemIndicator\r\n data-slot=\"menu-checkbox-item-indicator\"\r\n keepMounted={keepMounted}\r\n render={\r\n <motion.div data-slot=\"menu-checkbox-item-indicator\" {...props} />\r\n }\r\n />\r\n )\r\n}\r\n\r\ntype MenuRadioGroupProps = React.ComponentProps<\r\n typeof MenuPrimitive.RadioGroup\r\n>\r\n\r\nfunction MenuRadioGroup(props: MenuRadioGroupProps) {\r\n return <MenuPrimitive.RadioGroup data-slot=\"menu-radio-group\" {...props} />\r\n}\r\n\r\ntype MenuRadioItemProps = Omit<\r\n React.ComponentProps<typeof MenuPrimitive.RadioItem>,\r\n \"render\"\r\n>\r\n\r\nfunction MenuRadioItem({\r\n value,\r\n disabled,\r\n label,\r\n closeOnClick,\r\n nativeButton,\r\n id,\r\n ...props\r\n}: MenuRadioItemProps) {\r\n const { setHighlightedValue } = useMenuActiveValue()\r\n const [, highlightedRef] = useDataState<HTMLDivElement>(\r\n \"highlighted\",\r\n undefined,\r\n (value) => {\r\n if (value === true) {\r\n const el = highlightedRef.current\r\n const v = el?.dataset.value || el?.id || null\r\n if (v) setHighlightedValue(v)\r\n }\r\n },\r\n )\r\n\r\n return (\r\n <MenuPrimitive.RadioItem\r\n ref={highlightedRef}\r\n closeOnClick={closeOnClick}\r\n data-slot=\"menu-radio-item\"\r\n disabled={disabled}\r\n id={id}\r\n label={label}\r\n nativeButton={nativeButton}\r\n value={value}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuRadioItemIndicatorProps = Omit<\r\n React.ComponentProps<typeof MenuPrimitive.RadioItemIndicator>,\r\n \"render\"\r\n> &\r\n HTMLMotionProps<\"div\">\r\n\r\nfunction MenuRadioItemIndicator({\r\n keepMounted,\r\n ...props\r\n}: MenuRadioItemIndicatorProps) {\r\n return (\r\n <MenuPrimitive.RadioItemIndicator\r\n data-slot=\"menu-radio-item-indicator\"\r\n keepMounted={keepMounted}\r\n render={\r\n <motion.div data-slot=\"menu-radio-item-indicator\" {...props} />\r\n }\r\n />\r\n )\r\n}\r\n\r\ntype MenuSubmenuProps = React.ComponentProps<typeof MenuPrimitive.SubmenuRoot>\r\n\r\nfunction MenuSubmenu(props: MenuSubmenuProps) {\r\n const [isOpen, setIsOpen] = useControlledState({\r\n value: props?.open,\r\n defaultValue: props?.defaultOpen,\r\n onChange: props?.onOpenChange,\r\n })\r\n\r\n return (\r\n <MenuProvider value={{ isOpen, setIsOpen }}>\r\n <MenuPrimitive.SubmenuRoot\r\n data-slot=\"menu-submenu\"\r\n {...props}\r\n onOpenChange={setIsOpen}\r\n />\r\n </MenuProvider>\r\n )\r\n}\r\n\r\ntype MenuSubmenuTriggerProps = Omit<\r\n React.ComponentProps<typeof MenuPrimitive.SubmenuTrigger>,\r\n \"render\"\r\n> &\r\n HTMLMotionProps<\"div\"> & {\r\n disabled?: boolean;\r\n }\r\n\r\nfunction MenuSubmenuTrigger({\r\n label,\r\n id,\r\n nativeButton,\r\n ...props\r\n}: MenuSubmenuTriggerProps) {\r\n const { setHighlightedValue } = useMenuActiveValue()\r\n const [, highlightedRef] = useDataState<HTMLDivElement>(\r\n \"highlighted\",\r\n undefined,\r\n (value) => {\r\n if (value === true) {\r\n const el = highlightedRef.current\r\n const v = el?.dataset.value || el?.id || null\r\n if (v) setHighlightedValue(v)\r\n }\r\n },\r\n )\r\n\r\n return (\r\n <MenuPrimitive.SubmenuTrigger\r\n ref={highlightedRef}\r\n data-slot=\"menu-submenu-trigger\"\r\n id={id}\r\n label={label}\r\n nativeButton={nativeButton}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Menu,\r\n MenuTrigger,\r\n MenuPortal,\r\n MenuPositioner,\r\n MenuPopup,\r\n MenuArrow,\r\n MenuItem,\r\n MenuCheckboxItem,\r\n MenuCheckboxItemIndicator,\r\n MenuRadioGroup,\r\n MenuRadioItem,\r\n MenuRadioItemIndicator,\r\n MenuGroup,\r\n MenuGroupLabel,\r\n MenuSeparator,\r\n MenuShortcut,\r\n MenuHighlight,\r\n MenuHighlightItem,\r\n MenuSubmenu,\r\n MenuSubmenuTrigger,\r\n useMenuActiveValue,\r\n useMenu,\r\n type MenuProps,\r\n type MenuTriggerProps,\r\n type MenuPortalProps,\r\n type MenuPositionerProps,\r\n type MenuPopupProps,\r\n type MenuArrowProps,\r\n type MenuItemProps,\r\n type MenuCheckboxItemProps,\r\n type MenuCheckboxItemIndicatorProps,\r\n type MenuRadioItemProps,\r\n type MenuRadioItemIndicatorProps,\r\n type MenuRadioGroupProps,\r\n type MenuGroupProps,\r\n type MenuGroupLabelProps,\r\n type MenuSeparatorProps,\r\n type MenuShortcutProps,\r\n type MenuHighlightProps,\r\n type MenuHighlightItemProps,\r\n type MenuSubmenuProps,\r\n type MenuSubmenuTriggerProps,\r\n type MenuActiveValueContextType,\r\n type MenuContextType,\r\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/primitives/menu.tsx"],"names":["MenuActiveValueProvider","useMenuActiveValue","getStrictContext","MenuProvider","useMenu","Menu","props","isOpen","setIsOpen","useControlledState","highlightedValue","setHighlightedValue","jsx","MenuPrimitive","MenuTrigger","MenuPortal","AnimatePresence","MenuPositioner","MenuPopup","finalFocus","id","transition","style","motion","MenuGroup","MenuGroupLabel","MenuSeparator","MenuShortcut","MenuArrow","MenuHighlight","Highlight","MenuHighlightItem","HighlightItem","MenuItem","disabled","label","closeOnClick","nativeButton","highlightedRef","useDataState","value","el","v","MenuCheckboxItem","defaultChecked","checked","onCheckedChange","MenuCheckboxItemIndicator","keepMounted","MenuRadioGroup","MenuRadioItem","MenuRadioItemIndicator","MenuSubmenu","MenuSubmenuTrigger"],"mappings":"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","file":"chunk-VNU37GJC.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\r\nimport {\r\n AnimatePresence,\r\n type HTMLMotionProps,\r\n motion\r\n} from \"motion/react\"\r\n\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { useDataState } from \"@xploreu/hooks/use-data-state\"\r\nimport { getStrictContext } from \"@xploreu/lib/get-strict-context\"\r\n\r\nimport {\r\n Highlight,\r\n HighlightItem,\r\n type HighlightItemProps,\r\n type HighlightProps\r\n} from \"../effects/highlight\"\r\n\r\ntype MenuActiveValueContextType = {\r\n highlightedValue: string | null;\r\n setHighlightedValue: (value: string | null) => void;\r\n}\r\n\r\ntype MenuContextType = {\r\n isOpen: boolean;\r\n setIsOpen: MenuProps[\"onOpenChange\"];\r\n}\r\n\r\nconst [MenuActiveValueProvider, useMenuActiveValue] =\r\n getStrictContext<MenuActiveValueContextType>(\"MenuActiveValueContext\")\r\n\r\nconst [MenuProvider, useMenu] =\r\n getStrictContext<MenuContextType>(\"MenuContext\")\r\n\r\ntype MenuProps = React.ComponentProps<typeof MenuPrimitive.Root>\r\n\r\nfunction Menu(props: MenuProps) {\r\n const [isOpen, setIsOpen] = useControlledState({\r\n value: props?.open,\r\n defaultValue: props?.defaultOpen,\r\n onChange: props?.onOpenChange,\r\n })\r\n const [highlightedValue, setHighlightedValue] = React.useState<string | null>(\r\n null,\r\n )\r\n\r\n return (\r\n <MenuActiveValueProvider value={{ highlightedValue, setHighlightedValue }}>\r\n <MenuProvider value={{ isOpen, setIsOpen }}>\r\n <MenuPrimitive.Root\r\n data-slot=\"menu\"\r\n {...props}\r\n onOpenChange={setIsOpen}\r\n />\r\n </MenuProvider>\r\n </MenuActiveValueProvider>\r\n )\r\n}\r\n\r\ntype MenuTriggerProps = React.ComponentProps<typeof MenuPrimitive.Trigger>\r\n\r\nfunction MenuTrigger(props: MenuTriggerProps) {\r\n return <MenuPrimitive.Trigger data-slot=\"menu-trigger\" {...props} />\r\n}\r\n\r\ntype MenuPortalProps = Omit<\r\n React.ComponentProps<typeof MenuPrimitive.Portal>,\r\n \"keepMounted\"\r\n>\r\n\r\nfunction MenuPortal(props: MenuPortalProps) {\r\n const { isOpen } = useMenu()\r\n\r\n return (\r\n <AnimatePresence>\r\n {isOpen && (\r\n <MenuPrimitive.Portal\r\n data-slot=\"menu-portal\"\r\n keepMounted\r\n {...props}\r\n />\r\n )}\r\n </AnimatePresence>\r\n )\r\n}\r\n\r\ntype MenuPositionerProps = React.ComponentProps<\r\n typeof MenuPrimitive.Positioner\r\n>\r\n\r\nfunction MenuPositioner(props: MenuPositionerProps) {\r\n return (\r\n <MenuPrimitive.Positioner\r\n data-slot=\"menu-positioner\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuPopupProps = Omit<\r\n React.ComponentProps<typeof MenuPrimitive.Popup>,\r\n \"render\"\r\n> &\r\n HTMLMotionProps<\"div\">\r\n\r\nfunction MenuPopup({\r\n finalFocus,\r\n id,\r\n transition = { duration: 0.2 },\r\n style,\r\n ...props\r\n}: MenuPopupProps) {\r\n return (\r\n <MenuPrimitive.Popup\r\n finalFocus={finalFocus}\r\n id={id}\r\n render={\r\n <motion.div\r\n key=\"menu-popup\"\r\n animate={{ opacity: 1, scale: 1 }}\r\n data-slot=\"menu-popup\"\r\n exit={{ opacity: 0, scale: 0.95 }}\r\n initial={{ opacity: 0, scale: 0.95 }}\r\n style={{ willChange: \"opacity, transform\", ...style }}\r\n transition={transition}\r\n {...props}\r\n />\r\n }\r\n />\r\n )\r\n}\r\n\r\ntype MenuGroupProps = React.ComponentProps<typeof MenuPrimitive.Group>\r\n\r\nfunction MenuGroup(props: MenuGroupProps) {\r\n return <MenuPrimitive.Group data-slot=\"menu-group\" {...props} />\r\n}\r\n\r\ntype MenuGroupLabelProps = React.ComponentProps<\r\n typeof MenuPrimitive.GroupLabel\r\n>\r\n\r\nfunction MenuGroupLabel(props: MenuGroupLabelProps) {\r\n return (\r\n <MenuPrimitive.GroupLabel\r\n data-slot=\"menu-group-label\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuSeparatorProps = React.ComponentProps<typeof MenuPrimitive.Separator>\r\n\r\nfunction MenuSeparator(props: MenuSeparatorProps) {\r\n return <MenuPrimitive.Separator data-slot=\"menu-separator\" {...props} />\r\n}\r\n\r\ntype MenuShortcutProps = React.ComponentProps<\"span\">\r\n\r\nfunction MenuShortcut(props: MenuShortcutProps) {\r\n return <span data-slot=\"menu-shortcut\" {...props} />\r\n}\r\n\r\ntype MenuArrowProps = React.ComponentProps<typeof MenuPrimitive.Arrow>\r\n\r\nfunction MenuArrow(props: MenuArrowProps) {\r\n return <MenuPrimitive.Arrow data-slot=\"menu-arrow\" {...props} />\r\n}\r\n\r\ntype MenuHighlightProps = Omit<\r\n HighlightProps,\r\n \"controlledItems\" | \"enabled\" | \"hover\"\r\n> & {\r\n animateOnHover?: boolean;\r\n}\r\n\r\nfunction MenuHighlight({\r\n transition = { type: \"spring\", stiffness: 350, damping: 35 },\r\n ...props\r\n}: MenuHighlightProps) {\r\n const { highlightedValue } = useMenuActiveValue()\r\n\r\n return (\r\n <Highlight\r\n click={false}\r\n controlledItems\r\n data-slot=\"menu-highlight\"\r\n transition={transition}\r\n value={highlightedValue}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuHighlightItemProps = HighlightItemProps\r\n\r\nfunction MenuHighlightItem(props: MenuHighlightItemProps) {\r\n return <HighlightItem data-slot=\"menu-highlight-item\" {...props} />\r\n}\r\n\r\ntype MenuItemProps = Omit<\r\n React.ComponentProps<typeof MenuPrimitive.Item>,\r\n \"render\"\r\n> &\r\n HTMLMotionProps<\"div\">\r\n\r\nfunction MenuItem({\r\n disabled,\r\n label,\r\n closeOnClick,\r\n nativeButton,\r\n id,\r\n ...props\r\n}: MenuItemProps) {\r\n const { setHighlightedValue } = useMenuActiveValue()\r\n const [, highlightedRef] = useDataState<HTMLDivElement>(\r\n \"highlighted\",\r\n undefined,\r\n (value) => {\r\n if (value === true) {\r\n const el = highlightedRef.current\r\n const v = el?.dataset.value || el?.id || null\r\n if (v) setHighlightedValue(v)\r\n }\r\n },\r\n )\r\n\r\n return (\r\n <MenuPrimitive.Item\r\n ref={highlightedRef}\r\n closeOnClick={closeOnClick}\r\n data-slot=\"menu-item\"\r\n disabled={disabled}\r\n id={id}\r\n label={label}\r\n nativeButton={nativeButton}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuCheckboxItemProps = Omit<\r\n React.ComponentProps<typeof MenuPrimitive.CheckboxItem>,\r\n \"render\"\r\n>\r\n\r\nfunction MenuCheckboxItem({\r\n label,\r\n defaultChecked,\r\n checked,\r\n onCheckedChange,\r\n disabled,\r\n closeOnClick,\r\n nativeButton,\r\n id,\r\n ...props\r\n}: MenuCheckboxItemProps) {\r\n const { setHighlightedValue } = useMenuActiveValue()\r\n const [, highlightedRef] = useDataState<HTMLDivElement>(\r\n \"highlighted\",\r\n undefined,\r\n (value) => {\r\n if (value === true) {\r\n const el = highlightedRef.current\r\n const v = el?.dataset.value || el?.id || null\r\n if (v) setHighlightedValue(v)\r\n }\r\n },\r\n )\r\n\r\n return (\r\n <MenuPrimitive.CheckboxItem\r\n ref={highlightedRef}\r\n checked={checked}\r\n closeOnClick={closeOnClick}\r\n data-slot=\"menu-checkbox-item\"\r\n defaultChecked={defaultChecked}\r\n disabled={disabled}\r\n id={id}\r\n label={label}\r\n nativeButton={nativeButton}\r\n onCheckedChange={onCheckedChange}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuCheckboxItemIndicatorProps = Omit<\r\n React.ComponentProps<typeof MenuPrimitive.CheckboxItemIndicator>,\r\n \"render\"\r\n> &\r\n HTMLMotionProps<\"div\">\r\n\r\nfunction MenuCheckboxItemIndicator({\r\n keepMounted,\r\n ...props\r\n}: MenuCheckboxItemIndicatorProps) {\r\n return (\r\n <MenuPrimitive.CheckboxItemIndicator\r\n data-slot=\"menu-checkbox-item-indicator\"\r\n keepMounted={keepMounted}\r\n render={\r\n <motion.div data-slot=\"menu-checkbox-item-indicator\" {...props} />\r\n }\r\n />\r\n )\r\n}\r\n\r\ntype MenuRadioGroupProps = React.ComponentProps<\r\n typeof MenuPrimitive.RadioGroup\r\n>\r\n\r\nfunction MenuRadioGroup(props: MenuRadioGroupProps) {\r\n return <MenuPrimitive.RadioGroup data-slot=\"menu-radio-group\" {...props} />\r\n}\r\n\r\ntype MenuRadioItemProps = Omit<\r\n React.ComponentProps<typeof MenuPrimitive.RadioItem>,\r\n \"render\"\r\n>\r\n\r\nfunction MenuRadioItem({\r\n value,\r\n disabled,\r\n label,\r\n closeOnClick,\r\n nativeButton,\r\n id,\r\n ...props\r\n}: MenuRadioItemProps) {\r\n const { setHighlightedValue } = useMenuActiveValue()\r\n const [, highlightedRef] = useDataState<HTMLDivElement>(\r\n \"highlighted\",\r\n undefined,\r\n (value) => {\r\n if (value === true) {\r\n const el = highlightedRef.current\r\n const v = el?.dataset.value || el?.id || null\r\n if (v) setHighlightedValue(v)\r\n }\r\n },\r\n )\r\n\r\n return (\r\n <MenuPrimitive.RadioItem\r\n ref={highlightedRef}\r\n closeOnClick={closeOnClick}\r\n data-slot=\"menu-radio-item\"\r\n disabled={disabled}\r\n id={id}\r\n label={label}\r\n nativeButton={nativeButton}\r\n value={value}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype MenuRadioItemIndicatorProps = Omit<\r\n React.ComponentProps<typeof MenuPrimitive.RadioItemIndicator>,\r\n \"render\"\r\n> &\r\n HTMLMotionProps<\"div\">\r\n\r\nfunction MenuRadioItemIndicator({\r\n keepMounted,\r\n ...props\r\n}: MenuRadioItemIndicatorProps) {\r\n return (\r\n <MenuPrimitive.RadioItemIndicator\r\n data-slot=\"menu-radio-item-indicator\"\r\n keepMounted={keepMounted}\r\n render={\r\n <motion.div data-slot=\"menu-radio-item-indicator\" {...props} />\r\n }\r\n />\r\n )\r\n}\r\n\r\ntype MenuSubmenuProps = React.ComponentProps<typeof MenuPrimitive.SubmenuRoot>\r\n\r\nfunction MenuSubmenu(props: MenuSubmenuProps) {\r\n const [isOpen, setIsOpen] = useControlledState({\r\n value: props?.open,\r\n defaultValue: props?.defaultOpen,\r\n onChange: props?.onOpenChange,\r\n })\r\n\r\n return (\r\n <MenuProvider value={{ isOpen, setIsOpen }}>\r\n <MenuPrimitive.SubmenuRoot\r\n data-slot=\"menu-submenu\"\r\n {...props}\r\n onOpenChange={setIsOpen}\r\n />\r\n </MenuProvider>\r\n )\r\n}\r\n\r\ntype MenuSubmenuTriggerProps = Omit<\r\n React.ComponentProps<typeof MenuPrimitive.SubmenuTrigger>,\r\n \"render\"\r\n> &\r\n HTMLMotionProps<\"div\"> & {\r\n disabled?: boolean;\r\n }\r\n\r\nfunction MenuSubmenuTrigger({\r\n label,\r\n id,\r\n nativeButton,\r\n ...props\r\n}: MenuSubmenuTriggerProps) {\r\n const { setHighlightedValue } = useMenuActiveValue()\r\n const [, highlightedRef] = useDataState<HTMLDivElement>(\r\n \"highlighted\",\r\n undefined,\r\n (value) => {\r\n if (value === true) {\r\n const el = highlightedRef.current\r\n const v = el?.dataset.value || el?.id || null\r\n if (v) setHighlightedValue(v)\r\n }\r\n },\r\n )\r\n\r\n return (\r\n <MenuPrimitive.SubmenuTrigger\r\n ref={highlightedRef}\r\n data-slot=\"menu-submenu-trigger\"\r\n id={id}\r\n label={label}\r\n nativeButton={nativeButton}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Menu,\r\n MenuTrigger,\r\n MenuPortal,\r\n MenuPositioner,\r\n MenuPopup,\r\n MenuArrow,\r\n MenuItem,\r\n MenuCheckboxItem,\r\n MenuCheckboxItemIndicator,\r\n MenuRadioGroup,\r\n MenuRadioItem,\r\n MenuRadioItemIndicator,\r\n MenuGroup,\r\n MenuGroupLabel,\r\n MenuSeparator,\r\n MenuShortcut,\r\n MenuHighlight,\r\n MenuHighlightItem,\r\n MenuSubmenu,\r\n MenuSubmenuTrigger,\r\n useMenuActiveValue,\r\n useMenu,\r\n type MenuProps,\r\n type MenuTriggerProps,\r\n type MenuPortalProps,\r\n type MenuPositionerProps,\r\n type MenuPopupProps,\r\n type MenuArrowProps,\r\n type MenuItemProps,\r\n type MenuCheckboxItemProps,\r\n type MenuCheckboxItemIndicatorProps,\r\n type MenuRadioItemProps,\r\n type MenuRadioItemIndicatorProps,\r\n type MenuRadioGroupProps,\r\n type MenuGroupProps,\r\n type MenuGroupLabelProps,\r\n type MenuSeparatorProps,\r\n type MenuShortcutProps,\r\n type MenuHighlightProps,\r\n type MenuHighlightItemProps,\r\n type MenuSubmenuProps,\r\n type MenuSubmenuTriggerProps,\r\n type MenuActiveValueContextType,\r\n type MenuContextType,\r\n}"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a,b,i,m,q,s,w,x,F}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a,b,i,m,q,s,w,x,F}from'./chunk-EL7P7FN5.js';import {a as a$1}from'./chunk-JH6RZ3QH.js';import'react';import {ChevronDownIcon}from'lucide-react';import'class-variance-authority';import {cn}from'@xploreu/lib/cn';import {jsxs,jsx}from'react/jsx-runtime';function B({items:t,value:f,defaultValue:g,onValueChange:d,placeholder:I="Select",icon:l,container:S,isPending:y,className:P,triggerClassName:V,contentClassName:v,disabled:N,size:h="md",infiniteScroll:R}){return jsxs(a,{items:t,value:f,defaultValue:g,onValueChange:d,isItemEqualToValue:(e,T)=>e.value===T.value,disabled:N,children:[jsxs(b,{className:cn(a$1({size:h}),"group flex cursor-pointer items-center gap-2 pr-3 text-left",V,P),children:[l&&jsx("span",{className:"size-4.5 shrink-0 text-fg-quaternary",children:l}),jsx("span",{className:"flex-1 truncate",children:jsx(i,{children:e=>jsx("span",{className:e?"text-text-primary":"text-text-placeholder",children:e?.label??I})})}),jsx(ChevronDownIcon,{className:"size-4 shrink-0 text-fg-quaternary transition-transform group-data-[popup-open]:rotate-180"})]}),jsxs(m,{container:S,className:cn("w-72",v),align:"start",sideOffset:8,children:[jsx(q,{status:y||t===void 0?"pending":t.length===0?"empty":null}),jsxs(s,{children:[t?.map(e=>jsx(w,{value:e,children:jsx(x,{children:e.label})},e.value)),jsx(F,{...R})]})]})]})}export{B as a};//# sourceMappingURL=chunk-ZWZMXZGN.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-ZWZMXZGN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/composites/combobox-simple.tsx"],"names":["ComboboxSimple","items","value","defaultValue","onValueChange","placeholder","icon","container","isPending","className","triggerClassName","contentClassName","disabled","size","infiniteScroll","jsxs","Combobox","a","b","ComboboxTrigger","cn","inputVariants","jsx","ComboboxValue","item","ChevronDownIcon","ComboboxPopup","ComboboxStatus","ComboboxList","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll"],"mappings":"mQA8CA,SAASA,CAAAA,CAAe,CACtB,KAAA,CAAAC,CAAAA,CACA,MAAAC,CAAAA,CACA,YAAA,CAAAC,EACA,aAAA,CAAAC,CAAAA,CACA,YAAAC,CAAAA,CAAc,QAAA,CACd,KAAAC,CAAAA,CACA,SAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CACA,UAAAC,CAAAA,CACA,gBAAA,CAAAC,EACA,gBAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,IAAA,CAAAC,EAAO,IAAA,CACP,cAAA,CAAAC,CACF,CAAA,CAAwB,CACtB,OACEC,IAAAA,CAACC,CAAAA,CAAA,CACC,KAAA,CAAOf,CAAAA,CACP,MAAOC,CAAAA,CACP,YAAA,CAAcC,EACd,aAAA,CAAeC,CAAAA,CACf,mBAAoB,CAACa,CAAAA,CAAGC,IAAMD,CAAAA,CAAE,KAAA,GAAUC,EAAE,KAAA,CAC5C,QAAA,CAAUN,EAEV,QAAA,CAAA,CAAAG,IAAAA,CAACI,EAAA,CACC,SAAA,CAAWC,GACTC,GAAAA,CAAc,CAAE,KAAAR,CAAK,CAAC,EACtB,6DAAA,CACAH,CAAAA,CACAD,CACF,CAAA,CAEC,QAAA,CAAA,CAAAH,CAAAA,EACCgB,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uCAAwC,QAAA,CAAAhB,CAAAA,CAAK,EAE/DgB,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,iBAAA,CACd,QAAA,CAAAA,IAACC,CAAAA,CAAA,CACE,SAACC,CAAAA,EACAF,GAAAA,CAAC,QAAK,SAAA,CAAWE,CAAAA,CAAO,oBAAsB,uBAAA,CAC3C,QAAA,CAAAA,GAAM,KAAA,EAASnB,CAAAA,CAClB,EAEJ,CAAA,CACF,CAAA,CACAiB,IAACG,eAAAA,CAAA,CACC,UAAU,4FAAA,CACZ,CAAA,CAAA,CACF,EAEAV,IAAAA,CAACW,CAAAA,CAAA,CACC,SAAA,CAAWnB,CAAAA,CACX,UAAWa,EAAAA,CAAG,MAAA,CAAQT,CAAgB,CAAA,CACtC,KAAA,CAAM,QACN,UAAA,CAAY,CAAA,CAEZ,UAAAW,GAAAA,CAACK,CAAAA,CAAA,CACC,MAAA,CACEnB,CAAAA,EAAaP,IAAU,MAAA,CACnB,SAAA,CACAA,EAAM,MAAA,GAAW,CAAA,CACf,QACA,IAAA,CAEV,CAAA,CACAc,KAACa,CAAAA,CAAA,CACE,UAAA3B,CAAAA,EAAO,GAAA,CAAKuB,GACXF,GAAAA,CAACO,CAAAA,CAAA,CAA8B,KAAA,CAAOL,CAAAA,CACpC,SAAAF,GAAAA,CAACQ,CAAAA,CAAA,CACE,QAAA,CAAAN,CAAAA,CAAK,MACR,CAAA,CAAA,CAHiBA,CAAAA,CAAK,KAIxB,CACD,CAAA,CACDF,IAACS,CAAAA,CAAA,CAAwB,GAAGjB,CAAAA,CAAgB,CAAA,CAAA,CAC9C,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/composites/combobox-simple.tsx"],"names":["ComboboxSimple","items","value","defaultValue","onValueChange","placeholder","icon","container","isPending","className","triggerClassName","contentClassName","disabled","size","infiniteScroll","jsxs","Combobox","a","b","ComboboxTrigger","cn","inputVariants","jsx","ComboboxValue","item","ChevronDownIcon","ComboboxPopup","ComboboxStatus","ComboboxList","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll"],"mappings":"mQA8CA,SAASA,CAAAA,CAAe,CACtB,KAAA,CAAAC,CAAAA,CACA,MAAAC,CAAAA,CACA,YAAA,CAAAC,EACA,aAAA,CAAAC,CAAAA,CACA,YAAAC,CAAAA,CAAc,QAAA,CACd,KAAAC,CAAAA,CACA,SAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CACA,UAAAC,CAAAA,CACA,gBAAA,CAAAC,EACA,gBAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,IAAA,CAAAC,EAAO,IAAA,CACP,cAAA,CAAAC,CACF,CAAA,CAAwB,CACtB,OACEC,IAAAA,CAACC,CAAAA,CAAA,CACC,KAAA,CAAOf,CAAAA,CACP,MAAOC,CAAAA,CACP,YAAA,CAAcC,EACd,aAAA,CAAeC,CAAAA,CACf,mBAAoB,CAACa,CAAAA,CAAGC,IAAMD,CAAAA,CAAE,KAAA,GAAUC,EAAE,KAAA,CAC5C,QAAA,CAAUN,EAEV,QAAA,CAAA,CAAAG,IAAAA,CAACI,EAAA,CACC,SAAA,CAAWC,GACTC,GAAAA,CAAc,CAAE,KAAAR,CAAK,CAAC,EACtB,6DAAA,CACAH,CAAAA,CACAD,CACF,CAAA,CAEC,QAAA,CAAA,CAAAH,CAAAA,EACCgB,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uCAAwC,QAAA,CAAAhB,CAAAA,CAAK,EAE/DgB,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,iBAAA,CACd,QAAA,CAAAA,IAACC,CAAAA,CAAA,CACE,SAACC,CAAAA,EACAF,GAAAA,CAAC,QAAK,SAAA,CAAWE,CAAAA,CAAO,oBAAsB,uBAAA,CAC3C,QAAA,CAAAA,GAAM,KAAA,EAASnB,CAAAA,CAClB,EAEJ,CAAA,CACF,CAAA,CACAiB,IAACG,eAAAA,CAAA,CACC,UAAU,4FAAA,CACZ,CAAA,CAAA,CACF,EAEAV,IAAAA,CAACW,CAAAA,CAAA,CACC,SAAA,CAAWnB,CAAAA,CACX,UAAWa,EAAAA,CAAG,MAAA,CAAQT,CAAgB,CAAA,CACtC,KAAA,CAAM,QACN,UAAA,CAAY,CAAA,CAEZ,UAAAW,GAAAA,CAACK,CAAAA,CAAA,CACC,MAAA,CACEnB,CAAAA,EAAaP,IAAU,MAAA,CACnB,SAAA,CACAA,EAAM,MAAA,GAAW,CAAA,CACf,QACA,IAAA,CAEV,CAAA,CACAc,KAACa,CAAAA,CAAA,CACE,UAAA3B,CAAAA,EAAO,GAAA,CAAKuB,GACXF,GAAAA,CAACO,CAAAA,CAAA,CAA8B,KAAA,CAAOL,CAAAA,CACpC,SAAAF,GAAAA,CAACQ,CAAAA,CAAA,CACE,QAAA,CAAAN,CAAAA,CAAK,MACR,CAAA,CAAA,CAHiBA,CAAAA,CAAK,KAIxB,CACD,CAAA,CACDF,IAACS,CAAAA,CAAA,CAAwB,GAAGjB,CAAAA,CAAgB,CAAA,CAAA,CAC9C,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ","file":"chunk-ZWZMXZGN.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { ChevronDownIcon } from \"lucide-react\"\r\nimport { type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { inputVariants } from \"../ui/input\"\r\nimport { ComboboxItem, ComboboxItemTitle } from \"../ui/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxInfiniteScroll,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxPortal,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n ComboboxValue,\r\n} from \"../ui/combobox\"\r\n\r\n// ─── Types ───\r\n\r\nexport type ComboboxSimpleItem = {\r\n label: string\r\n value: string\r\n}\r\n\r\nexport type ComboboxSimpleProps = {\r\n items: ComboboxSimpleItem[] | undefined\r\n value?: ComboboxSimpleItem | null\r\n defaultValue?: ComboboxSimpleItem | null\r\n onValueChange?: (value: ComboboxSimpleItem | null) => void\r\n placeholder?: string\r\n icon?: React.ReactNode\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n isPending?: boolean\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n disabled?: boolean\r\n size?: VariantProps<typeof inputVariants>[\"size\"]\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n}\r\n\r\n// ─── Component ───\r\n\r\nfunction ComboboxSimple({\r\n items,\r\n value,\r\n defaultValue,\r\n onValueChange,\r\n placeholder = \"Select\",\r\n icon,\r\n container,\r\n isPending,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n disabled,\r\n size = \"md\",\r\n infiniteScroll,\r\n}: ComboboxSimpleProps) {\r\n return (\r\n <Combobox\r\n items={items}\r\n value={value}\r\n defaultValue={defaultValue}\r\n onValueChange={onValueChange}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n inputVariants({ size }),\r\n \"group flex cursor-pointer items-center gap-2 pr-3 text-left\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {icon && (\r\n <span className=\"size-4.5 shrink-0 text-fg-quaternary\">{icon}</span>\r\n )}\r\n <span className=\"flex-1 truncate\">\r\n <ComboboxValue>\r\n {(item) => (\r\n <span className={item ? \"text-text-primary\" : \"text-text-placeholder\"}>\r\n {item?.label ?? placeholder}\r\n </span>\r\n )}\r\n </ComboboxValue>\r\n </span>\r\n <ChevronDownIcon\r\n className=\"size-4 shrink-0 text-fg-quaternary transition-transform group-data-[popup-open]:rotate-180\"\r\n />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup\r\n container={container}\r\n className={cn(\"w-72\", contentClassName)}\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem key={item.value} value={item}>\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n ))}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { ComboboxSimple }\r\n"]}
|