@xploreu/components 0.4.44 → 0.4.46

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 (62) hide show
  1. package/dist/{chunk-WN22TTEL.js → chunk-6QWQDSWL.js} +2 -2
  2. package/dist/{chunk-WN22TTEL.js.map → chunk-6QWQDSWL.js.map} +1 -1
  3. package/dist/chunk-7EXEQDMX.js +2 -0
  4. package/dist/chunk-7EXEQDMX.js.map +1 -0
  5. package/dist/{chunk-KUOFW7JO.js → chunk-B5LYJTBB.js} +2 -2
  6. package/dist/{chunk-KUOFW7JO.js.map → chunk-B5LYJTBB.js.map} +1 -1
  7. package/dist/{chunk-YNJZ2P52.js → chunk-C5HZCXIB.js} +2 -2
  8. package/dist/{chunk-YNJZ2P52.js.map → chunk-C5HZCXIB.js.map} +1 -1
  9. package/dist/chunk-DQGZIFNP.js +2 -0
  10. package/dist/chunk-DQGZIFNP.js.map +1 -0
  11. package/dist/{chunk-F77XVICY.js → chunk-FIDOWSDH.js} +2 -2
  12. package/dist/{chunk-F77XVICY.js.map → chunk-FIDOWSDH.js.map} +1 -1
  13. package/dist/{chunk-HGLHAEGH.js → chunk-G2GFDTP5.js} +2 -2
  14. package/dist/{chunk-HGLHAEGH.js.map → chunk-G2GFDTP5.js.map} +1 -1
  15. package/dist/{chunk-H6ETV455.js → chunk-G4DP36RY.js} +2 -2
  16. package/dist/{chunk-H6ETV455.js.map → chunk-G4DP36RY.js.map} +1 -1
  17. package/dist/{chunk-5VZ6QNBI.js → chunk-IFBRARGK.js} +2 -2
  18. package/dist/{chunk-5VZ6QNBI.js.map → chunk-IFBRARGK.js.map} +1 -1
  19. package/dist/{chunk-VIBM666E.js → chunk-M63WCJ22.js} +2 -2
  20. package/dist/{chunk-VIBM666E.js.map → chunk-M63WCJ22.js.map} +1 -1
  21. package/dist/{chunk-NFLQZ5NB.js → chunk-NBM4LIT4.js} +2 -2
  22. package/dist/{chunk-NFLQZ5NB.js.map → chunk-NBM4LIT4.js.map} +1 -1
  23. package/dist/{chunk-ZK7MHZFG.js → chunk-OBS7TDVV.js} +2 -2
  24. package/dist/{chunk-ZK7MHZFG.js.map → chunk-OBS7TDVV.js.map} +1 -1
  25. package/dist/{chunk-C675EWZW.js → chunk-QIP6KFG2.js} +2 -2
  26. package/dist/{chunk-C675EWZW.js.map → chunk-QIP6KFG2.js.map} +1 -1
  27. package/dist/{chunk-YPV6XEV4.js → chunk-S4L5WILL.js} +2 -2
  28. package/dist/{chunk-YPV6XEV4.js.map → chunk-S4L5WILL.js.map} +1 -1
  29. package/dist/chunk-SVNG3RLD.js +2 -0
  30. package/dist/chunk-SVNG3RLD.js.map +1 -0
  31. package/dist/{chunk-RAVBRPQS.js → chunk-Y2HN4RSA.js} +2 -2
  32. package/dist/{chunk-RAVBRPQS.js.map → chunk-Y2HN4RSA.js.map} +1 -1
  33. package/dist/{chunk-XIZN73T3.js → chunk-YHY3VXCO.js} +2 -2
  34. package/dist/{chunk-XIZN73T3.js.map → chunk-YHY3VXCO.js.map} +1 -1
  35. package/dist/composites/combobox-chip-outside.js +1 -1
  36. package/dist/composites/combobox-chip.js +1 -1
  37. package/dist/composites/combobox-simple.js +1 -1
  38. package/dist/composites/filter-combobox.js +1 -1
  39. package/dist/composites/index.js +1 -1
  40. package/dist/composites/index.js.map +1 -1
  41. package/dist/composites/phone-input.js +1 -1
  42. package/dist/ui/alert-dialog.js +1 -1
  43. package/dist/ui/alerter.js +1 -1
  44. package/dist/ui/button.js +1 -1
  45. package/dist/ui/calendar.js +1 -1
  46. package/dist/ui/carousel.js +1 -1
  47. package/dist/ui/combobox.d.ts +4 -3
  48. package/dist/ui/combobox.js +1 -1
  49. package/dist/ui/date-multiple-picker.js +1 -1
  50. package/dist/ui/date-picker.js +1 -1
  51. package/dist/ui/date-range-picker.js +1 -1
  52. package/dist/ui/index.js +1 -1
  53. package/dist/ui/pagination.js +1 -1
  54. package/dist/ui/tabs.js +1 -1
  55. package/dist/ui/toast.js +1 -1
  56. package/package.json +1 -1
  57. package/dist/chunk-RHWRIE3E.js +0 -2
  58. package/dist/chunk-RHWRIE3E.js.map +0 -1
  59. package/dist/chunk-UINS73U7.js +0 -2
  60. package/dist/chunk-UINS73U7.js.map +0 -1
  61. package/dist/chunk-XZN4XT6V.js +0 -2
  62. package/dist/chunk-XZN4XT6V.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import {a,b,m,e,q,s,w,x,H}from'./chunk-RHWRIE3E.js';import'react';import {ChevronDownIcon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function X({multiple:m$1,items:s$1,placeholder:t="Select",icon:d,container:T,isPending:F,className:M,triggerClassName:k,contentClassName:A,disabled:R,infiniteScroll:x$1,filter:c,...o}){let r=m$1===true,L=o.showTitle??r,g=o.showSearch??r,[n,C]=useControlledState({value:o?.value,defaultValue:o?.defaultValue,onChange:o.onValueChange}),[$,q$1]=useControlledState({value:o?.inputValue?.toString(),defaultValue:o?.defaultInputValue?.toString(),onChange:o?.onInputValueChange}),u=Array.isArray(n)?n:n?[n]:[],a$1=u.length>0,z=u.length,B=a$1?r?`${t} (${z})`:u[0]?.label??t:r?`All ${t}`:t,D=()=>{C(null);};return jsxs(a,{items:s$1,multiple:m$1,value:n,onValueChange:C,inputValue:$,onInputValueChange:q$1,filter:c===null||!g?null:c,isItemEqualToValue:(l,p)=>l.value===p.value,disabled:R,...o,children:[jsxs(b,{className:cn("group flex h-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",a$1&&"border-border-brand bg-bg-brand-primary text-text-brand-secondary hover:bg-bg-brand-primary-hover-alt","disabled:pointer-events-none disabled:opacity-50","data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary",k,M),children:[d&&jsx("span",{className:cn("size-4 shrink-0 group-data-[popup-open]:text-fg-brand-primary",a$1?"text-fg-brand-primary":"text-fg-quaternary"),children:d}),jsx("span",{className:"truncate",children:B}),jsx(ChevronDownIcon,{className:cn("size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180 group-data-[popup-open]:text-fg-brand-primary",a$1?"text-fg-brand-primary":"text-fg-quaternary")})]}),jsx(m,{container:T,className:cn("w-72",A),align:"start",sideOffset:8,children:jsxs("div",{className:"flex flex-col",children:[L&&jsxs("div",{className:"flex items-center justify-between p-3 border-b border-border-primary",children:[jsx("span",{className:"text-label-semibold-3 text-text-primary",children:t}),jsx("button",{type:"button",disabled:!a$1,onClick:D,className:cn("text-label-semibold-3 transition-colors",a$1?"cursor-pointer text-text-error-primary hover:text-text-error-primary-hover":"cursor-not-allowed text-text-disabled"),children:"Clear All"})]}),g&&jsx(e,{placeholder:`Search ${t.toLowerCase()}...`}),jsx(q,{status:F||s$1===void 0?"pending":s$1?.length===0?"empty":null}),jsx(s,{children:(l,p,E)=>jsxs(Fragment,{children:[jsx(w,{indicator:r?"checkbox":void 0,value:l,children:jsx(x,{children:l.label})},l.value),p===E-1&&!!x$1&&jsx(H,{...x$1})]})})]})})]})}export{X as a};//# sourceMappingURL=chunk-WN22TTEL.js.map
2
- //# sourceMappingURL=chunk-WN22TTEL.js.map
1
+ import {a,b,m,e,q,s,w,x,H}from'./chunk-SVNG3RLD.js';import'react';import {ChevronDownIcon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function X({multiple:m$1,items:s$1,placeholder:t="Select",icon:d,container:T,isPending:F,className:M,triggerClassName:k,contentClassName:A,disabled:R,infiniteScroll:x$1,filter:c,...o}){let r=m$1===true,L=o.showTitle??r,g=o.showSearch??r,[n,C]=useControlledState({value:o?.value,defaultValue:o?.defaultValue,onChange:o.onValueChange}),[$,q$1]=useControlledState({value:o?.inputValue?.toString(),defaultValue:o?.defaultInputValue?.toString(),onChange:o?.onInputValueChange}),u=Array.isArray(n)?n:n?[n]:[],a$1=u.length>0,z=u.length,B=a$1?r?`${t} (${z})`:u[0]?.label??t:r?`All ${t}`:t,D=()=>{C(null);};return jsxs(a,{items:s$1,multiple:m$1,value:n,onValueChange:C,inputValue:$,onInputValueChange:q$1,filter:c===null||!g?null:c,isItemEqualToValue:(l,p)=>l.value===p.value,disabled:R,...o,children:[jsxs(b,{className:cn("group flex h-8 w-fit max-w-[220px] items-center gap-2 rounded-xp-card-base border bg-bg-primary px-3 text-body-medium-3 transition-colors","border-border-primary text-text-secondary hover:bg-bg-primary-hover",a$1&&"border-border-brand bg-bg-brand-primary text-text-brand-secondary hover:bg-bg-brand-primary-hover-alt","disabled:pointer-events-none disabled:opacity-50","data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary",k,M),children:[d&&jsx("span",{className:cn("size-4 shrink-0 group-data-[popup-open]:text-fg-brand-primary",a$1?"text-fg-brand-primary":"text-fg-quaternary"),children:d}),jsx("span",{className:"truncate",children:B}),jsx(ChevronDownIcon,{className:cn("size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180 group-data-[popup-open]:text-fg-brand-primary",a$1?"text-fg-brand-primary":"text-fg-quaternary")})]}),jsx(m,{container:T,className:cn("w-72",A),align:"start",sideOffset:8,children:jsxs("div",{className:"flex flex-col",children:[L&&jsxs("div",{className:"flex items-center justify-between p-3 border-b border-border-primary",children:[jsx("span",{className:"text-label-semibold-3 text-text-primary",children:t}),jsx("button",{type:"button",disabled:!a$1,onClick:D,className:cn("text-label-semibold-3 transition-colors",a$1?"cursor-pointer text-text-error-primary hover:text-text-error-primary-hover":"cursor-not-allowed text-text-disabled"),children:"Clear All"})]}),g&&jsx(e,{placeholder:`Search ${t.toLowerCase()}...`}),jsx(q,{status:F||s$1===void 0?"pending":s$1?.length===0?"empty":null}),jsx(s,{children:(l,p,E)=>jsxs(Fragment,{children:[jsx(w,{indicator:r?"checkbox":void 0,value:l,children:jsx(x,{children:l.label})},l.value),p===E-1&&!!x$1&&jsx(H,{...x$1})]})})]})})]})}export{X as a};//# sourceMappingURL=chunk-6QWQDSWL.js.map
2
+ //# sourceMappingURL=chunk-6QWQDSWL.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/composites/filter-combobox.tsx"],"names":["FilterCombobox","multiple","items","placeholder","icon","container","isPending","className","triggerClassName","contentClassName","disabled","infiniteScroll","filter","props","isMultiple","showTitle","showSearch","value","setValue","useControlledState","inputValue","setInputValue","valueArray","hasValue","count","triggerLabel","handleClear","jsxs","Combobox","a","b","ComboboxTrigger","cn","jsx","ChevronDownIcon","ComboboxPopup","ComboboxInput","ComboboxStatus","ComboboxList","item","index","length","Fragment","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll"],"mappings":"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","file":"chunk-WN22TTEL.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { ChevronDownIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { ComboboxItem, ComboboxItemTitle, type ComboboxProps } from \"../ui/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxInfiniteScroll,\r\n ComboboxInput,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxPortal,\r\n ComboboxStatus,\r\n ComboboxTrigger\r\n} from \"../ui/combobox\"\r\n\r\n// ─── Types ───\r\n\r\nexport type FilterComboboxItem = {\r\n label: string\r\n value: string\r\n}\r\n\r\ntype FilterComboboxValueType<Value extends FilterComboboxItem, Multiple extends boolean | undefined> = Multiple extends true ? Value[] : Value;\r\n\r\ntype BaseProps = {\r\n items: FilterComboboxItem[] | undefined\r\n placeholder?: string\r\n icon?: React.ReactNode\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n isPending?: boolean\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n disabled?: boolean\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n showTitle?: boolean\r\n showSearch?: boolean\r\n}\r\n\r\nexport type FilterComboboxProps<Value, Multiple extends boolean | undefined = false> = ComboboxProps<Value, Multiple> & BaseProps\r\n\r\n// ─── Component ───\r\n\r\nfunction FilterCombobox<Value extends FilterComboboxItem, Multiple extends boolean | undefined = false>({\r\n multiple,\r\n items,\r\n placeholder = \"Select\",\r\n icon,\r\n container,\r\n isPending,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n disabled,\r\n infiniteScroll,\r\n filter,\r\n ...props\r\n}: FilterComboboxProps<Value, Multiple>) {\r\n const isMultiple = multiple === true\r\n const showTitle = props.showTitle ?? isMultiple\r\n const showSearch = props.showSearch ?? isMultiple\r\n\r\n const [value, setValue] = useControlledState<FilterComboboxValueType<Value, Multiple> | null>({\r\n value: props?.value,\r\n defaultValue: props?.defaultValue,\r\n onChange: props.onValueChange as (\r\n value: FilterComboboxValueType<Value, Multiple> | null\r\n ) => void\r\n })\r\n\r\n const [inputValue, setInputValue] = useControlledState({\r\n value: props?.inputValue?.toString(),\r\n defaultValue: props?.defaultInputValue?.toString(),\r\n onChange: props?.onInputValueChange,\r\n })\r\n\r\n // Normalize value to array for label & clear logic\r\n const valueArray = Array.isArray(value) ? value : value ? [value] : []\r\n const hasValue = valueArray.length > 0\r\n const count = valueArray.length\r\n\r\n const triggerLabel = !hasValue\r\n ? isMultiple\r\n ? `All ${placeholder}`\r\n : placeholder\r\n : isMultiple\r\n ? `${placeholder} (${count})`\r\n : valueArray[0]?.label ?? placeholder\r\n\r\n const handleClear = () => {\r\n setValue(null)\r\n }\r\n\r\n return (\r\n <Combobox\r\n items={items}\r\n multiple={multiple}\r\n value={value}\r\n onValueChange={setValue}\r\n inputValue={inputValue}\r\n onInputValueChange={setInputValue}\r\n filter={filter === null || !showSearch ? null : filter}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n {...props}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n \"group flex h-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 hover:bg-bg-brand-primary-hover-alt\",\r\n \"disabled:pointer-events-none disabled:opacity-50\",\r\n \"data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {icon && (\r\n <span\r\n className={cn(\r\n \"size-4 shrink-0 group-data-[popup-open]:text-fg-brand-primary\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n >\r\n {icon}\r\n </span>\r\n )}\r\n <span className=\"truncate\">{triggerLabel}</span>\r\n <ChevronDownIcon\r\n className={cn(\r\n \"size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180 group-data-[popup-open]:text-fg-brand-primary\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup\r\n container={container}\r\n className={cn(\"w-72\", contentClassName)}\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n <div className=\"flex flex-col\">\r\n {showTitle && (\r\n <div className=\"flex items-center justify-between p-3 border-b border-border-primary\">\r\n <span className=\"text-label-semibold-3 text-text-primary\">{placeholder}</span>\r\n <button\r\n type=\"button\"\r\n disabled={!hasValue}\r\n onClick={handleClear}\r\n className={cn(\r\n \"text-label-semibold-3 transition-colors\",\r\n hasValue\r\n ? \"cursor-pointer text-text-error-primary hover:text-text-error-primary-hover\"\r\n : \"cursor-not-allowed text-text-disabled\"\r\n )}\r\n >\r\n Clear All\r\n </button>\r\n </div>\r\n )}\r\n\r\n {showSearch && (\r\n <ComboboxInput placeholder={`Search ${placeholder.toLowerCase()}...`} />\r\n )}\r\n\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : (items)?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {(item, index, length) => (\r\n <>\r\n <ComboboxItem\r\n indicator={isMultiple ? \"checkbox\" : undefined}\r\n key={item.value}\r\n value={item}\r\n >\r\n <ComboboxItemTitle>{item.label}</ComboboxItemTitle>\r\n </ComboboxItem>\r\n {index === length - 1 && !!infiniteScroll && (\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n )}\r\n </>\r\n )}\r\n </ComboboxList>\r\n </div>\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { FilterCombobox }\r\n"]}
1
+ {"version":3,"sources":["../src/composites/filter-combobox.tsx"],"names":["FilterCombobox","multiple","items","placeholder","icon","container","isPending","className","triggerClassName","contentClassName","disabled","infiniteScroll","filter","props","isMultiple","showTitle","showSearch","value","setValue","useControlledState","inputValue","setInputValue","valueArray","hasValue","count","triggerLabel","handleClear","jsxs","Combobox","a","b","ComboboxTrigger","cn","jsx","ChevronDownIcon","ComboboxPopup","ComboboxInput","ComboboxStatus","ComboboxList","item","index","length","Fragment","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll"],"mappings":"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","file":"chunk-6QWQDSWL.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { ChevronDownIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { ComboboxItem, ComboboxItemTitle, type ComboboxProps } from \"../ui/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxInfiniteScroll,\r\n ComboboxInput,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxPortal,\r\n ComboboxStatus,\r\n ComboboxTrigger\r\n} from \"../ui/combobox\"\r\n\r\n// ─── Types ───\r\n\r\nexport type FilterComboboxItem = {\r\n label: string\r\n value: string\r\n}\r\n\r\ntype FilterComboboxValueType<Value extends FilterComboboxItem, Multiple extends boolean | undefined> = Multiple extends true ? Value[] : Value;\r\n\r\ntype BaseProps = {\r\n items: FilterComboboxItem[] | undefined\r\n placeholder?: string\r\n icon?: React.ReactNode\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n isPending?: boolean\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n disabled?: boolean\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n showTitle?: boolean\r\n showSearch?: boolean\r\n}\r\n\r\nexport type FilterComboboxProps<Value, Multiple extends boolean | undefined = false> = ComboboxProps<Value, Multiple> & BaseProps\r\n\r\n// ─── Component ───\r\n\r\nfunction FilterCombobox<Value extends FilterComboboxItem, Multiple extends boolean | undefined = false>({\r\n multiple,\r\n items,\r\n placeholder = \"Select\",\r\n icon,\r\n container,\r\n isPending,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n disabled,\r\n infiniteScroll,\r\n filter,\r\n ...props\r\n}: FilterComboboxProps<Value, Multiple>) {\r\n const isMultiple = multiple === true\r\n const showTitle = props.showTitle ?? isMultiple\r\n const showSearch = props.showSearch ?? isMultiple\r\n\r\n const [value, setValue] = useControlledState<FilterComboboxValueType<Value, Multiple> | null>({\r\n value: props?.value,\r\n defaultValue: props?.defaultValue,\r\n onChange: props.onValueChange as (\r\n value: FilterComboboxValueType<Value, Multiple> | null\r\n ) => void\r\n })\r\n\r\n const [inputValue, setInputValue] = useControlledState({\r\n value: props?.inputValue?.toString(),\r\n defaultValue: props?.defaultInputValue?.toString(),\r\n onChange: props?.onInputValueChange,\r\n })\r\n\r\n // Normalize value to array for label & clear logic\r\n const valueArray = Array.isArray(value) ? value : value ? [value] : []\r\n const hasValue = valueArray.length > 0\r\n const count = valueArray.length\r\n\r\n const triggerLabel = !hasValue\r\n ? isMultiple\r\n ? `All ${placeholder}`\r\n : placeholder\r\n : isMultiple\r\n ? `${placeholder} (${count})`\r\n : valueArray[0]?.label ?? placeholder\r\n\r\n const handleClear = () => {\r\n setValue(null)\r\n }\r\n\r\n return (\r\n <Combobox\r\n items={items}\r\n multiple={multiple}\r\n value={value}\r\n onValueChange={setValue}\r\n inputValue={inputValue}\r\n onInputValueChange={setInputValue}\r\n filter={filter === null || !showSearch ? null : filter}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n {...props}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n \"group flex h-8 w-fit max-w-[220px] items-center gap-2 rounded-xp-card-base border bg-bg-primary px-3 text-body-medium-3 transition-colors\",\r\n \"border-border-primary text-text-secondary hover:bg-bg-primary-hover\",\r\n hasValue && \"border-border-brand bg-bg-brand-primary text-text-brand-secondary hover:bg-bg-brand-primary-hover-alt\",\r\n \"disabled:pointer-events-none disabled:opacity-50\",\r\n \"data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {icon && (\r\n <span\r\n className={cn(\r\n \"size-4 shrink-0 group-data-[popup-open]:text-fg-brand-primary\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n >\r\n {icon}\r\n </span>\r\n )}\r\n <span className=\"truncate\">{triggerLabel}</span>\r\n <ChevronDownIcon\r\n className={cn(\r\n \"size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180 group-data-[popup-open]:text-fg-brand-primary\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup\r\n container={container}\r\n className={cn(\"w-72\", contentClassName)}\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n <div className=\"flex flex-col\">\r\n {showTitle && (\r\n <div className=\"flex items-center justify-between p-3 border-b border-border-primary\">\r\n <span className=\"text-label-semibold-3 text-text-primary\">{placeholder}</span>\r\n <button\r\n type=\"button\"\r\n disabled={!hasValue}\r\n onClick={handleClear}\r\n className={cn(\r\n \"text-label-semibold-3 transition-colors\",\r\n hasValue\r\n ? \"cursor-pointer text-text-error-primary hover:text-text-error-primary-hover\"\r\n : \"cursor-not-allowed text-text-disabled\"\r\n )}\r\n >\r\n Clear All\r\n </button>\r\n </div>\r\n )}\r\n\r\n {showSearch && (\r\n <ComboboxInput placeholder={`Search ${placeholder.toLowerCase()}...`} />\r\n )}\r\n\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : (items)?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {(item, index, length) => (\r\n <>\r\n <ComboboxItem\r\n indicator={isMultiple ? \"checkbox\" : undefined}\r\n key={item.value}\r\n value={item}\r\n >\r\n <ComboboxItemTitle>{item.label}</ComboboxItemTitle>\r\n </ComboboxItem>\r\n {index === length - 1 && !!infiniteScroll && (\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n )}\r\n </>\r\n )}\r\n </ComboboxList>\r\n </div>\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { FilterCombobox }\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {a,b,c as c$1,d,e,g,f as f$1}from'./chunk-6OC5NZB6.js';import {cn}from'@xploreu/lib/cn';import {jsx,jsxs}from'react/jsx-runtime';function m({className:t,variant:a$1="default",...i}){return jsx(a,{className:cn("group/tabs flex flex-col gap-2",t),"data-variant":a$1,...i})}function c({className:t,highlightClassName:a,...i}){return jsx(b,{className:cn("absolute z-0","group-data-[variant=default]/tabs:inset-0 group-data-[variant=default]/tabs:rounded-lg group-data-[variant=default]/tabs:bg-bg-primary-solid","group-data-[variant=underline]/tabs:bottom-0 group-data-[variant=underline]/tabs:h-0.5 group-data-[variant=underline]/tabs:w-full group-data-[variant=underline]/tabs:rounded-none group-data-[variant=underline]/tabs:bg-fg-brand-secondary","group-data-[variant=attract]/tabs:bottom-0 group-data-[variant=attract]/tabs:h-[3px] group-data-[variant=attract]/tabs:w-full group-data-[variant=attract]/tabs:rounded-t-full group-data-[variant=attract]/tabs:bg-gradient-to-r group-data-[variant=attract]/tabs:from-[var(--color-brand-light-500)] group-data-[variant=attract]/tabs:to-[var(--color-brand-light-700)]","group-data-[variant=topbar]/tabs:bottom-0 group-data-[variant=topbar]/tabs:h-[3px] group-data-[variant=topbar]/tabs:w-full group-data-[variant=topbar]/tabs:rounded-t-full group-data-[variant=topbar]/tabs:bg-[linear-gradient(90deg,#2F7EF0_0%,#FA0805_100%)]","group-data-[variant=segment]/tabs:inset-0 group-data-[variant=segment]/tabs:rounded-lg group-data-[variant=segment]/tabs:bg-bg-brand-primary group-data-[variant=segment]/tabs:data-[value=declined]:bg-bg-error-primary group-data-[variant=segment]/tabs:data-[value=rejected]:bg-bg-error-primary","group-data-[variant=solid]/tabs:inset-0 group-data-[variant=solid]/tabs:rounded-lg group-data-[variant=solid]/tabs:bg-gradient-buttons-gradient-blue group-data-[variant=solid]/tabs:shadow-xp-md","group-data-[variant=filter]/tabs:inset-0 group-data-[variant=filter]/tabs:rounded-xp-card-base group-data-[variant=filter]/tabs:border group-data-[variant=filter]/tabs:border-border-brand group-data-[variant=filter]/tabs:bg-bg-brand-primary",a),children:jsx(c$1,{className:cn("inline-flex w-fit items-center justify-center","group-data-[variant=default]/tabs:bg-bg-tertiary group-data-[variant=default]/tabs:rounded-lg group-data-[variant=default]/tabs:p-0.5 group-data-[variant=default]/tabs:gap-1 group-data-[variant=default]/tabs:border group-data-[variant=default]/tabs:border-border-primary","group-data-[variant=underline]/tabs:gap-7","group-data-[variant=attract]/tabs:w-full group-data-[variant=attract]/tabs:justify-start group-data-[variant=attract]/tabs:gap-6 group-data-[variant=attract]/tabs:border-b group-data-[variant=attract]/tabs:border-border-secondary group-data-[variant=attract]/tabs:px-6","group-data-[variant=topbar]/tabs:w-full group-data-[variant=topbar]/tabs:justify-start group-data-[variant=topbar]/tabs:gap-6 group-data-[variant=topbar]/tabs:border-b group-data-[variant=topbar]/tabs:border-border-secondary group-data-[variant=topbar]/tabs:px-6","group-data-[variant=segment]/tabs:bg-bg-primary group-data-[variant=segment]/tabs:rounded-[10px] group-data-[variant=segment]/tabs:p-0.5 group-data-[variant=segment]/tabs:gap-1 group-data-[variant=segment]/tabs:border group-data-[variant=segment]/tabs:border-border-primary group-data-[variant=segment]/tabs:shadow-xp-xs","group-data-[variant=solid]/tabs:bg-bg-primary group-data-[variant=solid]/tabs:rounded-[10px] group-data-[variant=solid]/tabs:p-0.5 group-data-[variant=solid]/tabs:gap-0.5 group-data-[variant=solid]/tabs:border group-data-[variant=solid]/tabs:border-border-primary","group-data-[variant=filter]/tabs:gap-2",t),...i})})}function f({className:t,count:a,children:i,...s}){return jsx(d,{value:s.value,className:"flex-1 group-data-[variant=attract]/tabs:flex-none group-data-[variant=topbar]/tabs:flex-none group-data-[variant=segment]/tabs:flex-none group-data-[variant=solid]/tabs:flex-none group-data-[variant=filter]/tabs:flex-none",children:jsxs(e,{className:cn("group/tabs-trigger data-[active=true]:text-text-brand-tertiary focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-text-primary inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md w-full text-label-semibold-2 whitespace-nowrap transition-colors duration-300 ease-in-out focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4","group-data-[variant=default]/tabs:px-3 group-data-[variant=default]/tabs:py-2 group-data-[variant=default]/tabs:rounded-lg group-data-[variant=default]/tabs:text-text-quaternary hover:group-data-[variant=default]/tabs:text-text-secondary group-data-[variant=default]/tabs:data-[active=true]:text-text-white","group-data-[variant=underline]/tabs:h-8.5 group-data-[variant=underline]/tabs:px-3 hover:group-data-[variant=underline]/tabs:text-text-brand-secondary","group-data-[variant=attract]/tabs:h-9 group-data-[variant=attract]/tabs:px-0 group-data-[variant=attract]/tabs:gap-2 group-data-[variant=attract]/tabs:rounded-none group-data-[variant=attract]/tabs:text-label-medium-3 group-data-[variant=attract]/tabs:text-text-quaternary hover:group-data-[variant=attract]/tabs:text-text-secondary group-data-[variant=attract]/tabs:data-[active=true]:text-text-brand-tertiary group-data-[variant=attract]/tabs:data-[active=true]:text-label-semibold-3","group-data-[variant=topbar]/tabs:h-9 group-data-[variant=topbar]/tabs:px-0 group-data-[variant=topbar]/tabs:gap-2 group-data-[variant=topbar]/tabs:rounded-none group-data-[variant=topbar]/tabs:text-body-regular-3 group-data-[variant=topbar]/tabs:text-text-quaternary hover:group-data-[variant=topbar]/tabs:text-text-secondary group-data-[variant=topbar]/tabs:data-[active=true]:text-text-primary group-data-[variant=topbar]/tabs:data-[active=true]:text-label-semibold-3","group-data-[variant=segment]/tabs:h-9 group-data-[variant=segment]/tabs:px-3 group-data-[variant=segment]/tabs:py-2 group-data-[variant=segment]/tabs:gap-1 group-data-[variant=segment]/tabs:rounded-lg group-data-[variant=segment]/tabs:text-label-semibold-3 group-data-[variant=segment]/tabs:text-text-quaternary hover:group-data-[variant=segment]/tabs:text-text-secondary group-data-[variant=segment]/tabs:data-[active=true]:text-text-brand-secondary-alt group-data-[variant=segment]/tabs:data-[active=true]:data-[value=declined]:text-text-error-primary group-data-[variant=segment]/tabs:data-[active=true]:data-[value=rejected]:text-text-error-primary","group-data-[variant=solid]/tabs:h-8 group-data-[variant=solid]/tabs:px-2.5 group-data-[variant=solid]/tabs:rounded-xp-buttons group-data-[variant=solid]/tabs:text-label-semibold-3 group-data-[variant=solid]/tabs:text-text-tertiary hover:group-data-[variant=solid]/tabs:text-text-secondary group-data-[variant=solid]/tabs:data-[active=true]:text-text-primary-on-brand","group-data-[variant=filter]/tabs:h-8 group-data-[variant=filter]/tabs:px-3 group-data-[variant=filter]/tabs:gap-2 group-data-[variant=filter]/tabs:rounded-xp-card-base group-data-[variant=filter]/tabs:border group-data-[variant=filter]/tabs:border-border-primary group-data-[variant=filter]/tabs:bg-transparent group-data-[variant=filter]/tabs:text-body-medium-3 group-data-[variant=filter]/tabs:text-text-secondary group-data-[variant=filter]/tabs:shadow-xp-xs hover:group-data-[variant=filter]/tabs:bg-bg-primary-hover group-data-[variant=filter]/tabs:data-[active=true]:border-transparent group-data-[variant=filter]/tabs:data-[active=true]:text-text-brand-secondary hover:group-data-[variant=filter]/tabs:data-[active=true]:bg-transparent group-data-[variant=filter]/tabs:[&_svg]:size-3.5 group-data-[variant=filter]/tabs:[&_svg]:text-fg-tertiary group-data-[variant=filter]/tabs:data-[active=true]:[&_svg]:text-fg-brand-primary",t),...s,children:[i,a!==void 0&&a!==0&&a!=="0"&&jsx("span",{className:cn("inline-flex items-center justify-center rounded-xp-card-base-xs px-0.5 py-px min-w-4 text-label-medium-4 transition-colors duration-300","group-data-[variant=default]/tabs:bg-bg-quaternary group-data-[variant=default]/tabs:text-text-quaternary group-data-[variant=default]/tabs:group-data-[active=true]/tabs-trigger:bg-bg-secondary-solid group-data-[variant=default]/tabs:group-data-[active=true]/tabs-trigger:text-text-primary-on-brand","group-data-[variant=underline]/tabs:bg-bg-quaternary group-data-[variant=underline]/tabs:text-text-quaternary group-data-[variant=underline]/tabs:group-data-[active=true]/tabs-trigger:bg-bg-brand-solid group-data-[variant=underline]/tabs:group-data-[active=true]/tabs-trigger:text-text-primary-on-brand","group-data-[variant=attract]/tabs:bg-bg-quaternary group-data-[variant=attract]/tabs:text-text-quaternary group-data-[variant=attract]/tabs:group-data-[active=true]/tabs-trigger:bg-bg-brand-solid group-data-[variant=attract]/tabs:group-data-[active=true]/tabs-trigger:text-text-primary-on-brand","group-data-[variant=topbar]/tabs:bg-bg-quaternary group-data-[variant=topbar]/tabs:text-text-quaternary group-data-[variant=topbar]/tabs:group-data-[active=true]/tabs-trigger:bg-bg-brand-solid group-data-[variant=topbar]/tabs:group-data-[active=true]/tabs-trigger:text-text-primary-on-brand","group-data-[variant=segment]/tabs:bg-bg-quaternary group-data-[variant=segment]/tabs:text-text-quaternary group-data-[variant=segment]/tabs:group-data-[active=true]/tabs-trigger:bg-bg-brand-solid group-data-[variant=segment]/tabs:group-data-[active=true]/tabs-trigger:text-text-white group-data-[variant=segment]/tabs:group-data-[active=true]/tabs-trigger:group-data-[value=declined]/tabs-trigger:bg-bg-error-solid group-data-[variant=segment]/tabs:group-data-[active=true]/tabs-trigger:group-data-[value=rejected]/tabs-trigger:bg-bg-error-solid","group-data-[variant=solid]/tabs:bg-bg-quaternary group-data-[variant=solid]/tabs:text-text-quaternary group-data-[variant=solid]/tabs:group-data-[active=true]/tabs-trigger:bg-bg-secondary-solid group-data-[variant=solid]/tabs:group-data-[active=true]/tabs-trigger:text-text-primary-on-brand","group-data-[variant=filter]/tabs:bg-bg-brand-solid group-data-[variant=filter]/tabs:text-text-primary-on-brand"),children:a})]})})}function y(t){return jsx(g,{...t})}function P({className:t,...a}){return jsx(f$1,{className:cn("flex-1 outline-none",t),...a})}export{m as a,c as b,f as c,y as d,P as e};//# sourceMappingURL=chunk-7EXEQDMX.js.map
2
+ //# sourceMappingURL=chunk-7EXEQDMX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/tabs.tsx"],"names":["Tabs","className","variant","props","jsx","cn","TabsList","highlightClassName","TabsHighlight","TabsTab","count","children","TabsHighlightItem","jsxs","TabsPanels","TabsPanel"],"mappings":"wIAoBA,SAASA,EAAK,CAAE,SAAA,CAAAC,EAAW,OAAA,CAAAC,GAAAA,CAAU,UAAW,GAAGC,CAAM,EAAc,CACrE,OACEC,GAAAA,CAACJ,CAAAA,CAAA,CACC,SAAA,CAAWK,EAAAA,CAAG,iCAAkCJ,CAAS,CAAA,CACzD,eAAcC,GAAAA,CACb,GAAGC,EACN,CAEJ,CAMA,SAASG,CAAAA,CAAS,CAAE,UAAAL,CAAAA,CAAW,kBAAA,CAAAM,EAAoB,GAAGJ,CAAM,CAAA,CAAkB,CAC5E,OACEC,GAAAA,CAACI,CAAAA,CAAA,CACC,SAAA,CAAWH,EAAAA,CACT,eACA,8IAAA,CACA,8OAAA,CACA,8WACA,iQAAA,CACA,sSAAA,CACA,oMACA,kPAAA,CACAE,CACF,EAEA,QAAA,CAAAH,GAAAA,CAACE,IAAA,CACC,SAAA,CAAWD,GACT,+CAAA,CACA,gRAAA,CACA,4CACA,8QAAA,CACA,wQAAA,CACA,mUACA,yQAAA,CACA,wCAAA,CACAJ,CACF,CAAA,CACC,GAAGE,EACN,CAAA,CACF,CAEJ,CAMA,SAASM,CAAAA,CAAQ,CAAE,SAAA,CAAAR,CAAAA,CAAW,MAAAS,CAAAA,CAAO,QAAA,CAAAC,CAAAA,CAAU,GAAGR,CAAM,CAAA,CAAiB,CACvE,OACEC,GAAAA,CAACQ,CAAAA,CAAA,CAA2B,KAAA,CAAOT,CAAAA,CAAM,MAAO,SAAA,CAAU,gOAAA,CACxD,SAAAU,IAAAA,CAACJ,CAAAA,CAAA,CACC,SAAA,CAAWJ,EAAAA,CACT,sgBAEA,oTAAA,CAEA,wJAAA,CAEA,ueAAA,CAEA,udAAA,CAEA,+oBAEA,gXAAA,CAEA,s6BAAA,CACAJ,CACF,CAAA,CACC,GAAGE,EAEH,QAAA,CAAA,CAAAQ,CAAAA,CACAD,IAAU,MAAA,EAAaA,CAAAA,GAAU,GAAKA,CAAAA,GAAU,GAAA,EAC/CN,IAAC,MAAA,CAAA,CACC,SAAA,CAAWC,GACT,yIAAA,CAEA,4SAAA,CAEA,gTAAA,CAEA,wSAAA,CAEA,qSAEA,miBAAA,CAEA,oSAAA,CAEA,gHACF,CAAA,CAEC,QAAA,CAAAK,EACH,CAAA,CAAA,CAEJ,CAAA,CACF,CAEJ,CAIA,SAASI,EAAWX,CAAAA,CAAwB,CAC1C,OAAOC,GAAAA,CAACU,CAAAA,CAAA,CAAqB,GAAGX,CAAAA,CAAO,CACzC,CAIA,SAASY,EAAU,CAAE,SAAA,CAAAd,EAAW,GAAGE,CAAM,EAAmB,CAC1D,OACEC,IAACW,GAAAA,CAAA,CACC,UAAWV,EAAAA,CAAG,qBAAA,CAAuBJ,CAAS,CAAA,CAC7C,GAAGE,EACN,CAEJ","file":"chunk-7EXEQDMX.js","sourcesContent":["import {\r\n Tabs as TabsPrimitive,\r\n TabsList as TabsListPrimitive,\r\n TabsTab as TabsTabPrimitive,\r\n TabsPanel as TabsPanelPrimitive,\r\n TabsPanels as TabsPanelsPrimitive,\r\n TabsHighlight as TabsHighlightPrimitive,\r\n TabsHighlightItem as TabsHighlightItemPrimitive,\r\n type TabsProps as TabsPrimitiveProps,\r\n type TabsListProps as TabsListPrimitiveProps,\r\n type TabsTabProps as TabsTabPrimitiveProps,\r\n type TabsPanelProps as TabsPanelPrimitiveProps,\r\n type TabsPanelsProps as TabsPanelsPrimitiveProps,\r\n} from '../primitives/tabs';\r\nimport { cn } from '@xploreu/lib/cn';\r\n\r\ntype TabsProps = TabsPrimitiveProps & {\r\n variant?: \"default\" | \"underline\" | \"attract\" | \"topbar\" | \"segment\" | \"solid\" | \"filter\";\r\n};\r\n\r\nfunction Tabs({ className, variant = \"default\", ...props }: TabsProps) {\r\n return (\r\n <TabsPrimitive\r\n className={cn('group/tabs flex flex-col gap-2', className)}\r\n data-variant={variant}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype TabsListProps = TabsListPrimitiveProps & {\r\n highlightClassName?: string;\r\n};\r\n\r\nfunction TabsList({ className, highlightClassName, ...props }: TabsListProps) {\r\n return (\r\n <TabsHighlightPrimitive\r\n className={cn(\r\n \"absolute z-0\",\r\n \"group-data-[variant=default]/tabs:inset-0 group-data-[variant=default]/tabs:rounded-lg group-data-[variant=default]/tabs:bg-bg-primary-solid\",\r\n \"group-data-[variant=underline]/tabs:bottom-0 group-data-[variant=underline]/tabs:h-0.5 group-data-[variant=underline]/tabs:w-full group-data-[variant=underline]/tabs:rounded-none group-data-[variant=underline]/tabs:bg-fg-brand-secondary\",\r\n \"group-data-[variant=attract]/tabs:bottom-0 group-data-[variant=attract]/tabs:h-[3px] group-data-[variant=attract]/tabs:w-full group-data-[variant=attract]/tabs:rounded-t-full group-data-[variant=attract]/tabs:bg-gradient-to-r group-data-[variant=attract]/tabs:from-[var(--color-brand-light-500)] group-data-[variant=attract]/tabs:to-[var(--color-brand-light-700)]\",\r\n \"group-data-[variant=topbar]/tabs:bottom-0 group-data-[variant=topbar]/tabs:h-[3px] group-data-[variant=topbar]/tabs:w-full group-data-[variant=topbar]/tabs:rounded-t-full group-data-[variant=topbar]/tabs:bg-[linear-gradient(90deg,#2F7EF0_0%,#FA0805_100%)]\",\r\n \"group-data-[variant=segment]/tabs:inset-0 group-data-[variant=segment]/tabs:rounded-lg group-data-[variant=segment]/tabs:bg-bg-brand-primary group-data-[variant=segment]/tabs:data-[value=declined]:bg-bg-error-primary group-data-[variant=segment]/tabs:data-[value=rejected]:bg-bg-error-primary\",\r\n \"group-data-[variant=solid]/tabs:inset-0 group-data-[variant=solid]/tabs:rounded-lg group-data-[variant=solid]/tabs:bg-gradient-buttons-gradient-blue group-data-[variant=solid]/tabs:shadow-xp-md\",\r\n \"group-data-[variant=filter]/tabs:inset-0 group-data-[variant=filter]/tabs:rounded-xp-card-base group-data-[variant=filter]/tabs:border group-data-[variant=filter]/tabs:border-border-brand group-data-[variant=filter]/tabs:bg-bg-brand-primary\",\r\n highlightClassName\r\n )}\r\n >\r\n <TabsListPrimitive\r\n className={cn(\r\n \"inline-flex w-fit items-center justify-center\",\r\n \"group-data-[variant=default]/tabs:bg-bg-tertiary group-data-[variant=default]/tabs:rounded-lg group-data-[variant=default]/tabs:p-0.5 group-data-[variant=default]/tabs:gap-1 group-data-[variant=default]/tabs:border group-data-[variant=default]/tabs:border-border-primary\",\r\n \"group-data-[variant=underline]/tabs:gap-7\",\r\n \"group-data-[variant=attract]/tabs:w-full group-data-[variant=attract]/tabs:justify-start group-data-[variant=attract]/tabs:gap-6 group-data-[variant=attract]/tabs:border-b group-data-[variant=attract]/tabs:border-border-secondary group-data-[variant=attract]/tabs:px-6\",\r\n \"group-data-[variant=topbar]/tabs:w-full group-data-[variant=topbar]/tabs:justify-start group-data-[variant=topbar]/tabs:gap-6 group-data-[variant=topbar]/tabs:border-b group-data-[variant=topbar]/tabs:border-border-secondary group-data-[variant=topbar]/tabs:px-6\",\r\n \"group-data-[variant=segment]/tabs:bg-bg-primary group-data-[variant=segment]/tabs:rounded-[10px] group-data-[variant=segment]/tabs:p-0.5 group-data-[variant=segment]/tabs:gap-1 group-data-[variant=segment]/tabs:border group-data-[variant=segment]/tabs:border-border-primary group-data-[variant=segment]/tabs:shadow-xp-xs\",\r\n \"group-data-[variant=solid]/tabs:bg-bg-primary group-data-[variant=solid]/tabs:rounded-[10px] group-data-[variant=solid]/tabs:p-0.5 group-data-[variant=solid]/tabs:gap-0.5 group-data-[variant=solid]/tabs:border group-data-[variant=solid]/tabs:border-border-primary\",\r\n \"group-data-[variant=filter]/tabs:gap-2\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n </TabsHighlightPrimitive>\r\n );\r\n}\r\n\r\ntype TabsTabProps = TabsTabPrimitiveProps & {\r\n count?: number | string;\r\n};\r\n\r\nfunction TabsTab({ className, count, children, ...props }: TabsTabProps) {\r\n return (\r\n <TabsHighlightItemPrimitive value={props.value} className=\"flex-1 group-data-[variant=attract]/tabs:flex-none group-data-[variant=topbar]/tabs:flex-none group-data-[variant=segment]/tabs:flex-none group-data-[variant=solid]/tabs:flex-none group-data-[variant=filter]/tabs:flex-none\">\r\n <TabsTabPrimitive\r\n className={cn(\r\n \"group/tabs-trigger data-[active=true]:text-text-brand-tertiary focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-text-primary inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md w-full text-label-semibold-2 whitespace-nowrap transition-colors duration-300 ease-in-out focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n // default variant\r\n \"group-data-[variant=default]/tabs:px-3 group-data-[variant=default]/tabs:py-2 group-data-[variant=default]/tabs:rounded-lg group-data-[variant=default]/tabs:text-text-quaternary hover:group-data-[variant=default]/tabs:text-text-secondary group-data-[variant=default]/tabs:data-[active=true]:text-text-white\",\r\n // underline variant\r\n \"group-data-[variant=underline]/tabs:h-8.5 group-data-[variant=underline]/tabs:px-3 hover:group-data-[variant=underline]/tabs:text-text-brand-secondary\",\r\n // attract variant\r\n \"group-data-[variant=attract]/tabs:h-9 group-data-[variant=attract]/tabs:px-0 group-data-[variant=attract]/tabs:gap-2 group-data-[variant=attract]/tabs:rounded-none group-data-[variant=attract]/tabs:text-label-medium-3 group-data-[variant=attract]/tabs:text-text-quaternary hover:group-data-[variant=attract]/tabs:text-text-secondary group-data-[variant=attract]/tabs:data-[active=true]:text-text-brand-tertiary group-data-[variant=attract]/tabs:data-[active=true]:text-label-semibold-3\",\r\n // topbar variant\r\n \"group-data-[variant=topbar]/tabs:h-9 group-data-[variant=topbar]/tabs:px-0 group-data-[variant=topbar]/tabs:gap-2 group-data-[variant=topbar]/tabs:rounded-none group-data-[variant=topbar]/tabs:text-body-regular-3 group-data-[variant=topbar]/tabs:text-text-quaternary hover:group-data-[variant=topbar]/tabs:text-text-secondary group-data-[variant=topbar]/tabs:data-[active=true]:text-text-primary group-data-[variant=topbar]/tabs:data-[active=true]:text-label-semibold-3\",\r\n // segment variant\r\n \"group-data-[variant=segment]/tabs:h-9 group-data-[variant=segment]/tabs:px-3 group-data-[variant=segment]/tabs:py-2 group-data-[variant=segment]/tabs:gap-1 group-data-[variant=segment]/tabs:rounded-lg group-data-[variant=segment]/tabs:text-label-semibold-3 group-data-[variant=segment]/tabs:text-text-quaternary hover:group-data-[variant=segment]/tabs:text-text-secondary group-data-[variant=segment]/tabs:data-[active=true]:text-text-brand-secondary-alt group-data-[variant=segment]/tabs:data-[active=true]:data-[value=declined]:text-text-error-primary group-data-[variant=segment]/tabs:data-[active=true]:data-[value=rejected]:text-text-error-primary\",\r\n // solid variant\r\n \"group-data-[variant=solid]/tabs:h-8 group-data-[variant=solid]/tabs:px-2.5 group-data-[variant=solid]/tabs:rounded-xp-buttons group-data-[variant=solid]/tabs:text-label-semibold-3 group-data-[variant=solid]/tabs:text-text-tertiary hover:group-data-[variant=solid]/tabs:text-text-secondary group-data-[variant=solid]/tabs:data-[active=true]:text-text-primary-on-brand\",\r\n // filter variant\r\n \"group-data-[variant=filter]/tabs:h-8 group-data-[variant=filter]/tabs:px-3 group-data-[variant=filter]/tabs:gap-2 group-data-[variant=filter]/tabs:rounded-xp-card-base group-data-[variant=filter]/tabs:border group-data-[variant=filter]/tabs:border-border-primary group-data-[variant=filter]/tabs:bg-transparent group-data-[variant=filter]/tabs:text-body-medium-3 group-data-[variant=filter]/tabs:text-text-secondary group-data-[variant=filter]/tabs:shadow-xp-xs hover:group-data-[variant=filter]/tabs:bg-bg-primary-hover group-data-[variant=filter]/tabs:data-[active=true]:border-transparent group-data-[variant=filter]/tabs:data-[active=true]:text-text-brand-secondary hover:group-data-[variant=filter]/tabs:data-[active=true]:bg-transparent group-data-[variant=filter]/tabs:[&_svg]:size-3.5 group-data-[variant=filter]/tabs:[&_svg]:text-fg-tertiary group-data-[variant=filter]/tabs:data-[active=true]:[&_svg]:text-fg-brand-primary\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {count !== undefined && count !== 0 && count !== \"0\" && (\r\n <span\r\n className={cn(\r\n \"inline-flex items-center justify-center rounded-xp-card-base-xs px-0.5 py-px min-w-4 text-label-medium-4 transition-colors duration-300\",\r\n // default variant\r\n \"group-data-[variant=default]/tabs:bg-bg-quaternary group-data-[variant=default]/tabs:text-text-quaternary group-data-[variant=default]/tabs:group-data-[active=true]/tabs-trigger:bg-bg-secondary-solid group-data-[variant=default]/tabs:group-data-[active=true]/tabs-trigger:text-text-primary-on-brand\",\r\n // underline & other variants\r\n \"group-data-[variant=underline]/tabs:bg-bg-quaternary group-data-[variant=underline]/tabs:text-text-quaternary group-data-[variant=underline]/tabs:group-data-[active=true]/tabs-trigger:bg-bg-brand-solid group-data-[variant=underline]/tabs:group-data-[active=true]/tabs-trigger:text-text-primary-on-brand\",\r\n // attract variant\r\n \"group-data-[variant=attract]/tabs:bg-bg-quaternary group-data-[variant=attract]/tabs:text-text-quaternary group-data-[variant=attract]/tabs:group-data-[active=true]/tabs-trigger:bg-bg-brand-solid group-data-[variant=attract]/tabs:group-data-[active=true]/tabs-trigger:text-text-primary-on-brand\",\r\n // topbar variant\r\n \"group-data-[variant=topbar]/tabs:bg-bg-quaternary group-data-[variant=topbar]/tabs:text-text-quaternary group-data-[variant=topbar]/tabs:group-data-[active=true]/tabs-trigger:bg-bg-brand-solid group-data-[variant=topbar]/tabs:group-data-[active=true]/tabs-trigger:text-text-primary-on-brand\",\r\n // segment variant\r\n \"group-data-[variant=segment]/tabs:bg-bg-quaternary group-data-[variant=segment]/tabs:text-text-quaternary group-data-[variant=segment]/tabs:group-data-[active=true]/tabs-trigger:bg-bg-brand-solid group-data-[variant=segment]/tabs:group-data-[active=true]/tabs-trigger:text-text-white group-data-[variant=segment]/tabs:group-data-[active=true]/tabs-trigger:group-data-[value=declined]/tabs-trigger:bg-bg-error-solid group-data-[variant=segment]/tabs:group-data-[active=true]/tabs-trigger:group-data-[value=rejected]/tabs-trigger:bg-bg-error-solid\",\r\n // solid variant\r\n \"group-data-[variant=solid]/tabs:bg-bg-quaternary group-data-[variant=solid]/tabs:text-text-quaternary group-data-[variant=solid]/tabs:group-data-[active=true]/tabs-trigger:bg-bg-secondary-solid group-data-[variant=solid]/tabs:group-data-[active=true]/tabs-trigger:text-text-primary-on-brand\",\r\n // filter variant\r\n \"group-data-[variant=filter]/tabs:bg-bg-brand-solid group-data-[variant=filter]/tabs:text-text-primary-on-brand\",\r\n )}\r\n >\r\n {count}\r\n </span>\r\n )}\r\n </TabsTabPrimitive>\r\n </TabsHighlightItemPrimitive>\r\n );\r\n}\r\n\r\ntype TabsPanelsProps = TabsPanelsPrimitiveProps;\r\n\r\nfunction TabsPanels(props: TabsPanelsProps) {\r\n return <TabsPanelsPrimitive {...props} />;\r\n}\r\n\r\ntype TabsPanelProps = TabsPanelPrimitiveProps;\r\n\r\nfunction TabsPanel({ className, ...props }: TabsPanelProps) {\r\n return (\r\n <TabsPanelPrimitive\r\n className={cn('flex-1 outline-none', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {\r\n Tabs,\r\n TabsList,\r\n TabsTab,\r\n TabsPanels,\r\n TabsPanel,\r\n type TabsProps,\r\n type TabsListProps,\r\n type TabsTabProps,\r\n type TabsPanelsProps,\r\n type TabsPanelProps,\r\n};"]}
@@ -1,2 +1,2 @@
1
- import {b}from'./chunk-UINS73U7.js';import*as o from'react';import w from'embla-carousel-react';import {ArrowLeft,ArrowRight}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var R=o.createContext(null);function m(){let r=o.useContext(R);if(!r)throw new Error("useCarousel must be used within a <Carousel />");return r}function T({orientation:r="horizontal",opts:a,setApi:t,plugins:l,className:i,children:n,...v}){let[C,e]=w({...a,axis:r==="horizontal"?"x":"y"},l),[c,p]=o.useState(false),[S,h]=o.useState(false),f=o.useCallback(u=>{u&&(p(u.canScrollPrev()),h(u.canScrollNext()));},[]),y=o.useCallback(()=>{e?.scrollPrev();},[e]),P=o.useCallback(()=>{e?.scrollNext();},[e]),g=o.useCallback(u=>{u.key==="ArrowLeft"?(u.preventDefault(),y()):u.key==="ArrowRight"&&(u.preventDefault(),P());},[y,P]);return o.useEffect(()=>{!e||!t||t(e);},[e,t]),o.useEffect(()=>{if(e)return f(e),e.on("reInit",f),e.on("select",f),()=>{e?.off("select",f);}},[e,f]),jsx(R.Provider,{value:{carouselRef:C,api:e,opts:a,orientation:r||(a?.axis==="y"?"vertical":"horizontal"),scrollPrev:y,scrollNext:P,canScrollPrev:c,canScrollNext:S},children:jsx("div",{"aria-roledescription":"carousel",className:cn("relative",i),"data-slot":"carousel",role:"region",onKeyDownCapture:g,...v,children:n})})}function B({className:r,...a}){let{carouselRef:t}=m();return jsx("div",{ref:t,className:"overflow-hidden","data-slot":"carousel-content",children:jsx("div",{className:cn("flex",r),...a})})}function U({className:r,...a}){return jsx("div",{"aria-roledescription":"slide",className:cn("min-w-0 shrink-0 grow-0 basis-full",r),"data-slot":"carousel-item",role:"group",...a})}function L({className:r,children:a,...t}){let{orientation:l,scrollPrev:i,canScrollPrev:n}=m();return jsx(b,{"aria-label":"Previous slide",className:cn("absolute size-9 rounded-full p-0 data-[icon]:size-9 [&_svg]:size-4","transition-all duration-200 hover:scale-105","disabled:cursor-not-allowed disabled:hover:scale-100",l==="horizontal"?"top-1/2 left-6 -translate-y-1/2":"top-6 left-1/2 -translate-x-1/2 rotate-90",r),"data-slot":"carousel-previous",disabled:!n,icon:true,onClick:i,size:"md",variant:"secondary",...t,children:a||jsxs(Fragment,{children:[jsx(ArrowLeft,{}),jsx("span",{className:"sr-only",children:"Previous slide"})]})})}function K({className:r,children:a,...t}){let{orientation:l,scrollNext:i,canScrollNext:n}=m();return jsx(b,{"aria-label":"Next slide",className:cn("absolute size-9 rounded-full p-0 data-[icon]:size-9 [&_svg]:size-4","transition-all duration-200 hover:scale-105","disabled:cursor-not-allowed disabled:hover:scale-100",l==="horizontal"?"top-1/2 right-6 -translate-y-1/2":"bottom-6 left-1/2 -translate-x-1/2 rotate-90",r),"data-slot":"carousel-next",disabled:!n,icon:true,onClick:i,size:"md",variant:"secondary",...t,children:a||jsxs(Fragment,{children:[jsx(ArrowRight,{}),jsx("span",{className:"sr-only",children:"Next slide"})]})})}function _({className:r,...a}){let{api:t}=m(),[l,i]=o.useState(0),[n,v]=o.useState([]),C=o.useCallback(c=>{c&&v(c.scrollSnapList());},[]),e=o.useCallback(c=>{c&&i(c.selectedScrollSnap());},[]);return o.useEffect(()=>{if(t)return C(t),e(t),t.on("reInit",C),t.on("reInit",e),t.on("select",e),()=>{t?.off("select",e);}},[t,C,e]),n.length<=1?null:jsx("div",{className:cn("flex items-center justify-center gap-1.5",r),...a,children:n.map((c,p)=>jsx("button",{"aria-label":`Go to slide ${p+1}`,className:cn("h-1 rounded-full transition-all duration-300",p===l?"w-4 bg-fg-primary":"w-2 bg-fg-tertiary hover:bg-fg-secondary"),"data-selected":p===l,"data-slot":"carousel-dot",onClick:()=>t?.scrollTo(p)},p))})}export{T as a,B as b,U as c,L as d,K as e,_ as f};//# sourceMappingURL=chunk-KUOFW7JO.js.map
2
- //# sourceMappingURL=chunk-KUOFW7JO.js.map
1
+ import {b}from'./chunk-DQGZIFNP.js';import*as o from'react';import w from'embla-carousel-react';import {ArrowLeft,ArrowRight}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var R=o.createContext(null);function m(){let r=o.useContext(R);if(!r)throw new Error("useCarousel must be used within a <Carousel />");return r}function T({orientation:r="horizontal",opts:a,setApi:t,plugins:l,className:i,children:n,...v}){let[C,e]=w({...a,axis:r==="horizontal"?"x":"y"},l),[c,p]=o.useState(false),[S,h]=o.useState(false),f=o.useCallback(u=>{u&&(p(u.canScrollPrev()),h(u.canScrollNext()));},[]),y=o.useCallback(()=>{e?.scrollPrev();},[e]),P=o.useCallback(()=>{e?.scrollNext();},[e]),g=o.useCallback(u=>{u.key==="ArrowLeft"?(u.preventDefault(),y()):u.key==="ArrowRight"&&(u.preventDefault(),P());},[y,P]);return o.useEffect(()=>{!e||!t||t(e);},[e,t]),o.useEffect(()=>{if(e)return f(e),e.on("reInit",f),e.on("select",f),()=>{e?.off("select",f);}},[e,f]),jsx(R.Provider,{value:{carouselRef:C,api:e,opts:a,orientation:r||(a?.axis==="y"?"vertical":"horizontal"),scrollPrev:y,scrollNext:P,canScrollPrev:c,canScrollNext:S},children:jsx("div",{"aria-roledescription":"carousel",className:cn("relative",i),"data-slot":"carousel",role:"region",onKeyDownCapture:g,...v,children:n})})}function B({className:r,...a}){let{carouselRef:t}=m();return jsx("div",{ref:t,className:"overflow-hidden","data-slot":"carousel-content",children:jsx("div",{className:cn("flex",r),...a})})}function U({className:r,...a}){return jsx("div",{"aria-roledescription":"slide",className:cn("min-w-0 shrink-0 grow-0 basis-full",r),"data-slot":"carousel-item",role:"group",...a})}function L({className:r,children:a,...t}){let{orientation:l,scrollPrev:i,canScrollPrev:n}=m();return jsx(b,{"aria-label":"Previous slide",className:cn("absolute size-9 rounded-full p-0 data-[icon]:size-9 [&_svg]:size-4","transition-all duration-200 hover:scale-105","disabled:cursor-not-allowed disabled:hover:scale-100",l==="horizontal"?"top-1/2 left-6 -translate-y-1/2":"top-6 left-1/2 -translate-x-1/2 rotate-90",r),"data-slot":"carousel-previous",disabled:!n,icon:true,onClick:i,size:"md",variant:"secondary",...t,children:a||jsxs(Fragment,{children:[jsx(ArrowLeft,{}),jsx("span",{className:"sr-only",children:"Previous slide"})]})})}function K({className:r,children:a,...t}){let{orientation:l,scrollNext:i,canScrollNext:n}=m();return jsx(b,{"aria-label":"Next slide",className:cn("absolute size-9 rounded-full p-0 data-[icon]:size-9 [&_svg]:size-4","transition-all duration-200 hover:scale-105","disabled:cursor-not-allowed disabled:hover:scale-100",l==="horizontal"?"top-1/2 right-6 -translate-y-1/2":"bottom-6 left-1/2 -translate-x-1/2 rotate-90",r),"data-slot":"carousel-next",disabled:!n,icon:true,onClick:i,size:"md",variant:"secondary",...t,children:a||jsxs(Fragment,{children:[jsx(ArrowRight,{}),jsx("span",{className:"sr-only",children:"Next slide"})]})})}function _({className:r,...a}){let{api:t}=m(),[l,i]=o.useState(0),[n,v]=o.useState([]),C=o.useCallback(c=>{c&&v(c.scrollSnapList());},[]),e=o.useCallback(c=>{c&&i(c.selectedScrollSnap());},[]);return o.useEffect(()=>{if(t)return C(t),e(t),t.on("reInit",C),t.on("reInit",e),t.on("select",e),()=>{t?.off("select",e);}},[t,C,e]),n.length<=1?null:jsx("div",{className:cn("flex items-center justify-center gap-1.5",r),...a,children:n.map((c,p)=>jsx("button",{"aria-label":`Go to slide ${p+1}`,className:cn("h-1 rounded-full transition-all duration-300",p===l?"w-4 bg-fg-primary":"w-2 bg-fg-tertiary hover:bg-fg-secondary"),"data-selected":p===l,"data-slot":"carousel-dot",onClick:()=>t?.scrollTo(p)},p))})}export{T as a,B as b,U as c,L as d,K as e,_ as f};//# sourceMappingURL=chunk-B5LYJTBB.js.map
2
+ //# sourceMappingURL=chunk-B5LYJTBB.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/carousel.tsx"],"names":["CarouselContext","useCarousel","context","Carousel","orientation","opts","setApi","plugins","className","children","props","carouselRef","api","useEmblaCarousel","canScrollPrev","setCanScrollPrev","canScrollNext","setCanScrollNext","onSelect","scrollPrev","scrollNext","handleKeyDown","event","jsx","cn","CarouselContent","CarouselItem","CarouselPrevious","Button","jsxs","Fragment","ArrowLeft","CarouselNext","ArrowRight","CarouselDots","selectedIndex","setSelectedIndex","scrollSnaps","setScrollSnaps","onInit","_","index"],"mappings":"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","file":"chunk-KUOFW7JO.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport useEmblaCarousel, { type UseEmblaCarouselType } from \"embla-carousel-react\"\r\nimport { ArrowLeft, ArrowRight } from \"lucide-react\"\r\n\r\nimport { Button } from \"./button\"\r\nimport { cn } from \"@xploreu/lib/cn\"\r\n\r\ntype CarouselApi = UseEmblaCarouselType[1]\r\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\r\ntype CarouselOptions = UseCarouselParameters[0]\r\ntype CarouselPlugin = UseCarouselParameters[1]\r\n\r\ntype CarouselProps = {\r\n opts?: CarouselOptions\r\n plugins?: CarouselPlugin\r\n orientation?: \"horizontal\" | \"vertical\"\r\n setApi?: (api: CarouselApi) => void\r\n}\r\n\r\ntype CarouselContextProps = {\r\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\r\n api: ReturnType<typeof useEmblaCarousel>[1]\r\n scrollPrev: () => void\r\n scrollNext: () => void\r\n canScrollPrev: boolean\r\n canScrollNext: boolean\r\n} & CarouselProps\r\n\r\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\r\n\r\nfunction useCarousel() {\r\n const context = React.useContext(CarouselContext)\r\n\r\n if (!context) {\r\n throw new Error(\"useCarousel must be used within a <Carousel />\")\r\n }\r\n\r\n return context\r\n}\r\n\r\nfunction Carousel({\r\n orientation = \"horizontal\",\r\n opts,\r\n setApi,\r\n plugins,\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & CarouselProps) {\r\n const [carouselRef, api] = useEmblaCarousel(\r\n {\r\n ...opts,\r\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\r\n },\r\n plugins\r\n )\r\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\r\n const [canScrollNext, setCanScrollNext] = React.useState(false)\r\n\r\n const onSelect = React.useCallback((api: CarouselApi) => {\r\n if (!api) return\r\n setCanScrollPrev(api.canScrollPrev())\r\n setCanScrollNext(api.canScrollNext())\r\n }, [])\r\n\r\n const scrollPrev = React.useCallback(() => {\r\n api?.scrollPrev()\r\n }, [api])\r\n\r\n const scrollNext = React.useCallback(() => {\r\n api?.scrollNext()\r\n }, [api])\r\n\r\n const handleKeyDown = React.useCallback(\r\n (event: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (event.key === \"ArrowLeft\") {\r\n event.preventDefault()\r\n scrollPrev()\r\n } else if (event.key === \"ArrowRight\") {\r\n event.preventDefault()\r\n scrollNext()\r\n }\r\n },\r\n [scrollPrev, scrollNext]\r\n )\r\n\r\n React.useEffect(() => {\r\n if (!api || !setApi) return\r\n setApi(api)\r\n }, [api, setApi])\r\n\r\n React.useEffect(() => {\r\n if (!api) return\r\n onSelect(api)\r\n api.on(\"reInit\", onSelect)\r\n api.on(\"select\", onSelect)\r\n\r\n return () => {\r\n api?.off(\"select\", onSelect)\r\n }\r\n }, [api, onSelect])\r\n\r\n return (\r\n <CarouselContext.Provider\r\n value={{\r\n carouselRef,\r\n api,\r\n opts,\r\n orientation:\r\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\r\n scrollPrev,\r\n scrollNext,\r\n canScrollPrev,\r\n canScrollNext,\r\n }}\r\n >\r\n <div\r\n aria-roledescription=\"carousel\"\r\n className={cn(\"relative\", className)}\r\n data-slot=\"carousel\"\r\n role=\"region\"\r\n onKeyDownCapture={handleKeyDown}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n </CarouselContext.Provider>\r\n )\r\n}\r\n\r\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\r\n const { carouselRef } = useCarousel()\r\n\r\n return (\r\n <div ref={carouselRef} className=\"overflow-hidden\" data-slot=\"carousel-content\">\r\n <div className={cn(\"flex\", className)} {...props} />\r\n </div>\r\n )\r\n}\r\n\r\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n aria-roledescription=\"slide\"\r\n className={cn(\"min-w-0 shrink-0 grow-0 basis-full\", className)}\r\n data-slot=\"carousel-item\"\r\n role=\"group\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype CarouselPreviousProps = React.ComponentProps<typeof Button>\r\n\r\nfunction CarouselPrevious({\r\n className,\r\n children,\r\n ...props\r\n}: CarouselPreviousProps) {\r\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\r\n\r\n return (\r\n <Button\r\n aria-label=\"Previous slide\"\r\n className={cn(\r\n \"absolute size-9 rounded-full p-0 data-[icon]:size-9 [&_svg]:size-4\",\r\n \"transition-all duration-200 hover:scale-105\",\r\n \"disabled:cursor-not-allowed disabled:hover:scale-100\",\r\n orientation === \"horizontal\"\r\n ? \"top-1/2 left-6 -translate-y-1/2\"\r\n : \"top-6 left-1/2 -translate-x-1/2 rotate-90\",\r\n className,\r\n )}\r\n data-slot=\"carousel-previous\"\r\n disabled={!canScrollPrev}\r\n icon\r\n onClick={scrollPrev}\r\n size=\"md\"\r\n variant=\"secondary\"\r\n {...props}\r\n >\r\n {children || (\r\n <>\r\n <ArrowLeft />\r\n <span className=\"sr-only\">Previous slide</span>\r\n </>\r\n )}\r\n </Button>\r\n )\r\n}\r\n\r\ntype CarouselNextProps = React.ComponentProps<typeof Button>\r\n\r\nfunction CarouselNext({\r\n className,\r\n children,\r\n ...props\r\n}: CarouselNextProps) {\r\n const { orientation, scrollNext, canScrollNext } = useCarousel()\r\n\r\n return (\r\n <Button\r\n aria-label=\"Next slide\"\r\n className={cn(\r\n \"absolute size-9 rounded-full p-0 data-[icon]:size-9 [&_svg]:size-4\",\r\n \"transition-all duration-200 hover:scale-105\",\r\n \"disabled:cursor-not-allowed disabled:hover:scale-100\",\r\n orientation === \"horizontal\"\r\n ? \"top-1/2 right-6 -translate-y-1/2\"\r\n : \"bottom-6 left-1/2 -translate-x-1/2 rotate-90\",\r\n className,\r\n )}\r\n data-slot=\"carousel-next\"\r\n disabled={!canScrollNext}\r\n icon\r\n onClick={scrollNext}\r\n size=\"md\"\r\n variant=\"secondary\"\r\n {...props}\r\n >\r\n {children || (\r\n <>\r\n <ArrowRight />\r\n <span className=\"sr-only\">Next slide</span>\r\n </>\r\n )}\r\n </Button>\r\n )\r\n}\r\n\r\nfunction CarouselDots({ className, ...props }: React.ComponentProps<\"div\">) {\r\n const { api } = useCarousel()\r\n const [selectedIndex, setSelectedIndex] = React.useState(0)\r\n const [scrollSnaps, setScrollSnaps] = React.useState<number[]>([])\r\n\r\n const onInit = React.useCallback((api: CarouselApi) => {\r\n if (!api) return\r\n setScrollSnaps(api.scrollSnapList())\r\n }, [])\r\n\r\n const onSelect = React.useCallback((api: CarouselApi) => {\r\n if (!api) return\r\n setSelectedIndex(api.selectedScrollSnap())\r\n }, [])\r\n\r\n React.useEffect(() => {\r\n if (!api) return\r\n\r\n onInit(api)\r\n onSelect(api)\r\n\r\n api.on(\"reInit\", onInit)\r\n api.on(\"reInit\", onSelect)\r\n api.on(\"select\", onSelect)\r\n\r\n return () => {\r\n api?.off(\"select\", onSelect)\r\n }\r\n }, [api, onInit, onSelect])\r\n\r\n if (scrollSnaps.length <= 1) return null\r\n\r\n return (\r\n <div\r\n className={cn(\"flex items-center justify-center gap-1.5\", className)}\r\n {...props}\r\n >\r\n {scrollSnaps.map((_, index) => (\r\n <button\r\n key={index}\r\n aria-label={`Go to slide ${index + 1}`}\r\n className={cn(\r\n \"h-1 rounded-full transition-all duration-300\",\r\n index === selectedIndex\r\n ? \"w-4 bg-fg-primary\"\r\n : \"w-2 bg-fg-tertiary hover:bg-fg-secondary\",\r\n )}\r\n data-selected={index === selectedIndex}\r\n data-slot=\"carousel-dot\"\r\n onClick={() => api?.scrollTo(index)}\r\n />\r\n ))}\r\n </div>\r\n )\r\n}\r\n\r\nexport {\r\n Carousel,\r\n CarouselContent,\r\n CarouselDots,\r\n CarouselItem,\r\n CarouselNext,\r\n CarouselPrevious,\r\n type CarouselApi,\r\n type CarouselProps,\r\n type CarouselContextProps,\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/ui/carousel.tsx"],"names":["CarouselContext","useCarousel","context","Carousel","orientation","opts","setApi","plugins","className","children","props","carouselRef","api","useEmblaCarousel","canScrollPrev","setCanScrollPrev","canScrollNext","setCanScrollNext","onSelect","scrollPrev","scrollNext","handleKeyDown","event","jsx","cn","CarouselContent","CarouselItem","CarouselPrevious","Button","jsxs","Fragment","ArrowLeft","CarouselNext","ArrowRight","CarouselDots","selectedIndex","setSelectedIndex","scrollSnaps","setScrollSnaps","onInit","_","index"],"mappings":"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","file":"chunk-B5LYJTBB.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport useEmblaCarousel, { type UseEmblaCarouselType } from \"embla-carousel-react\"\r\nimport { ArrowLeft, ArrowRight } from \"lucide-react\"\r\n\r\nimport { Button } from \"./button\"\r\nimport { cn } from \"@xploreu/lib/cn\"\r\n\r\ntype CarouselApi = UseEmblaCarouselType[1]\r\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\r\ntype CarouselOptions = UseCarouselParameters[0]\r\ntype CarouselPlugin = UseCarouselParameters[1]\r\n\r\ntype CarouselProps = {\r\n opts?: CarouselOptions\r\n plugins?: CarouselPlugin\r\n orientation?: \"horizontal\" | \"vertical\"\r\n setApi?: (api: CarouselApi) => void\r\n}\r\n\r\ntype CarouselContextProps = {\r\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\r\n api: ReturnType<typeof useEmblaCarousel>[1]\r\n scrollPrev: () => void\r\n scrollNext: () => void\r\n canScrollPrev: boolean\r\n canScrollNext: boolean\r\n} & CarouselProps\r\n\r\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\r\n\r\nfunction useCarousel() {\r\n const context = React.useContext(CarouselContext)\r\n\r\n if (!context) {\r\n throw new Error(\"useCarousel must be used within a <Carousel />\")\r\n }\r\n\r\n return context\r\n}\r\n\r\nfunction Carousel({\r\n orientation = \"horizontal\",\r\n opts,\r\n setApi,\r\n plugins,\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & CarouselProps) {\r\n const [carouselRef, api] = useEmblaCarousel(\r\n {\r\n ...opts,\r\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\r\n },\r\n plugins\r\n )\r\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\r\n const [canScrollNext, setCanScrollNext] = React.useState(false)\r\n\r\n const onSelect = React.useCallback((api: CarouselApi) => {\r\n if (!api) return\r\n setCanScrollPrev(api.canScrollPrev())\r\n setCanScrollNext(api.canScrollNext())\r\n }, [])\r\n\r\n const scrollPrev = React.useCallback(() => {\r\n api?.scrollPrev()\r\n }, [api])\r\n\r\n const scrollNext = React.useCallback(() => {\r\n api?.scrollNext()\r\n }, [api])\r\n\r\n const handleKeyDown = React.useCallback(\r\n (event: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (event.key === \"ArrowLeft\") {\r\n event.preventDefault()\r\n scrollPrev()\r\n } else if (event.key === \"ArrowRight\") {\r\n event.preventDefault()\r\n scrollNext()\r\n }\r\n },\r\n [scrollPrev, scrollNext]\r\n )\r\n\r\n React.useEffect(() => {\r\n if (!api || !setApi) return\r\n setApi(api)\r\n }, [api, setApi])\r\n\r\n React.useEffect(() => {\r\n if (!api) return\r\n onSelect(api)\r\n api.on(\"reInit\", onSelect)\r\n api.on(\"select\", onSelect)\r\n\r\n return () => {\r\n api?.off(\"select\", onSelect)\r\n }\r\n }, [api, onSelect])\r\n\r\n return (\r\n <CarouselContext.Provider\r\n value={{\r\n carouselRef,\r\n api,\r\n opts,\r\n orientation:\r\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\r\n scrollPrev,\r\n scrollNext,\r\n canScrollPrev,\r\n canScrollNext,\r\n }}\r\n >\r\n <div\r\n aria-roledescription=\"carousel\"\r\n className={cn(\"relative\", className)}\r\n data-slot=\"carousel\"\r\n role=\"region\"\r\n onKeyDownCapture={handleKeyDown}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n </CarouselContext.Provider>\r\n )\r\n}\r\n\r\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\r\n const { carouselRef } = useCarousel()\r\n\r\n return (\r\n <div ref={carouselRef} className=\"overflow-hidden\" data-slot=\"carousel-content\">\r\n <div className={cn(\"flex\", className)} {...props} />\r\n </div>\r\n )\r\n}\r\n\r\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n aria-roledescription=\"slide\"\r\n className={cn(\"min-w-0 shrink-0 grow-0 basis-full\", className)}\r\n data-slot=\"carousel-item\"\r\n role=\"group\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype CarouselPreviousProps = React.ComponentProps<typeof Button>\r\n\r\nfunction CarouselPrevious({\r\n className,\r\n children,\r\n ...props\r\n}: CarouselPreviousProps) {\r\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\r\n\r\n return (\r\n <Button\r\n aria-label=\"Previous slide\"\r\n className={cn(\r\n \"absolute size-9 rounded-full p-0 data-[icon]:size-9 [&_svg]:size-4\",\r\n \"transition-all duration-200 hover:scale-105\",\r\n \"disabled:cursor-not-allowed disabled:hover:scale-100\",\r\n orientation === \"horizontal\"\r\n ? \"top-1/2 left-6 -translate-y-1/2\"\r\n : \"top-6 left-1/2 -translate-x-1/2 rotate-90\",\r\n className,\r\n )}\r\n data-slot=\"carousel-previous\"\r\n disabled={!canScrollPrev}\r\n icon\r\n onClick={scrollPrev}\r\n size=\"md\"\r\n variant=\"secondary\"\r\n {...props}\r\n >\r\n {children || (\r\n <>\r\n <ArrowLeft />\r\n <span className=\"sr-only\">Previous slide</span>\r\n </>\r\n )}\r\n </Button>\r\n )\r\n}\r\n\r\ntype CarouselNextProps = React.ComponentProps<typeof Button>\r\n\r\nfunction CarouselNext({\r\n className,\r\n children,\r\n ...props\r\n}: CarouselNextProps) {\r\n const { orientation, scrollNext, canScrollNext } = useCarousel()\r\n\r\n return (\r\n <Button\r\n aria-label=\"Next slide\"\r\n className={cn(\r\n \"absolute size-9 rounded-full p-0 data-[icon]:size-9 [&_svg]:size-4\",\r\n \"transition-all duration-200 hover:scale-105\",\r\n \"disabled:cursor-not-allowed disabled:hover:scale-100\",\r\n orientation === \"horizontal\"\r\n ? \"top-1/2 right-6 -translate-y-1/2\"\r\n : \"bottom-6 left-1/2 -translate-x-1/2 rotate-90\",\r\n className,\r\n )}\r\n data-slot=\"carousel-next\"\r\n disabled={!canScrollNext}\r\n icon\r\n onClick={scrollNext}\r\n size=\"md\"\r\n variant=\"secondary\"\r\n {...props}\r\n >\r\n {children || (\r\n <>\r\n <ArrowRight />\r\n <span className=\"sr-only\">Next slide</span>\r\n </>\r\n )}\r\n </Button>\r\n )\r\n}\r\n\r\nfunction CarouselDots({ className, ...props }: React.ComponentProps<\"div\">) {\r\n const { api } = useCarousel()\r\n const [selectedIndex, setSelectedIndex] = React.useState(0)\r\n const [scrollSnaps, setScrollSnaps] = React.useState<number[]>([])\r\n\r\n const onInit = React.useCallback((api: CarouselApi) => {\r\n if (!api) return\r\n setScrollSnaps(api.scrollSnapList())\r\n }, [])\r\n\r\n const onSelect = React.useCallback((api: CarouselApi) => {\r\n if (!api) return\r\n setSelectedIndex(api.selectedScrollSnap())\r\n }, [])\r\n\r\n React.useEffect(() => {\r\n if (!api) return\r\n\r\n onInit(api)\r\n onSelect(api)\r\n\r\n api.on(\"reInit\", onInit)\r\n api.on(\"reInit\", onSelect)\r\n api.on(\"select\", onSelect)\r\n\r\n return () => {\r\n api?.off(\"select\", onSelect)\r\n }\r\n }, [api, onInit, onSelect])\r\n\r\n if (scrollSnaps.length <= 1) return null\r\n\r\n return (\r\n <div\r\n className={cn(\"flex items-center justify-center gap-1.5\", className)}\r\n {...props}\r\n >\r\n {scrollSnaps.map((_, index) => (\r\n <button\r\n key={index}\r\n aria-label={`Go to slide ${index + 1}`}\r\n className={cn(\r\n \"h-1 rounded-full transition-all duration-300\",\r\n index === selectedIndex\r\n ? \"w-4 bg-fg-primary\"\r\n : \"w-2 bg-fg-tertiary hover:bg-fg-secondary\",\r\n )}\r\n data-selected={index === selectedIndex}\r\n data-slot=\"carousel-dot\"\r\n onClick={() => api?.scrollTo(index)}\r\n />\r\n ))}\r\n </div>\r\n )\r\n}\r\n\r\nexport {\r\n Carousel,\r\n CarouselContent,\r\n CarouselDots,\r\n CarouselItem,\r\n CarouselNext,\r\n CarouselPrevious,\r\n type CarouselApi,\r\n type CarouselProps,\r\n type CarouselContextProps,\r\n}\r\n"]}
@@ -1,2 +1,2 @@
1
- import {a,b as b$1,j,i,k,l,m,q,s,w,x,H}from'./chunk-RHWRIE3E.js';import {g}from'./chunk-HHG7BSWN.js';import {b}from'./chunk-Y6TKCAAJ.js';import*as r from'react';import {cn}from'@xploreu/lib/cn';import {SearchIcon,XIcon}from'lucide-react';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function ee({multiple:B=true,inputPlaceholder:q$1="Search...",container:A,items:u,infiniteScroll:H$1,isPending:U,taggable:b$2=false,maxVisible:i$1,...m$1}){let[h,x$1]=useControlledState({value:m$1?.inputValue?.toString(),defaultValue:m$1?.defaultInputValue?.toString(),onChange:m$1?.onInputValueChange}),[c,g$1]=useControlledState({value:m$1?.value??[],defaultValue:m$1?.defaultValue??[],onChange:m$1?.onValueChange}),[v,I]=r.useState([]),p=r.useRef(new Set);r.useEffect(()=>{let e=new Set(c.map(t=>t.value));I(t=>{let l=t.filter(a=>e.has(a.value));return l.length===t.length?t:(p.current=new Set(l.map(a=>a.value)),l)});},[c]);let n=h?.toString().trim()??"",X=r.useMemo(()=>n?c.some(e=>e.value.toLowerCase()===n.toLowerCase()):false,[n,c]),C=r.useMemo(()=>!b$2||!n?false:!u?.some(e=>e.label.toLowerCase()===n.toLowerCase()),[b$2,n,u]),D=r.useMemo(()=>{let e=[...u??[],...v];if(C){let t={label:n,value:n,tag:true};return [...e,t]}return e},[u,v,C,n]);return jsxs(a,{...m$1,behavior:"chip-outside",multiple:true,items:b$2?D:u,isItemEqualToValue:(e,t)=>e.value===t.value,onValueChange:(e,t)=>{if(b$2){let l=e.filter(a=>a?.tag===true&&!p.current.has(a.value));if(l.length>0){for(let a of l)p.current.add(a.value);I(a=>[...a,...l]);}}g$1(B?e:[e[e.length-1]],t);},onInputValueChange:x$1,children:[jsxs("div",{className:"flex flex-col gap-2",children:[jsx(g,{render:jsx(b,{className:"h-9 text-body-regular-3 pl-9 pr-7",endContent:jsx(b$1,{nativeButton:false,render:jsx(XIcon,{className:"!size-5 !right-1.5 data-[hidden=true]:opacity-0 opacity-100 transition-opacity duration-300 cursor-pointer","data-hidden":!h,"data-slot":"combobox-clear-input",onClick:e=>{x$1("",{reason:"none",event:e.nativeEvent,cancel:()=>{},allowPropagation:()=>{},isCanceled:false,isPropagationAllowed:true,trigger:void 0});}})}),placeholder:q$1,startContent:jsx(SearchIcon,{className:"!size-4 !text-fg-tertiary-hover"}),wrapperClassName:"w-full"})}),jsx(j,{className:cn(i$1!==void 0&&"flex-nowrap overflow-hidden"),onMouseDown:e=>e.preventBaseUIHandler(),children:jsx(i,{children:e=>{let t=i$1!==void 0?e.slice(0,i$1):e,l$1=i$1!==void 0?e.length-i$1:0;return jsxs(Fragment,{children:[t?.map(a=>jsxs(k,{className:cn(i$1!==void 0&&"min-w-0 shrink"),children:[i$1!==void 0?jsx("span",{className:"truncate",children:a?.label||""}):a?.label||"",jsx(l,{})]},a?.value||"")),l$1>0&&jsxs(k,{className:"shrink-0",children:["+",l$1]})]})}})})]}),jsxs(m,{container:A,children:[jsx(q,{status:U||u===void 0?"pending":u?.length===0&&!C?"empty":null}),jsxs(s,{children:[u?.map(e=>jsx(w,{value:{label:e.label,value:e.value},children:jsx(x,{children:e.label})},e.value)),C&&jsx(w,{value:{label:n,value:n,tag:true},children:jsxs("div",{className:"flex items-center gap-1.5 w-full min-w-0",children:[!X&&jsx("span",{className:"text-text-secondary",children:"Create:"}),jsx("span",{className:"font-medium text-text-primary truncate",children:n})]})}),jsx(H,{...H$1})]})]})]})}export{ee as a};//# sourceMappingURL=chunk-YNJZ2P52.js.map
2
- //# sourceMappingURL=chunk-YNJZ2P52.js.map
1
+ import {a,b as b$1,j,i,k,l,m,q,s,w,x,H}from'./chunk-SVNG3RLD.js';import {g}from'./chunk-HHG7BSWN.js';import {b}from'./chunk-Y6TKCAAJ.js';import*as r from'react';import {cn}from'@xploreu/lib/cn';import {SearchIcon,XIcon}from'lucide-react';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function ee({multiple:B=true,inputPlaceholder:q$1="Search...",container:A,items:u,infiniteScroll:H$1,isPending:U,taggable:b$2=false,maxVisible:i$1,...m$1}){let[h,x$1]=useControlledState({value:m$1?.inputValue?.toString(),defaultValue:m$1?.defaultInputValue?.toString(),onChange:m$1?.onInputValueChange}),[c,g$1]=useControlledState({value:m$1?.value??[],defaultValue:m$1?.defaultValue??[],onChange:m$1?.onValueChange}),[v,I]=r.useState([]),p=r.useRef(new Set);r.useEffect(()=>{let e=new Set(c.map(t=>t.value));I(t=>{let l=t.filter(a=>e.has(a.value));return l.length===t.length?t:(p.current=new Set(l.map(a=>a.value)),l)});},[c]);let n=h?.toString().trim()??"",X=r.useMemo(()=>n?c.some(e=>e.value.toLowerCase()===n.toLowerCase()):false,[n,c]),C=r.useMemo(()=>!b$2||!n?false:!u?.some(e=>e.label.toLowerCase()===n.toLowerCase()),[b$2,n,u]),D=r.useMemo(()=>{let e=[...u??[],...v];if(C){let t={label:n,value:n,tag:true};return [...e,t]}return e},[u,v,C,n]);return jsxs(a,{...m$1,behavior:"chip-outside",multiple:true,items:b$2?D:u,isItemEqualToValue:(e,t)=>e.value===t.value,onValueChange:(e,t)=>{if(b$2){let l=e.filter(a=>a?.tag===true&&!p.current.has(a.value));if(l.length>0){for(let a of l)p.current.add(a.value);I(a=>[...a,...l]);}}g$1(B?e:[e[e.length-1]],t);},onInputValueChange:x$1,children:[jsxs("div",{className:"flex flex-col gap-2",children:[jsx(g,{render:jsx(b,{className:"h-9 text-body-regular-3 pl-9 pr-7",endContent:jsx(b$1,{nativeButton:false,render:jsx(XIcon,{className:"!size-5 !right-1.5 data-[hidden=true]:opacity-0 opacity-100 transition-opacity duration-300 cursor-pointer","data-hidden":!h,"data-slot":"combobox-clear-input",onClick:e=>{x$1("",{reason:"none",event:e.nativeEvent,cancel:()=>{},allowPropagation:()=>{},isCanceled:false,isPropagationAllowed:true,trigger:void 0});}})}),placeholder:q$1,startContent:jsx(SearchIcon,{className:"!size-4 !text-fg-tertiary-hover"}),wrapperClassName:"w-full"})}),jsx(j,{className:cn(i$1!==void 0&&"flex-nowrap overflow-hidden"),onMouseDown:e=>e.preventBaseUIHandler(),children:jsx(i,{children:e=>{let t=i$1!==void 0?e.slice(0,i$1):e,l$1=i$1!==void 0?e.length-i$1:0;return jsxs(Fragment,{children:[t?.map(a=>jsxs(k,{className:cn(i$1!==void 0&&"min-w-0 shrink"),children:[i$1!==void 0?jsx("span",{className:"truncate",children:a?.label||""}):a?.label||"",jsx(l,{})]},a?.value||"")),l$1>0&&jsxs(k,{className:"shrink-0",children:["+",l$1]})]})}})})]}),jsxs(m,{container:A,children:[jsx(q,{status:U||u===void 0?"pending":u?.length===0&&!C?"empty":null}),jsxs(s,{children:[u?.map(e=>jsx(w,{value:{label:e.label,value:e.value},children:jsx(x,{children:e.label})},e.value)),C&&jsx(w,{value:{label:n,value:n,tag:true},children:jsxs("div",{className:"flex items-center gap-1.5 w-full min-w-0",children:[!X&&jsx("span",{className:"text-text-secondary",children:"Create:"}),jsx("span",{className:"font-medium text-text-primary truncate",children:n})]})}),jsx(H,{...H$1})]})]})]})}export{ee as a};//# sourceMappingURL=chunk-C5HZCXIB.js.map
2
+ //# sourceMappingURL=chunk-C5HZCXIB.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/composites/combobox-chip-outside.tsx"],"names":["ComboboxChipOutside","multiple","inputPlaceholder","container","items","infiniteScroll","isPending","taggable","maxVisible","props","inputValue","setInputValue","useControlledState","value","setValue","createdItems","setCreatedItems","createdValuesRef","currentValues","v","prev","next","item","trimmedInput","isInputSelected","isCreatingItem","combinedItems","base","createItem","jsxs","Combobox","a","b","eventDetails","newTags","tag","jsx","ComboboxInput","Input","ComboboxTrigger","XIcon","event","SearchIcon","ComboboxChips","cn","ComboboxValue","visible","overflow","Fragment","ComboboxChip","ComboboxChipRemove","ComboboxPopup","ComboboxStatus","ComboboxList","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll"],"mappings":"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","file":"chunk-YNJZ2P52.js","sourcesContent":["import * as React from \"react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { ComboboxInput as ComboboxInputPrimitive } from \"../primitives/combobox\"\r\nimport { Input } from \"../ui\"\r\nimport {\r\n Combobox,\r\n ComboboxChip,\r\n ComboboxChipRemove,\r\n ComboboxChips,\r\n ComboboxInfiniteScroll,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxPortal,\r\n ComboboxPopup,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n ComboboxValue,\r\n type ComboboxProps,\r\n ComboboxItemTitle\r\n} from \"../ui/combobox\"\r\nimport { SearchIcon, XIcon } from \"lucide-react\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\n\r\ntype ComboboxChipOutsideProps<Value> = Omit<ComboboxProps<Value, true>, \"multiple\"> & {\r\n multiple?: boolean\r\n inputPlaceholder?: string\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n items: ({ label: string; value: string }[]) | undefined\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n isPending?: boolean\r\n /**\r\n * When true, enables creatable / taggable mode.\r\n * If the typed value has no exact match in the current item list,\r\n * a \"Create \\\"…\\\"\" option is shown at the top of the dropdown.\r\n * Created items are appended to the value with `{ label, value, tag: true }`.\r\n */\r\n taggable?: boolean\r\n /**\r\n * Maximum number of chips to show before collapsing the rest into a \"+N\" chip.\r\n * When undefined, all chips are shown.\r\n */\r\n maxVisible?: number\r\n}\r\n\r\nfunction ComboboxChipOutside<Value extends { label: string; value: string; tag?: true }>({\r\n multiple = true,\r\n inputPlaceholder = \"Search...\",\r\n container,\r\n items,\r\n infiniteScroll,\r\n isPending,\r\n taggable = false,\r\n maxVisible,\r\n ...props\r\n}: ComboboxChipOutsideProps<Value>) {\r\n const [inputValue, setInputValue] = useControlledState({\r\n value: props?.inputValue?.toString(),\r\n defaultValue: props?.defaultInputValue?.toString(),\r\n onChange: props?.onInputValueChange,\r\n })\r\n\r\n const [value, setValue] = useControlledState({\r\n value: props?.value ?? [],\r\n defaultValue: props?.defaultValue ?? [],\r\n onChange: props?.onValueChange,\r\n })\r\n\r\n // Track items created via taggable mode\r\n // Sync with value to avoid stale tags when controlled value is reset from outside\r\n const [createdItems, setCreatedItems] = React.useState<Value[]>([])\r\n const createdValuesRef = React.useRef<Set<string>>(new Set())\r\n\r\n React.useEffect(() => {\r\n const currentValues = new Set(value.map((v) => v.value))\r\n setCreatedItems((prev) => {\r\n const next = prev.filter((item) => currentValues.has(item.value))\r\n if (next.length === prev.length) return prev\r\n createdValuesRef.current = new Set(next.map((v) => v.value))\r\n return next\r\n })\r\n }, [value])\r\n\r\n // Determine if the current input has no exact match in existing items\r\n const trimmedInput = inputValue?.toString().trim() ?? \"\"\r\n const isInputSelected = React.useMemo(() => {\r\n if (!trimmedInput) return false\r\n return value.some(\r\n (item) => item.value.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [trimmedInput, value])\r\n // true = show the taggable item in dropdown (either as \"Create:\" or as checked item)\r\n const isCreatingItem = React.useMemo(() => {\r\n if (!taggable || !trimmedInput) return false\r\n return !items?.some(\r\n (item) => item.label.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [taggable, trimmedInput, items])\r\n\r\n // Merge server items with locally created tags + the \"Create\" placeholder\r\n const combinedItems = React.useMemo(() => {\r\n const base: Value[] = [\r\n ...items ?? [],\r\n ...createdItems,\r\n ]\r\n\r\n if (isCreatingItem) {\r\n const createItem = {\r\n label: trimmedInput,\r\n value: trimmedInput,\r\n tag: true,\r\n }\r\n return [...base, createItem]\r\n }\r\n\r\n return base\r\n }, [items, createdItems, isCreatingItem, trimmedInput])\r\n\r\n const handleValueChange: ComboboxProps<Value, true>[\"onValueChange\"] = (value, eventDetails) => {\r\n // Capture newly created taggable items internally\r\n if (taggable) {\r\n const newTags = value.filter(\r\n (v) => v?.tag === true\r\n && !createdValuesRef.current.has(v.value)\r\n )\r\n if (newTags.length > 0) {\r\n for (const tag of newTags) {\r\n createdValuesRef.current.add(tag.value)\r\n }\r\n setCreatedItems((prev) => [...prev, ...newTags])\r\n }\r\n }\r\n\r\n // if multiple is false, we need to replace the value with the new value instead of adding to it\r\n if (!multiple) {\r\n setValue([value[value.length - 1]], eventDetails)\r\n } else {\r\n setValue(value, eventDetails)\r\n }\r\n }\r\n\r\n return (\r\n <Combobox\r\n {...props}\r\n behavior=\"chip-outside\"\r\n multiple\r\n items={taggable ? combinedItems : items}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n onValueChange={handleValueChange}\r\n onInputValueChange={setInputValue}\r\n >\r\n <div className=\"flex flex-col gap-2\">\r\n <ComboboxInputPrimitive\r\n render={\r\n <Input\r\n className=\"h-9 text-body-regular-3 pl-9 pr-7\"\r\n endContent={\r\n <ComboboxTrigger\r\n nativeButton={false}\r\n render={(\r\n <XIcon\r\n className=\"!size-5 !right-1.5 data-[hidden=true]:opacity-0 opacity-100 transition-opacity duration-300 cursor-pointer\"\r\n data-hidden={!inputValue}\r\n data-slot=\"combobox-clear-input\"\r\n onClick={(event) => {\r\n setInputValue(\"\", {\r\n reason: \"none\",\r\n event: event.nativeEvent,\r\n cancel: () => { },\r\n allowPropagation: () => { },\r\n isCanceled: false,\r\n isPropagationAllowed: true,\r\n trigger: undefined,\r\n })\r\n }}\r\n />\r\n )}\r\n />\r\n }\r\n placeholder={inputPlaceholder}\r\n startContent={<SearchIcon className=\"!size-4 !text-fg-tertiary-hover\" />}\r\n wrapperClassName=\"w-full\"\r\n />\r\n }\r\n />\r\n <ComboboxChips\r\n className={cn(maxVisible !== undefined && \"flex-nowrap overflow-hidden\")}\r\n onMouseDown={(e) => e.preventBaseUIHandler()}\r\n >\r\n <ComboboxValue>\r\n {(value: Value[]) => {\r\n const visible = maxVisible !== undefined ? value.slice(0, maxVisible) : value\r\n const overflow = maxVisible !== undefined ? value.length - maxVisible : 0\r\n return (\r\n <>\r\n {visible?.map((item) => (\r\n <ComboboxChip\r\n key={item?.value || \"\"}\r\n className={cn(maxVisible !== undefined && \"min-w-0 shrink\")}\r\n >\r\n {maxVisible !== undefined\r\n ? <span className=\"truncate\">{item?.label || \"\"}</span>\r\n : (item?.label || \"\")\r\n }\r\n <ComboboxChipRemove />\r\n </ComboboxChip>\r\n ))}\r\n {overflow > 0 && (\r\n <ComboboxChip className=\"shrink-0\">\r\n +{overflow}\r\n </ComboboxChip>\r\n )}\r\n </>\r\n )\r\n }}\r\n </ComboboxValue>\r\n </ComboboxChips>\r\n </div>\r\n <ComboboxPopup container={container}>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0 && !isCreatingItem\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem\r\n key={item.value}\r\n value={{ label: item.label, value: item.value }}\r\n >\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n ))}\r\n {isCreatingItem && (\r\n <ComboboxItem\r\n value={{ label: trimmedInput, value: trimmedInput, tag: true }}\r\n >\r\n <div className=\"flex items-center gap-1.5 w-full min-w-0\">\r\n {!isInputSelected && (\r\n <span className=\"text-text-secondary\">Create:</span>\r\n )}\r\n <span className=\"font-medium text-text-primary truncate\">\r\n {trimmedInput}\r\n </span>\r\n </div>\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 { ComboboxChipOutside }"]}
1
+ {"version":3,"sources":["../src/composites/combobox-chip-outside.tsx"],"names":["ComboboxChipOutside","multiple","inputPlaceholder","container","items","infiniteScroll","isPending","taggable","maxVisible","props","inputValue","setInputValue","useControlledState","value","setValue","createdItems","setCreatedItems","createdValuesRef","currentValues","v","prev","next","item","trimmedInput","isInputSelected","isCreatingItem","combinedItems","base","createItem","jsxs","Combobox","a","b","eventDetails","newTags","tag","jsx","ComboboxInput","Input","ComboboxTrigger","XIcon","event","SearchIcon","ComboboxChips","cn","ComboboxValue","visible","overflow","Fragment","ComboboxChip","ComboboxChipRemove","ComboboxPopup","ComboboxStatus","ComboboxList","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll"],"mappings":"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","file":"chunk-C5HZCXIB.js","sourcesContent":["import * as React from \"react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { ComboboxInput as ComboboxInputPrimitive } from \"../primitives/combobox\"\r\nimport { Input } from \"../ui\"\r\nimport {\r\n Combobox,\r\n ComboboxChip,\r\n ComboboxChipRemove,\r\n ComboboxChips,\r\n ComboboxInfiniteScroll,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxPortal,\r\n ComboboxPopup,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n ComboboxValue,\r\n type ComboboxProps,\r\n ComboboxItemTitle\r\n} from \"../ui/combobox\"\r\nimport { SearchIcon, XIcon } from \"lucide-react\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\n\r\ntype ComboboxChipOutsideProps<Value> = Omit<ComboboxProps<Value, true>, \"multiple\"> & {\r\n multiple?: boolean\r\n inputPlaceholder?: string\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n items: ({ label: string; value: string }[]) | undefined\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n isPending?: boolean\r\n /**\r\n * When true, enables creatable / taggable mode.\r\n * If the typed value has no exact match in the current item list,\r\n * a \"Create \\\"…\\\"\" option is shown at the top of the dropdown.\r\n * Created items are appended to the value with `{ label, value, tag: true }`.\r\n */\r\n taggable?: boolean\r\n /**\r\n * Maximum number of chips to show before collapsing the rest into a \"+N\" chip.\r\n * When undefined, all chips are shown.\r\n */\r\n maxVisible?: number\r\n}\r\n\r\nfunction ComboboxChipOutside<Value extends { label: string; value: string; tag?: true }>({\r\n multiple = true,\r\n inputPlaceholder = \"Search...\",\r\n container,\r\n items,\r\n infiniteScroll,\r\n isPending,\r\n taggable = false,\r\n maxVisible,\r\n ...props\r\n}: ComboboxChipOutsideProps<Value>) {\r\n const [inputValue, setInputValue] = useControlledState({\r\n value: props?.inputValue?.toString(),\r\n defaultValue: props?.defaultInputValue?.toString(),\r\n onChange: props?.onInputValueChange,\r\n })\r\n\r\n const [value, setValue] = useControlledState({\r\n value: props?.value ?? [],\r\n defaultValue: props?.defaultValue ?? [],\r\n onChange: props?.onValueChange,\r\n })\r\n\r\n // Track items created via taggable mode\r\n // Sync with value to avoid stale tags when controlled value is reset from outside\r\n const [createdItems, setCreatedItems] = React.useState<Value[]>([])\r\n const createdValuesRef = React.useRef<Set<string>>(new Set())\r\n\r\n React.useEffect(() => {\r\n const currentValues = new Set(value.map((v) => v.value))\r\n setCreatedItems((prev) => {\r\n const next = prev.filter((item) => currentValues.has(item.value))\r\n if (next.length === prev.length) return prev\r\n createdValuesRef.current = new Set(next.map((v) => v.value))\r\n return next\r\n })\r\n }, [value])\r\n\r\n // Determine if the current input has no exact match in existing items\r\n const trimmedInput = inputValue?.toString().trim() ?? \"\"\r\n const isInputSelected = React.useMemo(() => {\r\n if (!trimmedInput) return false\r\n return value.some(\r\n (item) => item.value.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [trimmedInput, value])\r\n // true = show the taggable item in dropdown (either as \"Create:\" or as checked item)\r\n const isCreatingItem = React.useMemo(() => {\r\n if (!taggable || !trimmedInput) return false\r\n return !items?.some(\r\n (item) => item.label.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [taggable, trimmedInput, items])\r\n\r\n // Merge server items with locally created tags + the \"Create\" placeholder\r\n const combinedItems = React.useMemo(() => {\r\n const base: Value[] = [\r\n ...items ?? [],\r\n ...createdItems,\r\n ]\r\n\r\n if (isCreatingItem) {\r\n const createItem = {\r\n label: trimmedInput,\r\n value: trimmedInput,\r\n tag: true,\r\n }\r\n return [...base, createItem]\r\n }\r\n\r\n return base\r\n }, [items, createdItems, isCreatingItem, trimmedInput])\r\n\r\n const handleValueChange: ComboboxProps<Value, true>[\"onValueChange\"] = (value, eventDetails) => {\r\n // Capture newly created taggable items internally\r\n if (taggable) {\r\n const newTags = value.filter(\r\n (v) => v?.tag === true\r\n && !createdValuesRef.current.has(v.value)\r\n )\r\n if (newTags.length > 0) {\r\n for (const tag of newTags) {\r\n createdValuesRef.current.add(tag.value)\r\n }\r\n setCreatedItems((prev) => [...prev, ...newTags])\r\n }\r\n }\r\n\r\n // if multiple is false, we need to replace the value with the new value instead of adding to it\r\n if (!multiple) {\r\n setValue([value[value.length - 1]], eventDetails)\r\n } else {\r\n setValue(value, eventDetails)\r\n }\r\n }\r\n\r\n return (\r\n <Combobox\r\n {...props}\r\n behavior=\"chip-outside\"\r\n multiple\r\n items={taggable ? combinedItems : items}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n onValueChange={handleValueChange}\r\n onInputValueChange={setInputValue}\r\n >\r\n <div className=\"flex flex-col gap-2\">\r\n <ComboboxInputPrimitive\r\n render={\r\n <Input\r\n className=\"h-9 text-body-regular-3 pl-9 pr-7\"\r\n endContent={\r\n <ComboboxTrigger\r\n nativeButton={false}\r\n render={(\r\n <XIcon\r\n className=\"!size-5 !right-1.5 data-[hidden=true]:opacity-0 opacity-100 transition-opacity duration-300 cursor-pointer\"\r\n data-hidden={!inputValue}\r\n data-slot=\"combobox-clear-input\"\r\n onClick={(event) => {\r\n setInputValue(\"\", {\r\n reason: \"none\",\r\n event: event.nativeEvent,\r\n cancel: () => { },\r\n allowPropagation: () => { },\r\n isCanceled: false,\r\n isPropagationAllowed: true,\r\n trigger: undefined,\r\n })\r\n }}\r\n />\r\n )}\r\n />\r\n }\r\n placeholder={inputPlaceholder}\r\n startContent={<SearchIcon className=\"!size-4 !text-fg-tertiary-hover\" />}\r\n wrapperClassName=\"w-full\"\r\n />\r\n }\r\n />\r\n <ComboboxChips\r\n className={cn(maxVisible !== undefined && \"flex-nowrap overflow-hidden\")}\r\n onMouseDown={(e) => e.preventBaseUIHandler()}\r\n >\r\n <ComboboxValue>\r\n {(value: Value[]) => {\r\n const visible = maxVisible !== undefined ? value.slice(0, maxVisible) : value\r\n const overflow = maxVisible !== undefined ? value.length - maxVisible : 0\r\n return (\r\n <>\r\n {visible?.map((item) => (\r\n <ComboboxChip\r\n key={item?.value || \"\"}\r\n className={cn(maxVisible !== undefined && \"min-w-0 shrink\")}\r\n >\r\n {maxVisible !== undefined\r\n ? <span className=\"truncate\">{item?.label || \"\"}</span>\r\n : (item?.label || \"\")\r\n }\r\n <ComboboxChipRemove />\r\n </ComboboxChip>\r\n ))}\r\n {overflow > 0 && (\r\n <ComboboxChip className=\"shrink-0\">\r\n +{overflow}\r\n </ComboboxChip>\r\n )}\r\n </>\r\n )\r\n }}\r\n </ComboboxValue>\r\n </ComboboxChips>\r\n </div>\r\n <ComboboxPopup container={container}>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0 && !isCreatingItem\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem\r\n key={item.value}\r\n value={{ label: item.label, value: item.value }}\r\n >\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n ))}\r\n {isCreatingItem && (\r\n <ComboboxItem\r\n value={{ label: trimmedInput, value: trimmedInput, tag: true }}\r\n >\r\n <div className=\"flex items-center gap-1.5 w-full min-w-0\">\r\n {!isInputSelected && (\r\n <span className=\"text-text-secondary\">Create:</span>\r\n )}\r\n <span className=\"font-medium text-text-primary truncate\">\r\n {trimmedInput}\r\n </span>\r\n </div>\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 { ComboboxChipOutside }"]}
@@ -0,0 +1,2 @@
1
+ import {cva}from'class-variance-authority';import {Loader2}from'lucide-react';import {Button}from'@base-ui/react/button';import {cn}from'@xploreu/lib/cn';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var m=cva(cn("group relative inline-flex h-max w-fit cursor-pointer items-center justify-center whitespace-nowrap outline-brand transition duration-100 ease-linear before:absolute focus-visible:outline-2 focus-visible:outline-offset-2 rounded-xp-buttons [&_svg]:shrink-0","disabled:cursor-not-allowed"),{variants:{color:{default:"focus-visible:outline-focus-ring",destructive:"focus-visible:outline-focus-ring-error","gradient-ai":"focus-visible:outline-focus-ring","linear-green":"focus-visible:outline-focus-ring-success","linear-overlay":"focus-visible:outline-focus-ring","linear-destructive":"focus-visible:outline-focus-ring-error"},variant:{primary:"before:rounded-lg before:absolute before:inset-0 before:border-1 before:border-white/12 before:mask-b-from-0% after:absolute after:inset-0 after:rounded-xp-buttons hover:after:bg-alpha-gray-20 after:bg-transparent after:transition-colors disabled:text-fg-disabled disabled:bg-none disabled:bg-bg-disabled disabled:hover:after:bg-transparent disabled:before:border-border-disabled disabled:before:mask-none disabled:before:border-1 shadow-xp-md hover:shadow-xp-brand ",secondary:"border-1 shadow-xp-md hover:shadow-xp-brand disabled:bg-bg-disabled disabled:text-fg-disabled disabled:[&_svg]:text-fg-disabled-subtle disabled:border-border-disabled disabled:hover:text-fg-disabled disabled:hover:[&_svg]:text-fg-disabled-subtle","secondary-accent":"disabled:border-border-disabled disabled:bg-bg-disabled disabled:text-fg-disabled",tertiary:"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:[&_svg]:text-bg-disabled","tertiary-accent":"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:[&_svg]:text-fg-disabled-subtle",link:"underline decoration-transparent hover:decoration-inherit transition-colors disabled:bg-bg-disabled disabled:text-fg-disabled disabled:[&_svg]:text-fg-disabled-subtle disabled:hover:no-underline"},icon:{true:void 0,false:void 0},size:{"3xs":"text-label-semibold-4 px-xp-sm gap-xp-xs h-6 data-[icon]:size-6 data-[variant=link]:h-4 data-[variant=link]:px-0 [&_svg]:size-3.5","2xs":"text-label-semibold-4 px-xp-md gap-xp-xs h-7 data-[icon]:size-7 data-[variant=link]:h-4 data-[variant=link]:px-0 [&_svg]:size-4",xs:"text-label-semibold-3 px-xp-lg gap-xp-sm h-8 data-[icon]:size-8 data-[variant=link]:h-5 data-[variant=link]:px-0 [&_svg]:size-4",sm:"text-label-semibold-3 px-xp-lg gap-xp-sm h-9 data-[icon]:size-9 data-[variant=link]:h-5 data-[variant=link]:px-0 [&_svg]:size-5",md:"text-label-semibold-3 px-3.5 gap-xp-sm h-10 data-[icon]:size-10 data-[variant=link]:h-5 data-[variant=link]:px-0 [&_svg]:size-5",lg:"text-label-semibold-2 px-xp-xl gap-xp-md h-11 data-[icon]:size-11 data-[variant=link]:h-[22px] data-[variant=link]:px-0 [&_svg]:size-5",xl:"text-label-semibold-2 px-4.5 gap-xp-md h-12 data-[icon]:size-12 data-[variant=link]:h-[22px] data-[variant=link]:px-0 [&_svg]:size-5"}},compoundVariants:[{variant:"primary",color:"default",className:"bg-gradient-buttons-gradient-blue text-text-primary-on-brand"},{variant:"secondary",color:"default",className:"bg-bg-primary text-text-secondary [&_svg]:text-fg-secondary border-border-primary-icon hover:bg-bg-brand-solid hover:border-border-white hover:text-text-primary-on-brand hover:[&_svg]:text-fg-white"},{variant:"secondary-accent",color:"default",className:"border-1 border-border-primary-icon text-fg-primary hover:bg-bg-brand-primary"},{variant:"tertiary",color:"default",className:"text-text-tertiary [&_svg]:text-fg-quaternary hover:bg-bg-primary-hover hover:text-text-tertiary-hover hover:[&_svg]:text-fg-quaternary-hover"},{variant:"tertiary-accent",color:"default",className:"bg-bg-brand-primary text-text-brand-tertiary [&_svg]:text-fg-brand-secondary hover:bg-bg-brand-secondary hover:text-text-brand-tertiary hover:[&_svg]:text-fg-brand-secondary-hover"},{variant:"link",color:"default",className:"text-text-brand-secondary [&_svg]:text-fg-brand-secondary-alt hover:text-text-brand-secondary-hover hover:[&_svg]:text-fg-brand-secondary-hover"},{variant:"primary",color:"destructive",className:"bg-bg-error-solid text-text-primary-on-brand"},{variant:"secondary",color:"destructive",className:"bg-bg-primary text-text-error-primary [&_svg]:text-fg-error-secondary border-border-error hover:bg-bg-error-primary hover:text-text-error-primary-hover hover:[&_svg]:text-fg-error-secondary"},{variant:"secondary-accent",color:"destructive",className:"border-1 border-border-error text-fg-error-primary hover:bg-bg-error-primary"},{variant:"tertiary",color:"destructive",className:"text-text-error-primary [&_svg]:text-fg-error-secondary hover:bg-bg-error-primary hover:text-text-error-primary-hover hover:[&_svg]:text-fg-error-primary"},{variant:"tertiary-accent",color:"destructive",className:"bg-bg-error-primary text-text-error-tertiary [&_svg]:text-fg-error-secondary hover:bg-bg-error-secondary hover:text-text-error-tertiary hover:[&_svg]:text-fg-error-secondary-hover"},{variant:"link",color:"destructive",className:"text-text-error-secondary [&_svg]:text-fg-error-secondary hover:text-text-error-primary-hover hover:[&_svg]:text-fg-error-primary"},{variant:"primary",color:"gradient-ai",className:"bg-gradient-buttons-button-ai text-text-primary-on-brand"},{variant:"secondary",color:"gradient-ai",className:"relative shadow-transparent border-transparent hover:bg-bg-primary bg-[linear-gradient(90deg,var(--color-bg-primary),var(--color-bg-primary)),var(--gradient-buttons-button-ai)] [background-clip:padding-box,border-box] [background-origin:padding-box,border-box] [&>span]:bg-gradient-buttons-button-ai [&>span]:bg-clip-text [&>span]:text-transparent after:absolute after:inset-0 after:rounded-md hover:after:bg-gradient-buttons-button-ai hover:after:opacity-10 disabled:hover:after:bg-transparent disabled:after:opacity-0 disabled:[&>span]:bg-none disabled:[&>span]:text-fg-disabled"},{variant:"secondary-accent",color:"gradient-ai",className:"border-1 border-border-brand text-fg-brand-primary hover:bg-bg-brand-primary"},{variant:"tertiary",color:"gradient-ai",className:"relative [&>span]:bg-gradient-buttons-button-ai [&>span]:bg-clip-text [&>span]:text-transparent after:absolute after:inset-0 after:rounded-md hover:after:bg-gradient-buttons-button-ai hover:after:opacity-10 disabled:hover:after:bg-transparent disabled:after:opacity-0 disabled:[&>span]:bg-none disabled:[&>span]:text-fg-disabled"},{variant:"tertiary-accent",color:"gradient-ai",className:"bg-bg-brand-primary text-text-brand-tertiary [&_svg]:text-fg-brand-secondary hover:bg-bg-brand-secondary hover:text-text-brand-tertiary hover:[&_svg]:text-fg-brand-secondary-hover"},{variant:"link",color:"gradient-ai",className:"text-text-brand-secondary [&_svg]:text-fg-brand-secondary-alt hover:text-text-brand-secondary-hover hover:[&_svg]:text-fg-brand-secondary-hover"},{variant:"primary",color:"linear-green",className:"bg-gradient-buttons-gradient-green text-text-primary-on-brand"},{variant:"secondary",color:"linear-green",className:"bg-bg-primary text-text-secondary [&_svg]:text-green-500 border-border-primary hover:text-text-secondary-hover hover:[&_svg]:text-green-900"},{variant:"secondary-accent",color:"linear-green",className:"border-1 border-border-primary text-fg-primary hover:bg-bg-primary"},{variant:"tertiary",color:"linear-green",className:"text-text-success-primary [&_svg]:text-green-500 hover:bg-bg-success-primary hover:[&_svg]:text-green-900"},{variant:"tertiary-accent",color:"linear-green",className:"bg-bg-success-primary text-text-success-tertiary [&_svg]:text-fg-success-secondary hover:bg-bg-success-secondary hover:text-text-success-tertiary hover:[&_svg]:text-fg-success-secondary-hover"},{variant:"link",color:"linear-green",className:"text-text-success-secondary [&_svg]:text-fg-success-secondary hover:text-text-success-primary-hover hover:[&_svg]:text-fg-success-primary"},{variant:"primary",color:"linear-overlay",className:"relative bg-bg-brand-solid text-text-primary-on-brand [&_svg]:text-button-primary-icon hover:[&_svg]:text-button-primary-icon-hover after:absolute after:inset-0 after:rounded-xp-buttons after:bg-gradient-skuemorphic-gradient-border after:hover:bg-gradient-skuemorphic-gradient-border"},{variant:"secondary",color:"linear-overlay",className:"bg-bg-brand-solid-hover text-text-secondary [&_svg]:text-fg-quaternary border-border-primary hover:bg-bg-primary-hover hover:text-text-secondary-hover hover:[&_svg]:text-text-quaternary-hover"},{variant:"secondary-accent",color:"linear-overlay",className:"border-1 border-border-brand text-fg-brand-primary hover:bg-bg-brand-primary"},{variant:"tertiary",color:"linear-overlay",className:"text-text-tertiary [&_svg]:text-fg-quaternary hover:bg-bg-primary-hover hover:text-text-tertiary-hover hover:[&_svg]:text-fg-quaternary-hover"},{variant:"tertiary-accent",color:"linear-overlay",className:"bg-bg-brand-primary text-text-brand-tertiary [&_svg]:text-fg-brand-secondary hover:bg-bg-brand-secondary hover:text-text-brand-tertiary hover:[&_svg]:text-fg-brand-secondary-hover"},{variant:"link",color:"linear-overlay",className:"text-text-brand-secondary [&_svg]:text-fg-brand-secondary-alt hover:text-text-brand-secondary-hover hover:[&_svg]:text-fg-brand-secondary-hover"},{variant:"primary",color:"linear-destructive",className:"relative bg-bg-error-solid text-text-primary-on-brand [&_svg]:text-button-destructive-primary-icon hover:[&_svg]:text-button-destructive-primary-icon-hover after:absolute after:inset-0 after:rounded-xp-buttons after:bg-gradient-skuemorphic-gradient-border after:hover:bg-gradient-skuemorphic-gradient-border"},{variant:"secondary",color:"linear-destructive",className:"bg-bg-error-solid-hover text-text-secondary [&_svg]:text-fg-quaternary border-border-primary hover:bg-bg-primary-hover hover:text-text-secondary-hover hover:[&_svg]:text-text-quaternary-hover"},{variant:"secondary-accent",color:"linear-destructive",className:"border-1 border-border-error text-fg-error-primary hover:bg-bg-error-primary"},{variant:"tertiary",color:"linear-destructive",className:"text-text-error-primary [&_svg]:text-fg-error-secondary hover:bg-bg-error-primary hover:text-text-tertiary-hover hover:[&_svg]:text-fg-error-secondary"},{variant:"tertiary-accent",color:"linear-destructive",className:"bg-bg-error-primary text-text-error-tertiary [&_svg]:text-fg-error-secondary hover:bg-bg-error-secondary hover:text-text-error-tertiary hover:[&_svg]:text-fg-error-secondary-hover"},{variant:"link",color:"linear-destructive",className:"text-text-error-primary [&_svg]:text-fg-error-secondary hover:text-text-error-primary-hover hover:[&_svg]:text-fg-error-primary"}],defaultVariants:{variant:"primary",color:"default",size:"sm"}});function z({className:i,color:s,variant:e,size:n,loading:t=false,children:d,disabled:b,icon:g,nativeButton:l,render:a,...v}){let c=a!=null?false:l;return jsx(Button,{className:cn(m({color:s,variant:e,size:n,className:i})),"data-icon":g?"":void 0,"data-variant":e,disabled:b||t,nativeButton:c,render:a,...v,children:t?jsxs(Fragment,{children:[jsx(Loader2,{className:"size-4 animate-spin"}),jsx("span",{children:"Loading..."})]}):d})}export{m as a,z as b};//# sourceMappingURL=chunk-DQGZIFNP.js.map
2
+ //# sourceMappingURL=chunk-DQGZIFNP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/button.tsx"],"names":["buttonVariants","cva","cn","Button","className","color","variant","size","loading","children","disabled","icon","nativeButton","render","props","resolvedNativeButton","jsx","ButtonPrimitive","jsxs","Fragment","Loader2"],"mappings":"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","file":"chunk-DQGZIFNP.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { Loader2 } from \"lucide-react\"\r\n\r\nimport { Button as ButtonPrimitive } from \"@base-ui/react/button\"\r\nimport { cn } from \"@xploreu/lib/cn\"\r\n\r\nconst buttonVariants = cva(\r\n cn(\r\n \"group relative inline-flex h-max w-fit cursor-pointer items-center justify-center whitespace-nowrap outline-brand transition duration-100 ease-linear before:absolute focus-visible:outline-2 focus-visible:outline-offset-2 rounded-xp-buttons [&_svg]:shrink-0\",\r\n \"disabled:cursor-not-allowed\",\r\n ),\r\n {\r\n variants: {\r\n color: {\r\n default: \"focus-visible:outline-focus-ring\",\r\n destructive: \"focus-visible:outline-focus-ring-error\",\r\n \"gradient-ai\": \"focus-visible:outline-focus-ring\",\r\n \"linear-green\": \"focus-visible:outline-focus-ring-success\",\r\n \"linear-overlay\": \"focus-visible:outline-focus-ring\",\r\n \"linear-destructive\": \"focus-visible:outline-focus-ring-error\",\r\n },\r\n variant: {\r\n primary: \"before:rounded-lg before:absolute before:inset-0 before:border-1 before:border-white/12 before:mask-b-from-0% after:absolute after:inset-0 after:rounded-xp-buttons hover:after:bg-alpha-gray-20 after:bg-transparent after:transition-colors disabled:text-fg-disabled disabled:bg-none disabled:bg-bg-disabled disabled:hover:after:bg-transparent disabled:before:border-border-disabled disabled:before:mask-none disabled:before:border-1 shadow-xp-md hover:shadow-xp-brand \",\r\n secondary: \"border-1 shadow-xp-md hover:shadow-xp-brand disabled:bg-bg-disabled disabled:text-fg-disabled disabled:[&_svg]:text-fg-disabled-subtle disabled:border-border-disabled disabled:hover:text-fg-disabled disabled:hover:[&_svg]:text-fg-disabled-subtle\",\r\n \"secondary-accent\": \"disabled:border-border-disabled disabled:bg-bg-disabled disabled:text-fg-disabled\",\r\n tertiary: \"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:[&_svg]:text-bg-disabled\",\r\n \"tertiary-accent\": \"disabled:bg-bg-disabled disabled:text-fg-disabled disabled:[&_svg]:text-fg-disabled-subtle\",\r\n link: \"underline decoration-transparent hover:decoration-inherit transition-colors disabled:bg-bg-disabled disabled:text-fg-disabled disabled:[&_svg]:text-fg-disabled-subtle disabled:hover:no-underline\",\r\n },\r\n icon: {\r\n true: undefined,\r\n false: undefined\r\n },\r\n size: {\r\n \"3xs\": \"text-label-semibold-4 px-xp-sm gap-xp-xs h-6 data-[icon]:size-6 data-[variant=link]:h-4 data-[variant=link]:px-0 [&_svg]:size-3.5\",\r\n \"2xs\": \"text-label-semibold-4 px-xp-md gap-xp-xs h-7 data-[icon]:size-7 data-[variant=link]:h-4 data-[variant=link]:px-0 [&_svg]:size-4\",\r\n xs: \"text-label-semibold-3 px-xp-lg gap-xp-sm h-8 data-[icon]:size-8 data-[variant=link]:h-5 data-[variant=link]:px-0 [&_svg]:size-4\",\r\n sm: \"text-label-semibold-3 px-xp-lg gap-xp-sm h-9 data-[icon]:size-9 data-[variant=link]:h-5 data-[variant=link]:px-0 [&_svg]:size-5\",\r\n md: \"text-label-semibold-3 px-3.5 gap-xp-sm h-10 data-[icon]:size-10 data-[variant=link]:h-5 data-[variant=link]:px-0 [&_svg]:size-5\",\r\n lg: \"text-label-semibold-2 px-xp-xl gap-xp-md h-11 data-[icon]:size-11 data-[variant=link]:h-[22px] data-[variant=link]:px-0 [&_svg]:size-5\",\r\n xl: \"text-label-semibold-2 px-4.5 gap-xp-md h-12 data-[icon]:size-12 data-[variant=link]:h-[22px] data-[variant=link]:px-0 [&_svg]:size-5\",\r\n }\r\n },\r\n compoundVariants: [\r\n // Default Color Variants\r\n {\r\n variant: \"primary\",\r\n color: \"default\",\r\n className: \"bg-gradient-buttons-gradient-blue text-text-primary-on-brand\"\r\n },\r\n {\r\n variant: \"secondary\",\r\n color: \"default\",\r\n className: \"bg-bg-primary text-text-secondary [&_svg]:text-fg-secondary border-border-primary-icon hover:bg-bg-brand-solid hover:border-border-white hover:text-text-primary-on-brand hover:[&_svg]:text-fg-white\"\r\n },\r\n {\r\n variant: \"secondary-accent\",\r\n color: \"default\",\r\n className: \"border-1 border-border-primary-icon text-fg-primary hover:bg-bg-brand-primary\"\r\n },\r\n {\r\n variant: \"tertiary\",\r\n color: \"default\",\r\n className: \"text-text-tertiary [&_svg]:text-fg-quaternary hover:bg-bg-primary-hover hover:text-text-tertiary-hover hover:[&_svg]:text-fg-quaternary-hover\"\r\n },\r\n {\r\n variant: \"tertiary-accent\",\r\n color: \"default\",\r\n className: \"bg-bg-brand-primary text-text-brand-tertiary [&_svg]:text-fg-brand-secondary hover:bg-bg-brand-secondary hover:text-text-brand-tertiary hover:[&_svg]:text-fg-brand-secondary-hover\"\r\n },\r\n {\r\n variant: \"link\",\r\n color: \"default\",\r\n className: \"text-text-brand-secondary [&_svg]:text-fg-brand-secondary-alt hover:text-text-brand-secondary-hover hover:[&_svg]:text-fg-brand-secondary-hover\"\r\n },\r\n\r\n // Destructive Color Variants\r\n {\r\n variant: \"primary\",\r\n color: \"destructive\",\r\n className: \"bg-bg-error-solid text-text-primary-on-brand\"\r\n },\r\n {\r\n variant: \"secondary\",\r\n color: \"destructive\",\r\n className: \"bg-bg-primary text-text-error-primary [&_svg]:text-fg-error-secondary border-border-error hover:bg-bg-error-primary hover:text-text-error-primary-hover hover:[&_svg]:text-fg-error-secondary\"\r\n },\r\n {\r\n // Not existing in design system yet\r\n variant: \"secondary-accent\",\r\n color: \"destructive\",\r\n className: \"border-1 border-border-error text-fg-error-primary hover:bg-bg-error-primary\"\r\n },\r\n {\r\n variant: \"tertiary\",\r\n color: \"destructive\",\r\n className: \"text-text-error-primary [&_svg]:text-fg-error-secondary hover:bg-bg-error-primary hover:text-text-error-primary-hover hover:[&_svg]:text-fg-error-primary\"\r\n },\r\n {\r\n // Not existing in design system yet\r\n variant: \"tertiary-accent\",\r\n color: \"destructive\",\r\n className: \"bg-bg-error-primary text-text-error-tertiary [&_svg]:text-fg-error-secondary hover:bg-bg-error-secondary hover:text-text-error-tertiary hover:[&_svg]:text-fg-error-secondary-hover\"\r\n },\r\n {\r\n variant: \"link\",\r\n color: \"destructive\",\r\n className: \"text-text-error-secondary [&_svg]:text-fg-error-secondary hover:text-text-error-primary-hover hover:[&_svg]:text-fg-error-primary\"\r\n },\r\n\r\n // Gradient AI\r\n {\r\n variant: \"primary\",\r\n color: \"gradient-ai\",\r\n className: \"bg-gradient-buttons-button-ai text-text-primary-on-brand\"\r\n },\r\n {\r\n variant: \"secondary\",\r\n color: \"gradient-ai\",\r\n className: \"relative shadow-transparent border-transparent hover:bg-bg-primary bg-[linear-gradient(90deg,var(--color-bg-primary),var(--color-bg-primary)),var(--gradient-buttons-button-ai)] [background-clip:padding-box,border-box] [background-origin:padding-box,border-box] [&>span]:bg-gradient-buttons-button-ai [&>span]:bg-clip-text [&>span]:text-transparent after:absolute after:inset-0 after:rounded-md hover:after:bg-gradient-buttons-button-ai hover:after:opacity-10 disabled:hover:after:bg-transparent disabled:after:opacity-0 disabled:[&>span]:bg-none disabled:[&>span]:text-fg-disabled\"\r\n },\r\n {\r\n // Not existing in design system yet\r\n variant: \"secondary-accent\",\r\n color: \"gradient-ai\",\r\n className: \"border-1 border-border-brand text-fg-brand-primary hover:bg-bg-brand-primary\"\r\n },\r\n {\r\n variant: \"tertiary\",\r\n color: \"gradient-ai\",\r\n className: \"relative [&>span]:bg-gradient-buttons-button-ai [&>span]:bg-clip-text [&>span]:text-transparent after:absolute after:inset-0 after:rounded-md hover:after:bg-gradient-buttons-button-ai hover:after:opacity-10 disabled:hover:after:bg-transparent disabled:after:opacity-0 disabled:[&>span]:bg-none disabled:[&>span]:text-fg-disabled\"\r\n },\r\n {\r\n // Not existing in design system yet\r\n variant: \"tertiary-accent\",\r\n color: \"gradient-ai\",\r\n className: \"bg-bg-brand-primary text-text-brand-tertiary [&_svg]:text-fg-brand-secondary hover:bg-bg-brand-secondary hover:text-text-brand-tertiary hover:[&_svg]:text-fg-brand-secondary-hover\"\r\n },\r\n {\r\n // Not existing in design system yet\r\n variant: \"link\",\r\n color: \"gradient-ai\",\r\n className: \"text-text-brand-secondary [&_svg]:text-fg-brand-secondary-alt hover:text-text-brand-secondary-hover hover:[&_svg]:text-fg-brand-secondary-hover\"\r\n },\r\n\r\n // Linear Green Color Variants\r\n {\r\n variant: \"primary\",\r\n color: \"linear-green\",\r\n className: \"bg-gradient-buttons-gradient-green text-text-primary-on-brand\"\r\n },\r\n {\r\n variant: \"secondary\",\r\n color: \"linear-green\",\r\n className: \"bg-bg-primary text-text-secondary [&_svg]:text-green-500 border-border-primary hover:text-text-secondary-hover hover:[&_svg]:text-green-900\"\r\n },\r\n {\r\n // Not existing in design system yet\r\n variant: \"secondary-accent\",\r\n color: \"linear-green\",\r\n className: \"border-1 border-border-primary text-fg-primary hover:bg-bg-primary\"\r\n },\r\n {\r\n variant: \"tertiary\",\r\n color: \"linear-green\",\r\n className: \"text-text-success-primary [&_svg]:text-green-500 hover:bg-bg-success-primary hover:[&_svg]:text-green-900\"\r\n },\r\n {\r\n // Not existing in design system yet\r\n variant: \"tertiary-accent\",\r\n color: \"linear-green\",\r\n className: \"bg-bg-success-primary text-text-success-tertiary [&_svg]:text-fg-success-secondary hover:bg-bg-success-secondary hover:text-text-success-tertiary hover:[&_svg]:text-fg-success-secondary-hover\"\r\n },\r\n {\r\n // Not existing in design system yet\r\n variant: \"link\",\r\n color: \"linear-green\",\r\n className: \"text-text-success-secondary [&_svg]:text-fg-success-secondary hover:text-text-success-primary-hover hover:[&_svg]:text-fg-success-primary\"\r\n },\r\n\r\n // Linear Overlay Color Variants\r\n {\r\n variant: \"primary\",\r\n color: \"linear-overlay\",\r\n className: \"relative bg-bg-brand-solid text-text-primary-on-brand [&_svg]:text-button-primary-icon hover:[&_svg]:text-button-primary-icon-hover after:absolute after:inset-0 after:rounded-xp-buttons after:bg-gradient-skuemorphic-gradient-border after:hover:bg-gradient-skuemorphic-gradient-border\"\r\n },\r\n {\r\n variant: \"secondary\",\r\n color: \"linear-overlay\",\r\n className: \"bg-bg-brand-solid-hover text-text-secondary [&_svg]:text-fg-quaternary border-border-primary hover:bg-bg-primary-hover hover:text-text-secondary-hover hover:[&_svg]:text-text-quaternary-hover\"\r\n },\r\n {\r\n variant: \"secondary-accent\",\r\n color: \"linear-overlay\",\r\n className: \"border-1 border-border-brand text-fg-brand-primary hover:bg-bg-brand-primary\"\r\n },\r\n {\r\n variant: \"tertiary\",\r\n color: \"linear-overlay\",\r\n className: \"text-text-tertiary [&_svg]:text-fg-quaternary hover:bg-bg-primary-hover hover:text-text-tertiary-hover hover:[&_svg]:text-fg-quaternary-hover\"\r\n },\r\n {\r\n variant: \"tertiary-accent\",\r\n color: \"linear-overlay\",\r\n className: \"bg-bg-brand-primary text-text-brand-tertiary [&_svg]:text-fg-brand-secondary hover:bg-bg-brand-secondary hover:text-text-brand-tertiary hover:[&_svg]:text-fg-brand-secondary-hover\"\r\n },\r\n {\r\n variant: \"link\",\r\n color: \"linear-overlay\",\r\n className: \"text-text-brand-secondary [&_svg]:text-fg-brand-secondary-alt hover:text-text-brand-secondary-hover hover:[&_svg]:text-fg-brand-secondary-hover\"\r\n },\r\n\r\n // Linear Destructive Color Variants\r\n {\r\n variant: \"primary\",\r\n color: \"linear-destructive\",\r\n className: \"relative bg-bg-error-solid text-text-primary-on-brand [&_svg]:text-button-destructive-primary-icon hover:[&_svg]:text-button-destructive-primary-icon-hover after:absolute after:inset-0 after:rounded-xp-buttons after:bg-gradient-skuemorphic-gradient-border after:hover:bg-gradient-skuemorphic-gradient-border\"\r\n },\r\n {\r\n variant: \"secondary\",\r\n color: \"linear-destructive\",\r\n className: \"bg-bg-error-solid-hover text-text-secondary [&_svg]:text-fg-quaternary border-border-primary hover:bg-bg-primary-hover hover:text-text-secondary-hover hover:[&_svg]:text-text-quaternary-hover\"\r\n },\r\n {\r\n // Not existing in design system yet\r\n variant: \"secondary-accent\",\r\n color: \"linear-destructive\",\r\n className: \"border-1 border-border-error text-fg-error-primary hover:bg-bg-error-primary\"\r\n },\r\n {\r\n variant: \"tertiary\",\r\n color: \"linear-destructive\",\r\n className: \"text-text-error-primary [&_svg]:text-fg-error-secondary hover:bg-bg-error-primary hover:text-text-tertiary-hover hover:[&_svg]:text-fg-error-secondary\"\r\n },\r\n {\r\n // Not existing in design system yet\r\n variant: \"tertiary-accent\",\r\n color: \"linear-destructive\",\r\n className: \"bg-bg-error-primary text-text-error-tertiary [&_svg]:text-fg-error-secondary hover:bg-bg-error-secondary hover:text-text-error-tertiary hover:[&_svg]:text-fg-error-secondary-hover\"\r\n },\r\n {\r\n variant: \"link\",\r\n color: \"linear-destructive\",\r\n className: \"text-text-error-primary [&_svg]:text-fg-error-secondary hover:text-text-error-primary-hover hover:[&_svg]:text-fg-error-primary\"\r\n },\r\n ],\r\n defaultVariants: {\r\n variant: \"primary\",\r\n color: \"default\",\r\n size: \"sm\",\r\n },\r\n }\r\n)\r\n\r\nfunction Button({\r\n className,\r\n color,\r\n variant,\r\n size,\r\n loading = false,\r\n children,\r\n disabled,\r\n icon,\r\n nativeButton,\r\n render,\r\n ...props\r\n}: ButtonPrimitive.Props &\r\n VariantProps<typeof buttonVariants> & {\r\n loading?: boolean\r\n }) {\r\n // ponytail: auto-detect nativeButton when render is provided\r\n const resolvedNativeButton = render != null ? false : nativeButton\r\n\r\n return (\r\n <ButtonPrimitive\r\n className={cn(buttonVariants({ color, variant, size, className }))}\r\n data-icon={icon ? \"\" : undefined}\r\n data-variant={variant}\r\n disabled={disabled || loading}\r\n nativeButton={resolvedNativeButton}\r\n render={render}\r\n {...props}\r\n >\r\n {loading ? (\r\n <>\r\n <Loader2 className=\"size-4 animate-spin\" />\r\n <span>Loading...</span>\r\n </>\r\n ) : (\r\n children\r\n )}\r\n </ButtonPrimitive>\r\n )\r\n}\r\n\r\nexport { Button, buttonVariants }"]}
@@ -1,2 +1,2 @@
1
- import {a,b}from'./chunk-UINS73U7.js';import*as D from'react';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {differenceInCalendarDays}from'date-fns';import {ChevronLeftIcon,ChevronRightIcon,ChevronLeft,ChevronRight}from'lucide-react';import {DayPicker,DayButton,useDayPicker,labelPrevious,labelNext}from'react-day-picker';import {cn}from'@xploreu/lib/cn';import {jsx,jsxs}from'react/jsx-runtime';function ce({className:r,showOutsideDays:e=true,showViewSwitcher:t=true,yearRange:a$1=12,numberOfMonths:s,components:l,navView:f,defaultNavView:u,onNavViewChange:g,minNavView:b="days",weekStartsOn:N=0,...n}){let[c,h]=useControlledState({value:f,defaultValue:u??"days",onChange:g});D.useEffect(()=>{b==="months"&&h("months"),b==="years"&&h("years");},[b,h]);let[C,d]=D.useState({year:new Date().getFullYear()}),[y,m]=D.useState(D.useMemo(()=>{let w=new Date().getFullYear();return {from:w-Math.floor(a$1/2-1),to:w+Math.ceil(a$1/2)}},[a$1])),{onNextClick:_,onPrevClick:V,startMonth:x,endMonth:p}=n,F=c==="years"||c==="months"?1:s,M=cn("relative flex [&>div:not(:last-of-type)]:mr-3",n.monthsClassName),R=cn("relative flex items-center justify-center",n.monthCaptionClassName),A=cn("flex flex-row",n.weekdaysClassName),G=cn("size-9 first:text-text-error-primary text-label-semibold-3 text-text-primary flex items-center justify-center",n.weekdayClassName),Y=cn("flex flex-col gap-2",n.monthClassName),E=cn("relative flex items-center justify-center pt-xp-xs",n.captionClassName),L=cn("truncate text-body-regular-3 font-medium",n.captionLabelClassName),B=a({variant:"secondary-accent",className:"absolute h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100"}),T=cn(B,"right-0",n.buttonNextClassName),j=cn(B,"left-0",n.buttonPreviousClassName),O=cn("flex items-start",n.navClassName),J=cn("flex flex-col p-3 bg-bg-primary text-text-primary rounded-lg",n.monthGridClassName),$=cn("flex w-max items-start",n.weekClassName),I=cn("flex size-9 flex-1 items-center justify-center p-0 text-label-semibold-3",n.dayClassName),q=cn(a({variant:null,size:"sm"}),"p-0",n.dayButtonClassName),H="[&>button]:bg-gradient-buttons-gradient-blue [&>button]:text-fg-white",K=cn("day-range-start [&:not(.day-range-end)>button]:rounded-e-none",n.rangeStartClassName),Q=cn("day-range-end [&:not(.day-range-start)>button]:rounded-s-none",n.rangeEndClassName),U=cn("[&>button]:bg-none [&>button]:bg-bg-primary-hover [&>button]:text-text-primary [&>button]:rounded-none [&[aria-selected=true][data-today=true]>button]:after:bg-utility-brand-500 [&[aria-selected=true][data-today=true]>button]:after:ring-utility-brand-100",n.rangeMiddleClassName),W=cn(" [&>button]:relative","[&>button]:after:content-[''] [&>button]:after:absolute [&>button]:after:bottom-1","[&>button]:after:left-1/2 [&>button]:after:-translate-x-1/2","[&>button]:after:size-1 [&>button]:after:rounded-full [&>button]:after:ring-2 [&>button]:after:ring-utility-brand-100 [&>button]:after:bg-utility-brand-500","[&[aria-selected=true]>button]:after:bg-fg-white [&[aria-selected=true]>button]:after:ring-alpha-alpha-white-30",n.todayClassName),X=cn("opacity-50",n.outsideClassName),Z=cn("opacity-50",n.disabledClassName),ee=cn("invisible flex-1",n.hiddenClassName);return jsx(DayPicker,{className:cn("p-xp-xl rounded-xl bg-bg-tertiary h-max",r),classNames:{months:M,month_caption:R,weekdays:A,weekday:G,month:Y,caption:E,caption_label:L,button_next:T,button_previous:j,nav:O,month_grid:J,week:$,day:I,day_button:q,selected:H,range_start:K,range_middle:U,range_end:Q,today:W,outside:X,disabled:Z,hidden:ee},components:{Chevron:({orientation:w})=>jsx(w==="left"?ChevronLeftIcon:ChevronRightIcon,{className:"h-4 w-4"}),Nav:({className:w})=>jsx(de,{className:w,displayMonths:C,displayYears:y,endMonth:p,navView:c,setDisplayMonths:d,setDisplayYears:m,startMonth:x,onNextClick:_,onPrevClick:V}),CaptionLabel:w=>jsx(fe,{displayMonths:C,displayYears:y,navView:c,setNavView:h,showViewSwitcher:t,...w}),DayButton:w=>jsx(DayButton,{"data-icon":true,...w}),MonthGrid:({className:w,children:z,...te})=>jsx(be,{className:w,displayMonths:C,displayYears:y,endMonth:p,minNavView:b,navView:c,setDisplayMonths:d,setNavView:h,startMonth:x,...te,children:z}),...l},numberOfMonths:F,showOutsideDays:e,weekStartsOn:N,...n})}ce.displayName="Calendar";function de({className:r,navView:e,startMonth:t,endMonth:a,displayYears:s,displayMonths:l,setDisplayYears:f,setDisplayMonths:u,onPrevClick:g,onNextClick:b$1}){let{nextMonth:N,previousMonth:n,goToMonth:c}=useDayPicker(),h=e==="years"?t&&differenceInCalendarDays(new Date(s.from-1,0,1),t)<0||a&&differenceInCalendarDays(new Date(s.from-1,0,1),a)>0:e==="months"?t&&differenceInCalendarDays(new Date(l.year-1,0,1),t)<0||a&&differenceInCalendarDays(new Date(l.year-1,0,1),a)>0:!n,C=e==="years"?t&&differenceInCalendarDays(new Date(s.to+1,0,1),t)<0||a&&differenceInCalendarDays(new Date(s.to+1,0,1),a)>0:e==="months"?t&&differenceInCalendarDays(new Date(l.year+1,0,1),t)<0||a&&differenceInCalendarDays(new Date(l.year+1,0,1),a)>0:!N,d=D.useCallback(()=>{if(n){if(e==="years"){f(m=>({from:m.from-(m.to-m.from+1),to:m.to-(m.to-m.from+1)})),g?.(new Date(s.from-(s.to-s.from),0,1));return}if(e==="months"){u(m=>({year:m.year-1})),g?.(new Date(l.year-1,0,1));return}c(n),g?.(n);}},[n,c,s.from,s.to,l.year,e,g,f,u]),y=D.useCallback(()=>{if(N){if(e==="years"){f(m=>({from:m.from+(m.to-m.from+1),to:m.to+(m.to-m.from+1)})),b$1?.(new Date(s.from+(s.to-s.from),0,1));return}if(e==="months"){u(m=>({year:m.year+1})),b$1?.(new Date(l.year+1,0,1));return}c(N),b$1?.(N);}},[c,N,s.from,s.to,l.year,e,b$1,f,u]);return jsxs("nav",{className:cn("flex items-center",r),children:[jsx(b,{"aria-label":e==="years"?`Go to the previous ${s.to-s.from+1} years`:e==="months"?"Go to the previous year":labelPrevious(n),className:"absolute left-3 top-2.5 data-[icon]:size-4 [&_svg]:size-4 px-0 z-10",disabled:h,size:"sm",icon:true,tabIndex:h?void 0:-1,type:"button",variant:null,onClick:d,children:jsx(ChevronLeft,{})}),jsx(b,{"aria-label":e==="years"?`Go to the next ${s.to-s.from+1} years`:e==="months"?"Go to the next year":labelNext(N),className:"absolute right-3 top-2.5 data-[icon]:size-4 [&_svg]:size-4 px-0 z-10",disabled:C,size:"sm",icon:true,tabIndex:C?void 0:-1,type:"button",variant:null,onClick:y,children:jsx(ChevronRight,{})})]})}function fe({children:r,showViewSwitcher:e,navView:t,setNavView:a,displayYears:s,displayMonths:l,...f}){return e?jsx(b,{disabled:t==="years",size:"sm",type:"button",variant:null,onClick:()=>{t==="days"?a("months"):t==="months"&&a("years");},children:t==="days"?r:t==="months"?l.year:s.from+" - "+s.to}):jsx("span",{...f,children:r})}function be({className:r,children:e,displayYears:t,displayMonths:a,setDisplayMonths:s,startMonth:l,endMonth:f,navView:u,setNavView:g,minNavView:b="days",...N}){return u==="years"?jsx(ge,{className:r,displayYears:t,endMonth:f,minNavView:b,navView:u,setDisplayMonths:s,setNavView:g,startMonth:l,...N}):u==="months"?jsx(Ce,{className:r,displayMonths:a,endMonth:f,minNavView:b,navView:u,setNavView:g,startMonth:l,...N}):jsx("table",{className:cn("flex-1",r),...N,children:e})}function Ne(r,e){if(!r)return false;if(Array.isArray(r))return r.some(t=>t.getFullYear()===e);if(typeof r=="object"&&"from"in r){let t=r;return t.from&&t.to?e>=t.from.getFullYear()&&e<=t.to.getFullYear():t.from?t.from.getFullYear()===e:false}return r.getFullYear()===e}function ye(r,e,t){if(!r)return false;if(Array.isArray(r))return r.some(a=>a.getMonth()===t&&a.getFullYear()===e);if(typeof r=="object"&&"from"in r){let a=r;if(a.from&&a.to){let s=a.from.getMonth(),l=a.from.getFullYear(),f=a.to.getMonth(),u=a.to.getFullYear();return e===l&&e===u?t>=s&&t<=f:e===l?t>=s:e===u?t<=f:e>l&&e<u}return a.from?a.from.getMonth()===t&&a.from.getFullYear()===e:false}return r.getMonth()===t&&r.getFullYear()===e}function ge({className:r,displayYears:e,startMonth:t,endMonth:a,setNavView:s,navView:l,setDisplayMonths:f,minNavView:u="days",...g}){let {selected:b$1,select:N}=useDayPicker();new Date().getFullYear();let c=e.to-e.from+1,h=(C,d)=>{u==="years"?N?.(new Date(d,0,1),{},C):(s("months"),f({year:d}));};return jsx("table",{className:cn("w-[312px]",r),...g,children:jsx("tbody",{children:jsx("tr",{className:"grid grid-cols-3 gap-xp-md",children:Array.from({length:c},(C,d)=>{let y=e.from+d,m=new Date(y,0,1),_=new Date(y,11,31),V=t&&differenceInCalendarDays(_,t)<0,x=a&&differenceInCalendarDays(m,a)>0,p=V||x,M=Ne(b$1,y);return jsx("td",{children:jsx(b,{className:"w-full",disabled:l==="years"?p:void 0,type:"button",variant:M?"primary":"tertiary-accent",onClick:R=>h(R,y),children:y})},y)})})})})}function Ce({className:r,displayMonths:e,startMonth:t,endMonth:a,setNavView:s,navView:l,minNavView:f="days",...u}){let{goToMonth:g,selected:b$1,select:N}=useDayPicker(),n=["January","February","March","April","May","June","July","August","September","October","November","December"],c=e.year,h=(C,d)=>{f==="months"?N?.(new Date(c,d,1),{},C):(s("days"),g(new Date(c,d)));};return jsx("table",{className:cn("w-[312px]",r),...u,children:jsx("tbody",{children:jsx("tr",{className:"grid grid-cols-3 gap-xp-md",children:n.map((C,d)=>{let y=t&&differenceInCalendarDays(new Date(c,d,31),t)<0,m=a&&differenceInCalendarDays(new Date(c,d,1),a)>0,_=y||m;c===new Date().getFullYear()&&d===new Date().getMonth();let x=ye(b$1,c,d);return jsx("td",{children:jsx(b,{className:"w-full",disabled:l==="months"?_:void 0,type:"button",variant:x?"primary":"tertiary-accent",onClick:p=>h(p,d),children:C.substring(0,3)})},d)})})})})}export{ce as a};//# sourceMappingURL=chunk-F77XVICY.js.map
2
- //# sourceMappingURL=chunk-F77XVICY.js.map
1
+ import {a,b}from'./chunk-DQGZIFNP.js';import*as D from'react';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {differenceInCalendarDays}from'date-fns';import {ChevronLeftIcon,ChevronRightIcon,ChevronLeft,ChevronRight}from'lucide-react';import {DayPicker,DayButton,useDayPicker,labelPrevious,labelNext}from'react-day-picker';import {cn}from'@xploreu/lib/cn';import {jsx,jsxs}from'react/jsx-runtime';function ce({className:r,showOutsideDays:e=true,showViewSwitcher:t=true,yearRange:a$1=12,numberOfMonths:s,components:l,navView:f,defaultNavView:u,onNavViewChange:g,minNavView:b="days",weekStartsOn:N=0,...n}){let[c,h]=useControlledState({value:f,defaultValue:u??"days",onChange:g});D.useEffect(()=>{b==="months"&&h("months"),b==="years"&&h("years");},[b,h]);let[C,d]=D.useState({year:new Date().getFullYear()}),[y,m]=D.useState(D.useMemo(()=>{let w=new Date().getFullYear();return {from:w-Math.floor(a$1/2-1),to:w+Math.ceil(a$1/2)}},[a$1])),{onNextClick:_,onPrevClick:V,startMonth:x,endMonth:p}=n,F=c==="years"||c==="months"?1:s,M=cn("relative flex [&>div:not(:last-of-type)]:mr-3",n.monthsClassName),R=cn("relative flex items-center justify-center",n.monthCaptionClassName),A=cn("flex flex-row",n.weekdaysClassName),G=cn("size-9 first:text-text-error-primary text-label-semibold-3 text-text-primary flex items-center justify-center",n.weekdayClassName),Y=cn("flex flex-col gap-2",n.monthClassName),E=cn("relative flex items-center justify-center pt-xp-xs",n.captionClassName),L=cn("truncate text-body-regular-3 font-medium",n.captionLabelClassName),B=a({variant:"secondary-accent",className:"absolute h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100"}),T=cn(B,"right-0",n.buttonNextClassName),j=cn(B,"left-0",n.buttonPreviousClassName),O=cn("flex items-start",n.navClassName),J=cn("flex flex-col p-3 bg-bg-primary text-text-primary rounded-lg",n.monthGridClassName),$=cn("flex w-max items-start",n.weekClassName),I=cn("flex size-9 flex-1 items-center justify-center p-0 text-label-semibold-3",n.dayClassName),q=cn(a({variant:null,size:"sm"}),"p-0",n.dayButtonClassName),H="[&>button]:bg-gradient-buttons-gradient-blue [&>button]:text-fg-white",K=cn("day-range-start [&:not(.day-range-end)>button]:rounded-e-none",n.rangeStartClassName),Q=cn("day-range-end [&:not(.day-range-start)>button]:rounded-s-none",n.rangeEndClassName),U=cn("[&>button]:bg-none [&>button]:bg-bg-primary-hover [&>button]:text-text-primary [&>button]:rounded-none [&[aria-selected=true][data-today=true]>button]:after:bg-utility-brand-500 [&[aria-selected=true][data-today=true]>button]:after:ring-utility-brand-100",n.rangeMiddleClassName),W=cn(" [&>button]:relative","[&>button]:after:content-[''] [&>button]:after:absolute [&>button]:after:bottom-1","[&>button]:after:left-1/2 [&>button]:after:-translate-x-1/2","[&>button]:after:size-1 [&>button]:after:rounded-full [&>button]:after:ring-2 [&>button]:after:ring-utility-brand-100 [&>button]:after:bg-utility-brand-500","[&[aria-selected=true]>button]:after:bg-fg-white [&[aria-selected=true]>button]:after:ring-alpha-alpha-white-30",n.todayClassName),X=cn("opacity-50",n.outsideClassName),Z=cn("opacity-50",n.disabledClassName),ee=cn("invisible flex-1",n.hiddenClassName);return jsx(DayPicker,{className:cn("p-xp-xl rounded-xl bg-bg-tertiary h-max",r),classNames:{months:M,month_caption:R,weekdays:A,weekday:G,month:Y,caption:E,caption_label:L,button_next:T,button_previous:j,nav:O,month_grid:J,week:$,day:I,day_button:q,selected:H,range_start:K,range_middle:U,range_end:Q,today:W,outside:X,disabled:Z,hidden:ee},components:{Chevron:({orientation:w})=>jsx(w==="left"?ChevronLeftIcon:ChevronRightIcon,{className:"h-4 w-4"}),Nav:({className:w})=>jsx(de,{className:w,displayMonths:C,displayYears:y,endMonth:p,navView:c,setDisplayMonths:d,setDisplayYears:m,startMonth:x,onNextClick:_,onPrevClick:V}),CaptionLabel:w=>jsx(fe,{displayMonths:C,displayYears:y,navView:c,setNavView:h,showViewSwitcher:t,...w}),DayButton:w=>jsx(DayButton,{"data-icon":true,...w}),MonthGrid:({className:w,children:z,...te})=>jsx(be,{className:w,displayMonths:C,displayYears:y,endMonth:p,minNavView:b,navView:c,setDisplayMonths:d,setNavView:h,startMonth:x,...te,children:z}),...l},numberOfMonths:F,showOutsideDays:e,weekStartsOn:N,...n})}ce.displayName="Calendar";function de({className:r,navView:e,startMonth:t,endMonth:a,displayYears:s,displayMonths:l,setDisplayYears:f,setDisplayMonths:u,onPrevClick:g,onNextClick:b$1}){let{nextMonth:N,previousMonth:n,goToMonth:c}=useDayPicker(),h=e==="years"?t&&differenceInCalendarDays(new Date(s.from-1,0,1),t)<0||a&&differenceInCalendarDays(new Date(s.from-1,0,1),a)>0:e==="months"?t&&differenceInCalendarDays(new Date(l.year-1,0,1),t)<0||a&&differenceInCalendarDays(new Date(l.year-1,0,1),a)>0:!n,C=e==="years"?t&&differenceInCalendarDays(new Date(s.to+1,0,1),t)<0||a&&differenceInCalendarDays(new Date(s.to+1,0,1),a)>0:e==="months"?t&&differenceInCalendarDays(new Date(l.year+1,0,1),t)<0||a&&differenceInCalendarDays(new Date(l.year+1,0,1),a)>0:!N,d=D.useCallback(()=>{if(n){if(e==="years"){f(m=>({from:m.from-(m.to-m.from+1),to:m.to-(m.to-m.from+1)})),g?.(new Date(s.from-(s.to-s.from),0,1));return}if(e==="months"){u(m=>({year:m.year-1})),g?.(new Date(l.year-1,0,1));return}c(n),g?.(n);}},[n,c,s.from,s.to,l.year,e,g,f,u]),y=D.useCallback(()=>{if(N){if(e==="years"){f(m=>({from:m.from+(m.to-m.from+1),to:m.to+(m.to-m.from+1)})),b$1?.(new Date(s.from+(s.to-s.from),0,1));return}if(e==="months"){u(m=>({year:m.year+1})),b$1?.(new Date(l.year+1,0,1));return}c(N),b$1?.(N);}},[c,N,s.from,s.to,l.year,e,b$1,f,u]);return jsxs("nav",{className:cn("flex items-center",r),children:[jsx(b,{"aria-label":e==="years"?`Go to the previous ${s.to-s.from+1} years`:e==="months"?"Go to the previous year":labelPrevious(n),className:"absolute left-3 top-2.5 data-[icon]:size-4 [&_svg]:size-4 px-0 z-10",disabled:h,size:"sm",icon:true,tabIndex:h?void 0:-1,type:"button",variant:null,onClick:d,children:jsx(ChevronLeft,{})}),jsx(b,{"aria-label":e==="years"?`Go to the next ${s.to-s.from+1} years`:e==="months"?"Go to the next year":labelNext(N),className:"absolute right-3 top-2.5 data-[icon]:size-4 [&_svg]:size-4 px-0 z-10",disabled:C,size:"sm",icon:true,tabIndex:C?void 0:-1,type:"button",variant:null,onClick:y,children:jsx(ChevronRight,{})})]})}function fe({children:r,showViewSwitcher:e,navView:t,setNavView:a,displayYears:s,displayMonths:l,...f}){return e?jsx(b,{disabled:t==="years",size:"sm",type:"button",variant:null,onClick:()=>{t==="days"?a("months"):t==="months"&&a("years");},children:t==="days"?r:t==="months"?l.year:s.from+" - "+s.to}):jsx("span",{...f,children:r})}function be({className:r,children:e,displayYears:t,displayMonths:a,setDisplayMonths:s,startMonth:l,endMonth:f,navView:u,setNavView:g,minNavView:b="days",...N}){return u==="years"?jsx(ge,{className:r,displayYears:t,endMonth:f,minNavView:b,navView:u,setDisplayMonths:s,setNavView:g,startMonth:l,...N}):u==="months"?jsx(Ce,{className:r,displayMonths:a,endMonth:f,minNavView:b,navView:u,setNavView:g,startMonth:l,...N}):jsx("table",{className:cn("flex-1",r),...N,children:e})}function Ne(r,e){if(!r)return false;if(Array.isArray(r))return r.some(t=>t.getFullYear()===e);if(typeof r=="object"&&"from"in r){let t=r;return t.from&&t.to?e>=t.from.getFullYear()&&e<=t.to.getFullYear():t.from?t.from.getFullYear()===e:false}return r.getFullYear()===e}function ye(r,e,t){if(!r)return false;if(Array.isArray(r))return r.some(a=>a.getMonth()===t&&a.getFullYear()===e);if(typeof r=="object"&&"from"in r){let a=r;if(a.from&&a.to){let s=a.from.getMonth(),l=a.from.getFullYear(),f=a.to.getMonth(),u=a.to.getFullYear();return e===l&&e===u?t>=s&&t<=f:e===l?t>=s:e===u?t<=f:e>l&&e<u}return a.from?a.from.getMonth()===t&&a.from.getFullYear()===e:false}return r.getMonth()===t&&r.getFullYear()===e}function ge({className:r,displayYears:e,startMonth:t,endMonth:a,setNavView:s,navView:l,setDisplayMonths:f,minNavView:u="days",...g}){let {selected:b$1,select:N}=useDayPicker();new Date().getFullYear();let c=e.to-e.from+1,h=(C,d)=>{u==="years"?N?.(new Date(d,0,1),{},C):(s("months"),f({year:d}));};return jsx("table",{className:cn("w-[312px]",r),...g,children:jsx("tbody",{children:jsx("tr",{className:"grid grid-cols-3 gap-xp-md",children:Array.from({length:c},(C,d)=>{let y=e.from+d,m=new Date(y,0,1),_=new Date(y,11,31),V=t&&differenceInCalendarDays(_,t)<0,x=a&&differenceInCalendarDays(m,a)>0,p=V||x,M=Ne(b$1,y);return jsx("td",{children:jsx(b,{className:"w-full",disabled:l==="years"?p:void 0,type:"button",variant:M?"primary":"tertiary-accent",onClick:R=>h(R,y),children:y})},y)})})})})}function Ce({className:r,displayMonths:e,startMonth:t,endMonth:a,setNavView:s,navView:l,minNavView:f="days",...u}){let{goToMonth:g,selected:b$1,select:N}=useDayPicker(),n=["January","February","March","April","May","June","July","August","September","October","November","December"],c=e.year,h=(C,d)=>{f==="months"?N?.(new Date(c,d,1),{},C):(s("days"),g(new Date(c,d)));};return jsx("table",{className:cn("w-[312px]",r),...u,children:jsx("tbody",{children:jsx("tr",{className:"grid grid-cols-3 gap-xp-md",children:n.map((C,d)=>{let y=t&&differenceInCalendarDays(new Date(c,d,31),t)<0,m=a&&differenceInCalendarDays(new Date(c,d,1),a)>0,_=y||m;c===new Date().getFullYear()&&d===new Date().getMonth();let x=ye(b$1,c,d);return jsx("td",{children:jsx(b,{className:"w-full",disabled:l==="months"?_:void 0,type:"button",variant:x?"primary":"tertiary-accent",onClick:p=>h(p,d),children:C.substring(0,3)})},d)})})})})}export{ce as a};//# sourceMappingURL=chunk-FIDOWSDH.js.map
2
+ //# sourceMappingURL=chunk-FIDOWSDH.js.map