@xploreu/components 0.4.13 → 0.4.15

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.
Files changed (77) hide show
  1. package/dist/chunk-2XZRLJCN.js +2 -0
  2. package/dist/chunk-2XZRLJCN.js.map +1 -0
  3. package/dist/{chunk-ZZWSZRER.js → chunk-3VMZENNL.js} +2 -2
  4. package/dist/{chunk-ZZWSZRER.js.map → chunk-3VMZENNL.js.map} +1 -1
  5. package/dist/{chunk-7WQRDDWL.js → chunk-6AKSAK5F.js} +2 -2
  6. package/dist/{chunk-7WQRDDWL.js.map → chunk-6AKSAK5F.js.map} +1 -1
  7. package/dist/chunk-AVJU2H5V.js +2 -0
  8. package/dist/{chunk-ITR3T6UB.js.map → chunk-AVJU2H5V.js.map} +1 -1
  9. package/dist/chunk-BTVE2DOC.js +2 -0
  10. package/dist/chunk-BTVE2DOC.js.map +1 -0
  11. package/dist/chunk-COJ4DWGS.js +2 -0
  12. package/dist/chunk-COJ4DWGS.js.map +1 -0
  13. package/dist/{chunk-SFMNEY3D.js → chunk-FB6VMMUL.js} +2 -2
  14. package/dist/{chunk-SFMNEY3D.js.map → chunk-FB6VMMUL.js.map} +1 -1
  15. package/dist/{chunk-7YSKM6DP.js → chunk-GJZZ55GE.js} +2 -2
  16. package/dist/{chunk-7YSKM6DP.js.map → chunk-GJZZ55GE.js.map} +1 -1
  17. package/dist/{chunk-C3FYXQCF.js → chunk-JILBFCPY.js} +2 -2
  18. package/dist/{chunk-C3FYXQCF.js.map → chunk-JILBFCPY.js.map} +1 -1
  19. package/dist/chunk-JLZNZFOO.js +2 -0
  20. package/dist/chunk-JLZNZFOO.js.map +1 -0
  21. package/dist/{chunk-FDXCGFD2.js → chunk-M73NAM5U.js} +2 -2
  22. package/dist/{chunk-FDXCGFD2.js.map → chunk-M73NAM5U.js.map} +1 -1
  23. package/dist/{chunk-RSLKHDFJ.js → chunk-NBRMYO6B.js} +2 -2
  24. package/dist/{chunk-RSLKHDFJ.js.map → chunk-NBRMYO6B.js.map} +1 -1
  25. package/dist/chunk-PU426AFH.js +2 -0
  26. package/dist/chunk-PU426AFH.js.map +1 -0
  27. package/dist/{chunk-KKE76CHJ.js → chunk-QX6F73UK.js} +2 -2
  28. package/dist/{chunk-KKE76CHJ.js.map → chunk-QX6F73UK.js.map} +1 -1
  29. package/dist/{chunk-MMCL4HWD.js → chunk-RJ2SAHLO.js} +2 -2
  30. package/dist/{chunk-MMCL4HWD.js.map → chunk-RJ2SAHLO.js.map} +1 -1
  31. package/dist/{chunk-DNO5M44I.js → chunk-TG3TM7XY.js} +2 -2
  32. package/dist/{chunk-DNO5M44I.js.map → chunk-TG3TM7XY.js.map} +1 -1
  33. package/dist/{chunk-RCA6JRHN.js → chunk-V2D72N26.js} +2 -2
  34. package/dist/{chunk-RCA6JRHN.js.map → chunk-V2D72N26.js.map} +1 -1
  35. package/dist/{chunk-WCAQIMAH.js → chunk-VE5SIEG4.js} +2 -2
  36. package/dist/{chunk-WCAQIMAH.js.map → chunk-VE5SIEG4.js.map} +1 -1
  37. package/dist/{chunk-JP737TCG.js → chunk-VNU37GJC.js} +2 -2
  38. package/dist/{chunk-JP737TCG.js.map → chunk-VNU37GJC.js.map} +1 -1
  39. package/dist/composites/combobox-chip-outside.js +1 -1
  40. package/dist/composites/combobox-chip.js +1 -1
  41. package/dist/composites/combobox-simple.js +1 -1
  42. package/dist/composites/filter-combobox.js +1 -1
  43. package/dist/composites/index.js +1 -1
  44. package/dist/composites/phone-input.js +1 -1
  45. package/dist/composites/profile-avatar.d.ts +1 -1
  46. package/dist/composites/profile-avatar.js +1 -1
  47. package/dist/effects/highlight.js +1 -1
  48. package/dist/effects/index.js +1 -1
  49. package/dist/primitives/combobox.js +1 -1
  50. package/dist/primitives/index.js +1 -1
  51. package/dist/primitives/menu.js +1 -1
  52. package/dist/primitives/tabs.js +1 -1
  53. package/dist/ui/badge.d.ts +16 -6
  54. package/dist/ui/badge.js +1 -1
  55. package/dist/ui/combobox.js +1 -1
  56. package/dist/ui/date-multiple-picker.js +1 -1
  57. package/dist/ui/index.d.ts +28 -5
  58. package/dist/ui/index.js +1 -1
  59. package/dist/ui/menu.js +1 -1
  60. package/dist/ui/pagination.js +1 -1
  61. package/dist/ui/table.js +1 -1
  62. package/dist/ui/tabs.d.ts +1 -1
  63. package/dist/ui/tabs.js +1 -1
  64. package/dist/ui/tooltip.d.ts +1 -1
  65. package/dist/ui/tooltip.js +1 -1
  66. package/package.json +1 -1
  67. package/dist/chunk-AGTMOMFO.js +0 -2
  68. package/dist/chunk-AGTMOMFO.js.map +0 -1
  69. package/dist/chunk-DZKJRP4J.js +0 -2
  70. package/dist/chunk-DZKJRP4J.js.map +0 -1
  71. package/dist/chunk-ITR3T6UB.js +0 -2
  72. package/dist/chunk-KYD4ATTG.js +0 -2
  73. package/dist/chunk-KYD4ATTG.js.map +0 -1
  74. package/dist/chunk-P2DJG2OD.js +0 -2
  75. package/dist/chunk-P2DJG2OD.js.map +0 -1
  76. package/dist/chunk-ZP4ZPH65.js +0 -2
  77. package/dist/chunk-ZP4ZPH65.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/composites/phone-input.tsx"],"names":["FlagComponent","country","countryName","Flag","flags","jsx","COUNTRY_ROW_HEIGHT","COUNTRY_LIST_HEIGHT","COUNTRY_OVERSCAN","CountrySelect","disabled","selectedCountry","countryList","onChange","open","setOpen","inputValue","setInputValue","scrollTop","setScrollTop","listRef","items","item","filteredItems","search","callingCode","value","listHeight","virtualRange","visibleStartIndex","startIndex","visibleCount","endIndex","paddingTop","paddingBottom","handleValueChange","jsxs","Combobox","a","b","ComboboxTrigger","cn","inputVariants","ChevronsUpDownIcon","ComboboxPopup","ComboboxInput","ComboboxStatus","ComboboxList","event","virtualIndex","index","ComboboxItem","InputComponent","className","props","ref","handleChange","PhoneInput"],"mappings":"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","file":"chunk-SFMNEY3D.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as RPNInput from \"react-phone-number-input\"\r\nimport flags from \"react-phone-number-input/flags\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxInput,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n} from \"../ui/combobox\"\r\nimport { inputVariants } from \"../ui/input\"\r\nimport { ChevronsUpDownIcon } from \"lucide-react\"\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\ntype PhoneInputProps = Omit<\r\n React.ComponentProps<\"input\">,\r\n \"onChange\" | \"value\" | \"ref\"\r\n> &\r\n Omit<RPNInput.Props<typeof RPNInput.default>, \"onChange\"> & {\r\n onChange?: (value: RPNInput.Value) => void\r\n }\r\n\r\n// ---------------------------------------------------------------------------\r\n// Flag\r\n// ---------------------------------------------------------------------------\r\n\r\nconst FlagComponent = ({ country, countryName }: RPNInput.FlagProps) => {\r\n const Flag = country ? flags[country] : undefined\r\n\r\n return (\r\n <span className=\"flex h-4 w-6 shrink-0 overflow-hidden rounded-sm bg-fg-quaternary/20 [&_svg:not([class*='size-'])]:size-full\">\r\n {Flag && <Flag title={countryName} />}\r\n </span>\r\n )\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Country Select — uses base-ui Combobox\r\n// ---------------------------------------------------------------------------\r\n\r\ntype CountryEntry = { label: string; value: RPNInput.Country | undefined }\r\ntype CountryItem = { label: string; value: RPNInput.Country }\r\n\r\nconst COUNTRY_ROW_HEIGHT = 44\r\nconst COUNTRY_LIST_HEIGHT = 288\r\nconst COUNTRY_OVERSCAN = 6\r\n\r\ntype CountrySelectProps = {\r\n disabled?: boolean\r\n value: RPNInput.Country\r\n options: CountryEntry[]\r\n onChange: (country: RPNInput.Country) => void\r\n}\r\n\r\nfunction CountrySelect({\r\n disabled,\r\n value: selectedCountry,\r\n options: countryList,\r\n onChange,\r\n}: CountrySelectProps) {\r\n const [open, setOpen] = React.useState(false)\r\n const [inputValue, setInputValue] = React.useState(\"\")\r\n const [scrollTop, setScrollTop] = React.useState(0)\r\n const listRef = React.useRef<HTMLDivElement>(null)\r\n\r\n const items = React.useMemo(\r\n () => countryList.filter((item): item is CountryItem => Boolean(item.value)),\r\n [countryList]\r\n )\r\n\r\n const filteredItems = React.useMemo(() => {\r\n const search = inputValue.trim().toLowerCase()\r\n\r\n if (!search) return items\r\n\r\n return items.filter((item) => {\r\n const callingCode = RPNInput.getCountryCallingCode(item.value)\r\n\r\n return item.label.toLowerCase().includes(search)\r\n || item.value.toLowerCase().includes(search)\r\n || callingCode.includes(search.replace(/^\\+/, \"\"))\r\n })\r\n }, [inputValue, items])\r\n\r\n const value = React.useMemo(\r\n () => items.find((item) => item.value === selectedCountry) ?? null,\r\n [items, selectedCountry]\r\n )\r\n\r\n React.useEffect(() => {\r\n setScrollTop(0)\r\n if (listRef.current) listRef.current.scrollTop = 0\r\n }, [inputValue])\r\n\r\n const listHeight = Math.min(\r\n filteredItems.length * COUNTRY_ROW_HEIGHT,\r\n COUNTRY_LIST_HEIGHT\r\n )\r\n\r\n const virtualRange = React.useMemo(() => {\r\n const visibleStartIndex = Math.floor(scrollTop / COUNTRY_ROW_HEIGHT)\r\n const startIndex = Math.max(\r\n 0,\r\n visibleStartIndex - COUNTRY_OVERSCAN\r\n )\r\n const visibleCount = Math.ceil(COUNTRY_LIST_HEIGHT / COUNTRY_ROW_HEIGHT)\r\n const endIndex = Math.min(\r\n filteredItems.length,\r\n visibleStartIndex + visibleCount + COUNTRY_OVERSCAN\r\n )\r\n\r\n return {\r\n startIndex,\r\n endIndex,\r\n items: filteredItems.slice(startIndex, endIndex),\r\n }\r\n }, [filteredItems, scrollTop])\r\n\r\n const paddingTop = virtualRange.startIndex * COUNTRY_ROW_HEIGHT\r\n const paddingBottom = Math.max(\r\n 0,\r\n (filteredItems.length - virtualRange.endIndex) * COUNTRY_ROW_HEIGHT\r\n )\r\n\r\n const handleValueChange = React.useCallback(\r\n (item: CountryItem | null) => {\r\n if (!item?.value) return\r\n\r\n onChange(item.value)\r\n setInputValue(\"\")\r\n setOpen(false)\r\n },\r\n [onChange]\r\n )\r\n\r\n return (\r\n <Combobox\r\n behavior=\"default\"\r\n disabled={disabled}\r\n inputValue={inputValue}\r\n items={filteredItems}\r\n open={open}\r\n value={value}\r\n virtualized\r\n filter={null}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n openOnInputClick={false}\r\n onValueChange={handleValueChange}\r\n onInputValueChange={setInputValue}\r\n onOpenChange={(open) => {\r\n setOpen(open)\r\n if (!open) setInputValue(\"\")\r\n }}\r\n >\r\n {/* Visible trigger button styled as part of the input */}\r\n <ComboboxTrigger\r\n render={\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n inputVariants(),\r\n \"h-11 w-18 shrink-0 justify-between gap-1 rounded-r-none border-r-0 px-3\",\r\n \"hover:bg-bg-primary-hover focus-visible:z-10 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\r\n \"disabled:pointer-events-none disabled:opacity-50\"\r\n )}\r\n disabled={disabled}\r\n >\r\n <span className=\"flex items-center gap-1.5 overflow-hidden\">\r\n <FlagComponent\r\n country={selectedCountry}\r\n countryName={selectedCountry}\r\n />\r\n {selectedCountry && (\r\n <span className=\"text-body-medium-3 text-text-primary\">\r\n {selectedCountry}\r\n </span>\r\n )}\r\n </span>\r\n <ChevronsUpDownIcon className=\"size-3.5 shrink-0 text-fg-quaternary\" />\r\n </button>\r\n }\r\n />\r\n\r\n {/* Dropdown content */}\r\n <ComboboxPopup className=\"w-72\">\r\n <ComboboxInput\r\n placeholder=\"Search country...\"\r\n aria-label=\"Search country\"\r\n />\r\n <ComboboxStatus status={filteredItems.length === 0 ? \"empty\" : null} />\r\n <ComboboxList\r\n ref={listRef}\r\n className=\"relative gap-0\"\r\n style={{ height: listHeight }}\r\n onScroll={(event) => setScrollTop(event.currentTarget.scrollTop)}\r\n >\r\n <div\r\n className=\"flex w-full shrink-0 flex-col\"\r\n style={{ paddingTop, paddingBottom }}\r\n >\r\n {virtualRange.items.map((item, virtualIndex) => {\r\n const index = virtualRange.startIndex + virtualIndex\r\n\r\n return (\r\n <ComboboxItem\r\n key={item.value}\r\n index={index}\r\n value={item}\r\n >\r\n <div className=\"flex items-center gap-2 w-full min-w-0\">\r\n <FlagComponent country={item.value} countryName={item.label} />\r\n <span className=\"flex-1 text-sm truncate\">{item.label}</span>\r\n <span className=\"text-sm text-text-tertiary shrink-0\">\r\n +{RPNInput.getCountryCallingCode(item.value)}\r\n </span>\r\n </div>\r\n </ComboboxItem>\r\n )\r\n })}\r\n </div>\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox >\r\n )\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Input Component\r\n// ---------------------------------------------------------------------------\r\n\r\nconst InputComponent = React.forwardRef<\r\n HTMLInputElement,\r\n React.ComponentProps<\"input\">\r\n>(({ className, onChange, ...props }, ref) => {\r\n const handleChange = React.useCallback(\r\n (event: React.ChangeEvent<HTMLInputElement>) => {\r\n if (event.currentTarget.value === \"+\") {\r\n event.currentTarget.value = \"\"\r\n }\r\n\r\n onChange?.(event)\r\n },\r\n [onChange]\r\n )\r\n\r\n return (\r\n <input\r\n className={cn(\r\n inputVariants(),\r\n \"h-11 flex-1 rounded-l-none text-body-regular-2\",\r\n className\r\n )}\r\n ref={ref}\r\n type=\"tel\"\r\n onChange={handleChange}\r\n {...props}\r\n />\r\n )\r\n})\r\nInputComponent.displayName = \"InputComponent\"\r\n\r\n// ---------------------------------------------------------------------------\r\n// Phone Input\r\n// ---------------------------------------------------------------------------\r\n\r\nconst PhoneInput: React.ForwardRefExoticComponent<PhoneInputProps> =\r\n React.forwardRef<\r\n React.ElementRef<typeof RPNInput.default>,\r\n PhoneInputProps\r\n >(({\r\n className,\r\n onChange,\r\n value,\r\n ...props\r\n }, ref) => {\r\n return (\r\n <RPNInput.default\r\n ref={ref}\r\n className={cn(\r\n \"flex w-full min-w-0 items-center\",\r\n className\r\n )}\r\n flagComponent={FlagComponent}\r\n countrySelectComponent={CountrySelect}\r\n inputComponent={InputComponent}\r\n smartCaret={false}\r\n value={value || undefined}\r\n onChange={(value) => onChange?.(value || (\"\" as RPNInput.Value))}\r\n {...props}\r\n />\r\n )\r\n })\r\nPhoneInput.displayName = \"PhoneInput\"\r\n\r\nexport { PhoneInput, type PhoneInputProps }\r\n"]}
1
+ {"version":3,"sources":["../src/composites/phone-input.tsx"],"names":["FlagComponent","country","countryName","Flag","flags","jsx","COUNTRY_ROW_HEIGHT","COUNTRY_LIST_HEIGHT","COUNTRY_OVERSCAN","CountrySelect","disabled","selectedCountry","countryList","onChange","open","setOpen","inputValue","setInputValue","scrollTop","setScrollTop","listRef","items","item","filteredItems","search","callingCode","value","listHeight","virtualRange","visibleStartIndex","startIndex","visibleCount","endIndex","paddingTop","paddingBottom","handleValueChange","jsxs","Combobox","a","b","ComboboxTrigger","cn","inputVariants","ChevronsUpDownIcon","ComboboxPopup","ComboboxInput","ComboboxStatus","ComboboxList","event","virtualIndex","index","ComboboxItem","InputComponent","className","props","ref","handleChange","PhoneInput"],"mappings":"oWAoCA,IAAMA,EAAgB,CAAC,CAAE,OAAA,CAAAC,CAAAA,CAAS,YAAAC,CAAY,CAAA,GAA0B,CACtE,IAAMC,EAAOF,CAAAA,CAAUG,CAAAA,CAAMH,CAAO,CAAA,CAAI,MAAA,CAExC,OACEI,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,8GAAA,CACb,QAAA,CAAAF,CAAAA,EAAQE,GAAAA,CAACF,EAAA,CAAK,KAAA,CAAOD,CAAAA,CAAa,CAAA,CACrC,CAEJ,CAAA,CASMI,CAAAA,CAAqB,EAAA,CACrBC,CAAAA,CAAsB,IACtBC,CAAAA,CAAmB,CAAA,CASzB,SAASC,CAAAA,CAAc,CACrB,QAAA,CAAAC,CAAAA,CACA,KAAA,CAAOC,CAAAA,CACP,QAASC,GAAAA,CACT,QAAA,CAAAC,CACF,CAAA,CAAuB,CACrB,GAAM,CAACC,CAAAA,CAAMC,CAAO,CAAA,CAAU,CAAA,CAAA,QAAA,CAAS,KAAK,CAAA,CACtC,CAACC,GAAAA,CAAYC,CAAa,CAAA,CAAU,CAAA,CAAA,QAAA,CAAS,EAAE,CAAA,CAC/C,CAACC,CAAAA,CAAWC,CAAY,EAAU,CAAA,CAAA,QAAA,CAAS,CAAC,CAAA,CAC5CC,CAAAA,CAAgB,SAAuB,IAAI,CAAA,CAE3CC,GAAAA,CAAc,CAAA,CAAA,OAAA,CAClB,IAAMT,GAAAA,CAAY,MAAA,CAAQU,CAAAA,EAA8B,CAAA,CAAQA,EAAK,KAAM,CAAA,CAC3E,CAACV,GAAW,CACd,CAAA,CAEMW,CAAAA,CAAsB,CAAA,CAAA,OAAA,CAAQ,IAAM,CACxC,IAAMC,CAAAA,CAASR,GAAAA,CAAW,MAAK,CAAE,WAAA,EAAY,CAE7C,OAAKQ,EAEEH,GAAAA,CAAM,MAAA,CAAQC,CAAAA,EAAS,CAC5B,IAAMG,CAAAA,CAAuB,CAAA,CAAA,qBAAA,CAAsBH,CAAAA,CAAK,KAAK,EAE7D,OAAOA,CAAAA,CAAK,KAAA,CAAM,WAAA,GAAc,QAAA,CAASE,CAAM,CAAA,EAC1CF,CAAAA,CAAK,MAAM,WAAA,EAAY,CAAE,QAAA,CAASE,CAAM,GACxCC,CAAAA,CAAY,QAAA,CAASD,CAAAA,CAAO,OAAA,CAAQ,KAAA,CAAO,EAAE,CAAC,CACrD,CAAC,CAAA,CARmBH,GAStB,CAAA,CAAG,CAACL,IAAYK,GAAK,CAAC,CAAA,CAEhBK,CAAAA,CAAc,UAClB,IAAML,GAAAA,CAAM,IAAA,CAAMC,CAAAA,EAASA,EAAK,KAAA,GAAUX,CAAe,CAAA,EAAK,IAAA,CAC9D,CAACU,GAAAA,CAAOV,CAAe,CACzB,CAAA,CAEM,YAAU,IAAM,CACpBQ,CAAAA,CAAa,CAAC,EACVC,CAAAA,CAAQ,OAAA,GAASA,CAAAA,CAAQ,OAAA,CAAQ,SAAA,CAAY,CAAA,EACnD,CAAA,CAAG,CAACJ,GAAU,CAAC,CAAA,CAEf,IAAMW,CAAAA,CAAa,KAAK,GAAA,CACtBJ,CAAAA,CAAc,MAAA,CAASjB,CAAAA,CACvBC,CACF,CAAA,CAEMqB,CAAAA,CAAqB,CAAA,CAAA,OAAA,CAAQ,IAAM,CACvC,IAAMC,CAAAA,CAAoB,IAAA,CAAK,KAAA,CAAMX,EAAYZ,CAAkB,CAAA,CAC7DwB,CAAAA,CAAa,IAAA,CAAK,IACtB,CAAA,CACAD,CAAAA,CAAoBrB,CACtB,CAAA,CACMuB,EAAe,IAAA,CAAK,IAAA,CAAKxB,CAAAA,CAAsBD,CAAkB,CAAA,CACjE0B,CAAAA,CAAW,IAAA,CAAK,GAAA,CACpBT,EAAc,MAAA,CACdM,CAAAA,CAAoBE,CAAAA,CAAevB,CACrC,EAEA,OAAO,CACL,UAAA,CAAAsB,CAAAA,CACA,SAAAE,CAAAA,CACA,KAAA,CAAOT,CAAAA,CAAc,KAAA,CAAMO,EAAYE,CAAQ,CACjD,CACF,CAAA,CAAG,CAACT,CAAAA,CAAeL,CAAS,CAAC,CAAA,CAEvBe,EAAaL,CAAAA,CAAa,UAAA,CAAatB,CAAAA,CACvC4B,CAAAA,CAAgB,KAAK,GAAA,CACzB,CAAA,CAAA,CACCX,CAAAA,CAAc,MAAA,CAASK,CAAAA,CAAa,QAAA,EAAYtB,CACnD,CAAA,CAEM6B,IAA0B,CAAA,CAAA,WAAA,CAC7Bb,CAAAA,EAA6B,CACvBA,CAAAA,EAAM,QAEXT,CAAAA,CAASS,CAAAA,CAAK,KAAK,CAAA,CACnBL,EAAc,EAAE,CAAA,CAChBF,CAAAA,CAAQ,KAAK,GACf,CAAA,CACA,CAACF,CAAQ,CACX,EAEA,OACEuB,IAAAA,CAACC,GAAAA,CAAA,CACC,SAAS,SAAA,CACT,QAAA,CAAU3B,CAAAA,CACV,UAAA,CAAYM,IACZ,KAAA,CAAOO,CAAAA,CACP,IAAA,CAAMT,CAAAA,CACN,KAAA,CAAOY,CAAAA,CACP,WAAA,CAAW,IAAA,CACX,OAAQ,IAAA,CACR,kBAAA,CAAoB,CAACY,CAAAA,CAAGC,IAAMD,CAAAA,CAAE,KAAA,GAAUC,CAAAA,CAAE,KAAA,CAC5C,iBAAkB,KAAA,CAClB,aAAA,CAAeJ,GAAAA,CACf,kBAAA,CAAoBlB,EACpB,YAAA,CAAeH,CAAAA,EAAS,CACtBC,CAAAA,CAAQD,CAAI,CAAA,CACPA,CAAAA,EAAMG,CAAAA,CAAc,EAAE,EAC7B,CAAA,CAGA,QAAA,CAAA,CAAAZ,GAAAA,CAACmC,CAAAA,CAAA,CACC,MAAA,CACEJ,IAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,SAAA,CAAWK,EAAAA,CACTC,CAAAA,GACA,yEAAA,CACA,iIAAA,CACA,kDACF,CAAA,CACA,SAAUhC,CAAAA,CAEV,QAAA,CAAA,CAAA0B,IAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,2CAAA,CACd,QAAA,CAAA,CAAA/B,GAAAA,CAACL,CAAAA,CAAA,CACC,OAAA,CAASW,CAAAA,CACT,WAAA,CAAaA,CAAAA,CACf,EACCA,CAAAA,EACCN,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uCACb,QAAA,CAAAM,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CACAN,IAACsC,kBAAAA,CAAA,CAAmB,SAAA,CAAU,sCAAA,CAAuC,CAAA,CAAA,CACvE,CAAA,CAEJ,CAAA,CAGAP,IAAAA,CAACQ,EAAA,CAAc,SAAA,CAAU,MAAA,CACvB,QAAA,CAAA,CAAAvC,IAACwC,CAAAA,CAAA,CACC,WAAA,CAAY,mBAAA,CACZ,aAAW,gBAAA,CACb,CAAA,CACAxC,GAAAA,CAACyC,CAAAA,CAAA,CAAe,MAAA,CAAQvB,CAAAA,CAAc,MAAA,GAAW,CAAA,CAAI,QAAU,IAAA,CAAM,CAAA,CACrElB,GAAAA,CAAC0C,CAAAA,CAAA,CACC,GAAA,CAAK3B,CAAAA,CACL,SAAA,CAAU,gBAAA,CACV,MAAO,CAAE,MAAA,CAAQO,CAAW,CAAA,CAC5B,QAAA,CAAWqB,CAAAA,EAAU7B,CAAAA,CAAa6B,CAAAA,CAAM,cAAc,SAAS,CAAA,CAE/D,QAAA,CAAA3C,GAAAA,CAAC,OACC,SAAA,CAAU,+BAAA,CACV,KAAA,CAAO,CAAE,WAAA4B,CAAAA,CAAY,aAAA,CAAAC,CAAc,CAAA,CAElC,SAAAN,CAAAA,CAAa,KAAA,CAAM,GAAA,CAAI,CAACN,EAAM2B,CAAAA,GAAiB,CAC9C,IAAMC,CAAAA,CAAQtB,EAAa,UAAA,CAAaqB,CAAAA,CAExC,OACE5C,GAAAA,CAAC8C,EAAA,CAEC,KAAA,CAAOD,CAAAA,CACP,KAAA,CAAO5B,CAAAA,CAEP,QAAA,CAAAc,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,wCAAA,CACb,QAAA,CAAA,CAAA/B,GAAAA,CAACL,CAAAA,CAAA,CAAc,OAAA,CAASsB,CAAAA,CAAK,KAAA,CAAO,WAAA,CAAaA,EAAK,KAAA,CAAO,CAAA,CAC7DjB,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,yBAAA,CAA2B,QAAA,CAAAiB,CAAAA,CAAK,KAAA,CAAM,EACtDc,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,qCAAA,CAAsC,cACzC,CAAA,CAAA,qBAAA,CAAsBd,CAAAA,CAAK,KAAK,CAAA,CAAA,CAC7C,GACF,CAAA,CAAA,CAVKA,CAAAA,CAAK,KAWZ,CAEJ,CAAC,CAAA,CACH,CAAA,CACF,CAAA,CAAA,CACF,GACF,CAEJ,CAMA,IAAM8B,CAAAA,CAAuB,aAG3B,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,SAAAxC,CAAAA,CAAU,GAAGyC,CAAM,CAAA,CAAGC,IAAQ,CAC5C,IAAMC,CAAAA,CAAqB,CAAA,CAAA,WAAA,CACxBR,GAA+C,CAC1CA,CAAAA,CAAM,aAAA,CAAc,KAAA,GAAU,MAChCA,CAAAA,CAAM,aAAA,CAAc,KAAA,CAAQ,EAAA,CAAA,CAG9BnC,IAAWmC,CAAK,EAClB,CAAA,CACA,CAACnC,CAAQ,CACX,CAAA,CAEA,OACER,IAAC,OAAA,CAAA,CACC,SAAA,CAAWoC,EAAAA,CACTC,CAAAA,GACA,gDAAA,CACAW,CACF,CAAA,CACA,GAAA,CAAKE,EACL,IAAA,CAAK,KAAA,CACL,QAAA,CAAUC,CAAAA,CACT,GAAGF,CAAAA,CACN,CAEJ,CAAC,CAAA,CACDF,EAAe,WAAA,CAAc,gBAAA,CAM7B,IAAMK,CAAAA,CACE,aAGJ,CAAC,CACD,SAAA,CAAAJ,CAAAA,CACA,SAAAxC,CAAAA,CACA,KAAA,CAAAa,CAAAA,CACA,GAAG4B,CACL,CAAA,CAAGC,CAAAA,GAEClD,GAAAA,CAAU,UAAT,CACC,GAAA,CAAKkD,CAAAA,CACL,SAAA,CAAWd,GACT,kCAAA,CACAY,CACF,CAAA,CACA,aAAA,CAAerD,EACf,sBAAA,CAAwBS,CAAAA,CACxB,cAAA,CAAgB2C,CAAAA,CAChB,WAAY,KAAA,CACZ,KAAA,CAAO1B,CAAAA,EAAS,MAAA,CAChB,SAAWA,CAAAA,EAAUb,CAAAA,GAAWa,CAAAA,EAAU,EAAqB,EAC9D,GAAG4B,CAAAA,CACN,CAEH,EACHG,EAAW,WAAA,CAAc,YAAA","file":"chunk-FB6VMMUL.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as RPNInput from \"react-phone-number-input\"\r\nimport flags from \"react-phone-number-input/flags\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxInput,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n} from \"../ui/combobox\"\r\nimport { inputVariants } from \"../ui/input\"\r\nimport { ChevronsUpDownIcon } from \"lucide-react\"\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\ntype PhoneInputProps = Omit<\r\n React.ComponentProps<\"input\">,\r\n \"onChange\" | \"value\" | \"ref\"\r\n> &\r\n Omit<RPNInput.Props<typeof RPNInput.default>, \"onChange\"> & {\r\n onChange?: (value: RPNInput.Value) => void\r\n }\r\n\r\n// ---------------------------------------------------------------------------\r\n// Flag\r\n// ---------------------------------------------------------------------------\r\n\r\nconst FlagComponent = ({ country, countryName }: RPNInput.FlagProps) => {\r\n const Flag = country ? flags[country] : undefined\r\n\r\n return (\r\n <span className=\"flex h-4 w-6 shrink-0 overflow-hidden rounded-sm bg-fg-quaternary/20 [&_svg:not([class*='size-'])]:size-full\">\r\n {Flag && <Flag title={countryName} />}\r\n </span>\r\n )\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Country Select — uses base-ui Combobox\r\n// ---------------------------------------------------------------------------\r\n\r\ntype CountryEntry = { label: string; value: RPNInput.Country | undefined }\r\ntype CountryItem = { label: string; value: RPNInput.Country }\r\n\r\nconst COUNTRY_ROW_HEIGHT = 44\r\nconst COUNTRY_LIST_HEIGHT = 288\r\nconst COUNTRY_OVERSCAN = 6\r\n\r\ntype CountrySelectProps = {\r\n disabled?: boolean\r\n value: RPNInput.Country\r\n options: CountryEntry[]\r\n onChange: (country: RPNInput.Country) => void\r\n}\r\n\r\nfunction CountrySelect({\r\n disabled,\r\n value: selectedCountry,\r\n options: countryList,\r\n onChange,\r\n}: CountrySelectProps) {\r\n const [open, setOpen] = React.useState(false)\r\n const [inputValue, setInputValue] = React.useState(\"\")\r\n const [scrollTop, setScrollTop] = React.useState(0)\r\n const listRef = React.useRef<HTMLDivElement>(null)\r\n\r\n const items = React.useMemo(\r\n () => countryList.filter((item): item is CountryItem => Boolean(item.value)),\r\n [countryList]\r\n )\r\n\r\n const filteredItems = React.useMemo(() => {\r\n const search = inputValue.trim().toLowerCase()\r\n\r\n if (!search) return items\r\n\r\n return items.filter((item) => {\r\n const callingCode = RPNInput.getCountryCallingCode(item.value)\r\n\r\n return item.label.toLowerCase().includes(search)\r\n || item.value.toLowerCase().includes(search)\r\n || callingCode.includes(search.replace(/^\\+/, \"\"))\r\n })\r\n }, [inputValue, items])\r\n\r\n const value = React.useMemo(\r\n () => items.find((item) => item.value === selectedCountry) ?? null,\r\n [items, selectedCountry]\r\n )\r\n\r\n React.useEffect(() => {\r\n setScrollTop(0)\r\n if (listRef.current) listRef.current.scrollTop = 0\r\n }, [inputValue])\r\n\r\n const listHeight = Math.min(\r\n filteredItems.length * COUNTRY_ROW_HEIGHT,\r\n COUNTRY_LIST_HEIGHT\r\n )\r\n\r\n const virtualRange = React.useMemo(() => {\r\n const visibleStartIndex = Math.floor(scrollTop / COUNTRY_ROW_HEIGHT)\r\n const startIndex = Math.max(\r\n 0,\r\n visibleStartIndex - COUNTRY_OVERSCAN\r\n )\r\n const visibleCount = Math.ceil(COUNTRY_LIST_HEIGHT / COUNTRY_ROW_HEIGHT)\r\n const endIndex = Math.min(\r\n filteredItems.length,\r\n visibleStartIndex + visibleCount + COUNTRY_OVERSCAN\r\n )\r\n\r\n return {\r\n startIndex,\r\n endIndex,\r\n items: filteredItems.slice(startIndex, endIndex),\r\n }\r\n }, [filteredItems, scrollTop])\r\n\r\n const paddingTop = virtualRange.startIndex * COUNTRY_ROW_HEIGHT\r\n const paddingBottom = Math.max(\r\n 0,\r\n (filteredItems.length - virtualRange.endIndex) * COUNTRY_ROW_HEIGHT\r\n )\r\n\r\n const handleValueChange = React.useCallback(\r\n (item: CountryItem | null) => {\r\n if (!item?.value) return\r\n\r\n onChange(item.value)\r\n setInputValue(\"\")\r\n setOpen(false)\r\n },\r\n [onChange]\r\n )\r\n\r\n return (\r\n <Combobox\r\n behavior=\"default\"\r\n disabled={disabled}\r\n inputValue={inputValue}\r\n items={filteredItems}\r\n open={open}\r\n value={value}\r\n virtualized\r\n filter={null}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n openOnInputClick={false}\r\n onValueChange={handleValueChange}\r\n onInputValueChange={setInputValue}\r\n onOpenChange={(open) => {\r\n setOpen(open)\r\n if (!open) setInputValue(\"\")\r\n }}\r\n >\r\n {/* Visible trigger button styled as part of the input */}\r\n <ComboboxTrigger\r\n render={\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n inputVariants(),\r\n \"h-11 w-18 shrink-0 justify-between gap-1 rounded-r-none border-r-0 px-3\",\r\n \"hover:bg-bg-primary-hover focus-visible:z-10 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\r\n \"disabled:pointer-events-none disabled:opacity-50\"\r\n )}\r\n disabled={disabled}\r\n >\r\n <span className=\"flex items-center gap-1.5 overflow-hidden\">\r\n <FlagComponent\r\n country={selectedCountry}\r\n countryName={selectedCountry}\r\n />\r\n {selectedCountry && (\r\n <span className=\"text-body-medium-3 text-text-primary\">\r\n {selectedCountry}\r\n </span>\r\n )}\r\n </span>\r\n <ChevronsUpDownIcon className=\"size-3.5 shrink-0 text-fg-quaternary\" />\r\n </button>\r\n }\r\n />\r\n\r\n {/* Dropdown content */}\r\n <ComboboxPopup className=\"w-72\">\r\n <ComboboxInput\r\n placeholder=\"Search country...\"\r\n aria-label=\"Search country\"\r\n />\r\n <ComboboxStatus status={filteredItems.length === 0 ? \"empty\" : null} />\r\n <ComboboxList\r\n ref={listRef}\r\n className=\"relative gap-0\"\r\n style={{ height: listHeight }}\r\n onScroll={(event) => setScrollTop(event.currentTarget.scrollTop)}\r\n >\r\n <div\r\n className=\"flex w-full shrink-0 flex-col\"\r\n style={{ paddingTop, paddingBottom }}\r\n >\r\n {virtualRange.items.map((item, virtualIndex) => {\r\n const index = virtualRange.startIndex + virtualIndex\r\n\r\n return (\r\n <ComboboxItem\r\n key={item.value}\r\n index={index}\r\n value={item}\r\n >\r\n <div className=\"flex items-center gap-2 w-full min-w-0\">\r\n <FlagComponent country={item.value} countryName={item.label} />\r\n <span className=\"flex-1 text-sm truncate\">{item.label}</span>\r\n <span className=\"text-sm text-text-tertiary shrink-0\">\r\n +{RPNInput.getCountryCallingCode(item.value)}\r\n </span>\r\n </div>\r\n </ComboboxItem>\r\n )\r\n })}\r\n </div>\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox >\r\n )\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Input Component\r\n// ---------------------------------------------------------------------------\r\n\r\nconst InputComponent = React.forwardRef<\r\n HTMLInputElement,\r\n React.ComponentProps<\"input\">\r\n>(({ className, onChange, ...props }, ref) => {\r\n const handleChange = React.useCallback(\r\n (event: React.ChangeEvent<HTMLInputElement>) => {\r\n if (event.currentTarget.value === \"+\") {\r\n event.currentTarget.value = \"\"\r\n }\r\n\r\n onChange?.(event)\r\n },\r\n [onChange]\r\n )\r\n\r\n return (\r\n <input\r\n className={cn(\r\n inputVariants(),\r\n \"h-11 flex-1 rounded-l-none text-body-regular-2\",\r\n className\r\n )}\r\n ref={ref}\r\n type=\"tel\"\r\n onChange={handleChange}\r\n {...props}\r\n />\r\n )\r\n})\r\nInputComponent.displayName = \"InputComponent\"\r\n\r\n// ---------------------------------------------------------------------------\r\n// Phone Input\r\n// ---------------------------------------------------------------------------\r\n\r\nconst PhoneInput: React.ForwardRefExoticComponent<PhoneInputProps> =\r\n React.forwardRef<\r\n React.ElementRef<typeof RPNInput.default>,\r\n PhoneInputProps\r\n >(({\r\n className,\r\n onChange,\r\n value,\r\n ...props\r\n }, ref) => {\r\n return (\r\n <RPNInput.default\r\n ref={ref}\r\n className={cn(\r\n \"flex w-full min-w-0 items-center\",\r\n className\r\n )}\r\n flagComponent={FlagComponent}\r\n countrySelectComponent={CountrySelect}\r\n inputComponent={InputComponent}\r\n smartCaret={false}\r\n value={value || undefined}\r\n onChange={(value) => onChange?.(value || (\"\" as RPNInput.Value))}\r\n {...props}\r\n />\r\n )\r\n })\r\nPhoneInput.displayName = \"PhoneInput\"\r\n\r\nexport { PhoneInput, type PhoneInputProps }\r\n"]}
@@ -1,2 +1,2 @@
1
- import {a,b,i,m,q,s,w,x,F}from'./chunk-ZZWSZRER.js';import {a as a$1}from'./chunk-JH6RZ3QH.js';import'react';import {ChevronDownIcon}from'lucide-react';import'class-variance-authority';import {cn}from'@xploreu/lib/cn';import {jsxs,jsx}from'react/jsx-runtime';function B({items:t,value:f,defaultValue:g,onValueChange:d,placeholder:I="Select",icon:l,container:S,isPending:y,className:P,triggerClassName:V,contentClassName:v,disabled:N,size:h="md",infiniteScroll:R}){return jsxs(a,{items:t,value:f,defaultValue:g,onValueChange:d,isItemEqualToValue:(e,T)=>e.value===T.value,disabled:N,children:[jsxs(b,{className:cn(a$1({size:h}),"group flex cursor-pointer items-center gap-2 pr-3 text-left",V,P),children:[l&&jsx("span",{className:"size-4.5 shrink-0 text-fg-quaternary",children:l}),jsx("span",{className:"flex-1 truncate",children:jsx(i,{children:e=>jsx("span",{className:e?"text-text-primary":"text-text-placeholder",children:e?.label??I})})}),jsx(ChevronDownIcon,{className:"size-4 shrink-0 text-fg-quaternary transition-transform group-data-[popup-open]:rotate-180"})]}),jsxs(m,{container:S,className:cn("w-72",v),align:"start",sideOffset:8,children:[jsx(q,{status:y||t===void 0?"pending":t.length===0?"empty":null}),jsxs(s,{children:[t?.map(e=>jsx(w,{value:e,children:jsx(x,{children:e.label})},e.value)),jsx(F,{...R})]})]})]})}export{B as a};//# sourceMappingURL=chunk-7YSKM6DP.js.map
2
- //# sourceMappingURL=chunk-7YSKM6DP.js.map
1
+ import {a,b,i,m,q,s,w,x,F}from'./chunk-3VMZENNL.js';import {a as a$1}from'./chunk-JH6RZ3QH.js';import'react';import {ChevronDownIcon}from'lucide-react';import'class-variance-authority';import {cn}from'@xploreu/lib/cn';import {jsxs,jsx}from'react/jsx-runtime';function B({items:t,value:f,defaultValue:g,onValueChange:d,placeholder:I="Select",icon:l,container:S,isPending:y,className:P,triggerClassName:V,contentClassName:v,disabled:N,size:h="md",infiniteScroll:R}){return jsxs(a,{items:t,value:f,defaultValue:g,onValueChange:d,isItemEqualToValue:(e,T)=>e.value===T.value,disabled:N,children:[jsxs(b,{className:cn(a$1({size:h}),"group flex cursor-pointer items-center gap-2 pr-3 text-left",V,P),children:[l&&jsx("span",{className:"size-4.5 shrink-0 text-fg-quaternary",children:l}),jsx("span",{className:"flex-1 truncate",children:jsx(i,{children:e=>jsx("span",{className:e?"text-text-primary":"text-text-placeholder",children:e?.label??I})})}),jsx(ChevronDownIcon,{className:"size-4 shrink-0 text-fg-quaternary transition-transform group-data-[popup-open]:rotate-180"})]}),jsxs(m,{container:S,className:cn("w-72",v),align:"start",sideOffset:8,children:[jsx(q,{status:y||t===void 0?"pending":t.length===0?"empty":null}),jsxs(s,{children:[t?.map(e=>jsx(w,{value:e,children:jsx(x,{children:e.label})},e.value)),jsx(F,{...R})]})]})]})}export{B as a};//# sourceMappingURL=chunk-GJZZ55GE.js.map
2
+ //# sourceMappingURL=chunk-GJZZ55GE.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/composites/combobox-simple.tsx"],"names":["ComboboxSimple","items","value","defaultValue","onValueChange","placeholder","icon","container","isPending","className","triggerClassName","contentClassName","disabled","size","infiniteScroll","jsxs","Combobox","a","b","ComboboxTrigger","cn","inputVariants","jsx","ComboboxValue","item","ChevronDownIcon","ComboboxPopup","ComboboxStatus","ComboboxList","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll"],"mappings":"mQA8CA,SAASA,CAAAA,CAAe,CACtB,KAAA,CAAAC,CAAAA,CACA,MAAAC,CAAAA,CACA,YAAA,CAAAC,EACA,aAAA,CAAAC,CAAAA,CACA,YAAAC,CAAAA,CAAc,QAAA,CACd,KAAAC,CAAAA,CACA,SAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CACA,UAAAC,CAAAA,CACA,gBAAA,CAAAC,EACA,gBAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,IAAA,CAAAC,EAAO,IAAA,CACP,cAAA,CAAAC,CACF,CAAA,CAAwB,CACtB,OACEC,IAAAA,CAACC,CAAAA,CAAA,CACC,KAAA,CAAOf,CAAAA,CACP,MAAOC,CAAAA,CACP,YAAA,CAAcC,EACd,aAAA,CAAeC,CAAAA,CACf,mBAAoB,CAACa,CAAAA,CAAGC,IAAMD,CAAAA,CAAE,KAAA,GAAUC,EAAE,KAAA,CAC5C,QAAA,CAAUN,EAEV,QAAA,CAAA,CAAAG,IAAAA,CAACI,EAAA,CACC,SAAA,CAAWC,GACTC,GAAAA,CAAc,CAAE,KAAAR,CAAK,CAAC,EACtB,6DAAA,CACAH,CAAAA,CACAD,CACF,CAAA,CAEC,QAAA,CAAA,CAAAH,CAAAA,EACCgB,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uCAAwC,QAAA,CAAAhB,CAAAA,CAAK,EAE/DgB,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,iBAAA,CACd,QAAA,CAAAA,IAACC,CAAAA,CAAA,CACE,SAACC,CAAAA,EACAF,GAAAA,CAAC,QAAK,SAAA,CAAWE,CAAAA,CAAO,oBAAsB,uBAAA,CAC3C,QAAA,CAAAA,GAAM,KAAA,EAASnB,CAAAA,CAClB,EAEJ,CAAA,CACF,CAAA,CACAiB,IAACG,eAAAA,CAAA,CACC,UAAU,4FAAA,CACZ,CAAA,CAAA,CACF,EAEAV,IAAAA,CAACW,CAAAA,CAAA,CACC,SAAA,CAAWnB,CAAAA,CACX,UAAWa,EAAAA,CAAG,MAAA,CAAQT,CAAgB,CAAA,CACtC,KAAA,CAAM,QACN,UAAA,CAAY,CAAA,CAEZ,UAAAW,GAAAA,CAACK,CAAAA,CAAA,CACC,MAAA,CACEnB,CAAAA,EAAaP,IAAU,MAAA,CACnB,SAAA,CACAA,EAAM,MAAA,GAAW,CAAA,CACf,QACA,IAAA,CAEV,CAAA,CACAc,KAACa,CAAAA,CAAA,CACE,UAAA3B,CAAAA,EAAO,GAAA,CAAKuB,GACXF,GAAAA,CAACO,CAAAA,CAAA,CAA8B,KAAA,CAAOL,CAAAA,CACpC,SAAAF,GAAAA,CAACQ,CAAAA,CAAA,CACE,QAAA,CAAAN,CAAAA,CAAK,MACR,CAAA,CAAA,CAHiBA,CAAAA,CAAK,KAIxB,CACD,CAAA,CACDF,IAACS,CAAAA,CAAA,CAAwB,GAAGjB,CAAAA,CAAgB,CAAA,CAAA,CAC9C,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ","file":"chunk-7YSKM6DP.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { ChevronDownIcon } from \"lucide-react\"\r\nimport { type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { inputVariants } from \"../ui/input\"\r\nimport { ComboboxItem, ComboboxItemTitle } from \"../ui/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxInfiniteScroll,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxPortal,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n ComboboxValue,\r\n} from \"../ui/combobox\"\r\n\r\n// ─── Types ───\r\n\r\nexport type ComboboxSimpleItem = {\r\n label: string\r\n value: string\r\n}\r\n\r\nexport type ComboboxSimpleProps = {\r\n items: ComboboxSimpleItem[] | undefined\r\n value?: ComboboxSimpleItem | null\r\n defaultValue?: ComboboxSimpleItem | null\r\n onValueChange?: (value: ComboboxSimpleItem | null) => void\r\n placeholder?: string\r\n icon?: React.ReactNode\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n isPending?: boolean\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n disabled?: boolean\r\n size?: VariantProps<typeof inputVariants>[\"size\"]\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n}\r\n\r\n// ─── Component ───\r\n\r\nfunction ComboboxSimple({\r\n items,\r\n value,\r\n defaultValue,\r\n onValueChange,\r\n placeholder = \"Select\",\r\n icon,\r\n container,\r\n isPending,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n disabled,\r\n size = \"md\",\r\n infiniteScroll,\r\n}: ComboboxSimpleProps) {\r\n return (\r\n <Combobox\r\n items={items}\r\n value={value}\r\n defaultValue={defaultValue}\r\n onValueChange={onValueChange}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n inputVariants({ size }),\r\n \"group flex cursor-pointer items-center gap-2 pr-3 text-left\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {icon && (\r\n <span className=\"size-4.5 shrink-0 text-fg-quaternary\">{icon}</span>\r\n )}\r\n <span className=\"flex-1 truncate\">\r\n <ComboboxValue>\r\n {(item) => (\r\n <span className={item ? \"text-text-primary\" : \"text-text-placeholder\"}>\r\n {item?.label ?? placeholder}\r\n </span>\r\n )}\r\n </ComboboxValue>\r\n </span>\r\n <ChevronDownIcon\r\n className=\"size-4 shrink-0 text-fg-quaternary transition-transform group-data-[popup-open]:rotate-180\"\r\n />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup\r\n container={container}\r\n className={cn(\"w-72\", contentClassName)}\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem key={item.value} value={item}>\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n ))}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { ComboboxSimple }\r\n"]}
1
+ {"version":3,"sources":["../src/composites/combobox-simple.tsx"],"names":["ComboboxSimple","items","value","defaultValue","onValueChange","placeholder","icon","container","isPending","className","triggerClassName","contentClassName","disabled","size","infiniteScroll","jsxs","Combobox","a","b","ComboboxTrigger","cn","inputVariants","jsx","ComboboxValue","item","ChevronDownIcon","ComboboxPopup","ComboboxStatus","ComboboxList","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll"],"mappings":"mQA8CA,SAASA,CAAAA,CAAe,CACtB,KAAA,CAAAC,CAAAA,CACA,MAAAC,CAAAA,CACA,YAAA,CAAAC,EACA,aAAA,CAAAC,CAAAA,CACA,YAAAC,CAAAA,CAAc,QAAA,CACd,KAAAC,CAAAA,CACA,SAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CACA,UAAAC,CAAAA,CACA,gBAAA,CAAAC,EACA,gBAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,IAAA,CAAAC,EAAO,IAAA,CACP,cAAA,CAAAC,CACF,CAAA,CAAwB,CACtB,OACEC,IAAAA,CAACC,CAAAA,CAAA,CACC,KAAA,CAAOf,CAAAA,CACP,MAAOC,CAAAA,CACP,YAAA,CAAcC,EACd,aAAA,CAAeC,CAAAA,CACf,mBAAoB,CAACa,CAAAA,CAAGC,IAAMD,CAAAA,CAAE,KAAA,GAAUC,EAAE,KAAA,CAC5C,QAAA,CAAUN,EAEV,QAAA,CAAA,CAAAG,IAAAA,CAACI,EAAA,CACC,SAAA,CAAWC,GACTC,GAAAA,CAAc,CAAE,KAAAR,CAAK,CAAC,EACtB,6DAAA,CACAH,CAAAA,CACAD,CACF,CAAA,CAEC,QAAA,CAAA,CAAAH,CAAAA,EACCgB,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uCAAwC,QAAA,CAAAhB,CAAAA,CAAK,EAE/DgB,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,iBAAA,CACd,QAAA,CAAAA,IAACC,CAAAA,CAAA,CACE,SAACC,CAAAA,EACAF,GAAAA,CAAC,QAAK,SAAA,CAAWE,CAAAA,CAAO,oBAAsB,uBAAA,CAC3C,QAAA,CAAAA,GAAM,KAAA,EAASnB,CAAAA,CAClB,EAEJ,CAAA,CACF,CAAA,CACAiB,IAACG,eAAAA,CAAA,CACC,UAAU,4FAAA,CACZ,CAAA,CAAA,CACF,EAEAV,IAAAA,CAACW,CAAAA,CAAA,CACC,SAAA,CAAWnB,CAAAA,CACX,UAAWa,EAAAA,CAAG,MAAA,CAAQT,CAAgB,CAAA,CACtC,KAAA,CAAM,QACN,UAAA,CAAY,CAAA,CAEZ,UAAAW,GAAAA,CAACK,CAAAA,CAAA,CACC,MAAA,CACEnB,CAAAA,EAAaP,IAAU,MAAA,CACnB,SAAA,CACAA,EAAM,MAAA,GAAW,CAAA,CACf,QACA,IAAA,CAEV,CAAA,CACAc,KAACa,CAAAA,CAAA,CACE,UAAA3B,CAAAA,EAAO,GAAA,CAAKuB,GACXF,GAAAA,CAACO,CAAAA,CAAA,CAA8B,KAAA,CAAOL,CAAAA,CACpC,SAAAF,GAAAA,CAACQ,CAAAA,CAAA,CACE,QAAA,CAAAN,CAAAA,CAAK,MACR,CAAA,CAAA,CAHiBA,CAAAA,CAAK,KAIxB,CACD,CAAA,CACDF,IAACS,CAAAA,CAAA,CAAwB,GAAGjB,CAAAA,CAAgB,CAAA,CAAA,CAC9C,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ","file":"chunk-GJZZ55GE.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { ChevronDownIcon } from \"lucide-react\"\r\nimport { type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { inputVariants } from \"../ui/input\"\r\nimport { ComboboxItem, ComboboxItemTitle } from \"../ui/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxInfiniteScroll,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxPortal,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n ComboboxValue,\r\n} from \"../ui/combobox\"\r\n\r\n// ─── Types ───\r\n\r\nexport type ComboboxSimpleItem = {\r\n label: string\r\n value: string\r\n}\r\n\r\nexport type ComboboxSimpleProps = {\r\n items: ComboboxSimpleItem[] | undefined\r\n value?: ComboboxSimpleItem | null\r\n defaultValue?: ComboboxSimpleItem | null\r\n onValueChange?: (value: ComboboxSimpleItem | null) => void\r\n placeholder?: string\r\n icon?: React.ReactNode\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n isPending?: boolean\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n disabled?: boolean\r\n size?: VariantProps<typeof inputVariants>[\"size\"]\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n}\r\n\r\n// ─── Component ───\r\n\r\nfunction ComboboxSimple({\r\n items,\r\n value,\r\n defaultValue,\r\n onValueChange,\r\n placeholder = \"Select\",\r\n icon,\r\n container,\r\n isPending,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n disabled,\r\n size = \"md\",\r\n infiniteScroll,\r\n}: ComboboxSimpleProps) {\r\n return (\r\n <Combobox\r\n items={items}\r\n value={value}\r\n defaultValue={defaultValue}\r\n onValueChange={onValueChange}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n inputVariants({ size }),\r\n \"group flex cursor-pointer items-center gap-2 pr-3 text-left\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {icon && (\r\n <span className=\"size-4.5 shrink-0 text-fg-quaternary\">{icon}</span>\r\n )}\r\n <span className=\"flex-1 truncate\">\r\n <ComboboxValue>\r\n {(item) => (\r\n <span className={item ? \"text-text-primary\" : \"text-text-placeholder\"}>\r\n {item?.label ?? placeholder}\r\n </span>\r\n )}\r\n </ComboboxValue>\r\n </span>\r\n <ChevronDownIcon\r\n className=\"size-4 shrink-0 text-fg-quaternary transition-transform group-data-[popup-open]:rotate-180\"\r\n />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup\r\n container={container}\r\n className={cn(\"w-72\", contentClassName)}\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem key={item.value} value={item}>\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n ))}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { ComboboxSimple }\r\n"]}
@@ -1,2 +1,2 @@
1
- import {b,c as c$1}from'./chunk-KYD4ATTG.js';import*as x from'react';import {Combobox}from'@base-ui/react/combobox';import {AnimatePresence,motion}from'motion/react';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {useDataState}from'@xploreu/hooks/use-data-state';import {getStrictContext}from'@xploreu/lib/get-strict-context';import {jsx}from'react/jsx-runtime';var [V,L]=getStrictContext("ComboboxContext"),[H,c]=getStrictContext("ComboboxActiveValueContext");function M({behavior:o="default",...b}){let[p,i]=useControlledState({value:b?.open,defaultValue:b?.defaultOpen,onChange:b?.onOpenChange}),[a,m]=useControlledState({value:b?.inputValue?.toString(),defaultValue:b?.defaultInputValue?.toString(),onChange:b?.onInputValueChange}),[n,h]=x.useState(null),g=(s,r)=>{if(r.reason==="input-clear")return r.cancel();m(s,r);},d=(s,r)=>{let y=r.trigger?.dataset;if(o==="chip-outside"&&(r.reason==="trigger-press"&&y?.slot==="combobox-clear-input"&&!s||r.reason==="item-press"))return r.cancel();i(s,r);};return jsx(H,{value:{highlightedValue:n,setHighlightedValue:h},children:jsx(V,{value:{open:p,setOpen:i,inputValue:a,setInputValue:m},children:jsx(Combobox.Root,{"data-slot":"combobox",...b,onInputValueChange:g,onOpenChange:d})})})}function k(o){return jsx(Combobox.Trigger,{"data-slot":"combobox-trigger",...o})}function E(o){return jsx(Combobox.Label,{"data-slot":"combobox-label",...o})}function O(o){return jsx(Combobox.InputGroup,{"data-slot":"combobox-input-group",...o})}function B(o){return jsx(Combobox.Input,{"data-slot":"combobox-input",...o})}function F(o){return jsx(Combobox.Icon,{"data-slot":"combobox-icon",...o})}function q(o){return jsx(Combobox.Clear,{"data-slot":"combobox-clear",...o})}function z(o){return jsx(Combobox.Value,{"data-slot":"combobox-value",...o})}function J(o){return jsx(Combobox.Chips,{"data-slot":"combobox-chips",...o})}function K(o){return jsx(Combobox.Chip,{"data-slot":"combobox-chip",...o})}function N(o){return jsx(Combobox.ChipRemove,{"data-slot":"combobox-chip-remove",...o})}function Q(o){let{open:b}=L();return jsx(AnimatePresence,{children:b&&jsx(Combobox.Portal,{"data-slot":"combobox-portal",keepMounted:true,...o})})}function U(o){return jsx(Combobox.Positioner,{"data-slot":"combobox-positioner",...o})}function W({initialFocus:o,finalFocus:b,transition:p={type:"spring",stiffness:300,damping:25},...i}){return jsx(Combobox.Popup,{finalFocus:b,initialFocus:o,render:jsx(motion.div,{animate:{opacity:1,scale:1},"data-slot":"combobox-popup",exit:{opacity:0,scale:.5},initial:{opacity:0,scale:.5},transition:p,...i},"combobox-popup")})}function X(o){return jsx(Combobox.Backdrop,{"data-slot":"combobox-backdrop",...o})}function Y(o){return jsx(Combobox.Status,{"data-slot":"combobox-status",...o})}function Z(o){return jsx(Combobox.Empty,{"data-slot":"combobox-empty",...o})}function _(o){return jsx(Combobox.List,{"data-slot":"combobox-list",...o})}function $({transition:o={type:"spring",stiffness:350,damping:35},...b$1}){let{highlightedValue:p}=c();return jsx(b,{click:false,controlledItems:true,"data-slot":"combobox-highlight",transition:o,value:p,...b$1})}function j(o){return jsx(c$1,{"data-slot":"combobox-highlight-item",...o})}function D(o){return jsx(Combobox.Row,{"data-slot":"combobox-row",...o})}function oo(o){let{setHighlightedValue:b}=c(),[,p]=useDataState("highlighted",void 0,(i,a)=>{if(i===true){let m=a.current,n=m?.dataset.value||m?.id||null;n&&b(n);}});return jsx(Combobox.Item,{ref:p,"data-slot":"combobox-item",...o})}function to(o){return jsx(Combobox.ItemIndicator,{"data-slot":"combobox-item-indicator",...o})}function eo(o){return jsx(Combobox.Separator,{"data-slot":"combobox-separator",...o})}function bo(o){return jsx(Combobox.Group,{"data-slot":"combobox-group",...o})}function ro(o){return jsx(Combobox.GroupLabel,{"data-slot":"combobox-group-label",...o})}function po(o){return jsx(Combobox.Collection,{"data-slot":"combobox-collection",...o})}function io(o){return jsx(Combobox.Arrow,{"data-slot":"combobox-arrow",...o})}export{bo as A,ro as B,po as C,io as D,L as a,c as b,M as c,k as d,E as e,O as f,B as g,F as h,q as i,z as j,J as k,K as l,N as m,Q as n,U as o,W as p,X as q,Y as r,Z as s,_ as t,$ as u,j as v,D as w,oo as x,to as y,eo as z};//# sourceMappingURL=chunk-C3FYXQCF.js.map
2
- //# sourceMappingURL=chunk-C3FYXQCF.js.map
1
+ import {b,c as c$1}from'./chunk-2XZRLJCN.js';import*as x from'react';import {Combobox}from'@base-ui/react/combobox';import {AnimatePresence,motion}from'motion/react';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {useDataState}from'@xploreu/hooks/use-data-state';import {getStrictContext}from'@xploreu/lib/get-strict-context';import {jsx}from'react/jsx-runtime';var [V,L]=getStrictContext("ComboboxContext"),[H,c]=getStrictContext("ComboboxActiveValueContext");function M({behavior:o="default",...b}){let[p,i]=useControlledState({value:b?.open,defaultValue:b?.defaultOpen,onChange:b?.onOpenChange}),[a,m]=useControlledState({value:b?.inputValue?.toString(),defaultValue:b?.defaultInputValue?.toString(),onChange:b?.onInputValueChange}),[n,h]=x.useState(null),g=(s,r)=>{if(r.reason==="input-clear")return r.cancel();m(s,r);},d=(s,r)=>{let y=r.trigger?.dataset;if(o==="chip-outside"&&(r.reason==="trigger-press"&&y?.slot==="combobox-clear-input"&&!s||r.reason==="item-press"))return r.cancel();i(s,r);};return jsx(H,{value:{highlightedValue:n,setHighlightedValue:h},children:jsx(V,{value:{open:p,setOpen:i,inputValue:a,setInputValue:m},children:jsx(Combobox.Root,{"data-slot":"combobox",...b,onInputValueChange:g,onOpenChange:d})})})}function k(o){return jsx(Combobox.Trigger,{"data-slot":"combobox-trigger",...o})}function E(o){return jsx(Combobox.Label,{"data-slot":"combobox-label",...o})}function O(o){return jsx(Combobox.InputGroup,{"data-slot":"combobox-input-group",...o})}function B(o){return jsx(Combobox.Input,{"data-slot":"combobox-input",...o})}function F(o){return jsx(Combobox.Icon,{"data-slot":"combobox-icon",...o})}function q(o){return jsx(Combobox.Clear,{"data-slot":"combobox-clear",...o})}function z(o){return jsx(Combobox.Value,{"data-slot":"combobox-value",...o})}function J(o){return jsx(Combobox.Chips,{"data-slot":"combobox-chips",...o})}function K(o){return jsx(Combobox.Chip,{"data-slot":"combobox-chip",...o})}function N(o){return jsx(Combobox.ChipRemove,{"data-slot":"combobox-chip-remove",...o})}function Q(o){let{open:b}=L();return jsx(AnimatePresence,{children:b&&jsx(Combobox.Portal,{"data-slot":"combobox-portal",keepMounted:true,...o})})}function U(o){return jsx(Combobox.Positioner,{"data-slot":"combobox-positioner",...o})}function W({initialFocus:o,finalFocus:b,transition:p={type:"spring",stiffness:300,damping:25},...i}){return jsx(Combobox.Popup,{finalFocus:b,initialFocus:o,render:jsx(motion.div,{animate:{opacity:1,scale:1},"data-slot":"combobox-popup",exit:{opacity:0,scale:.5},initial:{opacity:0,scale:.5},transition:p,...i},"combobox-popup")})}function X(o){return jsx(Combobox.Backdrop,{"data-slot":"combobox-backdrop",...o})}function Y(o){return jsx(Combobox.Status,{"data-slot":"combobox-status",...o})}function Z(o){return jsx(Combobox.Empty,{"data-slot":"combobox-empty",...o})}function _(o){return jsx(Combobox.List,{"data-slot":"combobox-list",...o})}function $({transition:o={type:"spring",stiffness:350,damping:35},...b$1}){let{highlightedValue:p}=c();return jsx(b,{click:false,controlledItems:true,"data-slot":"combobox-highlight",transition:o,value:p,...b$1})}function j(o){return jsx(c$1,{"data-slot":"combobox-highlight-item",...o})}function D(o){return jsx(Combobox.Row,{"data-slot":"combobox-row",...o})}function oo(o){let{setHighlightedValue:b}=c(),[,p]=useDataState("highlighted",void 0,(i,a)=>{if(i===true){let m=a.current,n=m?.dataset.value||m?.id||null;n&&b(n);}});return jsx(Combobox.Item,{ref:p,"data-slot":"combobox-item",...o})}function to(o){return jsx(Combobox.ItemIndicator,{"data-slot":"combobox-item-indicator",...o})}function eo(o){return jsx(Combobox.Separator,{"data-slot":"combobox-separator",...o})}function bo(o){return jsx(Combobox.Group,{"data-slot":"combobox-group",...o})}function ro(o){return jsx(Combobox.GroupLabel,{"data-slot":"combobox-group-label",...o})}function po(o){return jsx(Combobox.Collection,{"data-slot":"combobox-collection",...o})}function io(o){return jsx(Combobox.Arrow,{"data-slot":"combobox-arrow",...o})}export{bo as A,ro as B,po as C,io as D,L as a,c as b,M as c,k as d,E as e,O as f,B as g,F as h,q as i,z as j,J as k,K as l,N as m,Q as n,U as o,W as p,X as q,Y as r,Z as s,_ as t,$ as u,j as v,D as w,oo as x,to as y,eo as z};//# sourceMappingURL=chunk-JILBFCPY.js.map
2
+ //# sourceMappingURL=chunk-JILBFCPY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/primitives/combobox.tsx"],"names":["ComboboxProvider","useCombobox","getStrictContext","ComboboxActiveValueProvider","useComboboxActiveValue","Combobox","behavior","props","open","setOpen","useControlledState","inputValue","setInputValue","highlightedValue","setHighlightedValue","handleInputValueChange","eventDetails","handleOpenChange","dataSet","jsx","ComboboxPrimitive","ComboboxTrigger","ComboboxLabel","ComboboxInputGroup","ComboboxInput","ComboboxIcon","ComboboxClear","ComboboxValue","ComboboxChips","ComboboxChip","ComboboxChipRemove","ComboboxPortal","AnimatePresence","ComboboxPositioner","ComboboxPopup","initialFocus","finalFocus","transition","motion","ComboboxBackdrop","ComboboxStatus","ComboboxEmpty","ComboboxList","ComboboxHighlight","Highlight","ComboboxHighlightItem","HighlightItem","ComboboxRow","ComboboxItem","highlightedRef","useDataState","value","ref","el","v","ComboboxItemIndicator","ComboboxSeparator","ComboboxGroup","ComboboxGroupLabel","ComboboxCollection","ComboboxArrow"],"mappings":"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","file":"chunk-C3FYXQCF.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react/combobox\"\r\nimport {\r\n AnimatePresence,\r\n type HTMLMotionProps,\r\n motion\r\n} from \"motion/react\"\r\n\r\nimport {\r\n Highlight,\r\n HighlightItem,\r\n type HighlightItemProps,\r\n type HighlightProps,\r\n} from \"../effects/highlight\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { useDataState } from \"@xploreu/hooks/use-data-state\"\r\nimport { getStrictContext } from \"@xploreu/lib/get-strict-context\"\r\n\r\ntype ComboboxContextType = {\r\n open: boolean;\r\n setOpen: (open: boolean, eventDetails: ComboboxPrimitive.Root.ChangeEventDetails) => void;\r\n inputValue: string;\r\n setInputValue: (inputValue: string, eventDetails: ComboboxPrimitive.Root.ChangeEventDetails) => void;\r\n}\r\n\r\ntype ComboboxActiveValueContextType = {\r\n highlightedValue: string | null;\r\n setHighlightedValue: (value: string | null) => void;\r\n}\r\n\r\nconst [ComboboxProvider, useCombobox] =\r\n getStrictContext<ComboboxContextType>(\"ComboboxContext\")\r\n\r\nconst [ComboboxActiveValueProvider, useComboboxActiveValue] =\r\n getStrictContext<ComboboxActiveValueContextType>(\"ComboboxActiveValueContext\")\r\n\r\ntype ComboboxProps<Value, Multiple extends boolean | undefined = false> = ComboboxPrimitive.Root.Props<Value, Multiple> & {\r\n behavior?: \"default\" | \"chip-outside\";\r\n}\r\n\r\nfunction Combobox<Value, Multiple extends boolean | undefined = false>({\r\n behavior = \"default\",\r\n ...props\r\n}: ComboboxProps<Value, Multiple>) {\r\n const [open, setOpen] = useControlledState({\r\n value: props?.open,\r\n defaultValue: props?.defaultOpen,\r\n onChange: props?.onOpenChange,\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 const [highlightedValue, setHighlightedValue] = React.useState<string | null>(null)\r\n\r\n const handleInputValueChange: ComboboxProps<Value, Multiple>[\"onInputValueChange\"] = (inputValue, eventDetails) => {\r\n // if the input is cleared, we want to cancel the event to prevent resetting the input value.\r\n if (eventDetails.reason === \"input-clear\") return eventDetails.cancel()\r\n\r\n setInputValue(inputValue, eventDetails)\r\n }\r\n\r\n const handleOpenChange: ComboboxProps<Value, Multiple>[\"onOpenChange\"] = (open, eventDetails) => {\r\n const dataSet = (eventDetails.trigger as HTMLElement)?.dataset\r\n\r\n\r\n if (behavior === \"chip-outside\") {\r\n if (\r\n eventDetails.reason === \"trigger-press\" &&\r\n dataSet?.slot === \"combobox-clear-input\" &&\r\n !open\r\n ) {\r\n return eventDetails.cancel()\r\n }\r\n\r\n if (eventDetails.reason === \"item-press\") {\r\n return eventDetails.cancel()\r\n }\r\n }\r\n\r\n setOpen(open, eventDetails)\r\n }\r\n\r\n return (\r\n <ComboboxActiveValueProvider value={{ highlightedValue, setHighlightedValue }}>\r\n <ComboboxProvider value={{ open, setOpen, inputValue, setInputValue }}>\r\n <ComboboxPrimitive.Root\r\n data-slot=\"combobox\"\r\n {...props}\r\n onInputValueChange={handleInputValueChange}\r\n onOpenChange={handleOpenChange}\r\n />\r\n </ComboboxProvider>\r\n </ComboboxActiveValueProvider>\r\n )\r\n}\r\n\r\ntype ComboboxTriggerProps = ComboboxPrimitive.Trigger.Props\r\n\r\nfunction ComboboxTrigger(props: ComboboxTriggerProps) {\r\n return <ComboboxPrimitive.Trigger\r\n data-slot=\"combobox-trigger\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxLabelProps = ComboboxPrimitive.Label.Props\r\n\r\nfunction ComboboxLabel(props: ComboboxLabelProps) {\r\n return <ComboboxPrimitive.Label\r\n data-slot=\"combobox-label\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxInputGroupProps = ComboboxPrimitive.InputGroup.Props\r\n\r\nfunction ComboboxInputGroup(props: ComboboxInputGroupProps) {\r\n return <ComboboxPrimitive.InputGroup\r\n data-slot=\"combobox-input-group\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxInputProps = ComboboxPrimitive.Input.Props\r\n\r\nfunction ComboboxInput(props: ComboboxInputProps) {\r\n return <ComboboxPrimitive.Input\r\n data-slot=\"combobox-input\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxIconProps = ComboboxPrimitive.Icon.Props\r\n\r\nfunction ComboboxIcon(props: ComboboxIconProps) {\r\n return <ComboboxPrimitive.Icon\r\n data-slot=\"combobox-icon\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxClearProps = ComboboxPrimitive.Clear.Props\r\n\r\nfunction ComboboxClear(props: ComboboxClearProps) {\r\n return <ComboboxPrimitive.Clear\r\n data-slot=\"combobox-clear\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxValueProps = ComboboxPrimitive.Value.Props\r\n\r\nfunction ComboboxValue(props: ComboboxValueProps) {\r\n return <ComboboxPrimitive.Value\r\n data-slot=\"combobox-value\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxChipsProps = ComboboxPrimitive.Chips.Props\r\n\r\nfunction ComboboxChips(props: ComboboxChipsProps) {\r\n return <ComboboxPrimitive.Chips\r\n data-slot=\"combobox-chips\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxChipProps = ComboboxPrimitive.Chip.Props\r\n\r\nfunction ComboboxChip(props: ComboboxChipProps) {\r\n return <ComboboxPrimitive.Chip\r\n data-slot=\"combobox-chip\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxChipRemoveProps = ComboboxPrimitive.ChipRemove.Props\r\n\r\nfunction ComboboxChipRemove(props: ComboboxChipRemoveProps) {\r\n return <ComboboxPrimitive.ChipRemove\r\n data-slot=\"combobox-chip-remove\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxPortalProps = Omit<\r\n ComboboxPrimitive.Portal.Props,\r\n \"keepMounted\"\r\n>\r\n\r\nfunction ComboboxPortal(props: ComboboxPortalProps) {\r\n const { open } = useCombobox()\r\n\r\n return (\r\n <AnimatePresence>\r\n {open && (\r\n <ComboboxPrimitive.Portal\r\n data-slot=\"combobox-portal\"\r\n keepMounted\r\n {...props}\r\n />\r\n )}\r\n </AnimatePresence>\r\n )\r\n}\r\n\r\ntype ComboboxPositionerProps = ComboboxPrimitive.Positioner.Props\r\n\r\nfunction ComboboxPositioner(props: ComboboxPositionerProps) {\r\n return (\r\n <ComboboxPrimitive.Positioner\r\n data-slot=\"combobox-positioner\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype ComboboxPopupProps = Omit<\r\n ComboboxPrimitive.Popup.Props,\r\n \"render\"\r\n> &\r\n HTMLMotionProps<\"div\">\r\n\r\nfunction ComboboxPopup({\r\n initialFocus,\r\n finalFocus,\r\n transition = { type: \"spring\", stiffness: 300, damping: 25 },\r\n ...props\r\n}: ComboboxPopupProps) {\r\n return (\r\n <ComboboxPrimitive.Popup\r\n finalFocus={finalFocus}\r\n initialFocus={initialFocus}\r\n render={\r\n <motion.div\r\n key=\"combobox-popup\"\r\n animate={{ opacity: 1, scale: 1 }}\r\n data-slot=\"combobox-popup\"\r\n exit={{ opacity: 0, scale: 0.5 }}\r\n initial={{ opacity: 0, scale: 0.5 }}\r\n transition={transition}\r\n {...props}\r\n />\r\n }\r\n />\r\n )\r\n}\r\n\r\ntype ComboboxBackdropProps = ComboboxPrimitive.Backdrop.Props\r\n\r\nfunction ComboboxBackdrop(props: ComboboxBackdropProps) {\r\n return <ComboboxPrimitive.Backdrop\r\n data-slot=\"combobox-backdrop\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxStatusProps = ComboboxPrimitive.Status.Props\r\n\r\nfunction ComboboxStatus(props: ComboboxStatusProps) {\r\n return <ComboboxPrimitive.Status\r\n data-slot=\"combobox-status\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxEmptyProps = ComboboxPrimitive.Empty.Props\r\n\r\nfunction ComboboxEmpty(props: ComboboxEmptyProps) {\r\n return <ComboboxPrimitive.Empty\r\n data-slot=\"combobox-empty\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxListProps = ComboboxPrimitive.List.Props\r\n\r\nfunction ComboboxList(props: ComboboxListProps) {\r\n return <ComboboxPrimitive.List\r\n data-slot=\"combobox-list\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxHighlightProps = Omit<\r\n HighlightProps,\r\n \"controlledItems\" | \"enabled\" | \"hover\"\r\n>\r\n\r\nfunction ComboboxHighlight({\r\n transition = { type: \"spring\", stiffness: 350, damping: 35 },\r\n ...props\r\n}: ComboboxHighlightProps) {\r\n const { highlightedValue } = useComboboxActiveValue()\r\n\r\n return (\r\n <Highlight\r\n click={false}\r\n controlledItems\r\n data-slot=\"combobox-highlight\"\r\n transition={transition}\r\n value={highlightedValue}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype ComboboxHighlightItemProps = HighlightItemProps\r\n\r\nfunction ComboboxHighlightItem(props: ComboboxHighlightItemProps) {\r\n return (\r\n <HighlightItem\r\n data-slot=\"combobox-highlight-item\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype ComboboxRowProps = ComboboxPrimitive.Row.Props\r\n\r\nfunction ComboboxRow(props: ComboboxRowProps) {\r\n return <ComboboxPrimitive.Row\r\n data-slot=\"combobox-row\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxItemProps = ComboboxPrimitive.Item.Props\r\n\r\nfunction ComboboxItem(props: ComboboxItemProps) {\r\n const { setHighlightedValue } = useComboboxActiveValue()\r\n const [, highlightedRef] = useDataState<HTMLDivElement>(\r\n \"highlighted\",\r\n undefined,\r\n (value, ref) => {\r\n if (value === true) {\r\n const el = ref.current\r\n const v = el?.dataset.value || el?.id || null\r\n if (v) setHighlightedValue(v)\r\n }\r\n },\r\n )\r\n\r\n return <ComboboxPrimitive.Item\r\n ref={highlightedRef}\r\n data-slot=\"combobox-item\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxItemIndicatorProps = ComboboxPrimitive.ItemIndicator.Props\r\n\r\nfunction ComboboxItemIndicator(props: ComboboxItemIndicatorProps) {\r\n return <ComboboxPrimitive.ItemIndicator\r\n data-slot=\"combobox-item-indicator\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxSeparatorProps = ComboboxPrimitive.Separator.Props\r\n\r\nfunction ComboboxSeparator(props: ComboboxSeparatorProps) {\r\n return <ComboboxPrimitive.Separator\r\n data-slot=\"combobox-separator\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxGroupProps = ComboboxPrimitive.Group.Props\r\n\r\nfunction ComboboxGroup(props: ComboboxGroupProps) {\r\n return <ComboboxPrimitive.Group\r\n data-slot=\"combobox-group\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxGroupLabelProps = ComboboxPrimitive.GroupLabel.Props\r\n\r\nfunction ComboboxGroupLabel(props: ComboboxGroupLabelProps) {\r\n return <ComboboxPrimitive.GroupLabel\r\n data-slot=\"combobox-group-label\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxCollectionProps = ComboboxPrimitive.Collection.Props\r\n\r\nfunction ComboboxCollection(props: ComboboxCollectionProps) {\r\n return <ComboboxPrimitive.Collection\r\n data-slot=\"combobox-collection\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxArrowProps = ComboboxPrimitive.Arrow.Props\r\n\r\nfunction ComboboxArrow(props: ComboboxArrowProps) {\r\n return <ComboboxPrimitive.Arrow\r\n data-slot=\"combobox-arrow\"\r\n {...props}\r\n />\r\n}\r\n\r\nexport {\r\n Combobox,\r\n type ComboboxActiveValueContextType,\r\n ComboboxArrow,\r\n type ComboboxArrowProps,\r\n ComboboxBackdrop,\r\n type ComboboxBackdropProps,\r\n ComboboxChip,\r\n type ComboboxChipProps,\r\n ComboboxChipRemove,\r\n type ComboboxChipRemoveProps,\r\n ComboboxChips,\r\n type ComboboxChipsProps,\r\n ComboboxClear,\r\n type ComboboxClearProps,\r\n ComboboxCollection,\r\n type ComboboxCollectionProps,\r\n type ComboboxContextType,\r\n ComboboxEmpty,\r\n type ComboboxEmptyProps,\r\n ComboboxGroup,\r\n ComboboxGroupLabel,\r\n type ComboboxGroupLabelProps,\r\n type ComboboxGroupProps,\r\n ComboboxHighlight,\r\n ComboboxHighlightItem,\r\n type ComboboxHighlightItemProps,\r\n type ComboboxHighlightProps,\r\n ComboboxIcon,\r\n type ComboboxIconProps,\r\n ComboboxInput,\r\n ComboboxInputGroup,\r\n type ComboboxInputGroupProps,\r\n type ComboboxInputProps,\r\n ComboboxItem,\r\n ComboboxItemIndicator,\r\n type ComboboxItemIndicatorProps,\r\n type ComboboxItemProps,\r\n ComboboxLabel,\r\n type ComboboxLabelProps,\r\n ComboboxList,\r\n type ComboboxListProps,\r\n ComboboxPopup,\r\n type ComboboxPopupProps,\r\n ComboboxPortal,\r\n type ComboboxPortalProps,\r\n ComboboxPositioner,\r\n type ComboboxPositionerProps,\r\n type ComboboxProps,\r\n ComboboxRow,\r\n type ComboboxRowProps,\r\n ComboboxSeparator,\r\n type ComboboxSeparatorProps,\r\n ComboboxStatus,\r\n type ComboboxStatusProps,\r\n ComboboxTrigger,\r\n type ComboboxTriggerProps,\r\n ComboboxValue,\r\n type ComboboxValueProps,\r\n useCombobox,\r\n useComboboxActiveValue,\r\n}"]}
1
+ {"version":3,"sources":["../src/primitives/combobox.tsx"],"names":["ComboboxProvider","useCombobox","getStrictContext","ComboboxActiveValueProvider","useComboboxActiveValue","Combobox","behavior","props","open","setOpen","useControlledState","inputValue","setInputValue","highlightedValue","setHighlightedValue","handleInputValueChange","eventDetails","handleOpenChange","dataSet","jsx","ComboboxPrimitive","ComboboxTrigger","ComboboxLabel","ComboboxInputGroup","ComboboxInput","ComboboxIcon","ComboboxClear","ComboboxValue","ComboboxChips","ComboboxChip","ComboboxChipRemove","ComboboxPortal","AnimatePresence","ComboboxPositioner","ComboboxPopup","initialFocus","finalFocus","transition","motion","ComboboxBackdrop","ComboboxStatus","ComboboxEmpty","ComboboxList","ComboboxHighlight","Highlight","ComboboxHighlightItem","HighlightItem","ComboboxRow","ComboboxItem","highlightedRef","useDataState","value","ref","el","v","ComboboxItemIndicator","ComboboxSeparator","ComboboxGroup","ComboboxGroupLabel","ComboboxCollection","ComboboxArrow"],"mappings":"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","file":"chunk-JILBFCPY.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react/combobox\"\r\nimport {\r\n AnimatePresence,\r\n type HTMLMotionProps,\r\n motion\r\n} from \"motion/react\"\r\n\r\nimport {\r\n Highlight,\r\n HighlightItem,\r\n type HighlightItemProps,\r\n type HighlightProps,\r\n} from \"../effects/highlight\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { useDataState } from \"@xploreu/hooks/use-data-state\"\r\nimport { getStrictContext } from \"@xploreu/lib/get-strict-context\"\r\n\r\ntype ComboboxContextType = {\r\n open: boolean;\r\n setOpen: (open: boolean, eventDetails: ComboboxPrimitive.Root.ChangeEventDetails) => void;\r\n inputValue: string;\r\n setInputValue: (inputValue: string, eventDetails: ComboboxPrimitive.Root.ChangeEventDetails) => void;\r\n}\r\n\r\ntype ComboboxActiveValueContextType = {\r\n highlightedValue: string | null;\r\n setHighlightedValue: (value: string | null) => void;\r\n}\r\n\r\nconst [ComboboxProvider, useCombobox] =\r\n getStrictContext<ComboboxContextType>(\"ComboboxContext\")\r\n\r\nconst [ComboboxActiveValueProvider, useComboboxActiveValue] =\r\n getStrictContext<ComboboxActiveValueContextType>(\"ComboboxActiveValueContext\")\r\n\r\ntype ComboboxProps<Value, Multiple extends boolean | undefined = false> = ComboboxPrimitive.Root.Props<Value, Multiple> & {\r\n behavior?: \"default\" | \"chip-outside\";\r\n}\r\n\r\nfunction Combobox<Value, Multiple extends boolean | undefined = false>({\r\n behavior = \"default\",\r\n ...props\r\n}: ComboboxProps<Value, Multiple>) {\r\n const [open, setOpen] = useControlledState({\r\n value: props?.open,\r\n defaultValue: props?.defaultOpen,\r\n onChange: props?.onOpenChange,\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 const [highlightedValue, setHighlightedValue] = React.useState<string | null>(null)\r\n\r\n const handleInputValueChange: ComboboxProps<Value, Multiple>[\"onInputValueChange\"] = (inputValue, eventDetails) => {\r\n // if the input is cleared, we want to cancel the event to prevent resetting the input value.\r\n if (eventDetails.reason === \"input-clear\") return eventDetails.cancel()\r\n\r\n setInputValue(inputValue, eventDetails)\r\n }\r\n\r\n const handleOpenChange: ComboboxProps<Value, Multiple>[\"onOpenChange\"] = (open, eventDetails) => {\r\n const dataSet = (eventDetails.trigger as HTMLElement)?.dataset\r\n\r\n\r\n if (behavior === \"chip-outside\") {\r\n if (\r\n eventDetails.reason === \"trigger-press\" &&\r\n dataSet?.slot === \"combobox-clear-input\" &&\r\n !open\r\n ) {\r\n return eventDetails.cancel()\r\n }\r\n\r\n if (eventDetails.reason === \"item-press\") {\r\n return eventDetails.cancel()\r\n }\r\n }\r\n\r\n setOpen(open, eventDetails)\r\n }\r\n\r\n return (\r\n <ComboboxActiveValueProvider value={{ highlightedValue, setHighlightedValue }}>\r\n <ComboboxProvider value={{ open, setOpen, inputValue, setInputValue }}>\r\n <ComboboxPrimitive.Root\r\n data-slot=\"combobox\"\r\n {...props}\r\n onInputValueChange={handleInputValueChange}\r\n onOpenChange={handleOpenChange}\r\n />\r\n </ComboboxProvider>\r\n </ComboboxActiveValueProvider>\r\n )\r\n}\r\n\r\ntype ComboboxTriggerProps = ComboboxPrimitive.Trigger.Props\r\n\r\nfunction ComboboxTrigger(props: ComboboxTriggerProps) {\r\n return <ComboboxPrimitive.Trigger\r\n data-slot=\"combobox-trigger\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxLabelProps = ComboboxPrimitive.Label.Props\r\n\r\nfunction ComboboxLabel(props: ComboboxLabelProps) {\r\n return <ComboboxPrimitive.Label\r\n data-slot=\"combobox-label\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxInputGroupProps = ComboboxPrimitive.InputGroup.Props\r\n\r\nfunction ComboboxInputGroup(props: ComboboxInputGroupProps) {\r\n return <ComboboxPrimitive.InputGroup\r\n data-slot=\"combobox-input-group\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxInputProps = ComboboxPrimitive.Input.Props\r\n\r\nfunction ComboboxInput(props: ComboboxInputProps) {\r\n return <ComboboxPrimitive.Input\r\n data-slot=\"combobox-input\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxIconProps = ComboboxPrimitive.Icon.Props\r\n\r\nfunction ComboboxIcon(props: ComboboxIconProps) {\r\n return <ComboboxPrimitive.Icon\r\n data-slot=\"combobox-icon\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxClearProps = ComboboxPrimitive.Clear.Props\r\n\r\nfunction ComboboxClear(props: ComboboxClearProps) {\r\n return <ComboboxPrimitive.Clear\r\n data-slot=\"combobox-clear\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxValueProps = ComboboxPrimitive.Value.Props\r\n\r\nfunction ComboboxValue(props: ComboboxValueProps) {\r\n return <ComboboxPrimitive.Value\r\n data-slot=\"combobox-value\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxChipsProps = ComboboxPrimitive.Chips.Props\r\n\r\nfunction ComboboxChips(props: ComboboxChipsProps) {\r\n return <ComboboxPrimitive.Chips\r\n data-slot=\"combobox-chips\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxChipProps = ComboboxPrimitive.Chip.Props\r\n\r\nfunction ComboboxChip(props: ComboboxChipProps) {\r\n return <ComboboxPrimitive.Chip\r\n data-slot=\"combobox-chip\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxChipRemoveProps = ComboboxPrimitive.ChipRemove.Props\r\n\r\nfunction ComboboxChipRemove(props: ComboboxChipRemoveProps) {\r\n return <ComboboxPrimitive.ChipRemove\r\n data-slot=\"combobox-chip-remove\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxPortalProps = Omit<\r\n ComboboxPrimitive.Portal.Props,\r\n \"keepMounted\"\r\n>\r\n\r\nfunction ComboboxPortal(props: ComboboxPortalProps) {\r\n const { open } = useCombobox()\r\n\r\n return (\r\n <AnimatePresence>\r\n {open && (\r\n <ComboboxPrimitive.Portal\r\n data-slot=\"combobox-portal\"\r\n keepMounted\r\n {...props}\r\n />\r\n )}\r\n </AnimatePresence>\r\n )\r\n}\r\n\r\ntype ComboboxPositionerProps = ComboboxPrimitive.Positioner.Props\r\n\r\nfunction ComboboxPositioner(props: ComboboxPositionerProps) {\r\n return (\r\n <ComboboxPrimitive.Positioner\r\n data-slot=\"combobox-positioner\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype ComboboxPopupProps = Omit<\r\n ComboboxPrimitive.Popup.Props,\r\n \"render\"\r\n> &\r\n HTMLMotionProps<\"div\">\r\n\r\nfunction ComboboxPopup({\r\n initialFocus,\r\n finalFocus,\r\n transition = { type: \"spring\", stiffness: 300, damping: 25 },\r\n ...props\r\n}: ComboboxPopupProps) {\r\n return (\r\n <ComboboxPrimitive.Popup\r\n finalFocus={finalFocus}\r\n initialFocus={initialFocus}\r\n render={\r\n <motion.div\r\n key=\"combobox-popup\"\r\n animate={{ opacity: 1, scale: 1 }}\r\n data-slot=\"combobox-popup\"\r\n exit={{ opacity: 0, scale: 0.5 }}\r\n initial={{ opacity: 0, scale: 0.5 }}\r\n transition={transition}\r\n {...props}\r\n />\r\n }\r\n />\r\n )\r\n}\r\n\r\ntype ComboboxBackdropProps = ComboboxPrimitive.Backdrop.Props\r\n\r\nfunction ComboboxBackdrop(props: ComboboxBackdropProps) {\r\n return <ComboboxPrimitive.Backdrop\r\n data-slot=\"combobox-backdrop\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxStatusProps = ComboboxPrimitive.Status.Props\r\n\r\nfunction ComboboxStatus(props: ComboboxStatusProps) {\r\n return <ComboboxPrimitive.Status\r\n data-slot=\"combobox-status\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxEmptyProps = ComboboxPrimitive.Empty.Props\r\n\r\nfunction ComboboxEmpty(props: ComboboxEmptyProps) {\r\n return <ComboboxPrimitive.Empty\r\n data-slot=\"combobox-empty\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxListProps = ComboboxPrimitive.List.Props\r\n\r\nfunction ComboboxList(props: ComboboxListProps) {\r\n return <ComboboxPrimitive.List\r\n data-slot=\"combobox-list\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxHighlightProps = Omit<\r\n HighlightProps,\r\n \"controlledItems\" | \"enabled\" | \"hover\"\r\n>\r\n\r\nfunction ComboboxHighlight({\r\n transition = { type: \"spring\", stiffness: 350, damping: 35 },\r\n ...props\r\n}: ComboboxHighlightProps) {\r\n const { highlightedValue } = useComboboxActiveValue()\r\n\r\n return (\r\n <Highlight\r\n click={false}\r\n controlledItems\r\n data-slot=\"combobox-highlight\"\r\n transition={transition}\r\n value={highlightedValue}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype ComboboxHighlightItemProps = HighlightItemProps\r\n\r\nfunction ComboboxHighlightItem(props: ComboboxHighlightItemProps) {\r\n return (\r\n <HighlightItem\r\n data-slot=\"combobox-highlight-item\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype ComboboxRowProps = ComboboxPrimitive.Row.Props\r\n\r\nfunction ComboboxRow(props: ComboboxRowProps) {\r\n return <ComboboxPrimitive.Row\r\n data-slot=\"combobox-row\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxItemProps = ComboboxPrimitive.Item.Props\r\n\r\nfunction ComboboxItem(props: ComboboxItemProps) {\r\n const { setHighlightedValue } = useComboboxActiveValue()\r\n const [, highlightedRef] = useDataState<HTMLDivElement>(\r\n \"highlighted\",\r\n undefined,\r\n (value, ref) => {\r\n if (value === true) {\r\n const el = ref.current\r\n const v = el?.dataset.value || el?.id || null\r\n if (v) setHighlightedValue(v)\r\n }\r\n },\r\n )\r\n\r\n return <ComboboxPrimitive.Item\r\n ref={highlightedRef}\r\n data-slot=\"combobox-item\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxItemIndicatorProps = ComboboxPrimitive.ItemIndicator.Props\r\n\r\nfunction ComboboxItemIndicator(props: ComboboxItemIndicatorProps) {\r\n return <ComboboxPrimitive.ItemIndicator\r\n data-slot=\"combobox-item-indicator\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxSeparatorProps = ComboboxPrimitive.Separator.Props\r\n\r\nfunction ComboboxSeparator(props: ComboboxSeparatorProps) {\r\n return <ComboboxPrimitive.Separator\r\n data-slot=\"combobox-separator\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxGroupProps = ComboboxPrimitive.Group.Props\r\n\r\nfunction ComboboxGroup(props: ComboboxGroupProps) {\r\n return <ComboboxPrimitive.Group\r\n data-slot=\"combobox-group\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxGroupLabelProps = ComboboxPrimitive.GroupLabel.Props\r\n\r\nfunction ComboboxGroupLabel(props: ComboboxGroupLabelProps) {\r\n return <ComboboxPrimitive.GroupLabel\r\n data-slot=\"combobox-group-label\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxCollectionProps = ComboboxPrimitive.Collection.Props\r\n\r\nfunction ComboboxCollection(props: ComboboxCollectionProps) {\r\n return <ComboboxPrimitive.Collection\r\n data-slot=\"combobox-collection\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxArrowProps = ComboboxPrimitive.Arrow.Props\r\n\r\nfunction ComboboxArrow(props: ComboboxArrowProps) {\r\n return <ComboboxPrimitive.Arrow\r\n data-slot=\"combobox-arrow\"\r\n {...props}\r\n />\r\n}\r\n\r\nexport {\r\n Combobox,\r\n type ComboboxActiveValueContextType,\r\n ComboboxArrow,\r\n type ComboboxArrowProps,\r\n ComboboxBackdrop,\r\n type ComboboxBackdropProps,\r\n ComboboxChip,\r\n type ComboboxChipProps,\r\n ComboboxChipRemove,\r\n type ComboboxChipRemoveProps,\r\n ComboboxChips,\r\n type ComboboxChipsProps,\r\n ComboboxClear,\r\n type ComboboxClearProps,\r\n ComboboxCollection,\r\n type ComboboxCollectionProps,\r\n type ComboboxContextType,\r\n ComboboxEmpty,\r\n type ComboboxEmptyProps,\r\n ComboboxGroup,\r\n ComboboxGroupLabel,\r\n type ComboboxGroupLabelProps,\r\n type ComboboxGroupProps,\r\n ComboboxHighlight,\r\n ComboboxHighlightItem,\r\n type ComboboxHighlightItemProps,\r\n type ComboboxHighlightProps,\r\n ComboboxIcon,\r\n type ComboboxIconProps,\r\n ComboboxInput,\r\n ComboboxInputGroup,\r\n type ComboboxInputGroupProps,\r\n type ComboboxInputProps,\r\n ComboboxItem,\r\n ComboboxItemIndicator,\r\n type ComboboxItemIndicatorProps,\r\n type ComboboxItemProps,\r\n ComboboxLabel,\r\n type ComboboxLabelProps,\r\n ComboboxList,\r\n type ComboboxListProps,\r\n ComboboxPopup,\r\n type ComboboxPopupProps,\r\n ComboboxPortal,\r\n type ComboboxPortalProps,\r\n ComboboxPositioner,\r\n type ComboboxPositionerProps,\r\n type ComboboxProps,\r\n ComboboxRow,\r\n type ComboboxRowProps,\r\n ComboboxSeparator,\r\n type ComboboxSeparatorProps,\r\n ComboboxStatus,\r\n type ComboboxStatusProps,\r\n ComboboxTrigger,\r\n type ComboboxTriggerProps,\r\n ComboboxValue,\r\n type ComboboxValueProps,\r\n useCombobox,\r\n useComboboxActiveValue,\r\n}"]}
@@ -0,0 +1,2 @@
1
+ import'react';import {mergeProps}from'@base-ui/react/merge-props';import {useRender}from'@base-ui/react/use-render';import {cva}from'class-variance-authority';import {XIcon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsx}from'react/jsx-runtime';var c=cva("inline-flex items-center justify-center size-max whitespace-nowrap shrink-0 overflow-hidden transition-colors ring-1 ring-inset",{variants:{type:{rounded:"rounded-xp-full",square:"rounded-xp-card-base-sm",modern:"rounded-xp-card-base-sm shadow-xp-xs"},color:{gray:"bg-utility-gray-50 text-utility-gray-700 ring-utility-gray-200",brand:"bg-utility-brand-50 text-utility-brand-700 ring-utility-brand-200",error:"bg-utility-error-50 text-utility-error-700 ring-utility-error-200",warning:"bg-utility-warning-50 text-utility-warning-700 ring-utility-warning-200",success:"bg-utility-success-50 text-utility-success-700 ring-utility-success-200","gray-blue":"bg-utility-gray-blue-50 text-utility-gray-blue-700 ring-utility-gray-blue-200","blue-light":"bg-utility-blue-light-50 text-utility-blue-light-700 ring-utility-blue-light-200",blue:"bg-utility-blue-50 text-utility-blue-700 ring-utility-blue-200",indigo:"bg-utility-indigo-50 text-utility-indigo-700 ring-utility-indigo-200",purple:"bg-utility-purple-50 text-utility-purple-700 ring-utility-purple-200",pink:"bg-utility-pink-50 text-utility-pink-700 ring-utility-pink-200",orange:"bg-utility-orange-50 text-utility-orange-700 ring-utility-orange-200"},size:{xs:["text-tiny-medium py-0.5 gap-1","[&_[data-slot=badge-icon]]:size-2.5 [&_[data-slot=badge-avatar]]:size-3"],sm:["text-body-medium-3 py-0.5 gap-1","[&_[data-slot=badge-icon]]:size-3 [&_[data-slot=badge-avatar]]:size-4"],md:["text-body-medium-2 py-0.5 gap-1.5","[&_[data-slot=badge-icon]]:size-3.5 [&_[data-slot=badge-avatar]]:size-4"],lg:["text-body-medium-2 py-1 gap-1.5","[&_[data-slot=badge-icon]]:size-3.5 [&_[data-slot=badge-avatar]]:size-4.5"]}},compoundVariants:[{type:"modern",className:"bg-bg-primary text-text-secondary ring-border-primary"},{type:"rounded",size:"xs",className:["px-1.5","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1","has-[[data-slot=badge-dot]]:pl-1","has-[[data-slot=badge-avatar]]:pl-0.5","has-[[data-slot=badge-icon][data-position=trailing]]:pr-1","has-[[data-slot=badge-close]]:pr-0.5"]},{type:"rounded",size:"sm",className:["px-2","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1.5","has-[[data-slot=badge-dot]]:pl-1.5","has-[[data-slot=badge-avatar]]:pl-0.75","has-[[data-slot=badge-icon][data-position=trailing]]:pr-1.5","has-[[data-slot=badge-close]]:pr-0.75"]},{type:"rounded",size:"md",className:["px-2.5","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-2","has-[[data-slot=badge-dot]]:pl-2","has-[[data-slot=badge-avatar]]:pl-1","has-[[data-slot=badge-icon][data-position=trailing]]:pr-2","has-[[data-slot=badge-close]]:pr-1"]},{type:"rounded",size:"lg",className:["px-3","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-2.5","has-[[data-slot=badge-dot]]:pl-2.5","has-[[data-slot=badge-avatar]]:pl-1.5","has-[[data-slot=badge-icon][data-position=trailing]]:pr-2.5","has-[[data-slot=badge-close]]:pr-1.5"]},{type:"square",size:"xs",className:["px-1","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-0.75","has-[[data-slot=badge-dot]]:pl-0.75","has-[[data-slot=badge-avatar]]:pl-0.5","has-[[data-slot=badge-icon][data-position=trailing]]:pr-0.75","has-[[data-slot=badge-close]]:pr-0.5"]},{type:"square",size:"sm",className:["px-1.5","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1","has-[[data-slot=badge-dot]]:pl-1","has-[[data-slot=badge-avatar]]:pl-1","has-[[data-slot=badge-icon][data-position=trailing]]:pr-1","has-[[data-slot=badge-close]]:pr-0.5"]},{type:"square",size:"md",className:["px-2","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1.5","has-[[data-slot=badge-dot]]:pl-1.5","has-[[data-slot=badge-avatar]]:pl-1.5","has-[[data-slot=badge-icon][data-position=trailing]]:pr-1.5","has-[[data-slot=badge-close]]:pr-0.75"]},{type:"square",size:"lg",className:["px-2.5","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-2","has-[[data-slot=badge-dot]]:pl-2","has-[[data-slot=badge-avatar]]:pl-2","has-[[data-slot=badge-icon][data-position=trailing]]:pr-2","has-[[data-slot=badge-close]]:pr-1"]},{type:"modern",size:"xs",className:["px-1","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-0.75","has-[[data-slot=badge-dot]]:pl-0.75","has-[[data-slot=badge-avatar]]:pl-0.5","has-[[data-slot=badge-icon][data-position=trailing]]:pr-0.75","has-[[data-slot=badge-close]]:pr-0.5"]},{type:"modern",size:"sm",className:["px-1.5","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1","has-[[data-slot=badge-dot]]:pl-1","has-[[data-slot=badge-avatar]]:pl-1","has-[[data-slot=badge-icon][data-position=trailing]]:pr-1","has-[[data-slot=badge-close]]:pr-0.5"]},{type:"modern",size:"md",className:["px-2","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1.5","has-[[data-slot=badge-dot]]:pl-1.5","has-[[data-slot=badge-avatar]]:pl-1.5","has-[[data-slot=badge-icon][data-position=trailing]]:pr-1.5","has-[[data-slot=badge-close]]:pr-0.75"]},{type:"modern",size:"lg",className:["px-2.5","has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-2","has-[[data-slot=badge-dot]]:pl-2","has-[[data-slot=badge-avatar]]:pl-2","has-[[data-slot=badge-icon][data-position=trailing]]:pr-2","has-[[data-slot=badge-close]]:pr-1"]}],defaultVariants:{type:"square",color:"gray",size:"md"}});function v({className:t,type:a,color:e,size:s,render:d,...r}){let p={"data-slot":"badge",className:cn(c({type:a,color:e,size:s}),t)};return useRender({defaultTagName:"span",props:mergeProps(p,r),render:d,state:{slot:"badge",type:a,color:e,size:s}})}function z({className:t,position:a="leading",children:e,...s}){return jsx("span",{"data-slot":"badge-icon","data-position":a,className:cn("inline-flex shrink-0 items-center justify-center pointer-events-none [&>svg]:size-full",t),...s,children:e})}function N({className:t,alt:a="",...e}){return jsx("img",{"data-slot":"badge-avatar",alt:a,className:cn("shrink-0 rounded-xp-full object-cover",t),...e})}function P({className:t,render:a,align:e="inline-end",...s}){let d={"data-slot":"badge-close","data-align":e,className:cn("p-0.5 inline-flex items-center justify-center rounded-xp-full hover:opacity-75 focus-visible:outline-none shrink-0 [&>svg]:size-2.5",t),type:"button",children:jsx(XIcon,{})};return useRender({defaultTagName:"button",render:a,props:mergeProps(d,s),state:{slot:"badge-close",align:e}})}function B({className:t,...a}){return jsx("span",{"data-slot":"badge-dot",className:cn("size-1.5 shrink-0 rounded-xp-full bg-current",t),...a})}export{c as a,v as b,z as c,N as d,P as e,B as f};//# sourceMappingURL=chunk-JLZNZFOO.js.map
2
+ //# sourceMappingURL=chunk-JLZNZFOO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/badge.tsx"],"names":["badgeVariants","cva","Badge","className","type","color","size","render","props","defaultProps","cn","useRender","mergeProps","BadgeIcon","position","children","jsx","BadgeAvatar","alt","BadgeButton","align","XIcon","BadgeDot"],"mappings":"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","file":"chunk-JLZNZFOO.js","sourcesContent":["import * as React from \"react\"\r\n\r\nimport { mergeProps } from \"@base-ui/react/merge-props\"\r\nimport { useRender } from \"@base-ui/react/use-render\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { XIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\n\r\nconst badgeVariants = cva(\r\n \"inline-flex items-center justify-center size-max whitespace-nowrap shrink-0 overflow-hidden transition-colors ring-1 ring-inset\",\r\n {\r\n variants: {\r\n type: {\r\n \"rounded\": \"rounded-xp-full\",\r\n \"square\": \"rounded-xp-card-base-sm\",\r\n \"modern\": \"rounded-xp-card-base-sm shadow-xp-xs\",\r\n },\r\n color: {\r\n gray: \"bg-utility-gray-50 text-utility-gray-700 ring-utility-gray-200\",\r\n brand: \"bg-utility-brand-50 text-utility-brand-700 ring-utility-brand-200\",\r\n error: \"bg-utility-error-50 text-utility-error-700 ring-utility-error-200\",\r\n warning: \"bg-utility-warning-50 text-utility-warning-700 ring-utility-warning-200\",\r\n success: \"bg-utility-success-50 text-utility-success-700 ring-utility-success-200\",\r\n \"gray-blue\": \"bg-utility-gray-blue-50 text-utility-gray-blue-700 ring-utility-gray-blue-200\",\r\n \"blue-light\": \"bg-utility-blue-light-50 text-utility-blue-light-700 ring-utility-blue-light-200\",\r\n blue: \"bg-utility-blue-50 text-utility-blue-700 ring-utility-blue-200\",\r\n indigo: \"bg-utility-indigo-50 text-utility-indigo-700 ring-utility-indigo-200\",\r\n purple: \"bg-utility-purple-50 text-utility-purple-700 ring-utility-purple-200\",\r\n pink: \"bg-utility-pink-50 text-utility-pink-700 ring-utility-pink-200\",\r\n orange: \"bg-utility-orange-50 text-utility-orange-700 ring-utility-orange-200\",\r\n },\r\n size: {\r\n xs: [\r\n \"text-tiny-medium py-0.5 gap-1\",\r\n \"[&_[data-slot=badge-icon]]:size-2.5 [&_[data-slot=badge-avatar]]:size-3\",\r\n ],\r\n sm: [\r\n \"text-body-medium-3 py-0.5 gap-1\",\r\n \"[&_[data-slot=badge-icon]]:size-3 [&_[data-slot=badge-avatar]]:size-4\",\r\n ],\r\n md: [\r\n \"text-body-medium-2 py-0.5 gap-1.5\",\r\n \"[&_[data-slot=badge-icon]]:size-3.5 [&_[data-slot=badge-avatar]]:size-4\",\r\n ],\r\n lg: [\r\n \"text-body-medium-2 py-1 gap-1.5\",\r\n \"[&_[data-slot=badge-icon]]:size-3.5 [&_[data-slot=badge-avatar]]:size-4.5\",\r\n ],\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n type: \"modern\",\r\n className: \"bg-bg-primary text-text-secondary ring-border-primary\",\r\n },\r\n // Rounded (Pill) Variants - Untitled UI exact paddings\r\n {\r\n type: \"rounded\",\r\n size: \"xs\",\r\n className: [\r\n \"px-1.5\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1\",\r\n \"has-[[data-slot=badge-dot]]:pl-1\",\r\n \"has-[[data-slot=badge-avatar]]:pl-0.5\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-1\",\r\n \"has-[[data-slot=badge-close]]:pr-0.5\",\r\n ],\r\n },\r\n {\r\n type: \"rounded\",\r\n size: \"sm\",\r\n className: [\r\n \"px-2\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1.5\",\r\n \"has-[[data-slot=badge-dot]]:pl-1.5\",\r\n \"has-[[data-slot=badge-avatar]]:pl-0.75\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-1.5\",\r\n \"has-[[data-slot=badge-close]]:pr-0.75\",\r\n ],\r\n },\r\n {\r\n type: \"rounded\",\r\n size: \"md\",\r\n className: [\r\n \"px-2.5\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-2\",\r\n \"has-[[data-slot=badge-dot]]:pl-2\",\r\n \"has-[[data-slot=badge-avatar]]:pl-1\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-2\",\r\n \"has-[[data-slot=badge-close]]:pr-1\",\r\n ],\r\n },\r\n {\r\n type: \"rounded\",\r\n size: \"lg\",\r\n className: [\r\n \"px-3\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-2.5\",\r\n \"has-[[data-slot=badge-dot]]:pl-2.5\",\r\n \"has-[[data-slot=badge-avatar]]:pl-1.5\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-2.5\",\r\n \"has-[[data-slot=badge-close]]:pr-1.5\",\r\n ],\r\n },\r\n // Square & Modern Variants - Untitled UI exact paddings\r\n {\r\n type: \"square\",\r\n size: \"xs\",\r\n className: [\r\n \"px-1\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-0.75\",\r\n \"has-[[data-slot=badge-dot]]:pl-0.75\",\r\n \"has-[[data-slot=badge-avatar]]:pl-0.5\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-0.75\",\r\n \"has-[[data-slot=badge-close]]:pr-0.5\",\r\n ],\r\n },\r\n {\r\n type: \"square\",\r\n size: \"sm\",\r\n className: [\r\n \"px-1.5\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1\",\r\n \"has-[[data-slot=badge-dot]]:pl-1\",\r\n \"has-[[data-slot=badge-avatar]]:pl-1\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-1\",\r\n \"has-[[data-slot=badge-close]]:pr-0.5\",\r\n ],\r\n },\r\n {\r\n type: \"square\",\r\n size: \"md\",\r\n className: [\r\n \"px-2\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1.5\",\r\n \"has-[[data-slot=badge-dot]]:pl-1.5\",\r\n \"has-[[data-slot=badge-avatar]]:pl-1.5\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-1.5\",\r\n \"has-[[data-slot=badge-close]]:pr-0.75\",\r\n ],\r\n },\r\n {\r\n type: \"square\",\r\n size: \"lg\",\r\n className: [\r\n \"px-2.5\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-2\",\r\n \"has-[[data-slot=badge-dot]]:pl-2\",\r\n \"has-[[data-slot=badge-avatar]]:pl-2\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-2\",\r\n \"has-[[data-slot=badge-close]]:pr-1\",\r\n ],\r\n },\r\n {\r\n type: \"modern\",\r\n size: \"xs\",\r\n className: [\r\n \"px-1\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-0.75\",\r\n \"has-[[data-slot=badge-dot]]:pl-0.75\",\r\n \"has-[[data-slot=badge-avatar]]:pl-0.5\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-0.75\",\r\n \"has-[[data-slot=badge-close]]:pr-0.5\",\r\n ],\r\n },\r\n {\r\n type: \"modern\",\r\n size: \"sm\",\r\n className: [\r\n \"px-1.5\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1\",\r\n \"has-[[data-slot=badge-dot]]:pl-1\",\r\n \"has-[[data-slot=badge-avatar]]:pl-1\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-1\",\r\n \"has-[[data-slot=badge-close]]:pr-0.5\",\r\n ],\r\n },\r\n {\r\n type: \"modern\",\r\n size: \"md\",\r\n className: [\r\n \"px-2\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-1.5\",\r\n \"has-[[data-slot=badge-dot]]:pl-1.5\",\r\n \"has-[[data-slot=badge-avatar]]:pl-1.5\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-1.5\",\r\n \"has-[[data-slot=badge-close]]:pr-0.75\",\r\n ],\r\n },\r\n {\r\n type: \"modern\",\r\n size: \"lg\",\r\n className: [\r\n \"px-2.5\",\r\n \"has-[[data-slot=badge-icon]:not([data-position=trailing])]:pl-2\",\r\n \"has-[[data-slot=badge-dot]]:pl-2\",\r\n \"has-[[data-slot=badge-avatar]]:pl-2\",\r\n \"has-[[data-slot=badge-icon][data-position=trailing]]:pr-2\",\r\n \"has-[[data-slot=badge-close]]:pr-1\",\r\n ],\r\n },\r\n ],\r\n defaultVariants: {\r\n type: \"square\",\r\n color: \"gray\",\r\n size: \"md\",\r\n },\r\n }\r\n)\r\n\r\nexport interface BadgeProps\r\n extends Omit<React.ComponentProps<\"span\">, \"color\">,\r\n VariantProps<typeof badgeVariants> {\r\n}\r\n\r\nfunction Badge({\r\n className,\r\n type,\r\n color,\r\n size,\r\n render,\r\n ...props\r\n}: BadgeProps & useRender.ComponentProps<\"span\">) {\r\n const defaultProps = {\r\n \"data-slot\": \"badge\",\r\n className: cn(badgeVariants({ type, color, size }), className),\r\n }\r\n\r\n return useRender({\r\n defaultTagName: \"span\",\r\n props: mergeProps(defaultProps, props),\r\n render,\r\n state: {\r\n slot: \"badge\",\r\n type,\r\n color,\r\n size,\r\n },\r\n })\r\n}\r\n\r\nexport interface BadgeIconProps extends React.ComponentProps<\"span\"> {\r\n children?: React.ReactNode\r\n position?: \"leading\" | \"trailing\"\r\n}\r\n\r\nfunction BadgeIcon({\r\n className,\r\n position = \"leading\",\r\n children,\r\n ...props\r\n}: BadgeIconProps) {\r\n return (\r\n <span\r\n data-slot=\"badge-icon\"\r\n data-position={position}\r\n className={cn(\"inline-flex shrink-0 items-center justify-center pointer-events-none [&>svg]:size-full\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </span>\r\n )\r\n}\r\n\r\nexport interface BadgeAvatarProps extends React.ComponentProps<\"img\"> {\r\n src?: string\r\n alt?: string\r\n}\r\n\r\nfunction BadgeAvatar({\r\n className,\r\n alt = \"\",\r\n ...props\r\n}: BadgeAvatarProps) {\r\n return (\r\n <img\r\n data-slot=\"badge-avatar\"\r\n alt={alt}\r\n className={cn(\"shrink-0 rounded-xp-full object-cover\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport interface BadgeButtonProps extends useRender.ComponentProps<\"button\"> {\r\n align?: \"inline-end\" | \"inline-start\"\r\n}\r\n\r\nfunction BadgeButton({\r\n className,\r\n render,\r\n align = \"inline-end\",\r\n ...props\r\n}: BadgeButtonProps) {\r\n const defaultProps = {\r\n \"data-slot\": \"badge-close\",\r\n \"data-align\": align,\r\n className: cn(\"p-0.5 inline-flex items-center justify-center rounded-xp-full hover:opacity-75 focus-visible:outline-none shrink-0 [&>svg]:size-2.5\", className),\r\n type: \"button\" as const,\r\n children: (\r\n <XIcon />\r\n ),\r\n }\r\n\r\n return useRender({\r\n defaultTagName: \"button\",\r\n render,\r\n props: mergeProps(defaultProps, props),\r\n state: {\r\n slot: \"badge-close\",\r\n align,\r\n }\r\n })\r\n}\r\n\r\nfunction BadgeDot({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"badge-dot\"\r\n className={cn(\"size-1.5 shrink-0 rounded-xp-full bg-current\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Badge, BadgeIcon, BadgeAvatar, BadgeButton, BadgeDot, badgeVariants }\r\n"]}
@@ -1,2 +1,2 @@
1
- import {a,b,m,e,q,s,w,x,F}from'./chunk-ZZWSZRER.js';import*as r from'react';import {ChevronDownIcon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function Y(o){let{items:n,placeholder:b$1="Select",icon:I,container:R,isPending:v,className:w$1,triggerClassName:L,contentClassName:k,disabled:T,infiniteScroll:P}=o,a$1=o.multiple===true,u=r.useMemo(()=>{if(a$1)return o.value;let e=o.value;return e?[e]:[]},[a$1,o.value,o.value]),$=r.useMemo(()=>{if(a$1)return o.defaultValue??[];let e=o.defaultValue;return e?[e]:[]},[a$1,o.defaultValue,o.defaultValue]),[q$1,c]=r.useState(()=>(u!==void 0?u:$)??[]);r.useEffect(()=>{u!==void 0&&c(u);},[u]);let m$1=q$1??[],s$1=m$1.length>0,[p,z]=r.useState(""),S=r.useMemo(()=>{if(!p.trim())return n;let e=p.toLowerCase();return n?.filter(l=>l.label.toLowerCase().includes(e)||l.value.toLowerCase().includes(e))},[n,p]),A=e=>{let l=e;if(a$1)c(l),o.onValueChange?.(l);else {let x=l.length>0?l[l.length-1]:null;c(x?[x]:[]),o.onValueChange?.(x);}},B=()=>{c([]),a$1?o.onValueChange?.([]):o.onValueChange?.(null);},E=r.useMemo(()=>s$1?a$1?`${b$1} (${m$1.length})`:m$1[0]?.label??b$1:a$1?`All ${b$1}`:b$1,[s$1,a$1,b$1,m$1]);return jsxs(a,{multiple:true,items:n,value:m$1,onValueChange:A,isItemEqualToValue:(e,l)=>e.value===l.value,disabled:T,children:[jsxs(b,{className:cn("group flex h-9 w-fit max-w-[220px] items-center gap-2 rounded-xp-card-base border bg-bg-primary px-3 text-body-medium-3 transition-colors","border-border-primary text-text-secondary hover:bg-bg-primary-hover",s$1&&"border-border-brand bg-bg-brand-primary text-text-brand-secondary","disabled:pointer-events-none disabled:opacity-50","data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary",L,w$1),children:[I&&jsx("span",{className:cn("size-4 shrink-0",s$1?"text-fg-brand-primary":"text-fg-quaternary"),children:I}),jsx("span",{className:"truncate",children:E}),jsx(ChevronDownIcon,{className:cn("size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180",s$1?"text-fg-brand-primary":"text-fg-quaternary")})]}),jsx(m,{container:R,className:cn("w-72",k),align:"start",sideOffset:8,children:a$1?jsxs("div",{className:"flex flex-col",children:[jsxs("div",{className:"flex items-center justify-between px-3 py-2 border-b border-border-primary",children:[jsx("span",{className:"text-label-semibold-3 text-text-primary",children:b$1}),jsxs("button",{type:"button",disabled:!s$1,onClick:B,className:cn("text-body-medium-3 transition-colors",s$1?"cursor-pointer text-text-brand-secondary hover:text-text-brand-secondary-hover":"cursor-not-allowed text-text-disabled"),children:["Clear",s$1?` (${m$1.length})`:""]})]}),jsx(e,{value:p,onChange:e=>z(e.target.value),placeholder:`Search ${b$1.toLowerCase()}...`}),jsx(q,{status:v||n===void 0?"pending":S?.length===0?"empty":null}),jsxs(s,{children:[S?.map(e=>jsx(w,{indicator:"checkbox",value:e,children:jsx(x,{children:e.label})},e.value)),jsx(F,{...P})]})]}):jsxs(Fragment,{children:[jsx(q,{status:v||n===void 0?"pending":n?.length===0?"empty":null}),jsxs(s,{children:[n?.map(e=>jsx(w,{value:e,children:jsx(x,{children:e.label})},e.value)),jsx(F,{...P})]})]})})]})}export{Y as a};//# sourceMappingURL=chunk-FDXCGFD2.js.map
2
- //# sourceMappingURL=chunk-FDXCGFD2.js.map
1
+ import {a,b,m,e,q,s,w,x,F}from'./chunk-3VMZENNL.js';import*as r from'react';import {ChevronDownIcon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function Y(o){let{items:n,placeholder:b$1="Select",icon:I,container:R,isPending:v,className:w$1,triggerClassName:L,contentClassName:k,disabled:T,infiniteScroll:P}=o,a$1=o.multiple===true,u=r.useMemo(()=>{if(a$1)return o.value;let e=o.value;return e?[e]:[]},[a$1,o.value,o.value]),$=r.useMemo(()=>{if(a$1)return o.defaultValue??[];let e=o.defaultValue;return e?[e]:[]},[a$1,o.defaultValue,o.defaultValue]),[q$1,c]=r.useState(()=>(u!==void 0?u:$)??[]);r.useEffect(()=>{u!==void 0&&c(u);},[u]);let m$1=q$1??[],s$1=m$1.length>0,[p,z]=r.useState(""),S=r.useMemo(()=>{if(!p.trim())return n;let e=p.toLowerCase();return n?.filter(l=>l.label.toLowerCase().includes(e)||l.value.toLowerCase().includes(e))},[n,p]),A=e=>{let l=e;if(a$1)c(l),o.onValueChange?.(l);else {let x=l.length>0?l[l.length-1]:null;c(x?[x]:[]),o.onValueChange?.(x);}},B=()=>{c([]),a$1?o.onValueChange?.([]):o.onValueChange?.(null);},E=r.useMemo(()=>s$1?a$1?`${b$1} (${m$1.length})`:m$1[0]?.label??b$1:a$1?`All ${b$1}`:b$1,[s$1,a$1,b$1,m$1]);return jsxs(a,{multiple:true,items:n,value:m$1,onValueChange:A,isItemEqualToValue:(e,l)=>e.value===l.value,disabled:T,children:[jsxs(b,{className:cn("group flex h-9 w-fit max-w-[220px] items-center gap-2 rounded-xp-card-base border bg-bg-primary px-3 text-body-medium-3 transition-colors","border-border-primary text-text-secondary hover:bg-bg-primary-hover",s$1&&"border-border-brand bg-bg-brand-primary text-text-brand-secondary","disabled:pointer-events-none disabled:opacity-50","data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary",L,w$1),children:[I&&jsx("span",{className:cn("size-4 shrink-0",s$1?"text-fg-brand-primary":"text-fg-quaternary"),children:I}),jsx("span",{className:"truncate",children:E}),jsx(ChevronDownIcon,{className:cn("size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180",s$1?"text-fg-brand-primary":"text-fg-quaternary")})]}),jsx(m,{container:R,className:cn("w-72",k),align:"start",sideOffset:8,children:a$1?jsxs("div",{className:"flex flex-col",children:[jsxs("div",{className:"flex items-center justify-between px-3 py-2 border-b border-border-primary",children:[jsx("span",{className:"text-label-semibold-3 text-text-primary",children:b$1}),jsxs("button",{type:"button",disabled:!s$1,onClick:B,className:cn("text-body-medium-3 transition-colors",s$1?"cursor-pointer text-text-brand-secondary hover:text-text-brand-secondary-hover":"cursor-not-allowed text-text-disabled"),children:["Clear",s$1?` (${m$1.length})`:""]})]}),jsx(e,{value:p,onChange:e=>z(e.target.value),placeholder:`Search ${b$1.toLowerCase()}...`}),jsx(q,{status:v||n===void 0?"pending":S?.length===0?"empty":null}),jsxs(s,{children:[S?.map(e=>jsx(w,{indicator:"checkbox",value:e,children:jsx(x,{children:e.label})},e.value)),jsx(F,{...P})]})]}):jsxs(Fragment,{children:[jsx(q,{status:v||n===void 0?"pending":n?.length===0?"empty":null}),jsxs(s,{children:[n?.map(e=>jsx(w,{value:e,children:jsx(x,{children:e.label})},e.value)),jsx(F,{...P})]})]})})]})}export{Y as a};//# sourceMappingURL=chunk-M73NAM5U.js.map
2
+ //# sourceMappingURL=chunk-M73NAM5U.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/composites/filter-combobox.tsx"],"names":["FilterCombobox","props","items","placeholder","icon","container","isPending","className","triggerClassName","contentClassName","disabled","infiniteScroll","isMultiple","controlledArray","single","defaultArray","internalValue","setInternalValue","valueArray","hasValue","search","setSearch","filteredItems","q","it","handleValueChange","next","arr","handleClear","triggerLabel","jsxs","Combobox","a","b","ComboboxTrigger","cn","jsx","ChevronDownIcon","ComboboxPopup","ComboboxInput","ComboboxStatus","ComboboxList","item","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll","Fragment"],"mappings":"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","file":"chunk-FDXCGFD2.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckCircle2Icon, ChevronDownIcon, SearchIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport {\r\n ComboboxItemIndicator as ComboboxItemIndicatorPrimitive\r\n} from \"../primitives/combobox\"\r\nimport { ComboboxHighlightItem, ComboboxItem, ComboboxItemTitle } from \"../ui/combobox\"\r\nimport { Input } from \"../ui/input\"\r\nimport {\r\n Combobox,\r\n ComboboxInfiniteScroll,\r\n ComboboxInput,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxPortal,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n type ComboboxProps,\r\n} from \"../ui/combobox\"\r\n\r\n// ─── Types ───\r\n\r\nexport type FilterComboboxItem = {\r\n label: string\r\n value: string\r\n}\r\n\r\ntype BaseProps = {\r\n items: FilterComboboxItem[] | undefined\r\n placeholder?: string\r\n icon?: React.ReactNode\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n isPending?: boolean\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n disabled?: boolean\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n}\r\n\r\ntype SingleProps = BaseProps & {\r\n multiple?: false\r\n value?: FilterComboboxItem | null\r\n defaultValue?: FilterComboboxItem | null\r\n onValueChange?: (value: FilterComboboxItem | null) => void\r\n}\r\n\r\ntype MultipleProps = BaseProps & {\r\n multiple: true\r\n value?: FilterComboboxItem[]\r\n defaultValue?: FilterComboboxItem[]\r\n onValueChange?: (value: FilterComboboxItem[]) => void\r\n}\r\n\r\nexport type FilterComboboxProps = SingleProps | MultipleProps\r\n\r\n// ─── Component ───\r\n\r\nfunction FilterCombobox(props: FilterComboboxProps) {\r\n const {\r\n items,\r\n placeholder = \"Select\",\r\n icon,\r\n container,\r\n isPending,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n disabled,\r\n infiniteScroll,\r\n } = props\r\n\r\n const isMultiple = props.multiple === true\r\n\r\n // Normalize controlled value to array for internal combobox (always multiple=true internally)\r\n const controlledArray = React.useMemo(() => {\r\n if (isMultiple) {\r\n return (props as MultipleProps).value\r\n }\r\n const single = (props as SingleProps).value\r\n return single ? [single] : []\r\n }, [isMultiple, (props as SingleProps).value, (props as MultipleProps).value])\r\n\r\n const defaultArray = React.useMemo(() => {\r\n if (isMultiple) {\r\n return (props as MultipleProps).defaultValue ?? []\r\n }\r\n const single = (props as SingleProps).defaultValue\r\n return single ? [single] : []\r\n }, [isMultiple, (props as SingleProps).defaultValue, (props as MultipleProps).defaultValue])\r\n\r\n const [internalValue, setInternalValue] = React.useState<FilterComboboxItem[]>(\r\n () =>\r\n (controlledArray !== undefined\r\n ? (controlledArray as FilterComboboxItem[])\r\n : (defaultArray as FilterComboboxItem[])) ?? []\r\n )\r\n\r\n // Sync when controlled value changes externally\r\n React.useEffect(() => {\r\n if (controlledArray !== undefined) {\r\n setInternalValue(controlledArray as FilterComboboxItem[])\r\n }\r\n }, [controlledArray])\r\n\r\n const valueArray = internalValue ?? []\r\n const hasValue = valueArray.length > 0\r\n\r\n // Search for multiple variant\r\n const [search, setSearch] = React.useState(\"\")\r\n\r\n const filteredItems = React.useMemo(() => {\r\n if (!search.trim()) return items\r\n const q = search.toLowerCase()\r\n return items?.filter(\r\n (it) => it.label.toLowerCase().includes(q) || it.value.toLowerCase().includes(q)\r\n )\r\n }, [items, search])\r\n\r\n const handleValueChange: ComboboxProps<FilterComboboxItem, boolean>[\"onValueChange\"] = (\r\n next\r\n ) => {\r\n const arr = next as FilterComboboxItem[]\r\n if (isMultiple) {\r\n setInternalValue(arr)\r\n ; (props as MultipleProps).onValueChange?.(arr)\r\n } else {\r\n // single: take last selected (base-ui gives array)\r\n const single = arr.length > 0 ? arr[arr.length - 1] : null\r\n const normalized = single ? [single] : []\r\n setInternalValue(normalized)\r\n ; (props as SingleProps).onValueChange?.(single)\r\n }\r\n }\r\n\r\n const handleClear = () => {\r\n setInternalValue([])\r\n if (isMultiple) {\r\n ; (props as MultipleProps).onValueChange?.([])\r\n } else {\r\n ; (props as SingleProps).onValueChange?.(null)\r\n }\r\n }\r\n\r\n // Trigger label\r\n const triggerLabel = React.useMemo(() => {\r\n if (!hasValue) {\r\n return isMultiple ? `All ${placeholder}` : placeholder\r\n }\r\n if (isMultiple) {\r\n return `${placeholder} (${valueArray.length})`\r\n }\r\n return valueArray[0]?.label ?? placeholder\r\n }, [hasValue, isMultiple, placeholder, valueArray])\r\n\r\n return (\r\n <Combobox\r\n multiple\r\n items={items}\r\n value={valueArray}\r\n onValueChange={handleValueChange}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n \"group flex h-9 w-fit max-w-[220px] items-center gap-2 rounded-xp-card-base border bg-bg-primary px-3 text-body-medium-3 transition-colors\",\r\n \"border-border-primary text-text-secondary hover:bg-bg-primary-hover\",\r\n hasValue && \"border-border-brand bg-bg-brand-primary text-text-brand-secondary\",\r\n \"disabled:pointer-events-none disabled:opacity-50\",\r\n \"data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {icon && (\r\n <span\r\n className={cn(\r\n \"size-4 shrink-0\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n >\r\n {icon}\r\n </span>\r\n )}\r\n <span className=\"truncate\">{triggerLabel}</span>\r\n <ChevronDownIcon\r\n className={cn(\r\n \"size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup\r\n container={container}\r\n className={cn(\"w-72\", contentClassName)}\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n {isMultiple ? (\r\n <div className=\"flex flex-col\">\r\n {/* Header: title + Clear (n) */}\r\n <div className=\"flex items-center justify-between px-3 py-2 border-b border-border-primary\">\r\n <span className=\"text-label-semibold-3 text-text-primary\">{placeholder}</span>\r\n <button\r\n type=\"button\"\r\n disabled={!hasValue}\r\n onClick={handleClear}\r\n className={cn(\r\n \"text-body-medium-3 transition-colors\",\r\n hasValue\r\n ? \"cursor-pointer text-text-brand-secondary hover:text-text-brand-secondary-hover\"\r\n : \"cursor-not-allowed text-text-disabled\"\r\n )}\r\n >\r\n Clear{hasValue ? ` (${valueArray.length})` : \"\"}\r\n </button>\r\n </div>\r\n\r\n {/* Search */}\r\n <ComboboxInput\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n placeholder={`Search ${placeholder.toLowerCase()}...`}\r\n />\r\n\r\n {/* List */}\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : filteredItems?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {filteredItems?.map((item) => (\r\n <ComboboxItem indicator=\"checkbox\" key={item.value} value={item}>\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n )\r\n )}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </div>\r\n ) : (\r\n <>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem key={item.value} value={item}>\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n ))}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </>\r\n )}\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { FilterCombobox }\r\n"]}
1
+ {"version":3,"sources":["../src/composites/filter-combobox.tsx"],"names":["FilterCombobox","props","items","placeholder","icon","container","isPending","className","triggerClassName","contentClassName","disabled","infiniteScroll","isMultiple","controlledArray","single","defaultArray","internalValue","setInternalValue","valueArray","hasValue","search","setSearch","filteredItems","q","it","handleValueChange","next","arr","handleClear","triggerLabel","jsxs","Combobox","a","b","ComboboxTrigger","cn","jsx","ChevronDownIcon","ComboboxPopup","ComboboxInput","ComboboxStatus","ComboboxList","item","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll","Fragment"],"mappings":"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","file":"chunk-M73NAM5U.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckCircle2Icon, ChevronDownIcon, SearchIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport {\r\n ComboboxItemIndicator as ComboboxItemIndicatorPrimitive\r\n} from \"../primitives/combobox\"\r\nimport { ComboboxHighlightItem, ComboboxItem, ComboboxItemTitle } from \"../ui/combobox\"\r\nimport { Input } from \"../ui/input\"\r\nimport {\r\n Combobox,\r\n ComboboxInfiniteScroll,\r\n ComboboxInput,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxPortal,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n type ComboboxProps,\r\n} from \"../ui/combobox\"\r\n\r\n// ─── Types ───\r\n\r\nexport type FilterComboboxItem = {\r\n label: string\r\n value: string\r\n}\r\n\r\ntype BaseProps = {\r\n items: FilterComboboxItem[] | undefined\r\n placeholder?: string\r\n icon?: React.ReactNode\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n isPending?: boolean\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n disabled?: boolean\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n}\r\n\r\ntype SingleProps = BaseProps & {\r\n multiple?: false\r\n value?: FilterComboboxItem | null\r\n defaultValue?: FilterComboboxItem | null\r\n onValueChange?: (value: FilterComboboxItem | null) => void\r\n}\r\n\r\ntype MultipleProps = BaseProps & {\r\n multiple: true\r\n value?: FilterComboboxItem[]\r\n defaultValue?: FilterComboboxItem[]\r\n onValueChange?: (value: FilterComboboxItem[]) => void\r\n}\r\n\r\nexport type FilterComboboxProps = SingleProps | MultipleProps\r\n\r\n// ─── Component ───\r\n\r\nfunction FilterCombobox(props: FilterComboboxProps) {\r\n const {\r\n items,\r\n placeholder = \"Select\",\r\n icon,\r\n container,\r\n isPending,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n disabled,\r\n infiniteScroll,\r\n } = props\r\n\r\n const isMultiple = props.multiple === true\r\n\r\n // Normalize controlled value to array for internal combobox (always multiple=true internally)\r\n const controlledArray = React.useMemo(() => {\r\n if (isMultiple) {\r\n return (props as MultipleProps).value\r\n }\r\n const single = (props as SingleProps).value\r\n return single ? [single] : []\r\n }, [isMultiple, (props as SingleProps).value, (props as MultipleProps).value])\r\n\r\n const defaultArray = React.useMemo(() => {\r\n if (isMultiple) {\r\n return (props as MultipleProps).defaultValue ?? []\r\n }\r\n const single = (props as SingleProps).defaultValue\r\n return single ? [single] : []\r\n }, [isMultiple, (props as SingleProps).defaultValue, (props as MultipleProps).defaultValue])\r\n\r\n const [internalValue, setInternalValue] = React.useState<FilterComboboxItem[]>(\r\n () =>\r\n (controlledArray !== undefined\r\n ? (controlledArray as FilterComboboxItem[])\r\n : (defaultArray as FilterComboboxItem[])) ?? []\r\n )\r\n\r\n // Sync when controlled value changes externally\r\n React.useEffect(() => {\r\n if (controlledArray !== undefined) {\r\n setInternalValue(controlledArray as FilterComboboxItem[])\r\n }\r\n }, [controlledArray])\r\n\r\n const valueArray = internalValue ?? []\r\n const hasValue = valueArray.length > 0\r\n\r\n // Search for multiple variant\r\n const [search, setSearch] = React.useState(\"\")\r\n\r\n const filteredItems = React.useMemo(() => {\r\n if (!search.trim()) return items\r\n const q = search.toLowerCase()\r\n return items?.filter(\r\n (it) => it.label.toLowerCase().includes(q) || it.value.toLowerCase().includes(q)\r\n )\r\n }, [items, search])\r\n\r\n const handleValueChange: ComboboxProps<FilterComboboxItem, boolean>[\"onValueChange\"] = (\r\n next\r\n ) => {\r\n const arr = next as FilterComboboxItem[]\r\n if (isMultiple) {\r\n setInternalValue(arr)\r\n ; (props as MultipleProps).onValueChange?.(arr)\r\n } else {\r\n // single: take last selected (base-ui gives array)\r\n const single = arr.length > 0 ? arr[arr.length - 1] : null\r\n const normalized = single ? [single] : []\r\n setInternalValue(normalized)\r\n ; (props as SingleProps).onValueChange?.(single)\r\n }\r\n }\r\n\r\n const handleClear = () => {\r\n setInternalValue([])\r\n if (isMultiple) {\r\n ; (props as MultipleProps).onValueChange?.([])\r\n } else {\r\n ; (props as SingleProps).onValueChange?.(null)\r\n }\r\n }\r\n\r\n // Trigger label\r\n const triggerLabel = React.useMemo(() => {\r\n if (!hasValue) {\r\n return isMultiple ? `All ${placeholder}` : placeholder\r\n }\r\n if (isMultiple) {\r\n return `${placeholder} (${valueArray.length})`\r\n }\r\n return valueArray[0]?.label ?? placeholder\r\n }, [hasValue, isMultiple, placeholder, valueArray])\r\n\r\n return (\r\n <Combobox\r\n multiple\r\n items={items}\r\n value={valueArray}\r\n onValueChange={handleValueChange}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n \"group flex h-9 w-fit max-w-[220px] items-center gap-2 rounded-xp-card-base border bg-bg-primary px-3 text-body-medium-3 transition-colors\",\r\n \"border-border-primary text-text-secondary hover:bg-bg-primary-hover\",\r\n hasValue && \"border-border-brand bg-bg-brand-primary text-text-brand-secondary\",\r\n \"disabled:pointer-events-none disabled:opacity-50\",\r\n \"data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {icon && (\r\n <span\r\n className={cn(\r\n \"size-4 shrink-0\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n >\r\n {icon}\r\n </span>\r\n )}\r\n <span className=\"truncate\">{triggerLabel}</span>\r\n <ChevronDownIcon\r\n className={cn(\r\n \"size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup\r\n container={container}\r\n className={cn(\"w-72\", contentClassName)}\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n {isMultiple ? (\r\n <div className=\"flex flex-col\">\r\n {/* Header: title + Clear (n) */}\r\n <div className=\"flex items-center justify-between px-3 py-2 border-b border-border-primary\">\r\n <span className=\"text-label-semibold-3 text-text-primary\">{placeholder}</span>\r\n <button\r\n type=\"button\"\r\n disabled={!hasValue}\r\n onClick={handleClear}\r\n className={cn(\r\n \"text-body-medium-3 transition-colors\",\r\n hasValue\r\n ? \"cursor-pointer text-text-brand-secondary hover:text-text-brand-secondary-hover\"\r\n : \"cursor-not-allowed text-text-disabled\"\r\n )}\r\n >\r\n Clear{hasValue ? ` (${valueArray.length})` : \"\"}\r\n </button>\r\n </div>\r\n\r\n {/* Search */}\r\n <ComboboxInput\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n placeholder={`Search ${placeholder.toLowerCase()}...`}\r\n />\r\n\r\n {/* List */}\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : filteredItems?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {filteredItems?.map((item) => (\r\n <ComboboxItem indicator=\"checkbox\" key={item.value} value={item}>\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n )\r\n )}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </div>\r\n ) : (\r\n <>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem key={item.value} value={item}>\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n ))}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </>\r\n )}\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { FilterCombobox }\r\n"]}
@@ -1,2 +1,2 @@
1
- import {a,b,c,d,e}from'./chunk-P2DJG2OD.js';import {a as a$3}from'./chunk-5ETIHFSE.js';import {a as a$2}from'./chunk-XJTOYNCA.js';import {a as a$1}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 A({className:t,...o}){return jsx("div",{className:"relative w-full overflow-x-auto rounded-xl border border-border-primary bg-bg-primary","data-slot":"table-container",children:jsx("table",{className:cn("w-full caption-bottom text-body-regular-2",t),"data-slot":"table",...o})})}function j({className:t,...o}){return jsx("thead",{className:cn("bg-bg-secondary [&_tr]:border-border-tertiary",t),"data-slot":"table-header",...o})}function q({className:t,...o}){return jsx("tbody",{className:cn("[&_tr:last-child]:border-0",t),"data-slot":"table-body",...o})}function B({className:t,...o}){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",...o})}function D({className:t,...o}){return jsx("tr",{className:cn("border-b border-border-secondary transition-colors hover:bg-bg-secondary data-[state=selected]:bg-bg-brand-primary/40",t),"data-slot":"table-row",...o})}function O({className:t,align:o,variant:c$1="string",tooltip:n,sortable:a$4,sortDirection:p,onSort:b$1,children:C,...R}){let s=o||(c$1==="number"?"end":"start"),i=!!(n||a$4),w=s==="end",m=n?jsxs(a,{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,{children:jsx(d,{side:"top",children:jsx(e,{children:n})})})]}):null,u=a$4?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$1,{size:12}):p==="desc"?jsx(a$2,{size:12}):jsx(a$3,{size:12})}):null,d$1=jsx("span",{className:cn("truncate",a$4&&"cursor-pointer select-none"),onClick:a$4?b$1:void 0,children:C});return jsx("th",{className:cn("text-label-bold-3 text-text-tertiary h-10 px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",!i&&s==="end"&&"text-right",!i&&s==="start"&&"text-left",!i&&s==="center"&&"text-center",t),"data-slot":"table-head",...R,children:i?jsx("div",{className:"flex w-full items-center justify-between gap-2",children:w?jsxs(Fragment,{children:[jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[m,u]}),jsx("div",{className:"flex items-center shrink-0 justify-end",children:d$1})]}):jsxs(Fragment,{children:[d$1,jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[m,u]})]})}):d$1})}function _({className:t,align:o,variant:c="string",...n}){let a=o||(c==="number"?"end":"start");return jsx("td",{className:cn("text-text-primary px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",a==="end"&&"text-right",a==="start"&&"text-left",a==="center"&&"text-center",t),"data-slot":"table-cell",...n})}function F({className:t,...o}){return jsx("caption",{className:cn("text-text-secondary mt-4 text-body-regular-2",t),"data-slot":"table-caption",...o})}export{A as a,j as b,q as c,B as d,D as e,O as f,_ as g,F as h};//# sourceMappingURL=chunk-RSLKHDFJ.js.map
2
- //# sourceMappingURL=chunk-RSLKHDFJ.js.map
1
+ import {a,b,c,d,e}from'./chunk-COJ4DWGS.js';import {a as a$3}from'./chunk-5ETIHFSE.js';import {a as a$2}from'./chunk-XJTOYNCA.js';import {a as a$1}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 A({className:t,...o}){return jsx("div",{className:"relative w-full overflow-x-auto rounded-xl border border-border-primary bg-bg-primary","data-slot":"table-container",children:jsx("table",{className:cn("w-full caption-bottom text-body-regular-2",t),"data-slot":"table",...o})})}function j({className:t,...o}){return jsx("thead",{className:cn("bg-bg-secondary [&_tr]:border-border-tertiary",t),"data-slot":"table-header",...o})}function q({className:t,...o}){return jsx("tbody",{className:cn("[&_tr:last-child]:border-0",t),"data-slot":"table-body",...o})}function B({className:t,...o}){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",...o})}function D({className:t,...o}){return jsx("tr",{className:cn("border-b border-border-secondary transition-colors hover:bg-bg-secondary data-[state=selected]:bg-bg-brand-primary/40",t),"data-slot":"table-row",...o})}function O({className:t,align:o,variant:c$1="string",tooltip:n,sortable:a$4,sortDirection:p,onSort:b$1,children:C,...R}){let s=o||(c$1==="number"?"end":"start"),i=!!(n||a$4),w=s==="end",m=n?jsxs(a,{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,{children:jsx(d,{side:"top",children:jsx(e,{children:n})})})]}):null,u=a$4?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$1,{size:12}):p==="desc"?jsx(a$2,{size:12}):jsx(a$3,{size:12})}):null,d$1=jsx("span",{className:cn("truncate",a$4&&"cursor-pointer select-none"),onClick:a$4?b$1:void 0,children:C});return jsx("th",{className:cn("text-label-bold-3 text-text-tertiary h-10 px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",!i&&s==="end"&&"text-right",!i&&s==="start"&&"text-left",!i&&s==="center"&&"text-center",t),"data-slot":"table-head",...R,children:i?jsx("div",{className:"flex w-full items-center justify-between gap-2",children:w?jsxs(Fragment,{children:[jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[m,u]}),jsx("div",{className:"flex items-center shrink-0 justify-end",children:d$1})]}):jsxs(Fragment,{children:[d$1,jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[m,u]})]})}):d$1})}function _({className:t,align:o,variant:c="string",...n}){let a=o||(c==="number"?"end":"start");return jsx("td",{className:cn("text-text-primary px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",a==="end"&&"text-right",a==="start"&&"text-left",a==="center"&&"text-center",t),"data-slot":"table-cell",...n})}function F({className:t,...o}){return jsx("caption",{className:cn("text-text-secondary mt-4 text-body-regular-2",t),"data-slot":"table-caption",...o})}export{A as a,j as b,q as c,B as d,D as e,O as f,_ as g,F as h};//# sourceMappingURL=chunk-NBRMYO6B.js.map
2
+ //# sourceMappingURL=chunk-NBRMYO6B.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/table.tsx"],"names":["Table","className","props","jsx","cn","TableHeader","TableBody","TableFooter","TableRow","TableHead","align","variant","tooltip","sortable","sortDirection","onSort","children","effectiveAlign","hasControls","isEnd","tooltipElement","jsxs","Tooltip","TooltipTrigger","InfoIcon","TooltipPortal","TooltipPositioner","TooltipPopup","sortElement","sort_ascending_icon_default","sort_descending_icon_default","sort_default_icon_default","titleElement","Fragment","TableCell","TableCaption"],"mappings":"kTAaA,SAASA,CAAAA,CAAM,CAAE,SAAA,CAAAC,CAAAA,CAAW,GAAGC,CAAM,EAAkC,CACrE,OACEC,IAAC,KAAA,CAAA,CACC,SAAA,CAAU,wFACV,WAAA,CAAU,iBAAA,CAEV,QAAA,CAAAA,GAAAA,CAAC,OAAA,CAAA,CACC,SAAA,CAAWC,GAAG,2CAAA,CAA6CH,CAAS,EACpE,WAAA,CAAU,OAAA,CACT,GAAGC,CAAAA,CACN,CAAA,CACF,CAEJ,CAEA,SAASG,CAAAA,CAAY,CAAE,SAAA,CAAAJ,CAAAA,CAAW,GAAGC,CAAM,CAAA,CAAkC,CAC3E,OACEC,GAAAA,CAAC,OAAA,CAAA,CACC,SAAA,CAAWC,EAAAA,CACT,+CAAA,CACAH,CACF,CAAA,CACA,WAAA,CAAU,eACT,GAAGC,CAAAA,CACN,CAEJ,CAEA,SAASI,CAAAA,CAAU,CAAE,SAAA,CAAAL,CAAAA,CAAW,GAAGC,CAAM,CAAA,CAAkC,CACzE,OACEC,GAAAA,CAAC,SACC,SAAA,CAAWC,EAAAA,CAAG,4BAAA,CAA8BH,CAAS,CAAA,CACrD,WAAA,CAAU,aACT,GAAGC,CAAAA,CACN,CAEJ,CAEA,SAASK,EAAY,CAAE,SAAA,CAAAN,CAAAA,CAAW,GAAGC,CAAM,CAAA,CAAkC,CAC3E,OACEC,GAAAA,CAAC,SACC,SAAA,CAAWC,EAAAA,CACT,oFACAH,CACF,CAAA,CACA,WAAA,CAAU,cAAA,CACT,GAAGC,CAAAA,CACN,CAEJ,CAEA,SAASM,EAAS,CAAE,SAAA,CAAAP,EAAW,GAAGC,CAAM,CAAA,CAA+B,CACrE,OACEC,GAAAA,CAAC,MACC,SAAA,CAAWC,EAAAA,CACT,wHACAH,CACF,CAAA,CACA,YAAU,WAAA,CACT,GAAGC,CAAAA,CACN,CAEJ,CAWA,SAASO,EAAU,CACjB,SAAA,CAAAR,EACA,KAAA,CAAAS,CAAAA,CACA,QAAAC,GAAAA,CAAU,QAAA,CACV,OAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,GAAAA,CACA,cAAAC,CAAAA,CACA,MAAA,CAAAC,IACA,QAAA,CAAAC,CAAAA,CACA,GAAGd,CACL,CAAA,CAAmB,CACjB,IAAMe,CAAAA,CAAiBP,CAAAA,GAAUC,MAAY,QAAA,CAAW,KAAA,CAAQ,SAC1DO,CAAAA,CAAc,CAAA,EAAQN,GAAWC,GAAAA,CAAAA,CACjCM,CAAAA,CAAQF,CAAAA,GAAmB,KAAA,CAE3BG,CAAAA,CAAiBR,CAAAA,CACrBS,KAACC,CAAAA,CAAA,CACC,UAAAnB,GAAAA,CAACoB,CAAAA,CAAA,CACC,MAAA,CACEpB,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,SAAA,CAAU,qFACZ,CAAA,CAGF,QAAA,CAAAA,GAAAA,CAACqB,QAAAA,CAAA,CAAS,SAAA,CAAU,WAAW,CAAA,CACjC,CAAA,CACArB,GAAAA,CAACsB,CAAAA,CAAA,CACC,QAAA,CAAAtB,IAACuB,CAAAA,CAAA,CAAkB,KAAK,KAAA,CACtB,QAAA,CAAAvB,IAACwB,CAAAA,CAAA,CAAc,QAAA,CAAAf,CAAAA,CAAQ,CAAA,CACzB,CAAA,CACF,GACF,CAAA,CACE,IAAA,CAEEgB,EAAcf,GAAAA,CAClBV,GAAAA,CAAC,UACC,IAAA,CAAK,QAAA,CACL,OAAA,CAASY,GAAAA,CACT,SAAA,CAAU,wFAAA,CACV,aAAW,aAAA,CAEV,QAAA,CAAAD,IAAkB,KAAA,CACjBX,GAAAA,CAAC0B,IAAA,CAAkB,IAAA,CAAM,EAAA,CAAI,CAAA,CAC3Bf,CAAAA,GAAkB,MAAA,CACpBX,IAAC2B,GAAAA,CAAA,CAAmB,KAAM,EAAA,CAAI,CAAA,CAE9B3B,IAAC4B,GAAAA,CAAA,CAAgB,IAAA,CAAM,EAAA,CAAI,CAAA,CAE/B,CAAA,CACE,KAEEC,GAAAA,CACJ7B,GAAAA,CAAC,QACC,SAAA,CAAWC,EAAAA,CAAG,WAAYS,GAAAA,EAAY,4BAA4B,CAAA,CAClE,OAAA,CAASA,GAAAA,CAAWE,GAAAA,CAAS,OAE5B,QAAA,CAAAC,CAAAA,CACH,EAGF,OACEb,GAAAA,CAAC,MACC,SAAA,CAAWC,EAAAA,CACT,kHAAA,CACA,CAACc,CAAAA,EAAeD,CAAAA,GAAmB,OAAS,YAAA,CAC5C,CAACC,GAAeD,CAAAA,GAAmB,OAAA,EAAW,YAC9C,CAACC,CAAAA,EAAeD,CAAAA,GAAmB,QAAA,EAAY,aAAA,CAC/ChB,CACF,EACA,WAAA,CAAU,YAAA,CACT,GAAGC,CAAAA,CAEH,QAAA,CAAAgB,EACCf,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gDAAA,CACZ,QAAA,CAAAgB,CAAAA,CACCE,KAAAY,QAAAA,CAAA,CACE,UAAAZ,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,oCAAA,CACZ,QAAA,CAAA,CAAAD,CAAAA,CACAQ,CAAAA,CAAAA,CACH,CAAA,CACAzB,GAAAA,CAAC,OAAI,SAAA,CAAU,wCAAA,CACZ,SAAA6B,GAAAA,CACH,CAAA,CAAA,CACF,EAEAX,IAAAA,CAAAY,QAAAA,CAAA,CACG,QAAA,CAAA,CAAAD,GAAAA,CACDX,IAAAA,CAAC,OAAI,SAAA,CAAU,oCAAA,CACZ,UAAAD,CAAAA,CACAQ,CAAAA,CAAAA,CACH,GACF,CAAA,CAEJ,CAAA,CAEAI,GAAAA,CAEJ,CAEJ,CAOA,SAASE,EAAU,CACjB,SAAA,CAAAjC,EACA,KAAA,CAAAS,CAAAA,CACA,QAAAC,CAAAA,CAAU,QAAA,CACV,GAAGT,CACL,CAAA,CAAmB,CACjB,IAAMe,CAAAA,CAAiBP,CAAAA,GAAUC,IAAY,QAAA,CAAW,KAAA,CAAQ,SAEhE,OACER,GAAAA,CAAC,IAAA,CAAA,CACC,SAAA,CAAWC,EAAAA,CACT,0FAAA,CACAa,IAAmB,KAAA,EAAS,YAAA,CAC5BA,IAAmB,OAAA,EAAW,WAAA,CAC9BA,IAAmB,QAAA,EAAY,aAAA,CAC/BhB,CACF,CAAA,CACA,WAAA,CAAU,YAAA,CACT,GAAGC,CAAAA,CACN,CAEJ,CAEA,SAASiC,CAAAA,CAAa,CACpB,SAAA,CAAAlC,CAAAA,CACA,GAAGC,CACL,CAAA,CAAoC,CAClC,OACEC,GAAAA,CAAC,SAAA,CAAA,CACC,SAAA,CAAWC,EAAAA,CAAG,8CAAA,CAAgDH,CAAS,EACvE,WAAA,CAAU,eAAA,CACT,GAAGC,CAAAA,CACN,CAEJ","file":"chunk-RSLKHDFJ.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 TooltipPortal,\r\n TooltipPositioner,\r\n TooltipTrigger,\r\n} from \"./tooltip\"\r\n\r\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\r\n return (\r\n <div\r\n className=\"relative w-full overflow-x-auto rounded-xl border border-border-primary bg-bg-primary\"\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 </div>\r\n )\r\n}\r\n\r\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\r\n return (\r\n <thead\r\n className={cn(\r\n \"bg-bg-secondary [&_tr]:border-border-tertiary\",\r\n className\r\n )}\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]:border-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 \"border-b border-border-secondary 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 <TooltipPortal>\r\n <TooltipPositioner side=\"top\">\r\n <TooltipPopup>{tooltip}</TooltipPopup>\r\n </TooltipPositioner>\r\n </TooltipPortal>\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 \"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 \"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}"]}
1
+ {"version":3,"sources":["../src/ui/table.tsx"],"names":["Table","className","props","jsx","cn","TableHeader","TableBody","TableFooter","TableRow","TableHead","align","variant","tooltip","sortable","sortDirection","onSort","children","effectiveAlign","hasControls","isEnd","tooltipElement","jsxs","Tooltip","TooltipTrigger","InfoIcon","TooltipPortal","TooltipPositioner","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-NBRMYO6B.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 TooltipPortal,\r\n TooltipPositioner,\r\n TooltipTrigger,\r\n} from \"./tooltip\"\r\n\r\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\r\n return (\r\n <div\r\n className=\"relative w-full overflow-x-auto rounded-xl border border-border-primary bg-bg-primary\"\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 </div>\r\n )\r\n}\r\n\r\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\r\n return (\r\n <thead\r\n className={cn(\r\n \"bg-bg-secondary [&_tr]:border-border-tertiary\",\r\n className\r\n )}\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]:border-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 \"border-b border-border-secondary 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 <TooltipPortal>\r\n <TooltipPositioner side=\"top\">\r\n <TooltipPopup>{tooltip}</TooltipPopup>\r\n </TooltipPositioner>\r\n </TooltipPortal>\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 \"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 \"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}"]}
@@ -0,0 +1,2 @@
1
+ import*as i from'react';import {mergeProps}from'@base-ui/react/merge-props';import {useRender}from'@base-ui/react/use-render';import {cva}from'class-variance-authority';import {ArrowRightIcon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsx}from'react/jsx-runtime';var u=cva("inline-flex items-center size-max whitespace-nowrap shrink-0 overflow-hidden transition-colors cursor-pointer group/badge-group gap-2",{variants:{theme:{light:"rounded-xp-full ring-1 ring-inset",modern:"rounded-xp-card-base-md bg-bg-primary text-text-secondary ring-1 ring-inset ring-border-primary shadow-xp-xs hover:bg-bg-secondary"},color:{brand:"",gray:"",error:"",warning:"",success:""},size:{md:"text-body-medium-3",lg:"text-body-medium-2"},align:{leading:"",trailing:""}},compoundVariants:[{theme:"light",color:"brand",className:"bg-utility-brand-50 text-utility-brand-700 ring-utility-brand-200 hover:bg-utility-brand-100"},{theme:"light",color:"gray",className:"bg-utility-gray-50 text-utility-gray-700 ring-utility-gray-200 hover:bg-utility-gray-100"},{theme:"light",color:"error",className:"bg-utility-error-50 text-utility-error-700 ring-utility-error-200 hover:bg-utility-error-100"},{theme:"light",color:"warning",className:"bg-utility-warning-50 text-utility-warning-700 ring-utility-warning-200 hover:bg-utility-warning-100"},{theme:"light",color:"success",className:"bg-utility-success-50 text-utility-success-700 ring-utility-success-200 hover:bg-utility-success-100"},{align:"leading",size:"md",className:"py-1 pl-1 pr-2"},{align:"leading",size:"lg",className:"py-1 pl-1 pr-2.5"},{align:"trailing",size:"md",className:"py-1 pl-2 pr-1"},{align:"trailing",size:"lg",className:"py-1 pl-2.5 pr-1"}],defaultVariants:{theme:"light",color:"brand",size:"md",align:"leading"}}),d=i.createContext({theme:"light",color:"brand",size:"md"});function f({className:a,theme:e="light",color:t="brand",size:r="md",align:o="leading",render:s,children:p,...l}){let c={"data-slot":"badge-group","data-theme":e,"data-color":t,"data-size":r,"data-align":o,className:cn(u({theme:e,color:t,size:r,align:o}),a),children:p};return jsx(d.Provider,{value:{theme:e??"light",color:t??"brand",size:r??"md"},children:useRender({defaultTagName:"div",props:mergeProps(c,l),render:s,state:{slot:"badge-group",theme:e,color:t,size:r,align:o}})})}function h({className:a,children:e,...t}){let{theme:r,color:o,size:s}=i.useContext(d),p={brand:"ring-utility-brand-200 text-utility-brand-700",gray:"ring-utility-gray-200 text-utility-gray-700",error:"ring-utility-error-200 text-utility-error-700",warning:"ring-utility-warning-200 text-utility-warning-700",success:"ring-utility-success-200 text-utility-success-700"},l=cn("inline-flex items-center justify-center font-medium shrink-0",r==="light"&&["rounded-xp-full bg-bg-primary ring-1 ring-inset",p[o]||p.brand,s==="md"?"px-2 py-0.5":"px-2.5 py-0.5"],r==="modern"&&["rounded-xp-card-base-sm bg-bg-primary shadow-xp-xs ring-1 ring-inset ring-border-primary text-text-secondary",s==="md"?"gap-1 px-1.5 py-0.5":"gap-1.5 px-2 py-0.5"],a);return jsx("span",{"data-slot":"badge-group-addon",className:l,...t,children:e})}function P({className:a,children:e=jsx(ArrowRightIcon,{}),...t}){let{color:r}=i.useContext(d),o={brand:"text-utility-brand-500",gray:"text-utility-gray-500",error:"text-utility-error-500",warning:"text-utility-warning-500",success:"text-utility-success-500"};return jsx("span",{"data-slot":"badge-group-icon",className:cn("inline-flex items-center justify-center shrink-0 [&>svg]:size-4 [&>svg]:stroke-[2px] pointer-events-none transition-transform group-hover/badge-group:translate-x-0.5",o[r]||o.brand,a),...t,children:e})}function B({className:a,...e}){let{color:t}=i.useContext(d),r={brand:"bg-utility-brand-500 outline-utility-brand-100",gray:"bg-utility-gray-500 outline-utility-gray-100",error:"bg-utility-error-500 outline-utility-error-100",warning:"bg-utility-warning-500 outline-utility-warning-100",success:"bg-utility-success-500 outline-utility-success-100"};return jsx("span",{"data-slot":"badge-group-dot",className:cn("inline-block size-1.5 shrink-0 rounded-xp-full outline-2 -outline-offset-1",r[t]||r.brand,a),...e})}export{u as a,f as b,h as c,P as d,B as e};//# sourceMappingURL=chunk-PU426AFH.js.map
2
+ //# sourceMappingURL=chunk-PU426AFH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/badge-group.tsx"],"names":["badgeGroupVariants","cva","badgeGroupContext","BadgeGroup","className","theme","color","size","align","render","children","props","defaultProps","cn","jsx","useRender","mergeProps","BadgeGroupAddon","colorAddonMap","addonClasses","BadgeGroupIcon","ArrowRightIcon","iconColorMap","BadgeGroupDot","dotColorMap"],"mappings":"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","file":"chunk-PU426AFH.js","sourcesContent":["import * as React from \"react\"\r\n\r\nimport { mergeProps } from \"@base-ui/react/merge-props\"\r\nimport { useRender } from \"@base-ui/react/use-render\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { ArrowRightIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\n\r\nconst badgeGroupVariants = cva(\r\n \"inline-flex items-center size-max whitespace-nowrap shrink-0 overflow-hidden transition-colors cursor-pointer group/badge-group gap-2\",\r\n {\r\n variants: {\r\n theme: {\r\n light: \"rounded-xp-full ring-1 ring-inset\",\r\n modern: \"rounded-xp-card-base-md bg-bg-primary text-text-secondary ring-1 ring-inset ring-border-primary shadow-xp-xs hover:bg-bg-secondary\",\r\n },\r\n color: {\r\n brand: \"\",\r\n gray: \"\",\r\n error: \"\",\r\n warning: \"\",\r\n success: \"\",\r\n },\r\n size: {\r\n md: \"text-body-medium-3\",\r\n lg: \"text-body-medium-2\",\r\n },\r\n align: {\r\n leading: \"\",\r\n trailing: \"\",\r\n },\r\n },\r\n compoundVariants: [\r\n // Light theme colors\r\n {\r\n theme: \"light\",\r\n color: \"brand\",\r\n className: \"bg-utility-brand-50 text-utility-brand-700 ring-utility-brand-200 hover:bg-utility-brand-100\",\r\n },\r\n {\r\n theme: \"light\",\r\n color: \"gray\",\r\n className: \"bg-utility-gray-50 text-utility-gray-700 ring-utility-gray-200 hover:bg-utility-gray-100\",\r\n },\r\n {\r\n theme: \"light\",\r\n color: \"error\",\r\n className: \"bg-utility-error-50 text-utility-error-700 ring-utility-error-200 hover:bg-utility-error-100\",\r\n },\r\n {\r\n theme: \"light\",\r\n color: \"warning\",\r\n className: \"bg-utility-warning-50 text-utility-warning-700 ring-utility-warning-200 hover:bg-utility-warning-100\",\r\n },\r\n {\r\n theme: \"light\",\r\n color: \"success\",\r\n className: \"bg-utility-success-50 text-utility-success-700 ring-utility-success-200 hover:bg-utility-success-100\",\r\n },\r\n\r\n // Size & Align combinations (Root padding matching exact Figma values)\r\n // Leading: Addon on the left\r\n {\r\n align: \"leading\",\r\n size: \"md\",\r\n className: \"py-1 pl-1 pr-2\",\r\n },\r\n {\r\n align: \"leading\",\r\n size: \"lg\",\r\n className: \"py-1 pl-1 pr-2.5\",\r\n },\r\n // Trailing: Addon on the right\r\n {\r\n align: \"trailing\",\r\n size: \"md\",\r\n className: \"py-1 pl-2 pr-1\",\r\n },\r\n {\r\n align: \"trailing\",\r\n size: \"lg\",\r\n className: \"py-1 pl-2.5 pr-1\",\r\n },\r\n ],\r\n defaultVariants: {\r\n theme: \"light\",\r\n color: \"brand\",\r\n size: \"md\",\r\n align: \"leading\",\r\n },\r\n }\r\n)\r\n\r\nconst badgeGroupContext = React.createContext<{\r\n theme: \"light\" | \"modern\"\r\n color: \"brand\" | \"gray\" | \"error\" | \"warning\" | \"success\"\r\n size: \"md\" | \"lg\"\r\n}>({\r\n theme: \"light\",\r\n color: \"brand\",\r\n size: \"md\",\r\n})\r\n\r\nexport interface BadgeGroupProps\r\n extends Omit<React.ComponentProps<\"div\">, \"color\">,\r\n VariantProps<typeof badgeGroupVariants> {\r\n}\r\n\r\nfunction BadgeGroup({\r\n className,\r\n theme = \"light\",\r\n color = \"brand\",\r\n size = \"md\",\r\n align = \"leading\",\r\n render,\r\n children,\r\n ...props\r\n}: BadgeGroupProps & useRender.ComponentProps<\"div\">) {\r\n const defaultProps = {\r\n \"data-slot\": \"badge-group\",\r\n \"data-theme\": theme,\r\n \"data-color\": color,\r\n \"data-size\": size,\r\n \"data-align\": align,\r\n className: cn(badgeGroupVariants({ theme, color, size, align }), className),\r\n children,\r\n }\r\n\r\n return (\r\n <badgeGroupContext.Provider value={{ theme: theme ?? \"light\", color: color ?? \"brand\", size: size ?? \"md\" }}>\r\n {useRender({\r\n defaultTagName: \"div\",\r\n props: mergeProps(defaultProps, props),\r\n render,\r\n state: {\r\n slot: \"badge-group\",\r\n theme,\r\n color,\r\n size,\r\n align,\r\n },\r\n })}\r\n </badgeGroupContext.Provider>\r\n )\r\n}\r\n\r\nexport interface BadgeGroupAddonProps extends React.ComponentProps<\"span\"> {\r\n children?: React.ReactNode\r\n}\r\n\r\nfunction BadgeGroupAddon({\r\n className,\r\n children,\r\n ...props\r\n}: BadgeGroupAddonProps) {\r\n const { theme, color, size } = React.useContext(badgeGroupContext)\r\n\r\n const colorAddonMap: Record<string, string> = {\r\n brand: \"ring-utility-brand-200 text-utility-brand-700\",\r\n gray: \"ring-utility-gray-200 text-utility-gray-700\",\r\n error: \"ring-utility-error-200 text-utility-error-700\",\r\n warning: \"ring-utility-warning-200 text-utility-warning-700\",\r\n success: \"ring-utility-success-200 text-utility-success-700\",\r\n }\r\n\r\n const addonClasses = cn(\r\n \"inline-flex items-center justify-center font-medium shrink-0\",\r\n theme === \"light\" && [\r\n \"rounded-xp-full bg-bg-primary ring-1 ring-inset\",\r\n colorAddonMap[color] || colorAddonMap.brand,\r\n size === \"md\" ? \"px-2 py-0.5\" : \"px-2.5 py-0.5\",\r\n ],\r\n theme === \"modern\" && [\r\n \"rounded-xp-card-base-sm bg-bg-primary shadow-xp-xs ring-1 ring-inset ring-border-primary text-text-secondary\",\r\n size === \"md\" ? \"gap-1 px-1.5 py-0.5\" : \"gap-1.5 px-2 py-0.5\",\r\n ],\r\n className\r\n )\r\n\r\n return (\r\n <span data-slot=\"badge-group-addon\" className={addonClasses} {...props}>\r\n {children}\r\n </span>\r\n )\r\n}\r\n\r\nexport interface BadgeGroupIconProps extends React.ComponentProps<\"span\"> {\r\n children?: React.ReactNode\r\n}\r\n\r\nfunction BadgeGroupIcon({\r\n className,\r\n children = <ArrowRightIcon />,\r\n ...props\r\n}: BadgeGroupIconProps) {\r\n const { color } = React.useContext(badgeGroupContext)\r\n\r\n const iconColorMap: Record<string, string> = {\r\n brand: \"text-utility-brand-500\",\r\n gray: \"text-utility-gray-500\",\r\n error: \"text-utility-error-500\",\r\n warning: \"text-utility-warning-500\",\r\n success: \"text-utility-success-500\",\r\n }\r\n\r\n return (\r\n <span\r\n data-slot=\"badge-group-icon\"\r\n className={cn(\r\n \"inline-flex items-center justify-center shrink-0 [&>svg]:size-4 [&>svg]:stroke-[2px] pointer-events-none transition-transform group-hover/badge-group:translate-x-0.5\",\r\n iconColorMap[color] || iconColorMap.brand,\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </span>\r\n )\r\n}\r\n\r\nexport interface BadgeGroupDotProps extends React.ComponentProps<\"span\"> {\r\n}\r\n\r\nfunction BadgeGroupDot({\r\n className,\r\n ...props\r\n}: BadgeGroupDotProps) {\r\n const { color } = React.useContext(badgeGroupContext)\r\n\r\n const dotColorMap: Record<string, string> = {\r\n brand: \"bg-utility-brand-500 outline-utility-brand-100\",\r\n gray: \"bg-utility-gray-500 outline-utility-gray-100\",\r\n error: \"bg-utility-error-500 outline-utility-error-100\",\r\n warning: \"bg-utility-warning-500 outline-utility-warning-100\",\r\n success: \"bg-utility-success-500 outline-utility-success-100\",\r\n }\r\n\r\n return (\r\n <span\r\n data-slot=\"badge-group-dot\"\r\n className={cn(\r\n \"inline-block size-1.5 shrink-0 rounded-xp-full outline-2 -outline-offset-1\",\r\n dotColorMap[color] || dotColorMap.brand,\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n BadgeGroup,\r\n BadgeGroupAddon,\r\n BadgeGroupIcon,\r\n BadgeGroupDot,\r\n badgeGroupVariants,\r\n}\r\n"]}