@solace-health/ui 0.10.507 → 0.10.509

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/chunk-2UIICL2U.cjs +2 -0
  2. package/dist/chunk-2UIICL2U.cjs.map +1 -0
  3. package/dist/{chunk-RH56SIYL.cjs → chunk-6LV6REZO.cjs} +2 -2
  4. package/dist/{chunk-RH56SIYL.cjs.map → chunk-6LV6REZO.cjs.map} +1 -1
  5. package/dist/chunk-MQL5R4MD.js +2 -0
  6. package/dist/chunk-MQL5R4MD.js.map +1 -0
  7. package/dist/chunk-MYZ4DUFT.cjs +2 -0
  8. package/dist/chunk-MYZ4DUFT.cjs.map +1 -0
  9. package/dist/chunk-O3OZOSXT.js +2 -0
  10. package/dist/chunk-O3OZOSXT.js.map +1 -0
  11. package/dist/chunk-QJVDJTD4.cjs +2 -0
  12. package/dist/chunk-QJVDJTD4.cjs.map +1 -0
  13. package/dist/{chunk-LNCG5XTP.js → chunk-QVOCV3VP.js} +2 -2
  14. package/dist/{chunk-LNCG5XTP.js.map → chunk-QVOCV3VP.js.map} +1 -1
  15. package/dist/chunk-ZO25Y6HY.js +2 -0
  16. package/dist/chunk-ZO25Y6HY.js.map +1 -0
  17. package/dist/metafile-cjs.json +1 -1
  18. package/dist/metafile-esm.json +1 -1
  19. package/dist/v2/combobox/combobox.cjs +1 -1
  20. package/dist/v2/combobox/combobox.d.ts +8 -5
  21. package/dist/v2/combobox/combobox.js +1 -1
  22. package/dist/v2/combobox/combobox.stories.d.ts +1 -0
  23. package/dist/v2/combobox/dummy-data.cjs +2 -0
  24. package/dist/v2/combobox/dummy-data.cjs.map +1 -0
  25. package/dist/v2/combobox/dummy-data.d.ts +4 -0
  26. package/dist/v2/combobox/dummy-data.js +2 -0
  27. package/dist/v2/combobox/dummy-data.js.map +1 -0
  28. package/dist/v2/index.cjs +1 -1
  29. package/dist/v2/index.js +1 -1
  30. package/dist/v2/input/input.cjs +1 -1
  31. package/dist/v2/input/input.js +1 -1
  32. package/dist/v2/multiselect/multiselect.cjs +1 -1
  33. package/dist/v2/multiselect/multiselect.d.ts +1 -0
  34. package/dist/v2/multiselect/multiselect.js +1 -1
  35. package/dist/v2/switch/switch.cjs +1 -1
  36. package/dist/v2/switch/switch.d.ts +6 -4
  37. package/dist/v2/switch/switch.js +1 -1
  38. package/package.json +1 -1
  39. package/dist/chunk-ESO2MGAY.cjs +0 -2
  40. package/dist/chunk-ESO2MGAY.cjs.map +0 -1
  41. package/dist/chunk-FZ4SG3S6.js +0 -2
  42. package/dist/chunk-FZ4SG3S6.js.map +0 -1
  43. package/dist/chunk-MBKRMANH.cjs +0 -2
  44. package/dist/chunk-MBKRMANH.cjs.map +0 -1
  45. package/dist/chunk-QITLI6MY.cjs +0 -2
  46. package/dist/chunk-QITLI6MY.cjs.map +0 -1
  47. package/dist/chunk-WSS5BEPI.js +0 -2
  48. package/dist/chunk-WSS5BEPI.js.map +0 -1
  49. package/dist/chunk-XRGEQXJG.js +0 -2
  50. package/dist/chunk-XRGEQXJG.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),r=require('@radix-ui/react-switch'),react=require('react'),jsxRuntime=require('react/jsx-runtime');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 r__namespace=/*#__PURE__*/_interopNamespace(r);function x({className:d,showLabels:t=false,onLabel:i="On",offLabel:n="Off",...e}){let[h,m]=react.useState(0),s=react.useRef(null);react.useEffect(()=>{t&&s.current&&m(s.current.offsetWidth);},[t,i,n]);let c=t?Math.max(44,h+34):44;return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs(r__namespace.Root,{"data-slot":"switch",className:chunkQRO22BPZ_cjs.a("peer data-[state=checked]:bg-dark-green focus-visible:border-ring focus-visible:ring-ring/50 relative inline-flex h-6 min-w-11 shrink-0 cursor-pointer items-center rounded-full border border-transparent px-0 shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[state=unchecked]:bg-gray-500",d),style:{width:c},...e,children:[jsxRuntime.jsx(r__namespace.Thumb,{"data-slot":"switch-thumb",className:"bg-background pointer-events-none block size-4 rounded-full ring-0 transition-transform",style:{transform:e.checked?`translateX(${c-22}px)`:"translateX(4px)"},...e}),t&&jsxRuntime.jsx("span",{className:chunkQRO22BPZ_cjs.a("absolute text-base font-bold text-white uppercase transition-all",e.checked?"left-2":"right-2"),children:e.checked?i:n})]}),t&&jsxRuntime.jsx("span",{ref:s,className:"pointer-events-none invisible absolute font-sans text-base font-bold whitespace-nowrap uppercase",children:i.length>n.length?i:n})]})}exports.a=x;//# sourceMappingURL=chunk-2UIICL2U.cjs.map
2
+ //# sourceMappingURL=chunk-2UIICL2U.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/v2/switch/switch.tsx"],"names":["Switch","className","showLabels","onLabel","offLabel","props","labelWidth","setLabelWidth","useState","measureRef","useRef","useEffect","dynamicWidth","jsxs","Fragment","r","cn","jsx"],"mappings":"4gBAWA,SAASA,CAAAA,CAAO,CACd,SAAAC,CAAAA,CAAAA,CACA,UAAAC,CAAAA,CAAAA,CAAa,MACb,OAAAC,CAAAA,CAAAA,CAAU,IACV,CAAA,QAAA,CAAAC,EAAW,KACX,CAAA,GAAGC,CACL,CAAA,CAAgB,CACd,GAAM,CAACC,CAAYC,CAAAA,CAAa,CAAIC,CAAAA,cAAAA,CAAS,CAAC,CAAA,CACxCC,EAAaC,YAAwB,CAAA,IAAI,CAE/CC,CAAAA,eAAAA,CAAU,IAAM,CACVT,CAAAA,EAAcO,CAAW,CAAA,OAAA,EAC3BF,EAAcE,CAAW,CAAA,OAAA,CAAQ,WAAW,EAEhD,EAAG,CAACP,CAAAA,CAAYC,CAASC,CAAAA,CAAQ,CAAC,CAElC,CAAA,IAAMQ,CAAeV,CAAAA,CAAAA,CAAa,KAAK,GAAI,CAAA,EAAA,CAAII,CAAa,CAAA,EAAE,EAAI,EAElE,CAAA,OACEO,eAAAC,CAAAA,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAAD,eAAiB,CAAAE,YAAA,CAAA,IAAA,CAAhB,CACC,WAAU,CAAA,QAAA,CACV,SAAWC,CAAAA,mBAAAA,CACT,oWACAf,CACF,CAAA,CACA,KAAO,CAAA,CAAE,MAAOW,CAAa,CAAA,CAC5B,GAAGP,CAAAA,CAEJ,UAAAY,cAAiB,CAAAF,YAAA,CAAA,KAAA,CAAhB,CACC,WAAA,CAAU,eACV,SAAU,CAAA,yFAAA,CACV,KAAO,CAAA,CACL,UAAWV,CAAM,CAAA,OAAA,CAAU,CAAcO,WAAAA,EAAAA,CAAAA,CAAe,EAAE,CAAQ,GAAA,CAAA,CAAA,iBACpE,CACC,CAAA,GAAGP,CACN,CAAA,CAAA,CACCH,CACCe,EAAAA,cAAAA,CAAC,QACC,SAAWD,CAAAA,mBAAAA,CACT,kEACAX,CAAAA,CAAAA,CAAM,QAAU,QAAW,CAAA,SAC7B,CAEC,CAAA,QAAA,CAAAA,EAAM,OAAUF,CAAAA,CAAAA,CAAUC,CAC7B,CAAA,CAAA,CAAA,CAEJ,EAECF,CACCe,EAAAA,cAAAA,CAAC,MACC,CAAA,CAAA,GAAA,CAAKR,EACL,SAAU,CAAA,kGAAA,CAET,QAAAN,CAAAA,CAAAA,CAAQ,OAASC,CAAS,CAAA,MAAA,CAASD,CAAUC,CAAAA,CAAAA,CAChD,GAEJ,CAEJ","file":"chunk-2UIICL2U.cjs","sourcesContent":["import * as SwitchPrimitive from '@radix-ui/react-switch';\n\nimport { ComponentProps, useEffect, useRef, useState } from 'react';\nimport { cn } from '@/lib/utils';\n\ntype SwitchProps = ComponentProps<typeof SwitchPrimitive.Root> & {\n showLabels?: boolean;\n onLabel?: string;\n offLabel?: string;\n};\n\nfunction Switch({\n className,\n showLabels = false,\n onLabel = 'On',\n offLabel = 'Off',\n ...props\n}: SwitchProps) {\n const [labelWidth, setLabelWidth] = useState(0);\n const measureRef = useRef<HTMLSpanElement>(null);\n\n useEffect(() => {\n if (showLabels && measureRef.current) {\n setLabelWidth(measureRef.current.offsetWidth);\n }\n }, [showLabels, onLabel, offLabel]);\n\n const dynamicWidth = showLabels ? Math.max(44, labelWidth + 34) : 44; // 44px is default width\n\n return (\n <>\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n 'peer data-[state=checked]:bg-dark-green focus-visible:border-ring focus-visible:ring-ring/50 relative inline-flex h-6 min-w-11 shrink-0 cursor-pointer items-center rounded-full border border-transparent px-0 shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[state=unchecked]:bg-gray-500',\n className,\n )}\n style={{ width: dynamicWidth }}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"bg-background pointer-events-none block size-4 rounded-full ring-0 transition-transform\"\n style={{\n transform: props.checked ? `translateX(${dynamicWidth - 22}px)` : 'translateX(4px)',\n }}\n {...props}\n />\n {showLabels && (\n <span\n className={cn(\n 'absolute text-base font-bold text-white uppercase transition-all',\n props.checked ? 'left-2' : 'right-2',\n )}\n >\n {props.checked ? onLabel : offLabel}\n </span>\n )}\n </SwitchPrimitive.Root>\n\n {showLabels && (\n <span\n ref={measureRef}\n className=\"pointer-events-none invisible absolute font-sans text-base font-bold whitespace-nowrap uppercase\"\n >\n {onLabel.length > offLabel.length ? onLabel : offLabel}\n </span>\n )}\n </>\n );\n}\n\nexport { Switch };\n"]}
@@ -23,5 +23,5 @@
23
23
  aria-invalid:ring-destructive/20
24
24
  dark:aria-invalid:ring-destructive/40
25
25
  aria-invalid:border-destructive
26
- `,search:"pr-8"}},defaultVariants:{variant:"default"}}),z=s__namespace.forwardRef(({className:f,variant:t,type:d,wrapperClassName:m=void 0,label:n,helperText:l,charLength:o,value:i,defaultValue:b,onChange:v,id:g,labelProps:h,...x},w)=>{let[y,N]=s.useState(i||b||""),u=g||s__namespace.useId(),c=i!==void 0?i:y,R=String(c).length,I=p=>{i===void 0&&N(p.target.value),v?.(p);};return jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative w-full",m),children:[n&&(typeof n=="string"?jsxRuntime.jsx("label",{htmlFor:u,className:"header-xs text-primary mb-2 block font-bold",...h,children:n}):n),jsxRuntime.jsxs("div",{className:"relative",children:[jsxRuntime.jsx("input",{ref:w,id:u,type:d,"data-slot":"input",className:chunkQRO22BPZ_cjs.a(L({variant:t}),f),value:c,onChange:I,...x}),t==="invalid"&&jsxRuntime.jsx(hi2.HiOutlineExclamationCircle,{size:"1.5rem",className:"text-destructive pointer-events-none absolute top-3 right-2"}),t==="search"&&jsxRuntime.jsx(lu.LuSearch,{size:"1.25rem",className:"text-muted-foreground pointer-events-none absolute top-4 right-3"}),d==="time"&&jsxRuntime.jsx(lu.LuClock4,{size:"1.25rem",className:"text-muted-foreground pointer-events-none absolute top-3.5 right-3"})]}),(l||o)&&jsxRuntime.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsxRuntime.jsx("span",{className:chunkQRO22BPZ_cjs.a("text-sm",t==="invalid"?"text-destructive":"text-secondary"),children:l||""}),o&&jsxRuntime.jsxs("span",{className:chunkQRO22BPZ_cjs.a("text-sm",t==="invalid"?"text-destructive":"text-secondary"),children:[R,"/",o]})]})]})});z.displayName="Input";exports.a=L;exports.b=z;//# sourceMappingURL=chunk-RH56SIYL.cjs.map
27
- //# sourceMappingURL=chunk-RH56SIYL.cjs.map
26
+ `,search:"pr-8"}},defaultVariants:{variant:"default"}}),z=s__namespace.forwardRef(({className:f,variant:t,type:d,wrapperClassName:m=void 0,label:n,helperText:l,charLength:o,value:i,defaultValue:b,onChange:v,id:g,labelProps:h,...x},w)=>{let[y,N]=s.useState(i||b||""),u=g||s__namespace.useId(),c=i!==void 0?i:y,R=String(c).length,I=p=>{i===void 0&&N(p.target.value),v?.(p);};return jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative w-full",m),children:[n&&(typeof n=="string"?jsxRuntime.jsx("label",{htmlFor:u,className:"header-xs text-primary mb-2 block font-bold",...h,children:n}):n),jsxRuntime.jsxs("div",{className:"relative",children:[jsxRuntime.jsx("input",{ref:w,id:u,type:d,"data-slot":"input",className:chunkQRO22BPZ_cjs.a(L({variant:t}),f),value:c,onChange:I,...x}),t==="invalid"&&jsxRuntime.jsx(hi2.HiOutlineExclamationCircle,{size:"1.5rem",className:"text-destructive pointer-events-none absolute top-3 right-2"}),t==="search"&&jsxRuntime.jsx(lu.LuSearch,{size:"1.25rem",className:"text-muted-foreground pointer-events-none absolute top-3.5 right-3"}),d==="time"&&jsxRuntime.jsx(lu.LuClock4,{size:"1.25rem",className:"text-muted-foreground pointer-events-none absolute top-3.5 right-3"})]}),(l||o)&&jsxRuntime.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsxRuntime.jsx("span",{className:chunkQRO22BPZ_cjs.a("text-sm",t==="invalid"?"text-destructive":"text-secondary"),children:l||""}),o&&jsxRuntime.jsxs("span",{className:chunkQRO22BPZ_cjs.a("text-sm",t==="invalid"?"text-destructive":"text-secondary"),children:[R,"/",o]})]})]})});z.displayName="Input";exports.a=L;exports.b=z;//# sourceMappingURL=chunk-6LV6REZO.cjs.map
27
+ //# sourceMappingURL=chunk-6LV6REZO.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/v2/input/input.tsx"],"names":["inputVariants","cva","Input","s","className","variant","type","wrapperClassName","label","helperText","charLength","value","defaultValue","onChange","id","labelProps","props","ref","internalValue","setInternalValue","useState","inputId","currentValue","currentLength","handleChange","e","jsxs","cn","jsx","HiOutlineExclamationCircle","LuSearch","LuClock4"],"mappings":"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","file":"chunk-RH56SIYL.cjs","sourcesContent":["import * as React from 'react';\nimport { ForwardedRef, useState } from 'react';\nimport { cva, VariantProps } from 'class-variance-authority';\nimport { HiOutlineExclamationCircle } from 'react-icons/hi2';\nimport { LuClock4, LuSearch } from 'react-icons/lu';\n\nimport { cn } from '@/lib/utils';\n\nconst inputVariants = cva(\n `\n flex items-center h-12 w-full min-w-0 rounded-md border bg-white px-3 py-3 text-base transition-all outline-none\n dark:bg-input/30 border-input shadow-xs\n placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground\n file:inline-flex file:h-6 file:mr-2 file:border-0 file:text-foreground\n disabled:cursor-not-allowed disabled:opacity-50 disabled:pointer-events-none disabled:bg-gray-200\n focus-visible:ring-ring/50 focus-visible:ring-[3px] \n `,\n {\n variants: {\n variant: {\n default: `\n hover:enabled:border-dark-green \n focus:enabled:border-dark-green\n focus:enabled:shadow-green-300\n focus-within:shadow\n focus-within:shadow-green-300\n focus-visible:border-dark-green \n `,\n invalid: `\n border-destructive\n hover:border-destructive\n focus:border-destructive\n focus:shadow-red-100\n focus-within:shadow\n focus-within:shadow-red-100\n focus-visible:border-destructive\n aria-invalid:ring-destructive/20\n dark:aria-invalid:ring-destructive/40\n aria-invalid:border-destructive \n `,\n search: 'pr-8',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\ntype InputProps = React.ComponentProps<'input'> &\n VariantProps<typeof inputVariants> & {\n wrapperClassName?: string;\n label?: React.ReactNode;\n helperText?: string;\n charLength?: number;\n labelProps?: React.ComponentProps<'label'>;\n };\n\nconst Input = React.forwardRef(\n (\n {\n className,\n variant,\n type,\n wrapperClassName = undefined,\n label,\n helperText,\n charLength,\n value,\n defaultValue,\n onChange,\n id,\n labelProps,\n ...props\n }: InputProps,\n ref?: ForwardedRef<HTMLInputElement>,\n ) => {\n const [internalValue, setInternalValue] = useState((value || defaultValue || '') as string);\n const inputId = id || React.useId();\n\n const currentValue = value !== undefined ? value : internalValue;\n const currentLength = String(currentValue).length;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n onChange?.(e);\n };\n\n return (\n <div className={cn('relative w-full', wrapperClassName)}>\n {label &&\n (typeof label === 'string' ? (\n <label\n htmlFor={inputId}\n className=\"header-xs text-primary mb-2 block font-bold\"\n {...labelProps}\n >\n {label}\n </label>\n ) : (\n label\n ))}\n <div className=\"relative\">\n <input\n ref={ref}\n id={inputId}\n type={type}\n data-slot=\"input\"\n className={cn(inputVariants({ variant }), className)}\n value={currentValue}\n onChange={handleChange}\n {...props}\n />\n {variant === 'invalid' && (\n <HiOutlineExclamationCircle\n size=\"1.5rem\"\n className=\"text-destructive pointer-events-none absolute top-3 right-2\"\n />\n )}\n {variant === 'search' && (\n <LuSearch\n size=\"1.25rem\"\n className=\"text-muted-foreground pointer-events-none absolute top-4 right-3\"\n />\n )}\n {type === 'time' && (\n <LuClock4\n size=\"1.25rem\"\n className=\"text-muted-foreground pointer-events-none absolute top-3.5 right-3\"\n />\n )}\n </div>\n {(helperText || charLength) && (\n <div className=\"mt-2 flex items-center justify-between\">\n <span\n className={cn(\n 'text-sm',\n variant === 'invalid' ? 'text-destructive' : 'text-secondary',\n )}\n >\n {helperText || ''}\n </span>\n {charLength && (\n <span\n className={cn(\n 'text-sm',\n variant === 'invalid' ? 'text-destructive' : 'text-secondary',\n )}\n >\n {currentLength}/{charLength}\n </span>\n )}\n </div>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = 'Input';\n\nexport { Input, inputVariants };\n"]}
1
+ {"version":3,"sources":["../src/v2/input/input.tsx"],"names":["inputVariants","cva","Input","s","className","variant","type","wrapperClassName","label","helperText","charLength","value","defaultValue","onChange","id","labelProps","props","ref","internalValue","setInternalValue","useState","inputId","currentValue","currentLength","handleChange","e","jsxs","cn","jsx","HiOutlineExclamationCircle","LuSearch","LuClock4"],"mappings":"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","file":"chunk-6LV6REZO.cjs","sourcesContent":["import * as React from 'react';\nimport { ForwardedRef, useState } from 'react';\nimport { cva, VariantProps } from 'class-variance-authority';\nimport { HiOutlineExclamationCircle } from 'react-icons/hi2';\nimport { LuClock4, LuSearch } from 'react-icons/lu';\n\nimport { cn } from '@/lib/utils';\n\nconst inputVariants = cva(\n `\n flex items-center h-12 w-full min-w-0 rounded-md border bg-white px-3 py-3 text-base transition-all outline-none\n dark:bg-input/30 border-input shadow-xs\n placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground\n file:inline-flex file:h-6 file:mr-2 file:border-0 file:text-foreground\n disabled:cursor-not-allowed disabled:opacity-50 disabled:pointer-events-none disabled:bg-gray-200\n focus-visible:ring-ring/50 focus-visible:ring-[3px] \n `,\n {\n variants: {\n variant: {\n default: `\n hover:enabled:border-dark-green \n focus:enabled:border-dark-green\n focus:enabled:shadow-green-300\n focus-within:shadow\n focus-within:shadow-green-300\n focus-visible:border-dark-green \n `,\n invalid: `\n border-destructive\n hover:border-destructive\n focus:border-destructive\n focus:shadow-red-100\n focus-within:shadow\n focus-within:shadow-red-100\n focus-visible:border-destructive\n aria-invalid:ring-destructive/20\n dark:aria-invalid:ring-destructive/40\n aria-invalid:border-destructive \n `,\n search: 'pr-8',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\ntype InputProps = React.ComponentProps<'input'> &\n VariantProps<typeof inputVariants> & {\n wrapperClassName?: string;\n label?: React.ReactNode;\n helperText?: string;\n charLength?: number;\n labelProps?: React.ComponentProps<'label'>;\n };\n\nconst Input = React.forwardRef(\n (\n {\n className,\n variant,\n type,\n wrapperClassName = undefined,\n label,\n helperText,\n charLength,\n value,\n defaultValue,\n onChange,\n id,\n labelProps,\n ...props\n }: InputProps,\n ref?: ForwardedRef<HTMLInputElement>,\n ) => {\n const [internalValue, setInternalValue] = useState((value || defaultValue || '') as string);\n const inputId = id || React.useId();\n\n const currentValue = value !== undefined ? value : internalValue;\n const currentLength = String(currentValue).length;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n onChange?.(e);\n };\n\n return (\n <div className={cn('relative w-full', wrapperClassName)}>\n {label &&\n (typeof label === 'string' ? (\n <label\n htmlFor={inputId}\n className=\"header-xs text-primary mb-2 block font-bold\"\n {...labelProps}\n >\n {label}\n </label>\n ) : (\n label\n ))}\n <div className=\"relative\">\n <input\n ref={ref}\n id={inputId}\n type={type}\n data-slot=\"input\"\n className={cn(inputVariants({ variant }), className)}\n value={currentValue}\n onChange={handleChange}\n {...props}\n />\n {variant === 'invalid' && (\n <HiOutlineExclamationCircle\n size=\"1.5rem\"\n className=\"text-destructive pointer-events-none absolute top-3 right-2\"\n />\n )}\n {variant === 'search' && (\n <LuSearch\n size=\"1.25rem\"\n className=\"text-muted-foreground pointer-events-none absolute top-3.5 right-3\"\n />\n )}\n {type === 'time' && (\n <LuClock4\n size=\"1.25rem\"\n className=\"text-muted-foreground pointer-events-none absolute top-3.5 right-3\"\n />\n )}\n </div>\n {(helperText || charLength) && (\n <div className=\"mt-2 flex items-center justify-between\">\n <span\n className={cn(\n 'text-sm',\n variant === 'invalid' ? 'text-destructive' : 'text-secondary',\n )}\n >\n {helperText || ''}\n </span>\n {charLength && (\n <span\n className={cn(\n 'text-sm',\n variant === 'invalid' ? 'text-destructive' : 'text-secondary',\n )}\n >\n {currentLength}/{charLength}\n </span>\n )}\n </div>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = 'Input';\n\nexport { Input, inputVariants };\n"]}
@@ -0,0 +1,2 @@
1
+ import {h,a as a$1,d,f}from'./chunk-XMEBDMUG.js';import {b}from'./chunk-WEGGMVJT.js';import {a}from'./chunk-YTIIAU4W.js';import {useCommandState,Command}from'cmdk';import {LuX,LuChevronUp,LuChevronDown,LuCheck}from'react-icons/lu';import {forwardRef,useRef,useState,useImperativeHandle,useCallback,useEffect}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';function he(r,i){let[l,f]=useState(r);return useEffect(()=>{let s=setTimeout(()=>f(r),i||500);return ()=>{clearTimeout(s);}},[r,i]),l}function D(r,i){if(r.length===0)return {};if(!i)return {"":r};let l={};return r.forEach(f=>{let s=f[i]||"";l[s]||(l[s]=[]),l[s].push(f);}),l}var Q=forwardRef(({className:r,...i},l)=>useCommandState(s=>s.filtered.count===0)?jsx("div",{ref:l,className:a("py-6 text-center text-sm",r),role:"presentation",...i}):null);Q.displayName="CommandEmpty";var we=forwardRef(({value:r,onChange:i,placeholder:l,defaultOptions:f$1=[],options:s,delay:Z,onSearch:b$1,onSearchSync:K,loadingIndicator:_,emptyIndicator:k,maxSelected:S=0,onMaxSelected:j,hidePlaceholderWhenSelected:F=true,disabled:g,groupBy:v,className:$,badgeWrapperClassName:ee,badgeClassName:te,getBadgeClassName:ne=()=>"",selectFirstItem:oe=true,triggerSearchOnFocus:M=false,commandProps:m,inputProps:O},re)=>{let d$1=useRef(null),[c,I]=useState(false),[ae,P]=useState(false),[se,W]=useState(false),V=useRef(null),[n,H]=useState(r||[]),[E,G]=useState(D(f$1,v)),[z,U]=useState(""),x=he(z,Z||500),ie=c?LuChevronUp:LuChevronDown;useImperativeHandle(re,()=>({selectedValue:[...n],input:d$1.current,focus:()=>d$1?.current?.focus(),reset:()=>H([])}),[n]);let C=e=>{V.current&&!V.current.contains(e.target)&&d$1.current&&!d$1.current.contains(e.target)&&(I(false),d$1.current.blur());},L=useCallback(e=>{let o=n.some(p=>p.value===e.value),t=!o&&!!S&&n.length>=S;U("");let h=o?n.filter(p=>p.value!==e.value):[...n,e];t&&(h=h.slice(1)),H(h),i?.(h),t&&j?.(n.length);},[S,i,j,n]),le=useCallback(e=>{let o=d$1.current;if(o){if((e.key==="Delete"||e.key==="Backspace")&&o.value===""&&n.length>0){let t=n[n.length-1];t&&!t.fixed&&L(t);}e.key==="Escape"&&o.blur();}},[L,n]);useEffect(()=>(c?(document.addEventListener("mousedown",C),document.addEventListener("touchend",C)):(document.removeEventListener("mousedown",C),document.removeEventListener("touchend",C)),()=>{document.removeEventListener("mousedown",C),document.removeEventListener("touchend",C);}),[c]),useEffect(()=>{r&&H(r);},[r]),useEffect(()=>{if(!s||b$1)return;let e=D(s||[],v);Object.entries(e).length!==Object.entries(E).length&&G(e);},[f$1,s,v,b$1,E]),useEffect(()=>{let e=()=>{let t=K?.(x);G(D(t||[],v));};(async()=>{!K||!c||(M&&e(),x&&e());})();},[x,v,c,M]),useEffect(()=>{let e=async()=>{W(true);let t=await b$1?.(x);G(D(t||[],v)),W(false);};(async()=>{!b$1||!c||(M&&await e(),x&&await e());})();},[x,v,c,M]);let ue=useCallback(()=>{if(k)return b$1&&Object.keys(E).length===0?jsx(h,{value:"-",disabled:true,children:k}):jsx(Q,{children:k})},[k,b$1,E]),de=useCallback(()=>{if(m?.filter)return m.filter},[m?.filter]);return jsxs(a$1,{ref:V,...m,onKeyDown:e=>{le(e),m?.onKeyDown?.(e);},className:a("h-auto overflow-visible bg-transparent",m?.className),shouldFilter:m?.shouldFilter!==void 0?m.shouldFilter:!b$1,filter:de(),children:[jsxs("button",{type:"button",className:a("items-center justify-between gap-2 p-3 whitespace-nowrap","border-input rounded-md border bg-white",c&&"border-dark-green","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40","disabled:cursor-not-allowed disabled:bg-gray-200","hover:not-disabled:border-dark-green","transition-all outline-none",{"cursor-text":!g&&n.length!==0},"flex w-full",$),onClick:()=>{g||d$1?.current?.focus();},disabled:g,children:[jsxs("div",{className:a("relative flex gap-1 overflow-auto [&::-webkit-scrollbar]:h-0",ee),children:[n.map(e=>jsxs(b,{className:a("data-[disabled]:text-secondary data-[disabled]:bg-transparent","data-[fixed]:bg-muted-foreground data-[fixed]:text-muted data-[fixed]:hover:bg-muted-foreground",te,ne(e),"py-0"),color:"green",rounded:true,"data-fixed":e.fixed,"data-disabled":g||void 0,children:[e?.selectedLabel??e.label,jsx("button",{type:"button",className:a("ring-offset-background focus:ring-ring ml-1 rounded-full outline-none focus:ring-2 focus:ring-offset-2",(g||e.fixed)&&"hidden"),onKeyDown:o=>{o.key==="Enter"&&L(e);},onMouseDown:o=>{o.preventDefault(),o.stopPropagation();},onClick:()=>L(e),children:jsx(LuX,{className:"text-muted-foreground hover:text-foreground h-3 w-3"})})]},e.value)),jsx(Command.Input,{...O,ref:d$1,value:z,disabled:g,onValueChange:e=>{U(e),O?.onValueChange?.(e);},onBlur:e=>{ae||I(false),O?.onBlur?.(e);},onFocus:e=>{I(true),O?.onFocus?.(e);},placeholder:F&&n.length!==0?"":l,className:a("placeholder:text-secondary flex-1 self-baseline bg-transparent outline-none",{"w-full":F,"ml-1":n.length!==0},O?.className)})]}),jsx(ie,{className:a("size-5 min-w-5 cursor-pointer",g&&"text-gray-600")})]}),jsx("div",{className:"relative",children:c&&jsx(d,{className:"bg-popover text-popover-foreground animate-in absolute top-1 z-10 w-full rounded-md border shadow-xs outline-none",onMouseLeave:()=>{P(false);},onMouseEnter:()=>{P(true);},onMouseUp:()=>{d$1?.current?.focus();},children:se?_:jsxs(Fragment,{children:[ue(),!oe&&jsx(h,{value:"-",className:"hidden"}),Object.entries(E).map(([e,o])=>jsx(f,{heading:e,className:"h-full overflow-auto",children:jsx("div",{className:"flex flex-col gap-1",children:o.map(t=>{let h$1=n.some(p=>p.value===t.value);return jsxs(h,{value:t.value,keywords:typeof t.label=="string"?[t.label]:void 0,disabled:t.disable,onMouseDown:p=>{p.preventDefault(),p.stopPropagation();},onSelect:()=>L(t),className:a("flex cursor-pointer items-center justify-between p-3 hover:bg-green-100 data-[selected=true]:bg-green-100",t.disable&&"text-muted-foreground cursor-default",h$1&&"bg-green-100"),children:[t.label,h$1&&jsx(LuCheck,{className:"h-4 w-4 text-green-800"})]},t.value)})})},e))]})})})]})});we.displayName="MultiSelect";export{he as a,we as b};//# sourceMappingURL=chunk-MQL5R4MD.js.map
2
+ //# sourceMappingURL=chunk-MQL5R4MD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/v2/multiselect/multiselect.tsx"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","timer","transToGroupOption","options","groupBy","groupOption","option","key","CommandEmpty","forwardRef","className","props","forwardedRef","useCommandState","state","jsx","cn","MultiSelect","onChange","placeholder","arrayDefaultOptions","arrayOptions","onSearch","onSearchSync","loadingIndicator","emptyIndicator","maxSelected","onMaxSelected","hidePlaceholderWhenSelected","disabled","badgeWrapperClassName","badgeClassName","getBadgeClassName","selectFirstItem","triggerSearchOnFocus","commandProps","inputProps","ref","inputRef","useRef","open","setOpen","onScrollbar","setOnScrollbar","isLoading","setIsLoading","dropdownRef","selected","setSelected","setOptions","inputValue","setInputValue","debouncedSearchTerm","ChevronIcon","LuChevronUp","LuChevronDown","useImperativeHandle","handleClickOutside","event","toggleOption","useCallback","optionSelected","s","hitMaximum","newOptions","handleKeyDown","input","lastSelectOption","doSearchSync","res","doSearch","EmptyItem","CommandItem","commandFilter","jsxs","Command","Badge","e","LuX","CommandPrimitive","CommandList","Fragment","dropdowns","CommandGroup","LuCheck"],"mappings":"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","file":"chunk-MQL5R4MD.js","sourcesContent":["import { Command as CommandPrimitive, useCommandState } from 'cmdk';\nimport { LuCheck, LuChevronDown, LuChevronUp, LuX } from 'react-icons/lu';\nimport {\n ComponentProps,\n ComponentPropsWithoutRef,\n forwardRef,\n KeyboardEvent,\n ReactNode,\n Ref,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\n\nimport { Badge } from '@/v2/badge/badge';\nimport { Command, CommandGroup, CommandItem, CommandList } from '@/v2/command/command';\nimport { cn } from '@/lib/utils';\n\nexport type Option = {\n value: string;\n label: string | ReactNode;\n selectedLabel?: string | ReactNode;\n disable?: boolean;\n /** fixed option that can't be removed. */\n fixed?: boolean;\n /** Group the options by providing key. */\n [key: string]: string | boolean | ReactNode | undefined;\n};\n\ninterface GroupOption {\n [key: string]: Option[];\n}\n\ninterface MultiSelectProps {\n value?: Option[];\n defaultOptions?: Option[];\n /** manually controlled options */\n options?: Option[];\n placeholder?: string;\n /** Loading component. */\n loadingIndicator?: ReactNode;\n /** Empty component. */\n emptyIndicator?: ReactNode;\n /** Debounce time for async search. Only work with `onSearch`. */\n delay?: number;\n /**\n * Only work with `onSearch` prop. Trigger search when `onFocus`.\n * For example, when user click on the input, it will trigger the search to get initial options.\n * */\n triggerSearchOnFocus?: boolean;\n /** async search */\n onSearch?: (value: string) => Promise<Option[]>;\n /**\n * sync search. This search will not show loadingIndicator.\n * The rest props are the same as async search.\n * i.e.: groupBy, delay.\n * */\n onSearchSync?: (value: string) => Option[];\n onChange?: (options: Option[]) => void;\n /** Limit the maximum number of selected options. */\n maxSelected?: number;\n /** When the number of selected options exceeds the limit, the onMaxSelected will be called. */\n onMaxSelected?: (maxLimit: number) => void;\n /** Hide the placeholder when there are options selected. */\n hidePlaceholderWhenSelected?: boolean;\n disabled?: boolean;\n /** Group the options base on provided key. */\n groupBy?: string;\n className?: string;\n badgeWrapperClassName?: string;\n badgeClassName?: string;\n getBadgeClassName?: (option: Option) => string;\n /**\n *\n * @reference: https://github.com/pacocoursey/cmdk/issues/171\n */\n selectFirstItem?: boolean;\n /** Props of `Command` */\n commandProps?: ComponentPropsWithoutRef<typeof Command>;\n /** Props of `CommandInput` */\n inputProps?: Omit<\n ComponentPropsWithoutRef<typeof CommandPrimitive.Input>,\n 'value' | 'placeholder' | 'disabled'\n >;\n}\n\nexport interface MultiSelectRef {\n selectedValue: Option[];\n input: HTMLInputElement;\n focus: () => void;\n reset: () => void;\n}\n\nexport function useDebounce<T>(value: T, delay?: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay || 500);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n\nfunction transToGroupOption(options: Option[], groupBy?: string) {\n if (options.length === 0) {\n return {};\n }\n if (!groupBy) {\n return {\n '': options,\n };\n }\n\n const groupOption: GroupOption = {};\n options.forEach((option) => {\n const key = (option[groupBy] as string) || '';\n if (!groupOption[key]) {\n groupOption[key] = [];\n }\n groupOption[key].push(option);\n });\n return groupOption;\n}\n\n/**\n * The `CommandEmpty` of shadcn/ui will cause the cmdk empty not rendering correctly.\n * So we create one and copy the `Empty` implementation from `cmdk`.\n *\n * @reference: https://github.com/hsuanyi-chou/shadcn-ui-expansions/issues/34#issuecomment-1949561607\n * */\nconst CommandEmpty = forwardRef<HTMLDivElement, ComponentProps<typeof CommandPrimitive.Empty>>(\n ({ className, ...props }, forwardedRef) => {\n const render = useCommandState((state) => state.filtered.count === 0);\n\n if (!render) return null;\n\n return (\n <div\n ref={forwardedRef}\n className={cn('py-6 text-center text-sm', className)}\n role=\"presentation\"\n {...props}\n />\n );\n },\n);\n\nCommandEmpty.displayName = 'CommandEmpty';\n\nexport const MultiSelect = forwardRef<MultiSelectRef, MultiSelectProps>(\n (\n {\n value,\n onChange,\n placeholder,\n defaultOptions: arrayDefaultOptions = [],\n options: arrayOptions,\n delay,\n onSearch,\n onSearchSync,\n loadingIndicator,\n emptyIndicator,\n maxSelected = 0,\n onMaxSelected,\n hidePlaceholderWhenSelected = true,\n disabled,\n groupBy,\n className,\n badgeWrapperClassName,\n badgeClassName,\n getBadgeClassName = () => '',\n selectFirstItem = true,\n triggerSearchOnFocus = false,\n commandProps,\n inputProps,\n }: MultiSelectProps,\n ref: Ref<MultiSelectRef>,\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [open, setOpen] = useState(false);\n const [onScrollbar, setOnScrollbar] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const [selected, setSelected] = useState<Option[]>(value || []);\n const [options, setOptions] = useState<GroupOption>(\n transToGroupOption(arrayDefaultOptions, groupBy),\n );\n const [inputValue, setInputValue] = useState('');\n const debouncedSearchTerm = useDebounce(inputValue, delay || 500);\n\n const ChevronIcon = open ? LuChevronUp : LuChevronDown;\n\n useImperativeHandle(\n ref,\n () => ({\n selectedValue: [...selected],\n input: inputRef.current as HTMLInputElement,\n focus: () => inputRef?.current?.focus(),\n reset: () => setSelected([]),\n }),\n [selected],\n );\n\n const handleClickOutside = (event: MouseEvent | TouchEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node) &&\n inputRef.current &&\n !inputRef.current.contains(event.target as Node)\n ) {\n setOpen(false);\n inputRef.current.blur();\n }\n };\n\n const toggleOption = useCallback(\n (option: Option) => {\n const optionSelected = selected.some((s) => s.value === option.value);\n const hitMaximum = !optionSelected && !!maxSelected && selected.length >= maxSelected;\n\n setInputValue('');\n\n let newOptions = optionSelected\n ? selected.filter((s) => s.value !== option.value)\n : [...selected, option];\n\n if (hitMaximum) newOptions = newOptions.slice(1); // Remove the first item if hit maximum\n\n setSelected(newOptions);\n onChange?.(newOptions);\n if (hitMaximum) onMaxSelected?.(selected.length);\n },\n [maxSelected, onChange, onMaxSelected, selected],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n const input = inputRef.current;\n if (input) {\n if (e.key === 'Delete' || e.key === 'Backspace') {\n if (input.value === '' && selected.length > 0) {\n const lastSelectOption = selected[selected.length - 1];\n // If there is a last item and it is not fixed, we can remove it.\n if (lastSelectOption && !lastSelectOption.fixed) {\n toggleOption(lastSelectOption);\n }\n }\n }\n // This is not a default behavior of the <input /> field\n if (e.key === 'Escape') {\n input.blur();\n }\n }\n },\n [toggleOption, selected],\n );\n\n useEffect(() => {\n if (open) {\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('touchend', handleClickOutside);\n } else {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('touchend', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('touchend', handleClickOutside);\n };\n }, [open]);\n\n useEffect(() => {\n if (value) {\n setSelected(value);\n }\n }, [value]);\n\n useEffect(() => {\n /** If `onSearch` is provided, do not trigger options updated. */\n if (!arrayOptions || onSearch) {\n return;\n }\n const newOptions = transToGroupOption(arrayOptions || [], groupBy);\n\n if (Object.entries(newOptions).length !== Object.entries(options).length) {\n setOptions(newOptions);\n }\n }, [arrayDefaultOptions, arrayOptions, groupBy, onSearch, options]);\n\n useEffect(() => {\n /** sync search */\n\n const doSearchSync = () => {\n const res = onSearchSync?.(debouncedSearchTerm);\n setOptions(transToGroupOption(res || [], groupBy));\n };\n\n const exec = async () => {\n if (!onSearchSync || !open) return;\n\n if (triggerSearchOnFocus) {\n doSearchSync();\n }\n\n if (debouncedSearchTerm) {\n doSearchSync();\n }\n };\n\n exec();\n }, [debouncedSearchTerm, groupBy, open, triggerSearchOnFocus]);\n\n useEffect(() => {\n /** async search */\n\n const doSearch = async () => {\n setIsLoading(true);\n const res = await onSearch?.(debouncedSearchTerm);\n setOptions(transToGroupOption(res || [], groupBy));\n setIsLoading(false);\n };\n\n const exec = async () => {\n if (!onSearch || !open) return;\n\n if (triggerSearchOnFocus) {\n await doSearch();\n }\n\n if (debouncedSearchTerm) {\n await doSearch();\n }\n };\n\n exec();\n }, [debouncedSearchTerm, groupBy, open, triggerSearchOnFocus]);\n\n const EmptyItem = useCallback(() => {\n if (!emptyIndicator) return undefined;\n\n // For async search that showing emptyIndicator\n if (onSearch && Object.keys(options).length === 0) {\n return (\n <CommandItem value=\"-\" disabled>\n {emptyIndicator}\n </CommandItem>\n );\n }\n\n return <CommandEmpty>{emptyIndicator}</CommandEmpty>;\n }, [emptyIndicator, onSearch, options]);\n\n const commandFilter = useCallback(() => {\n if (commandProps?.filter) {\n return commandProps.filter;\n }\n\n // Using default filter in `cmdk`. We don't have to provide it.\n return undefined;\n }, [commandProps?.filter]);\n\n return (\n <Command\n ref={dropdownRef}\n {...commandProps}\n onKeyDown={(e) => {\n handleKeyDown(e);\n commandProps?.onKeyDown?.(e);\n }}\n className={cn('h-auto overflow-visible bg-transparent', commandProps?.className)}\n shouldFilter={\n commandProps?.shouldFilter !== undefined ? commandProps.shouldFilter : !onSearch\n } // When onSearch is provided, we don't want to filter the options. You can still override it.\n filter={commandFilter()}\n >\n <button\n type=\"button\"\n className={cn(\n 'items-center justify-between gap-2 p-3 whitespace-nowrap',\n\n // Border & ring\n 'border-input rounded-md border bg-white',\n open && 'border-dark-green', // conditional green border when open\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n\n // States\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40',\n 'disabled:cursor-not-allowed disabled:bg-gray-200',\n 'hover:not-disabled:border-dark-green',\n\n // Shadow & transitions\n 'transition-all outline-none',\n {\n 'cursor-text': !disabled && selected.length !== 0,\n },\n 'flex w-full',\n className,\n )}\n onClick={() => {\n if (disabled) return;\n inputRef?.current?.focus();\n }}\n disabled={disabled}\n >\n <div\n className={cn(\n 'relative flex gap-1 overflow-auto [&::-webkit-scrollbar]:h-0',\n badgeWrapperClassName,\n )}\n >\n {selected.map((option) => {\n return (\n <Badge\n key={option.value}\n className={cn(\n 'data-[disabled]:text-secondary data-[disabled]:bg-transparent',\n 'data-[fixed]:bg-muted-foreground data-[fixed]:text-muted data-[fixed]:hover:bg-muted-foreground',\n badgeClassName,\n getBadgeClassName(option),\n 'py-0',\n )}\n color=\"green\"\n rounded\n data-fixed={option.fixed}\n data-disabled={disabled || undefined}\n >\n {option?.selectedLabel ?? option.label}\n <button\n type=\"button\"\n className={cn(\n 'ring-offset-background focus:ring-ring ml-1 rounded-full outline-none focus:ring-2 focus:ring-offset-2',\n (disabled || option.fixed) && 'hidden',\n )}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n toggleOption(option);\n }\n }}\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onClick={() => toggleOption(option)}\n >\n <LuX className=\"text-muted-foreground hover:text-foreground h-3 w-3\" />\n </button>\n </Badge>\n );\n })}\n <CommandPrimitive.Input\n {...inputProps}\n ref={inputRef}\n value={inputValue}\n disabled={disabled}\n onValueChange={(value) => {\n setInputValue(value);\n inputProps?.onValueChange?.(value);\n }}\n onBlur={(event) => {\n if (!onScrollbar) {\n setOpen(false);\n }\n inputProps?.onBlur?.(event);\n }}\n onFocus={(event) => {\n setOpen(true);\n inputProps?.onFocus?.(event);\n }}\n placeholder={hidePlaceholderWhenSelected && selected.length !== 0 ? '' : placeholder}\n className={cn(\n 'placeholder:text-secondary flex-1 self-baseline bg-transparent outline-none',\n {\n 'w-full': hidePlaceholderWhenSelected,\n 'ml-1': selected.length !== 0,\n },\n inputProps?.className,\n )}\n />\n </div>\n <ChevronIcon\n className={cn('size-5 min-w-5 cursor-pointer', disabled && 'text-gray-600')}\n />\n </button>\n <div className=\"relative\">\n {open && (\n <CommandList\n className=\"bg-popover text-popover-foreground animate-in absolute top-1 z-10 w-full rounded-md border shadow-xs outline-none\"\n onMouseLeave={() => {\n setOnScrollbar(false);\n }}\n onMouseEnter={() => {\n setOnScrollbar(true);\n }}\n onMouseUp={() => {\n inputRef?.current?.focus();\n }}\n >\n {isLoading ? (\n loadingIndicator\n ) : (\n <>\n {EmptyItem()}\n {!selectFirstItem && <CommandItem value=\"-\" className=\"hidden\" />}\n {Object.entries(options).map(([key, dropdowns]) => (\n <CommandGroup key={key} heading={key} className=\"h-full overflow-auto\">\n <div className=\"flex flex-col gap-1\">\n {dropdowns.map((option) => {\n const optionSelected = selected.some((s) => s.value === option.value);\n return (\n <CommandItem\n key={option.value}\n value={option.value}\n keywords={\n typeof option.label === 'string' ? [option.label] : undefined\n }\n disabled={option.disable}\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onSelect={() => toggleOption(option)}\n className={cn(\n 'flex cursor-pointer items-center justify-between p-3 hover:bg-green-100 data-[selected=true]:bg-green-100',\n option.disable && 'text-muted-foreground cursor-default',\n optionSelected && 'bg-green-100',\n )}\n >\n {option.label}\n {optionSelected && <LuCheck className=\"h-4 w-4 text-green-800\" />}\n </CommandItem>\n );\n })}\n </div>\n </CommandGroup>\n ))}\n </>\n )}\n </CommandList>\n )}\n </div>\n </Command>\n );\n },\n);\n\nMultiSelect.displayName = 'MultiSelect';\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkHYP7A6HK_cjs=require('./chunk-HYP7A6HK.cjs'),chunkQQLW7HXZ_cjs=require('./chunk-QQLW7HXZ.cjs'),chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),cmdk=require('cmdk'),lu=require('react-icons/lu'),react=require('react'),jsxRuntime=require('react/jsx-runtime');function he(r,i){let[l,f]=react.useState(r);return react.useEffect(()=>{let s=setTimeout(()=>f(r),i||500);return ()=>{clearTimeout(s);}},[r,i]),l}function D(r,i){if(r.length===0)return {};if(!i)return {"":r};let l={};return r.forEach(f=>{let s=f[i]||"";l[s]||(l[s]=[]),l[s].push(f);}),l}var Q=react.forwardRef(({className:r,...i},l)=>cmdk.useCommandState(s=>s.filtered.count===0)?jsxRuntime.jsx("div",{ref:l,className:chunkQRO22BPZ_cjs.a("py-6 text-center text-sm",r),role:"presentation",...i}):null);Q.displayName="CommandEmpty";var we=react.forwardRef(({value:r,onChange:i,placeholder:l,defaultOptions:f=[],options:s,delay:Z,onSearch:b,onSearchSync:K,loadingIndicator:_,emptyIndicator:k,maxSelected:S=0,onMaxSelected:j,hidePlaceholderWhenSelected:F=true,disabled:g,groupBy:v,className:$,badgeWrapperClassName:ee,badgeClassName:te,getBadgeClassName:ne=()=>"",selectFirstItem:oe=true,triggerSearchOnFocus:M=false,commandProps:m,inputProps:O},re)=>{let d=react.useRef(null),[c,I]=react.useState(false),[ae,P]=react.useState(false),[se,W]=react.useState(false),V=react.useRef(null),[n,H]=react.useState(r||[]),[E,G]=react.useState(D(f,v)),[z,U]=react.useState(""),x=he(z,Z||500),ie=c?lu.LuChevronUp:lu.LuChevronDown;react.useImperativeHandle(re,()=>({selectedValue:[...n],input:d.current,focus:()=>d?.current?.focus(),reset:()=>H([])}),[n]);let C=e=>{V.current&&!V.current.contains(e.target)&&d.current&&!d.current.contains(e.target)&&(I(false),d.current.blur());},L=react.useCallback(e=>{let o=n.some(p=>p.value===e.value),t=!o&&!!S&&n.length>=S;U("");let h=o?n.filter(p=>p.value!==e.value):[...n,e];t&&(h=h.slice(1)),H(h),i?.(h),t&&j?.(n.length);},[S,i,j,n]),le=react.useCallback(e=>{let o=d.current;if(o){if((e.key==="Delete"||e.key==="Backspace")&&o.value===""&&n.length>0){let t=n[n.length-1];t&&!t.fixed&&L(t);}e.key==="Escape"&&o.blur();}},[L,n]);react.useEffect(()=>(c?(document.addEventListener("mousedown",C),document.addEventListener("touchend",C)):(document.removeEventListener("mousedown",C),document.removeEventListener("touchend",C)),()=>{document.removeEventListener("mousedown",C),document.removeEventListener("touchend",C);}),[c]),react.useEffect(()=>{r&&H(r);},[r]),react.useEffect(()=>{if(!s||b)return;let e=D(s||[],v);Object.entries(e).length!==Object.entries(E).length&&G(e);},[f,s,v,b,E]),react.useEffect(()=>{let e=()=>{let t=K?.(x);G(D(t||[],v));};(async()=>{!K||!c||(M&&e(),x&&e());})();},[x,v,c,M]),react.useEffect(()=>{let e=async()=>{W(true);let t=await b?.(x);G(D(t||[],v)),W(false);};(async()=>{!b||!c||(M&&await e(),x&&await e());})();},[x,v,c,M]);let ue=react.useCallback(()=>{if(k)return b&&Object.keys(E).length===0?jsxRuntime.jsx(chunkHYP7A6HK_cjs.h,{value:"-",disabled:true,children:k}):jsxRuntime.jsx(Q,{children:k})},[k,b,E]),de=react.useCallback(()=>{if(m?.filter)return m.filter},[m?.filter]);return jsxRuntime.jsxs(chunkHYP7A6HK_cjs.a,{ref:V,...m,onKeyDown:e=>{le(e),m?.onKeyDown?.(e);},className:chunkQRO22BPZ_cjs.a("h-auto overflow-visible bg-transparent",m?.className),shouldFilter:m?.shouldFilter!==void 0?m.shouldFilter:!b,filter:de(),children:[jsxRuntime.jsxs("button",{type:"button",className:chunkQRO22BPZ_cjs.a("items-center justify-between gap-2 p-3 whitespace-nowrap","border-input rounded-md border bg-white",c&&"border-dark-green","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40","disabled:cursor-not-allowed disabled:bg-gray-200","hover:not-disabled:border-dark-green","transition-all outline-none",{"cursor-text":!g&&n.length!==0},"flex w-full",$),onClick:()=>{g||d?.current?.focus();},disabled:g,children:[jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative flex gap-1 overflow-auto [&::-webkit-scrollbar]:h-0",ee),children:[n.map(e=>jsxRuntime.jsxs(chunkQQLW7HXZ_cjs.b,{className:chunkQRO22BPZ_cjs.a("data-[disabled]:text-secondary data-[disabled]:bg-transparent","data-[fixed]:bg-muted-foreground data-[fixed]:text-muted data-[fixed]:hover:bg-muted-foreground",te,ne(e),"py-0"),color:"green",rounded:true,"data-fixed":e.fixed,"data-disabled":g||void 0,children:[e?.selectedLabel??e.label,jsxRuntime.jsx("button",{type:"button",className:chunkQRO22BPZ_cjs.a("ring-offset-background focus:ring-ring ml-1 rounded-full outline-none focus:ring-2 focus:ring-offset-2",(g||e.fixed)&&"hidden"),onKeyDown:o=>{o.key==="Enter"&&L(e);},onMouseDown:o=>{o.preventDefault(),o.stopPropagation();},onClick:()=>L(e),children:jsxRuntime.jsx(lu.LuX,{className:"text-muted-foreground hover:text-foreground h-3 w-3"})})]},e.value)),jsxRuntime.jsx(cmdk.Command.Input,{...O,ref:d,value:z,disabled:g,onValueChange:e=>{U(e),O?.onValueChange?.(e);},onBlur:e=>{ae||I(false),O?.onBlur?.(e);},onFocus:e=>{I(true),O?.onFocus?.(e);},placeholder:F&&n.length!==0?"":l,className:chunkQRO22BPZ_cjs.a("placeholder:text-secondary flex-1 self-baseline bg-transparent outline-none",{"w-full":F,"ml-1":n.length!==0},O?.className)})]}),jsxRuntime.jsx(ie,{className:chunkQRO22BPZ_cjs.a("size-5 min-w-5 cursor-pointer",g&&"text-gray-600")})]}),jsxRuntime.jsx("div",{className:"relative",children:c&&jsxRuntime.jsx(chunkHYP7A6HK_cjs.d,{className:"bg-popover text-popover-foreground animate-in absolute top-1 z-10 w-full rounded-md border shadow-xs outline-none",onMouseLeave:()=>{P(false);},onMouseEnter:()=>{P(true);},onMouseUp:()=>{d?.current?.focus();},children:se?_:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[ue(),!oe&&jsxRuntime.jsx(chunkHYP7A6HK_cjs.h,{value:"-",className:"hidden"}),Object.entries(E).map(([e,o])=>jsxRuntime.jsx(chunkHYP7A6HK_cjs.f,{heading:e,className:"h-full overflow-auto",children:jsxRuntime.jsx("div",{className:"flex flex-col gap-1",children:o.map(t=>{let h=n.some(p=>p.value===t.value);return jsxRuntime.jsxs(chunkHYP7A6HK_cjs.h,{value:t.value,keywords:typeof t.label=="string"?[t.label]:void 0,disabled:t.disable,onMouseDown:p=>{p.preventDefault(),p.stopPropagation();},onSelect:()=>L(t),className:chunkQRO22BPZ_cjs.a("flex cursor-pointer items-center justify-between p-3 hover:bg-green-100 data-[selected=true]:bg-green-100",t.disable&&"text-muted-foreground cursor-default",h&&"bg-green-100"),children:[t.label,h&&jsxRuntime.jsx(lu.LuCheck,{className:"h-4 w-4 text-green-800"})]},t.value)})})},e))]})})})]})});we.displayName="MultiSelect";exports.a=he;exports.b=we;//# sourceMappingURL=chunk-MYZ4DUFT.cjs.map
2
+ //# sourceMappingURL=chunk-MYZ4DUFT.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/v2/multiselect/multiselect.tsx"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","timer","transToGroupOption","options","groupBy","groupOption","option","key","CommandEmpty","forwardRef","className","props","forwardedRef","useCommandState","state","jsx","cn","MultiSelect","onChange","placeholder","arrayDefaultOptions","arrayOptions","onSearch","onSearchSync","loadingIndicator","emptyIndicator","maxSelected","onMaxSelected","hidePlaceholderWhenSelected","disabled","badgeWrapperClassName","badgeClassName","getBadgeClassName","selectFirstItem","triggerSearchOnFocus","commandProps","inputProps","ref","inputRef","useRef","open","setOpen","onScrollbar","setOnScrollbar","isLoading","setIsLoading","dropdownRef","selected","setSelected","setOptions","inputValue","setInputValue","debouncedSearchTerm","ChevronIcon","LuChevronUp","LuChevronDown","useImperativeHandle","handleClickOutside","event","toggleOption","useCallback","optionSelected","s","hitMaximum","newOptions","handleKeyDown","input","lastSelectOption","doSearchSync","res","doSearch","EmptyItem","CommandItem","commandFilter","jsxs","Command","Badge","e","LuX","CommandPrimitive","CommandList","Fragment","dropdowns","CommandGroup","LuCheck"],"mappings":"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","file":"chunk-MYZ4DUFT.cjs","sourcesContent":["import { Command as CommandPrimitive, useCommandState } from 'cmdk';\nimport { LuCheck, LuChevronDown, LuChevronUp, LuX } from 'react-icons/lu';\nimport {\n ComponentProps,\n ComponentPropsWithoutRef,\n forwardRef,\n KeyboardEvent,\n ReactNode,\n Ref,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\n\nimport { Badge } from '@/v2/badge/badge';\nimport { Command, CommandGroup, CommandItem, CommandList } from '@/v2/command/command';\nimport { cn } from '@/lib/utils';\n\nexport type Option = {\n value: string;\n label: string | ReactNode;\n selectedLabel?: string | ReactNode;\n disable?: boolean;\n /** fixed option that can't be removed. */\n fixed?: boolean;\n /** Group the options by providing key. */\n [key: string]: string | boolean | ReactNode | undefined;\n};\n\ninterface GroupOption {\n [key: string]: Option[];\n}\n\ninterface MultiSelectProps {\n value?: Option[];\n defaultOptions?: Option[];\n /** manually controlled options */\n options?: Option[];\n placeholder?: string;\n /** Loading component. */\n loadingIndicator?: ReactNode;\n /** Empty component. */\n emptyIndicator?: ReactNode;\n /** Debounce time for async search. Only work with `onSearch`. */\n delay?: number;\n /**\n * Only work with `onSearch` prop. Trigger search when `onFocus`.\n * For example, when user click on the input, it will trigger the search to get initial options.\n * */\n triggerSearchOnFocus?: boolean;\n /** async search */\n onSearch?: (value: string) => Promise<Option[]>;\n /**\n * sync search. This search will not show loadingIndicator.\n * The rest props are the same as async search.\n * i.e.: groupBy, delay.\n * */\n onSearchSync?: (value: string) => Option[];\n onChange?: (options: Option[]) => void;\n /** Limit the maximum number of selected options. */\n maxSelected?: number;\n /** When the number of selected options exceeds the limit, the onMaxSelected will be called. */\n onMaxSelected?: (maxLimit: number) => void;\n /** Hide the placeholder when there are options selected. */\n hidePlaceholderWhenSelected?: boolean;\n disabled?: boolean;\n /** Group the options base on provided key. */\n groupBy?: string;\n className?: string;\n badgeWrapperClassName?: string;\n badgeClassName?: string;\n getBadgeClassName?: (option: Option) => string;\n /**\n *\n * @reference: https://github.com/pacocoursey/cmdk/issues/171\n */\n selectFirstItem?: boolean;\n /** Props of `Command` */\n commandProps?: ComponentPropsWithoutRef<typeof Command>;\n /** Props of `CommandInput` */\n inputProps?: Omit<\n ComponentPropsWithoutRef<typeof CommandPrimitive.Input>,\n 'value' | 'placeholder' | 'disabled'\n >;\n}\n\nexport interface MultiSelectRef {\n selectedValue: Option[];\n input: HTMLInputElement;\n focus: () => void;\n reset: () => void;\n}\n\nexport function useDebounce<T>(value: T, delay?: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay || 500);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n\nfunction transToGroupOption(options: Option[], groupBy?: string) {\n if (options.length === 0) {\n return {};\n }\n if (!groupBy) {\n return {\n '': options,\n };\n }\n\n const groupOption: GroupOption = {};\n options.forEach((option) => {\n const key = (option[groupBy] as string) || '';\n if (!groupOption[key]) {\n groupOption[key] = [];\n }\n groupOption[key].push(option);\n });\n return groupOption;\n}\n\n/**\n * The `CommandEmpty` of shadcn/ui will cause the cmdk empty not rendering correctly.\n * So we create one and copy the `Empty` implementation from `cmdk`.\n *\n * @reference: https://github.com/hsuanyi-chou/shadcn-ui-expansions/issues/34#issuecomment-1949561607\n * */\nconst CommandEmpty = forwardRef<HTMLDivElement, ComponentProps<typeof CommandPrimitive.Empty>>(\n ({ className, ...props }, forwardedRef) => {\n const render = useCommandState((state) => state.filtered.count === 0);\n\n if (!render) return null;\n\n return (\n <div\n ref={forwardedRef}\n className={cn('py-6 text-center text-sm', className)}\n role=\"presentation\"\n {...props}\n />\n );\n },\n);\n\nCommandEmpty.displayName = 'CommandEmpty';\n\nexport const MultiSelect = forwardRef<MultiSelectRef, MultiSelectProps>(\n (\n {\n value,\n onChange,\n placeholder,\n defaultOptions: arrayDefaultOptions = [],\n options: arrayOptions,\n delay,\n onSearch,\n onSearchSync,\n loadingIndicator,\n emptyIndicator,\n maxSelected = 0,\n onMaxSelected,\n hidePlaceholderWhenSelected = true,\n disabled,\n groupBy,\n className,\n badgeWrapperClassName,\n badgeClassName,\n getBadgeClassName = () => '',\n selectFirstItem = true,\n triggerSearchOnFocus = false,\n commandProps,\n inputProps,\n }: MultiSelectProps,\n ref: Ref<MultiSelectRef>,\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [open, setOpen] = useState(false);\n const [onScrollbar, setOnScrollbar] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const [selected, setSelected] = useState<Option[]>(value || []);\n const [options, setOptions] = useState<GroupOption>(\n transToGroupOption(arrayDefaultOptions, groupBy),\n );\n const [inputValue, setInputValue] = useState('');\n const debouncedSearchTerm = useDebounce(inputValue, delay || 500);\n\n const ChevronIcon = open ? LuChevronUp : LuChevronDown;\n\n useImperativeHandle(\n ref,\n () => ({\n selectedValue: [...selected],\n input: inputRef.current as HTMLInputElement,\n focus: () => inputRef?.current?.focus(),\n reset: () => setSelected([]),\n }),\n [selected],\n );\n\n const handleClickOutside = (event: MouseEvent | TouchEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node) &&\n inputRef.current &&\n !inputRef.current.contains(event.target as Node)\n ) {\n setOpen(false);\n inputRef.current.blur();\n }\n };\n\n const toggleOption = useCallback(\n (option: Option) => {\n const optionSelected = selected.some((s) => s.value === option.value);\n const hitMaximum = !optionSelected && !!maxSelected && selected.length >= maxSelected;\n\n setInputValue('');\n\n let newOptions = optionSelected\n ? selected.filter((s) => s.value !== option.value)\n : [...selected, option];\n\n if (hitMaximum) newOptions = newOptions.slice(1); // Remove the first item if hit maximum\n\n setSelected(newOptions);\n onChange?.(newOptions);\n if (hitMaximum) onMaxSelected?.(selected.length);\n },\n [maxSelected, onChange, onMaxSelected, selected],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n const input = inputRef.current;\n if (input) {\n if (e.key === 'Delete' || e.key === 'Backspace') {\n if (input.value === '' && selected.length > 0) {\n const lastSelectOption = selected[selected.length - 1];\n // If there is a last item and it is not fixed, we can remove it.\n if (lastSelectOption && !lastSelectOption.fixed) {\n toggleOption(lastSelectOption);\n }\n }\n }\n // This is not a default behavior of the <input /> field\n if (e.key === 'Escape') {\n input.blur();\n }\n }\n },\n [toggleOption, selected],\n );\n\n useEffect(() => {\n if (open) {\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('touchend', handleClickOutside);\n } else {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('touchend', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('touchend', handleClickOutside);\n };\n }, [open]);\n\n useEffect(() => {\n if (value) {\n setSelected(value);\n }\n }, [value]);\n\n useEffect(() => {\n /** If `onSearch` is provided, do not trigger options updated. */\n if (!arrayOptions || onSearch) {\n return;\n }\n const newOptions = transToGroupOption(arrayOptions || [], groupBy);\n\n if (Object.entries(newOptions).length !== Object.entries(options).length) {\n setOptions(newOptions);\n }\n }, [arrayDefaultOptions, arrayOptions, groupBy, onSearch, options]);\n\n useEffect(() => {\n /** sync search */\n\n const doSearchSync = () => {\n const res = onSearchSync?.(debouncedSearchTerm);\n setOptions(transToGroupOption(res || [], groupBy));\n };\n\n const exec = async () => {\n if (!onSearchSync || !open) return;\n\n if (triggerSearchOnFocus) {\n doSearchSync();\n }\n\n if (debouncedSearchTerm) {\n doSearchSync();\n }\n };\n\n exec();\n }, [debouncedSearchTerm, groupBy, open, triggerSearchOnFocus]);\n\n useEffect(() => {\n /** async search */\n\n const doSearch = async () => {\n setIsLoading(true);\n const res = await onSearch?.(debouncedSearchTerm);\n setOptions(transToGroupOption(res || [], groupBy));\n setIsLoading(false);\n };\n\n const exec = async () => {\n if (!onSearch || !open) return;\n\n if (triggerSearchOnFocus) {\n await doSearch();\n }\n\n if (debouncedSearchTerm) {\n await doSearch();\n }\n };\n\n exec();\n }, [debouncedSearchTerm, groupBy, open, triggerSearchOnFocus]);\n\n const EmptyItem = useCallback(() => {\n if (!emptyIndicator) return undefined;\n\n // For async search that showing emptyIndicator\n if (onSearch && Object.keys(options).length === 0) {\n return (\n <CommandItem value=\"-\" disabled>\n {emptyIndicator}\n </CommandItem>\n );\n }\n\n return <CommandEmpty>{emptyIndicator}</CommandEmpty>;\n }, [emptyIndicator, onSearch, options]);\n\n const commandFilter = useCallback(() => {\n if (commandProps?.filter) {\n return commandProps.filter;\n }\n\n // Using default filter in `cmdk`. We don't have to provide it.\n return undefined;\n }, [commandProps?.filter]);\n\n return (\n <Command\n ref={dropdownRef}\n {...commandProps}\n onKeyDown={(e) => {\n handleKeyDown(e);\n commandProps?.onKeyDown?.(e);\n }}\n className={cn('h-auto overflow-visible bg-transparent', commandProps?.className)}\n shouldFilter={\n commandProps?.shouldFilter !== undefined ? commandProps.shouldFilter : !onSearch\n } // When onSearch is provided, we don't want to filter the options. You can still override it.\n filter={commandFilter()}\n >\n <button\n type=\"button\"\n className={cn(\n 'items-center justify-between gap-2 p-3 whitespace-nowrap',\n\n // Border & ring\n 'border-input rounded-md border bg-white',\n open && 'border-dark-green', // conditional green border when open\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n\n // States\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40',\n 'disabled:cursor-not-allowed disabled:bg-gray-200',\n 'hover:not-disabled:border-dark-green',\n\n // Shadow & transitions\n 'transition-all outline-none',\n {\n 'cursor-text': !disabled && selected.length !== 0,\n },\n 'flex w-full',\n className,\n )}\n onClick={() => {\n if (disabled) return;\n inputRef?.current?.focus();\n }}\n disabled={disabled}\n >\n <div\n className={cn(\n 'relative flex gap-1 overflow-auto [&::-webkit-scrollbar]:h-0',\n badgeWrapperClassName,\n )}\n >\n {selected.map((option) => {\n return (\n <Badge\n key={option.value}\n className={cn(\n 'data-[disabled]:text-secondary data-[disabled]:bg-transparent',\n 'data-[fixed]:bg-muted-foreground data-[fixed]:text-muted data-[fixed]:hover:bg-muted-foreground',\n badgeClassName,\n getBadgeClassName(option),\n 'py-0',\n )}\n color=\"green\"\n rounded\n data-fixed={option.fixed}\n data-disabled={disabled || undefined}\n >\n {option?.selectedLabel ?? option.label}\n <button\n type=\"button\"\n className={cn(\n 'ring-offset-background focus:ring-ring ml-1 rounded-full outline-none focus:ring-2 focus:ring-offset-2',\n (disabled || option.fixed) && 'hidden',\n )}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n toggleOption(option);\n }\n }}\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onClick={() => toggleOption(option)}\n >\n <LuX className=\"text-muted-foreground hover:text-foreground h-3 w-3\" />\n </button>\n </Badge>\n );\n })}\n <CommandPrimitive.Input\n {...inputProps}\n ref={inputRef}\n value={inputValue}\n disabled={disabled}\n onValueChange={(value) => {\n setInputValue(value);\n inputProps?.onValueChange?.(value);\n }}\n onBlur={(event) => {\n if (!onScrollbar) {\n setOpen(false);\n }\n inputProps?.onBlur?.(event);\n }}\n onFocus={(event) => {\n setOpen(true);\n inputProps?.onFocus?.(event);\n }}\n placeholder={hidePlaceholderWhenSelected && selected.length !== 0 ? '' : placeholder}\n className={cn(\n 'placeholder:text-secondary flex-1 self-baseline bg-transparent outline-none',\n {\n 'w-full': hidePlaceholderWhenSelected,\n 'ml-1': selected.length !== 0,\n },\n inputProps?.className,\n )}\n />\n </div>\n <ChevronIcon\n className={cn('size-5 min-w-5 cursor-pointer', disabled && 'text-gray-600')}\n />\n </button>\n <div className=\"relative\">\n {open && (\n <CommandList\n className=\"bg-popover text-popover-foreground animate-in absolute top-1 z-10 w-full rounded-md border shadow-xs outline-none\"\n onMouseLeave={() => {\n setOnScrollbar(false);\n }}\n onMouseEnter={() => {\n setOnScrollbar(true);\n }}\n onMouseUp={() => {\n inputRef?.current?.focus();\n }}\n >\n {isLoading ? (\n loadingIndicator\n ) : (\n <>\n {EmptyItem()}\n {!selectFirstItem && <CommandItem value=\"-\" className=\"hidden\" />}\n {Object.entries(options).map(([key, dropdowns]) => (\n <CommandGroup key={key} heading={key} className=\"h-full overflow-auto\">\n <div className=\"flex flex-col gap-1\">\n {dropdowns.map((option) => {\n const optionSelected = selected.some((s) => s.value === option.value);\n return (\n <CommandItem\n key={option.value}\n value={option.value}\n keywords={\n typeof option.label === 'string' ? [option.label] : undefined\n }\n disabled={option.disable}\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onSelect={() => toggleOption(option)}\n className={cn(\n 'flex cursor-pointer items-center justify-between p-3 hover:bg-green-100 data-[selected=true]:bg-green-100',\n option.disable && 'text-muted-foreground cursor-default',\n optionSelected && 'bg-green-100',\n )}\n >\n {option.label}\n {optionSelected && <LuCheck className=\"h-4 w-4 text-green-800\" />}\n </CommandItem>\n );\n })}\n </div>\n </CommandGroup>\n ))}\n </>\n )}\n </CommandList>\n )}\n </div>\n </Command>\n );\n },\n);\n\nMultiSelect.displayName = 'MultiSelect';\n"]}
@@ -0,0 +1,2 @@
1
+ import {a}from'./chunk-YTIIAU4W.js';import*as r from'@radix-ui/react-switch';import {useState,useRef,useEffect}from'react';import {jsxs,Fragment,jsx}from'react/jsx-runtime';function x({className:d,showLabels:t=false,onLabel:i="On",offLabel:n="Off",...e}){let[h,m]=useState(0),s=useRef(null);useEffect(()=>{t&&s.current&&m(s.current.offsetWidth);},[t,i,n]);let c=t?Math.max(44,h+34):44;return jsxs(Fragment,{children:[jsxs(r.Root,{"data-slot":"switch",className:a("peer data-[state=checked]:bg-dark-green focus-visible:border-ring focus-visible:ring-ring/50 relative inline-flex h-6 min-w-11 shrink-0 cursor-pointer items-center rounded-full border border-transparent px-0 shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[state=unchecked]:bg-gray-500",d),style:{width:c},...e,children:[jsx(r.Thumb,{"data-slot":"switch-thumb",className:"bg-background pointer-events-none block size-4 rounded-full ring-0 transition-transform",style:{transform:e.checked?`translateX(${c-22}px)`:"translateX(4px)"},...e}),t&&jsx("span",{className:a("absolute text-base font-bold text-white uppercase transition-all",e.checked?"left-2":"right-2"),children:e.checked?i:n})]}),t&&jsx("span",{ref:s,className:"pointer-events-none invisible absolute font-sans text-base font-bold whitespace-nowrap uppercase",children:i.length>n.length?i:n})]})}export{x as a};//# sourceMappingURL=chunk-O3OZOSXT.js.map
2
+ //# sourceMappingURL=chunk-O3OZOSXT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/v2/switch/switch.tsx"],"names":["Switch","className","showLabels","onLabel","offLabel","props","labelWidth","setLabelWidth","useState","measureRef","useRef","useEffect","dynamicWidth","jsxs","Fragment","cn","jsx"],"mappings":"6KAWA,SAASA,CAAAA,CAAO,CACd,SAAAC,CAAAA,CAAAA,CACA,UAAAC,CAAAA,CAAAA,CAAa,MACb,OAAAC,CAAAA,CAAAA,CAAU,IACV,CAAA,QAAA,CAAAC,EAAW,KACX,CAAA,GAAGC,CACL,CAAA,CAAgB,CACd,GAAM,CAACC,CAAYC,CAAAA,CAAa,CAAIC,CAAAA,QAAAA,CAAS,CAAC,CAAA,CACxCC,EAAaC,MAAwB,CAAA,IAAI,CAE/CC,CAAAA,SAAAA,CAAU,IAAM,CACVT,CAAAA,EAAcO,CAAW,CAAA,OAAA,EAC3BF,EAAcE,CAAW,CAAA,OAAA,CAAQ,WAAW,EAEhD,EAAG,CAACP,CAAAA,CAAYC,CAASC,CAAAA,CAAQ,CAAC,CAElC,CAAA,IAAMQ,CAAeV,CAAAA,CAAAA,CAAa,KAAK,GAAI,CAAA,EAAA,CAAII,CAAa,CAAA,EAAE,EAAI,EAElE,CAAA,OACEO,IAAAC,CAAAA,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAD,IAAiB,CAAA,CAAA,CAAA,IAAA,CAAhB,CACC,WAAU,CAAA,QAAA,CACV,SAAWE,CAAAA,CAAAA,CACT,oWACAd,CACF,CAAA,CACA,KAAO,CAAA,CAAE,MAAOW,CAAa,CAAA,CAC5B,GAAGP,CAAAA,CAEJ,UAAAW,GAAiB,CAAA,CAAA,CAAA,KAAA,CAAhB,CACC,WAAA,CAAU,eACV,SAAU,CAAA,yFAAA,CACV,KAAO,CAAA,CACL,UAAWX,CAAM,CAAA,OAAA,CAAU,CAAcO,WAAAA,EAAAA,CAAAA,CAAe,EAAE,CAAQ,GAAA,CAAA,CAAA,iBACpE,CACC,CAAA,GAAGP,CACN,CAAA,CAAA,CACCH,CACCc,EAAAA,GAAAA,CAAC,QACC,SAAWD,CAAAA,CAAAA,CACT,kEACAV,CAAAA,CAAAA,CAAM,QAAU,QAAW,CAAA,SAC7B,CAEC,CAAA,QAAA,CAAAA,EAAM,OAAUF,CAAAA,CAAAA,CAAUC,CAC7B,CAAA,CAAA,CAAA,CAEJ,EAECF,CACCc,EAAAA,GAAAA,CAAC,MACC,CAAA,CAAA,GAAA,CAAKP,EACL,SAAU,CAAA,kGAAA,CAET,QAAAN,CAAAA,CAAAA,CAAQ,OAASC,CAAS,CAAA,MAAA,CAASD,CAAUC,CAAAA,CAAAA,CAChD,GAEJ,CAEJ","file":"chunk-O3OZOSXT.js","sourcesContent":["import * as SwitchPrimitive from '@radix-ui/react-switch';\n\nimport { ComponentProps, useEffect, useRef, useState } from 'react';\nimport { cn } from '@/lib/utils';\n\ntype SwitchProps = ComponentProps<typeof SwitchPrimitive.Root> & {\n showLabels?: boolean;\n onLabel?: string;\n offLabel?: string;\n};\n\nfunction Switch({\n className,\n showLabels = false,\n onLabel = 'On',\n offLabel = 'Off',\n ...props\n}: SwitchProps) {\n const [labelWidth, setLabelWidth] = useState(0);\n const measureRef = useRef<HTMLSpanElement>(null);\n\n useEffect(() => {\n if (showLabels && measureRef.current) {\n setLabelWidth(measureRef.current.offsetWidth);\n }\n }, [showLabels, onLabel, offLabel]);\n\n const dynamicWidth = showLabels ? Math.max(44, labelWidth + 34) : 44; // 44px is default width\n\n return (\n <>\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n 'peer data-[state=checked]:bg-dark-green focus-visible:border-ring focus-visible:ring-ring/50 relative inline-flex h-6 min-w-11 shrink-0 cursor-pointer items-center rounded-full border border-transparent px-0 shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[state=unchecked]:bg-gray-500',\n className,\n )}\n style={{ width: dynamicWidth }}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"bg-background pointer-events-none block size-4 rounded-full ring-0 transition-transform\"\n style={{\n transform: props.checked ? `translateX(${dynamicWidth - 22}px)` : 'translateX(4px)',\n }}\n {...props}\n />\n {showLabels && (\n <span\n className={cn(\n 'absolute text-base font-bold text-white uppercase transition-all',\n props.checked ? 'left-2' : 'right-2',\n )}\n >\n {props.checked ? onLabel : offLabel}\n </span>\n )}\n </SwitchPrimitive.Root>\n\n {showLabels && (\n <span\n ref={measureRef}\n className=\"pointer-events-none invisible absolute font-sans text-base font-bold whitespace-nowrap uppercase\"\n >\n {onLabel.length > offLabel.length ? onLabel : offLabel}\n </span>\n )}\n </>\n );\n}\n\nexport { Switch };\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunk3IALNK6B_cjs=require('./chunk-3IALNK6B.cjs'),chunkHYP7A6HK_cjs=require('./chunk-HYP7A6HK.cjs'),chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),lu=require('react-icons/lu'),react=require('react'),jsxRuntime=require('react/jsx-runtime');var j=({classNames:a=void 0,options:t,preSearchOptions:S=void 0,onChange:w=void 0,onOpenChange:d=void 0,placeholder:O="Select an option",searchLabel:P="Search...",notFoundMessage:k="Not found.",value:i=void 0,size:L="default"})=>{let[s,p]=react.useState(false),[N,l]=react.useState(false),z=N?t:S||t;return jsxRuntime.jsxs(chunk3IALNK6B_cjs.a,{open:s,onOpenChange:()=>{p(!s),l(false),d?.(!s);},children:[jsxRuntime.jsxs(chunk3IALNK6B_cjs.b,{className:chunkQRO22BPZ_cjs.a("focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive hover:border-dark-green inline-flex h-12 w-full shrink-0 cursor-pointer items-center justify-between gap-2 rounded-md border px-4 whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-5",L==="sm"&&"py-xs h-8 px-3 [&_svg:not([class*='size-'])]:size-4",a?.trigger),children:[jsxRuntime.jsxs("div",{className:"flex items-center gap-2",children:[!i&&jsxRuntime.jsx(lu.LuSearch,{}),i?t.find(e=>e.value===i)?.label:O]}),jsxRuntime.jsx(lu.LuChevronsUpDown,{className:"opacity-50"})]}),jsxRuntime.jsx(chunk3IALNK6B_cjs.c,{className:chunkQRO22BPZ_cjs.a("w-[var(--radix-popover-trigger-width)] p-0",a?.content),children:jsxRuntime.jsxs(chunkHYP7A6HK_cjs.a,{children:[jsxRuntime.jsx(chunkHYP7A6HK_cjs.c,{placeholder:P,className:chunkQRO22BPZ_cjs.a("h-9",a?.input),onValueChange:e=>l(!!e)}),jsxRuntime.jsxs(chunkHYP7A6HK_cjs.d,{children:[jsxRuntime.jsx(chunkHYP7A6HK_cjs.e,{children:k}),jsxRuntime.jsx(chunkHYP7A6HK_cjs.f,{children:z.map(e=>jsxRuntime.jsxs(chunkHYP7A6HK_cjs.h,{value:e.value,keywords:[e.label,e.additionalSearchText??""],onSelect:m=>{w?.(m===i?"":m),p(false),d?.(false);},className:a?.item,children:[e.label,jsxRuntime.jsx(lu.LuCheck,{className:chunkQRO22BPZ_cjs.a("ml-auto",i===e.value?"opacity-100":"opacity-0")})]},e.value))})]})]})})]})};exports.a=j;//# sourceMappingURL=chunk-QJVDJTD4.cjs.map
2
+ //# sourceMappingURL=chunk-QJVDJTD4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/v2/combobox/combobox.tsx"],"names":["Combobox","classNames","options","preSearchOptions","onChange","onOpenChange","placeholder","searchLabel","notFoundMessage","value","size","open","setOpen","useState","isSearching","setIsSearching","optionsToDisplay","jsxs","Popover","PopoverTrigger","cn","jsx","LuSearch","item","LuChevronsUpDown","PopoverContent","Command","CommandInput","val","CommandList","CommandEmpty","CommandGroup","CommandItem","currentValue","LuCheck"],"mappings":"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","file":"chunk-QJVDJTD4.cjs","sourcesContent":["import { LuCheck, LuChevronsUpDown, LuSearch } from 'react-icons/lu';\nimport { useState } from 'react';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/v2/popover/popover';\nimport { cn } from '@/lib/utils';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '@/v2/command/command';\n\ntype ComboboxOption = {\n label: string;\n value: string;\n additionalSearchText?: string;\n};\n\ntype ComboboxProps = {\n classNames?: {\n content?: string;\n input?: string;\n item?: string;\n trigger?: string;\n };\n options: ComboboxOption[];\n preSearchOptions?: ComboboxOption[];\n onChange?: (value: string) => void;\n onOpenChange?: (open: boolean) => void;\n placeholder?: string;\n searchLabel?: string;\n notFoundMessage?: string;\n value?: string;\n size?: 'default' | 'sm';\n};\n\nexport const Combobox = ({\n classNames = undefined,\n options,\n preSearchOptions = undefined,\n onChange = undefined,\n onOpenChange = undefined,\n placeholder = 'Select an option',\n searchLabel = 'Search...',\n notFoundMessage = 'Not found.',\n value = undefined,\n size = 'default',\n}: ComboboxProps) => {\n const [open, setOpen] = useState(false);\n\n // Allow filtering down to just a subset of options before searching\n // NOTE: preSearchOptions is optional, while options is a required prop that we can fallback to\n const [isSearching, setIsSearching] = useState(false);\n const optionsToDisplay = isSearching ? options : preSearchOptions || options;\n\n const handleOpenChange = () => {\n setOpen(!open);\n setIsSearching(false);\n onOpenChange?.(!open);\n };\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger\n className={cn(\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive hover:border-dark-green inline-flex h-12 w-full shrink-0 cursor-pointer items-center justify-between gap-2 rounded-md border px-4 whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-5\",\n size === 'sm' && \"py-xs h-8 px-3 [&_svg:not([class*='size-'])]:size-4\",\n classNames?.trigger,\n )}\n >\n <div className=\"flex items-center gap-2\">\n {!value && <LuSearch />}\n {value ? options.find((item) => item.value === value)?.label : placeholder}\n </div>\n <LuChevronsUpDown className=\"opacity-50\" />\n </PopoverTrigger>\n <PopoverContent\n className={cn('w-[var(--radix-popover-trigger-width)] p-0', classNames?.content)}\n >\n <Command>\n <CommandInput\n placeholder={searchLabel}\n className={cn('h-9', classNames?.input)}\n onValueChange={(val) => setIsSearching(!!val)}\n />\n <CommandList>\n <CommandEmpty>{notFoundMessage}</CommandEmpty>\n <CommandGroup>\n {optionsToDisplay.map((item) => (\n <CommandItem\n key={item.value}\n value={item.value}\n keywords={[item.label, item.additionalSearchText ?? '']}\n onSelect={(currentValue) => {\n onChange?.(currentValue === value ? '' : currentValue);\n setOpen(false);\n onOpenChange?.(false);\n }}\n className={classNames?.item}\n >\n {item.label}\n <LuCheck\n className={cn('ml-auto', value === item.value ? 'opacity-100' : 'opacity-0')}\n />\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n};\n"]}
@@ -23,5 +23,5 @@ import {a}from'./chunk-YTIIAU4W.js';import*as s from'react';import {useState}fro
23
23
  aria-invalid:ring-destructive/20
24
24
  dark:aria-invalid:ring-destructive/40
25
25
  aria-invalid:border-destructive
26
- `,search:"pr-8"}},defaultVariants:{variant:"default"}}),z=s.forwardRef(({className:f,variant:t,type:d,wrapperClassName:m=void 0,label:n,helperText:l,charLength:o,value:i,defaultValue:b,onChange:v,id:g,labelProps:h,...x},w)=>{let[y,N]=useState(i||b||""),u=g||s.useId(),c=i!==void 0?i:y,R=String(c).length,I=p=>{i===void 0&&N(p.target.value),v?.(p);};return jsxs("div",{className:a("relative w-full",m),children:[n&&(typeof n=="string"?jsx("label",{htmlFor:u,className:"header-xs text-primary mb-2 block font-bold",...h,children:n}):n),jsxs("div",{className:"relative",children:[jsx("input",{ref:w,id:u,type:d,"data-slot":"input",className:a(L({variant:t}),f),value:c,onChange:I,...x}),t==="invalid"&&jsx(HiOutlineExclamationCircle,{size:"1.5rem",className:"text-destructive pointer-events-none absolute top-3 right-2"}),t==="search"&&jsx(LuSearch,{size:"1.25rem",className:"text-muted-foreground pointer-events-none absolute top-4 right-3"}),d==="time"&&jsx(LuClock4,{size:"1.25rem",className:"text-muted-foreground pointer-events-none absolute top-3.5 right-3"})]}),(l||o)&&jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsx("span",{className:a("text-sm",t==="invalid"?"text-destructive":"text-secondary"),children:l||""}),o&&jsxs("span",{className:a("text-sm",t==="invalid"?"text-destructive":"text-secondary"),children:[R,"/",o]})]})]})});z.displayName="Input";export{L as a,z as b};//# sourceMappingURL=chunk-LNCG5XTP.js.map
27
- //# sourceMappingURL=chunk-LNCG5XTP.js.map
26
+ `,search:"pr-8"}},defaultVariants:{variant:"default"}}),z=s.forwardRef(({className:f,variant:t,type:d,wrapperClassName:m=void 0,label:n,helperText:l,charLength:o,value:i,defaultValue:b,onChange:v,id:g,labelProps:h,...x},w)=>{let[y,N]=useState(i||b||""),u=g||s.useId(),c=i!==void 0?i:y,R=String(c).length,I=p=>{i===void 0&&N(p.target.value),v?.(p);};return jsxs("div",{className:a("relative w-full",m),children:[n&&(typeof n=="string"?jsx("label",{htmlFor:u,className:"header-xs text-primary mb-2 block font-bold",...h,children:n}):n),jsxs("div",{className:"relative",children:[jsx("input",{ref:w,id:u,type:d,"data-slot":"input",className:a(L({variant:t}),f),value:c,onChange:I,...x}),t==="invalid"&&jsx(HiOutlineExclamationCircle,{size:"1.5rem",className:"text-destructive pointer-events-none absolute top-3 right-2"}),t==="search"&&jsx(LuSearch,{size:"1.25rem",className:"text-muted-foreground pointer-events-none absolute top-3.5 right-3"}),d==="time"&&jsx(LuClock4,{size:"1.25rem",className:"text-muted-foreground pointer-events-none absolute top-3.5 right-3"})]}),(l||o)&&jsxs("div",{className:"mt-2 flex items-center justify-between",children:[jsx("span",{className:a("text-sm",t==="invalid"?"text-destructive":"text-secondary"),children:l||""}),o&&jsxs("span",{className:a("text-sm",t==="invalid"?"text-destructive":"text-secondary"),children:[R,"/",o]})]})]})});z.displayName="Input";export{L as a,z as b};//# sourceMappingURL=chunk-QVOCV3VP.js.map
27
+ //# sourceMappingURL=chunk-QVOCV3VP.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/v2/input/input.tsx"],"names":["inputVariants","cva","Input","className","variant","type","wrapperClassName","label","helperText","charLength","value","defaultValue","onChange","id","labelProps","props","ref","internalValue","setInternalValue","useState","inputId","currentValue","currentLength","handleChange","e","jsxs","cn","jsx","HiOutlineExclamationCircle","LuSearch","LuClock4"],"mappings":"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","file":"chunk-LNCG5XTP.js","sourcesContent":["import * as React from 'react';\nimport { ForwardedRef, useState } from 'react';\nimport { cva, VariantProps } from 'class-variance-authority';\nimport { HiOutlineExclamationCircle } from 'react-icons/hi2';\nimport { LuClock4, LuSearch } from 'react-icons/lu';\n\nimport { cn } from '@/lib/utils';\n\nconst inputVariants = cva(\n `\n flex items-center h-12 w-full min-w-0 rounded-md border bg-white px-3 py-3 text-base transition-all outline-none\n dark:bg-input/30 border-input shadow-xs\n placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground\n file:inline-flex file:h-6 file:mr-2 file:border-0 file:text-foreground\n disabled:cursor-not-allowed disabled:opacity-50 disabled:pointer-events-none disabled:bg-gray-200\n focus-visible:ring-ring/50 focus-visible:ring-[3px] \n `,\n {\n variants: {\n variant: {\n default: `\n hover:enabled:border-dark-green \n focus:enabled:border-dark-green\n focus:enabled:shadow-green-300\n focus-within:shadow\n focus-within:shadow-green-300\n focus-visible:border-dark-green \n `,\n invalid: `\n border-destructive\n hover:border-destructive\n focus:border-destructive\n focus:shadow-red-100\n focus-within:shadow\n focus-within:shadow-red-100\n focus-visible:border-destructive\n aria-invalid:ring-destructive/20\n dark:aria-invalid:ring-destructive/40\n aria-invalid:border-destructive \n `,\n search: 'pr-8',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\ntype InputProps = React.ComponentProps<'input'> &\n VariantProps<typeof inputVariants> & {\n wrapperClassName?: string;\n label?: React.ReactNode;\n helperText?: string;\n charLength?: number;\n labelProps?: React.ComponentProps<'label'>;\n };\n\nconst Input = React.forwardRef(\n (\n {\n className,\n variant,\n type,\n wrapperClassName = undefined,\n label,\n helperText,\n charLength,\n value,\n defaultValue,\n onChange,\n id,\n labelProps,\n ...props\n }: InputProps,\n ref?: ForwardedRef<HTMLInputElement>,\n ) => {\n const [internalValue, setInternalValue] = useState((value || defaultValue || '') as string);\n const inputId = id || React.useId();\n\n const currentValue = value !== undefined ? value : internalValue;\n const currentLength = String(currentValue).length;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n onChange?.(e);\n };\n\n return (\n <div className={cn('relative w-full', wrapperClassName)}>\n {label &&\n (typeof label === 'string' ? (\n <label\n htmlFor={inputId}\n className=\"header-xs text-primary mb-2 block font-bold\"\n {...labelProps}\n >\n {label}\n </label>\n ) : (\n label\n ))}\n <div className=\"relative\">\n <input\n ref={ref}\n id={inputId}\n type={type}\n data-slot=\"input\"\n className={cn(inputVariants({ variant }), className)}\n value={currentValue}\n onChange={handleChange}\n {...props}\n />\n {variant === 'invalid' && (\n <HiOutlineExclamationCircle\n size=\"1.5rem\"\n className=\"text-destructive pointer-events-none absolute top-3 right-2\"\n />\n )}\n {variant === 'search' && (\n <LuSearch\n size=\"1.25rem\"\n className=\"text-muted-foreground pointer-events-none absolute top-4 right-3\"\n />\n )}\n {type === 'time' && (\n <LuClock4\n size=\"1.25rem\"\n className=\"text-muted-foreground pointer-events-none absolute top-3.5 right-3\"\n />\n )}\n </div>\n {(helperText || charLength) && (\n <div className=\"mt-2 flex items-center justify-between\">\n <span\n className={cn(\n 'text-sm',\n variant === 'invalid' ? 'text-destructive' : 'text-secondary',\n )}\n >\n {helperText || ''}\n </span>\n {charLength && (\n <span\n className={cn(\n 'text-sm',\n variant === 'invalid' ? 'text-destructive' : 'text-secondary',\n )}\n >\n {currentLength}/{charLength}\n </span>\n )}\n </div>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = 'Input';\n\nexport { Input, inputVariants };\n"]}
1
+ {"version":3,"sources":["../src/v2/input/input.tsx"],"names":["inputVariants","cva","Input","className","variant","type","wrapperClassName","label","helperText","charLength","value","defaultValue","onChange","id","labelProps","props","ref","internalValue","setInternalValue","useState","inputId","currentValue","currentLength","handleChange","e","jsxs","cn","jsx","HiOutlineExclamationCircle","LuSearch","LuClock4"],"mappings":"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","file":"chunk-QVOCV3VP.js","sourcesContent":["import * as React from 'react';\nimport { ForwardedRef, useState } from 'react';\nimport { cva, VariantProps } from 'class-variance-authority';\nimport { HiOutlineExclamationCircle } from 'react-icons/hi2';\nimport { LuClock4, LuSearch } from 'react-icons/lu';\n\nimport { cn } from '@/lib/utils';\n\nconst inputVariants = cva(\n `\n flex items-center h-12 w-full min-w-0 rounded-md border bg-white px-3 py-3 text-base transition-all outline-none\n dark:bg-input/30 border-input shadow-xs\n placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground\n file:inline-flex file:h-6 file:mr-2 file:border-0 file:text-foreground\n disabled:cursor-not-allowed disabled:opacity-50 disabled:pointer-events-none disabled:bg-gray-200\n focus-visible:ring-ring/50 focus-visible:ring-[3px] \n `,\n {\n variants: {\n variant: {\n default: `\n hover:enabled:border-dark-green \n focus:enabled:border-dark-green\n focus:enabled:shadow-green-300\n focus-within:shadow\n focus-within:shadow-green-300\n focus-visible:border-dark-green \n `,\n invalid: `\n border-destructive\n hover:border-destructive\n focus:border-destructive\n focus:shadow-red-100\n focus-within:shadow\n focus-within:shadow-red-100\n focus-visible:border-destructive\n aria-invalid:ring-destructive/20\n dark:aria-invalid:ring-destructive/40\n aria-invalid:border-destructive \n `,\n search: 'pr-8',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\ntype InputProps = React.ComponentProps<'input'> &\n VariantProps<typeof inputVariants> & {\n wrapperClassName?: string;\n label?: React.ReactNode;\n helperText?: string;\n charLength?: number;\n labelProps?: React.ComponentProps<'label'>;\n };\n\nconst Input = React.forwardRef(\n (\n {\n className,\n variant,\n type,\n wrapperClassName = undefined,\n label,\n helperText,\n charLength,\n value,\n defaultValue,\n onChange,\n id,\n labelProps,\n ...props\n }: InputProps,\n ref?: ForwardedRef<HTMLInputElement>,\n ) => {\n const [internalValue, setInternalValue] = useState((value || defaultValue || '') as string);\n const inputId = id || React.useId();\n\n const currentValue = value !== undefined ? value : internalValue;\n const currentLength = String(currentValue).length;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n onChange?.(e);\n };\n\n return (\n <div className={cn('relative w-full', wrapperClassName)}>\n {label &&\n (typeof label === 'string' ? (\n <label\n htmlFor={inputId}\n className=\"header-xs text-primary mb-2 block font-bold\"\n {...labelProps}\n >\n {label}\n </label>\n ) : (\n label\n ))}\n <div className=\"relative\">\n <input\n ref={ref}\n id={inputId}\n type={type}\n data-slot=\"input\"\n className={cn(inputVariants({ variant }), className)}\n value={currentValue}\n onChange={handleChange}\n {...props}\n />\n {variant === 'invalid' && (\n <HiOutlineExclamationCircle\n size=\"1.5rem\"\n className=\"text-destructive pointer-events-none absolute top-3 right-2\"\n />\n )}\n {variant === 'search' && (\n <LuSearch\n size=\"1.25rem\"\n className=\"text-muted-foreground pointer-events-none absolute top-3.5 right-3\"\n />\n )}\n {type === 'time' && (\n <LuClock4\n size=\"1.25rem\"\n className=\"text-muted-foreground pointer-events-none absolute top-3.5 right-3\"\n />\n )}\n </div>\n {(helperText || charLength) && (\n <div className=\"mt-2 flex items-center justify-between\">\n <span\n className={cn(\n 'text-sm',\n variant === 'invalid' ? 'text-destructive' : 'text-secondary',\n )}\n >\n {helperText || ''}\n </span>\n {charLength && (\n <span\n className={cn(\n 'text-sm',\n variant === 'invalid' ? 'text-destructive' : 'text-secondary',\n )}\n >\n {currentLength}/{charLength}\n </span>\n )}\n </div>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = 'Input';\n\nexport { Input, inputVariants };\n"]}
@@ -0,0 +1,2 @@
1
+ import {a,b,c}from'./chunk-UDU6Z7PN.js';import {a as a$2,c as c$1,d,e,f,h}from'./chunk-XMEBDMUG.js';import {a as a$1}from'./chunk-YTIIAU4W.js';import {LuSearch,LuChevronsUpDown,LuCheck}from'react-icons/lu';import {useState}from'react';import {jsxs,jsx}from'react/jsx-runtime';var j=({classNames:a$3=void 0,options:t,preSearchOptions:S=void 0,onChange:w=void 0,onOpenChange:d$1=void 0,placeholder:O="Select an option",searchLabel:P="Search...",notFoundMessage:k="Not found.",value:i=void 0,size:L="default"})=>{let[s,p]=useState(false),[N,l]=useState(false),z=N?t:S||t;return jsxs(a,{open:s,onOpenChange:()=>{p(!s),l(false),d$1?.(!s);},children:[jsxs(b,{className:a$1("focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive hover:border-dark-green inline-flex h-12 w-full shrink-0 cursor-pointer items-center justify-between gap-2 rounded-md border px-4 whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-5",L==="sm"&&"py-xs h-8 px-3 [&_svg:not([class*='size-'])]:size-4",a$3?.trigger),children:[jsxs("div",{className:"flex items-center gap-2",children:[!i&&jsx(LuSearch,{}),i?t.find(e=>e.value===i)?.label:O]}),jsx(LuChevronsUpDown,{className:"opacity-50"})]}),jsx(c,{className:a$1("w-[var(--radix-popover-trigger-width)] p-0",a$3?.content),children:jsxs(a$2,{children:[jsx(c$1,{placeholder:P,className:a$1("h-9",a$3?.input),onValueChange:e=>l(!!e)}),jsxs(d,{children:[jsx(e,{children:k}),jsx(f,{children:z.map(e=>jsxs(h,{value:e.value,keywords:[e.label,e.additionalSearchText??""],onSelect:m=>{w?.(m===i?"":m),p(false),d$1?.(false);},className:a$3?.item,children:[e.label,jsx(LuCheck,{className:a$1("ml-auto",i===e.value?"opacity-100":"opacity-0")})]},e.value))})]})]})})]})};export{j as a};//# sourceMappingURL=chunk-ZO25Y6HY.js.map
2
+ //# sourceMappingURL=chunk-ZO25Y6HY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/v2/combobox/combobox.tsx"],"names":["Combobox","classNames","options","preSearchOptions","onChange","onOpenChange","placeholder","searchLabel","notFoundMessage","value","size","open","setOpen","useState","isSearching","setIsSearching","optionsToDisplay","jsxs","Popover","PopoverTrigger","cn","jsx","LuSearch","item","LuChevronsUpDown","PopoverContent","Command","CommandInput","val","CommandList","CommandEmpty","CommandGroup","CommandItem","currentValue","LuCheck"],"mappings":"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","file":"chunk-ZO25Y6HY.js","sourcesContent":["import { LuCheck, LuChevronsUpDown, LuSearch } from 'react-icons/lu';\nimport { useState } from 'react';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/v2/popover/popover';\nimport { cn } from '@/lib/utils';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '@/v2/command/command';\n\ntype ComboboxOption = {\n label: string;\n value: string;\n additionalSearchText?: string;\n};\n\ntype ComboboxProps = {\n classNames?: {\n content?: string;\n input?: string;\n item?: string;\n trigger?: string;\n };\n options: ComboboxOption[];\n preSearchOptions?: ComboboxOption[];\n onChange?: (value: string) => void;\n onOpenChange?: (open: boolean) => void;\n placeholder?: string;\n searchLabel?: string;\n notFoundMessage?: string;\n value?: string;\n size?: 'default' | 'sm';\n};\n\nexport const Combobox = ({\n classNames = undefined,\n options,\n preSearchOptions = undefined,\n onChange = undefined,\n onOpenChange = undefined,\n placeholder = 'Select an option',\n searchLabel = 'Search...',\n notFoundMessage = 'Not found.',\n value = undefined,\n size = 'default',\n}: ComboboxProps) => {\n const [open, setOpen] = useState(false);\n\n // Allow filtering down to just a subset of options before searching\n // NOTE: preSearchOptions is optional, while options is a required prop that we can fallback to\n const [isSearching, setIsSearching] = useState(false);\n const optionsToDisplay = isSearching ? options : preSearchOptions || options;\n\n const handleOpenChange = () => {\n setOpen(!open);\n setIsSearching(false);\n onOpenChange?.(!open);\n };\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger\n className={cn(\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive hover:border-dark-green inline-flex h-12 w-full shrink-0 cursor-pointer items-center justify-between gap-2 rounded-md border px-4 whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-5\",\n size === 'sm' && \"py-xs h-8 px-3 [&_svg:not([class*='size-'])]:size-4\",\n classNames?.trigger,\n )}\n >\n <div className=\"flex items-center gap-2\">\n {!value && <LuSearch />}\n {value ? options.find((item) => item.value === value)?.label : placeholder}\n </div>\n <LuChevronsUpDown className=\"opacity-50\" />\n </PopoverTrigger>\n <PopoverContent\n className={cn('w-[var(--radix-popover-trigger-width)] p-0', classNames?.content)}\n >\n <Command>\n <CommandInput\n placeholder={searchLabel}\n className={cn('h-9', classNames?.input)}\n onValueChange={(val) => setIsSearching(!!val)}\n />\n <CommandList>\n <CommandEmpty>{notFoundMessage}</CommandEmpty>\n <CommandGroup>\n {optionsToDisplay.map((item) => (\n <CommandItem\n key={item.value}\n value={item.value}\n keywords={[item.label, item.additionalSearchText ?? '']}\n onSelect={(currentValue) => {\n onChange?.(currentValue === value ? '' : currentValue);\n setOpen(false);\n onOpenChange?.(false);\n }}\n className={classNames?.item}\n >\n {item.label}\n <LuCheck\n className={cn('ml-auto', value === item.value ? 'opacity-100' : 'opacity-0')}\n />\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n};\n"]}