@xploreu/components 0.4.48 → 0.4.50
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-6QWQDSWL.js → chunk-3PHZ2D2L.js} +2 -2
- package/dist/{chunk-6QWQDSWL.js.map → chunk-3PHZ2D2L.js.map} +1 -1
- package/dist/{chunk-Y2HN4RSA.js → chunk-6WWKP7KX.js} +2 -2
- package/dist/{chunk-Y2HN4RSA.js.map → chunk-6WWKP7KX.js.map} +1 -1
- package/dist/{chunk-I7XV55MM.js → chunk-7ZY7ZMEK.js} +2 -2
- package/dist/{chunk-I7XV55MM.js.map → chunk-7ZY7ZMEK.js.map} +1 -1
- package/dist/{chunk-RH7BQGTL.js → chunk-BRWBF2EN.js} +2 -2
- package/dist/{chunk-RH7BQGTL.js.map → chunk-BRWBF2EN.js.map} +1 -1
- package/dist/{chunk-SVNG3RLD.js → chunk-C5UISTOE.js} +2 -2
- package/dist/{chunk-SVNG3RLD.js.map → chunk-C5UISTOE.js.map} +1 -1
- package/dist/{chunk-V2PW53KI.js → chunk-CE6QYHWL.js} +2 -2
- package/dist/{chunk-V2PW53KI.js.map → chunk-CE6QYHWL.js.map} +1 -1
- package/dist/chunk-GC36Q7SO.js +2 -0
- package/dist/chunk-GC36Q7SO.js.map +1 -0
- package/dist/{chunk-M63WCJ22.js → chunk-GDWTPI4H.js} +2 -2
- package/dist/{chunk-M63WCJ22.js.map → chunk-GDWTPI4H.js.map} +1 -1
- package/dist/{chunk-3733D5Y7.js → chunk-HG2N6L3T.js} +2 -2
- package/dist/{chunk-3733D5Y7.js.map → chunk-HG2N6L3T.js.map} +1 -1
- package/dist/{chunk-G2GFDTP5.js → chunk-LPH7XAEU.js} +2 -2
- package/dist/{chunk-G2GFDTP5.js.map → chunk-LPH7XAEU.js.map} +1 -1
- package/dist/{chunk-3SORJB7P.js → chunk-M3QZRGBX.js} +2 -2
- package/dist/{chunk-3SORJB7P.js.map → chunk-M3QZRGBX.js.map} +1 -1
- package/dist/{chunk-C5HZCXIB.js → chunk-MPT2GZBB.js} +2 -2
- package/dist/{chunk-C5HZCXIB.js.map → chunk-MPT2GZBB.js.map} +1 -1
- package/dist/chunk-MVKKGQNL.js +2 -0
- package/dist/chunk-MVKKGQNL.js.map +1 -0
- package/dist/chunk-RKSAOD4G.js +2 -0
- package/dist/chunk-RKSAOD4G.js.map +1 -0
- package/dist/{chunk-BES6JPWQ.js → chunk-Y5YFPTOQ.js} +2 -2
- package/dist/{chunk-BES6JPWQ.js.map → chunk-Y5YFPTOQ.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/index.js.map +1 -1
- package/dist/composites/phone-input.js +1 -1
- package/dist/composites/profile-avatar.js +1 -1
- package/dist/form/form-input.js +1 -1
- package/dist/form/index.js +1 -1
- package/dist/icons/index.js +1 -1
- package/dist/primitives/index.js +1 -1
- package/dist/ui/avatar.js +1 -1
- package/dist/ui/combobox.js +1 -1
- package/dist/ui/date-multiple-picker.js +1 -1
- package/dist/ui/date-picker.js +1 -1
- package/dist/ui/date-range-picker.js +1 -1
- package/dist/ui/dialog.js +1 -1
- package/dist/ui/index.d.ts +4 -0
- package/dist/ui/index.js +1 -1
- package/dist/ui/input-group.d.ts +30 -0
- package/dist/ui/input-group.js +2 -0
- package/dist/ui/input-group.js.map +1 -0
- package/dist/ui/input-new.d.ts +12 -0
- package/dist/ui/input-new.js +2 -0
- package/dist/ui/input-new.js.map +1 -0
- package/dist/ui/input.js +1 -1
- package/dist/ui/pagination.js +1 -1
- package/dist/ui/switch.d.ts +15 -0
- package/dist/ui/switch.js +2 -0
- package/dist/ui/switch.js.map +1 -0
- package/dist/ui/table.js +1 -1
- package/dist/ui/toast.js +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a,b,m,e,q,s,w,x,H}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a,b,m,e,q,s,w,x,H}from'./chunk-C5UISTOE.js';import'react';import {ChevronDownIcon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function X({multiple:m$1,items:s$1,placeholder:t="Select",icon:d,container:T,isPending:F,className:M,triggerClassName:k,contentClassName:A,disabled:R,infiniteScroll:x$1,filter:c,...o}){let r=m$1===true,L=o.showTitle??r,g=o.showSearch??r,[n,C]=useControlledState({value:o?.value,defaultValue:o?.defaultValue,onChange:o.onValueChange}),[$,q$1]=useControlledState({value:o?.inputValue?.toString(),defaultValue:o?.defaultInputValue?.toString(),onChange:o?.onInputValueChange}),u=Array.isArray(n)?n:n?[n]:[],a$1=u.length>0,z=u.length,B=a$1?r?`${t} (${z})`:u[0]?.label??t:r?`All ${t}`:t,D=()=>{C(null);};return jsxs(a,{items:s$1,multiple:m$1,value:n,onValueChange:C,inputValue:$,onInputValueChange:q$1,filter:c===null||!g?null:c,isItemEqualToValue:(l,p)=>l.value===p.value,disabled:R,...o,children:[jsxs(b,{className:cn("group flex h-8 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",a$1&&"border-border-brand bg-bg-brand-primary text-text-brand-secondary hover:bg-bg-brand-primary-hover-alt","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",k,M),children:[d&&jsx("span",{className:cn("size-4 shrink-0 group-data-[popup-open]:text-fg-brand-primary",a$1?"text-fg-brand-primary":"text-fg-quaternary"),children:d}),jsx("span",{className:"truncate",children:B}),jsx(ChevronDownIcon,{className:cn("size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180 group-data-[popup-open]:text-fg-brand-primary",a$1?"text-fg-brand-primary":"text-fg-quaternary")})]}),jsx(m,{container:T,className:cn("w-72",A),align:"start",sideOffset:8,children:jsxs("div",{className:"flex flex-col",children:[L&&jsxs("div",{className:"flex items-center justify-between p-3 border-b border-border-primary",children:[jsx("span",{className:"text-label-semibold-3 text-text-primary",children:t}),jsx("button",{type:"button",disabled:!a$1,onClick:D,className:cn("text-label-semibold-3 transition-colors",a$1?"cursor-pointer text-text-error-primary hover:text-text-error-primary-hover":"cursor-not-allowed text-text-disabled"),children:"Clear All"})]}),g&&jsx(e,{placeholder:`Search ${t.toLowerCase()}...`}),jsx(q,{status:F||s$1===void 0?"pending":s$1?.length===0?"empty":null}),jsx(s,{children:(l,p,E)=>jsxs(Fragment,{children:[jsx(w,{indicator:r?"checkbox":void 0,value:l,children:jsx(x,{children:l.label})},l.value),p===E-1&&!!x$1&&jsx(H,{...x$1})]})})]})})]})}export{X as a};//# sourceMappingURL=chunk-3PHZ2D2L.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-3PHZ2D2L.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/composites/filter-combobox.tsx"],"names":["FilterCombobox","multiple","items","placeholder","icon","container","isPending","className","triggerClassName","contentClassName","disabled","infiniteScroll","filter","props","isMultiple","showTitle","showSearch","value","setValue","useControlledState","inputValue","setInputValue","valueArray","hasValue","count","triggerLabel","handleClear","jsxs","Combobox","a","b","ComboboxTrigger","cn","jsx","ChevronDownIcon","ComboboxPopup","ComboboxInput","ComboboxStatus","ComboboxList","item","index","length","Fragment","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll"],"mappings":"qQA+CA,SAASA,EAA+F,CACtG,QAAA,CAAAC,IACA,KAAA,CAAAC,GAAAA,CACA,YAAAC,CAAAA,CAAc,QAAA,CACd,IAAA,CAAAC,CAAAA,CACA,UAAAC,CAAAA,CACA,SAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CACA,iBAAAC,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,EACA,cAAA,CAAAC,GAAAA,CACA,OAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CAAyC,CACvC,IAAMC,CAAAA,CAAab,MAAa,IAAA,CAC1Bc,CAAAA,CAAYF,EAAM,SAAA,EAAaC,CAAAA,CAC/BE,EAAaH,CAAAA,CAAM,UAAA,EAAcC,CAAAA,CAEjC,CAACG,EAAOC,CAAQ,CAAA,CAAIC,mBAAoE,CAC5F,KAAA,CAAON,GAAO,KAAA,CACd,YAAA,CAAcA,GAAO,YAAA,CACrB,QAAA,CAAUA,EAAM,aAGlB,CAAC,EAEK,CAACO,CAAAA,CAAYC,GAAa,CAAA,CAAIF,kBAAAA,CAAmB,CACrD,KAAA,CAAON,GAAO,UAAA,EAAY,QAAA,GAC1B,YAAA,CAAcA,CAAAA,EAAO,mBAAmB,QAAA,EAAS,CACjD,QAAA,CAAUA,CAAAA,EAAO,kBACnB,CAAC,CAAA,CAGKS,EAAa,KAAA,CAAM,OAAA,CAAQL,CAAK,CAAA,CAAIA,CAAAA,CAAQA,CAAAA,CAAQ,CAACA,CAAK,CAAA,CAAI,GAC9DM,GAAAA,CAAWD,CAAAA,CAAW,OAAS,CAAA,CAC/BE,CAAAA,CAAQF,EAAW,MAAA,CAEnBG,CAAAA,CAAgBF,IAIlBT,CAAAA,CACE,CAAA,EAAGX,CAAW,CAAA,EAAA,EAAKqB,CAAK,IACxBF,CAAAA,CAAW,CAAC,CAAA,EAAG,KAAA,EAASnB,EAL1BW,CAAAA,CACE,CAAA,IAAA,EAAOX,CAAW,CAAA,CAAA,CAClBA,CAAAA,CAKAuB,EAAc,IAAM,CACxBR,CAAAA,CAAS,IAAI,EACf,CAAA,CAEA,OACES,KAACC,CAAAA,CAAA,CACC,MAAO1B,GAAAA,CACP,QAAA,CAAUD,GAAAA,CACV,KAAA,CAAOgB,EACP,aAAA,CAAeC,CAAAA,CACf,WAAYE,CAAAA,CACZ,kBAAA,CAAoBC,IACpB,MAAA,CAAQT,CAAAA,GAAW,MAAQ,CAACI,CAAAA,CAAa,KAAOJ,CAAAA,CAChD,kBAAA,CAAoB,CAACiB,CAAAA,CAAGC,CAAAA,GAAMD,EAAE,KAAA,GAAUC,CAAAA,CAAE,KAAA,CAC5C,QAAA,CAAUpB,EACT,GAAGG,CAAAA,CAEJ,UAAAc,IAAAA,CAACI,CAAAA,CAAA,CACC,SAAA,CAAWC,EAAAA,CACT,2IAAA,CACA,qEAAA,CACAT,KAAY,uGAAA,CACZ,kDAAA,CACA,0HACAf,CAAAA,CACAD,CACF,EAEC,QAAA,CAAA,CAAAH,CAAAA,EACC6B,GAAAA,CAAC,MAAA,CAAA,CACC,UAAWD,EAAAA,CACT,+DAAA,CACAT,IAAW,uBAAA,CAA0B,oBACvC,EAEC,QAAA,CAAAnB,CAAAA,CACH,CAAA,CAEF6B,GAAAA,CAAC,QAAK,SAAA,CAAU,UAAA,CAAY,SAAAR,CAAAA,CAAa,CAAA,CACzCQ,IAACC,eAAAA,CAAA,CACC,SAAA,CAAWF,EAAAA,CACT,wHACAT,GAAAA,CAAW,uBAAA,CAA0B,oBACvC,CAAA,CACF,CAAA,CAAA,CACF,EAEAU,GAAAA,CAACE,CAAAA,CAAA,CACC,SAAA,CAAW9B,EACX,SAAA,CAAW2B,EAAAA,CAAG,OAAQvB,CAAgB,CAAA,CACtC,MAAM,OAAA,CACN,UAAA,CAAY,CAAA,CAEZ,QAAA,CAAAkB,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBACZ,QAAA,CAAA,CAAAZ,CAAAA,EACCY,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uEACb,QAAA,CAAA,CAAAM,GAAAA,CAAC,QAAK,SAAA,CAAU,yCAAA,CAA2C,SAAA9B,CAAAA,CAAY,CAAA,CACvE8B,IAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,QAAA,CAAU,CAACV,GAAAA,CACX,OAAA,CAASG,EACT,SAAA,CAAWM,EAAAA,CACT,0CACAT,GAAAA,CACI,4EAAA,CACA,uCACN,CAAA,CACD,qBAED,CAAA,CAAA,CACF,CAAA,CAGDP,GACCiB,GAAAA,CAACG,CAAAA,CAAA,CAAc,WAAA,CAAa,CAAA,OAAA,EAAUjC,CAAAA,CAAY,WAAA,EAAa,CAAA,GAAA,CAAA,CAAO,CAAA,CAGxE8B,IAACI,CAAAA,CAAA,CACC,OACE/B,CAAAA,EAAaJ,GAAAA,GAAU,OACnB,SAAA,CACCA,GAAAA,EAAQ,SAAW,CAAA,CAClB,OAAA,CACA,KAEV,CAAA,CACA+B,GAAAA,CAACK,EAAA,CACE,QAAA,CAAA,CAACC,CAAAA,CAAMC,CAAAA,CAAOC,IACbd,IAAAA,CAAAe,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAT,GAAAA,CAACU,EAAA,CACC,SAAA,CAAW7B,CAAAA,CAAa,UAAA,CAAa,OAErC,KAAA,CAAOyB,CAAAA,CAEP,SAAAN,GAAAA,CAACW,CAAAA,CAAA,CAAmB,QAAA,CAAAL,CAAAA,CAAK,KAAA,CAAM,CAAA,CAAA,CAH1BA,EAAK,KAIZ,CAAA,CACCC,IAAUC,CAAAA,CAAS,CAAA,EAAK,CAAC,CAAC9B,GAAAA,EACzBsB,IAACY,CAAAA,CAAA,CAAwB,GAAGlC,GAAAA,CAAgB,CAAA,CAAA,CAEhD,EAEJ,CAAA,CAAA,CACF,CAAA,CACF,GACF,CAEJ","file":"chunk-6QWQDSWL.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { ChevronDownIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { ComboboxItem, ComboboxItemTitle, type ComboboxProps } from \"../ui/combobox\"\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} 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 FilterComboboxValueType<Value extends FilterComboboxItem, Multiple extends boolean | undefined> = Multiple extends true ? Value[] : Value;\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 showTitle?: boolean\r\n showSearch?: boolean\r\n}\r\n\r\nexport type FilterComboboxProps<Value, Multiple extends boolean | undefined = false> = ComboboxProps<Value, Multiple> & BaseProps\r\n\r\n// ─── Component ───\r\n\r\nfunction FilterCombobox<Value extends FilterComboboxItem, Multiple extends boolean | undefined = false>({\r\n multiple,\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 filter,\r\n ...props\r\n}: FilterComboboxProps<Value, Multiple>) {\r\n const isMultiple = multiple === true\r\n const showTitle = props.showTitle ?? isMultiple\r\n const showSearch = props.showSearch ?? isMultiple\r\n\r\n const [value, setValue] = useControlledState<FilterComboboxValueType<Value, Multiple> | null>({\r\n value: props?.value,\r\n defaultValue: props?.defaultValue,\r\n onChange: props.onValueChange as (\r\n value: FilterComboboxValueType<Value, Multiple> | null\r\n ) => void\r\n })\r\n\r\n const [inputValue, setInputValue] = useControlledState({\r\n value: props?.inputValue?.toString(),\r\n defaultValue: props?.defaultInputValue?.toString(),\r\n onChange: props?.onInputValueChange,\r\n })\r\n\r\n // Normalize value to array for label & clear logic\r\n const valueArray = Array.isArray(value) ? value : value ? [value] : []\r\n const hasValue = valueArray.length > 0\r\n const count = valueArray.length\r\n\r\n const triggerLabel = !hasValue\r\n ? isMultiple\r\n ? `All ${placeholder}`\r\n : placeholder\r\n : isMultiple\r\n ? `${placeholder} (${count})`\r\n : valueArray[0]?.label ?? placeholder\r\n\r\n const handleClear = () => {\r\n setValue(null)\r\n }\r\n\r\n return (\r\n <Combobox\r\n items={items}\r\n multiple={multiple}\r\n value={value}\r\n onValueChange={setValue}\r\n inputValue={inputValue}\r\n onInputValueChange={setInputValue}\r\n filter={filter === null || !showSearch ? null : filter}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n {...props}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n \"group flex h-8 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 hover:bg-bg-brand-primary-hover-alt\",\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 group-data-[popup-open]:text-fg-brand-primary\",\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 group-data-[popup-open]:text-fg-brand-primary\",\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 <div className=\"flex flex-col\">\r\n {showTitle && (\r\n <div className=\"flex items-center justify-between p-3 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-label-semibold-3 transition-colors\",\r\n hasValue\r\n ? \"cursor-pointer text-text-error-primary hover:text-text-error-primary-hover\"\r\n : \"cursor-not-allowed text-text-disabled\"\r\n )}\r\n >\r\n Clear All\r\n </button>\r\n </div>\r\n )}\r\n\r\n {showSearch && (\r\n <ComboboxInput placeholder={`Search ${placeholder.toLowerCase()}...`} />\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 {(item, index, length) => (\r\n <>\r\n <ComboboxItem\r\n indicator={isMultiple ? \"checkbox\" : undefined}\r\n key={item.value}\r\n value={item}\r\n >\r\n <ComboboxItemTitle>{item.label}</ComboboxItemTitle>\r\n </ComboboxItem>\r\n {index === length - 1 && !!infiniteScroll && (\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n )}\r\n </>\r\n )}\r\n </ComboboxList>\r\n </div>\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","multiple","items","placeholder","icon","container","isPending","className","triggerClassName","contentClassName","disabled","infiniteScroll","filter","props","isMultiple","showTitle","showSearch","value","setValue","useControlledState","inputValue","setInputValue","valueArray","hasValue","count","triggerLabel","handleClear","jsxs","Combobox","a","b","ComboboxTrigger","cn","jsx","ChevronDownIcon","ComboboxPopup","ComboboxInput","ComboboxStatus","ComboboxList","item","index","length","Fragment","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll"],"mappings":"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","file":"chunk-3PHZ2D2L.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { ChevronDownIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { ComboboxItem, ComboboxItemTitle, type ComboboxProps } from \"../ui/combobox\"\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} 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 FilterComboboxValueType<Value extends FilterComboboxItem, Multiple extends boolean | undefined> = Multiple extends true ? Value[] : Value;\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 showTitle?: boolean\r\n showSearch?: boolean\r\n}\r\n\r\nexport type FilterComboboxProps<Value, Multiple extends boolean | undefined = false> = ComboboxProps<Value, Multiple> & BaseProps\r\n\r\n// ─── Component ───\r\n\r\nfunction FilterCombobox<Value extends FilterComboboxItem, Multiple extends boolean | undefined = false>({\r\n multiple,\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 filter,\r\n ...props\r\n}: FilterComboboxProps<Value, Multiple>) {\r\n const isMultiple = multiple === true\r\n const showTitle = props.showTitle ?? isMultiple\r\n const showSearch = props.showSearch ?? isMultiple\r\n\r\n const [value, setValue] = useControlledState<FilterComboboxValueType<Value, Multiple> | null>({\r\n value: props?.value,\r\n defaultValue: props?.defaultValue,\r\n onChange: props.onValueChange as (\r\n value: FilterComboboxValueType<Value, Multiple> | null\r\n ) => void\r\n })\r\n\r\n const [inputValue, setInputValue] = useControlledState({\r\n value: props?.inputValue?.toString(),\r\n defaultValue: props?.defaultInputValue?.toString(),\r\n onChange: props?.onInputValueChange,\r\n })\r\n\r\n // Normalize value to array for label & clear logic\r\n const valueArray = Array.isArray(value) ? value : value ? [value] : []\r\n const hasValue = valueArray.length > 0\r\n const count = valueArray.length\r\n\r\n const triggerLabel = !hasValue\r\n ? isMultiple\r\n ? `All ${placeholder}`\r\n : placeholder\r\n : isMultiple\r\n ? `${placeholder} (${count})`\r\n : valueArray[0]?.label ?? placeholder\r\n\r\n const handleClear = () => {\r\n setValue(null)\r\n }\r\n\r\n return (\r\n <Combobox\r\n items={items}\r\n multiple={multiple}\r\n value={value}\r\n onValueChange={setValue}\r\n inputValue={inputValue}\r\n onInputValueChange={setInputValue}\r\n filter={filter === null || !showSearch ? null : filter}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n {...props}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n \"group flex h-8 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 hover:bg-bg-brand-primary-hover-alt\",\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 group-data-[popup-open]:text-fg-brand-primary\",\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 group-data-[popup-open]:text-fg-brand-primary\",\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 <div className=\"flex flex-col\">\r\n {showTitle && (\r\n <div className=\"flex items-center justify-between p-3 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-label-semibold-3 transition-colors\",\r\n hasValue\r\n ? \"cursor-pointer text-text-error-primary hover:text-text-error-primary-hover\"\r\n : \"cursor-not-allowed text-text-disabled\"\r\n )}\r\n >\r\n Clear All\r\n </button>\r\n </div>\r\n )}\r\n\r\n {showSearch && (\r\n <ComboboxInput placeholder={`Search ${placeholder.toLowerCase()}...`} />\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 {(item, index, length) => (\r\n <>\r\n <ComboboxItem\r\n indicator={isMultiple ? \"checkbox\" : undefined}\r\n key={item.value}\r\n value={item}\r\n >\r\n <ComboboxItemTitle>{item.label}</ComboboxItemTitle>\r\n </ComboboxItem>\r\n {index === length - 1 && !!infiniteScroll && (\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n )}\r\n </>\r\n )}\r\n </ComboboxList>\r\n </div>\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { FilterCombobox }\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a,j,i,k,l,m,q,s,w,A,x,H}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a,j,i,k,l,m,q,s,w,A,x,H}from'./chunk-C5UISTOE.js';import {f,g}from'./chunk-HHG7BSWN.js';import {a as a$1}from'./chunk-Y6TKCAAJ.js';import*as r from'react';import {cn}from'@xploreu/lib/cn';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function $({multiple:G=true,inputPlaceholder:j$1="Search...",container:q$1,items:s$1,infiniteScroll:z,isPending:B,taggable:C=false,maxVisible:b,...m$1}){let[O,F]=useControlledState({value:m$1?.inputValue?.toString(),defaultValue:m$1?.defaultInputValue?.toString(),onChange:m$1?.onInputValueChange}),[i$1,h]=useControlledState({value:m$1?.value??[],defaultValue:m$1?.defaultValue??[],onChange:m$1?.onValueChange}),[I,V]=r.useState([]),p=r.useRef(new Set);r.useEffect(()=>{let e=new Set(i$1.map(a=>a.value));V(a=>{let l=a.filter(o=>e.has(o.value));return l.length===a.length?a:(p.current=new Set(l.map(o=>o.value)),l)});},[i$1]);let t=O?.toString().trim()??"",v=r.useMemo(()=>t?i$1.some(e=>e.value.toLowerCase()===t.toLowerCase()):false,[t,i$1]),c=r.useMemo(()=>!C||!t?false:!s$1?.some(e=>e.label.toLowerCase()===t.toLowerCase()),[C,t,s$1]),H$1=r.useMemo(()=>{let e=[...s$1??[],...I];return c?[...e,{label:t,value:t,tag:true}]:e},[s$1,I,c,t]);return jsxs(a,{...m$1,behavior:"chip-outside",multiple:true,items:C?H$1:s$1,isItemEqualToValue:(e,a)=>e.value===a.value,onValueChange:(e,a)=>{if(C){let l=e.filter(o=>o?.tag===true&&!p.current.has(o.value));if(l.length>0){for(let o of l)p.current.add(o.value);V(o=>[...o,...l]);}}h(G?e:[e[e.length-1]],a);},onInputValueChange:F,children:[jsx(f,{className:cn(a$1(),"h-auto min-h-13 flex flex-wrap items-center gap-1.5 px-3 py-1.5 cursor-text"),children:jsxs(j,{className:cn("contents",b!==void 0&&"flex-nowrap overflow-hidden"),children:[jsx(i,{children:e=>{let a=b!==void 0?e.slice(0,b):e,l$1=b!==void 0?e.length-b:0;return jsxs(Fragment,{children:[a?.map(o=>jsxs(k,{className:cn(b!==void 0&&"min-w-0 shrink"),children:[o?.image&&jsx("img",{src:o.image,alt:o?.label||"",className:"size-4 rounded-full object-cover shrink-0 mr-1"}),b!==void 0?jsx("span",{className:"truncate",children:o?.label||""}):o?.label||"",jsx(l,{})]},o?.value||"")),l$1>0&&jsxs(k,{className:"shrink-0",children:["+",l$1]})]})}}),jsx(g,{render:jsx("input",{className:"flex-1 min-w-[80px] bg-transparent outline-none text-body-regular-1 text-text-primary placeholder:text-text-placeholder",placeholder:i$1.length===0?j$1:void 0})})]})}),jsxs(m,{container:q$1,children:[jsx(q,{status:B||s$1===void 0?"pending":s$1?.length===0&&!c?"empty":null}),jsxs(s,{children:[s$1?.map(e=>jsxs(w,{value:e,children:[e.image!==void 0&&jsx(A,{src:e.image,fallbackText:[e.label?.[0],e.label?.split(" ")?.[1]?.[0]].filter(Boolean).join(""),imageAlt:e.label}),jsx(x,{children:e.label})]},e.value)),c&&jsxs(w,{value:{label:t,value:t,tag:true},children:[!v&&jsxs("span",{className:"text-text-secondary text-body-medium-3 col-start-2",children:["Create: ",t]}),v&&jsx(x,{children:t})]}),jsx(H,{...z})]})]})]})}export{$ as a};//# sourceMappingURL=chunk-6WWKP7KX.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-6WWKP7KX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/composites/combobox-chip.tsx"],"names":["ComboboxChip","multiple","inputPlaceholder","container","items","infiniteScroll","isPending","taggable","maxVisible","props","inputValue","setInputValue","useControlledState","value","setValue","createdItems","setCreatedItems","createdValuesRef","currentValues","v","prev","next","item","trimmedInput","isInputSelected","isCreatingItem","combinedItems","base","jsxs","Combobox","a","b","eventDetails","newTags","tag","jsx","ComboboxInputGroup","cn","inputVariants","ComboboxChips","ComboboxValue","visible","overflow","Fragment","ComboboxChipRemove","ComboboxInput","ComboboxPopup","ComboboxStatus","ComboboxList","ComboboxItem","ComboboxItemAvatar","ComboboxItemTitle","ComboboxInfiniteScroll"],"mappings":"2TA+CA,SAASA,CAAAA,CAAyF,CAChG,QAAA,CAAAC,CAAAA,CAAW,KACX,gBAAA,CAAAC,GAAAA,CAAmB,WAAA,CACnB,SAAA,CAAAC,GAAAA,CACA,KAAA,CAAAC,GAAAA,CACA,cAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CAAW,KAAA,CACX,UAAA,CAAAC,CAAAA,CACA,GAAGC,GACL,CAAA,CAA6B,CAC3B,GAAM,CAACC,CAAAA,CAAYC,CAAa,CAAA,CAAIC,kBAAAA,CAAmB,CACrD,KAAA,CAAOH,GAAAA,EAAO,UAAA,EAAY,QAAA,EAAS,CACnC,YAAA,CAAcA,GAAAA,EAAO,iBAAA,EAAmB,UAAS,CACjD,QAAA,CAAUA,GAAAA,EAAO,kBACnB,CAAC,CAAA,CAEK,CAACI,GAAAA,CAAOC,CAAQ,EAAIF,kBAAAA,CAAmB,CAC3C,KAAA,CAAOH,GAAAA,EAAO,KAAA,EAAS,EAAC,CACxB,YAAA,CAAcA,KAAO,YAAA,EAAgB,EAAC,CACtC,QAAA,CAAUA,GAAAA,EAAO,aACnB,CAAC,CAAA,CAIK,CAACM,CAAAA,CAAcC,CAAe,CAAA,CAAU,CAAA,CAAA,QAAA,CAAkB,EAAE,CAAA,CAC5DC,CAAAA,CAAyB,SAAoB,IAAI,GAAK,CAAA,CAEtD,CAAA,CAAA,SAAA,CAAU,IAAM,CACpB,IAAMC,CAAAA,CAAgB,IAAI,GAAA,CAAIL,GAAAA,CAAM,GAAA,CAAKM,CAAAA,EAAMA,CAAAA,CAAE,KAAK,CAAC,CAAA,CACvDH,EAAiBI,CAAAA,EAAS,CACxB,IAAMC,CAAAA,CAAOD,CAAAA,CAAK,MAAA,CAAQE,CAAAA,EAASJ,CAAAA,CAAc,IAAII,CAAAA,CAAK,KAAK,CAAC,CAAA,CAChE,OAAID,CAAAA,CAAK,MAAA,GAAWD,CAAAA,CAAK,OAAeA,CAAAA,EACxCH,CAAAA,CAAiB,OAAA,CAAU,IAAI,IAAII,CAAAA,CAAK,GAAA,CAAKF,CAAAA,EAAMA,CAAAA,CAAE,KAAK,CAAC,CAAA,CACpDE,CAAAA,CACT,CAAC,EACH,CAAA,CAAG,CAACR,GAAK,CAAC,CAAA,CAEV,IAAMU,CAAAA,CAAeb,CAAAA,EAAY,QAAA,EAAS,CAAE,IAAA,EAAK,EAAK,GAChDc,CAAAA,CAAwB,CAAA,CAAA,OAAA,CAAQ,IAC/BD,CAAAA,CACEV,GAAAA,CAAM,IAAA,CACVS,CAAAA,EAASA,CAAAA,CAAK,MAAM,WAAA,EAAY,GAAMC,CAAAA,CAAa,WAAA,EACtD,CAAA,CAH0B,KAAA,CAIzB,CAACA,EAAcV,GAAK,CAAC,CAAA,CAGlBY,CAAAA,CAAuB,CAAA,CAAA,OAAA,CAAQ,IAC/B,CAAClB,CAAAA,EAAY,CAACgB,CAAAA,CAAqB,KAAA,CAChC,CAACnB,GAAAA,EAAO,IAAA,CACZkB,CAAAA,EAASA,CAAAA,CAAK,KAAA,CAAM,aAAY,GAAMC,CAAAA,CAAa,WAAA,EACtD,CAAA,CACC,CAAChB,CAAAA,CAAUgB,CAAAA,CAAcnB,GAAK,CAAC,CAAA,CAG5BsB,GAAAA,CAAsB,CAAA,CAAA,OAAA,CAAQ,IAAM,CACxC,IAAMC,CAAAA,CAAgB,CACpB,GAAGvB,GAAAA,EAAS,EAAC,CACb,GAAGW,CACL,CAAA,CAEA,OAAIU,CAAAA,CACK,CAAC,GAAGE,CAAAA,CAAM,CAAE,KAAA,CAAOJ,CAAAA,CAAc,KAAA,CAAOA,CAAAA,CAAc,GAAA,CAAK,IAAK,CAAqB,CAAA,CAGvFI,CACT,CAAA,CAAG,CAACvB,GAAAA,CAAOW,CAAAA,CAAcU,CAAAA,CAAgBF,CAAY,CAAC,CAAA,CAsBtD,OACEK,IAAAA,CAACC,CAAAA,CAAA,CACE,GAAGpB,GAAAA,CACJ,SAAS,cAAA,CACT,QAAA,CAAQ,IAAA,CACR,KAAA,CAAOF,CAAAA,CAAWmB,GAAAA,CAAgBtB,GAAAA,CAClC,kBAAA,CAAoB,CAAC0B,CAAAA,CAAGC,CAAAA,GAAMD,CAAAA,CAAE,KAAA,GAAUC,CAAAA,CAAE,KAAA,CAC5C,aAAA,CA3BmE,CAAClB,EAAOmB,CAAAA,GAAiB,CAC9F,GAAIzB,CAAAA,CAAU,CACZ,IAAM0B,CAAAA,CAAUpB,CAAAA,CAAM,OACnBM,CAAAA,EAAMA,CAAAA,EAAG,GAAA,GAAQ,IAAA,EAAQ,CAACF,CAAAA,CAAiB,OAAA,CAAQ,GAAA,CAAIE,CAAAA,CAAE,KAAK,CACjE,CAAA,CACA,GAAIc,CAAAA,CAAQ,MAAA,CAAS,CAAA,CAAG,CACtB,IAAA,IAAWC,KAAOD,CAAAA,CAChBhB,CAAAA,CAAiB,OAAA,CAAQ,GAAA,CAAIiB,CAAAA,CAAI,KAAK,CAAA,CAExClB,CAAAA,CAAiBI,GAAS,CAAC,GAAGA,CAAAA,CAAM,GAAGa,CAAO,CAAC,EACjD,CACF,CAKEnB,CAAAA,CAHGb,CAAAA,CAGMY,CAAAA,CAFA,CAACA,CAAAA,CAAMA,CAAAA,CAAM,MAAA,CAAS,CAAC,CAAC,CAAA,CAEjBmB,CAAY,EAEhC,CAAA,CAUI,kBAAA,CAAoBrB,CAAAA,CAGpB,QAAA,CAAA,CAAAwB,GAAAA,CAACC,EAAA,CACC,SAAA,CAAWC,EAAAA,CACTC,GAAAA,EAAc,CACd,6EACF,CAAA,CAGA,QAAA,CAAAV,KAACW,CAAAA,CAAA,CACC,SAAA,CAAWF,EAAAA,CACT,UAAA,CACA7B,CAAAA,GAAe,MAAA,EAAa,6BAC9B,EAEA,QAAA,CAAA,CAAA2B,GAAAA,CAACK,CAAAA,CAAA,CACE,SAAC3B,CAAAA,EAAmB,CACnB,IAAM4B,CAAAA,CAAUjC,IAAe,MAAA,CAAYK,CAAAA,CAAM,KAAA,CAAM,CAAA,CAAGL,CAAU,CAAA,CAAIK,CAAAA,CAClE6B,GAAAA,CAAWlC,IAAe,MAAA,CAAYK,CAAAA,CAAM,MAAA,CAASL,CAAAA,CAAa,CAAA,CACxE,OACEoB,IAAAA,CAAAe,QAAAA,CAAA,CACG,QAAA,CAAA,CAAAF,CAAAA,EAAS,GAAA,CAAKnB,CAAAA,EACbM,IAAAA,CAAC5B,CAAAA,CAAA,CAEC,SAAA,CAAWqC,GAAG7B,CAAAA,GAAe,MAAA,EAAa,gBAAgB,CAAA,CAEzD,QAAA,CAAA,CAAAc,CAAAA,EAAM,KAAA,EACLa,GAAAA,CAAC,OACC,GAAA,CAAKb,CAAAA,CAAK,KAAA,CACV,GAAA,CAAKA,CAAAA,EAAM,KAAA,EAAS,EAAA,CACpB,SAAA,CAAU,iDACZ,CAAA,CAEDd,CAAAA,GAAe,MAAA,CACZ2B,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,UAAA,CAAY,QAAA,CAAAb,GAAM,KAAA,EAAS,EAAA,CAAG,CAAA,CAC7CA,CAAAA,EAAM,KAAA,EAAS,EAAA,CAEpBa,GAAAA,CAACS,CAAAA,CAAA,EAAmB,CAAA,CAAA,CAAA,CAdftB,CAAAA,EAAM,KAAA,EAAS,EAetB,CACD,CAAA,CACAoB,GAAAA,CAAW,CAAA,EACVd,IAAAA,CAAC5B,EAAA,CAAe,SAAA,CAAU,UAAA,CAAW,QAAA,CAAA,CAAA,GAAA,CACjC0C,GAAAA,CAAAA,CACJ,CAAA,CAAA,CAEJ,CAEJ,CAAA,CACF,EAEAP,GAAAA,CAACU,CAAAA,CAAA,CACC,MAAA,CACEV,GAAAA,CAAC,OAAA,CAAA,CACC,SAAA,CAAU,yHAAA,CACV,YAAatB,GAAAA,CAAM,MAAA,GAAW,CAAA,CAAIX,GAAAA,CAAmB,MAAA,CACvD,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CACF,EAEA0B,IAAAA,CAACkB,CAAAA,CAAA,CAAc,SAAA,CAAW3C,GAAAA,CACxB,QAAA,CAAA,CAAAgC,GAAAA,CAACY,CAAAA,CAAA,CACC,MAAA,CACEzC,CAAAA,EAAaF,GAAAA,GAAU,MAAA,CACnB,SAAA,CACAA,GAAAA,EAAO,MAAA,GAAW,CAAA,EAAK,CAACqB,CAAAA,CACtB,OAAA,CACA,IAAA,CAEV,CAAA,CACAG,IAAAA,CAACoB,CAAAA,CAAA,CACE,QAAA,CAAA,CAAA5C,KAAO,GAAA,CAAKkB,CAAAA,EACXM,IAAAA,CAACqB,CAAAA,CAAA,CAEC,KAAA,CAAO3B,CAAAA,CAEL,QAAA,CAAA,CAAAA,EAAK,KAAA,GAAU,MAAA,EACfa,GAAAA,CAACe,CAAAA,CAAA,CACC,GAAA,CAAK5B,CAAAA,CAAK,KAAA,CACV,YAAA,CAAc,CAACA,CAAAA,CAAK,KAAA,GAAQ,CAAC,CAAA,CAAGA,CAAAA,CAAK,KAAA,EAAO,KAAA,CAAM,GAAG,IAAI,CAAC,CAAA,GAAI,CAAC,CAAC,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,EAAE,CAAA,CACzF,QAAA,CAAUA,CAAAA,CAAK,KAAA,CACjB,CAAA,CAEFa,GAAAA,CAACgB,CAAAA,CAAA,CAAmB,QAAA,CAAA7B,CAAAA,CAAK,KAAA,CAAM,CAAA,CAAA,CAAA,CAV1BA,CAAAA,CAAK,KAWZ,CACD,CAAA,CACAG,GACCG,IAAAA,CAACqB,CAAAA,CAAA,CACC,KAAA,CAAO,CAAE,KAAA,CAAO1B,CAAAA,CAAc,KAAA,CAAOA,EAAc,GAAA,CAAK,IAAK,CAAA,CAE5D,QAAA,CAAA,CAAA,CAACC,CAAAA,EACAI,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,qDAAqD,QAAA,CAAA,CAAA,UAAA,CAASL,CAAAA,CAAAA,CAAa,CAAA,CAE5FC,CAAAA,EACCW,GAAAA,CAACgB,CAAAA,CAAA,CAAmB,QAAA,CAAA5B,EAAa,CAAA,CAAA,CAErC,CAAA,CAEFY,GAAAA,CAACiB,CAAAA,CAAA,CAAwB,GAAG/C,CAAAA,CAAgB,CAAA,CAAA,CAC9C,CAAA,CAAA,CACF,GACF,CAEJ","file":"chunk-Y2HN4RSA.js","sourcesContent":["import * as React from \"react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport {\r\n ComboboxInput as ComboboxInputPrimitive,\r\n ComboboxInputGroup,\r\n} from \"../primitives/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxChip as ComboboxChipUI,\r\n ComboboxChipRemove,\r\n ComboboxChips,\r\n ComboboxInfiniteScroll,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxPortal,\r\n ComboboxPopup,\r\n ComboboxStatus,\r\n ComboboxValue,\r\n type ComboboxProps,\r\n ComboboxItemTitle,\r\n ComboboxItemAvatar\r\n} from \"../ui/combobox\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { inputVariants } from \"../ui/input\"\r\n\r\ntype ComboboxChipProps<Value extends { label: string; value: string; image?: string; tag?: true }> = Omit<ComboboxProps<Value, true>, \"multiple\" | \"items\"> & {\r\n multiple?: boolean\r\n inputPlaceholder?: string\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n items?: Value[] | undefined\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n isPending?: boolean\r\n /**\r\n * When true, enables creatable / taggable mode.\r\n * If the typed value has no exact match in the current item list,\r\n * a \"Create \\\"…\\\"\" option is shown at the top of the dropdown.\r\n * Created items are appended to the value with `{ label, value, tag: true }`.\r\n */\r\n taggable?: boolean\r\n /**\r\n * Maximum number of chips to show before collapsing the rest into a \"+N\" chip.\r\n * When undefined, all chips are shown.\r\n */\r\n maxVisible?: number\r\n}\r\n\r\nfunction ComboboxChip<Value extends { label: string; value: string; image?: string; tag?: true }>({\r\n multiple = true,\r\n inputPlaceholder = \"Search...\",\r\n container,\r\n items,\r\n infiniteScroll,\r\n isPending,\r\n taggable = false,\r\n maxVisible,\r\n ...props\r\n}: ComboboxChipProps<Value>) {\r\n const [inputValue, setInputValue] = useControlledState({\r\n value: props?.inputValue?.toString(),\r\n defaultValue: props?.defaultInputValue?.toString(),\r\n onChange: props?.onInputValueChange,\r\n })\r\n\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 // Track items created via taggable mode\r\n // Sync with value to avoid stale tags when controlled value is reset from outside\r\n const [createdItems, setCreatedItems] = React.useState<Value[]>([])\r\n const createdValuesRef = React.useRef<Set<string>>(new Set())\r\n\r\n React.useEffect(() => {\r\n const currentValues = new Set(value.map((v) => v.value))\r\n setCreatedItems((prev) => {\r\n const next = prev.filter((item) => currentValues.has(item.value))\r\n if (next.length === prev.length) return prev\r\n createdValuesRef.current = new Set(next.map((v) => v.value))\r\n return next\r\n })\r\n }, [value])\r\n\r\n const trimmedInput = inputValue?.toString().trim() ?? \"\"\r\n const isInputSelected = React.useMemo(() => {\r\n if (!trimmedInput) return false\r\n return value.some(\r\n (item) => item.value.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [trimmedInput, value])\r\n\r\n // true = show the taggable item in dropdown (either as \"Create:\" or as checked item)\r\n const isCreatingItem = React.useMemo(() => {\r\n if (!taggable || !trimmedInput) return false\r\n return !items?.some(\r\n (item) => item.label.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [taggable, trimmedInput, items])\r\n\r\n // Merge server items with locally created tags + the \"Create\" placeholder\r\n const combinedItems = React.useMemo(() => {\r\n const base: Value[] = [\r\n ...items ?? [],\r\n ...createdItems,\r\n ]\r\n\r\n if (isCreatingItem) {\r\n return [...base, { label: trimmedInput, value: trimmedInput, tag: true } as unknown as Value]\r\n }\r\n\r\n return base\r\n }, [items, createdItems, isCreatingItem, trimmedInput])\r\n\r\n const handleValueChange: ComboboxProps<Value, true>[\"onValueChange\"] = (value, eventDetails) => {\r\n if (taggable) {\r\n const newTags = value.filter(\r\n (v) => v?.tag === true && !createdValuesRef.current.has(v.value)\r\n )\r\n if (newTags.length > 0) {\r\n for (const tag of newTags) {\r\n createdValuesRef.current.add(tag.value)\r\n }\r\n setCreatedItems((prev) => [...prev, ...newTags])\r\n }\r\n }\r\n\r\n if (!multiple) {\r\n setValue([value[value.length - 1]], eventDetails)\r\n } else {\r\n setValue(value, eventDetails)\r\n }\r\n }\r\n\r\n return (\r\n <Combobox\r\n {...props}\r\n behavior=\"chip-outside\"\r\n multiple\r\n items={taggable ? combinedItems : items}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n onValueChange={handleValueChange}\r\n onInputValueChange={setInputValue}\r\n >\r\n {/* Input box with chips inside */}\r\n <ComboboxInputGroup\r\n className={cn(\r\n inputVariants(),\r\n \"h-auto min-h-13 flex flex-wrap items-center gap-1.5 px-3 py-1.5 cursor-text\"\r\n )}\r\n >\r\n {/* Chips inside the input box */}\r\n <ComboboxChips\r\n className={cn(\r\n \"contents\",\r\n maxVisible !== undefined && \"flex-nowrap overflow-hidden\"\r\n )}\r\n >\r\n <ComboboxValue>\r\n {(value: Value[]) => {\r\n const visible = maxVisible !== undefined ? value.slice(0, maxVisible) : value\r\n const overflow = maxVisible !== undefined ? value.length - maxVisible : 0\r\n return (\r\n <>\r\n {visible?.map((item) => (\r\n <ComboboxChipUI\r\n key={item?.value || \"\"}\r\n className={cn(maxVisible !== undefined && \"min-w-0 shrink\")}\r\n >\r\n {item?.image && (\r\n <img\r\n src={item.image}\r\n alt={item?.label || \"\"}\r\n className=\"size-4 rounded-full object-cover shrink-0 mr-1\"\r\n />\r\n )}\r\n {maxVisible !== undefined\r\n ? <span className=\"truncate\">{item?.label || \"\"}</span>\r\n : (item?.label || \"\")\r\n }\r\n <ComboboxChipRemove />\r\n </ComboboxChipUI>\r\n ))}\r\n {overflow > 0 && (\r\n <ComboboxChipUI className=\"shrink-0\">\r\n +{overflow}\r\n </ComboboxChipUI>\r\n )}\r\n </>\r\n )\r\n }}\r\n </ComboboxValue>\r\n {/* Text input — shrinks to fit remaining space (inside Chips so backspace works) */}\r\n <ComboboxInputPrimitive\r\n render={\r\n <input\r\n className=\"flex-1 min-w-[80px] bg-transparent outline-none text-body-regular-1 text-text-primary placeholder:text-text-placeholder\"\r\n placeholder={value.length === 0 ? inputPlaceholder : undefined}\r\n />\r\n }\r\n />\r\n </ComboboxChips>\r\n </ComboboxInputGroup>\r\n\r\n <ComboboxPopup container={container}>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0 && !isCreatingItem\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem\r\n key={item.value}\r\n value={item as Value}\r\n >\r\n {(item.image !== undefined) && (\r\n <ComboboxItemAvatar\r\n src={item.image}\r\n fallbackText={[item.label?.[0], item.label?.split(\" \")?.[1]?.[0]].filter(Boolean).join(\"\")}\r\n imageAlt={item.label}\r\n />\r\n )}\r\n <ComboboxItemTitle>{item.label}</ComboboxItemTitle>\r\n </ComboboxItem>\r\n ))}\r\n {isCreatingItem && (\r\n <ComboboxItem\r\n value={{ label: trimmedInput, value: trimmedInput, tag: true }}\r\n >\r\n {!isInputSelected && (\r\n <span className=\"text-text-secondary text-body-medium-3 col-start-2\">Create: {trimmedInput}</span>\r\n )}\r\n {isInputSelected && (\r\n <ComboboxItemTitle>{trimmedInput}</ComboboxItemTitle>\r\n )}\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 { ComboboxChip }\r\nexport type { ComboboxChipProps }\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/composites/combobox-chip.tsx"],"names":["ComboboxChip","multiple","inputPlaceholder","container","items","infiniteScroll","isPending","taggable","maxVisible","props","inputValue","setInputValue","useControlledState","value","setValue","createdItems","setCreatedItems","createdValuesRef","currentValues","v","prev","next","item","trimmedInput","isInputSelected","isCreatingItem","combinedItems","base","jsxs","Combobox","a","b","eventDetails","newTags","tag","jsx","ComboboxInputGroup","cn","inputVariants","ComboboxChips","ComboboxValue","visible","overflow","Fragment","ComboboxChipRemove","ComboboxInput","ComboboxPopup","ComboboxStatus","ComboboxList","ComboboxItem","ComboboxItemAvatar","ComboboxItemTitle","ComboboxInfiniteScroll"],"mappings":"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","file":"chunk-6WWKP7KX.js","sourcesContent":["import * as React from \"react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport {\r\n ComboboxInput as ComboboxInputPrimitive,\r\n ComboboxInputGroup,\r\n} from \"../primitives/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxChip as ComboboxChipUI,\r\n ComboboxChipRemove,\r\n ComboboxChips,\r\n ComboboxInfiniteScroll,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxPortal,\r\n ComboboxPopup,\r\n ComboboxStatus,\r\n ComboboxValue,\r\n type ComboboxProps,\r\n ComboboxItemTitle,\r\n ComboboxItemAvatar\r\n} from \"../ui/combobox\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { inputVariants } from \"../ui/input\"\r\n\r\ntype ComboboxChipProps<Value extends { label: string; value: string; image?: string; tag?: true }> = Omit<ComboboxProps<Value, true>, \"multiple\" | \"items\"> & {\r\n multiple?: boolean\r\n inputPlaceholder?: string\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n items?: Value[] | undefined\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n isPending?: boolean\r\n /**\r\n * When true, enables creatable / taggable mode.\r\n * If the typed value has no exact match in the current item list,\r\n * a \"Create \\\"…\\\"\" option is shown at the top of the dropdown.\r\n * Created items are appended to the value with `{ label, value, tag: true }`.\r\n */\r\n taggable?: boolean\r\n /**\r\n * Maximum number of chips to show before collapsing the rest into a \"+N\" chip.\r\n * When undefined, all chips are shown.\r\n */\r\n maxVisible?: number\r\n}\r\n\r\nfunction ComboboxChip<Value extends { label: string; value: string; image?: string; tag?: true }>({\r\n multiple = true,\r\n inputPlaceholder = \"Search...\",\r\n container,\r\n items,\r\n infiniteScroll,\r\n isPending,\r\n taggable = false,\r\n maxVisible,\r\n ...props\r\n}: ComboboxChipProps<Value>) {\r\n const [inputValue, setInputValue] = useControlledState({\r\n value: props?.inputValue?.toString(),\r\n defaultValue: props?.defaultInputValue?.toString(),\r\n onChange: props?.onInputValueChange,\r\n })\r\n\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 // Track items created via taggable mode\r\n // Sync with value to avoid stale tags when controlled value is reset from outside\r\n const [createdItems, setCreatedItems] = React.useState<Value[]>([])\r\n const createdValuesRef = React.useRef<Set<string>>(new Set())\r\n\r\n React.useEffect(() => {\r\n const currentValues = new Set(value.map((v) => v.value))\r\n setCreatedItems((prev) => {\r\n const next = prev.filter((item) => currentValues.has(item.value))\r\n if (next.length === prev.length) return prev\r\n createdValuesRef.current = new Set(next.map((v) => v.value))\r\n return next\r\n })\r\n }, [value])\r\n\r\n const trimmedInput = inputValue?.toString().trim() ?? \"\"\r\n const isInputSelected = React.useMemo(() => {\r\n if (!trimmedInput) return false\r\n return value.some(\r\n (item) => item.value.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [trimmedInput, value])\r\n\r\n // true = show the taggable item in dropdown (either as \"Create:\" or as checked item)\r\n const isCreatingItem = React.useMemo(() => {\r\n if (!taggable || !trimmedInput) return false\r\n return !items?.some(\r\n (item) => item.label.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [taggable, trimmedInput, items])\r\n\r\n // Merge server items with locally created tags + the \"Create\" placeholder\r\n const combinedItems = React.useMemo(() => {\r\n const base: Value[] = [\r\n ...items ?? [],\r\n ...createdItems,\r\n ]\r\n\r\n if (isCreatingItem) {\r\n return [...base, { label: trimmedInput, value: trimmedInput, tag: true } as unknown as Value]\r\n }\r\n\r\n return base\r\n }, [items, createdItems, isCreatingItem, trimmedInput])\r\n\r\n const handleValueChange: ComboboxProps<Value, true>[\"onValueChange\"] = (value, eventDetails) => {\r\n if (taggable) {\r\n const newTags = value.filter(\r\n (v) => v?.tag === true && !createdValuesRef.current.has(v.value)\r\n )\r\n if (newTags.length > 0) {\r\n for (const tag of newTags) {\r\n createdValuesRef.current.add(tag.value)\r\n }\r\n setCreatedItems((prev) => [...prev, ...newTags])\r\n }\r\n }\r\n\r\n if (!multiple) {\r\n setValue([value[value.length - 1]], eventDetails)\r\n } else {\r\n setValue(value, eventDetails)\r\n }\r\n }\r\n\r\n return (\r\n <Combobox\r\n {...props}\r\n behavior=\"chip-outside\"\r\n multiple\r\n items={taggable ? combinedItems : items}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n onValueChange={handleValueChange}\r\n onInputValueChange={setInputValue}\r\n >\r\n {/* Input box with chips inside */}\r\n <ComboboxInputGroup\r\n className={cn(\r\n inputVariants(),\r\n \"h-auto min-h-13 flex flex-wrap items-center gap-1.5 px-3 py-1.5 cursor-text\"\r\n )}\r\n >\r\n {/* Chips inside the input box */}\r\n <ComboboxChips\r\n className={cn(\r\n \"contents\",\r\n maxVisible !== undefined && \"flex-nowrap overflow-hidden\"\r\n )}\r\n >\r\n <ComboboxValue>\r\n {(value: Value[]) => {\r\n const visible = maxVisible !== undefined ? value.slice(0, maxVisible) : value\r\n const overflow = maxVisible !== undefined ? value.length - maxVisible : 0\r\n return (\r\n <>\r\n {visible?.map((item) => (\r\n <ComboboxChipUI\r\n key={item?.value || \"\"}\r\n className={cn(maxVisible !== undefined && \"min-w-0 shrink\")}\r\n >\r\n {item?.image && (\r\n <img\r\n src={item.image}\r\n alt={item?.label || \"\"}\r\n className=\"size-4 rounded-full object-cover shrink-0 mr-1\"\r\n />\r\n )}\r\n {maxVisible !== undefined\r\n ? <span className=\"truncate\">{item?.label || \"\"}</span>\r\n : (item?.label || \"\")\r\n }\r\n <ComboboxChipRemove />\r\n </ComboboxChipUI>\r\n ))}\r\n {overflow > 0 && (\r\n <ComboboxChipUI className=\"shrink-0\">\r\n +{overflow}\r\n </ComboboxChipUI>\r\n )}\r\n </>\r\n )\r\n }}\r\n </ComboboxValue>\r\n {/* Text input — shrinks to fit remaining space (inside Chips so backspace works) */}\r\n <ComboboxInputPrimitive\r\n render={\r\n <input\r\n className=\"flex-1 min-w-[80px] bg-transparent outline-none text-body-regular-1 text-text-primary placeholder:text-text-placeholder\"\r\n placeholder={value.length === 0 ? inputPlaceholder : undefined}\r\n />\r\n }\r\n />\r\n </ComboboxChips>\r\n </ComboboxInputGroup>\r\n\r\n <ComboboxPopup container={container}>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0 && !isCreatingItem\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem\r\n key={item.value}\r\n value={item as Value}\r\n >\r\n {(item.image !== undefined) && (\r\n <ComboboxItemAvatar\r\n src={item.image}\r\n fallbackText={[item.label?.[0], item.label?.split(\" \")?.[1]?.[0]].filter(Boolean).join(\"\")}\r\n imageAlt={item.label}\r\n />\r\n )}\r\n <ComboboxItemTitle>{item.label}</ComboboxItemTitle>\r\n </ComboboxItem>\r\n ))}\r\n {isCreatingItem && (\r\n <ComboboxItem\r\n value={{ label: trimmedInput, value: trimmedInput, tag: true }}\r\n >\r\n {!isInputSelected && (\r\n <span className=\"text-text-secondary text-body-medium-3 col-start-2\">Create: {trimmedInput}</span>\r\n )}\r\n {isInputSelected && (\r\n <ComboboxItemTitle>{trimmedInput}</ComboboxItemTitle>\r\n )}\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 { ComboboxChip }\r\nexport type { ComboboxChipProps }\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a as a$1,b as b$1,m,e,q,s,w}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a as a$1,b as b$1,m,e,q,s,w}from'./chunk-C5UISTOE.js';import {a}from'./chunk-Y6TKCAAJ.js';import*as t from'react';import*as g from'react-phone-number-input';import D 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 P=t.createContext({size:"md"}),A={"3xs":"h-3 w-4.5","2xs":"h-3.5 w-5",xs:"h-3.5 w-5",sm:"h-4 w-6",md:"h-4 w-6",lg:"h-4 w-6",xl:"h-4.5 w-6.5"},W={"3xs":"size-3","2xs":"size-3",xs:"size-3.5",sm:"size-3.5",md:"size-3.5",lg:"size-4",xl:"size-4"},j={"3xs":"text-label-medium-4","2xs":"text-label-medium-4",xs:"text-body-medium-3",sm:"text-body-medium-3",md:"text-body-medium-3",lg:"text-body-medium-2",xl:"text-body-medium-2"},R=({country:s,countryName:o,className:r})=>{let l=s?D[s]:void 0;return jsx("span",{className:cn("flex h-4 w-6 shrink-0 overflow-hidden rounded-sm bg-fg-quaternary/20 [&_svg:not([class*='size-'])]:size-full",r),children:l&&jsx(l,{title:o})})},b=44,H=288,L=6;function J({disabled:s$1,value:o,options:r,onChange:l}){let{size:u="md"}=t.useContext(P),[C,c]=t.useState(false),[m$1,i]=t.useState(""),[N,z]=t.useState(0),v=t.useRef(null),h=t.useMemo(()=>r.filter(e=>!!e.value),[r]),p=t.useMemo(()=>{let e=m$1.trim().toLowerCase();return e?h.filter(a=>{let x=g.getCountryCallingCode(a.value);return a.label.toLowerCase().includes(e)||a.value.toLowerCase().includes(e)||x.includes(e.replace(/^\+/,""))}):h},[m$1,h]),_=t.useMemo(()=>h.find(e=>e.value===o)??null,[h,o]);t.useEffect(()=>{z(0),v.current&&(v.current.scrollTop=0);},[m$1]);let U=Math.min(p.length*b,H),I=t.useMemo(()=>{let e=Math.floor(N/b),a=Math.max(0,e-L),x=Math.ceil(H/b),w=Math.min(p.length,e+x+L);return {startIndex:a,endIndex:w,items:p.slice(a,w)}},[p,N]),q$1=I.startIndex*b,Y=Math.max(0,(p.length-I.endIndex)*b),B=t.useCallback(e=>{e?.value&&(l(e.value),i(""),c(false));},[l]);return jsxs(a$1,{behavior:"default",disabled:s$1,inputValue:m$1,items:p,open:C,value:_,virtualized:true,filter:null,isItemEqualToValue:(e,a)=>e.value===a.value,openOnInputClick:false,onValueChange:B,onInputValueChange:i,onOpenChange:e=>{c(e),e||i("");},children:[jsx(b$1,{render:jsxs("button",{type:"button",className:cn(a({size:u}),"w-auto shrink-0 justify-between gap-1.5 rounded-r-none border-r-0","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:s$1,children:[jsxs("span",{className:"flex items-center gap-1.5 overflow-hidden",children:[jsx(R,{country:o,countryName:o,className:A[u??"md"]}),o&&jsx("span",{className:cn("text-text-primary",j[u??"md"]??"text-body-medium-3"),children:o})]}),jsx(ChevronsUpDownIcon,{className:cn("shrink-0 text-fg-quaternary",W[u??"md"]??"size-3.5")})]})}),jsxs(m,{className:"w-72",children:[jsx(e,{placeholder:"Search country...","aria-label":"Search country"}),jsx(q,{status:p.length===0?"empty":null}),jsx(s,{ref:v,className:"relative gap-0",style:{height:U},onScroll:e=>z(e.currentTarget.scrollTop),children:jsx("div",{className:"flex w-full shrink-0 flex-col",style:{paddingTop:q$1,paddingBottom:Y},children:I.items.map((e,a)=>{let x=I.startIndex+a;return jsx(w,{index:x,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:["+",g.getCountryCallingCode(e.value)]})]})},e.value)})})})]})]})}var F=t.forwardRef(({className:s,onChange:o,size:r,...l},u)=>{let C=t.useContext(P),c=r??C.size??"md",m=t.useCallback(i=>{i.currentTarget.value==="+"&&(i.currentTarget.value=""),o?.(i);},[o]);return jsx("input",{className:cn(a({size:c}),"flex-1 rounded-l-none focus-visible:z-10",s),ref:u,type:"tel",onChange:m,...l})});F.displayName="InputComponent";var K=t.forwardRef(({className:s,onChange:o,value:r,size:l="md",...u},C)=>jsx(P.Provider,{value:{size:l},children:jsx(g.default,{ref:C,className:cn("flex w-full min-w-0 items-center",s),flagComponent:R,countrySelectComponent:J,inputComponent:F,smartCaret:false,value:r||void 0,onChange:c=>o?.(c||""),...u})}));K.displayName="PhoneInput";export{K as a};//# sourceMappingURL=chunk-7ZY7ZMEK.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-7ZY7ZMEK.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/composites/phone-input.tsx"],"names":["PhoneInputContext","phoneInputFlagSizes","phoneInputChevronSizes","phoneInputCountryCodeSizes","FlagComponent","country","countryName","className","Flag","flags","jsx","cn","COUNTRY_ROW_HEIGHT","COUNTRY_LIST_HEIGHT","COUNTRY_OVERSCAN","CountrySelect","disabled","selectedCountry","countryList","onChange","size","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","inputVariants","ChevronsUpDownIcon","ComboboxPopup","ComboboxInput","ComboboxStatus","ComboboxList","event","virtualIndex","index","ComboboxItem","InputComponent","sizeProp","props","ref","context","handleChange","PhoneInput"],"mappings":"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","file":"chunk-I7XV55MM.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\nimport type { VariantProps } from \"class-variance-authority\"\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types & Context\r\n// ---------------------------------------------------------------------------\r\n\r\ntype PhoneInputSize = VariantProps<typeof inputVariants>[\"size\"]\r\n\r\nconst PhoneInputContext = React.createContext<{ size?: PhoneInputSize }>({\r\n size: \"md\",\r\n})\r\n\r\ntype PhoneInputProps = Omit<\r\n React.ComponentProps<\"input\">,\r\n \"onChange\" | \"value\" | \"ref\" | \"size\"\r\n> &\r\n Omit<RPNInput.Props<typeof RPNInput.default>, \"onChange\" | \"size\"> & {\r\n onChange?: (value: RPNInput.Value) => void\r\n size?: PhoneInputSize\r\n }\r\n\r\nconst phoneInputFlagSizes: Record<string, string> = {\r\n \"3xs\": \"h-3 w-4.5\",\r\n \"2xs\": \"h-3.5 w-5\",\r\n xs: \"h-3.5 w-5\",\r\n sm: \"h-4 w-6\",\r\n md: \"h-4 w-6\",\r\n lg: \"h-4 w-6\",\r\n xl: \"h-4.5 w-6.5\",\r\n}\r\n\r\nconst phoneInputChevronSizes: Record<string, string> = {\r\n \"3xs\": \"size-3\",\r\n \"2xs\": \"size-3\",\r\n xs: \"size-3.5\",\r\n sm: \"size-3.5\",\r\n md: \"size-3.5\",\r\n lg: \"size-4\",\r\n xl: \"size-4\",\r\n}\r\n\r\nconst phoneInputCountryCodeSizes: Record<string, string> = {\r\n \"3xs\": \"text-label-medium-4\",\r\n \"2xs\": \"text-label-medium-4\",\r\n xs: \"text-body-medium-3\",\r\n sm: \"text-body-medium-3\",\r\n md: \"text-body-medium-3\",\r\n lg: \"text-body-medium-2\",\r\n xl: \"text-body-medium-2\",\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Flag\r\n// ---------------------------------------------------------------------------\r\n\r\ntype FlagComponentProps = RPNInput.FlagProps & {\r\n className?: string\r\n}\r\n\r\nconst FlagComponent = ({ country, countryName, className }: FlagComponentProps) => {\r\n const Flag = country ? flags[country] : undefined\r\n\r\n return (\r\n <span\r\n className={cn(\r\n \"flex h-4 w-6 shrink-0 overflow-hidden rounded-sm bg-fg-quaternary/20 [&_svg:not([class*='size-'])]:size-full\",\r\n className\r\n )}\r\n >\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 { size = \"md\" } = React.useContext(PhoneInputContext)\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({ size }),\r\n \"w-auto shrink-0 justify-between gap-1.5 rounded-r-none border-r-0\",\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 className={phoneInputFlagSizes[size ?? \"md\"]}\r\n />\r\n {selectedCountry && (\r\n <span\r\n className={cn(\r\n \"text-text-primary\",\r\n phoneInputCountryCodeSizes[size ?? \"md\"] ?? \"text-body-medium-3\"\r\n )}\r\n >\r\n {selectedCountry}\r\n </span>\r\n )}\r\n </span>\r\n <ChevronsUpDownIcon\r\n className={cn(\r\n \"shrink-0 text-fg-quaternary\",\r\n phoneInputChevronSizes[size ?? \"md\"] ?? \"size-3.5\"\r\n )}\r\n />\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\"> & { size?: PhoneInputSize }\r\n>(({ className, onChange, size: sizeProp, ...props }, ref) => {\r\n const context = React.useContext(PhoneInputContext)\r\n const size = sizeProp ?? context.size ?? \"md\"\r\n\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({ size }),\r\n \"flex-1 rounded-l-none focus-visible:z-10\",\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 size = \"md\",\r\n ...props\r\n }, ref) => {\r\n return (\r\n <PhoneInputContext.Provider value={{ size }}>\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 </PhoneInputContext.Provider>\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":["PhoneInputContext","phoneInputFlagSizes","phoneInputChevronSizes","phoneInputCountryCodeSizes","FlagComponent","country","countryName","className","Flag","flags","jsx","cn","COUNTRY_ROW_HEIGHT","COUNTRY_LIST_HEIGHT","COUNTRY_OVERSCAN","CountrySelect","disabled","selectedCountry","countryList","onChange","size","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","inputVariants","ChevronsUpDownIcon","ComboboxPopup","ComboboxInput","ComboboxStatus","ComboboxList","event","virtualIndex","index","ComboboxItem","InputComponent","sizeProp","props","ref","context","handleChange","PhoneInput"],"mappings":"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","file":"chunk-7ZY7ZMEK.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\nimport type { VariantProps } from \"class-variance-authority\"\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types & Context\r\n// ---------------------------------------------------------------------------\r\n\r\ntype PhoneInputSize = VariantProps<typeof inputVariants>[\"size\"]\r\n\r\nconst PhoneInputContext = React.createContext<{ size?: PhoneInputSize }>({\r\n size: \"md\",\r\n})\r\n\r\ntype PhoneInputProps = Omit<\r\n React.ComponentProps<\"input\">,\r\n \"onChange\" | \"value\" | \"ref\" | \"size\"\r\n> &\r\n Omit<RPNInput.Props<typeof RPNInput.default>, \"onChange\" | \"size\"> & {\r\n onChange?: (value: RPNInput.Value) => void\r\n size?: PhoneInputSize\r\n }\r\n\r\nconst phoneInputFlagSizes: Record<string, string> = {\r\n \"3xs\": \"h-3 w-4.5\",\r\n \"2xs\": \"h-3.5 w-5\",\r\n xs: \"h-3.5 w-5\",\r\n sm: \"h-4 w-6\",\r\n md: \"h-4 w-6\",\r\n lg: \"h-4 w-6\",\r\n xl: \"h-4.5 w-6.5\",\r\n}\r\n\r\nconst phoneInputChevronSizes: Record<string, string> = {\r\n \"3xs\": \"size-3\",\r\n \"2xs\": \"size-3\",\r\n xs: \"size-3.5\",\r\n sm: \"size-3.5\",\r\n md: \"size-3.5\",\r\n lg: \"size-4\",\r\n xl: \"size-4\",\r\n}\r\n\r\nconst phoneInputCountryCodeSizes: Record<string, string> = {\r\n \"3xs\": \"text-label-medium-4\",\r\n \"2xs\": \"text-label-medium-4\",\r\n xs: \"text-body-medium-3\",\r\n sm: \"text-body-medium-3\",\r\n md: \"text-body-medium-3\",\r\n lg: \"text-body-medium-2\",\r\n xl: \"text-body-medium-2\",\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Flag\r\n// ---------------------------------------------------------------------------\r\n\r\ntype FlagComponentProps = RPNInput.FlagProps & {\r\n className?: string\r\n}\r\n\r\nconst FlagComponent = ({ country, countryName, className }: FlagComponentProps) => {\r\n const Flag = country ? flags[country] : undefined\r\n\r\n return (\r\n <span\r\n className={cn(\r\n \"flex h-4 w-6 shrink-0 overflow-hidden rounded-sm bg-fg-quaternary/20 [&_svg:not([class*='size-'])]:size-full\",\r\n className\r\n )}\r\n >\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 { size = \"md\" } = React.useContext(PhoneInputContext)\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({ size }),\r\n \"w-auto shrink-0 justify-between gap-1.5 rounded-r-none border-r-0\",\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 className={phoneInputFlagSizes[size ?? \"md\"]}\r\n />\r\n {selectedCountry && (\r\n <span\r\n className={cn(\r\n \"text-text-primary\",\r\n phoneInputCountryCodeSizes[size ?? \"md\"] ?? \"text-body-medium-3\"\r\n )}\r\n >\r\n {selectedCountry}\r\n </span>\r\n )}\r\n </span>\r\n <ChevronsUpDownIcon\r\n className={cn(\r\n \"shrink-0 text-fg-quaternary\",\r\n phoneInputChevronSizes[size ?? \"md\"] ?? \"size-3.5\"\r\n )}\r\n />\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\"> & { size?: PhoneInputSize }\r\n>(({ className, onChange, size: sizeProp, ...props }, ref) => {\r\n const context = React.useContext(PhoneInputContext)\r\n const size = sizeProp ?? context.size ?? \"md\"\r\n\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({ size }),\r\n \"flex-1 rounded-l-none focus-visible:z-10\",\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 size = \"md\",\r\n ...props\r\n }, ref) => {\r\n return (\r\n <PhoneInputContext.Provider value={{ size }}>\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 </PhoneInputContext.Provider>\r\n )\r\n })\r\nPhoneInput.displayName = \"PhoneInput\"\r\n\r\nexport { PhoneInput, type PhoneInputProps }\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a as a$1,b,c}from'./chunk-2RHSXF3X.js';import {a}from'./chunk-7P4PFMCM.js';import {a as a$
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a as a$1,b,c}from'./chunk-2RHSXF3X.js';import {a}from'./chunk-7P4PFMCM.js';import {a as a$4}from'./chunk-5ETIHFSE.js';import {a as a$3}from'./chunk-XJTOYNCA.js';import {a as a$2}from'./chunk-UCCQUPMT.js';import'react';import {InfoIcon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsx,jsxs,Fragment}from'react/jsx-runtime';function E({className:t,containerClassName:a$1,...n}){return jsx(a,{className:cn("relative w-full rounded-xl border border-border-primary bg-bg-primary",a$1),"data-slot":"table-container",children:jsx("table",{className:cn("w-full caption-bottom text-body-regular-2",t),"data-slot":"table",...n})})}function j(t){return jsx("thead",{"data-slot":"table-header",...t})}function q({className:t,...a}){return jsx("tbody",{className:cn("[&_tr:last-child_td:after]:h-0",t),"data-slot":"table-body",...a})}function B({className:t,...a}){return jsx("tfoot",{className:cn("border-t border-border-primary bg-bg-secondary font-medium [&>tr]:last:border-b-0",t),"data-slot":"table-footer",...a})}function D({className:t,...a}){return jsx("tr",{className:cn("transition-colors hover:bg-bg-secondary data-[state=selected]:bg-bg-brand-primary/40",t),"data-slot":"table-row",...a})}function O({className:t,align:a,variant:n="string",tooltip:l,sortable:o,sortDirection:p,onSort:b$1,children:N,...C}){let i=a||(n==="number"?"end":"start"),c$1=!!(l||o),R=i==="end",m=l?jsxs(a$1,{children:[jsx(b,{render:jsx("button",{type:"button",className:"inline-flex items-center justify-center text-fg-quaternary hover:text-text-primary"}),children:jsx(InfoIcon,{className:"size-3.5"})}),jsx(c,{side:"top",children:l})]}):null,f=o?jsx("button",{type:"button",onClick:b$1,className:"inline-flex items-center text-fg-quaternary hover:text-text-primary focus:outline-none","aria-label":"Sort column",children:p==="asc"?jsx(a$2,{size:12}):p==="desc"?jsx(a$3,{size:12}):jsx(a$4,{size:12})}):null,d=jsx("span",{className:cn("truncate",o&&"cursor-pointer select-none"),onClick:o?b$1:void 0,children:N});return jsx("th",{className:cn("relative after:absolute after:inset-x-0 after:bottom-0 after:h-px after:bg-border-tertiary bg-bg-tertiary text-label-bold-3 text-text-tertiary h-10 px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",!c$1&&i==="end"&&"text-right",!c$1&&i==="start"&&"text-left",!c$1&&i==="center"&&"text-center",t),"data-slot":"table-head",...C,children:c$1?jsx("div",{className:"flex w-full items-center justify-between gap-2",children:R?jsxs(Fragment,{children:[jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[m,f]}),jsx("div",{className:"flex items-center shrink-0 justify-end",children:d})]}):jsxs(Fragment,{children:[d,jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[m,f]})]})}):d})}function _({className:t,align:a,variant:n="string",...l}){let o=a||(n==="number"?"end":"start");return jsx("td",{className:cn("relative after:absolute after:inset-x-0 after:bottom-0 after:h-px after:bg-border-tertiary bg-bg-primary text-text-primary px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",o==="end"&&"text-right",o==="start"&&"text-left",o==="center"&&"text-center",t),"data-slot":"table-cell",...l})}function F({className:t,...a}){return jsx("caption",{className:cn("text-text-secondary mt-4 text-body-regular-2",t),"data-slot":"table-caption",...a})}export{E as a,j as b,q as c,B as d,D as e,O as f,_ as g,F as h};//# sourceMappingURL=chunk-BRWBF2EN.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-BRWBF2EN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/table.tsx"],"names":["Table","className","containerClassName","props","jsx","ScrollArea","cn","TableHeader","TableBody","TableFooter","TableRow","TableHead","align","variant","tooltip","sortable","sortDirection","onSort","children","effectiveAlign","hasControls","isEnd","tooltipElement","jsxs","Tooltip","TooltipTrigger","InfoIcon","TooltipPopup","sortElement","sort_ascending_icon_default","sort_descending_icon_default","sort_default_icon_default","titleElement","Fragment","TableCell","TableCaption"],"mappings":"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","file":"chunk-RH7BQGTL.js","sourcesContent":["import * as React from \"react\"\r\nimport { InfoIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { SortAscendingIcon, SortDefaultIcon, SortDescendingIcon } from \"../icons\"\r\nimport {\r\n Tooltip,\r\n TooltipPopup,\r\n TooltipTrigger,\r\n} from \"./tooltip\"\r\nimport { ScrollArea } from \"./scroll-area\"\r\n\r\ninterface TableProps extends React.ComponentProps<\"table\"> {\r\n containerClassName?: string\r\n}\r\n\r\nfunction Table({ className, containerClassName, ...props }: TableProps) {\r\n return (\r\n <ScrollArea\r\n className={cn(\r\n \"relative w-full rounded-xl border border-border-primary bg-bg-primary\",\r\n containerClassName\r\n )}\r\n data-slot=\"table-container\"\r\n >\r\n <table\r\n className={cn(\"w-full caption-bottom text-body-regular-2\", className)}\r\n data-slot=\"table\"\r\n {...props}\r\n />\r\n </ScrollArea>\r\n )\r\n}\r\n\r\nfunction TableHeader(props: React.ComponentProps<\"thead\">) {\r\n return (\r\n <thead\r\n data-slot=\"table-header\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\r\n return (\r\n <tbody\r\n className={cn(\"[&_tr:last-child_td:after]:h-0\", className)}\r\n data-slot=\"table-body\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\r\n return (\r\n <tfoot\r\n className={cn(\r\n \"border-t border-border-primary bg-bg-secondary font-medium [&>tr]:last:border-b-0\",\r\n className\r\n )}\r\n data-slot=\"table-footer\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\r\n return (\r\n <tr\r\n className={cn(\r\n \"transition-colors hover:bg-bg-secondary data-[state=selected]:bg-bg-brand-primary/40\",\r\n className\r\n )}\r\n data-slot=\"table-row\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ninterface TableHeadProps extends Omit<React.ComponentProps<\"th\">, \"align\"> {\r\n align?: \"start\" | \"end\" | \"center\"\r\n variant?: \"string\" | \"number\"\r\n tooltip?: React.ReactNode\r\n sortable?: boolean\r\n sortDirection?: \"asc\" | \"desc\" | false | null\r\n onSort?: () => void\r\n}\r\n\r\nfunction TableHead({\r\n className,\r\n align,\r\n variant = \"string\",\r\n tooltip,\r\n sortable,\r\n sortDirection,\r\n onSort,\r\n children,\r\n ...props\r\n}: TableHeadProps) {\r\n const effectiveAlign = align || (variant === \"number\" ? \"end\" : \"start\")\r\n const hasControls = Boolean(tooltip || sortable)\r\n const isEnd = effectiveAlign === \"end\"\r\n\r\n const tooltipElement = tooltip ? (\r\n <Tooltip>\r\n <TooltipTrigger\r\n render={\r\n <button\r\n type=\"button\"\r\n className=\"inline-flex items-center justify-center text-fg-quaternary hover:text-text-primary\"\r\n />\r\n }\r\n >\r\n <InfoIcon className=\"size-3.5\" />\r\n </TooltipTrigger>\r\n <TooltipPopup side=\"top\">{tooltip}</TooltipPopup>\r\n </Tooltip>\r\n ) : null\r\n\r\n const sortElement = sortable ? (\r\n <button\r\n type=\"button\"\r\n onClick={onSort}\r\n className=\"inline-flex items-center text-fg-quaternary hover:text-text-primary focus:outline-none\"\r\n aria-label=\"Sort column\"\r\n >\r\n {sortDirection === \"asc\" ? (\r\n <SortAscendingIcon size={12} />\r\n ) : sortDirection === \"desc\" ? (\r\n <SortDescendingIcon size={12} />\r\n ) : (\r\n <SortDefaultIcon size={12} />\r\n )}\r\n </button>\r\n ) : null\r\n\r\n const titleElement = (\r\n <span\r\n className={cn(\"truncate\", sortable && \"cursor-pointer select-none\")}\r\n onClick={sortable ? onSort : undefined}\r\n >\r\n {children}\r\n </span>\r\n )\r\n\r\n return (\r\n <th\r\n className={cn(\r\n \"relative after:absolute after:inset-x-0 after:bottom-0 after:h-px after:bg-border-tertiary bg-bg-tertiary text-label-bold-3 text-text-tertiary h-10 px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0\",\r\n !hasControls && effectiveAlign === \"end\" && \"text-right\",\r\n !hasControls && effectiveAlign === \"start\" && \"text-left\",\r\n !hasControls && effectiveAlign === \"center\" && \"text-center\",\r\n className\r\n )}\r\n data-slot=\"table-head\"\r\n {...props}\r\n >\r\n {hasControls ? (\r\n <div className=\"flex w-full items-center justify-between gap-2\">\r\n {isEnd ? (\r\n <>\r\n <div className=\"flex items-center gap-1.5 shrink-0\">\r\n {tooltipElement}\r\n {sortElement}\r\n </div>\r\n <div className=\"flex items-center shrink-0 justify-end\">\r\n {titleElement}\r\n </div>\r\n </>\r\n ) : (\r\n <>\r\n {titleElement}\r\n <div className=\"flex items-center gap-1.5 shrink-0\">\r\n {tooltipElement}\r\n {sortElement}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n ) : (\r\n titleElement\r\n )}\r\n </th>\r\n )\r\n}\r\n\r\ninterface TableCellProps extends Omit<React.ComponentProps<\"td\">, \"align\"> {\r\n align?: \"start\" | \"end\" | \"center\"\r\n variant?: \"string\" | \"number\"\r\n}\r\n\r\nfunction TableCell({\r\n className,\r\n align,\r\n variant = \"string\",\r\n ...props\r\n}: TableCellProps) {\r\n const effectiveAlign = align || (variant === \"number\" ? \"end\" : \"start\")\r\n\r\n return (\r\n <td\r\n className={cn(\r\n \"relative after:absolute after:inset-x-0 after:bottom-0 after:h-px after:bg-border-tertiary bg-bg-primary text-text-primary px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0\",\r\n effectiveAlign === \"end\" && \"text-right\",\r\n effectiveAlign === \"start\" && \"text-left\",\r\n effectiveAlign === \"center\" && \"text-center\",\r\n className\r\n )}\r\n data-slot=\"table-cell\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableCaption({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"caption\">) {\r\n return (\r\n <caption\r\n className={cn(\"text-text-secondary mt-4 text-body-regular-2\", className)}\r\n data-slot=\"table-caption\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Table,\r\n TableBody,\r\n TableCaption,\r\n TableCell,\r\n TableFooter,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n type TableCellProps,\r\n type TableHeadProps,\r\n type TableProps,\r\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/ui/table.tsx"],"names":["Table","className","containerClassName","props","jsx","ScrollArea","cn","TableHeader","TableBody","TableFooter","TableRow","TableHead","align","variant","tooltip","sortable","sortDirection","onSort","children","effectiveAlign","hasControls","isEnd","tooltipElement","jsxs","Tooltip","TooltipTrigger","InfoIcon","TooltipPopup","sortElement","sort_ascending_icon_default","sort_descending_icon_default","sort_default_icon_default","titleElement","Fragment","TableCell","TableCaption"],"mappings":"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","file":"chunk-BRWBF2EN.js","sourcesContent":["import * as React from \"react\"\r\nimport { InfoIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { SortAscendingIcon, SortDefaultIcon, SortDescendingIcon } from \"../icons\"\r\nimport {\r\n Tooltip,\r\n TooltipPopup,\r\n TooltipTrigger,\r\n} from \"./tooltip\"\r\nimport { ScrollArea } from \"./scroll-area\"\r\n\r\ninterface TableProps extends React.ComponentProps<\"table\"> {\r\n containerClassName?: string\r\n}\r\n\r\nfunction Table({ className, containerClassName, ...props }: TableProps) {\r\n return (\r\n <ScrollArea\r\n className={cn(\r\n \"relative w-full rounded-xl border border-border-primary bg-bg-primary\",\r\n containerClassName\r\n )}\r\n data-slot=\"table-container\"\r\n >\r\n <table\r\n className={cn(\"w-full caption-bottom text-body-regular-2\", className)}\r\n data-slot=\"table\"\r\n {...props}\r\n />\r\n </ScrollArea>\r\n )\r\n}\r\n\r\nfunction TableHeader(props: React.ComponentProps<\"thead\">) {\r\n return (\r\n <thead\r\n data-slot=\"table-header\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\r\n return (\r\n <tbody\r\n className={cn(\"[&_tr:last-child_td:after]:h-0\", className)}\r\n data-slot=\"table-body\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\r\n return (\r\n <tfoot\r\n className={cn(\r\n \"border-t border-border-primary bg-bg-secondary font-medium [&>tr]:last:border-b-0\",\r\n className\r\n )}\r\n data-slot=\"table-footer\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\r\n return (\r\n <tr\r\n className={cn(\r\n \"transition-colors hover:bg-bg-secondary data-[state=selected]:bg-bg-brand-primary/40\",\r\n className\r\n )}\r\n data-slot=\"table-row\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ninterface TableHeadProps extends Omit<React.ComponentProps<\"th\">, \"align\"> {\r\n align?: \"start\" | \"end\" | \"center\"\r\n variant?: \"string\" | \"number\"\r\n tooltip?: React.ReactNode\r\n sortable?: boolean\r\n sortDirection?: \"asc\" | \"desc\" | false | null\r\n onSort?: () => void\r\n}\r\n\r\nfunction TableHead({\r\n className,\r\n align,\r\n variant = \"string\",\r\n tooltip,\r\n sortable,\r\n sortDirection,\r\n onSort,\r\n children,\r\n ...props\r\n}: TableHeadProps) {\r\n const effectiveAlign = align || (variant === \"number\" ? \"end\" : \"start\")\r\n const hasControls = Boolean(tooltip || sortable)\r\n const isEnd = effectiveAlign === \"end\"\r\n\r\n const tooltipElement = tooltip ? (\r\n <Tooltip>\r\n <TooltipTrigger\r\n render={\r\n <button\r\n type=\"button\"\r\n className=\"inline-flex items-center justify-center text-fg-quaternary hover:text-text-primary\"\r\n />\r\n }\r\n >\r\n <InfoIcon className=\"size-3.5\" />\r\n </TooltipTrigger>\r\n <TooltipPopup side=\"top\">{tooltip}</TooltipPopup>\r\n </Tooltip>\r\n ) : null\r\n\r\n const sortElement = sortable ? (\r\n <button\r\n type=\"button\"\r\n onClick={onSort}\r\n className=\"inline-flex items-center text-fg-quaternary hover:text-text-primary focus:outline-none\"\r\n aria-label=\"Sort column\"\r\n >\r\n {sortDirection === \"asc\" ? (\r\n <SortAscendingIcon size={12} />\r\n ) : sortDirection === \"desc\" ? (\r\n <SortDescendingIcon size={12} />\r\n ) : (\r\n <SortDefaultIcon size={12} />\r\n )}\r\n </button>\r\n ) : null\r\n\r\n const titleElement = (\r\n <span\r\n className={cn(\"truncate\", sortable && \"cursor-pointer select-none\")}\r\n onClick={sortable ? onSort : undefined}\r\n >\r\n {children}\r\n </span>\r\n )\r\n\r\n return (\r\n <th\r\n className={cn(\r\n \"relative after:absolute after:inset-x-0 after:bottom-0 after:h-px after:bg-border-tertiary bg-bg-tertiary text-label-bold-3 text-text-tertiary h-10 px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0\",\r\n !hasControls && effectiveAlign === \"end\" && \"text-right\",\r\n !hasControls && effectiveAlign === \"start\" && \"text-left\",\r\n !hasControls && effectiveAlign === \"center\" && \"text-center\",\r\n className\r\n )}\r\n data-slot=\"table-head\"\r\n {...props}\r\n >\r\n {hasControls ? (\r\n <div className=\"flex w-full items-center justify-between gap-2\">\r\n {isEnd ? (\r\n <>\r\n <div className=\"flex items-center gap-1.5 shrink-0\">\r\n {tooltipElement}\r\n {sortElement}\r\n </div>\r\n <div className=\"flex items-center shrink-0 justify-end\">\r\n {titleElement}\r\n </div>\r\n </>\r\n ) : (\r\n <>\r\n {titleElement}\r\n <div className=\"flex items-center gap-1.5 shrink-0\">\r\n {tooltipElement}\r\n {sortElement}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n ) : (\r\n titleElement\r\n )}\r\n </th>\r\n )\r\n}\r\n\r\ninterface TableCellProps extends Omit<React.ComponentProps<\"td\">, \"align\"> {\r\n align?: \"start\" | \"end\" | \"center\"\r\n variant?: \"string\" | \"number\"\r\n}\r\n\r\nfunction TableCell({\r\n className,\r\n align,\r\n variant = \"string\",\r\n ...props\r\n}: TableCellProps) {\r\n const effectiveAlign = align || (variant === \"number\" ? \"end\" : \"start\")\r\n\r\n return (\r\n <td\r\n className={cn(\r\n \"relative after:absolute after:inset-x-0 after:bottom-0 after:h-px after:bg-border-tertiary bg-bg-primary text-text-primary px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0\",\r\n effectiveAlign === \"end\" && \"text-right\",\r\n effectiveAlign === \"start\" && \"text-left\",\r\n effectiveAlign === \"center\" && \"text-center\",\r\n className\r\n )}\r\n data-slot=\"table-cell\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableCaption({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"caption\">) {\r\n return (\r\n <caption\r\n className={cn(\"text-text-secondary mt-4 text-body-regular-2\", className)}\r\n data-slot=\"table-caption\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Table,\r\n TableBody,\r\n TableCaption,\r\n TableCell,\r\n TableFooter,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n type TableCellProps,\r\n type TableHeadProps,\r\n type TableProps,\r\n}"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {c,d,e,f,g,a,h,i,j,k,l,m,n,o,p,q,r,s,E,t,u,v,w,x,y,z,A,B,C,D}from'./chunk-HHG7BSWN.js';import {a as a$3}from'./chunk-TED2PUK6.js';import {b}from'./chunk-Y6TKCAAJ.js';import {a as a$1}from'./chunk-7P4PFMCM.js';import {a as a$2}from'./chunk-XG3W7QMP.js';import {b as b$2,c as c$1,d as d$1}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {c,d,e,f,g,a,h,i,j,k,l,m,n,o,p,q,r,s,E,t,u,v,w,x,y,z,A,B,C,D}from'./chunk-HHG7BSWN.js';import {a as a$3}from'./chunk-TED2PUK6.js';import {b}from'./chunk-Y6TKCAAJ.js';import {a as a$1}from'./chunk-7P4PFMCM.js';import {a as a$2}from'./chunk-XG3W7QMP.js';import {b as b$2,c as c$1,d as d$1}from'./chunk-Y5YFPTOQ.js';import {b as b$1,e as e$1}from'./chunk-JLZNZFOO.js';import'react';import {SearchIcon,XIcon,Loader2Icon,CheckCircle2Icon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsx,jsxs,Fragment}from'react/jsx-runtime';function wo(o){return jsx(c,{...o})}function io(o){let{className:t,...r}=o;return jsx(d,{className:cn("group/combobox-trigger flex items-center gap-2",t),...r})}function ko(o){let{className:t,...r}=o;return jsx(e,{className:cn("text-label-semibold-2 text-text-secondary",t),...r})}function Lo(o){let{className:t,...r}=o;return jsx(f,{className:cn("flex w-full items-center gap-2",t),...r})}function Ro({className:o,wrapperClassName:t,size:r="xs",...i}){return jsx("div",{className:cn("p-3 border-b border-border-primary",t),children:jsx(g,{className:o,render:jsx(b,{size:r,startContent:jsx(SearchIcon,{})}),...i})})}function So({className:o,displayValueKey:t={label:"label",value:"value"},placeholder:r="Search and Select Company",inputProps:i,size:m,...s}){let{inputValue:p,setInputValue:n}=a(),{className:x,startContent:to,...ro}=i||{};return jsx("div",{className:cn("flex flex-col gap-2",o),children:jsxs(so,{onMouseDown:C=>C.preventBaseUIHandler(),className:"flex-col",children:[jsx(g,{render:jsx(b,{className:cn("h-9 text-body-regular-3 pl-9 pr-7",x),endContent:jsx(io,{nativeButton:false,render:jsx(XIcon,{className:"!size-5 !right-1.5 data-[hidden=true]:opacity-0 opacity-100 transition-opacity duration-300 cursor-pointer","data-hidden":!p,"data-slot":"combobox-clear-input",onClick:C=>{n("",{reason:"none",event:C.nativeEvent,cancel:()=>{},allowPropagation:()=>{},isCanceled:false,isPropagationAllowed:true,trigger:void 0});}})}),placeholder:r,startContent:to??jsx(SearchIcon,{className:"!size-4 !text-fg-tertiary-hover"}),...ro}),...s}),jsx(mo,{children:C=>C?.map(y=>jsxs(po,{children:[y?.[t.label]||"",jsx(ao,{})]},y?.[t.value]||""))})]})})}function Go(o){let{className:t,...r}=o;return jsx(h,{className:cn("text-text-secondary",t),...r})}function Ao(o){return jsx(i,{render:jsx(XIcon,{}),...o})}function mo(o){return jsx(j,{...o})}function so({className:o,...t}){return jsx(k,{className:cn("flex flex-wrap gap-2",o),...t})}function po({className:o,...t}){return jsx(b$1,{className:cn("ring-1 ring-border-brand text-body-medium-3",o),color:"brand",render:jsx(l,{...t}),size:"lg"})}function ao({className:o,...t}){return jsx(e$1,{className:cn("text-fg-quaternary",o),render:jsx(m,{...t})})}function Ho({className:o$1,align:t="start",sideOffset:r=4,container:i,initialFocus:m,finalFocus:s,style:p$1,children:n$1,...x}){return jsx(n,{container:i,children:jsx(o,{align:t,className:"isolate z-50",sideOffset:r,...x,children:jsx(p,{className:cn("group/combobox-popup bg-bg-primary text-text-primary max-h-(--available-height) w-72 max-w-(--available-width) origin-(--transform-origin) rounded-md border border-border-primary shadow-md outline-hidden",o$1),finalFocus:s,initialFocus:m,style:p$1,children:jsx(no,{children:n$1})})})})}function zo(o){return jsx(n,{...o})}function Vo(o$1){return jsx(o,{...o$1})}function To(o){let{className:t,...r}=o;return jsx(q,{className:cn("bg-black/30",t),...r})}function Bo({className:o,status:t,...r$1}){let{inputValue:i}=a(),m=i?.toString().trim(),p=t==="empty"&&m?`No matches for "${m}".`:t==="empty"&&!m?"No results.":t==="pending"?jsxs(Fragment,{children:[jsx(Loader2Icon,{className:"animate-spin size-4"}),jsx("span",{children:"Searching..."})]}):null;return jsx(r,{className:cn("px-2 py-2.5 text-body-regular-2 text-text-disabled flex items-center gap-2",!p&&"hidden",o),...r$1,children:p})}function Eo({className:o,...t}){return jsx(s,{className:cn("px-3 py-2 text-body-regular-2 text-text-secondary",o),...t})}function Fo({className:o,children:t$1,...r}){let i=E();return jsx(a$1,{size:"sm",viewportRender:jsx(t,{className:cn("max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] flex flex-col p-1 focus-visible:outline-none data-[empty]:hidden",o),...r,children:typeof t$1=="function"?(m,s)=>t$1(m,s,i.length):t$1})})}function no(o){let{className:t,...r}=o;return jsx(u,{className:cn("absolute inset-0 bg-bg-primary-hover",t),...r})}function xo(o){return jsx(v,{...o})}function Mo(o){let{className:t,...r}=o;return jsx(w,{className:cn("group/combobox-row",t),...r})}function Do({className:o,children:t,indicator:r="check-circle",...i}){let{disabled:m}=i;return jsx(xo,{activeClassName:"bg-bg-primary-hover rounded-md",disabled:m,children:jsxs(x,{"data-indicator":r,className:cn("group/combobox-item relative grid grid-cols-[auto_1fr] items-center gap-x-2 my-px p-xp-md cursor-default outline-none select-none [[data-indicator=check-circle][data-selected]]:pr-8 data-[indicator=checkbox]:pl-8",o),...i,children:[t,jsx(Co,{className:"absolute group-data-[indicator=check-circle]/combobox-item:right-2 group-data-[indicator=checkbox]/combobox-item:left-2",keepMounted:r==="checkbox",render:(s,p)=>jsxs("span",{...s,children:[r==="check-circle"&&jsx(CheckCircle2Icon,{className:"size-4 text-fg-brand-primary shrink-0"}),r==="checkbox"&&jsx(a$2,{checked:p.selected})]})})]})})}function Oo({className:o,...t}){return jsx("span",{"data-slot":"combobox-item-title",className:cn("col-start-2 text-body-medium-3 text-text-primary truncate row-span-2 group-has-[[data-slot=combobox-item-description]]/combobox-item:row-span-1",o),...t})}function qo({className:o,...t}){return jsx("span",{"data-slot":"combobox-item-description",className:cn("col-start-2 text-body-regular-3 text-text-secondary truncate",o),...t})}function _o({className:o,...t}){return jsx("div",{"data-slot":"combobox-item-icon",className:cn("row-span-2 col-start-1 flex items-center justify-center size-6 rounded-md bg-bg-brand-solid text-fg-white shrink-0 [&_svg]:size-3.5",o),...t})}function jo({src:o,imageSrc:t,className:r,avatarClassName:i,imageAlt:m,fallbackText:s,children:p,...n}){let x=o??t;return jsx("div",{"data-slot":"combobox-item-avatar",className:cn("row-span-2 col-start-1 size-6 rounded-full overflow-hidden shrink-0",r),children:jsxs(b$2,{className:cn("size-full shrink-0",i),...n,children:[jsx(c$1,{alt:m,src:x}),jsx(d$1,{className:"flex aspect-square size-full items-center justify-center bg-bg-tertiary text-label-semibold-2 text-text-quaternary",children:s??p})]})})}function Co(o){return jsx(y,{...o})}function Uo(o){let{className:t,...r}=o;return jsx(z,{className:cn("my-1 h-px bg-border-primary",t),...r})}function Xo(o){let{className:t,...r}=o;return jsx(A,{className:cn("py-1",t),...r})}function $o(o){let{className:t,...r}=o;return jsx(B,{className:cn("px-3 py-1 text-body-semibold-sm text-text-secondary",t),...r})}function Jo(o){return jsx(C,{...o})}function Ko(o){let{className:t,...r}=o;return jsx(D,{className:cn("fill-bg-primary",t),...r})}function Qo({hasMore:o,threshold:t=.5,...r}){return jsx(a$3,{hasMore:o,threshold:t,...r,children:o&&jsxs("div",{className:"px-2 py-2.5 text-body-regular-2 text-text-disabled flex items-center gap-2",children:[jsx(Loader2Icon,{className:"animate-spin size-4"}),jsx("span",{children:"Loading more..."})]})})}export{jo as A,Co as B,Uo as C,Xo as D,$o as E,Jo as F,Ko as G,Qo as H,wo as a,io as b,ko as c,Lo as d,Ro as e,So as f,Go as g,Ao as h,mo as i,so as j,po as k,ao as l,Ho as m,zo as n,Vo as o,To as p,Bo as q,Eo as r,Fo as s,no as t,xo as u,Mo as v,Do as w,Oo as x,qo as y,_o as z};//# sourceMappingURL=chunk-C5UISTOE.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-C5UISTOE.js.map
|