@deckai/deck-ui 0.0.22 → 0.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -1
- package/dist/components/AboutCard.cjs +3 -3
- package/dist/components/AboutCard.cjs.map +1 -1
- package/dist/components/AboutCard.d.cts +1 -1
- package/dist/components/AboutCard.d.ts +1 -1
- package/dist/components/AboutCard.js +3 -3
- package/dist/components/AboutCard.js.map +1 -1
- package/dist/components/Accordion.cjs +2 -2
- package/dist/components/Accordion.cjs.map +1 -1
- package/dist/components/Accordion.js +2 -2
- package/dist/components/Accordion.js.map +1 -1
- package/dist/components/AddWorkCard.cjs +4 -4
- package/dist/components/AddWorkCard.cjs.map +1 -1
- package/dist/components/AddWorkCard.d.cts +1 -1
- package/dist/components/AddWorkCard.d.ts +1 -1
- package/dist/components/AddWorkCard.js +4 -4
- package/dist/components/AddWorkCard.js.map +1 -1
- package/dist/components/AutocompleteInput.cjs +4 -4
- package/dist/components/AutocompleteInput.cjs.map +1 -1
- package/dist/components/AutocompleteInput.d.cts +6 -6
- package/dist/components/AutocompleteInput.d.ts +6 -6
- package/dist/components/AutocompleteInput.js +4 -4
- package/dist/components/AutocompleteInput.js.map +1 -1
- package/dist/components/Avatar.cjs +1 -1
- package/dist/components/Avatar.cjs.map +1 -1
- package/dist/components/Avatar.d.cts +2 -2
- package/dist/components/Avatar.d.ts +2 -2
- package/dist/components/Avatar.js +1 -1
- package/dist/components/Avatar.js.map +1 -1
- package/dist/components/Badge.cjs +4 -4
- package/dist/components/Badge.cjs.map +1 -1
- package/dist/components/Badge.d.cts +2 -2
- package/dist/components/Badge.d.ts +2 -2
- package/dist/components/Badge.js +4 -4
- package/dist/components/Badge.js.map +1 -1
- package/dist/components/Breadcrumbs.cjs +2 -2
- package/dist/components/Breadcrumbs.cjs.map +1 -1
- package/dist/components/Breadcrumbs.js +2 -2
- package/dist/components/Breadcrumbs.js.map +1 -1
- package/dist/components/Button.cjs +5 -5
- package/dist/components/Button.cjs.map +1 -1
- package/dist/components/Button.d.cts +5 -5
- package/dist/components/Button.d.ts +5 -5
- package/dist/components/Button.js +5 -5
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Carousel.cjs +1 -1
- package/dist/components/Carousel.cjs.map +1 -1
- package/dist/components/Carousel.d.cts +1 -1
- package/dist/components/Carousel.d.ts +1 -1
- package/dist/components/Carousel.js +1 -1
- package/dist/components/Carousel.js.map +1 -1
- package/dist/components/Collapsible.cjs +2 -2
- package/dist/components/Collapsible.cjs.map +1 -1
- package/dist/components/Collapsible.d.cts +4 -4
- package/dist/components/Collapsible.d.ts +4 -4
- package/dist/components/Collapsible.js +2 -2
- package/dist/components/Collapsible.js.map +1 -1
- package/dist/components/Combobox.cjs +4 -4
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.cts +5 -2
- package/dist/components/Combobox.d.ts +5 -2
- package/dist/components/Combobox.js +4 -4
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/ContactItem.cjs +3 -3
- package/dist/components/ContactItem.cjs.map +1 -1
- package/dist/components/ContactItem.d.cts +1 -1
- package/dist/components/ContactItem.d.ts +1 -1
- package/dist/components/ContactItem.js +3 -3
- package/dist/components/ContactItem.js.map +1 -1
- package/dist/components/Dropdown.cjs +3 -3
- package/dist/components/Dropdown.cjs.map +1 -1
- package/dist/components/Dropdown.js +3 -3
- package/dist/components/Dropdown.js.map +1 -1
- package/dist/components/EditButton.cjs +5 -5
- package/dist/components/EditButton.cjs.map +1 -1
- package/dist/components/EditButton.d.cts +4 -4
- package/dist/components/EditButton.d.ts +4 -4
- package/dist/components/EditButton.js +5 -5
- package/dist/components/EditButton.js.map +1 -1
- package/dist/components/Fallback.cjs +1 -1
- package/dist/components/Fallback.cjs.map +1 -1
- package/dist/components/Fallback.js +1 -1
- package/dist/components/Fallback.js.map +1 -1
- package/dist/components/Icon.cjs +1 -1
- package/dist/components/Icon.cjs.map +1 -1
- package/dist/components/Icon.js +1 -1
- package/dist/components/Icon.js.map +1 -1
- package/dist/components/IconRenderer.cjs +1 -1
- package/dist/components/IconRenderer.cjs.map +1 -1
- package/dist/components/IconRenderer.d.cts +4 -4
- package/dist/components/IconRenderer.d.ts +4 -4
- package/dist/components/IconRenderer.js +1 -1
- package/dist/components/IconRenderer.js.map +1 -1
- package/dist/components/Input.cjs +3 -3
- package/dist/components/Input.cjs.map +1 -1
- package/dist/components/Input.d.cts +11 -11
- package/dist/components/Input.d.ts +11 -11
- package/dist/components/Input.js +3 -3
- package/dist/components/Input.js.map +1 -1
- package/dist/components/Link.cjs +4 -4
- package/dist/components/Link.cjs.map +1 -1
- package/dist/components/Link.d.cts +1 -1
- package/dist/components/Link.d.ts +1 -1
- package/dist/components/Link.js +4 -4
- package/dist/components/Link.js.map +1 -1
- package/dist/components/Logo.cjs +1 -1
- package/dist/components/Logo.cjs.map +1 -1
- package/dist/components/Logo.d.cts +1 -1
- package/dist/components/Logo.d.ts +1 -1
- package/dist/components/Logo.js +1 -1
- package/dist/components/Logo.js.map +1 -1
- package/dist/components/Modal.cjs +1 -1
- package/dist/components/Modal.cjs.map +1 -1
- package/dist/components/Modal.d.cts +4 -4
- package/dist/components/Modal.d.ts +4 -4
- package/dist/components/Modal.js +1 -1
- package/dist/components/Modal.js.map +1 -1
- package/dist/components/MultiSelectCombobox.cjs +2 -2
- package/dist/components/MultiSelectCombobox.cjs.map +1 -1
- package/dist/components/MultiSelectCombobox.d.cts +1 -1
- package/dist/components/MultiSelectCombobox.d.ts +1 -1
- package/dist/components/MultiSelectCombobox.js +2 -2
- package/dist/components/MultiSelectCombobox.js.map +1 -1
- package/dist/components/Navbar.cjs +7 -7
- package/dist/components/Navbar.cjs.map +1 -1
- package/dist/components/Navbar.d.cts +1 -1
- package/dist/components/Navbar.d.ts +1 -1
- package/dist/components/Navbar.js +7 -7
- package/dist/components/Navbar.js.map +1 -1
- package/dist/components/NavbarItem.cjs +4 -4
- package/dist/components/NavbarItem.cjs.map +1 -1
- package/dist/components/NavbarItem.d.cts +1 -1
- package/dist/components/NavbarItem.d.ts +1 -1
- package/dist/components/NavbarItem.js +4 -4
- package/dist/components/NavbarItem.js.map +1 -1
- package/dist/components/Option.cjs +2 -2
- package/dist/components/Option.cjs.map +1 -1
- package/dist/components/Option.js +2 -2
- package/dist/components/Option.js.map +1 -1
- package/dist/components/Pressable.cjs +1 -1
- package/dist/components/Pressable.cjs.map +1 -1
- package/dist/components/Pressable.js +1 -1
- package/dist/components/Pressable.js.map +1 -1
- package/dist/components/ProfileCard.cjs +2 -2
- package/dist/components/ProfileCard.cjs.map +1 -1
- package/dist/components/ProfileCard.d.cts +1 -1
- package/dist/components/ProfileCard.d.ts +1 -1
- package/dist/components/ProfileCard.js +2 -2
- package/dist/components/ProfileCard.js.map +1 -1
- package/dist/components/ProgressBar.cjs +3 -3
- package/dist/components/ProgressBar.cjs.map +1 -1
- package/dist/components/ProgressBar.js +3 -3
- package/dist/components/ProgressBar.js.map +1 -1
- package/dist/components/RadioGroup.cjs +3 -3
- package/dist/components/RadioGroup.cjs.map +1 -1
- package/dist/components/RadioGroup.js +3 -3
- package/dist/components/RadioGroup.js.map +1 -1
- package/dist/components/SegmentedTabs.cjs +4 -4
- package/dist/components/SegmentedTabs.cjs.map +1 -1
- package/dist/components/SegmentedTabs.js +4 -4
- package/dist/components/SegmentedTabs.js.map +1 -1
- package/dist/components/Sidebar.cjs +1 -1
- package/dist/components/Sidebar.cjs.map +1 -1
- package/dist/components/Sidebar.d.cts +1 -1
- package/dist/components/Sidebar.d.ts +1 -1
- package/dist/components/Sidebar.js +1 -1
- package/dist/components/Sidebar.js.map +1 -1
- package/dist/components/SlideButton.cjs +1 -1
- package/dist/components/SlideButton.cjs.map +1 -1
- package/dist/components/SlideButton.js +1 -1
- package/dist/components/SlideButton.js.map +1 -1
- package/dist/components/Slider.cjs.map +1 -1
- package/dist/components/Slider.js.map +1 -1
- package/dist/components/SocialCard.cjs +4 -4
- package/dist/components/SocialCard.cjs.map +1 -1
- package/dist/components/SocialCard.d.cts +1 -1
- package/dist/components/SocialCard.d.ts +1 -1
- package/dist/components/SocialCard.js +4 -4
- package/dist/components/SocialCard.js.map +1 -1
- package/dist/components/Spinner.cjs +1 -1
- package/dist/components/Spinner.cjs.map +1 -1
- package/dist/components/Spinner.d.cts +2 -2
- package/dist/components/Spinner.d.ts +2 -2
- package/dist/components/Spinner.js +1 -1
- package/dist/components/Spinner.js.map +1 -1
- package/dist/components/Switch.cjs.map +1 -1
- package/dist/components/Switch.d.cts +2 -2
- package/dist/components/Switch.d.ts +2 -2
- package/dist/components/Switch.js.map +1 -1
- package/dist/components/Tabs.cjs +3 -3
- package/dist/components/Tabs.cjs.map +1 -1
- package/dist/components/Tabs.js +3 -3
- package/dist/components/Tabs.js.map +1 -1
- package/dist/components/Tag.cjs +3 -3
- package/dist/components/Tag.cjs.map +1 -1
- package/dist/components/Tag.d.cts +1 -1
- package/dist/components/Tag.d.ts +1 -1
- package/dist/components/Tag.js +3 -3
- package/dist/components/Tag.js.map +1 -1
- package/dist/components/Text.cjs +1 -1
- package/dist/components/Text.cjs.map +1 -1
- package/dist/components/Text.d.cts +1 -1
- package/dist/components/Text.d.ts +1 -1
- package/dist/components/Text.js +1 -1
- package/dist/components/Text.js.map +1 -1
- package/dist/components/TextArea.cjs +4 -4
- package/dist/components/TextArea.cjs.map +1 -1
- package/dist/components/TextArea.d.cts +1 -1
- package/dist/components/TextArea.d.ts +1 -1
- package/dist/components/TextArea.js +4 -4
- package/dist/components/TextArea.js.map +1 -1
- package/dist/components/Toast.cjs +3 -3
- package/dist/components/Toast.cjs.map +1 -1
- package/dist/components/Toast.d.cts +7 -7
- package/dist/components/Toast.d.ts +7 -7
- package/dist/components/Toast.js +3 -3
- package/dist/components/Toast.js.map +1 -1
- package/dist/components/ToastProvider.cjs +1 -1
- package/dist/components/ToastProvider.cjs.map +1 -1
- package/dist/components/ToastProvider.d.cts +1 -1
- package/dist/components/ToastProvider.d.ts +1 -1
- package/dist/components/ToastProvider.js +1 -1
- package/dist/components/ToastProvider.js.map +1 -1
- package/dist/components/Tooltip.cjs +3 -3
- package/dist/components/Tooltip.cjs.map +1 -1
- package/dist/components/Tooltip.d.cts +1 -1
- package/dist/components/Tooltip.d.ts +1 -1
- package/dist/components/Tooltip.js +3 -3
- package/dist/components/Tooltip.js.map +1 -1
- package/dist/components/VideoPlayer.cjs +2 -2
- package/dist/components/VideoPlayer.cjs.map +1 -1
- package/dist/components/VideoPlayer.d.cts +4 -4
- package/dist/components/VideoPlayer.d.ts +4 -4
- package/dist/components/VideoPlayer.js +2 -2
- package/dist/components/VideoPlayer.js.map +1 -1
- package/dist/components/WorkCard.cjs +3 -3
- package/dist/components/WorkCard.cjs.map +1 -1
- package/dist/components/WorkCard.d.cts +1 -1
- package/dist/components/WorkCard.d.ts +1 -1
- package/dist/components/WorkCard.js +3 -3
- package/dist/components/WorkCard.js.map +1 -1
- package/dist/index.cjs +8 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +39 -39
- package/dist/index.d.ts +39 -39
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/styles/styles.css +1 -1
- package/package.json +2 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
'use strict';var V=require('@radix-ui/react-collapsible'),O=require('@radix-ui/react-popover'),
|
|
1
|
+
'use strict';var V=require('@radix-ui/react-collapsible'),O=require('@radix-ui/react-popover'),x=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),icons=require('@deckai/icons'),P=require('@radix-ui/react-tooltip');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var V__namespace=/*#__PURE__*/_interopNamespace(V);var O__namespace=/*#__PURE__*/_interopNamespace(O);var x__namespace=/*#__PURE__*/_interopNamespace(x);var P__namespace=/*#__PURE__*/_interopNamespace(P);function g(...t){return tailwindMerge.twMerge(clsx.clsx(t))}var ue="focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100";var xe="ring-2 ring-primary-100";var ne={12:"h-[12px] w-[12px]",16:"h-[16px] w-[16px]",18:"h-[18px] w-[18px]",20:"h-[20px] w-[20px]",24:"h-[24px] w-[24px]",32:"h-[32px] w-[32px]",36:"h-[36px] w-[36px]",40:"h-[40px] w-[40px]",42:"h-[42px] w-[42px]",48:"h-[48px] w-[48px]",64:"h-[64px] w-[64px]",72:"h-[72px] w-[72px]"},fe={sm:{12:"sm:h-[12px] sm:w-[12px]",16:"sm:h-[16px] sm:w-[16px]",18:"sm:h-[18px] sm:w-[18px]",20:"sm:h-[20px] sm:w-[20px]",24:"sm:h-[24px] sm:w-[24px]",32:"sm:h-[32px] sm:w-[32px]",36:"sm:h-[36px] sm:w-[36px]",40:"sm:h-[40px] sm:w-[40px]",42:"sm:h-[42px] sm:w-[42px]",48:"sm:h-[48px] sm:w-[48px]",64:"sm:h-[64px] sm:w-[64px]",72:"sm:h-[72px] sm:w-[72px]"},md:{12:"md:h-[12px] md:w-[12px]",16:"md:h-[16px] md:w-[16px]",18:"md:h-[18px] md:w-[18px]",20:"md:h-[20px] md:w-[20px]",24:"md:h-[24px] md:w-[24px]",32:"md:h-[32px] md:w-[32px]",36:"md:h-[36px] md:w-[36px]",40:"md:h-[40px] md:w-[40px]",42:"md:h-[42px] md:w-[42px]",48:"md:h-[48px] md:w-[48px]",64:"md:h-[64px] md:w-[64px]",72:"md:h-[72px] md:w-[72px]"},lg:{12:"lg:h-[12px] lg:w-[12px]",16:"lg:h-[16px] lg:w-[16px]",18:"lg:h-[18px] lg:w-[18px]",20:"lg:h-[20px] lg:w-[20px]",24:"lg:h-[24px] lg:w-[24px]",32:"lg:h-[32px] lg:w-[32px]",36:"lg:h-[36px] lg:w-[36px]",40:"lg:h-[40px] lg:w-[40px]",42:"lg:h-[42px] lg:w-[42px]",48:"lg:h-[48px] lg:w-[48px]",64:"lg:h-[64px] lg:w-[64px]",72:"lg:h-[72px] lg:w-[72px]"},xl:{12:"xl:h-[12px] xl:w-[12px]",16:"xl:h-[16px] xl:w-[16px]",18:"xl:h-[18px] xl:w-[18px]",20:"xl:h-[20px] xl:w-[20px]",24:"xl:h-[24px] xl:w-[24px]",32:"xl:h-[32px] xl:w-[32px]",36:"xl:h-[36px] xl:w-[36px]",40:"xl:h-[40px] xl:w-[40px]",42:"xl:h-[42px] xl:w-[42px]",48:"xl:h-[48px] xl:w-[48px]",64:"xl:h-[64px] xl:w-[64px]",72:"xl:h-[72px] xl:w-[72px]"},"2xl":{12:"2xl:h-[12px] 2xl:w-[12px]",16:"2xl:h-[16px] 2xl:w-[16px]",18:"2xl:h-[18px] 2xl:w-[18px]",20:"2xl:h-[20px] 2xl:w-[20px]",24:"2xl:h-[24px] 2xl:w-[24px]",32:"2xl:h-[32px] 2xl:w-[32px]",36:"2xl:h-[36px] 2xl:w-[36px]",40:"2xl:h-[40px] 2xl:w-[40px]",42:"2xl:h-[42px] 2xl:w-[42px]",48:"2xl:h-[48px] 2xl:w-[48px]",64:"2xl:h-[64px] 2xl:w-[64px]",72:"2xl:h-[72px] 2xl:w-[72px]"}},W=t=>String(t),ge=(t,o=24)=>{let r=[],a={};if(t===void 0){let s=W(o);s?r.push(ne[s]):(a.height=`${o}px`,a.width=`${o}px`);}if(typeof t=="number"){let s=W(t);s?r.push(ne[s]):(a.height=`${t}px`,a.width=`${t}px`);}if(Array.isArray(t)){let s=W(o),p=[s&&ne[s]||`h-[${o}px] w-[${o}px]`];t.forEach(m=>{if(typeof m=="string"){let[i,f]=m.split(":"),d=parseInt(f,10),T=W(d);r.push(T&&fe[i]?.[T]||`${i}:h-[${d}px] ${i}:w-[${d}px]`);}}),r.push(...p);}if(typeof t=="string"){let[s,p]=t.split(":"),m=parseInt(p,10),i=W(m);r.push(i&&fe[s]?.[i]||`${s}:h-[${m}px] ${s}:w-[${m}px]`);}return {responsiveSizeClasses:r.join(" "),responsiveSizeStyles:a}};var he={primary:"var(--color-primary)",secondary:"var(--color-secondary)",white:"var(--color-white)",primaryBlue:"var(--color-primary-100)",disabled:"var(--color-disabled)",danger:"var(--color-danger)"},I=x__namespace.default.forwardRef(({name:t,size:o=24,color:r="primary",title:a,className:s,style:p={},...m},i)=>{let f=icons.IconMap[t],{responsiveSizeClasses:d,responsiveSizeStyles:T}=ge(o,24);return x__namespace.default.createElement("div",{className:g("flex justify-center items-center",d,s),style:{"--icon-stroke":he[r],...T,...p}},x__namespace.default.createElement(f,{ref:i,"aria-hidden":!a,"aria-label":a,stroke:t.includes("filled")?void 0:he[r],...m}))});I.displayName="Icon";var Ie={xl:"h1",lg:"h1",md:"h2",sm:"h3",xs:"h4"},Re=t=>{let[o,r]=t.split("-");return o==="heading"?Ie[r]||"p":o==="label"?"label":"p"},Ae={light:"font-light",regular:"font-regular",semibold:"font-semibold",bold:"font-bold"},Oe=t=>t?(Array.isArray(t)?t:[t]).map(r=>{if(r.includes(":")){let[a,s]=r.split(":");return `${a}:text-${s}`}return `text-${r}`}).join(" "):"text-body-default",h=x__namespace.default.forwardRef(({variant:t="body-default",color:o="primary",as:r,className:a,children:s,weight:p,...m},i)=>{let f=Oe(t),d=o==="inherit"?"text-inherit":`text-${o}`,T=x__namespace.default.useMemo(()=>{let y=typeof t=="string"?t.split(":").pop():Array.isArray(t)?t[0].split(":").pop():"body-default";return Re(y)},[t]);return x__namespace.default.createElement(r||T,{ref:i,className:`
|
|
2
2
|
font-sans antialiased
|
|
3
3
|
${f}
|
|
4
4
|
${d}
|
|
5
5
|
${p&&`!${Ae[p]}`}
|
|
6
6
|
${a}
|
|
7
|
-
`,...c},s)});h.displayName="Text";var ee=u__namespace.forwardRef(({className:t,end:o,iconName:r,color:a,size:s,title:p,label:c,labelClassName:i,id:f,children:d,forceShowFocusRing:T,error:w,errorMessage:b,helperText:S,showCharacterCount:H,maxLength:N,value:L,defaultValue:l,onChange:M,disabled:v,...D},Q)=>{let[F,m]=u__namespace.useState(L?.toString()||l?.toString()||"");u__namespace.useEffect(()=>{L!==undefined&&m(L.toString());},[L]);let E=u__namespace.useCallback(G=>{let A=G.target.value;m(A),M?.(G);},[M]),Z=F.length,J=H||!!N;return u__namespace.createElement("div",{className:"gap-1 flex flex-col"},c&&u__namespace.createElement(h,{variant:"label-default",htmlFor:f,as:"label",color:w?"danger":"primary",className:g(i)},c),u__namespace.createElement("div",{className:g("relative flex flex-col gap-2 w-full rounded-lg border bg-background-0 px-3 md:py-3 py-2 text-secondary transition-colors duration-150",!w&&!T&&"border-secondary-50",w&&"border-tertiary-10",v&&"cursor-not-allowed opacity-50","focus-within:ring-2 focus-within:ring-primary-100",T&&ue)},u__namespace.createElement("div",{className:"flex relative"},u__namespace.createElement("input",{ref:Q,id:f,className:g("font-sans text-sm flex w-full bg-background-0 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-secondary text-primary disabled:cursor-not-allowed focus:outline-none rounded-lg",o&&"pr-10",t),value:F,maxLength:N,onChange:E,"aria-invalid":w,disabled:v,...D}),(o||r)&&u__namespace.createElement("div",{className:"absolute inset-y-0 right-0 flex items-center"},r?u__namespace.createElement(I,{name:r,color:w?"danger":"secondary",size:s,title:p}):o)),d),u__namespace.createElement("div",{className:"flex justify-between gap-2"},w&&b||S?u__namespace.createElement(h,{variant:"body-xxs",color:w?"danger":"secondary",className:"mt-1"},w?b:S):null,J&&u__namespace.createElement(h,{variant:"body-xxs",color:w?"danger":"secondary",className:"text-right mt-1"},u__namespace.createElement(h,{variant:"body-xxs",as:"span",color:"primary-100",className:"font-bold"},Z),N&&`/${N}`," characters")))});var le=u.forwardRef(({value:t,suggestion:o,onChange:r,onKeyDown:a,className:s,"aria-controls":p,"aria-activedescendant":c,"aria-autocomplete":i,...f},d)=>u__namespace.default.createElement("div",{className:"relative w-full"},u__namespace.default.createElement(ee,{ref:d,value:t,onChange:T=>r(T.target.value),onKeyDown:a,className:g("bg-transparent",s),"aria-controls":p,"aria-activedescendant":c,"aria-autocomplete":i,...f}),o&&u__namespace.default.createElement("div",{className:"absolute inset-0 top-6 flex items-center px-3 md:py-3 py-2 text-secondary opacity-40 pointer-events-none text-sm"},t,o.slice(t.length))));le.displayName="AutocompleteInput";var ye={pink:"bg-tertiary-5",orange:"bg-tertiary-15",green:"bg-tertiary-25",purple:"bg-secondary-300"},Ke=t=>{let o=Object.keys(ye),r=t.split("").reduce((p,c)=>c.charCodeAt(0)+((p<<5)-p),0),a=Math.abs(r)%o.length;return o[a]},pe=u__namespace.forwardRef(({className:t,variant:o,iconName:r,children:a,...s},p)=>{let c=o||(typeof a=="string"?Ke(a):"pink");return u__namespace.createElement("span",{ref:p,className:g("inline-flex items-center gap-2","rounded px-2 py-1.5","text-sm font-medium",ye[c],t),...s},r&&u__namespace.createElement(I,{size:16,name:r}),u__namespace.createElement(h,{variant:"body-xxs-semibold",className:"mt-0.5"},a))});pe.displayName="Badge";var be=({content:t,children:o,side:r="bottom",align:a="center",className:s,delayDuration:p=200,defaultOpen:c,open:i,onOpenChange:f,longPressDuration:d=500})=>{let[T,w]=u.useState(c||false),b=null,S=i??T,H=u.useCallback(l=>{i||w(l),f?.(l);},[i,f]),N=u.useCallback(()=>{b=setTimeout(()=>{H(true);},d);},[H,d]),L=u.useCallback(()=>{b&&(clearTimeout(b),b=null),setTimeout(()=>H(false),1500);},[b,H]);return u__namespace.createElement(P__namespace.Provider,{delayDuration:p},u__namespace.createElement(P__namespace.Root,{open:S,onOpenChange:H},u__namespace.createElement(P__namespace.Trigger,{asChild:true},u__namespace.createElement("span",{tabIndex:0,onTouchStart:N,onTouchEnd:L,onTouchCancel:L},o)),u__namespace.createElement(P__namespace.Portal,null,u__namespace.createElement(P__namespace.Content,{side:r,align:a,sideOffset:4,className:g("z-50 overflow-hidden rounded-lg","bg-primary px-3 py-1.5","text-xs text-white","animate-in fade-in-0 zoom-in-95","data-[state=closed]:animate-out data-[state=closed]:fade-out-0","data-[side=bottom]:slide-in-from-top-2","data-[side=top]:slide-in-from-bottom-2","select-none","max-w-60","touch-none",s)},typeof t=="string"?u__namespace.createElement(h,{variant:"body-default-medium",color:"white"},t):t,u__namespace.createElement(P__namespace.Arrow,{className:"fill-text-primary",width:10,height:5})))))};var Ge=({text:t,highlight:o})=>{if(!o)return u__namespace.default.createElement(u__namespace.default.Fragment,null,t);let r=t.split(new RegExp(`(${o})`,"i"));return u__namespace.default.createElement(u__namespace.default.Fragment,null,r.map((a,s)=>a.toLowerCase()===o.toLowerCase()?u__namespace.default.createElement("span",{key:s,className:"font-bold"},a):a))},ve=u__namespace.default.forwardRef(({value:t,label:o,onChange:r,onKeyDown:a,onMouseEnter:s,onMouseLeave:p,selected:c,color:i,disabled:f,className:d,id:T,role:w,"aria-selected":b,searchValue:S="",tooltip:H,onClick:N,badge:L},l)=>{let M=u__namespace.default.createElement("button",{ref:l,type:"button",id:T,role:w,"aria-selected":b,disabled:f,className:g("relative w-full text-left px-2 py-1.5 text-sm rounded outline-none","cursor-pointer hover:bg-gray-100","disabled:opacity-50 disabled:cursor-not-allowed",c&&"bg-gray-100","flex items-center gap-2",d),onClick:()=>{r?.(t),N?.();},onKeyDown:a,onMouseEnter:s,onMouseLeave:p},u__namespace.default.createElement(h,{variant:"body-default-medium",color:i==="danger"?"danger":"inherit"},typeof o=="string"?u__namespace.default.createElement(Ge,{text:o,highlight:S}):o),L&&u__namespace.default.createElement(pe,null,L));return H?u__namespace.default.createElement(be,{content:H},M):M});var te=u__namespace.default.forwardRef(({children:t,type:o="button",className:r,disabled:a,...s},p)=>u__namespace.default.createElement("button",{ref:p,type:o,disabled:a,className:g("appearance-none hover:opacity-80 transition-all active:scale-95",xe,a&&"opacity-50 cursor-not-allowed",r),...s},t));te.displayName="Pressable";var Me=({children:t,color:o="primary",className:r,onClose:a,...s})=>{let[p,c]=u.useState(false),i=u.useCallback(()=>{c(true);},[]),f=u.useCallback(()=>{c(false);},[]),d=u__namespace.default.createElement("div",{className:g("flex gap-2",a?"justify-between items-center":"items-center justify-center","hover:bg-primary-100 rounded bg-secondary-400 px-2 py-1 sm:px-3 sm:py-1.5 h-min hover:text-white",o==="primary"?"text-primary-100":"text-primary",r),onMouseEnter:i,onMouseLeave:f},typeof t=="string"?u__namespace.default.createElement(h,{color:"inherit",variant:["md:body-default-medium","body-xxs-medium"],className:"truncate pt-0.5"},t):t,a&&u__namespace.default.createElement(te,{...s,onClick:a,className:"flex items-center justify-center"},u__namespace.default.createElement(I,{name:"close",size:12,color:p?"white":"primaryBlue"})));return a?d:u__namespace.default.createElement(te,{...s},d)};var Xt=({options:t,selectedValues:o,onSelectionChange:r,placeholder:a="Select items...",className:s,label:p,labelClassName:c,id:i,maxSelections:f,disabled:d,noOptionsMessage:T,loading:w,error:b,errorMessage:S,helperText:H,container:N,autocomplete:L=false})=>{let[l,M]=u.useState(false),[v,D]=u.useState(""),[Q,F]=u.useState({}),[m,E]=u.useState(-1),[Z,J]=u.useState(-1),G=u.useRef(null),A=u.useRef(null),j=u.useMemo(()=>t.length>0&&"options"in t[0],[t]),X=u.useMemo(()=>t.length?j?t.reduce((e,n)=>[...e,...n.options],[]):t:[],[j,t]),me=u.useMemo(()=>X.filter(e=>o.includes(e.value)),[X,o]),K=u.useMemo(()=>f!==undefined&&o.length>=f,[f,o]),x=u.useMemo(()=>X.filter(e=>o.includes(e.value)||K?false:v&&typeof e.label=="string"?e.label.toLowerCase().includes(v.toLowerCase()):true),[X,v,o,K]),Le=u.useMemo(()=>j?t.map(e=>({...e,options:e.options.filter(n=>o.includes(n.value)||K?false:v&&typeof n.label=="string"?n.label.toLowerCase().includes(v.toLowerCase()):true)})).filter(e=>e.options.length>0):x.length>0?[{label:"",options:x}]:[],[j,t,v,o,x,K]),k=u.useCallback(e=>{o.includes(e)?r(o.filter(C=>C!==e)):K||r([...o,e]),A.current&&A.current.focus({preventScroll:true});},[o,r,K]),He=u.useCallback(e=>{F(n=>({...n,[e]:!n[e]}));},[]),re=u.useMemo(()=>!L||!v||!l?"":x.find(n=>typeof n.label=="string"&&n.label.toLowerCase().startsWith(v.toLowerCase())&&n.label.toLowerCase()!==v.toLowerCase()&&!o.includes(n.value))?.label?.toString()||"",[L,v,x,l,o]),de=u.useCallback(e=>{switch(e.key){case "ArrowDown":e.preventDefault(),e.altKey?M(true):l?E(n=>n<x.length-1?n+1:0):(M(true),E(0));break;case "ArrowUp":e.preventDefault(),e.altKey?M(false):l?E(n=>n>0?n-1:x.length-1):(M(true),E(x.length-1));break;case "PageUp":e.preventDefault(),l&&E(n=>Math.max(0,n-10));break;case "PageDown":e.preventDefault(),l&&E(n=>Math.min(x.length-1,n+10));break;case "Home":e.preventDefault(),l&&E(0);break;case "End":e.preventDefault(),l&&E(x.length-1);break;case "Enter":if(e.preventDefault(),m>=0&&x[m])k(x[m].value);else if(L&&re){let n=x.find(C=>typeof C.label=="string"&&C.label.toLowerCase().startsWith(v.toLowerCase())&&!o.includes(C.value));n&&k(n.value);}break;case "Tab":l?m>=0&&x[m]&&(e.preventDefault(),k(x[m].value)):(e.preventDefault(),M(true),E(0));break;case "Escape":e.preventDefault(),M(false),D("");break}},[l,m,x,k,L,re,v,o]),Ce=u.useCallback(e=>{switch(e.key){case "ArrowDown":e.preventDefault(),E(n=>n<x.length-1?n+1:0);break;case "ArrowUp":e.preventDefault(),E(n=>n>0?n-1:x.length-1);break;case "Enter":case "Space":e.preventDefault(),m>=0&&x[m]&&k(x[m].value);break;case "Escape":e.preventDefault(),M(false),A.current?.focus();break;case "Tab":e.preventDefault(),m>=0&&x[m]&&k(x[m].value);break}},[m,x,k]);return u.useEffect(()=>{if(l){let e=A.current;if(e){e.focus({preventScroll:true});let n=e.value.length;e.setSelectionRange(n,n);}}},[l]),u.useEffect(()=>{l||E(-1);},[l]),u.useEffect(()=>{if(l&&m>=0&&G.current){let e=G.current.querySelector(`[id="${i}-option-${m}"]`);e&&e.scrollIntoView({block:"nearest",behavior:"smooth"});}},[m,l,i]),u.useEffect(()=>{l&&m===-1&&E(0);},[l,m]),u.useEffect(()=>{if(j){let e=t.reduce((n,C)=>({...n,[C.label]:true}),{});F(e);}},[j,t]),u__namespace.default.createElement("div",{className:g("flex flex-col gap-2",s)},p&&u__namespace.default.createElement(h,{variant:"label-default",htmlFor:i,as:"label",color:b?"danger":"primary",className:g(c)},p),u__namespace.default.createElement(O__namespace.Root,{open:l&&!d,onOpenChange:e=>{d||(M(e),e||(D(""),E(-1)));}},u__namespace.default.createElement("div",{className:"relative w-full font-sans text-secondary"},u__namespace.default.createElement(O__namespace.Trigger,{asChild:true},u__namespace.default.createElement("button",{type:"button",className:"w-full text-left",disabled:d},L?u__namespace.default.createElement(le,{ref:A,id:i,placeholder:a,value:v,suggestion:re,onChange:e=>{D(e),l||M(true);},onKeyDown:de,className:"flex-1",forceShowFocusRing:l,disabled:d,error:b,"aria-expanded":l,"aria-haspopup":"listbox","aria-controls":`${i}-listbox`,"aria-activedescendant":m>=0?`${i}-option-${m}`:undefined}):u__namespace.default.createElement(ee,{ref:A,id:i,placeholder:a,value:v,onChange:e=>{D(e.target.value),l||M(true);},onKeyDown:de,className:"flex-1",forceShowFocusRing:l,error:b,"aria-expanded":l,"aria-haspopup":"listbox","aria-controls":`${i}-listbox`,"aria-activedescendant":m>=0?`${i}-option-${m}`:undefined,disabled:d||!!f&&o.length>=f}))),u__namespace.default.createElement(O__namespace.Portal,{container:N},u__namespace.default.createElement(O__namespace.Content,{className:"w-[--radix-popover-trigger-width] overflow-y-scroll p-1 bg-background-0 rounded-md shadow-lg border z-[9999] data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out outline-none",side:"bottom",align:"start",sideOffset:4,onOpenAutoFocus:e=>e.preventDefault(),onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:e=>e.preventDefault(),onInteractOutside:e=>{e.preventDefault(),M(false),D(""),E(-1);}},u__namespace.default.createElement("div",{ref:G,className:"max-h-60 flex flex-col items-start outline-none",role:"listbox",id:`${i}-listbox`,"aria-label":p,"aria-multiselectable":"true","aria-busy":w},w?u__namespace.default.createElement(h,{variant:"label-default",className:"text-secondary p-2"},"Loading..."):x.length>0?Le.map((e,n)=>u__namespace.default.createElement(V__namespace.Root,{key:e.label||n,className:"w-full",open:Q[e.label]??true,onOpenChange:()=>e.label&&He(e.label)},e.label&&u__namespace.default.createElement(V__namespace.Trigger,{asChild:true},u__namespace.default.createElement("div",{className:"w-full flex items-center justify-between px-2 py-1.5 hover:bg-gray-50",tabIndex:-1},u__namespace.default.createElement(h,{variant:"body-default-bold",color:"secondary"},e.label),u__namespace.default.createElement(I,{name:"arrow-down",className:g("transition-transform",Q[e.label]&&"rotate-180"),size:16}))),u__namespace.default.createElement(V__namespace.Content,{className:"data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up"},e.options.map((C,Pe)=>{let Y=x.findIndex($e=>$e.value===C.value);return u__namespace.default.createElement(ve,{key:`${n}-${Pe}`,label:C.label,value:C.value,onChange:k,onKeyDown:Ce,className:"pl-4",selected:Z===Y||Z===-1&&m===Y,id:`${i}-option-${Y}`,role:"option","aria-selected":o.includes(C.value),searchValue:v,onMouseEnter:()=>J(Y),onMouseLeave:()=>J(-1)})})))):u__namespace.default.createElement(h,{variant:"label-default",className:"text-secondary p-2"},T||"No results found")))))),me.length>0&&u__namespace.default.createElement("div",{className:"flex flex-col gap-2"},u__namespace.default.createElement("div",{className:"flex flex-wrap gap-2"},me.map(e=>u__namespace.default.createElement(Me,{key:e.value,onClose:()=>k(e.value),disabled:d},e.label))),K&&u__namespace.default.createElement(h,{variant:"body-xxs",color:"secondary"},"Maximum of ",f," items selected")),b&&S||H?u__namespace.default.createElement(h,{variant:"body-xxs",color:b?"danger":"secondary",className:"mt-1"},b?S:H):null)};exports.MultiSelectCombobox=Xt;//# sourceMappingURL=MultiSelectCombobox.cjs.map
|
|
7
|
+
`,...m},s)});h.displayName="Text";var ee=x__namespace.forwardRef(({className:t,end:o,iconName:r,color:a,size:s,title:p,label:m,labelClassName:i,id:f,children:d,forceShowFocusRing:T,error:w,errorMessage:y,helperText:S,showCharacterCount:H,maxLength:N,value:E,defaultValue:l,onChange:L,disabled:b,...D},Q)=>{let[F,c]=x__namespace.useState(E?.toString()||l?.toString()||"");x__namespace.useEffect(()=>{E!==void 0&&c(E?.toString()||"");},[E]);let M=G=>{let A=G.target.value;c(A),L?.(G);},Z=F.length,J=H||!!N;return x__namespace.createElement("div",{className:"gap-1 flex flex-col"},m&&x__namespace.createElement(h,{variant:"label-default",htmlFor:f,as:"label",color:w?"danger":"primary",className:g(i)},m),x__namespace.createElement("div",{className:g("relative flex flex-col gap-2 w-full rounded-lg border bg-background-0 px-3 md:py-3 py-2 text-secondary transition-colors duration-150",!w&&!T&&"border-secondary-50",w&&"border-tertiary-10",b&&"cursor-not-allowed opacity-50","focus-within:ring-2 focus-within:ring-primary-100",T&&xe)},x__namespace.createElement("div",{className:"flex relative"},x__namespace.createElement("input",{ref:Q,id:f,className:g("font-sans text-sm flex w-full bg-background-0 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-secondary text-primary disabled:cursor-not-allowed focus:outline-none rounded-lg",o&&"pr-10",t),value:F,maxLength:N,onChange:M,"aria-invalid":w,disabled:b,...D}),(o||r)&&x__namespace.createElement("div",{className:"absolute inset-y-0 right-0 flex items-center"},r?x__namespace.createElement(I,{name:r,color:w?"danger":"secondary",size:s,title:p}):o)),d),x__namespace.createElement("div",{className:"flex justify-between gap-2"},w&&y||S?x__namespace.createElement(h,{variant:"body-xxs",color:w?"danger":"secondary",className:"mt-1"},w?y:S):null,J&&x__namespace.createElement(h,{variant:"body-xxs",color:w?"danger":"secondary",className:"text-right mt-1"},x__namespace.createElement(h,{variant:"body-xxs",as:"span",className:"font-bold"},Z),N&&`/${N}`," characters")))});var le=x.forwardRef(({value:t,suggestion:o,onChange:r,onKeyDown:a,className:s,"aria-controls":p,"aria-activedescendant":m,"aria-autocomplete":i,...f},d)=>x__namespace.default.createElement("div",{className:"relative w-full"},x__namespace.default.createElement(ee,{ref:d,value:t,onChange:T=>r(T.target.value),onKeyDown:a,className:g("bg-transparent",s),"aria-controls":p,"aria-activedescendant":m,"aria-autocomplete":i,...f}),o&&t&&x__namespace.default.createElement("div",{className:"absolute inset-0 top-6 flex items-center px-3 md:py-3 py-2 text-secondary opacity-40 pointer-events-none text-sm"},t,o.slice(t.length))));le.displayName="AutocompleteInput";var ye={pink:"bg-tertiary-5",orange:"bg-tertiary-15",green:"bg-tertiary-25",purple:"bg-secondary-300"},Ke=t=>{let o=Object.keys(ye),r=t.split("").reduce((p,m)=>m.charCodeAt(0)+((p<<5)-p),0),a=Math.abs(r)%o.length;return o[a]},pe=x__namespace.forwardRef(({className:t,variant:o,iconName:r,children:a,...s},p)=>{let m=o||(typeof a=="string"?Ke(a):"pink");return x__namespace.createElement("span",{ref:p,className:g("inline-flex items-center gap-2","rounded px-2 py-1.5","text-sm font-medium",ye[m],t),...s},r&&x__namespace.createElement(I,{size:16,name:r}),x__namespace.createElement(h,{variant:"body-xxs-semibold",className:"mt-0.5"},a))});pe.displayName="Badge";function be({content:t,children:o,side:r="bottom",align:a="center",className:s,delayDuration:p=200,defaultOpen:m,open:i,onOpenChange:f,longPressDuration:d=500}){let[T,w]=x.useState(m||false),y=null,S=i??T,H=x.useCallback(l=>{i||w(l),f?.(l);},[i,f]),N=x.useCallback(()=>{y=setTimeout(()=>{H(true);},d);},[H,d]),E=x.useCallback(()=>{y&&(clearTimeout(y),y=null),setTimeout(()=>H(false),1500);},[y,H]);return x__namespace.createElement(P__namespace.Provider,{delayDuration:p},x__namespace.createElement(P__namespace.Root,{open:S,onOpenChange:H},x__namespace.createElement(P__namespace.Trigger,{asChild:true},x__namespace.createElement("span",{tabIndex:0,onTouchStart:N,onTouchEnd:E,onTouchCancel:E},o)),x__namespace.createElement(P__namespace.Portal,null,x__namespace.createElement(P__namespace.Content,{side:r,align:a,sideOffset:4,className:g("z-50 overflow-hidden rounded-lg","bg-primary px-3 py-1.5","text-xs text-white","animate-in fade-in-0 zoom-in-95","data-[state=closed]:animate-out data-[state=closed]:fade-out-0","data-[side=bottom]:slide-in-from-top-2","data-[side=top]:slide-in-from-bottom-2","select-none","max-w-60","touch-none",s)},typeof t=="string"?x__namespace.createElement(h,{variant:"body-default-medium",color:"white"},t):t,x__namespace.createElement(P__namespace.Arrow,{className:"fill-text-primary",width:10,height:5})))))}function Ge({text:t,highlight:o}){if(!o)return x__namespace.default.createElement(x__namespace.default.Fragment,null,t);let r=t.split(new RegExp(`(${o})`,"i"));return x__namespace.default.createElement(x__namespace.default.Fragment,null,r.map((a,s)=>a.toLowerCase()===o.toLowerCase()?x__namespace.default.createElement("span",{key:s,className:"font-bold"},a):a))}var ve=x__namespace.default.forwardRef(({value:t,label:o,onChange:r,onKeyDown:a,onMouseEnter:s,onMouseLeave:p,selected:m,color:i,disabled:f,className:d,id:T,role:w,"aria-selected":y,searchValue:S="",tooltip:H,onClick:N,badge:E},l)=>{let L=x__namespace.default.createElement("button",{ref:l,type:"button",id:T,role:w,"aria-selected":y,disabled:f,className:g("relative w-full text-left px-2 py-1.5 text-sm rounded outline-none","cursor-pointer hover:bg-gray-100","disabled:opacity-50 disabled:cursor-not-allowed",m&&"bg-gray-100","flex items-center gap-2",d),onClick:()=>{r?.(t),N?.();},onKeyDown:a,onMouseEnter:s,onMouseLeave:p},x__namespace.default.createElement(h,{variant:"body-default-medium",color:i==="danger"?"danger":"inherit"},typeof o=="string"?x__namespace.default.createElement(Ge,{text:o,highlight:S}):o),E&&x__namespace.default.createElement(pe,null,E));return H?x__namespace.default.createElement(be,{content:H},L):L});var te=x__namespace.default.forwardRef(({children:t,type:o="button",className:r,disabled:a,...s},p)=>x__namespace.default.createElement("button",{ref:p,type:o,disabled:a,className:g("appearance-none hover:opacity-80 transition-all active:scale-95",ue,a&&"opacity-50 cursor-not-allowed",r),...s},t));te.displayName="Pressable";function Me({children:t,color:o="primary",className:r,onClose:a,...s}){let[p,m]=x.useState(false),i=x.useCallback(()=>{m(true);},[]),f=x.useCallback(()=>{m(false);},[]),d=x__namespace.default.createElement("div",{className:g("flex gap-2",a?"justify-between items-center max-w-fit":"items-center justify-center","hover:bg-primary-100 rounded bg-secondary-400 px-2 py-1 sm:px-3 sm:py-1.5 h-min hover:text-white",o==="primary"?"text-primary-100":"text-primary",r),onMouseEnter:i,onMouseLeave:f},typeof t=="string"?x__namespace.default.createElement(h,{color:"inherit",variant:["md:body-default-medium","body-xxs-medium"],className:"truncate pt-0.5"},t):t,a&&x__namespace.default.createElement(te,{...s,onClick:a,className:"flex items-center justify-center"},x__namespace.default.createElement(I,{name:"close",size:12,color:p?"white":"primaryBlue"})));return a?d:x__namespace.default.createElement(te,{...s},d)}function jt({options:t,selectedValues:o,onSelectionChange:r,placeholder:a="Select items...",className:s,label:p,labelClassName:m,id:i,maxSelections:f,disabled:d,noOptionsMessage:T,loading:w,error:y,errorMessage:S,helperText:H,container:N,autocomplete:E=false}){let[l,L]=x.useState(false),[b,D]=x.useState(""),[Q,F]=x.useState({}),[c,M]=x.useState(-1),[Z,J]=x.useState(-1),G=x.useRef(null),A=x.useRef(null),j=x.useMemo(()=>t.length>0&&"options"in t[0],[t]),X=x.useMemo(()=>t.length?j?t.reduce((e,n)=>[...e,...n.options],[]):t:[],[j,t]),ce=x.useMemo(()=>X.filter(e=>o.includes(e.value)),[X,o]),K=x.useMemo(()=>f!==void 0&&o.length>=f,[f,o]),u=x.useMemo(()=>X.filter(e=>o.includes(e.value)||K?false:b&&typeof e.label=="string"?e.label.toLowerCase().includes(b.toLowerCase()):true),[X,b,o,K]),Le=x.useMemo(()=>j?t.map(e=>({...e,options:e.options.filter(n=>o.includes(n.value)||K?false:b&&typeof n.label=="string"?n.label.toLowerCase().includes(b.toLowerCase()):true)})).filter(e=>e.options.length>0):u.length>0?[{label:"",options:u}]:[],[j,t,b,o,u,K]),k=x.useCallback(e=>{o.includes(e)?r(o.filter(C=>C!==e)):K||r([...o,e]),A.current&&A.current.focus({preventScroll:true});},[o,r,K]),He=x.useCallback(e=>{F(n=>({...n,[e]:!n[e]}));},[]),re=x.useMemo(()=>!E||!b||!l?"":u.find(n=>typeof n.label=="string"&&n.label.toLowerCase().startsWith(b.toLowerCase())&&n.label.toLowerCase()!==b.toLowerCase()&&!o.includes(n.value))?.label?.toString()||"",[E,b,u,l,o]),de=x.useCallback(e=>{switch(e.key){case "ArrowDown":e.preventDefault(),e.altKey?L(true):l?M(n=>n<u.length-1?n+1:0):(L(true),M(0));break;case "ArrowUp":e.preventDefault(),e.altKey?L(false):l?M(n=>n>0?n-1:u.length-1):(L(true),M(u.length-1));break;case "PageUp":e.preventDefault(),l&&M(n=>Math.max(0,n-10));break;case "PageDown":e.preventDefault(),l&&M(n=>Math.min(u.length-1,n+10));break;case "Home":e.preventDefault(),l&&M(0);break;case "End":e.preventDefault(),l&&M(u.length-1);break;case "Enter":if(e.preventDefault(),c>=0&&u[c])k(u[c].value);else if(E&&re){let n=u.find(C=>typeof C.label=="string"&&C.label.toLowerCase().startsWith(b.toLowerCase())&&!o.includes(C.value));n&&k(n.value);}break;case "Tab":l?c>=0&&u[c]&&(e.preventDefault(),k(u[c].value)):(e.preventDefault(),L(true),M(0));break;case "Escape":e.preventDefault(),L(false),D("");break}},[l,c,u,k,E,re,b,o]),Ce=x.useCallback(e=>{switch(e.key){case "ArrowDown":e.preventDefault(),M(n=>n<u.length-1?n+1:0);break;case "ArrowUp":e.preventDefault(),M(n=>n>0?n-1:u.length-1);break;case "Enter":case "Space":e.preventDefault(),c>=0&&u[c]&&k(u[c].value);break;case "Escape":e.preventDefault(),L(false),A.current?.focus();break;case "Tab":e.preventDefault(),c>=0&&u[c]&&k(u[c].value);break}},[c,u,k]);return x.useEffect(()=>{if(l){let e=A.current;if(e){e.focus({preventScroll:true});let n=e.value.length;e.setSelectionRange(n,n);}}},[l]),x.useEffect(()=>{l||M(-1);},[l]),x.useEffect(()=>{if(l&&c>=0&&G.current){let e=G.current.querySelector(`[id="${i}-option-${c}"]`);e&&e.scrollIntoView({block:"nearest",behavior:"smooth"});}},[c,l,i]),x.useEffect(()=>{l&&c===-1&&M(0);},[l,c]),x.useEffect(()=>{if(j){let e=t.reduce((n,C)=>({...n,[C.label]:true}),{});F(e);}},[j,t]),x__namespace.default.createElement("div",{className:g("flex flex-col gap-2",s)},p&&x__namespace.default.createElement(h,{variant:"label-default",htmlFor:i,as:"label",color:y?"danger":"primary",className:g(m)},p),x__namespace.default.createElement(O__namespace.Root,{open:l&&!d,onOpenChange:e=>{d||(L(e),e||(D(""),M(-1)));}},x__namespace.default.createElement("div",{className:"relative w-full font-sans text-secondary"},x__namespace.default.createElement(O__namespace.Trigger,{asChild:true},x__namespace.default.createElement("button",{type:"button",className:"w-full text-left",disabled:d},E?x__namespace.default.createElement(le,{ref:A,id:i,placeholder:a,value:b,suggestion:re,onChange:e=>{D(e),l||L(true);},onKeyDown:de,className:"flex-1",forceShowFocusRing:l,disabled:d,error:y,"aria-expanded":l,"aria-haspopup":"listbox","aria-controls":`${i}-listbox`,"aria-activedescendant":c>=0?`${i}-option-${c}`:void 0}):x__namespace.default.createElement(ee,{ref:A,id:i,placeholder:a,value:b,onChange:e=>{D(e.target.value),l||L(true);},onKeyDown:de,className:"flex-1",forceShowFocusRing:l,error:y,"aria-expanded":l,"aria-haspopup":"listbox","aria-controls":`${i}-listbox`,"aria-activedescendant":c>=0?`${i}-option-${c}`:void 0,disabled:d||!!f&&o.length>=f}))),x__namespace.default.createElement(O__namespace.Portal,{container:N},x__namespace.default.createElement(O__namespace.Content,{className:"w-[--radix-popover-trigger-width] overflow-y-scroll-auto p-1 bg-background-0 rounded-md shadow-lg border z-[9999] data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out outline-none",side:"bottom",align:"start",sideOffset:4,onOpenAutoFocus:e=>e.preventDefault(),onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:e=>e.preventDefault(),onInteractOutside:e=>{e.preventDefault(),L(false),D(""),M(-1);}},x__namespace.default.createElement("div",{ref:G,className:"max-h-60 flex flex-col items-start outline-none",role:"listbox",id:`${i}-listbox`,"aria-label":p,"aria-multiselectable":"true","aria-busy":w},w?x__namespace.default.createElement(h,{variant:"label-default",className:"text-secondary p-2"},"Loading..."):u.length>0?Le.map((e,n)=>x__namespace.default.createElement(V__namespace.Root,{key:e.label||n,className:"w-full",open:Q[e.label]??true,onOpenChange:()=>e.label&&He(e.label)},e.label&&x__namespace.default.createElement(V__namespace.Trigger,{asChild:true},x__namespace.default.createElement("div",{className:"w-full flex items-center justify-between px-2 py-1.5 hover:bg-gray-50",tabIndex:-1},x__namespace.default.createElement(h,{variant:"body-default-bold",color:"secondary"},e.label),x__namespace.default.createElement(I,{name:"arrow-down",className:g("transition-transform",Q[e.label]&&"rotate-180"),size:16}))),x__namespace.default.createElement(V__namespace.Content,{className:"data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up"},e.options.map((C,Pe)=>{let Y=u.findIndex($e=>$e.value===C.value);return x__namespace.default.createElement(ve,{key:`${n}-${Pe}`,label:C.label,value:C.value,onChange:k,onKeyDown:Ce,className:"pl-4",selected:Z===Y||Z===-1&&c===Y,id:`${i}-option-${Y}`,role:"option","aria-selected":o.includes(C.value),searchValue:b,onMouseEnter:()=>J(Y),onMouseLeave:()=>J(-1)})})))):x__namespace.default.createElement(h,{variant:"label-default",className:"text-secondary p-2"},T||"No results found")))))),ce.length>0&&x__namespace.default.createElement("div",{className:"flex flex-col gap-2"},x__namespace.default.createElement("div",{className:"flex flex-wrap gap-2"},ce.map(e=>x__namespace.default.createElement(Me,{key:e.value,onClose:()=>k(e.value),disabled:d},e.label))),K&&x__namespace.default.createElement(h,{variant:"body-xxs",color:"secondary"},"Maximum of ",f," items selected")),y&&S||H?x__namespace.default.createElement(h,{variant:"body-xxs",color:y?"danger":"secondary",className:"mt-1"},y?S:H):null)}exports.MultiSelectCombobox=jt;//# sourceMappingURL=MultiSelectCombobox.cjs.map
|
|
8
8
|
//# sourceMappingURL=MultiSelectCombobox.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/index.ts","../../src/utils/tailwind.ts","../../src/utils/responsive.ts","../../src/components/Icon.tsx","../../src/components/Text.tsx","../../src/components/Input.tsx","../../src/components/AutocompleteInput.tsx","../../src/components/Badge.tsx","../../src/components/Tooltip.tsx","../../src/components/Option.tsx","../../src/components/Tag.tsx","../../src/components/Pressable.tsx","../../src/components/MultiSelectCombobox.tsx"],"names":["cn","inputs","twMerge","clsx","focusRingStyles","focusRingStylesCoerced","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","size","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","s","breakpoint","valueStr","value","valueKey","COLOR_MAP","Icon","React","name","color","title","className","style","props","ref","IconComponent","IconMap","responsiveSizeClasses","responsiveSizeStyles","HEADING_ELEMENT_MAP","getElementFromVariant","variant","category","fontWeight","processVariants","variants","typographyClass","Text","as","children","weight","typographyClasses","colorClasses","suggestedElement","baseVariant","Input","y","end","iconName","label","labelClassName","id","forceShowFocusRing","error","errorMessage","helperText","showCharacterCount","maxLength","defaultValue","onChange","disabled","currentValue","setCurrentValue","handleChange","e","newValue","characterCount","showCount","AutocompleteInput","forwardRef","suggestion","onKeyDown","ariaControls","ariaActiveDescendant","ariaAutocomplete","stringToVariant","str","variantKeys","hash","acc","char","index","Badge","z","finalVariant","Tooltip","content","side","align","delayDuration","defaultOpen","controlledOpen","onOpenChange","longPressDuration","isOpen","setIsOpen","useState","longPressTimer","open","handleOpenChange","useCallback","newOpen","handleTouchStart","handleTouchEnd","R","P","HighlightedText","text","highlight","parts","part","i","Option","onMouseEnter","onMouseLeave","selected","role","ariaSelected","searchValue","tooltip","onClick","badge","Pressable","type","Tag","onClose","pressableProps","isHovered","setIsHovered","handleMouseEnter","handleMouseLeave","MultiSelectCombobox","options","selectedValues","onSelectionChange","placeholder","maxSelections","noOptionsMessage","loading","container","autocomplete","setOpen","setSearchValue","expandedGroups","setExpandedGroups","highlightedIndex","setHighlightedIndex","hoveredIndex","setHoveredIndex","listRef","useRef","inputRef","isGrouped","useMemo","flatOptions","group","selectedOptions","option","isMaxSelected","visibleOptions","filteredGroups","handleOptionSelect","optionValue","v","toggleGroup","groupLabel","prev","opt","handleKeyDown","event","matchingOption","handleOptionKeyDown","useEffect","input","length","highlightedOption","initialState","O","groupIndex","V","optionIndex"],"mappings":"kvBAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,qBAAQC,CAAAA,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCqEO,IAAMG,EAAAA,CACX,iFAGK,IAAMC,EAAAA,CAAyB,0BC5DtC,IAAMC,EAAsC,CAAA,CAC1C,GAAM,mBACN,CAAA,EAAA,CAAM,mBACN,CAAA,EAAA,CAAM,oBACN,EAAM,CAAA,mBAAA,CACN,GAAM,mBACN,CAAA,EAAA,CAAM,oBACN,EAAM,CAAA,mBAAA,CACN,GAAM,mBACN,CAAA,EAAA,CAAM,oBACN,EAAM,CAAA,mBAAA,CACN,GAAM,mBACN,CAAA,EAAA,CAAM,mBACR,CAEMC,CAAAA,EAAAA,CAAgE,CACpE,EAAA,CAAI,CACF,EAAM,CAAA,yBAAA,CACN,GAAM,yBACN,CAAA,EAAA,CAAM,0BACN,EAAM,CAAA,yBAAA,CACN,EAAM,CAAA,yBAAA,CACN,GAAM,yBACN,CAAA,EAAA,CAAM,0BACN,EAAM,CAAA,yBAAA,CACN,GAAM,yBACN,CAAA,EAAA,CAAM,yBACN,CAAA,EAAA,CAAM,0BACN,EAAM,CAAA,yBACR,EACA,EAAI,CAAA,CACF,GAAM,yBACN,CAAA,EAAA,CAAM,0BACN,EAAM,CAAA,yBAAA,CACN,GAAM,yBACN,CAAA,EAAA,CAAM,0BACN,EAAM,CAAA,yBAAA,CACN,GAAM,yBACN,CAAA,EAAA,CAAM,yBACN,CAAA,EAAA,CAAM,0BACN,EAAM,CAAA,yBAAA,CACN,GAAM,yBACN,CAAA,EAAA,CAAM,yBACR,CACA,CAAA,EAAA,CAAI,CACF,EAAA,CAAM,0BACN,EAAM,CAAA,yBAAA,CACN,GAAM,yBACN,CAAA,EAAA,CAAM,0BACN,EAAM,CAAA,yBAAA,CACN,EAAM,CAAA,yBAAA,CACN,GAAM,yBACN,CAAA,EAAA,CAAM,0BACN,EAAM,CAAA,yBAAA,CACN,GAAM,yBACN,CAAA,EAAA,CAAM,0BACN,EAAM,CAAA,yBACR,EACA,EAAI,CAAA,CACF,GAAM,yBACN,CAAA,EAAA,CAAM,0BACN,EAAM,CAAA,yBAAA,CACN,EAAM,CAAA,yBAAA,CACN,GAAM,yBACN,CAAA,EAAA,CAAM,0BACN,EAAM,CAAA,yBAAA,CACN,GAAM,yBACN,CAAA,EAAA,CAAM,yBACN,CAAA,EAAA,CAAM,0BACN,EAAM,CAAA,yBAAA,CACN,GAAM,yBACR,CAAA,CACA,MAAO,CACL,EAAA,CAAM,2BACN,CAAA,EAAA,CAAM,4BACN,EAAM,CAAA,2BAAA,CACN,GAAM,2BACN,CAAA,EAAA,CAAM,4BACN,EAAM,CAAA,2BAAA,CACN,GAAM,2BACN,CAAA,EAAA,CAAM,4BACN,EAAM,CAAA,2BAAA,CACN,GAAM,2BACN,CAAA,EAAA,CAAM,4BACN,EAAM,CAAA,2BACR,CACF,CAAA,CAEMC,EAAcC,CACX,EAAA,MAAA,CAAOA,CAAI,CAGPC,CAAAA,EAAAA,CAAoB,CAC/BD,CACAE,CAAAA,CAAAA,CAAmB,EAIhB,GAAA,CACH,IAAMC,CAAoB,CAAA,GACpBC,CAAiC,CAAA,GAGvC,GAAIJ,CAAAA,GAAS,SAAW,CAAA,CACtB,IAAMK,CAAMN,CAAAA,CAAAA,CAAWG,CAAQ,CAC3BG,CAAAA,CAAAA,CACFF,EAAQ,IAAKN,CAAAA,EAAAA,CAAWQ,CAAG,CAAC,CAAA,EAE5BD,EAAO,MAAS,CAAA,CAAA,EAAGF,CAAQ,CAC3BE,EAAAA,CAAAA,CAAAA,CAAAA,CAAO,MAAQ,CAAGF,EAAAA,CAAQ,CAE9B,EAAA,CAAA,EAAA,CAGA,GAAI,OAAOF,CAAAA,EAAS,SAAU,CAC5B,IAAMK,EAAMN,CAAWC,CAAAA,CAAI,CACvBK,CAAAA,CAAAA,CACFF,EAAQ,IAAKN,CAAAA,EAAAA,CAAWQ,CAAG,CAAC,CAAA,EAE5BD,EAAO,MAAS,CAAA,CAAA,EAAGJ,CAAI,CAAA,EAAA,CAAA,CACvBI,EAAO,KAAQ,CAAA,CAAA,EAAGJ,CAAI,CAE1B,EAAA,CAAA,EAAA,CAGA,GAAI,KAAM,CAAA,OAAA,CAAQA,CAAI,CAAG,CAAA,CACvB,IAAMM,CAAUP,CAAAA,CAAAA,CAAWG,CAAQ,CAC7BK,CAAAA,CAAAA,CAAoB,CACvBD,CAAWT,EAAAA,EAAAA,CAAWS,CAAO,CAAA,EAAM,MAAMJ,CAAQ,CAAA,OAAA,EAAUA,CAAQ,CACtE,GAAA,CAAA,CAAA,CAEAF,EAAK,OAASQ,CAAAA,CAAAA,EAAM,CAClB,GAAI,OAAOA,CAAM,EAAA,QAAA,CAAU,CACzB,GAAM,CAACC,EAAYC,CAAQ,CAAA,CAAIF,CAAE,CAAA,KAAA,CAAM,GAAG,CACpCG,CAAAA,CAAAA,CAAQ,SAASD,CAAU,CAAA,EAAE,EAC7BL,CAAMN,CAAAA,CAAAA,CAAWY,CAAK,CAC5BR,CAAAA,CAAAA,CAAQ,KACLE,CAAOP,EAAAA,EAAAA,CAAiBW,CAAU,CAAIJ,GAAAA,CAAG,GACxC,CAAGI,EAAAA,CAAU,CAAOE,IAAAA,EAAAA,CAAK,OAAOF,CAAU,CAAA,IAAA,EAAOE,CAAK,CAC1D,GAAA,CAAA,EACF,CACF,CAAC,CAAA,CAEDR,CAAQ,CAAA,IAAA,CAAK,GAAGI,CAAiB,EACnC,CAEA,GAAI,OAAOP,GAAS,QAAU,CAAA,CAC5B,GAAM,CAACS,EAAYC,CAAQ,CAAA,CAAIV,EAAK,KAAM,CAAA,GAAG,EACvCW,CAAQ,CAAA,QAAA,CAASD,CAAU,CAAA,EAAE,EAC7BE,CAAWb,CAAAA,CAAAA,CAAWY,CAAK,CACjCR,CAAAA,CAAAA,CAAQ,KACLS,CAAYd,EAAAA,EAAAA,CAAiBW,CAAU,CAAA,GAAIG,CAAQ,CAClD,EAAA,CAAA,EAAGH,CAAU,CAAOE,IAAAA,EAAAA,CAAK,OAAOF,CAAU,CAAA,IAAA,EAAOE,CAAK,CAAA,GAAA,CAC1D,EACF,CAEA,OAAO,CACL,qBAAuBR,CAAAA,CAAAA,CAAQ,KAAK,GAAG,CAAA,CACvC,oBAAsBC,CAAAA,CACxB,CACF,CChKA,CAAA,IAAMS,GAAwC,CAC5C,OAAA,CAAS,uBACT,SAAW,CAAA,wBAAA,CACX,MAAO,oBACP,CAAA,WAAA,CAAa,2BACb,QAAU,CAAA,uBAAA,CACV,OAAQ,qBACV,CAAA,CAEaC,EAAOC,oBAAM,CAAA,UAAA,CACxB,CACE,CACE,KAAAC,CACA,CAAA,IAAA,CAAAhB,EAAO,EACP,CAAA,KAAA,CAAAiB,EAAQ,SACR,CAAA,KAAA,CAAAC,CACA,CAAA,SAAA,CAAAC,EACA,KAAAC,CAAAA,CAAAA,CAAQ,EACR,CAAA,GAAGC,CACL,CACAC,CAAAA,CAAAA,GACG,CACH,IAAMC,EAAgBC,aAAQR,CAAAA,CAAI,EAC5B,CAAE,qBAAA,CAAAS,EAAuB,oBAAAC,CAAAA,CAAqB,EAAIzB,EACtDD,CAAAA,CAAAA,CACA,EACF,CAEA,CAAA,OACEe,qBAAA,aAAC,CAAA,KAAA,CAAA,CACC,UAAWxB,CACT,CAAA,kCAAA,CACAkC,CACAN,CAAAA,CACF,EACA,KAAO,CAAA,CACJ,gBAA4BN,EAAUI,CAAAA,CAAK,EAC5C,GAAGS,CAAAA,CACH,GAAGN,CACL,GAEAL,oBAAA,CAAA,aAAA,CAACQ,EAAA,CACC,GAAA,CAAKD,EACL,aAAa,CAAA,CAACJ,CACd,CAAA,YAAA,CAAYA,EACZ,MAAQF,CAAAA,CAAAA,CAAK,SAAS,QAAQ,CAAA,CAAI,UAAYH,EAAUI,CAAAA,CAAK,EAC5D,GAAGI,CAAAA,CACN,CACF,CAEJ,CACF,EAEAP,CAAK,CAAA,WAAA,CAAc,OCCnB,IAAMa,GAAmD,CACvD,EAAA,CAAI,KACJ,EAAI,CAAA,IAAA,CACJ,GAAI,IACJ,CAAA,EAAA,CAAI,IACJ,CAAA,EAAA,CAAI,IACN,CAEMC,CAAAA,EAAAA,CAAyBC,GAAwC,CACrE,GAAM,CAACC,CAAU9B,CAAAA,CAAI,CAAI6B,CAAAA,CAAAA,CAAQ,MAAM,GAAG,CAAA,CAE1C,OAAIC,CAAa,GAAA,SAAA,CACRH,GAAoB3B,CAAI,CAAA,EAAK,IAGlC8B,CAAa,GAAA,OAAA,CACR,QAGF,GACT,CAAA,CAIMC,GAAqC,CACzC,KAAA,CAAO,aACP,OAAS,CAAA,cAAA,CACT,QAAU,CAAA,eAAA,CACV,KAAM,WACR,CAAA,CAwBMC,GACJC,CAEKA,EAAAA,CAAAA,CAAAA,CAEgB,MAAM,OAAQA,CAAAA,CAAQ,CAAIA,CAAAA,CAAAA,CAAW,CAACA,CAAQ,CAAA,EAGhE,IAAKJ,CAAY,EAAA,CAChB,GAAIA,CAAQ,CAAA,QAAA,CAAS,GAAG,CAAA,CAAG,CACzB,GAAM,CAACpB,EAAYyB,CAAe,CAAA,CAAIL,EAAQ,KAAM,CAAA,GAAG,EACvD,OAAO,CAAA,EAAGpB,CAAU,CAASyB,MAAAA,EAAAA,CAAe,EAC9C,CACA,OAAO,QAAQL,CAAO,CAAA,CACxB,CAAC,CAAA,CACA,KAAK,GAAG,CAAA,CAZW,oBAeXM,CAAOpB,CAAAA,oBAAAA,CAAM,WACxB,CACE,CACE,OAAAc,CAAAA,CAAAA,CAAU,eACV,KAAAZ,CAAAA,CAAAA,CAAQ,UACR,EAAAmB,CAAAA,CAAAA,CACA,UAAAjB,CACA,CAAA,QAAA,CAAAkB,CACA,CAAA,MAAA,CAAAC,EACA,GAAGjB,CACL,EACAC,CACG,GAAA,CAEH,IAAMiB,CAAoBP,CAAAA,EAAAA,CAAgBH,CAAO,CAG3CW,CAAAA,CAAAA,CAAevB,IAAU,SAAY,CAAA,cAAA,CAAiB,QAAQA,CAAK,CAAA,CAAA,CAEnEwB,EAAmB1B,oBAAM,CAAA,OAAA,CAAQ,IAAM,CAC3C,IAAM2B,CACJ,CAAA,OAAOb,GAAY,QACfA,CAAAA,CAAAA,CAAQ,MAAM,GAAG,CAAA,CAAE,GAAI,EAAA,CACvB,MAAM,OAAQA,CAAAA,CAAO,EACnBA,CAAQ,CAAA,CAAC,EAAE,KAAM,CAAA,GAAG,CAAE,CAAA,GAAA,GACtB,cACR,CAAA,OAAOD,GAAsBc,CAA4B,CAC3D,EAAG,CAACb,CAAO,CAAC,CAIZ,CAAA,OAEEd,qBAAA,aAJiBqB,CAAAA,CAAAA,EAAMK,EAItB,CACC,GAAA,CAAKnB,EACL,SAAW,CAAA;AAAA;AAAA,UAAA,EAEPiB,CAAiB;AAAA,UAAA,EACjBC,CAAY;AAAA,UAAA,EACZF,CAAU,EAAA,CAAA,CAAA,EAAIP,EAAWO,CAAAA,CAAM,CAAC,CAAE,CAAA;AAAA,UAAA,EAClCnB,CAAS;AAAA,QAAA,CAAA,CAEZ,GAAGE,CAAAA,CAAAA,CAEHgB,CACH,CAEJ,CACF,CAEAF,CAAAA,CAAAA,CAAK,WAAc,CAAA,MAAA,CClKZ,IAAMQ,EAAAA,CAAcC,YACzB,CAAA,UAAA,CAAA,CACE,CACE,SAAAzB,CAAAA,CAAAA,CACA,GAAA0B,CAAAA,CAAAA,CACA,QAAAC,CAAAA,CAAAA,CACA,KAAA7B,CAAAA,CAAAA,CACA,KAAAjB,CACA,CAAA,KAAA,CAAAkB,CACA,CAAA,KAAA,CAAA6B,EACA,cAAAC,CAAAA,CAAAA,CACA,EAAAC,CAAAA,CAAAA,CACA,SAAAZ,CACA,CAAA,kBAAA,CAAAa,CACA,CAAA,KAAA,CAAAC,CACA,CAAA,YAAA,CAAAC,CACA,CAAA,UAAA,CAAAC,EACA,kBAAAC,CAAAA,CAAAA,CACA,SAAAC,CAAAA,CAAAA,CACA,MAAA5C,CACA,CAAA,YAAA,CAAA6C,CACA,CAAA,QAAA,CAAAC,EACA,QAAAC,CAAAA,CAAAA,CACA,GAAGrC,CACL,CACAC,CAAAA,CAAAA,GACG,CACH,GAAM,CAACqC,CAAcC,CAAAA,CAAe,CAAU,CAAAhB,YAAA,CAAA,QAAA,CAC5CjC,GAAO,QAAS,EAAA,EAAK6C,CAAc,EAAA,QAAA,IAAc,EACnD,CAAA,CAGMZ,YAAU,CAAA,SAAA,CAAA,IAAM,CAChBjC,CAAAA,GAAU,SACZiD,EAAAA,CAAAA,CAAgBjD,EAAM,QAAS,EAAC,EAEpC,CAAA,CAAG,CAACA,CAAK,CAAC,CAAA,CAEV,IAAMkD,CAAqB,CAAAjB,YAAA,CAAA,WAAA,CACxBkB,CAA2C,EAAA,CAC1C,IAAMC,CAAAA,CAAWD,CAAE,CAAA,MAAA,CAAO,MAC1BF,CAAgBG,CAAAA,CAAQ,CACxBN,CAAAA,CAAAA,GAAWK,CAAC,EACd,CAAA,CACA,CAACL,CAAQ,CACX,CAEMO,CAAAA,CAAAA,CAAiBL,CAAa,CAAA,MAAA,CAC9BM,CAAYX,CAAAA,CAAAA,EAAsB,CAAC,CAACC,EAE1C,OACEX,YAAA,CAAA,aAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,uBACZG,CACC,EAAAH,YAAA,CAAA,aAAA,CAACT,CAAA,CAAA,CACC,QAAQ,eACR,CAAA,OAAA,CAASc,CACT,CAAA,EAAA,CAAG,OACH,CAAA,KAAA,CAAOE,CAAQ,CAAA,QAAA,CAAW,UAC1B,SAAW5D,CAAAA,CAAAA,CAAGyD,CAAc,CAAA,CAAA,CAE3BD,CACH,CAEF,CAAAH,YAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,SAAA,CAAWrD,EACT,uIACA,CAAA,CAAC4D,CAAS,EAAA,CAACD,CAAsB,EAAA,qBAAA,CACjCC,CAAS,EAAA,oBAAA,CACTO,GAAY,+BACZ,CAAA,mDAAA,CACAR,CAAsBtD,EAAAA,EACxB,CAEA,CAAA,CAAAgD,YAAA,CAAA,aAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,iBACbA,YAAC,CAAA,aAAA,CAAA,OAAA,CAAA,CACC,GAAKtB,CAAAA,CAAAA,CACL,EAAI2B,CAAAA,CAAAA,CACJ,SAAW1D,CAAAA,CAAAA,CACT,uOACAsD,CAAO,EAAA,OAAA,CACP1B,CACF,CAAA,CACA,MAAOwC,CACP,CAAA,SAAA,CAAWJ,CACX,CAAA,QAAA,CAAUM,EACV,cAAcV,CAAAA,CAAAA,CACd,QAAUO,CAAAA,CAAAA,CACT,GAAGrC,CAAAA,CACN,CACEwB,CAAAA,CAAAA,CAAAA,EAAOC,IACPF,YAAC,CAAA,aAAA,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,8CAAA,CAAA,CACZE,EACCF,YAAC9B,CAAAA,aAAAA,CAAAA,CAAAA,CAAA,CACC,IAAA,CAAMgC,EACN,KAAOK,CAAAA,CAAAA,CAAQ,QAAW,CAAA,WAAA,CAC1B,IAAMnD,CAAAA,CAAAA,CACN,KAAOkB,CAAAA,CAAAA,CACT,EAEA2B,CAEJ,CAEJ,CACCR,CAAAA,CACH,EACAO,YAAC,CAAA,aAAA,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,4BAAA,CAAA,CACXO,GAASC,CAAiBC,EAAAA,CAAAA,CAC1BT,YAACT,CAAAA,aAAAA,CAAAA,CAAAA,CAAA,CACC,OAAA,CAAQ,UACR,CAAA,KAAA,CAAOgB,EAAQ,QAAW,CAAA,WAAA,CAC1B,SAAU,CAAA,MAAA,CAAA,CAETA,EAAQC,CAAeC,CAAAA,CAC1B,CACE,CAAA,IAAA,CACHY,GACCrB,YAACT,CAAAA,aAAAA,CAAAA,CAAAA,CAAA,CACC,OAAA,CAAQ,UACR,CAAA,KAAA,CAAOgB,CAAQ,CAAA,QAAA,CAAW,YAC1B,SAAU,CAAA,iBAAA,CAAA,CAEVP,YAACT,CAAAA,aAAAA,CAAAA,CAAAA,CAAA,CACC,OAAQ,CAAA,UAAA,CACR,EAAG,CAAA,MAAA,CACH,MAAM,aACN,CAAA,SAAA,CAAU,WAET6B,CAAAA,CAAAA,CACH,CACCT,CAAAA,CAAAA,EAAa,CAAIA,CAAAA,EAAAA,CAAS,GAAG,aAChC,CAEJ,CACF,CAEJ,CACF,CCzJO,CAAA,IAAMW,EAAoBC,CAAAA,YAAAA,CAI/B,CACE,CACE,KAAA,CAAAxD,CACA,CAAA,UAAA,CAAAyD,CACA,CAAA,QAAA,CAAAX,CACA,CAAA,SAAA,CAAAY,EACA,SAAAlD,CAAAA,CAAAA,CACA,eAAiBmD,CAAAA,CAAAA,CACjB,wBAAyBC,CACzB,CAAA,mBAAA,CAAqBC,CACrB,CAAA,GAAGnD,CACL,CACAC,CAAAA,CAAAA,GAGEP,oBAAA,CAAA,aAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,iBACbA,CAAAA,CAAAA,oBAAAA,CAAA,cAAC4B,EAAA,CAAA,CACC,GAAKrB,CAAAA,CAAAA,CACL,KAAOX,CAAAA,CAAAA,CACP,QAAWmD,CAAAA,CAAAA,EAAML,EAASK,CAAE,CAAA,MAAA,CAAO,KAAK,CAAA,CACxC,SAAWO,CAAAA,CAAAA,CACX,SAAW9E,CAAAA,CAAAA,CAAG,iBAAkB4B,CAAS,CAAA,CACzC,eAAemD,CAAAA,CAAAA,CACf,wBAAuBC,CACvB,CAAA,mBAAA,CAAmBC,CAClB,CAAA,GAAGnD,EACN,CACC+C,CAAAA,CAAAA,EACCrD,oBAAA,CAAA,aAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,kHACZJ,CAAAA,CAAAA,CAAAA,CACAyD,EAAW,KAAMzD,CAAAA,CAAAA,CAAM,MAAM,CAChC,CAEJ,CAGN,CAAA,CAEAuD,EAAkB,CAAA,WAAA,CAAc,oBC9ChC,IAAMjC,EAAAA,CAAW,CACf,IAAM,CAAA,eAAA,CACN,MAAQ,CAAA,gBAAA,CACR,MAAO,gBACP,CAAA,MAAA,CAAQ,kBACV,CAAA,CAEMwC,GAAmBC,CAAuC,EAAA,CAC9D,IAAMC,CAAAA,CAAc,MAAO,CAAA,IAAA,CAAK1C,EAAQ,CAAA,CAElC2C,EAAOF,CACV,CAAA,KAAA,CAAM,EAAE,CAAA,CACR,MAAO,CAAA,CAACG,CAAKC,CAAAA,CAAAA,GAASA,EAAK,UAAW,CAAA,CAAC,CAAMD,EAAAA,CAAAA,CAAAA,EAAO,CAAKA,EAAAA,CAAAA,CAAAA,CAAM,CAAC,CAAA,CAE7DE,EAAQ,IAAK,CAAA,GAAA,CAAIH,CAAI,CAAA,CAAID,EAAY,MAG3C,CAAA,OAFwBA,CAAYI,CAAAA,CAAK,CAG3C,CAEaC,CAAAA,EAAAA,CAAcC,YACzB,CAAA,UAAA,CAAA,CAAC,CAAE,SAAA,CAAA9D,CAAW,CAAA,OAAA,CAAAU,EAAS,QAAAiB,CAAAA,CAAAA,CAAU,QAAAT,CAAAA,CAAAA,CAAU,GAAGhB,CAAM,CAAA,CAAGC,CAAQ,GAAA,CAC7D,IAAM4D,CACJrD,CAAAA,CAAAA,GACC,OAAOQ,CAAAA,EAAa,QAAWoC,CAAAA,EAAAA,CAAgBpC,CAAQ,CAAA,CAAI,QAC9D,OACE4C,YAAA,CAAA,aAAA,CAAC,MACC,CAAA,CAAA,GAAA,CAAK3D,EACL,SAAW/B,CAAAA,CAAAA,CACT,gCACA,CAAA,qBAAA,CACA,sBACA0C,EAASiD,CAAAA,CAAY,CACrB/D,CAAAA,CACF,CACC,CAAA,GAAGE,CAEHyB,CAAAA,CAAAA,CAAAA,EAAYmC,2BAACnE,CAAA,CAAA,CAAK,IAAM,CAAA,EAAA,CAAI,IAAMgC,CAAAA,CAAAA,CAAU,CAC7C,CAAAmC,YAAA,CAAA,aAAA,CAAC9C,EAAA,CAAK,OAAA,CAAQ,mBAAoB,CAAA,SAAA,CAAU,QACzCE,CAAAA,CAAAA,CACH,CACF,CAEJ,CACF,CAEA2C,CAAAA,EAAAA,CAAM,WAAc,CAAA,OAAA,CCtCb,IAAMG,EAAAA,CAAU,CAAC,CACtB,OAAA,CAAAC,CACA,CAAA,QAAA,CAAA/C,EACA,IAAAgD,CAAAA,CAAAA,CAAO,QACP,CAAA,KAAA,CAAAC,EAAQ,QACR,CAAA,SAAA,CAAAnE,CACA,CAAA,aAAA,CAAAoE,CAAgB,CAAA,GAAA,CAChB,WAAAC,CAAAA,CAAAA,CACA,KAAMC,CACN,CAAA,YAAA,CAAAC,CACA,CAAA,iBAAA,CAAAC,EAAoB,GACtB,CAAA,GAAoB,CAClB,GAAM,CAACC,CAAQC,CAAAA,CAAS,CAAIC,CAAAA,UAAAA,CAASN,CAAe,EAAA,KAAK,CACrDO,CAAAA,CAAAA,CAA+B,KAE7BC,CAAOP,CAAAA,CAAAA,EAAkBG,CACzBK,CAAAA,CAAAA,CAAmBC,cACtBC,CAAqB,EAAA,CACfV,CACHI,EAAAA,CAAAA,CAAUM,CAAO,CAEnBT,CAAAA,CAAAA,GAAeS,CAAO,EACxB,CACA,CAAA,CAACV,CAAgBC,CAAAA,CAAY,CAC/B,CAEMU,CAAAA,CAAAA,CAAmBF,aAAY,CAAA,IAAM,CAIzCH,CAHc,CAAA,UAAA,CAAW,IAAM,CAC7BE,EAAiB,IAAI,EACvB,CAAGN,CAAAA,CAAiB,EAEtB,CAAA,CAAG,CAACM,CAAAA,CAAkBN,CAAiB,CAAC,CAAA,CAElCU,CAAiBH,CAAAA,aAAAA,CAAY,IAAM,CACnCH,CAAAA,GACF,YAAaA,CAAAA,CAAc,EAC3BA,CAAiB,CAAA,IAAA,CAAA,CAGnB,UAAW,CAAA,IAAME,CAAiB,CAAA,KAAK,CAAG,CAAA,IAAI,EAChD,CAAG,CAAA,CAACF,CAAgBE,CAAAA,CAAgB,CAAC,CAErC,CAAA,OACEK,YAAkB,CAAA,aAAA,CAAAC,YAAA,CAAA,QAAA,CAAjB,CAA0B,aAAehB,CAAAA,CAAAA,CAAAA,CACxCe,YAAkB,CAAA,aAAA,CAAAC,YAAA,CAAA,IAAA,CAAjB,CAAsB,IAAA,CAAMP,CAAM,CAAA,YAAA,CAAcC,GAC/CK,YAAkB,CAAA,aAAA,CAAAC,YAAA,CAAA,OAAA,CAAjB,CAAyB,OAAA,CAAO,IAC/B,CAAA,CAAAD,YAAA,CAAA,aAAA,CAAC,MACC,CAAA,CAAA,QAAA,CAAU,EACV,YAAcF,CAAAA,CAAAA,CACd,UAAYC,CAAAA,CAAAA,CACZ,aAAeA,CAAAA,CAAAA,CAAAA,CAEdhE,CACH,CACF,EACAiE,YAAkB,CAAA,aAAA,CAAAC,YAAA,CAAA,MAAA,CAAjB,IACC,CAAAD,YAAA,CAAA,aAAA,CAAkBC,qBAAjB,CACC,IAAA,CAAMlB,CACN,CAAA,KAAA,CAAOC,EACP,UAAY,CAAA,CAAA,CACZ,SAAW/F,CAAAA,CAAAA,CACT,iCACA,CAAA,wBAAA,CACA,oBACA,CAAA,iCAAA,CACA,iEACA,wCACA,CAAA,wCAAA,CACA,aACA,CAAA,UAAA,CACA,aACA4B,CACF,CAAA,CAAA,CAEC,OAAOiE,CAAAA,EAAY,SAClBkB,YAACnE,CAAAA,aAAAA,CAAAA,CAAAA,CAAA,CAAK,OAAA,CAAQ,qBAAsB,CAAA,KAAA,CAAM,OACvCiD,CAAAA,CAAAA,CACH,EAEAA,CAEF,CAAAkB,YAAA,CAAA,aAAA,CAAkBC,YAAjB,CAAA,KAAA,CAAA,CACC,UAAU,mBACV,CAAA,KAAA,CAAO,EACP,CAAA,MAAA,CAAQ,EACV,CACF,CACF,CACF,CACF,CAEJ,CAAA,CC7EA,IAAMC,EAAAA,CAAkB,CAAC,CACvB,IAAA,CAAAC,CACA,CAAA,SAAA,CAAAC,CACF,CAAA,GAGM,CACJ,GAAI,CAACA,CAAW,CAAA,OAAO3F,oBAAA,CAAA,aAAA,CAAAA,oBAAA,CAAA,QAAA,CAAA,IAAA,CAAG0F,CAAK,CAAA,CAE/B,IAAME,CAAQF,CAAAA,CAAAA,CAAK,KAAM,CAAA,IAAI,OAAO,CAAIC,CAAAA,EAAAA,CAAS,CAAK,CAAA,CAAA,CAAA,GAAG,CAAC,CAC1D,CAAA,OACE3F,oBAAA,CAAA,aAAA,CAAAA,oBAAA,CAAA,QAAA,CAAA,IAAA,CACG4F,CAAM,CAAA,GAAA,CAAI,CAACC,CAAMC,CAAAA,CAAAA,GAChBD,CAAK,CAAA,WAAA,KAAkBF,CAAU,CAAA,WAAA,EAC/B3F,CAAAA,oBAAAA,CAAA,cAAC,MAAK,CAAA,CAAA,GAAA,CAAK8F,CAAG,CAAA,SAAA,CAAU,WACrBD,CAAAA,CAAAA,CACH,CAEAA,CAAAA,CAEJ,CACF,CAEJ,CAAA,CAEaE,EAAS/F,CAAAA,oBAAAA,CAAM,WAC1B,CACE,CACE,KAAAJ,CAAAA,CAAAA,CACA,MAAAoC,CACA,CAAA,QAAA,CAAAU,CACA,CAAA,SAAA,CAAAY,CACA,CAAA,YAAA,CAAA0C,CACA,CAAA,YAAA,CAAAC,EACA,QAAAC,CAAAA,CAAAA,CACA,KAAAhG,CAAAA,CAAAA,CACA,QAAAyC,CAAAA,CAAAA,CACA,SAAAvC,CAAAA,CAAAA,CACA,GAAA8B,CACA,CAAA,IAAA,CAAAiE,CACA,CAAA,eAAA,CAAiBC,CACjB,CAAA,WAAA,CAAAC,CAAc,CAAA,EAAA,CACd,QAAAC,CACA,CAAA,OAAA,CAAAC,CACA,CAAA,KAAA,CAAAC,CACF,CACAjG,CAAAA,CAAAA,GACG,CACH,IAAM8D,EACJrE,oBAAA,CAAA,aAAA,CAAC,QACC,CAAA,CAAA,GAAA,CAAKO,CACL,CAAA,IAAA,CAAK,QACL,CAAA,EAAA,CAAI2B,EACJ,IAAMiE,CAAAA,CAAAA,CACN,eAAeC,CAAAA,CAAAA,CACf,SAAUzD,CACV,CAAA,SAAA,CAAWnE,CACT,CAAA,oEAAA,CACA,mCACA,iDACA0H,CAAAA,CAAAA,EAAY,aACZ,CAAA,yBAAA,CACA9F,CACF,CAAA,CACA,OAAS,CAAA,IAAM,CACbsC,CAAW9C,GAAAA,CAAK,CAChB2G,CAAAA,CAAAA,KACF,CACA,CAAA,SAAA,CAAWjD,CACX,CAAA,YAAA,CAAc0C,EACd,YAAcC,CAAAA,CAAAA,CAAAA,CAEdjG,oBAAA,CAAA,aAAA,CAACoB,CAAA,CAAA,CACC,OAAQ,CAAA,qBAAA,CACR,MAAOlB,CAAU,GAAA,QAAA,CAAW,QAAW,CAAA,SAAA,CAAA,CAEtC,OAAO8B,CAAU,EAAA,QAAA,CAChBhC,oBAAA,CAAA,aAAA,CAACyF,GAAA,CAAgB,IAAA,CAAMzD,CAAO,CAAA,SAAA,CAAWqE,CAAa,CAAA,CAAA,CAEtDrE,CAEJ,CAAA,CACCwE,GAASxG,oBAAA,CAAA,aAAA,CAACiE,EAAA,CAAA,IAAA,CAAOuC,CAAM,CAC1B,CAAA,CAEF,OAAOF,CAAAA,CAAUtG,qBAAA,aAACoE,CAAAA,EAAAA,CAAA,CAAQ,OAAA,CAASkC,CAAUjC,CAAAA,CAAAA,CAAQ,CAAaA,CAAAA,CACpE,CACF,CCxHA,CCMO,IAAMoC,EAAYzG,CAAAA,oBAAAA,CAAM,UAC7B,CAAA,CAAC,CAAE,QAAA,CAAAsB,EAAU,IAAAoF,CAAAA,CAAAA,CAAO,QAAU,CAAA,SAAA,CAAAtG,EAAW,QAAAuC,CAAAA,CAAAA,CAAU,GAAGrC,CAAM,EAAGC,CAC7DP,GAAAA,oBAAAA,CAAA,aAAC,CAAA,QAAA,CAAA,CACC,GAAKO,CAAAA,CAAAA,CACL,IAAMmG,CAAAA,CAAAA,CACN,SAAU/D,CACV,CAAA,SAAA,CAAWnE,CACT,CAAA,iEAAA,CACAI,EACA+D,CAAAA,CAAAA,EAAY,+BACZvC,CAAAA,CACF,EACC,GAAGE,CAAAA,CAAAA,CAEHgB,CACH,CAEJ,CAEAmF,CAAAA,EAAAA,CAAU,WAAc,CAAA,WAAA,CDXjB,IAAME,EAAM,CAAA,CAAC,CAClB,QAAA,CAAArF,EACA,KAAApB,CAAAA,CAAAA,CAAQ,SACR,CAAA,SAAA,CAAAE,EACA,OAAAwG,CAAAA,CAAAA,CACA,GAAGC,CACL,CAAgB,GAAA,CACd,GAAM,CAACC,EAAWC,CAAY,CAAA,CAAIhC,UAAS,CAAA,KAAK,EAE1CiC,CAAmB7B,CAAAA,aAAAA,CAAY,IAAM,CACzC4B,EAAa,IAAI,EACnB,CAAG,CAAA,EAAE,CAAA,CAECE,CAAmB9B,CAAAA,aAAAA,CAAY,IAAM,CACzC4B,CAAAA,CAAa,KAAK,EACpB,EAAG,EAAE,CAEC1C,CAAAA,CAAAA,CACJrE,qBAAA,aAAC,CAAA,KAAA,CAAA,CACC,SAAWxB,CAAAA,CAAAA,CACT,YACAoI,CAAAA,CAAAA,CACI,8BACA,CAAA,6BAAA,CACJ,mGACA1G,CAAU,GAAA,SAAA,CAAY,kBAAqB,CAAA,cAAA,CAC3CE,CACF,CACA,CAAA,YAAA,CAAc4G,CACd,CAAA,YAAA,CAAcC,GAEb,OAAO3F,CAAAA,EAAa,QACnBtB,CAAAA,oBAAAA,CAAA,aAACoB,CAAAA,CAAAA,CAAA,CACC,KAAA,CAAM,UACN,OAAS,CAAA,CAAC,wBAA0B,CAAA,iBAAiB,EACrD,SAAU,CAAA,iBAAA,CAAA,CAETE,CACH,CAAA,CAEAA,EAEDsF,CACC5G,EAAAA,oBAAAA,CAAA,aAACyG,CAAAA,EAAAA,CAAA,CACE,GAAGI,CACJ,CAAA,OAAA,CAASD,EACT,SAAU,CAAA,kCAAA,CAAA,CAEV5G,oBAAA,CAAA,aAAA,CAACD,EAAA,CACC,IAAA,CAAK,OACL,CAAA,IAAA,CAAM,GACN,KAAO+G,CAAAA,CAAAA,CAAY,OAAU,CAAA,aAAA,CAC/B,CACF,CAEJ,CAGF,CAAA,OAAOF,EACLvC,CAEArE,CAAAA,oBAAAA,CAAA,aAACyG,CAAAA,EAAAA,CAAA,CAAW,GAAGI,CAAAA,CAAAA,CAAiBxC,CAAQ,CAE5C,EEjBa6C,IAAAA,EAAAA,CAAsB,CAAC,CAClC,OAAAC,CAAAA,CAAAA,CACA,cAAAC,CAAAA,CAAAA,CACA,kBAAAC,CACA,CAAA,WAAA,CAAAC,CAAc,CAAA,iBAAA,CACd,SAAAlH,CAAAA,CAAAA,CACA,KAAA4B,CAAAA,CAAAA,CACA,eAAAC,CACA,CAAA,EAAA,CAAAC,CACA,CAAA,aAAA,CAAAqF,CACA,CAAA,QAAA,CAAA5E,CACA,CAAA,gBAAA,CAAA6E,EACA,OAAAC,CAAAA,CAAAA,CACA,KAAArF,CAAAA,CAAAA,CACA,aAAAC,CACA,CAAA,UAAA,CAAAC,CACA,CAAA,SAAA,CAAAoF,EACA,YAAAC,CAAAA,CAAAA,CAAe,KACjB,CAAA,GAAgC,CAC9B,GAAM,CAAC1C,CAAAA,CAAM2C,CAAO,CAAI7C,CAAAA,UAAAA,CAAS,KAAK,CAAA,CAChC,CAACsB,CAAawB,CAAAA,CAAc,CAAI9C,CAAAA,UAAAA,CAAS,EAAE,CAC3C,CAAA,CAAC+C,CAAgBC,CAAAA,CAAiB,CAAIhD,CAAAA,UAAAA,CAC1C,EACF,EACM,CAACiD,CAAAA,CAAkBC,CAAmB,CAAA,CAAIlD,WAAiB,EAAE,CAAA,CAC7D,CAACmD,CAAAA,CAAcC,CAAe,CAAIpD,CAAAA,UAAAA,CAAiB,EAAE,CAAA,CACrDqD,CAAUC,CAAAA,QAAAA,CAAuB,IAAI,CAAA,CACrCC,EAAWD,QAAyB,CAAA,IAAI,CAExCE,CAAAA,CAAAA,CAAYC,UAChB,IAAMrB,CAAAA,CAAQ,MAAS,CAAA,CAAA,EAAK,YAAaA,CAAQ,CAAA,CAAC,CAClD,CAAA,CAACA,CAAO,CACV,CAEMsB,CAAAA,CAAAA,CAAcD,UAAQ,IACrBrB,CAAAA,CAAQ,MACRoB,CAAAA,CAAAA,CACGpB,EAA0B,MAChC,CAAA,CAACrD,CAAK4E,CAAAA,CAAAA,GAAU,CAAC,GAAG5E,CAAAA,CAAK,GAAG4E,CAAAA,CAAM,OAAO,CAAA,CACzC,EACF,EAJuBvB,CADK,CAAA,EAM3B,CAAA,CAACoB,EAAWpB,CAAO,CAAC,CAEjBwB,CAAAA,EAAAA,CAAkBH,UACtB,IAAMC,CAAAA,CAAY,MAAQG,CAAAA,CAAAA,EAAWxB,CAAe,CAAA,QAAA,CAASwB,CAAO,CAAA,KAAK,CAAC,CAC1E,CAAA,CAACH,CAAarB,CAAAA,CAAc,CAC9B,CAEMyB,CAAAA,CAAAA,CAAgBL,SACpB,CAAA,IAAMjB,IAAkB,SAAaH,EAAAA,CAAAA,CAAe,MAAUG,EAAAA,CAAAA,CAC9D,CAACA,CAAAA,CAAeH,CAAc,CAChC,EAEM0B,CAAiBN,CAAAA,SAAAA,CAAQ,IACtBC,CAAAA,CAAY,MAAQG,CAAAA,CAAAA,EAErBxB,CAAe,CAAA,QAAA,CAASwB,EAAO,KAAK,CAAA,EAIpCC,CACK,CAAA,KAAA,CAGFxC,CAAe,EAAA,OAAOuC,CAAO,CAAA,KAAA,EAAU,SAC1CA,CAAO,CAAA,KAAA,CAAM,WAAY,EAAA,CAAE,SAASvC,CAAY,CAAA,WAAA,EAAa,CAAA,CAC7D,IACL,CACA,CAAA,CAACoC,CAAapC,CAAAA,CAAAA,CAAae,CAAgByB,CAAAA,CAAa,CAAC,CAAA,CAEtDE,GAAiBP,SAAQ,CAAA,IACxBD,CAMGpB,CAAAA,CAAAA,CACL,IAAKuB,CAAW,GAAA,CACf,GAAGA,CAAAA,CACH,QAASA,CAAM,CAAA,OAAA,CAAQ,MAAQE,CAAAA,CAAAA,EAEzBxB,CAAe,CAAA,QAAA,CAASwB,CAAO,CAAA,KAAK,GAIpCC,CACK,CAAA,KAAA,CAGFxC,CAAe,EAAA,OAAOuC,EAAO,KAAU,EAAA,QAAA,CAC1CA,CAAO,CAAA,KAAA,CAAM,aAAc,CAAA,QAAA,CAASvC,CAAY,CAAA,WAAA,EAAa,CAAA,CAC7D,IACL,CACH,EAAE,CACD,CAAA,MAAA,CAAQqC,CAAUA,EAAAA,CAAAA,CAAM,OAAQ,CAAA,MAAA,CAAS,CAAC,CAAA,CAvBpCI,EAAe,MAAS,CAAA,CAAA,CAC3B,CAAC,CAAE,KAAO,CAAA,EAAA,CAAI,OAASA,CAAAA,CAAe,CAAC,CACvC,CAAA,EAsBL,CAAA,CACDP,EACApB,CACAd,CAAAA,CAAAA,CACAe,CACA0B,CAAAA,CAAAA,CACAD,CACF,CAAC,CAAA,CAEKG,CAAqB7D,CAAAA,aAAAA,CACxB8D,CAAwB,EAAA,CACJ7B,CAAe,CAAA,QAAA,CAAS6B,CAAW,CAEpD5B,CAAAA,CAAAA,CAAkBD,CAAe,CAAA,MAAA,CAAQ8B,GAAMA,CAAMD,GAAAA,CAAW,CAAC,CAAA,CACvDJ,GACVxB,CAAkB,CAAA,CAAC,GAAGD,CAAAA,CAAgB6B,CAAW,CAAC,CAEhDX,CAAAA,CAAAA,CAAS,SACXA,CAAS,CAAA,OAAA,CAAQ,KAAM,CAAA,CAAE,cAAe,IAAK,CAAC,EAElD,CAAA,CACA,CAAClB,CAAgBC,CAAAA,CAAAA,CAAmBwB,CAAa,CACnD,CAEMM,CAAAA,EAAAA,CAAchE,aAAaiE,CAAAA,CAAAA,EAAuB,CACtDrB,CAAmBsB,CAAAA,CAAAA,GAAU,CAC3B,GAAGA,CACH,CAAA,CAACD,CAAU,EAAG,CAACC,CAAKD,CAAAA,CAAU,CAChC,CAAA,CAAE,EACJ,CAAA,CAAG,EAAE,EAEC/F,EAAamF,CAAAA,SAAAA,CAAQ,IACrB,CAACb,GAAgB,CAACtB,CAAAA,EAAe,CAACpB,CAAAA,CAAa,GAC5B6D,CAAe,CAAA,IAAA,CACnCQ,CACC,EAAA,OAAOA,CAAI,CAAA,KAAA,EAAU,QACrBA,EAAAA,CAAAA,CAAI,MAAM,WAAY,EAAA,CAAE,UAAWjD,CAAAA,CAAAA,CAAY,aAAa,CAAA,EAC5DiD,CAAI,CAAA,KAAA,CAAM,aAAkBjD,GAAAA,CAAAA,CAAY,WAAY,EAAA,EACpD,CAACe,CAAAA,CAAe,QAASkC,CAAAA,CAAAA,CAAI,KAAK,CACtC,CAAA,EACuB,KAAO,EAAA,QAAA,IAAc,EAC3C,CAAA,CAAC3B,CAActB,CAAAA,CAAAA,CAAayC,EAAgB7D,CAAMmC,CAAAA,CAAc,CAAC,CAAA,CAE9DmC,EAAgBpE,CAAAA,aAAAA,CACnBqE,CAA2C,EAAA,CAC1C,OAAQA,CAAM,CAAA,GAAA,EACZ,KAAK,YACHA,CAAM,CAAA,cAAA,EACFA,CAAAA,CAAAA,CAAM,OACR5B,CAAQ,CAAA,IAAI,CAEP3C,CAAAA,CAAAA,CAIHgD,CAAqBoB,CAAAA,CAAAA,EACnBA,CAAOP,CAAAA,CAAAA,CAAe,OAAS,CAAIO,CAAAA,CAAAA,CAAO,CAAI,CAAA,CAChD,GALAzB,CAAQ,CAAA,IAAI,CACZK,CAAAA,CAAAA,CAAoB,CAAC,CAOzB,CAAA,CAAA,MAEF,KAAK,SAAA,CACHuB,CAAM,CAAA,cAAA,EACFA,CAAAA,CAAAA,CAAM,OACR5B,CAAQ,CAAA,KAAK,CAER3C,CAAAA,CAAAA,CAIHgD,EAAqBoB,CACnBA,EAAAA,CAAAA,CAAO,CAAIA,CAAAA,CAAAA,CAAO,EAAIP,CAAe,CAAA,MAAA,CAAS,CAChD,CAAA,EALAlB,CAAQ,CAAA,IAAI,CACZK,CAAAA,CAAAA,CAAoBa,EAAe,MAAS,CAAA,CAAC,CAOjD,CAAA,CAAA,MAEF,KAAK,QACHU,CAAAA,CAAAA,CAAM,cAAe,EAAA,CACjBvE,GACFgD,CAAqBoB,CAAAA,CAAAA,EAAS,IAAK,CAAA,GAAA,CAAI,CAAGA,CAAAA,CAAAA,CAAO,EAAE,CAAC,EAEtD,MAEF,KAAK,UACHG,CAAAA,CAAAA,CAAM,cAAe,EAAA,CACjBvE,CACFgD,EAAAA,CAAAA,CAAqBoB,GACnB,IAAK,CAAA,GAAA,CAAIP,CAAe,CAAA,MAAA,CAAS,CAAGO,CAAAA,CAAAA,CAAO,EAAE,CAC/C,EAEF,MAEF,KAAK,MACHG,CAAAA,CAAAA,CAAM,gBACFvE,CAAAA,CAAAA,EACFgD,CAAoB,CAAA,CAAC,EAEvB,MAEF,KAAK,KACHuB,CAAAA,CAAAA,CAAM,cAAe,EAAA,CACjBvE,CACFgD,EAAAA,CAAAA,CAAoBa,EAAe,MAAS,CAAA,CAAC,CAE/C,CAAA,MAEF,KAAK,OAEH,CAAA,GADAU,CAAM,CAAA,cAAA,GACFxB,CAAoB,EAAA,CAAA,EAAKc,CAAed,CAAAA,CAAgB,CAC1DgB,CAAAA,CAAAA,CAAmBF,CAAed,CAAAA,CAAgB,EAAE,KAAK,CAAA,CAAA,KAAA,GAChDL,CAAgBtE,EAAAA,EAAAA,CAAY,CACrC,IAAMoG,CAAAA,CAAiBX,CAAe,CAAA,IAAA,CACnCQ,GACC,OAAOA,CAAAA,CAAI,KAAU,EAAA,QAAA,EACrBA,CAAI,CAAA,KAAA,CAAM,WAAY,EAAA,CAAE,WAAWjD,CAAY,CAAA,WAAA,EAAa,CAAA,EAC5D,CAACe,CAAe,CAAA,QAAA,CAASkC,CAAI,CAAA,KAAK,CACtC,CACIG,CAAAA,CAAAA,EACFT,CAAmBS,CAAAA,CAAAA,CAAe,KAAK,EAE3C,CACA,MAEF,KAAK,KACExE,CAAAA,CAAAA,CAKH+C,CAAoB,EAAA,CAAA,EACpBc,EAAed,CAAgB,CAAA,GAE/BwB,CAAM,CAAA,cAAA,GACNR,CAAmBF,CAAAA,CAAAA,CAAed,CAAgB,CAAA,CAAE,KAAK,CAAA,CAAA,EARzDwB,CAAM,CAAA,cAAA,GACN5B,CAAQ,CAAA,IAAI,CACZK,CAAAA,CAAAA,CAAoB,CAAC,CAQvB,CAAA,CAAA,MAEF,KAAK,QAAA,CACHuB,EAAM,cAAe,EAAA,CACrB5B,CAAQ,CAAA,KAAK,CACbC,CAAAA,CAAAA,CAAe,EAAE,CAAA,CACjB,KACJ,CACF,CAAA,CACA,CACE5C,CAAAA,CACA+C,EACAc,CACAE,CAAAA,CAAAA,CACArB,CACAtE,CAAAA,EAAAA,CACAgD,EACAe,CACF,CACF,CAEMsC,CAAAA,EAAAA,CAAsBvE,aACzBqE,CAAAA,CAAAA,EAA4C,CAC3C,OAAQA,EAAM,GAAK,EACjB,KAAK,WAAA,CACHA,CAAM,CAAA,cAAA,EACNvB,CAAAA,CAAAA,CAAqBoB,GACnBA,CAAOP,CAAAA,CAAAA,CAAe,MAAS,CAAA,CAAA,CAAIO,CAAO,CAAA,CAAA,CAAI,CAChD,CAAA,CACA,MAEF,KAAK,SAAA,CACHG,CAAM,CAAA,cAAA,GACNvB,CAAqBoB,CAAAA,CAAAA,EACnBA,CAAO,CAAA,CAAA,CAAIA,EAAO,CAAIP,CAAAA,CAAAA,CAAe,MAAS,CAAA,CAChD,CACA,CAAA,MAEF,KAAK,OAAA,CACL,KAAK,OACHU,CAAAA,CAAAA,CAAM,cAAe,EAAA,CACjBxB,GAAoB,CAAKc,EAAAA,CAAAA,CAAed,CAAgB,CAAA,EAC1DgB,EAAmBF,CAAed,CAAAA,CAAgB,CAAE,CAAA,KAAK,CAE3D,CAAA,MAEF,KAAK,QAAA,CACHwB,EAAM,cAAe,EAAA,CACrB5B,CAAQ,CAAA,KAAK,EACbU,CAAS,CAAA,OAAA,EAAS,KAAM,EAAA,CACxB,MAEF,KAAK,KAAA,CACHkB,CAAM,CAAA,cAAA,EACFxB,CAAAA,CAAAA,EAAoB,CAAKc,EAAAA,CAAAA,CAAed,CAAgB,CAC1DgB,EAAAA,CAAAA,CAAmBF,CAAed,CAAAA,CAAgB,EAAE,KAAK,CAAA,CAE3D,KACJ,CACF,EACA,CAACA,CAAAA,CAAkBc,CAAgBE,CAAAA,CAAkB,CACvD,CAAA,CAGA,OAAAW,WAAAA,CAAU,IAAM,CACd,GAAI1E,CAAM,CAAA,CACR,IAAM2E,CAAQtB,CAAAA,CAAAA,CAAS,OACvB,CAAA,GAAIsB,EAAO,CACTA,CAAAA,CAAM,KAAM,CAAA,CAAE,aAAe,CAAA,IAAK,CAAC,CAAA,CAEnC,IAAMC,CAASD,CAAAA,CAAAA,CAAM,KAAM,CAAA,MAAA,CAC3BA,EAAM,iBAAkBC,CAAAA,CAAAA,CAAQA,CAAM,EACxC,CACF,CACF,CAAA,CAAG,CAAC5E,CAAI,CAAC,CAAA,CAGT0E,WAAU,CAAA,IAAM,CACT1E,CACHgD,EAAAA,CAAAA,CAAoB,EAAE,EAE1B,EAAG,CAAChD,CAAI,CAAC,CAAA,CAGT0E,YAAU,IAAM,CACd,GAAI1E,CAAAA,EAAQ+C,CAAoB,EAAA,CAAA,EAAKI,CAAQ,CAAA,OAAA,CAAS,CACpD,IAAM0B,CAAAA,CAAoB1B,CAAQ,CAAA,OAAA,CAAQ,aACxC,CAAA,CAAA,KAAA,EAAQlG,CAAE,CAAA,QAAA,EAAW8F,CAAgB,CACvC,EAAA,CAAA,CAAA,CAEI8B,CACFA,EAAAA,CAAAA,CAAkB,cAAe,CAAA,CAC/B,KAAO,CAAA,SAAA,CACP,SAAU,QACZ,CAAC,EAEL,CACF,EAAG,CAAC9B,CAAAA,CAAkB/C,CAAM/C,CAAAA,CAAE,CAAC,CAG/ByH,CAAAA,WAAAA,CAAU,IAAM,CACV1E,CAAQ+C,EAAAA,CAAAA,GAAqB,EAC/BC,EAAAA,CAAAA,CAAoB,CAAC,EAEzB,CAAA,CAAG,CAAChD,CAAAA,CAAM+C,CAAgB,CAAC,CAAA,CAG3B2B,WAAU,CAAA,IAAM,CACd,GAAIpB,CAAAA,CAAW,CACb,IAAMwB,CAAgB5C,CAAAA,CAAAA,CAA0B,MAG9C,CAAA,CAACrD,EAAK4E,CAAW,IAAA,CACf,GAAG5E,CAAAA,CACH,CAAC4E,CAAM,CAAA,KAAK,EAAG,IACjB,GACA,EACF,CACAX,CAAAA,CAAAA,CAAkBgC,CAAY,EAChC,CACF,CAAA,CAAG,CAACxB,CAAWpB,CAAAA,CAAO,CAAC,CAAA,CAGrBnH,oBAAA,CAAA,aAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAWxB,EAAG,qBAAuB4B,CAAAA,CAAS,CAChD4B,CAAAA,CAAAA,CAAAA,EACChC,oBAAA,CAAA,aAAA,CAACoB,CAAA,CAAA,CACC,QAAQ,eACR,CAAA,OAAA,CAASc,CACT,CAAA,EAAA,CAAG,QACH,KAAOE,CAAAA,CAAAA,CAAQ,QAAW,CAAA,SAAA,CAC1B,UAAW5D,CAAGyD,CAAAA,CAAc,CAE3BD,CAAAA,CAAAA,CACH,CAEFhC,CAAAA,oBAAAA,CAAA,aAAS,CAAAgK,YAAA,CAAA,IAAA,CAAR,CACC,IAAM/E,CAAAA,CAAAA,EAAQ,CAACtC,CAAAA,CACf,aAAekC,CAAW,EAAA,CACnBlC,CACHiF,GAAAA,CAAAA,CAAQ/C,CAAM,CACTA,CAAAA,CAAAA,GACHgD,CAAe,CAAA,EAAE,CACjBI,CAAAA,CAAAA,CAAoB,EAAE,CAAA,CAAA,EAG5B,GAEAjI,oBAAA,CAAA,aAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,4CACbA,oBAAA,CAAA,aAAA,CAASgK,YAAR,CAAA,OAAA,CAAA,CAAgB,QAAO,IACtBhK,CAAAA,CAAAA,oBAAAA,CAAA,aAAC,CAAA,QAAA,CAAA,CACC,IAAK,CAAA,QAAA,CACL,SAAU,CAAA,kBAAA,CACV,SAAU2C,CAETgF,CAAAA,CAAAA,CAAAA,CACC3H,oBAAA,CAAA,aAAA,CAACmD,EAAA,CAAA,CACC,GAAKmF,CAAAA,CAAAA,CACL,GAAIpG,CACJ,CAAA,WAAA,CAAaoF,CACb,CAAA,KAAA,CAAOjB,CACP,CAAA,UAAA,CAAYhD,EACZ,CAAA,QAAA,CAAWzD,GAAU,CACnBiI,CAAAA,CAAejI,CAAK,CAAA,CACfqF,GACH2C,CAAQ,CAAA,IAAI,EAEhB,CAAA,CACA,UAAW2B,EACX,CAAA,SAAA,CAAU,QACV,CAAA,kBAAA,CAAoBtE,CACpB,CAAA,QAAA,CAAUtC,CACV,CAAA,KAAA,CAAOP,EACP,eAAe6C,CAAAA,CAAAA,CACf,eAAc,CAAA,SAAA,CACd,gBAAe,CAAG/C,EAAAA,CAAE,CACpB,QAAA,CAAA,CAAA,uBAAA,CACE8F,GAAoB,CAChB,CAAA,CAAA,EAAG9F,CAAE,CAAA,QAAA,EAAW8F,CAAgB,CAAA,CAAA,CAChC,SAER,CAAA,CAAA,CAEAhI,qBAAA,aAAC4B,CAAAA,EAAAA,CAAA,CACC,GAAA,CAAK0G,EACL,EAAIpG,CAAAA,CAAAA,CACJ,WAAaoF,CAAAA,CAAAA,CACb,MAAOjB,CACP,CAAA,QAAA,CAAW,CAAM,EAAA,CACfwB,CAAe,CAAA,CAAA,CAAE,MAAO,CAAA,KAAK,EACxB5C,CACH2C,EAAAA,CAAAA,CAAQ,IAAI,EAEhB,EACA,SAAW2B,CAAAA,EAAAA,CACX,SAAU,CAAA,QAAA,CACV,mBAAoBtE,CACpB,CAAA,KAAA,CAAO7C,CACP,CAAA,eAAA,CAAe6C,CACf,CAAA,eAAA,CAAc,SACd,CAAA,eAAA,CAAe,GAAG/C,CAAE,CAAA,QAAA,CAAA,CACpB,uBACE8F,CAAAA,CAAAA,EAAoB,EAChB,CAAG9F,EAAAA,CAAE,CAAW8F,QAAAA,EAAAA,CAAgB,GAChC,SAEN,CAAA,QAAA,CACErF,CACC,EAAA,CAAC,CAAC4E,CAAAA,EAAiBH,CAAe,CAAA,MAAA,EAAUG,EAEjD,CAEJ,CACF,CAEAvH,CAAAA,oBAAAA,CAAA,cAASgK,YAAR,CAAA,MAAA,CAAA,CAAe,SAAWtC,CAAAA,CAAAA,CAAAA,CACzB1H,qBAAA,aAAS,CAAAgK,YAAA,CAAA,OAAA,CAAR,CACC,SAAA,CAAU,kMACV,CAAA,IAAA,CAAK,QACL,CAAA,KAAA,CAAM,QACN,UAAY,CAAA,CAAA,CACZ,eAAkB,CAAA,CAAA,EAAM,EAAE,cAAe,EAAA,CACzC,gBAAmB,CAAA,CAAA,EAAM,EAAE,cAAe,EAAA,CAC1C,cAAiB,CAAA,CAAA,EAAM,CAAE,CAAA,cAAA,EACzB,CAAA,iBAAA,CAAoB,GAAM,CACxB,CAAA,CAAE,cAAe,EAAA,CACjBpC,CAAQ,CAAA,KAAK,CACbC,CAAAA,CAAAA,CAAe,EAAE,CACjBI,CAAAA,CAAAA,CAAoB,EAAE,EACxB,CAEAjI,CAAAA,CAAAA,oBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,IAAKoI,CACL,CAAA,SAAA,CAAU,iDACV,CAAA,IAAA,CAAK,UACL,EAAI,CAAA,CAAA,EAAGlG,CAAE,CAAA,QAAA,CAAA,CACT,aAAYF,CACZ,CAAA,sBAAA,CAAqB,MACrB,CAAA,WAAA,CAAWyF,CAEVA,CAAAA,CAAAA,CAAAA,CACCzH,oBAAA,CAAA,aAAA,CAACoB,EAAA,CAAK,OAAA,CAAQ,eAAgB,CAAA,SAAA,CAAU,sBAAqB,YAE7D,CAAA,CACE0H,CAAe,CAAA,MAAA,CAAS,EAC1BC,EAAe,CAAA,GAAA,CAAI,CAACL,CAAAA,CAAOuB,CACzBjK,GAAAA,oBAAAA,CAAA,aAAa,CAAAkK,YAAA,CAAA,IAAA,CAAZ,CACC,GAAKxB,CAAAA,CAAAA,CAAM,KAASuB,EAAAA,CAAAA,CACpB,UAAU,QACV,CAAA,IAAA,CAAMnC,CAAeY,CAAAA,CAAAA,CAAM,KAAK,CAAK,EAAA,IAAA,CACrC,YAAc,CAAA,IACZA,CAAM,CAAA,KAAA,EAASS,EAAYT,CAAAA,CAAAA,CAAM,KAAK,CAGvCA,CAAAA,CAAAA,CAAAA,CAAM,KACL1I,EAAAA,oBAAAA,CAAA,cAAakK,YAAZ,CAAA,OAAA,CAAA,CAAoB,OAAO,CAAA,IAAA,CAAA,CAC1BlK,qBAAA,aAAC,CAAA,KAAA,CAAA,CACC,SAAU,CAAA,uEAAA,CACV,QAAU,CAAA,EAAA,CAAA,CAEVA,oBAAA,CAAA,aAAA,CAACoB,EAAA,CAAK,OAAA,CAAQ,mBAAoB,CAAA,KAAA,CAAM,aACrCsH,CAAM,CAAA,KACT,CACA1I,CAAAA,oBAAAA,CAAA,cAACD,CAAA,CAAA,CACC,IAAK,CAAA,YAAA,CACL,SAAWvB,CAAAA,CAAAA,CACT,sBACAsJ,CAAAA,CAAAA,CAAeY,EAAM,KAAK,CAAA,EAAK,YACjC,CAAA,CACA,KAAM,EACR,CAAA,CACF,CACF,CAAA,CAEF1I,qBAAA,aAAa,CAAAkK,YAAA,CAAA,OAAA,CAAZ,CAAoB,SAAA,CAAU,mFAC5BxB,CAAAA,CAAAA,CAAAA,CAAM,OAAQ,CAAA,GAAA,CAAI,CAACE,CAAQ5E,CAAAA,EAAAA,GAAU,CACpC,IAAMmG,EAAcrB,CAAe,CAAA,SAAA,CAChCQ,EAAQA,EAAAA,EAAAA,CAAI,QAAUV,CAAO,CAAA,KAChC,CACA,CAAA,OACE5I,oBAAA,CAAA,aAAA,CAAC+F,EAAA,CAAA,CACC,IAAK,CAAGkE,EAAAA,CAAU,CAAIjG,CAAAA,EAAAA,EAAK,CAC3B,CAAA,CAAA,KAAA,CAAO4E,CAAO,CAAA,KAAA,CACd,MAAOA,CAAO,CAAA,KAAA,CACd,QAAUI,CAAAA,CAAAA,CACV,SAAWU,CAAAA,EAAAA,CACX,SAAU,CAAA,MAAA,CACV,SACExB,CAAiBiC,GAAAA,CAAAA,EAChBjC,CAAiB,GAAA,EAAA,EAChBF,IAAqBmC,CAEzB,CAAA,EAAA,CAAI,CAAGjI,EAAAA,CAAE,WAAWiI,CAAW,CAAA,CAAA,CAC/B,IAAK,CAAA,QAAA,CACL,eAAe/C,CAAAA,CAAAA,CAAe,QAC5BwB,CAAAA,CAAAA,CAAO,KACT,CACA,CAAA,WAAA,CAAavC,CACb,CAAA,YAAA,CAAc,IAAM8B,CAAgBgC,CAAAA,CAAW,CAC/C,CAAA,YAAA,CAAc,IAAMhC,CAAgB,CAAA,EAAE,CACxC,CAAA,CAEJ,CAAC,CACH,CACF,CACD,EAEDnI,oBAAA,CAAA,aAAA,CAACoB,CAAA,CAAA,CAAK,QAAQ,eAAgB,CAAA,SAAA,CAAU,oBACrCoG,CAAAA,CAAAA,CAAAA,EAAoB,kBACvB,CAEJ,CACF,CACF,CACF,CACF,CAAA,CACCmB,EAAgB,CAAA,MAAA,CAAS,GACxB3I,oBAAA,CAAA,aAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,uBACbA,oBAAA,CAAA,aAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,wBACZ2I,EAAgB,CAAA,GAAA,CAAKC,CACpB5I,EAAAA,oBAAAA,CAAA,aAAC2G,CAAAA,EAAAA,CAAA,CACC,GAAA,CAAKiC,EAAO,KACZ,CAAA,OAAA,CAAS,IAAMI,CAAAA,CAAmBJ,EAAO,KAAK,CAAA,CAC9C,QAAUjG,CAAAA,CAAAA,CAAAA,CAETiG,EAAO,KACV,CACD,CACH,CAAA,CACCC,CACC7I,EAAAA,oBAAAA,CAAA,aAACoB,CAAAA,CAAAA,CAAA,CAAK,OAAQ,CAAA,UAAA,CAAW,KAAM,CAAA,WAAA,CAAA,CAAY,cAC7BmG,CAAc,CAAA,iBAC5B,CAEJ,CAAA,CAEAnF,GAASC,CAAiBC,EAAAA,CAAAA,CAC1BtC,oBAAA,CAAA,aAAA,CAACoB,CAAA,CAAA,CACC,OAAQ,CAAA,UAAA,CACR,MAAOgB,CAAQ,CAAA,QAAA,CAAW,WAC1B,CAAA,SAAA,CAAU,QAETA,CAAQC,CAAAA,CAAAA,CAAeC,CAC1B,CAAA,CACE,IACN,CAEJ","file":"MultiSelectCombobox.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const noopFn = () => {};\n","import { Colors, Typography } from \"../types/tailwind\";\n\n// Generate safelist patterns for all color utilities so you can use any theme color variable in your code\nexport const generateSafelist = (colors: Colors, typography: Typography) => {\n const colorNames = Object.keys(colors) as (keyof Colors)[];\n const utilities = [\"bg\", \"text\", \"border\", \"ring\", \"divide\", \"outline\"];\n const variants = [\"hover:\", \"focus:\", \"active:\", \"disabled:\"];\n const breakpoints = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\n const sizes = [\"24\", \"42\", \"48\", \"64\", \"72\"]; // Add all the sizes you need\n\n const safelist: (string | { pattern: RegExp; variants: string[] })[] = [];\n\n colorNames.forEach((colorName) => {\n if (typeof colors[colorName] === \"object\") {\n // Handle nested color objects (with number keys)\n Object.keys(colors[colorName]).forEach((shade) => {\n utilities.forEach((utility) => {\n // Base utility\n safelist.push(`${utility}-${colorName}-${shade}`);\n\n // Variant utilities\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}-${shade}`);\n });\n });\n });\n } else {\n // Handle direct color values\n utilities.forEach((utility) => {\n safelist.push(`${utility}-${colorName}`);\n\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}`);\n });\n });\n }\n });\n\n // Generate typography classes\n Object.entries(typography).forEach(([family, sizes]) => {\n Object.keys(sizes).forEach((size) => {\n // Base typography classes\n safelist.push(`text-${family}-${size}`);\n\n // Add variants\n variants.forEach((variant) => {\n safelist.push(`${variant}text-${family}-${size}`);\n });\n });\n });\n\n const typographyClasses = Object.entries(typography).flatMap(\n ([category, sizes]) =>\n Object.keys(sizes).map((size) => `text-${category}-${size}`)\n );\n\n // Generate responsive variants\n const responsiveTypographyClasses = typographyClasses.flatMap((className) =>\n breakpoints.map((breakpoint) => `${breakpoint}:${className}`)\n );\n\n // Generate size classes with responsive variants\n const sizeClasses = sizes.flatMap((size) => [\n `h-[${size}px]`,\n `w-[${size}px]`,\n ...breakpoints.flatMap((bp) => [\n `${bp}:h-[${size}px]`,\n `${bp}:w-[${size}px]`\n ])\n ]);\n\n return [...typographyClasses, ...responsiveTypographyClasses, ...sizeClasses];\n};\n\nexport const focusRingStyles =\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100\";\nexport const focusRingWithinStyles =\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-primary-100\";\nexport const focusRingStylesCoerced = \"ring-2 ring-primary-100\";\n","export type Breakpoint = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\nexport type ResponsiveSize = number | `${Breakpoint}:${number}`;\n\ntype SizeKey =\n | \"12\"\n | \"16\"\n | \"18\"\n | \"20\"\n | \"24\"\n | \"32\"\n | \"36\"\n | \"40\"\n | \"42\"\n | \"48\"\n | \"64\"\n | \"72\";\n\n// These constants help Tailwind identify the classes during compilation\nconst BASE_SIZES: Record<SizeKey, string> = {\n \"12\": \"h-[12px] w-[12px]\",\n \"16\": \"h-[16px] w-[16px]\",\n \"18\": \"h-[18px] w-[18px]\",\n \"20\": \"h-[20px] w-[20px]\",\n \"24\": \"h-[24px] w-[24px]\",\n \"32\": \"h-[32px] w-[32px]\",\n \"36\": \"h-[36px] w-[36px]\",\n \"40\": \"h-[40px] w-[40px]\",\n \"42\": \"h-[42px] w-[42px]\",\n \"48\": \"h-[48px] w-[48px]\",\n \"64\": \"h-[64px] w-[64px]\",\n \"72\": \"h-[72px] w-[72px]\"\n};\n\nconst RESPONSIVE_SIZES: Record<Breakpoint, Record<SizeKey, string>> = {\n sm: {\n \"12\": \"sm:h-[12px] sm:w-[12px]\",\n \"16\": \"sm:h-[16px] sm:w-[16px]\",\n \"18\": \"sm:h-[18px] sm:w-[18px]\",\n \"20\": \"sm:h-[20px] sm:w-[20px]\",\n \"24\": \"sm:h-[24px] sm:w-[24px]\",\n \"32\": \"sm:h-[32px] sm:w-[32px]\",\n \"36\": \"sm:h-[36px] sm:w-[36px]\",\n \"40\": \"sm:h-[40px] sm:w-[40px]\",\n \"42\": \"sm:h-[42px] sm:w-[42px]\",\n \"48\": \"sm:h-[48px] sm:w-[48px]\",\n \"64\": \"sm:h-[64px] sm:w-[64px]\",\n \"72\": \"sm:h-[72px] sm:w-[72px]\"\n },\n md: {\n \"12\": \"md:h-[12px] md:w-[12px]\",\n \"16\": \"md:h-[16px] md:w-[16px]\",\n \"18\": \"md:h-[18px] md:w-[18px]\",\n \"20\": \"md:h-[20px] md:w-[20px]\",\n \"24\": \"md:h-[24px] md:w-[24px]\",\n \"32\": \"md:h-[32px] md:w-[32px]\",\n \"36\": \"md:h-[36px] md:w-[36px]\",\n \"40\": \"md:h-[40px] md:w-[40px]\",\n \"42\": \"md:h-[42px] md:w-[42px]\",\n \"48\": \"md:h-[48px] md:w-[48px]\",\n \"64\": \"md:h-[64px] md:w-[64px]\",\n \"72\": \"md:h-[72px] md:w-[72px]\"\n },\n lg: {\n \"12\": \"lg:h-[12px] lg:w-[12px]\",\n \"16\": \"lg:h-[16px] lg:w-[16px]\",\n \"18\": \"lg:h-[18px] lg:w-[18px]\",\n \"20\": \"lg:h-[20px] lg:w-[20px]\",\n \"24\": \"lg:h-[24px] lg:w-[24px]\",\n \"32\": \"lg:h-[32px] lg:w-[32px]\",\n \"36\": \"lg:h-[36px] lg:w-[36px]\",\n \"40\": \"lg:h-[40px] lg:w-[40px]\",\n \"42\": \"lg:h-[42px] lg:w-[42px]\",\n \"48\": \"lg:h-[48px] lg:w-[48px]\",\n \"64\": \"lg:h-[64px] lg:w-[64px]\",\n \"72\": \"lg:h-[72px] lg:w-[72px]\"\n },\n xl: {\n \"12\": \"xl:h-[12px] xl:w-[12px]\",\n \"16\": \"xl:h-[16px] xl:w-[16px]\",\n \"18\": \"xl:h-[18px] xl:w-[18px]\",\n \"20\": \"xl:h-[20px] xl:w-[20px]\",\n \"24\": \"xl:h-[24px] xl:w-[24px]\",\n \"32\": \"xl:h-[32px] xl:w-[32px]\",\n \"36\": \"xl:h-[36px] xl:w-[36px]\",\n \"40\": \"xl:h-[40px] xl:w-[40px]\",\n \"42\": \"xl:h-[42px] xl:w-[42px]\",\n \"48\": \"xl:h-[48px] xl:w-[48px]\",\n \"64\": \"xl:h-[64px] xl:w-[64px]\",\n \"72\": \"xl:h-[72px] xl:w-[72px]\"\n },\n \"2xl\": {\n \"12\": \"2xl:h-[12px] 2xl:w-[12px]\",\n \"16\": \"2xl:h-[16px] 2xl:w-[16px]\",\n \"18\": \"2xl:h-[18px] 2xl:w-[18px]\",\n \"20\": \"2xl:h-[20px] 2xl:w-[20px]\",\n \"24\": \"2xl:h-[24px] 2xl:w-[24px]\",\n \"32\": \"2xl:h-[32px] 2xl:w-[32px]\",\n \"36\": \"2xl:h-[36px] 2xl:w-[36px]\",\n \"40\": \"2xl:h-[40px] 2xl:w-[40px]\",\n \"42\": \"2xl:h-[42px] 2xl:w-[42px]\",\n \"48\": \"2xl:h-[48px] 2xl:w-[48px]\",\n \"64\": \"2xl:h-[64px] 2xl:w-[64px]\",\n \"72\": \"2xl:h-[72px] 2xl:w-[72px]\"\n }\n};\n\nconst getSizeKey = (size: number): SizeKey | undefined => {\n return String(size) as SizeKey;\n};\n\nexport const getResponsiveSize = (\n size: ResponsiveSize | ResponsiveSize[] | undefined,\n baseSize: number = 24\n): {\n responsiveSizeClasses: string;\n responsiveSizeStyles: Record<string, string>;\n} => {\n const classes: string[] = [];\n const styles: Record<string, string> = {};\n\n // If no size provided, use baseSize\n if (size === undefined) {\n const key = getSizeKey(baseSize);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${baseSize}px`;\n styles.width = `${baseSize}px`;\n }\n }\n\n // If size is a number, use that directly\n if (typeof size === \"number\") {\n const key = getSizeKey(size);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${size}px`;\n styles.width = `${size}px`;\n }\n }\n\n // If array of responsive sizes, generate responsive classes\n if (Array.isArray(size)) {\n const baseKey = getSizeKey(baseSize);\n const responsiveClasses = [\n (baseKey && BASE_SIZES[baseKey]) || `h-[${baseSize}px] w-[${baseSize}px]`\n ];\n\n size.forEach((s) => {\n if (typeof s === \"string\") {\n const [breakpoint, valueStr] = s.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const key = getSizeKey(value);\n classes.push(\n (key && RESPONSIVE_SIZES[breakpoint]?.[key]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n });\n\n classes.push(...responsiveClasses);\n }\n\n if (typeof size === \"string\") {\n const [breakpoint, valueStr] = size.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const valueKey = getSizeKey(value);\n classes.push(\n (valueKey && RESPONSIVE_SIZES[breakpoint]?.[valueKey]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n\n return {\n responsiveSizeClasses: classes.join(\" \"),\n responsiveSizeStyles: styles\n };\n};\n","import { IconMap, IconName } from \"@deckai/icons\";\nimport React, { SVGProps } from \"react\";\nimport { IconColors } from \"../types/tailwind\";\nimport { cn } from \"../utils\";\nimport { ResponsiveSize, getResponsiveSize } from \"../utils/responsive\";\n\nexport type IconProps = {\n name: IconName;\n /** @default 24 */\n size?: ResponsiveSize | ResponsiveSize[];\n /** @default primary */\n color?: IconColors;\n title?: string;\n className?: string;\n style?: React.CSSProperties;\n} & Omit<SVGProps<SVGSVGElement>, \"aria-hidden\" | \"aria-label\">;\n\n// Using CSS variables to support dark mode\nconst COLOR_MAP: Record<IconColors, string> = {\n primary: \"var(--color-primary)\",\n secondary: \"var(--color-secondary)\",\n white: \"var(--color-white)\",\n primaryBlue: \"var(--color-primary-100)\",\n disabled: \"var(--color-disabled)\",\n danger: \"var(--color-danger)\"\n};\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n (\n {\n name,\n size = 24,\n color = \"primary\",\n title,\n className,\n style = {},\n ...props\n },\n ref\n ) => {\n const IconComponent = IconMap[name];\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 24\n );\n\n return (\n <div\n className={cn(\n \"flex justify-center items-center\",\n responsiveSizeClasses,\n className\n )}\n style={{\n [\"--icon-stroke\" as string]: COLOR_MAP[color],\n ...responsiveSizeStyles,\n ...style\n }}\n >\n <IconComponent\n ref={ref}\n aria-hidden={!title}\n aria-label={title}\n stroke={name.includes(\"filled\") ? undefined : COLOR_MAP[color]}\n {...props}\n />\n </div>\n );\n }\n);\n\nIcon.displayName = \"Icon\";\n","import React from \"react\";\nimport { Typography } from \"../types/tailwind\";\nimport { Breakpoint } from \"../utils/responsive\";\n\ntype TextElement =\n | \"p\"\n | \"span\"\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"strong\"\n | \"em\"\n | \"blockquote\"\n | \"pre\"\n | \"code\"\n | \"small\"\n | \"label\"\n | \"a\";\n\n// HTML element mapping type\ntype HTMLElementByTag = {\n p: HTMLParagraphElement;\n span: HTMLSpanElement;\n h1: HTMLHeadingElement;\n h2: HTMLHeadingElement;\n h3: HTMLHeadingElement;\n h4: HTMLHeadingElement;\n h5: HTMLHeadingElement;\n h6: HTMLHeadingElement;\n strong: HTMLElement;\n em: HTMLElement;\n blockquote: HTMLQuoteElement;\n pre: HTMLPreElement;\n code: HTMLElement;\n small: HTMLElement;\n label: HTMLLabelElement;\n a: HTMLAnchorElement;\n};\n\n// HTML props mapping type\ntype HTMLPropsMap = {\n p: React.HTMLAttributes<HTMLParagraphElement>;\n span: React.HTMLAttributes<HTMLSpanElement>;\n h1: React.HTMLAttributes<HTMLHeadingElement>;\n h2: React.HTMLAttributes<HTMLHeadingElement>;\n h3: React.HTMLAttributes<HTMLHeadingElement>;\n h4: React.HTMLAttributes<HTMLHeadingElement>;\n h5: React.HTMLAttributes<HTMLHeadingElement>;\n h6: React.HTMLAttributes<HTMLHeadingElement>;\n strong: React.HTMLAttributes<HTMLElement>;\n em: React.HTMLAttributes<HTMLElement>;\n blockquote: React.HTMLAttributes<HTMLQuoteElement>;\n pre: React.HTMLAttributes<HTMLPreElement>;\n code: React.HTMLAttributes<HTMLElement>;\n small: React.HTMLAttributes<HTMLElement>;\n label: React.LabelHTMLAttributes<HTMLLabelElement>;\n a: Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"color\">;\n};\n\ntype TextColor =\n | \"primary\"\n | \"secondary\"\n | \"white\"\n | \"primary-blue\"\n | \"disabled\"\n | \"danger\"\n | \"inherit\"\n | \"primary-100\";\n\nconst HEADING_ELEMENT_MAP: Record<string, TextElement> = {\n xl: \"h1\",\n lg: \"h1\",\n md: \"h2\",\n sm: \"h3\",\n xs: \"h4\"\n};\n\nconst getElementFromVariant = (variant: TypographyKey): TextElement => {\n const [category, size] = variant.split(\"-\");\n\n if (category === \"heading\") {\n return HEADING_ELEMENT_MAP[size] || \"p\";\n }\n\n if (category === \"label\") {\n return \"label\";\n }\n\n return \"p\";\n};\n\ntype Weight = \"light\" | \"regular\" | \"semibold\" | \"bold\";\n\nconst fontWeight: Record<Weight, string> = {\n light: \"font-light\",\n regular: \"font-regular\",\n semibold: \"font-semibold\",\n bold: \"font-bold\"\n};\n\ntype ResponsiveVariant = TypographyKey | `${Breakpoint}:${TypographyKey}`;\n\ntype TypographyCategory = keyof Typography;\ntype TypographyValue<T extends TypographyCategory> = Extract<\n keyof Typography[T],\n string | number | bigint | boolean | null | undefined\n>;\ntype TypographyKey = {\n [T in TypographyCategory]: `${T}-${TypographyValue<T>}`;\n}[TypographyCategory];\n\n// Update TextProps to use ResponsiveVariant\nexport type TextProps<T extends TextElement = \"p\"> = {\n variant?: ResponsiveVariant | ResponsiveVariant[];\n color?: TextColor;\n as?: T;\n className?: string;\n children: React.ReactNode;\n weight?: Weight;\n} & HTMLPropsMap[T];\n\n// Add helper function to process variants\nconst processVariants = (\n variants: ResponsiveVariant | ResponsiveVariant[] | undefined\n): string => {\n if (!variants) return \"text-body-default\";\n\n const variantArray = Array.isArray(variants) ? variants : [variants];\n\n return variantArray\n .map((variant) => {\n if (variant.includes(\":\")) {\n const [breakpoint, typographyClass] = variant.split(\":\");\n return `${breakpoint}:text-${typographyClass}`;\n }\n return `text-${variant}`;\n })\n .join(\" \");\n};\n\nexport const Text = React.forwardRef(\n <T extends TextElement = \"p\">(\n {\n variant = \"body-default\",\n color = \"primary\",\n as,\n className,\n children,\n weight,\n ...props\n }: TextProps<T>,\n ref: React.ForwardedRef<HTMLElementByTag[T]>\n ) => {\n // Process typography classes with breakpoints\n const typographyClasses = processVariants(variant);\n\n // Get color styles using Tailwind classes that reference CSS variables\n const colorClasses = color === \"inherit\" ? \"text-inherit\" : `text-${color}`;\n\n const suggestedElement = React.useMemo(() => {\n const baseVariant =\n typeof variant === \"string\"\n ? variant.split(\":\").pop()!\n : Array.isArray(variant)\n ? variant[0].split(\":\").pop()!\n : \"body-default\";\n return getElementFromVariant(baseVariant as TypographyKey);\n }, [variant]);\n\n const Component = (as || suggestedElement) as T;\n\n return (\n // @ts-expect-error TODO: figure this out\n <Component\n ref={ref}\n className={`\n font-sans antialiased\n ${typographyClasses}\n ${colorClasses}\n ${weight && `!${fontWeight[weight]}`}\n ${className}\n `}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\n\nText.displayName = \"Text\";\n","import { IconName } from \"@deckai/icons\";\nimport * as React from \"react\";\nimport { cn } from \"../utils\";\nimport { focusRingStylesCoerced } from \"../utils/tailwind\";\nimport { Icon, IconProps } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type InputProps = {\n className?: string;\n end?: React.ReactNode;\n /** renders an icon in the end slot */\n iconName?: IconName;\n /** Label text for the input */\n label?: string;\n /** Additional classes for the label */\n labelClassName?: string;\n /** Forces the focus ring to show regardless of focus state */\n forceShowFocusRing?: boolean;\n /** Error state for the input */\n error?: boolean;\n /** Error message to display below the input */\n errorMessage?: string;\n /** Helper text displayed below the input */\n helperText?: string;\n /** Character count display */\n showCharacterCount?: boolean;\n /** Maximum number of characters */\n maxLength?: number;\n} & React.InputHTMLAttributes<HTMLInputElement> &\n Pick<IconProps, \"color\" | \"size\" | \"title\">;\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n end,\n iconName,\n color,\n size,\n title,\n label,\n labelClassName,\n id,\n children,\n forceShowFocusRing,\n error,\n errorMessage,\n helperText,\n showCharacterCount,\n maxLength,\n value,\n defaultValue,\n onChange,\n disabled,\n ...props\n },\n ref\n ) => {\n const [currentValue, setCurrentValue] = React.useState(\n value?.toString() || defaultValue?.toString() || \"\"\n );\n\n // Update internal value when prop changes\n React.useEffect(() => {\n if (value !== undefined) {\n setCurrentValue(value.toString());\n }\n }, [value]);\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setCurrentValue(newValue);\n onChange?.(e);\n },\n [onChange]\n );\n\n const characterCount = currentValue.length;\n const showCount = showCharacterCount || !!maxLength;\n\n return (\n <div className=\"gap-1 flex flex-col\">\n {label && (\n <Text\n variant=\"label-default\"\n htmlFor={id}\n as=\"label\"\n color={error ? \"danger\" : \"primary\"}\n className={cn(labelClassName)}\n >\n {label}\n </Text>\n )}\n <div\n className={cn(\n \"relative flex flex-col gap-2 w-full rounded-lg border bg-background-0 px-3 md:py-3 py-2 text-secondary transition-colors duration-150\",\n !error && !forceShowFocusRing && \"border-secondary-50\",\n error && \"border-tertiary-10\",\n disabled && \"cursor-not-allowed opacity-50\",\n \"focus-within:ring-2 focus-within:ring-primary-100\",\n forceShowFocusRing && focusRingStylesCoerced\n )}\n >\n <div className=\"flex relative\">\n <input\n ref={ref}\n id={id}\n className={cn(\n \"font-sans text-sm flex w-full bg-background-0 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-secondary text-primary disabled:cursor-not-allowed focus:outline-none rounded-lg\",\n end && \"pr-10\",\n className\n )}\n value={currentValue}\n maxLength={maxLength}\n onChange={handleChange}\n aria-invalid={error}\n disabled={disabled}\n {...props}\n />\n {(end || iconName) && (\n <div className=\"absolute inset-y-0 right-0 flex items-center\">\n {iconName ? (\n <Icon\n name={iconName}\n color={error ? \"danger\" : \"secondary\"}\n size={size}\n title={title}\n />\n ) : (\n end\n )}\n </div>\n )}\n </div>\n {children}\n </div>\n <div className=\"flex justify-between gap-2\">\n {(error && errorMessage) || helperText ? (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"mt-1\"\n >\n {error ? errorMessage : helperText}\n </Text>\n ) : null}\n {showCount && (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"text-right mt-1\"\n >\n <Text\n variant=\"body-xxs\"\n as=\"span\"\n color=\"primary-100\"\n className=\"font-bold\"\n >\n {characterCount}\n </Text>\n {maxLength && `/${maxLength}`} characters\n </Text>\n )}\n </div>\n </div>\n );\n }\n);\n","import React, { forwardRef, KeyboardEvent } from \"react\";\nimport { cn } from \"../utils\";\nimport { Input } from \"./Input\";\nimport type { InputProps } from \"./Input\";\n\nexport type AutocompleteInputProps = {\n value: string;\n suggestion: string;\n onChange: (value: string) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;\n \"aria-controls\"?: string;\n \"aria-activedescendant\"?: string;\n \"aria-autocomplete\"?: \"none\" | \"inline\" | \"list\" | \"both\";\n} & Omit<InputProps, \"value\" | \"onChange\" | \"onKeyDown\">;\n\nexport const AutocompleteInput = forwardRef<\n HTMLInputElement,\n AutocompleteInputProps\n>(\n (\n {\n value,\n suggestion,\n onChange,\n onKeyDown,\n className,\n \"aria-controls\": ariaControls,\n \"aria-activedescendant\": ariaActiveDescendant,\n \"aria-autocomplete\": ariaAutocomplete,\n ...props\n },\n ref\n ) => {\n return (\n <div className=\"relative w-full\">\n <Input\n ref={ref}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={onKeyDown}\n className={cn(\"bg-transparent\", className)}\n aria-controls={ariaControls}\n aria-activedescendant={ariaActiveDescendant}\n aria-autocomplete={ariaAutocomplete}\n {...props}\n />\n {suggestion && (\n <div className=\"absolute inset-0 top-6 flex items-center px-3 md:py-3 py-2 text-secondary opacity-40 pointer-events-none text-sm\">\n {value}\n {suggestion.slice(value.length)}\n </div>\n )}\n </div>\n );\n }\n);\n\nAutocompleteInput.displayName = \"AutocompleteInput\";\n","import { IconName } from \"@deckai/icons\";\nimport * as React from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type BadgeProps = {\n variant?: \"pink\" | \"orange\" | \"green\" | \"purple\";\n iconName?: IconName;\n} & React.HTMLAttributes<HTMLSpanElement>;\n\nconst variants = {\n pink: \"bg-tertiary-5\",\n orange: \"bg-tertiary-15\",\n green: \"bg-tertiary-25\",\n purple: \"bg-secondary-300\"\n};\n\nconst stringToVariant = (str: string): keyof typeof variants => {\n const variantKeys = Object.keys(variants) as Array<keyof typeof variants>;\n // Let's log some values to understand what's happening\n const hash = str\n .split(\"\")\n .reduce((acc, char) => char.charCodeAt(0) + ((acc << 5) - acc), 0);\n\n const index = Math.abs(hash) % variantKeys.length;\n const selectedVariant = variantKeys[index];\n\n return selectedVariant;\n};\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, iconName, children, ...props }, ref) => {\n const finalVariant =\n variant ||\n (typeof children === \"string\" ? stringToVariant(children) : \"pink\");\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center gap-2\",\n \"rounded px-2 py-1.5\",\n \"text-sm font-medium\",\n variants[finalVariant],\n className\n )}\n {...props}\n >\n {iconName && <Icon size={16} name={iconName} />}\n <Text variant=\"body-xxs-semibold\" className=\"mt-0.5\">\n {children}\n </Text>\n </span>\n );\n }\n);\n\nBadge.displayName = \"Badge\";\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport * as React from \"react\";\nimport { useCallback, useState } from \"react\";\nimport { cn } from \"../utils\";\nimport { Text } from \"./Text\";\nexport interface TooltipProps {\n content: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n className?: string;\n delayDuration?: number;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Duration in ms for long press on mobile devices */\n longPressDuration?: number;\n}\n\nexport const Tooltip = ({\n content,\n children,\n side = \"bottom\",\n align = \"center\",\n className,\n delayDuration = 200,\n defaultOpen,\n open: controlledOpen,\n onOpenChange,\n longPressDuration = 500\n}: TooltipProps) => {\n const [isOpen, setIsOpen] = useState(defaultOpen || false);\n let longPressTimer: Timer | null = null;\n\n const open = controlledOpen ?? isOpen;\n const handleOpenChange = useCallback(\n (newOpen: boolean) => {\n if (!controlledOpen) {\n setIsOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n },\n [controlledOpen, onOpenChange]\n );\n\n const handleTouchStart = useCallback(() => {\n const timer = setTimeout(() => {\n handleOpenChange(true);\n }, longPressDuration);\n longPressTimer = timer;\n }, [handleOpenChange, longPressDuration]);\n\n const handleTouchEnd = useCallback(() => {\n if (longPressTimer) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n // Keep tooltip open for a brief moment after touch\n setTimeout(() => handleOpenChange(false), 1500);\n }, [longPressTimer, handleOpenChange]);\n\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <TooltipPrimitive.Trigger asChild>\n <span\n tabIndex={0}\n onTouchStart={handleTouchStart}\n onTouchEnd={handleTouchEnd}\n onTouchCancel={handleTouchEnd}\n >\n {children}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={side}\n align={align}\n sideOffset={4}\n className={cn(\n \"z-50 overflow-hidden rounded-lg\",\n \"bg-primary px-3 py-1.5\",\n \"text-xs text-white\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"data-[side=top]:slide-in-from-bottom-2\",\n \"select-none\",\n \"max-w-60\",\n \"touch-none\", // Prevent touch events from interfering with scrolling\n className\n )}\n >\n {typeof content === \"string\" ? (\n <Text variant=\"body-default-medium\" color=\"white\">\n {content}\n </Text>\n ) : (\n content\n )}\n <TooltipPrimitive.Arrow\n className=\"fill-text-primary\"\n width={10}\n height={5}\n />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n};\n","import React, { KeyboardEvent } from \"react\";\nimport { cn } from \"../utils\";\nimport { Badge } from \"./Badge\";\nimport { Text } from \"./Text\";\nimport { Tooltip } from \"./Tooltip\";\n\nexport type OptionProps = {\n label: React.ReactNode;\n value: string;\n /** Optional color override for specific items like \"Logout\" in red */\n color?: \"default\" | \"danger\";\n /** Optional disabled state */\n disabled?: boolean;\n onChange?: (value: string) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLButtonElement>) => void;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n selected?: boolean;\n className?: string;\n /** ID for accessibility */\n id?: string;\n /** ARIA role */\n role?: string;\n /** ARIA selected state */\n \"aria-selected\"?: boolean;\n /** Current search value for highlighting matches */\n searchValue?: string;\n /** Optional tooltip content */\n tooltip?: React.ReactNode;\n onClick?: () => void;\n badge?: React.ReactNode;\n};\n\nconst HighlightedText = ({\n text,\n highlight\n}: {\n text: string;\n highlight: string;\n}) => {\n if (!highlight) return <>{text}</>;\n\n const parts = text.split(new RegExp(`(${highlight})`, \"i\"));\n return (\n <>\n {parts.map((part, i) =>\n part.toLowerCase() === highlight.toLowerCase() ? (\n <span key={i} className=\"font-bold\">\n {part}\n </span>\n ) : (\n part\n )\n )}\n </>\n );\n};\n\nexport const Option = React.forwardRef<HTMLButtonElement, OptionProps>(\n (\n {\n value,\n label,\n onChange,\n onKeyDown,\n onMouseEnter,\n onMouseLeave,\n selected,\n color,\n disabled,\n className,\n id,\n role,\n \"aria-selected\": ariaSelected,\n searchValue = \"\",\n tooltip,\n onClick,\n badge\n },\n ref\n ) => {\n const content = (\n <button\n ref={ref}\n type=\"button\"\n id={id}\n role={role}\n aria-selected={ariaSelected}\n disabled={disabled}\n className={cn(\n \"relative w-full text-left px-2 py-1.5 text-sm rounded outline-none\",\n \"cursor-pointer hover:bg-gray-100\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n selected && \"bg-gray-100\",\n \"flex items-center gap-2\",\n className\n )}\n onClick={() => {\n onChange?.(value);\n onClick?.();\n }}\n onKeyDown={onKeyDown}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <Text\n variant=\"body-default-medium\"\n color={color === \"danger\" ? \"danger\" : \"inherit\"}\n >\n {typeof label === \"string\" ? (\n <HighlightedText text={label} highlight={searchValue} />\n ) : (\n label\n )}\n </Text>\n {badge && <Badge>{badge}</Badge>}\n </button>\n );\n return tooltip ? <Tooltip content={tooltip}>{content}</Tooltip> : content;\n }\n);\n","import React, { HTMLAttributes, useCallback, useState } from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\nimport { Pressable, PressableProps } from \"./Pressable\";\nimport { Text } from \"./Text\";\n\nexport type TagProps = {\n children: React.ReactNode;\n padded?: boolean;\n color?: \"primary\" | \"text\";\n onClose?: () => void;\n} & HTMLAttributes<HTMLDivElement> &\n PressableProps;\n\nexport const Tag = ({\n children,\n color = \"primary\",\n className,\n onClose,\n ...pressableProps\n}: TagProps) => {\n const [isHovered, setIsHovered] = useState(false);\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n const content = (\n <div\n className={cn(\n \"flex gap-2\",\n onClose\n ? \"justify-between items-center\"\n : \"items-center justify-center\",\n \"hover:bg-primary-100 rounded bg-secondary-400 px-2 py-1 sm:px-3 sm:py-1.5 h-min hover:text-white\",\n color === \"primary\" ? \"text-primary-100\" : \"text-primary\",\n className\n )}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {typeof children === \"string\" ? (\n <Text\n color=\"inherit\"\n variant={[\"md:body-default-medium\", \"body-xxs-medium\"]}\n className=\"truncate pt-0.5\"\n >\n {children}\n </Text>\n ) : (\n children\n )}\n {onClose && (\n <Pressable\n {...pressableProps}\n onClick={onClose}\n className=\"flex items-center justify-center\"\n >\n <Icon\n name=\"close\"\n size={12}\n color={isHovered ? \"white\" : \"primaryBlue\"}\n />\n </Pressable>\n )}\n </div>\n );\n\n return onClose ? (\n content\n ) : (\n <Pressable {...pressableProps}>{content}</Pressable>\n );\n};\n","import React, { ButtonHTMLAttributes } from \"react\";\nimport { focusRingStyles } from \"../utils/tailwind\";\nimport { cn } from \"../utils\";\n\nexport type PressableProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Pressable = React.forwardRef<HTMLButtonElement, PressableProps>(\n ({ children, type = \"button\", className, disabled, ...props }, ref) => (\n <button\n ref={ref}\n type={type}\n disabled={disabled}\n className={cn(\n \"appearance-none hover:opacity-80 transition-all active:scale-95\",\n focusRingStyles,\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n);\n\nPressable.displayName = \"Pressable\";\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport React, {\n KeyboardEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from \"react\";\nimport { cn } from \"../utils\";\nimport { AutocompleteInput } from \"./AutocompleteInput\";\nimport { Icon } from \"./Icon\";\nimport { Input } from \"./Input\";\nimport { Option, OptionProps } from \"./Option\";\nimport { Tag } from \"./Tag\";\nimport { Text } from \"./Text\";\n\nexport type OptionGroup = {\n label: string;\n options: OptionProps[];\n};\n\nexport type MultiSelectComboboxProps = {\n /** Options can be either a flat array or grouped */\n options: OptionProps[] | OptionGroup[];\n /** Currently selected values */\n selectedValues: string[];\n /** Callback when selection changes */\n onSelectionChange: (values: string[]) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Additional classes for the container */\n className?: string;\n /** Label text for the combobox */\n label?: string;\n /** Additional classes for the label */\n labelClassName?: string;\n /** ID for accessibility */\n id?: string;\n /** Maximum number of selections allowed */\n maxSelections?: number;\n /** Whether the combobox is disabled */\n disabled?: boolean;\n /** Message to show when no options are available */\n noOptionsMessage?: string;\n /** Loading state for async options */\n loading?: boolean;\n /** Error state for the combobox */\n error?: boolean;\n /** Error message to display */\n errorMessage?: string;\n /** Helper text displayed below the combobox */\n helperText?: string;\n /** Optional container for the portal */\n container?: HTMLElement | null;\n /** Whether to enable autocomplete functionality */\n autocomplete?: boolean;\n};\n\nexport const MultiSelectCombobox = ({\n options,\n selectedValues,\n onSelectionChange,\n placeholder = \"Select items...\",\n className,\n label,\n labelClassName,\n id,\n maxSelections,\n disabled,\n noOptionsMessage,\n loading,\n error,\n errorMessage,\n helperText,\n container,\n autocomplete = false\n}: MultiSelectComboboxProps) => {\n const [open, setOpen] = useState(false);\n const [searchValue, setSearchValue] = useState(\"\");\n const [expandedGroups, setExpandedGroups] = useState<Record<string, boolean>>(\n {}\n );\n const [highlightedIndex, setHighlightedIndex] = useState<number>(-1);\n const [hoveredIndex, setHoveredIndex] = useState<number>(-1);\n const listRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const isGrouped = useMemo(\n () => options.length > 0 && \"options\" in options[0],\n [options]\n );\n\n const flatOptions = useMemo(() => {\n if (!options.length) return [];\n if (!isGrouped) return options as OptionProps[];\n return (options as OptionGroup[]).reduce<OptionProps[]>(\n (acc, group) => [...acc, ...group.options],\n []\n );\n }, [isGrouped, options]);\n\n const selectedOptions = useMemo(\n () => flatOptions.filter((option) => selectedValues.includes(option.value)),\n [flatOptions, selectedValues]\n );\n\n const isMaxSelected = useMemo(\n () => maxSelections !== undefined && selectedValues.length >= maxSelections,\n [maxSelections, selectedValues]\n );\n\n const visibleOptions = useMemo(() => {\n return flatOptions.filter((option) => {\n // First, check if the option is already selected\n if (selectedValues.includes(option.value)) {\n return false;\n }\n // Then check if max selections is reached\n if (isMaxSelected) {\n return false;\n }\n // Then apply search filter\n return searchValue && typeof option.label === \"string\"\n ? option.label.toLowerCase().includes(searchValue.toLowerCase())\n : true;\n });\n }, [flatOptions, searchValue, selectedValues, isMaxSelected]);\n\n const filteredGroups = useMemo(() => {\n if (!isGrouped) {\n return visibleOptions.length > 0\n ? [{ label: \"\", options: visibleOptions }]\n : [];\n }\n\n return (options as OptionGroup[])\n .map((group) => ({\n ...group,\n options: group.options.filter((option) => {\n // First, check if the option is already selected\n if (selectedValues.includes(option.value)) {\n return false;\n }\n // Then check if max selections is reached\n if (isMaxSelected) {\n return false;\n }\n // Then apply search filter\n return searchValue && typeof option.label === \"string\"\n ? option.label.toLowerCase().includes(searchValue.toLowerCase())\n : true;\n })\n }))\n .filter((group) => group.options.length > 0);\n }, [\n isGrouped,\n options,\n searchValue,\n selectedValues,\n visibleOptions,\n isMaxSelected\n ]);\n\n const handleOptionSelect = useCallback(\n (optionValue: string) => {\n const isSelected = selectedValues.includes(optionValue);\n if (isSelected) {\n onSelectionChange(selectedValues.filter((v) => v !== optionValue));\n } else if (!isMaxSelected) {\n onSelectionChange([...selectedValues, optionValue]);\n }\n if (inputRef.current) {\n inputRef.current.focus({ preventScroll: true });\n }\n },\n [selectedValues, onSelectionChange, isMaxSelected]\n );\n\n const toggleGroup = useCallback((groupLabel: string) => {\n setExpandedGroups((prev) => ({\n ...prev,\n [groupLabel]: !prev[groupLabel]\n }));\n }, []);\n\n const suggestion = useMemo(() => {\n if (!autocomplete || !searchValue || !open) return \"\";\n const matchingOption = visibleOptions.find(\n (opt) =>\n typeof opt.label === \"string\" &&\n opt.label.toLowerCase().startsWith(searchValue.toLowerCase()) &&\n opt.label.toLowerCase() !== searchValue.toLowerCase() &&\n !selectedValues.includes(opt.value)\n );\n return matchingOption?.label?.toString() || \"\";\n }, [autocomplete, searchValue, visibleOptions, open, selectedValues]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n if (event.altKey) {\n setOpen(true);\n } else {\n if (!open) {\n setOpen(true);\n setHighlightedIndex(0);\n } else {\n setHighlightedIndex((prev) =>\n prev < visibleOptions.length - 1 ? prev + 1 : 0\n );\n }\n }\n break;\n\n case \"ArrowUp\":\n event.preventDefault();\n if (event.altKey) {\n setOpen(false);\n } else {\n if (!open) {\n setOpen(true);\n setHighlightedIndex(visibleOptions.length - 1);\n } else {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : visibleOptions.length - 1\n );\n }\n }\n break;\n\n case \"PageUp\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex((prev) => Math.max(0, prev - 10));\n }\n break;\n\n case \"PageDown\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex((prev) =>\n Math.min(visibleOptions.length - 1, prev + 10)\n );\n }\n break;\n\n case \"Home\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex(0);\n }\n break;\n\n case \"End\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex(visibleOptions.length - 1);\n }\n break;\n\n case \"Enter\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionSelect(visibleOptions[highlightedIndex].value);\n } else if (autocomplete && suggestion) {\n const matchingOption = visibleOptions.find(\n (opt) =>\n typeof opt.label === \"string\" &&\n opt.label.toLowerCase().startsWith(searchValue.toLowerCase()) &&\n !selectedValues.includes(opt.value)\n );\n if (matchingOption) {\n handleOptionSelect(matchingOption.value);\n }\n }\n break;\n\n case \"Tab\":\n if (!open) {\n event.preventDefault();\n setOpen(true);\n setHighlightedIndex(0);\n } else if (\n highlightedIndex >= 0 &&\n visibleOptions[highlightedIndex]\n ) {\n event.preventDefault();\n handleOptionSelect(visibleOptions[highlightedIndex].value);\n }\n break;\n\n case \"Escape\":\n event.preventDefault();\n setOpen(false);\n setSearchValue(\"\");\n break;\n }\n },\n [\n open,\n highlightedIndex,\n visibleOptions,\n handleOptionSelect,\n autocomplete,\n suggestion,\n searchValue,\n selectedValues\n ]\n );\n\n const handleOptionKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n setHighlightedIndex((prev) =>\n prev < visibleOptions.length - 1 ? prev + 1 : 0\n );\n break;\n\n case \"ArrowUp\":\n event.preventDefault();\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : visibleOptions.length - 1\n );\n break;\n\n case \"Enter\":\n case \"Space\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionSelect(visibleOptions[highlightedIndex].value);\n }\n break;\n\n case \"Escape\":\n event.preventDefault();\n setOpen(false);\n inputRef.current?.focus();\n break;\n\n case \"Tab\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionSelect(visibleOptions[highlightedIndex].value);\n }\n break;\n }\n },\n [highlightedIndex, visibleOptions, handleOptionSelect]\n );\n\n // Keep input focused when dropdown is open\n useEffect(() => {\n if (open) {\n const input = inputRef.current;\n if (input) {\n input.focus({ preventScroll: true });\n // Move cursor to end of text\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }\n }\n }, [open]);\n\n // Reset highlighted index when dropdown closes\n useEffect(() => {\n if (!open) {\n setHighlightedIndex(-1);\n }\n }, [open]);\n\n // Scroll highlighted option into view\n useEffect(() => {\n if (open && highlightedIndex >= 0 && listRef.current) {\n const highlightedOption = listRef.current.querySelector(\n `[id=\"${id}-option-${highlightedIndex}\"]`\n ) as HTMLElement;\n\n if (highlightedOption) {\n highlightedOption.scrollIntoView({\n block: \"nearest\",\n behavior: \"smooth\"\n });\n }\n }\n }, [highlightedIndex, open, id]);\n\n // Set initial highlight when opening dropdown\n useEffect(() => {\n if (open && highlightedIndex === -1) {\n setHighlightedIndex(0);\n }\n }, [open, highlightedIndex]);\n\n // Initialize expanded state for all groups\n useEffect(() => {\n if (isGrouped) {\n const initialState = (options as OptionGroup[]).reduce<\n Record<string, boolean>\n >(\n (acc, group) => ({\n ...acc,\n [group.label]: true\n }),\n {}\n );\n setExpandedGroups(initialState);\n }\n }, [isGrouped, options]);\n\n return (\n <div className={cn(\"flex flex-col gap-2\", className)}>\n {label && (\n <Text\n variant=\"label-default\"\n htmlFor={id}\n as=\"label\"\n color={error ? \"danger\" : \"primary\"}\n className={cn(labelClassName)}\n >\n {label}\n </Text>\n )}\n <Popover.Root\n open={open && !disabled}\n onOpenChange={(isOpen) => {\n if (!disabled) {\n setOpen(isOpen);\n if (!isOpen) {\n setSearchValue(\"\");\n setHighlightedIndex(-1);\n }\n }\n }}\n >\n <div className=\"relative w-full font-sans text-secondary\">\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className=\"w-full text-left\"\n disabled={disabled}\n >\n {autocomplete ? (\n <AutocompleteInput\n ref={inputRef}\n id={id}\n placeholder={placeholder}\n value={searchValue}\n suggestion={suggestion}\n onChange={(value) => {\n setSearchValue(value);\n if (!open) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n className=\"flex-1\"\n forceShowFocusRing={open}\n disabled={disabled}\n error={error}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={`${id}-listbox`}\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${id}-option-${highlightedIndex}`\n : undefined\n }\n />\n ) : (\n <Input\n ref={inputRef}\n id={id}\n placeholder={placeholder}\n value={searchValue}\n onChange={(e) => {\n setSearchValue(e.target.value);\n if (!open) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n className=\"flex-1\"\n forceShowFocusRing={open}\n error={error}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={`${id}-listbox`}\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${id}-option-${highlightedIndex}`\n : undefined\n }\n disabled={\n disabled ||\n (!!maxSelections && selectedValues.length >= maxSelections)\n }\n />\n )}\n </button>\n </Popover.Trigger>\n\n <Popover.Portal container={container}>\n <Popover.Content\n className=\"w-[--radix-popover-trigger-width] overflow-y-scroll p-1 bg-background-0 rounded-md shadow-lg border z-[9999] data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out outline-none\"\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n onFocusOutside={(e) => e.preventDefault()}\n onInteractOutside={(e) => {\n e.preventDefault();\n setOpen(false);\n setSearchValue(\"\");\n setHighlightedIndex(-1);\n }}\n >\n <div\n ref={listRef}\n className=\"max-h-60 flex flex-col items-start outline-none\"\n role=\"listbox\"\n id={`${id}-listbox`}\n aria-label={label}\n aria-multiselectable=\"true\"\n aria-busy={loading}\n >\n {loading ? (\n <Text variant=\"label-default\" className=\"text-secondary p-2\">\n Loading...\n </Text>\n ) : visibleOptions.length > 0 ? (\n filteredGroups.map((group, groupIndex) => (\n <Collapsible.Root\n key={group.label || groupIndex}\n className=\"w-full\"\n open={expandedGroups[group.label] ?? true}\n onOpenChange={() =>\n group.label && toggleGroup(group.label)\n }\n >\n {group.label && (\n <Collapsible.Trigger asChild>\n <div\n className=\"w-full flex items-center justify-between px-2 py-1.5 hover:bg-gray-50\"\n tabIndex={-1}\n >\n <Text variant=\"body-default-bold\" color=\"secondary\">\n {group.label}\n </Text>\n <Icon\n name=\"arrow-down\"\n className={cn(\n \"transition-transform\",\n expandedGroups[group.label] && \"rotate-180\"\n )}\n size={16}\n />\n </div>\n </Collapsible.Trigger>\n )}\n <Collapsible.Content className=\"data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up\">\n {group.options.map((option, index) => {\n const optionIndex = visibleOptions.findIndex(\n (opt) => opt.value === option.value\n );\n return (\n <Option\n key={`${groupIndex}-${index}`}\n label={option.label}\n value={option.value}\n onChange={handleOptionSelect}\n onKeyDown={handleOptionKeyDown}\n className=\"pl-4\"\n selected={\n hoveredIndex === optionIndex ||\n (hoveredIndex === -1 &&\n highlightedIndex === optionIndex)\n }\n id={`${id}-option-${optionIndex}`}\n role=\"option\"\n aria-selected={selectedValues.includes(\n option.value\n )}\n searchValue={searchValue}\n onMouseEnter={() => setHoveredIndex(optionIndex)}\n onMouseLeave={() => setHoveredIndex(-1)}\n />\n );\n })}\n </Collapsible.Content>\n </Collapsible.Root>\n ))\n ) : (\n <Text variant=\"label-default\" className=\"text-secondary p-2\">\n {noOptionsMessage || \"No results found\"}\n </Text>\n )}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </div>\n </Popover.Root>\n {selectedOptions.length > 0 && (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex flex-wrap gap-2\">\n {selectedOptions.map((option) => (\n <Tag\n key={option.value}\n onClose={() => handleOptionSelect(option.value)}\n disabled={disabled}\n >\n {option.label}\n </Tag>\n ))}\n </div>\n {isMaxSelected && (\n <Text variant=\"body-xxs\" color=\"secondary\">\n Maximum of {maxSelections} items selected\n </Text>\n )}\n </div>\n )}\n {(error && errorMessage) || helperText ? (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"mt-1\"\n >\n {error ? errorMessage : helperText}\n </Text>\n ) : null}\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/index.ts","../../src/utils/tailwind.ts","../../src/utils/responsive.ts","../../src/components/Icon.tsx","../../src/components/Text.tsx","../../src/components/Input.tsx","../../src/components/AutocompleteInput.tsx","../../src/components/Option.tsx","../../src/components/Badge.tsx","../../src/components/Tooltip.tsx","../../src/components/Tag.tsx","../../src/components/Pressable.tsx","../../src/components/MultiSelectCombobox.tsx"],"names":["cn","inputs","twMerge","clsx","focusRingStyles","focusRingStylesCoerced","BASE_SIZES","RESPONSIVE_SIZES","getSizeKey","size","getResponsiveSize","baseSize","classes","styles","key","baseKey","responsiveClasses","s","breakpoint","valueStr","value","valueKey","COLOR_MAP","Icon","React","name","color","title","className","style","props","ref","IconComponent","IconMap","responsiveSizeClasses","responsiveSizeStyles","HEADING_ELEMENT_MAP","getElementFromVariant","variant","category","fontWeight","processVariants","variants","typographyClass","Text","as","children","weight","typographyClasses","colorClasses","suggestedElement","baseVariant","Input","v","end","iconName","label","labelClassName","id","forceShowFocusRing","error","errorMessage","helperText","showCharacterCount","maxLength","defaultValue","onChange","disabled","currentValue","setCurrentValue","handleChange","e","newValue","characterCount","showCount","AutocompleteInput","forwardRef","suggestion","onKeyDown","ariaControls","ariaActiveDescendant","ariaAutocomplete","stringToVariant","str","variantKeys","hash","acc","char","index","Badge","z","finalVariant","Tooltip","content","side","align","delayDuration","defaultOpen","controlledOpen","onOpenChange","longPressDuration","isOpen","setIsOpen","useState","longPressTimer","open","handleOpenChange","useCallback","newOpen","handleTouchStart","handleTouchEnd","R","P","HighlightedText","text","highlight","parts","part","i","Option","onMouseEnter","onMouseLeave","selected","role","ariaSelected","searchValue","tooltip","onClick","badge","Pressable","type","Tag","onClose","pressableProps","isHovered","setIsHovered","handleMouseEnter","handleMouseLeave","MultiSelectCombobox","options","selectedValues","onSelectionChange","placeholder","maxSelections","noOptionsMessage","loading","container","autocomplete","setOpen","setSearchValue","expandedGroups","setExpandedGroups","highlightedIndex","setHighlightedIndex","hoveredIndex","setHoveredIndex","listRef","useRef","inputRef","isGrouped","useMemo","flatOptions","group","selectedOptions","option","isMaxSelected","visibleOptions","filteredGroups","handleOptionSelect","optionValue","toggleGroup","groupLabel","prev","opt","handleKeyDown","event","matchingOption","handleOptionKeyDown","useEffect","input","length","highlightedOption","initialState","O","groupIndex","V","optionIndex"],"mappings":"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","file":"MultiSelectCombobox.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const noopFn = () => {};\n","import type { Colors, Typography } from \"../types/tailwind\";\n\n// Generate safelist patterns for all color utilities so you can use any theme color variable in your code\nexport const generateSafelist = (colors: Colors, typography: Typography) => {\n const colorNames = Object.keys(colors) as (keyof Colors)[];\n const utilities = [\"bg\", \"text\", \"border\", \"ring\", \"divide\", \"outline\"];\n const variants = [\"hover:\", \"focus:\", \"active:\", \"disabled:\"];\n const breakpoints = [\"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\n const sizes = [\"24\", \"42\", \"48\", \"64\", \"72\"]; // Add all the sizes you need\n\n const safelist: (string | { pattern: RegExp; variants: string[] })[] = [];\n\n colorNames.forEach((colorName) => {\n if (typeof colors[colorName] === \"object\") {\n // Handle nested color objects (with number keys)\n Object.keys(colors[colorName]).forEach((shade) => {\n utilities.forEach((utility) => {\n // Base utility\n safelist.push(`${utility}-${colorName}-${shade}`);\n\n // Variant utilities\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}-${shade}`);\n });\n });\n });\n } else {\n // Handle direct color values\n utilities.forEach((utility) => {\n safelist.push(`${utility}-${colorName}`);\n\n variants.forEach((variant) => {\n safelist.push(`${variant}${utility}-${colorName}`);\n });\n });\n }\n });\n\n // Generate typography classes\n Object.entries(typography).forEach(([family, sizes]) => {\n Object.keys(sizes).forEach((size) => {\n // Base typography classes\n safelist.push(`text-${family}-${size}`);\n\n // Add variants\n variants.forEach((variant) => {\n safelist.push(`${variant}text-${family}-${size}`);\n });\n });\n });\n\n const typographyClasses = Object.entries(typography).flatMap(\n ([category, sizes]) =>\n Object.keys(sizes).map((size) => `text-${category}-${size}`)\n );\n\n // Generate responsive variants\n const responsiveTypographyClasses = typographyClasses.flatMap((className) =>\n breakpoints.map((breakpoint) => `${breakpoint}:${className}`)\n );\n\n // Generate size classes with responsive variants\n const sizeClasses = sizes.flatMap((size) => [\n `h-[${size}px]`,\n `w-[${size}px]`,\n ...breakpoints.flatMap((bp) => [\n `${bp}:h-[${size}px]`,\n `${bp}:w-[${size}px]`\n ])\n ]);\n\n return [...typographyClasses, ...responsiveTypographyClasses, ...sizeClasses];\n};\n\nexport const focusRingStyles =\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-100\";\nexport const focusRingWithinStyles =\n \"focus-within:outline-none focus-within:ring-2 focus-within:ring-primary-100\";\nexport const focusRingStylesCoerced = \"ring-2 ring-primary-100\";\n","export type Breakpoint = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\nexport type ResponsiveSize = number | `${Breakpoint}:${number}`;\n\ntype SizeKey =\n | \"12\"\n | \"16\"\n | \"18\"\n | \"20\"\n | \"24\"\n | \"32\"\n | \"36\"\n | \"40\"\n | \"42\"\n | \"48\"\n | \"64\"\n | \"72\";\n\n// These constants help Tailwind identify the classes during compilation\nconst BASE_SIZES: Record<SizeKey, string> = {\n \"12\": \"h-[12px] w-[12px]\",\n \"16\": \"h-[16px] w-[16px]\",\n \"18\": \"h-[18px] w-[18px]\",\n \"20\": \"h-[20px] w-[20px]\",\n \"24\": \"h-[24px] w-[24px]\",\n \"32\": \"h-[32px] w-[32px]\",\n \"36\": \"h-[36px] w-[36px]\",\n \"40\": \"h-[40px] w-[40px]\",\n \"42\": \"h-[42px] w-[42px]\",\n \"48\": \"h-[48px] w-[48px]\",\n \"64\": \"h-[64px] w-[64px]\",\n \"72\": \"h-[72px] w-[72px]\"\n};\n\nconst RESPONSIVE_SIZES: Record<Breakpoint, Record<SizeKey, string>> = {\n sm: {\n \"12\": \"sm:h-[12px] sm:w-[12px]\",\n \"16\": \"sm:h-[16px] sm:w-[16px]\",\n \"18\": \"sm:h-[18px] sm:w-[18px]\",\n \"20\": \"sm:h-[20px] sm:w-[20px]\",\n \"24\": \"sm:h-[24px] sm:w-[24px]\",\n \"32\": \"sm:h-[32px] sm:w-[32px]\",\n \"36\": \"sm:h-[36px] sm:w-[36px]\",\n \"40\": \"sm:h-[40px] sm:w-[40px]\",\n \"42\": \"sm:h-[42px] sm:w-[42px]\",\n \"48\": \"sm:h-[48px] sm:w-[48px]\",\n \"64\": \"sm:h-[64px] sm:w-[64px]\",\n \"72\": \"sm:h-[72px] sm:w-[72px]\"\n },\n md: {\n \"12\": \"md:h-[12px] md:w-[12px]\",\n \"16\": \"md:h-[16px] md:w-[16px]\",\n \"18\": \"md:h-[18px] md:w-[18px]\",\n \"20\": \"md:h-[20px] md:w-[20px]\",\n \"24\": \"md:h-[24px] md:w-[24px]\",\n \"32\": \"md:h-[32px] md:w-[32px]\",\n \"36\": \"md:h-[36px] md:w-[36px]\",\n \"40\": \"md:h-[40px] md:w-[40px]\",\n \"42\": \"md:h-[42px] md:w-[42px]\",\n \"48\": \"md:h-[48px] md:w-[48px]\",\n \"64\": \"md:h-[64px] md:w-[64px]\",\n \"72\": \"md:h-[72px] md:w-[72px]\"\n },\n lg: {\n \"12\": \"lg:h-[12px] lg:w-[12px]\",\n \"16\": \"lg:h-[16px] lg:w-[16px]\",\n \"18\": \"lg:h-[18px] lg:w-[18px]\",\n \"20\": \"lg:h-[20px] lg:w-[20px]\",\n \"24\": \"lg:h-[24px] lg:w-[24px]\",\n \"32\": \"lg:h-[32px] lg:w-[32px]\",\n \"36\": \"lg:h-[36px] lg:w-[36px]\",\n \"40\": \"lg:h-[40px] lg:w-[40px]\",\n \"42\": \"lg:h-[42px] lg:w-[42px]\",\n \"48\": \"lg:h-[48px] lg:w-[48px]\",\n \"64\": \"lg:h-[64px] lg:w-[64px]\",\n \"72\": \"lg:h-[72px] lg:w-[72px]\"\n },\n xl: {\n \"12\": \"xl:h-[12px] xl:w-[12px]\",\n \"16\": \"xl:h-[16px] xl:w-[16px]\",\n \"18\": \"xl:h-[18px] xl:w-[18px]\",\n \"20\": \"xl:h-[20px] xl:w-[20px]\",\n \"24\": \"xl:h-[24px] xl:w-[24px]\",\n \"32\": \"xl:h-[32px] xl:w-[32px]\",\n \"36\": \"xl:h-[36px] xl:w-[36px]\",\n \"40\": \"xl:h-[40px] xl:w-[40px]\",\n \"42\": \"xl:h-[42px] xl:w-[42px]\",\n \"48\": \"xl:h-[48px] xl:w-[48px]\",\n \"64\": \"xl:h-[64px] xl:w-[64px]\",\n \"72\": \"xl:h-[72px] xl:w-[72px]\"\n },\n \"2xl\": {\n \"12\": \"2xl:h-[12px] 2xl:w-[12px]\",\n \"16\": \"2xl:h-[16px] 2xl:w-[16px]\",\n \"18\": \"2xl:h-[18px] 2xl:w-[18px]\",\n \"20\": \"2xl:h-[20px] 2xl:w-[20px]\",\n \"24\": \"2xl:h-[24px] 2xl:w-[24px]\",\n \"32\": \"2xl:h-[32px] 2xl:w-[32px]\",\n \"36\": \"2xl:h-[36px] 2xl:w-[36px]\",\n \"40\": \"2xl:h-[40px] 2xl:w-[40px]\",\n \"42\": \"2xl:h-[42px] 2xl:w-[42px]\",\n \"48\": \"2xl:h-[48px] 2xl:w-[48px]\",\n \"64\": \"2xl:h-[64px] 2xl:w-[64px]\",\n \"72\": \"2xl:h-[72px] 2xl:w-[72px]\"\n }\n};\n\nconst getSizeKey = (size: number): SizeKey | undefined => {\n return String(size) as SizeKey;\n};\n\nexport const getResponsiveSize = (\n size: ResponsiveSize | ResponsiveSize[] | undefined,\n baseSize: number = 24\n): {\n responsiveSizeClasses: string;\n responsiveSizeStyles: Record<string, string>;\n} => {\n const classes: string[] = [];\n const styles: Record<string, string> = {};\n\n // If no size provided, use baseSize\n if (size === undefined) {\n const key = getSizeKey(baseSize);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${baseSize}px`;\n styles.width = `${baseSize}px`;\n }\n }\n\n // If size is a number, use that directly\n if (typeof size === \"number\") {\n const key = getSizeKey(size);\n if (key) {\n classes.push(BASE_SIZES[key]);\n } else {\n styles.height = `${size}px`;\n styles.width = `${size}px`;\n }\n }\n\n // If array of responsive sizes, generate responsive classes\n if (Array.isArray(size)) {\n const baseKey = getSizeKey(baseSize);\n const responsiveClasses = [\n (baseKey && BASE_SIZES[baseKey]) || `h-[${baseSize}px] w-[${baseSize}px]`\n ];\n\n size.forEach((s) => {\n if (typeof s === \"string\") {\n const [breakpoint, valueStr] = s.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const key = getSizeKey(value);\n classes.push(\n (key && RESPONSIVE_SIZES[breakpoint]?.[key]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n });\n\n classes.push(...responsiveClasses);\n }\n\n if (typeof size === \"string\") {\n const [breakpoint, valueStr] = size.split(\":\") as [Breakpoint, string];\n const value = parseInt(valueStr, 10);\n const valueKey = getSizeKey(value);\n classes.push(\n (valueKey && RESPONSIVE_SIZES[breakpoint]?.[valueKey]) ||\n `${breakpoint}:h-[${value}px] ${breakpoint}:w-[${value}px]`\n );\n }\n\n return {\n responsiveSizeClasses: classes.join(\" \"),\n responsiveSizeStyles: styles\n };\n};\n","import type { IconName } from \"@deckai/icons\";\nimport { IconMap } from \"@deckai/icons\";\nimport type { SVGProps } from \"react\";\nimport React from \"react\";\n\nimport type { IconColors } from \"../types/tailwind\";\nimport { cn } from \"../utils\";\nimport type { ResponsiveSize } from \"../utils/responsive\";\nimport { getResponsiveSize } from \"../utils/responsive\";\n\nexport type IconProps = {\n name: IconName;\n /** @default 24 */\n size?: ResponsiveSize | ResponsiveSize[];\n /** @default primary */\n color?: IconColors;\n title?: string;\n className?: string;\n style?: React.CSSProperties;\n} & Omit<SVGProps<SVGSVGElement>, \"aria-hidden\" | \"aria-label\">;\n\n// Using CSS variables to support dark mode\nconst COLOR_MAP: Record<IconColors, string> = {\n primary: \"var(--color-primary)\",\n secondary: \"var(--color-secondary)\",\n white: \"var(--color-white)\",\n primaryBlue: \"var(--color-primary-100)\",\n disabled: \"var(--color-disabled)\",\n danger: \"var(--color-danger)\"\n};\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n (\n {\n name,\n size = 24,\n color = \"primary\",\n title,\n className,\n style = {},\n ...props\n },\n ref\n ) => {\n const IconComponent = IconMap[name];\n const { responsiveSizeClasses, responsiveSizeStyles } = getResponsiveSize(\n size,\n 24\n );\n\n return (\n <div\n className={cn(\n \"flex justify-center items-center\",\n responsiveSizeClasses,\n className\n )}\n style={{\n [\"--icon-stroke\" as string]: COLOR_MAP[color],\n ...responsiveSizeStyles,\n ...style\n }}\n >\n <IconComponent\n ref={ref}\n aria-hidden={!title}\n aria-label={title}\n stroke={name.includes(\"filled\") ? undefined : COLOR_MAP[color]}\n {...props}\n />\n </div>\n );\n }\n);\n\nIcon.displayName = \"Icon\";\n","import React from \"react\";\n\nimport type { Typography } from \"../types/tailwind\";\nimport type { Breakpoint } from \"../utils/responsive\";\n\ntype TextElement =\n | \"p\"\n | \"span\"\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"strong\"\n | \"em\"\n | \"blockquote\"\n | \"pre\"\n | \"code\"\n | \"small\"\n | \"label\"\n | \"a\";\n\n// HTML element mapping type\ntype HTMLElementByTag = {\n p: HTMLParagraphElement;\n span: HTMLSpanElement;\n h1: HTMLHeadingElement;\n h2: HTMLHeadingElement;\n h3: HTMLHeadingElement;\n h4: HTMLHeadingElement;\n h5: HTMLHeadingElement;\n h6: HTMLHeadingElement;\n strong: HTMLElement;\n em: HTMLElement;\n blockquote: HTMLQuoteElement;\n pre: HTMLPreElement;\n code: HTMLElement;\n small: HTMLElement;\n label: HTMLLabelElement;\n a: HTMLAnchorElement;\n};\n\n// HTML props mapping type\ntype HTMLPropsMap = {\n p: React.HTMLAttributes<HTMLParagraphElement>;\n span: React.HTMLAttributes<HTMLSpanElement>;\n h1: React.HTMLAttributes<HTMLHeadingElement>;\n h2: React.HTMLAttributes<HTMLHeadingElement>;\n h3: React.HTMLAttributes<HTMLHeadingElement>;\n h4: React.HTMLAttributes<HTMLHeadingElement>;\n h5: React.HTMLAttributes<HTMLHeadingElement>;\n h6: React.HTMLAttributes<HTMLHeadingElement>;\n strong: React.HTMLAttributes<HTMLElement>;\n em: React.HTMLAttributes<HTMLElement>;\n blockquote: React.HTMLAttributes<HTMLQuoteElement>;\n pre: React.HTMLAttributes<HTMLPreElement>;\n code: React.HTMLAttributes<HTMLElement>;\n small: React.HTMLAttributes<HTMLElement>;\n label: React.LabelHTMLAttributes<HTMLLabelElement>;\n a: Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"color\">;\n};\n\ntype TextColor =\n | \"primary\"\n | \"secondary\"\n | \"white\"\n | \"primary-blue\"\n | \"disabled\"\n | \"danger\"\n | \"inherit\"\n | \"primary-100\";\n\nconst HEADING_ELEMENT_MAP: Record<string, TextElement> = {\n xl: \"h1\",\n lg: \"h1\",\n md: \"h2\",\n sm: \"h3\",\n xs: \"h4\"\n};\n\nconst getElementFromVariant = (variant: TypographyKey): TextElement => {\n const [category, size] = variant.split(\"-\");\n\n if (category === \"heading\") {\n return HEADING_ELEMENT_MAP[size] || \"p\";\n }\n\n if (category === \"label\") {\n return \"label\";\n }\n\n return \"p\";\n};\n\ntype Weight = \"light\" | \"regular\" | \"semibold\" | \"bold\";\n\nconst fontWeight: Record<Weight, string> = {\n light: \"font-light\",\n regular: \"font-regular\",\n semibold: \"font-semibold\",\n bold: \"font-bold\"\n};\n\ntype ResponsiveVariant = TypographyKey | `${Breakpoint}:${TypographyKey}`;\n\ntype TypographyCategory = keyof Typography;\ntype TypographyValue<T extends TypographyCategory> = Extract<\n keyof Typography[T],\n string | number | bigint | boolean | null | undefined\n>;\ntype TypographyKey = {\n [T in TypographyCategory]: `${T}-${TypographyValue<T>}`;\n}[TypographyCategory];\n\n// Update TextProps to use ResponsiveVariant\nexport type TextProps<T extends TextElement = \"p\"> = {\n variant?: ResponsiveVariant | ResponsiveVariant[];\n color?: TextColor;\n as?: T;\n className?: string;\n children: React.ReactNode;\n weight?: Weight;\n} & HTMLPropsMap[T];\n\n// Add helper function to process variants\nconst processVariants = (\n variants: ResponsiveVariant | ResponsiveVariant[] | undefined\n): string => {\n if (!variants) return \"text-body-default\";\n\n const variantArray = Array.isArray(variants) ? variants : [variants];\n\n return variantArray\n .map((variant) => {\n if (variant.includes(\":\")) {\n const [breakpoint, typographyClass] = variant.split(\":\");\n return `${breakpoint}:text-${typographyClass}`;\n }\n return `text-${variant}`;\n })\n .join(\" \");\n};\n\nexport const Text = React.forwardRef(\n <T extends TextElement = \"p\">(\n {\n variant = \"body-default\",\n color = \"primary\",\n as,\n className,\n children,\n weight,\n ...props\n }: TextProps<T>,\n ref: React.ForwardedRef<HTMLElementByTag[T]>\n ) => {\n // Process typography classes with breakpoints\n const typographyClasses = processVariants(variant);\n\n // Get color styles using Tailwind classes that reference CSS variables\n const colorClasses = color === \"inherit\" ? \"text-inherit\" : `text-${color}`;\n\n const suggestedElement = React.useMemo(() => {\n const baseVariant =\n typeof variant === \"string\"\n ? variant.split(\":\").pop()!\n : Array.isArray(variant)\n ? variant[0].split(\":\").pop()!\n : \"body-default\";\n return getElementFromVariant(baseVariant as TypographyKey);\n }, [variant]);\n\n const Component = (as || suggestedElement) as T;\n\n return (\n // @ts-expect-error TODO: figure this out\n <Component\n ref={ref}\n className={`\n font-sans antialiased\n ${typographyClasses}\n ${colorClasses}\n ${weight && `!${fontWeight[weight]}`}\n ${className}\n `}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\n\nText.displayName = \"Text\";\n","import type { IconName } from \"@deckai/icons\";\nimport * as React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { focusRingStylesCoerced } from \"../utils/tailwind\";\nimport type { IconProps } from \"./Icon\";\nimport { Icon } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type InputProps = {\n className?: string;\n end?: React.ReactNode;\n /** renders an icon in the end slot */\n iconName?: IconName;\n /** Label text for the input */\n label?: string;\n /** Additional classes for the label */\n labelClassName?: string;\n /** Forces the focus ring to show regardless of focus state */\n forceShowFocusRing?: boolean;\n /** Error state for the input */\n error?: boolean;\n /** Error message to display below the input */\n errorMessage?: string;\n /** Helper text displayed below the input */\n helperText?: string;\n /** Character count display */\n showCharacterCount?: boolean;\n /** Maximum number of characters */\n maxLength?: number;\n} & React.InputHTMLAttributes<HTMLInputElement> &\n Pick<IconProps, \"color\" | \"size\" | \"title\">;\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n end,\n iconName,\n color,\n size,\n title,\n label,\n labelClassName,\n id,\n children,\n forceShowFocusRing,\n error,\n errorMessage,\n helperText,\n showCharacterCount,\n maxLength,\n value,\n defaultValue,\n onChange,\n disabled,\n ...props\n },\n ref\n ) => {\n const [currentValue, setCurrentValue] = React.useState(\n value?.toString() || defaultValue?.toString() || \"\"\n );\n\n // Update internal value when prop changes\n React.useEffect(() => {\n if (value !== undefined) {\n setCurrentValue(value?.toString() || \"\");\n }\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setCurrentValue(newValue);\n onChange?.(e);\n };\n\n const characterCount = currentValue.length;\n const showCount = showCharacterCount || !!maxLength;\n\n return (\n <div className=\"gap-1 flex flex-col\">\n {label && (\n <Text\n variant=\"label-default\"\n htmlFor={id}\n as=\"label\"\n color={error ? \"danger\" : \"primary\"}\n className={cn(labelClassName)}\n >\n {label}\n </Text>\n )}\n <div\n className={cn(\n \"relative flex flex-col gap-2 w-full rounded-lg border bg-background-0 px-3 md:py-3 py-2 text-secondary transition-colors duration-150\",\n !error && !forceShowFocusRing && \"border-secondary-50\",\n error && \"border-tertiary-10\",\n disabled && \"cursor-not-allowed opacity-50\",\n \"focus-within:ring-2 focus-within:ring-primary-100\",\n forceShowFocusRing && focusRingStylesCoerced\n )}\n >\n <div className=\"flex relative\">\n <input\n ref={ref}\n id={id}\n className={cn(\n \"font-sans text-sm flex w-full bg-background-0 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-secondary text-primary disabled:cursor-not-allowed focus:outline-none rounded-lg\",\n end && \"pr-10\",\n className\n )}\n value={currentValue}\n maxLength={maxLength}\n onChange={handleChange}\n aria-invalid={error}\n disabled={disabled}\n {...props}\n />\n {(end || iconName) && (\n <div className=\"absolute inset-y-0 right-0 flex items-center\">\n {iconName ? (\n <Icon\n name={iconName}\n color={error ? \"danger\" : \"secondary\"}\n size={size}\n title={title}\n />\n ) : (\n end\n )}\n </div>\n )}\n </div>\n {children}\n </div>\n <div className=\"flex justify-between gap-2\">\n {(error && errorMessage) || helperText ? (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"mt-1\"\n >\n {error ? errorMessage : helperText}\n </Text>\n ) : null}\n {showCount && (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"text-right mt-1\"\n >\n <Text variant=\"body-xxs\" as=\"span\" className=\"font-bold\">\n {characterCount}\n </Text>\n {maxLength && `/${maxLength}`} characters\n </Text>\n )}\n </div>\n </div>\n );\n }\n);\n","import type { KeyboardEvent } from \"react\";\nimport React, { forwardRef } from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Input } from \"./Input\";\nimport type { InputProps } from \"./Input\";\n\nexport type AutocompleteInputProps = {\n value: string | undefined;\n suggestion: string;\n onChange: (value: string) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;\n \"aria-controls\"?: string;\n \"aria-activedescendant\"?: string;\n \"aria-autocomplete\"?: \"none\" | \"inline\" | \"list\" | \"both\";\n} & Omit<InputProps, \"value\" | \"onChange\" | \"onKeyDown\">;\n\nexport const AutocompleteInput = forwardRef<\n HTMLInputElement,\n AutocompleteInputProps\n>(\n (\n {\n value,\n suggestion,\n onChange,\n onKeyDown,\n className,\n \"aria-controls\": ariaControls,\n \"aria-activedescendant\": ariaActiveDescendant,\n \"aria-autocomplete\": ariaAutocomplete,\n ...props\n },\n ref\n ) => {\n return (\n <div className=\"relative w-full\">\n <Input\n ref={ref}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={onKeyDown}\n className={cn(\"bg-transparent\", className)}\n aria-controls={ariaControls}\n aria-activedescendant={ariaActiveDescendant}\n aria-autocomplete={ariaAutocomplete}\n {...props}\n />\n {suggestion && value && (\n <div className=\"absolute inset-0 top-6 flex items-center px-3 md:py-3 py-2 text-secondary opacity-40 pointer-events-none text-sm\">\n {value}\n {suggestion.slice(value.length)}\n </div>\n )}\n </div>\n );\n }\n);\n\nAutocompleteInput.displayName = \"AutocompleteInput\";\n","import type { KeyboardEvent } from \"react\";\nimport React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Badge } from \"./Badge\";\nimport { Text } from \"./Text\";\nimport { Tooltip } from \"./Tooltip\";\n\nexport type OptionProps = {\n label: React.ReactNode;\n value: string;\n /** Optional color override for specific items like \"Logout\" in red */\n color?: \"default\" | \"danger\";\n /** Optional disabled state */\n disabled?: boolean;\n onChange?: (value: string) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLButtonElement>) => void;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n selected?: boolean;\n className?: string;\n /** ID for accessibility */\n id?: string;\n /** ARIA role */\n role?: string;\n /** ARIA selected state */\n \"aria-selected\"?: boolean;\n /** Current search value for highlighting matches */\n searchValue?: string;\n /** Optional tooltip content */\n tooltip?: React.ReactNode;\n onClick?: () => void;\n badge?: React.ReactNode;\n};\n\nfunction HighlightedText({\n text,\n highlight\n}: {\n text: string;\n highlight: string;\n}) {\n if (!highlight) return <>{text}</>;\n\n const parts = text.split(new RegExp(`(${highlight})`, \"i\"));\n return (\n <>\n {parts.map((part, i) =>\n part.toLowerCase() === highlight.toLowerCase() ? (\n <span key={i} className=\"font-bold\">\n {part}\n </span>\n ) : (\n part\n )\n )}\n </>\n );\n}\n\nexport const Option = React.forwardRef<HTMLButtonElement, OptionProps>(\n (\n {\n value,\n label,\n onChange,\n onKeyDown,\n onMouseEnter,\n onMouseLeave,\n selected,\n color,\n disabled,\n className,\n id,\n role,\n \"aria-selected\": ariaSelected,\n searchValue = \"\",\n tooltip,\n onClick,\n badge\n },\n ref\n ) => {\n const content = (\n <button\n ref={ref}\n type=\"button\"\n id={id}\n role={role}\n aria-selected={ariaSelected}\n disabled={disabled}\n className={cn(\n \"relative w-full text-left px-2 py-1.5 text-sm rounded outline-none\",\n \"cursor-pointer hover:bg-gray-100\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n selected && \"bg-gray-100\",\n \"flex items-center gap-2\",\n className\n )}\n onClick={() => {\n onChange?.(value);\n onClick?.();\n }}\n onKeyDown={onKeyDown}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <Text\n variant=\"body-default-medium\"\n color={color === \"danger\" ? \"danger\" : \"inherit\"}\n >\n {typeof label === \"string\" ? (\n <HighlightedText text={label} highlight={searchValue} />\n ) : (\n label\n )}\n </Text>\n {badge && <Badge>{badge}</Badge>}\n </button>\n );\n return tooltip ? <Tooltip content={tooltip}>{content}</Tooltip> : content;\n }\n);\n","import type { IconName } from \"@deckai/icons\";\nimport * as React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\nimport { Text } from \"./Text\";\n\nexport type BadgeProps = {\n variant?: \"pink\" | \"orange\" | \"green\" | \"purple\";\n iconName?: IconName;\n} & React.HTMLAttributes<HTMLSpanElement>;\n\nconst variants = {\n pink: \"bg-tertiary-5\",\n orange: \"bg-tertiary-15\",\n green: \"bg-tertiary-25\",\n purple: \"bg-secondary-300\"\n};\n\nconst stringToVariant = (str: string): keyof typeof variants => {\n const variantKeys = Object.keys(variants) as Array<keyof typeof variants>;\n // Let's log some values to understand what's happening\n const hash = str\n .split(\"\")\n .reduce((acc, char) => char.charCodeAt(0) + ((acc << 5) - acc), 0);\n\n const index = Math.abs(hash) % variantKeys.length;\n const selectedVariant = variantKeys[index];\n\n return selectedVariant;\n};\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, iconName, children, ...props }, ref) => {\n const finalVariant =\n variant ||\n (typeof children === \"string\" ? stringToVariant(children) : \"pink\");\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex items-center gap-2\",\n \"rounded px-2 py-1.5\",\n \"text-sm font-medium\",\n variants[finalVariant],\n className\n )}\n {...props}\n >\n {iconName && <Icon size={16} name={iconName} />}\n <Text variant=\"body-xxs-semibold\" className=\"mt-0.5\">\n {children}\n </Text>\n </span>\n );\n }\n);\n\nBadge.displayName = \"Badge\";\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport * as React from \"react\";\nimport { useCallback, useState } from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Text } from \"./Text\";\nexport interface TooltipProps {\n content: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n className?: string;\n delayDuration?: number;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Duration in ms for long press on mobile devices */\n longPressDuration?: number;\n}\n\nexport function Tooltip({\n content,\n children,\n side = \"bottom\",\n align = \"center\",\n className,\n delayDuration = 200,\n defaultOpen,\n open: controlledOpen,\n onOpenChange,\n longPressDuration = 500\n}: TooltipProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen || false);\n let longPressTimer: Timer | null = null;\n\n const open = controlledOpen ?? isOpen;\n const handleOpenChange = useCallback(\n (newOpen: boolean) => {\n if (!controlledOpen) {\n setIsOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n },\n [controlledOpen, onOpenChange]\n );\n\n const handleTouchStart = useCallback(() => {\n const timer = setTimeout(() => {\n handleOpenChange(true);\n }, longPressDuration);\n longPressTimer = timer;\n }, [handleOpenChange, longPressDuration]);\n\n const handleTouchEnd = useCallback(() => {\n if (longPressTimer) {\n clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n // Keep tooltip open for a brief moment after touch\n setTimeout(() => handleOpenChange(false), 1500);\n }, [longPressTimer, handleOpenChange]);\n\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <TooltipPrimitive.Trigger asChild>\n <span\n tabIndex={0}\n onTouchStart={handleTouchStart}\n onTouchEnd={handleTouchEnd}\n onTouchCancel={handleTouchEnd}\n >\n {children}\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={side}\n align={align}\n sideOffset={4}\n className={cn(\n \"z-50 overflow-hidden rounded-lg\",\n \"bg-primary px-3 py-1.5\",\n \"text-xs text-white\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"data-[side=top]:slide-in-from-bottom-2\",\n \"select-none\",\n \"max-w-60\",\n \"touch-none\", // Prevent touch events from interfering with scrolling\n className\n )}\n >\n {typeof content === \"string\" ? (\n <Text variant=\"body-default-medium\" color=\"white\">\n {content}\n </Text>\n ) : (\n content\n )}\n <TooltipPrimitive.Arrow\n className=\"fill-text-primary\"\n width={10}\n height={5}\n />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n}\n","import type { HTMLAttributes } from \"react\";\nimport React, { useCallback, useState } from \"react\";\n\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\nimport type { PressableProps } from \"./Pressable\";\nimport { Pressable } from \"./Pressable\";\nimport { Text } from \"./Text\";\n\nexport type TagProps = {\n children: React.ReactNode;\n padded?: boolean;\n color?: \"primary\" | \"text\";\n onClose?: () => void;\n} & HTMLAttributes<HTMLDivElement> &\n PressableProps;\n\nexport function Tag({\n children,\n color = \"primary\",\n className,\n onClose,\n ...pressableProps\n}: TagProps) {\n const [isHovered, setIsHovered] = useState(false);\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n const content = (\n <div\n className={cn(\n \"flex gap-2\",\n onClose\n ? \"justify-between items-center max-w-fit\"\n : \"items-center justify-center\",\n \"hover:bg-primary-100 rounded bg-secondary-400 px-2 py-1 sm:px-3 sm:py-1.5 h-min hover:text-white\",\n color === \"primary\" ? \"text-primary-100\" : \"text-primary\",\n className\n )}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {typeof children === \"string\" ? (\n <Text\n color=\"inherit\"\n variant={[\"md:body-default-medium\", \"body-xxs-medium\"]}\n className=\"truncate pt-0.5\"\n >\n {children}\n </Text>\n ) : (\n children\n )}\n {onClose && (\n <Pressable\n {...pressableProps}\n onClick={onClose}\n className=\"flex items-center justify-center\"\n >\n <Icon\n name=\"close\"\n size={12}\n color={isHovered ? \"white\" : \"primaryBlue\"}\n />\n </Pressable>\n )}\n </div>\n );\n\n return onClose ? (\n content\n ) : (\n <Pressable {...pressableProps}>{content}</Pressable>\n );\n}\n","import type { ButtonHTMLAttributes } from \"react\";\nimport React from \"react\";\n\nimport { cn } from \"../utils\";\nimport { focusRingStyles } from \"../utils/tailwind\";\n\nexport type PressableProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Pressable = React.forwardRef<HTMLButtonElement, PressableProps>(\n ({ children, type = \"button\", className, disabled, ...props }, ref) => (\n <button\n ref={ref}\n type={type}\n disabled={disabled}\n className={cn(\n \"appearance-none hover:opacity-80 transition-all active:scale-95\",\n focusRingStyles,\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n);\n\nPressable.displayName = \"Pressable\";\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport type { KeyboardEvent } from \"react\";\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from \"react\";\n\nimport { cn } from \"../utils\";\nimport { AutocompleteInput } from \"./AutocompleteInput\";\nimport { Icon } from \"./Icon\";\nimport { Input } from \"./Input\";\nimport type { OptionProps } from \"./Option\";\nimport { Option } from \"./Option\";\nimport { Tag } from \"./Tag\";\nimport { Text } from \"./Text\";\n\nexport type OptionGroup = {\n label: string;\n options: OptionProps[];\n};\n\nexport type MultiSelectComboboxProps = {\n /** Options can be either a flat array or grouped */\n options: OptionProps[] | OptionGroup[];\n /** Currently selected values */\n selectedValues: string[];\n /** Callback when selection changes */\n onSelectionChange: (values: string[]) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Additional classes for the container */\n className?: string;\n /** Label text for the combobox */\n label?: string;\n /** Additional classes for the label */\n labelClassName?: string;\n /** ID for accessibility */\n id?: string;\n /** Maximum number of selections allowed */\n maxSelections?: number;\n /** Whether the combobox is disabled */\n disabled?: boolean;\n /** Message to show when no options are available */\n noOptionsMessage?: string;\n /** Loading state for async options */\n loading?: boolean;\n /** Error state for the combobox */\n error?: boolean;\n /** Error message to display */\n errorMessage?: string;\n /** Helper text displayed below the combobox */\n helperText?: string;\n /** Optional container for the portal */\n container?: HTMLElement | null;\n /** Whether to enable autocomplete functionality */\n autocomplete?: boolean;\n};\n\nexport function MultiSelectCombobox({\n options,\n selectedValues,\n onSelectionChange,\n placeholder = \"Select items...\",\n className,\n label,\n labelClassName,\n id,\n maxSelections,\n disabled,\n noOptionsMessage,\n loading,\n error,\n errorMessage,\n helperText,\n container,\n autocomplete = false\n}: MultiSelectComboboxProps) {\n const [open, setOpen] = useState(false);\n const [searchValue, setSearchValue] = useState(\"\");\n const [expandedGroups, setExpandedGroups] = useState<Record<string, boolean>>(\n {}\n );\n const [highlightedIndex, setHighlightedIndex] = useState<number>(-1);\n const [hoveredIndex, setHoveredIndex] = useState<number>(-1);\n const listRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const isGrouped = useMemo(\n () => options.length > 0 && \"options\" in options[0],\n [options]\n );\n\n const flatOptions = useMemo(() => {\n if (!options.length) return [];\n if (!isGrouped) return options as OptionProps[];\n return (options as OptionGroup[]).reduce<OptionProps[]>(\n (acc, group) => [...acc, ...group.options],\n []\n );\n }, [isGrouped, options]);\n\n const selectedOptions = useMemo(\n () => flatOptions.filter((option) => selectedValues.includes(option.value)),\n [flatOptions, selectedValues]\n );\n\n const isMaxSelected = useMemo(\n () => maxSelections !== undefined && selectedValues.length >= maxSelections,\n [maxSelections, selectedValues]\n );\n\n const visibleOptions = useMemo(() => {\n return flatOptions.filter((option) => {\n // First, check if the option is already selected\n if (selectedValues.includes(option.value)) {\n return false;\n }\n // Then check if max selections is reached\n if (isMaxSelected) {\n return false;\n }\n // Then apply search filter\n return searchValue && typeof option.label === \"string\"\n ? option.label.toLowerCase().includes(searchValue.toLowerCase())\n : true;\n });\n }, [flatOptions, searchValue, selectedValues, isMaxSelected]);\n\n const filteredGroups = useMemo(() => {\n if (!isGrouped) {\n return visibleOptions.length > 0\n ? [{ label: \"\", options: visibleOptions }]\n : [];\n }\n\n return (options as OptionGroup[])\n .map((group) => ({\n ...group,\n options: group.options.filter((option) => {\n // First, check if the option is already selected\n if (selectedValues.includes(option.value)) {\n return false;\n }\n // Then check if max selections is reached\n if (isMaxSelected) {\n return false;\n }\n // Then apply search filter\n return searchValue && typeof option.label === \"string\"\n ? option.label.toLowerCase().includes(searchValue.toLowerCase())\n : true;\n })\n }))\n .filter((group) => group.options.length > 0);\n }, [\n isGrouped,\n options,\n searchValue,\n selectedValues,\n visibleOptions,\n isMaxSelected\n ]);\n\n const handleOptionSelect = useCallback(\n (optionValue: string) => {\n const isSelected = selectedValues.includes(optionValue);\n if (isSelected) {\n onSelectionChange(selectedValues.filter((v) => v !== optionValue));\n } else if (!isMaxSelected) {\n onSelectionChange([...selectedValues, optionValue]);\n }\n if (inputRef.current) {\n inputRef.current.focus({ preventScroll: true });\n }\n },\n [selectedValues, onSelectionChange, isMaxSelected]\n );\n\n const toggleGroup = useCallback((groupLabel: string) => {\n setExpandedGroups((prev) => ({\n ...prev,\n [groupLabel]: !prev[groupLabel]\n }));\n }, []);\n\n const suggestion = useMemo(() => {\n if (!autocomplete || !searchValue || !open) return \"\";\n const matchingOption = visibleOptions.find(\n (opt) =>\n typeof opt.label === \"string\" &&\n opt.label.toLowerCase().startsWith(searchValue.toLowerCase()) &&\n opt.label.toLowerCase() !== searchValue.toLowerCase() &&\n !selectedValues.includes(opt.value)\n );\n return matchingOption?.label?.toString() || \"\";\n }, [autocomplete, searchValue, visibleOptions, open, selectedValues]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n if (event.altKey) {\n setOpen(true);\n } else {\n if (!open) {\n setOpen(true);\n setHighlightedIndex(0);\n } else {\n setHighlightedIndex((prev) =>\n prev < visibleOptions.length - 1 ? prev + 1 : 0\n );\n }\n }\n break;\n\n case \"ArrowUp\":\n event.preventDefault();\n if (event.altKey) {\n setOpen(false);\n } else {\n if (!open) {\n setOpen(true);\n setHighlightedIndex(visibleOptions.length - 1);\n } else {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : visibleOptions.length - 1\n );\n }\n }\n break;\n\n case \"PageUp\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex((prev) => Math.max(0, prev - 10));\n }\n break;\n\n case \"PageDown\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex((prev) =>\n Math.min(visibleOptions.length - 1, prev + 10)\n );\n }\n break;\n\n case \"Home\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex(0);\n }\n break;\n\n case \"End\":\n event.preventDefault();\n if (open) {\n setHighlightedIndex(visibleOptions.length - 1);\n }\n break;\n\n case \"Enter\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionSelect(visibleOptions[highlightedIndex].value);\n } else if (autocomplete && suggestion) {\n const matchingOption = visibleOptions.find(\n (opt) =>\n typeof opt.label === \"string\" &&\n opt.label.toLowerCase().startsWith(searchValue.toLowerCase()) &&\n !selectedValues.includes(opt.value)\n );\n if (matchingOption) {\n handleOptionSelect(matchingOption.value);\n }\n }\n break;\n\n case \"Tab\":\n if (!open) {\n event.preventDefault();\n setOpen(true);\n setHighlightedIndex(0);\n } else if (\n highlightedIndex >= 0 &&\n visibleOptions[highlightedIndex]\n ) {\n event.preventDefault();\n handleOptionSelect(visibleOptions[highlightedIndex].value);\n }\n break;\n\n case \"Escape\":\n event.preventDefault();\n setOpen(false);\n setSearchValue(\"\");\n break;\n }\n },\n [\n open,\n highlightedIndex,\n visibleOptions,\n handleOptionSelect,\n autocomplete,\n suggestion,\n searchValue,\n selectedValues\n ]\n );\n\n const handleOptionKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n setHighlightedIndex((prev) =>\n prev < visibleOptions.length - 1 ? prev + 1 : 0\n );\n break;\n\n case \"ArrowUp\":\n event.preventDefault();\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : visibleOptions.length - 1\n );\n break;\n\n case \"Enter\":\n case \"Space\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionSelect(visibleOptions[highlightedIndex].value);\n }\n break;\n\n case \"Escape\":\n event.preventDefault();\n setOpen(false);\n inputRef.current?.focus();\n break;\n\n case \"Tab\":\n event.preventDefault();\n if (highlightedIndex >= 0 && visibleOptions[highlightedIndex]) {\n handleOptionSelect(visibleOptions[highlightedIndex].value);\n }\n break;\n }\n },\n [highlightedIndex, visibleOptions, handleOptionSelect]\n );\n\n // Keep input focused when dropdown is open\n useEffect(() => {\n if (open) {\n const input = inputRef.current;\n if (input) {\n input.focus({ preventScroll: true });\n // Move cursor to end of text\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }\n }\n }, [open]);\n\n // Reset highlighted index when dropdown closes\n useEffect(() => {\n if (!open) {\n setHighlightedIndex(-1);\n }\n }, [open]);\n\n // Scroll highlighted option into view\n useEffect(() => {\n if (open && highlightedIndex >= 0 && listRef.current) {\n const highlightedOption = listRef.current.querySelector(\n `[id=\"${id}-option-${highlightedIndex}\"]`\n ) as HTMLElement;\n\n if (highlightedOption) {\n highlightedOption.scrollIntoView({\n block: \"nearest\",\n behavior: \"smooth\"\n });\n }\n }\n }, [highlightedIndex, open, id]);\n\n // Set initial highlight when opening dropdown\n useEffect(() => {\n if (open && highlightedIndex === -1) {\n setHighlightedIndex(0);\n }\n }, [open, highlightedIndex]);\n\n // Initialize expanded state for all groups\n useEffect(() => {\n if (isGrouped) {\n const initialState = (options as OptionGroup[]).reduce<\n Record<string, boolean>\n >(\n (acc, group) => ({\n ...acc,\n [group.label]: true\n }),\n {}\n );\n setExpandedGroups(initialState);\n }\n }, [isGrouped, options]);\n\n return (\n <div className={cn(\"flex flex-col gap-2\", className)}>\n {label && (\n <Text\n variant=\"label-default\"\n htmlFor={id}\n as=\"label\"\n color={error ? \"danger\" : \"primary\"}\n className={cn(labelClassName)}\n >\n {label}\n </Text>\n )}\n <Popover.Root\n open={open && !disabled}\n onOpenChange={(isOpen) => {\n if (!disabled) {\n setOpen(isOpen);\n if (!isOpen) {\n setSearchValue(\"\");\n setHighlightedIndex(-1);\n }\n }\n }}\n >\n <div className=\"relative w-full font-sans text-secondary\">\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className=\"w-full text-left\"\n disabled={disabled}\n >\n {autocomplete ? (\n <AutocompleteInput\n ref={inputRef}\n id={id}\n placeholder={placeholder}\n value={searchValue}\n suggestion={suggestion}\n onChange={(value) => {\n setSearchValue(value);\n if (!open) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n className=\"flex-1\"\n forceShowFocusRing={open}\n disabled={disabled}\n error={error}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={`${id}-listbox`}\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${id}-option-${highlightedIndex}`\n : undefined\n }\n />\n ) : (\n <Input\n ref={inputRef}\n id={id}\n placeholder={placeholder}\n value={searchValue}\n onChange={(e) => {\n setSearchValue(e.target.value);\n if (!open) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n className=\"flex-1\"\n forceShowFocusRing={open}\n error={error}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={`${id}-listbox`}\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${id}-option-${highlightedIndex}`\n : undefined\n }\n disabled={\n disabled ||\n (!!maxSelections && selectedValues.length >= maxSelections)\n }\n />\n )}\n </button>\n </Popover.Trigger>\n\n <Popover.Portal container={container}>\n <Popover.Content\n className=\"w-[--radix-popover-trigger-width] overflow-y-scroll-auto p-1 bg-background-0 rounded-md shadow-lg border z-[9999] data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out outline-none\"\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n onFocusOutside={(e) => e.preventDefault()}\n onInteractOutside={(e) => {\n e.preventDefault();\n setOpen(false);\n setSearchValue(\"\");\n setHighlightedIndex(-1);\n }}\n >\n <div\n ref={listRef}\n className=\"max-h-60 flex flex-col items-start outline-none\"\n role=\"listbox\"\n id={`${id}-listbox`}\n aria-label={label}\n aria-multiselectable=\"true\"\n aria-busy={loading}\n >\n {loading ? (\n <Text variant=\"label-default\" className=\"text-secondary p-2\">\n Loading...\n </Text>\n ) : visibleOptions.length > 0 ? (\n filteredGroups.map((group, groupIndex) => (\n <Collapsible.Root\n key={group.label || groupIndex}\n className=\"w-full\"\n open={expandedGroups[group.label] ?? true}\n onOpenChange={() =>\n group.label && toggleGroup(group.label)\n }\n >\n {group.label && (\n <Collapsible.Trigger asChild>\n <div\n className=\"w-full flex items-center justify-between px-2 py-1.5 hover:bg-gray-50\"\n tabIndex={-1}\n >\n <Text variant=\"body-default-bold\" color=\"secondary\">\n {group.label}\n </Text>\n <Icon\n name=\"arrow-down\"\n className={cn(\n \"transition-transform\",\n expandedGroups[group.label] && \"rotate-180\"\n )}\n size={16}\n />\n </div>\n </Collapsible.Trigger>\n )}\n <Collapsible.Content className=\"data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up\">\n {group.options.map((option, index) => {\n const optionIndex = visibleOptions.findIndex(\n (opt) => opt.value === option.value\n );\n return (\n <Option\n key={`${groupIndex}-${index}`}\n label={option.label}\n value={option.value}\n onChange={handleOptionSelect}\n onKeyDown={handleOptionKeyDown}\n className=\"pl-4\"\n selected={\n hoveredIndex === optionIndex ||\n (hoveredIndex === -1 &&\n highlightedIndex === optionIndex)\n }\n id={`${id}-option-${optionIndex}`}\n role=\"option\"\n aria-selected={selectedValues.includes(\n option.value\n )}\n searchValue={searchValue}\n onMouseEnter={() => setHoveredIndex(optionIndex)}\n onMouseLeave={() => setHoveredIndex(-1)}\n />\n );\n })}\n </Collapsible.Content>\n </Collapsible.Root>\n ))\n ) : (\n <Text variant=\"label-default\" className=\"text-secondary p-2\">\n {noOptionsMessage || \"No results found\"}\n </Text>\n )}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </div>\n </Popover.Root>\n {selectedOptions.length > 0 && (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex flex-wrap gap-2\">\n {selectedOptions.map((option) => (\n <Tag\n key={option.value}\n onClose={() => handleOptionSelect(option.value)}\n disabled={disabled}\n >\n {option.label}\n </Tag>\n ))}\n </div>\n {isMaxSelected && (\n <Text variant=\"body-xxs\" color=\"secondary\">\n Maximum of {maxSelections} items selected\n </Text>\n )}\n </div>\n )}\n {(error && errorMessage) || helperText ? (\n <Text\n variant=\"body-xxs\"\n color={error ? \"danger\" : \"secondary\"}\n className=\"mt-1\"\n >\n {error ? errorMessage : helperText}\n </Text>\n ) : null}\n </div>\n );\n}\n"]}
|
|
@@ -41,6 +41,6 @@ type MultiSelectComboboxProps = {
|
|
|
41
41
|
/** Whether to enable autocomplete functionality */
|
|
42
42
|
autocomplete?: boolean;
|
|
43
43
|
};
|
|
44
|
-
declare
|
|
44
|
+
declare function MultiSelectCombobox({ options, selectedValues, onSelectionChange, placeholder, className, label, labelClassName, id, maxSelections, disabled, noOptionsMessage, loading, error, errorMessage, helperText, container, autocomplete }: MultiSelectComboboxProps): React__default.JSX.Element;
|
|
45
45
|
|
|
46
46
|
export { MultiSelectCombobox, type MultiSelectComboboxProps, type OptionGroup };
|
|
@@ -41,6 +41,6 @@ type MultiSelectComboboxProps = {
|
|
|
41
41
|
/** Whether to enable autocomplete functionality */
|
|
42
42
|
autocomplete?: boolean;
|
|
43
43
|
};
|
|
44
|
-
declare
|
|
44
|
+
declare function MultiSelectCombobox({ options, selectedValues, onSelectionChange, placeholder, className, label, labelClassName, id, maxSelections, disabled, noOptionsMessage, loading, error, errorMessage, helperText, container, autocomplete }: MultiSelectComboboxProps): React__default.JSX.Element;
|
|
45
45
|
|
|
46
46
|
export { MultiSelectCombobox, type MultiSelectComboboxProps, type OptionGroup };
|