@solace-health/ui 0.10.504 → 0.10.506

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.
@@ -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 ve(r,i){let[l,f]=react.useState(r);return react.useEffect(()=>{let a=setTimeout(()=>f(r),i||500);return ()=>{clearTimeout(a);}},[r,i]),l}function D(r,i){if(r.length===0)return {};if(!i)return {"":r};let l={};return r.forEach(f=>{let a=f[i]||"";l[a]||(l[a]=[]),l[a].push(f);}),l}var Q=react.forwardRef(({className:r,...i},l)=>cmdk.useCommandState(a=>a.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 he=react.forwardRef(({value:r,onChange:i,placeholder:l,defaultOptions:f=[],options:a,delay:Z,onSearch:b,onSearchSync:K,loadingIndicator:_,emptyIndicator:k,maxSelected:S=0,onMaxSelected:j,hidePlaceholderWhenSelected:F=true,disabled:g,groupBy:v,className:$,badgeClassName:ee,getBadgeClassName:te=()=>"",selectFirstItem:ne=true,triggerSearchOnFocus:M=false,commandProps:m,inputProps:O},oe)=>{let u=react.useRef(null),[d,I]=react.useState(false),[re,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=ve(z,Z||500),ae=d?lu.LuChevronUp:lu.LuChevronDown;react.useImperativeHandle(oe,()=>({selectedValue:[...n],input:u.current,focus:()=>u?.current?.focus(),reset:()=>H([])}),[n]);let C=e=>{V.current&&!V.current.contains(e.target)&&u.current&&!u.current.contains(e.target)&&(I(false),u.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]),ie=react.useCallback(e=>{let o=u.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(()=>(d?(document.addEventListener("mousedown",C),document.addEventListener("touchend",C)):(document.removeEventListener("mousedown",C),document.removeEventListener("touchend",C)),()=>{document.removeEventListener("mousedown",C),document.removeEventListener("touchend",C);}),[d]),react.useEffect(()=>{r&&H(r);},[r]),react.useEffect(()=>{if(!a||b)return;let e=D(a||[],v);Object.entries(e).length!==Object.entries(E).length&&G(e);},[f,a,v,b,E]),react.useEffect(()=>{let e=()=>{let t=K?.(x);G(D(t||[],v));};(async()=>{!K||!d||(M&&e(),x&&e());})();},[x,v,d,M]),react.useEffect(()=>{let e=async()=>{W(true);let t=await b?.(x);G(D(t||[],v)),W(false);};(async()=>{!b||!d||(M&&await e(),x&&await e());})();},[x,v,d,M]);let le=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]),ue=react.useCallback(()=>{if(m?.filter)return m.filter},[m?.filter]);return jsxRuntime.jsxs(chunkHYP7A6HK_cjs.a,{ref:V,...m,onKeyDown:e=>{ie(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:ue(),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",d&&"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||u?.current?.focus();},disabled:g,children:[jsxRuntime.jsxs("div",{className:"relative flex gap-1 overflow-auto [&::-webkit-scrollbar]:h-0",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",ee,te(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:u,value:z,disabled:g,onValueChange:e=>{U(e),O?.onValueChange?.(e);},onBlur:e=>{re||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(ae,{className:chunkQRO22BPZ_cjs.a("size-5 min-w-5 cursor-pointer",g&&"text-gray-600")})]}),jsxRuntime.jsx("div",{className:"relative",children:d&&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:()=>{u?.current?.focus();},children:se?_:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[le(),!ne&&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))]})})})]})});he.displayName="MultiSelect";exports.a=ve;exports.b=he;//# sourceMappingURL=chunk-ESO2MGAY.cjs.map
2
+ //# sourceMappingURL=chunk-ESO2MGAY.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","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-ESO2MGAY.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 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 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 className=\"relative flex gap-1 overflow-auto [&::-webkit-scrollbar]:h-0\">\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 {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 ve(r,i){let[l,f]=useState(r);return useEffect(()=>{let a=setTimeout(()=>f(r),i||500);return ()=>{clearTimeout(a);}},[r,i]),l}function D(r,i){if(r.length===0)return {};if(!i)return {"":r};let l={};return r.forEach(f=>{let a=f[i]||"";l[a]||(l[a]=[]),l[a].push(f);}),l}var Q=forwardRef(({className:r,...i},l)=>useCommandState(a=>a.filtered.count===0)?jsx("div",{ref:l,className:a("py-6 text-center text-sm",r),role:"presentation",...i}):null);Q.displayName="CommandEmpty";var he=forwardRef(({value:r,onChange:i,placeholder:l,defaultOptions:f$1=[],options:a$2,delay:Z,onSearch:b$1,onSearchSync:K,loadingIndicator:_,emptyIndicator:k,maxSelected:S=0,onMaxSelected:j,hidePlaceholderWhenSelected:F=true,disabled:g,groupBy:v,className:$,badgeClassName:ee,getBadgeClassName:te=()=>"",selectFirstItem:ne=true,triggerSearchOnFocus:M=false,commandProps:m,inputProps:O},oe)=>{let u=useRef(null),[d$1,I]=useState(false),[re,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=ve(z,Z||500),ae=d$1?LuChevronUp:LuChevronDown;useImperativeHandle(oe,()=>({selectedValue:[...n],input:u.current,focus:()=>u?.current?.focus(),reset:()=>H([])}),[n]);let C=e=>{V.current&&!V.current.contains(e.target)&&u.current&&!u.current.contains(e.target)&&(I(false),u.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]),ie=useCallback(e=>{let o=u.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(()=>(d$1?(document.addEventListener("mousedown",C),document.addEventListener("touchend",C)):(document.removeEventListener("mousedown",C),document.removeEventListener("touchend",C)),()=>{document.removeEventListener("mousedown",C),document.removeEventListener("touchend",C);}),[d$1]),useEffect(()=>{r&&H(r);},[r]),useEffect(()=>{if(!a$2||b$1)return;let e=D(a$2||[],v);Object.entries(e).length!==Object.entries(E).length&&G(e);},[f$1,a$2,v,b$1,E]),useEffect(()=>{let e=()=>{let t=K?.(x);G(D(t||[],v));};(async()=>{!K||!d$1||(M&&e(),x&&e());})();},[x,v,d$1,M]),useEffect(()=>{let e=async()=>{W(true);let t=await b$1?.(x);G(D(t||[],v)),W(false);};(async()=>{!b$1||!d$1||(M&&await e(),x&&await e());})();},[x,v,d$1,M]);let le=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]),ue=useCallback(()=>{if(m?.filter)return m.filter},[m?.filter]);return jsxs(a$1,{ref:V,...m,onKeyDown:e=>{ie(e),m?.onKeyDown?.(e);},className:a("h-auto overflow-visible bg-transparent",m?.className),shouldFilter:m?.shouldFilter!==void 0?m.shouldFilter:!b$1,filter:ue(),children:[jsxs("button",{type:"button",className:a("items-center justify-between gap-2 p-3 whitespace-nowrap","border-input rounded-md border bg-white",d$1&&"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||u?.current?.focus();},disabled:g,children:[jsxs("div",{className:"relative flex gap-1 overflow-auto [&::-webkit-scrollbar]:h-0",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",ee,te(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:u,value:z,disabled:g,onValueChange:e=>{U(e),O?.onValueChange?.(e);},onBlur:e=>{re||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(ae,{className:a("size-5 min-w-5 cursor-pointer",g&&"text-gray-600")})]}),jsx("div",{className:"relative",children:d$1&&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:()=>{u?.current?.focus();},children:se?_:jsxs(Fragment,{children:[le(),!ne&&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))]})})})]})});he.displayName="MultiSelect";export{ve as a,he as b};//# sourceMappingURL=chunk-FZ4SG3S6.js.map
2
+ //# sourceMappingURL=chunk-FZ4SG3S6.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","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-FZ4SG3S6.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 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 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 className=\"relative flex gap-1 overflow-auto [&::-webkit-scrollbar]:h-0\">\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 chunkN7CG3YGC_cjs=require('./chunk-N7CG3YGC.cjs'),chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),react=require('react'),cmdk=require('cmdk'),lu=require('react-icons/lu'),jsxRuntime=require('react/jsx-runtime');var C=react.forwardRef(({className:o,...e},a)=>jsxRuntime.jsx(cmdk.Command,{"data-slot":"command",ref:a,className:chunkQRO22BPZ_cjs.a("bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",o),...e}));function P({title:o="Command Palette",description:e="Search for a command to run...",children:a,className:c,...u}){return jsxRuntime.jsxs(chunkN7CG3YGC_cjs.a,{...u,children:[jsxRuntime.jsxs(chunkN7CG3YGC_cjs.g,{className:"sr-only",children:[jsxRuntime.jsx(chunkN7CG3YGC_cjs.i,{children:o}),jsxRuntime.jsx(chunkN7CG3YGC_cjs.j,{children:e})]}),jsxRuntime.jsx(chunkN7CG3YGC_cjs.f,{className:chunkQRO22BPZ_cjs.a("overflow-hidden p-0",c),children:jsxRuntime.jsx(C,{className:"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5",children:a})})]})}function w({className:o,...e}){return jsxRuntime.jsxs("div",{"data-slot":"command-input-wrapper",className:"flex h-9 items-center gap-2 border-b px-3",children:[jsxRuntime.jsx(lu.LuSearch,{className:"size-4 shrink-0 opacity-50"}),jsxRuntime.jsx(cmdk.Command.Input,{"data-slot":"command-input",className:chunkQRO22BPZ_cjs.a("placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 outline-hidden disabled:cursor-not-allowed disabled:opacity-50",o),...e})]})}function D({className:o,...e}){return jsxRuntime.jsx(cmdk.Command.List,{"data-slot":"command-list",className:chunkQRO22BPZ_cjs.a("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",o),...e})}function N({...o}){return jsxRuntime.jsx(cmdk.Command.Empty,{"data-slot":"command-empty",className:"py-6 text-center",...o})}function b({className:o,...e}){return jsxRuntime.jsx(cmdk.Command.Group,{"data-slot":"command-group",className:chunkQRO22BPZ_cjs.a("text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium",o),...e})}function I({className:o,...e}){return jsxRuntime.jsx(cmdk.Command.Separator,{"data-slot":"command-separator",className:chunkQRO22BPZ_cjs.a("bg-border -mx-1 h-px",o),...e})}function S({className:o,...e}){return jsxRuntime.jsx(cmdk.Command.Item,{"data-slot":"command-item",className:chunkQRO22BPZ_cjs.a("data-[selected=true]:bg-accent data-[selected=true]:text-primary [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",o),...e})}function L({className:o,...e}){return jsxRuntime.jsx("span",{"data-slot":"command-shortcut",className:chunkQRO22BPZ_cjs.a("text-muted-foreground ml-auto text-xs tracking-widest",o),...e})}exports.a=C;exports.b=P;exports.c=w;exports.d=D;exports.e=N;exports.f=b;exports.g=I;exports.h=S;exports.i=L;//# sourceMappingURL=chunk-HYP7A6HK.cjs.map
2
+ //# sourceMappingURL=chunk-HYP7A6HK.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/v2/command/command.tsx"],"names":["Command","forwardRef","className","props","forwardedRef","jsx","CommandPrimitive","cn","CommandDialog","title","description","children","jsxs","Dialog","DialogHeader","DialogTitle","DialogDescription","DialogContent","CommandInput","LuSearch","CommandList","CommandEmpty","CommandGroup","CommandSeparator","CommandItem","CommandShortcut"],"mappings":"sOAaMA,IAAAA,CAAAA,CAAUC,gBACd,CAAA,CAAC,CAAE,SAAA,CAAAC,EAAW,GAAGC,CAAM,CAAGC,CAAAA,CAAAA,GAEtBC,cAACC,CAAAA,YAAAA,CAAA,CACC,WAAA,CAAU,UACV,GAAKF,CAAAA,CAAAA,CACL,SAAWG,CAAAA,mBAAAA,CACT,2FACAL,CAAAA,CACF,CACC,CAAA,GAAGC,EACN,CAGN,EAEA,SAASK,CAAAA,CAAc,CACrB,KAAA,CAAAC,CAAQ,CAAA,iBAAA,CACR,YAAAC,CAAc,CAAA,gCAAA,CACd,QAAAC,CAAAA,CAAAA,CACA,SAAAT,CAAAA,CAAAA,CACA,GAAGC,CACL,EAIG,CACD,OACES,eAACC,CAAAA,mBAAAA,CAAA,CAAQ,GAAGV,CACV,CAAA,QAAA,CAAA,CAAAS,gBAACE,mBAAA,CAAA,CAAa,SAAU,CAAA,SAAA,CACtB,QAAAT,CAAAA,CAAAA,cAAAA,CAACU,mBAAA,CAAA,CAAa,SAAAN,CAAM,CAAA,CAAA,CACpBJ,cAACW,CAAAA,mBAAAA,CAAA,CAAmB,QAAA,CAAAN,CAAY,CAAA,CAAA,CAAA,CAClC,EACAL,cAACY,CAAAA,mBAAAA,CAAA,CAAc,SAAA,CAAWV,mBAAG,CAAA,qBAAA,CAAuBL,CAAS,CAAA,CAC3D,SAAAG,cAACL,CAAAA,CAAAA,CAAA,CAAQ,SAAA,CAAU,uZAChB,CAAA,QAAA,CAAAW,CACH,CAAA,CAAA,CACF,GACF,CAEJ,CAEA,SAASO,CAAAA,CAAa,CAAE,SAAA,CAAAhB,CAAW,CAAA,GAAGC,CAAM,CAAkD,CAAA,CAC5F,OACES,eAAAA,CAAC,KAAI,CAAA,CAAA,WAAA,CAAU,uBAAwB,CAAA,SAAA,CAAU,4CAC/C,QAAAP,CAAAA,CAAAA,cAAAA,CAACc,WAAA,CAAA,CAAS,SAAU,CAAA,4BAAA,CAA6B,CACjDd,CAAAA,cAAAA,CAACC,aAAiB,KAAjB,CAAA,CACC,WAAU,CAAA,eAAA,CACV,UAAWC,mBACT,CAAA,kJAAA,CACAL,CACF,CAAA,CACC,GAAGC,CACN,CAAA,CAAA,CAAA,CACF,CAEJ,CAEA,SAASiB,CAAAA,CAAY,CAAE,SAAA,CAAAlB,EAAW,GAAGC,CAAM,CAAiD,CAAA,CAC1F,OACEE,cAAAA,CAACC,YAAiB,CAAA,IAAA,CAAjB,CACC,WAAU,CAAA,cAAA,CACV,SAAWC,CAAAA,mBAAAA,CAAG,6DAA+DL,CAAAA,CAAS,CACrF,CAAA,GAAGC,EACN,CAEJ,CAEA,SAASkB,CAAAA,CAAa,CAAE,GAAGlB,CAAM,CAAA,CAAkD,CACjF,OACEE,cAAAA,CAACC,YAAiB,CAAA,KAAA,CAAjB,CAAuB,WAAA,CAAU,eAAgB,CAAA,SAAA,CAAU,mBAAoB,GAAGH,CAAAA,CAAO,CAE9F,CAEA,SAASmB,CAAAA,CAAa,CAAE,SAAA,CAAApB,EAAW,GAAGC,CAAM,CAAkD,CAAA,CAC5F,OACEE,cAAAA,CAACC,YAAiB,CAAA,KAAA,CAAjB,CACC,WAAU,CAAA,eAAA,CACV,SAAWC,CAAAA,mBAAAA,CACT,wNACAL,CAAAA,CACF,CACC,CAAA,GAAGC,EACN,CAEJ,CAEA,SAASoB,CAAAA,CAAiB,CACxB,SAAA,CAAArB,CACA,CAAA,GAAGC,CACL,CAAsD,CAAA,CACpD,OACEE,cAAAA,CAACC,YAAiB,CAAA,SAAA,CAAjB,CACC,WAAA,CAAU,oBACV,SAAWC,CAAAA,mBAAAA,CAAG,sBAAwBL,CAAAA,CAAS,CAC9C,CAAA,GAAGC,CACN,CAAA,CAEJ,CAEA,SAASqB,CAAAA,CAAY,CAAE,SAAA,CAAAtB,CAAW,CAAA,GAAGC,CAAM,CAAA,CAAiD,CAC1F,OACEE,cAAAA,CAACC,YAAiB,CAAA,IAAA,CAAjB,CACC,WAAA,CAAU,cACV,CAAA,SAAA,CAAWC,oBACT,mXACAL,CAAAA,CACF,CACC,CAAA,GAAGC,CACN,CAAA,CAEJ,CAEA,SAASsB,EAAgB,CAAE,SAAA,CAAAvB,CAAW,CAAA,GAAGC,CAAM,CAAA,CAA2B,CACxE,OACEE,eAAC,MACC,CAAA,CAAA,WAAA,CAAU,kBACV,CAAA,SAAA,CAAWE,oBAAG,uDAAyDL,CAAAA,CAAS,CAC/E,CAAA,GAAGC,EACN,CAEJ","file":"chunk-HYP7A6HK.cjs","sourcesContent":["import { ComponentProps, forwardRef } from 'react';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { LuSearch } from 'react-icons/lu';\n\nimport { cn } from '@/lib/utils';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@/v2/dialog/dialog';\n\nconst Command = forwardRef<HTMLDivElement, ComponentProps<typeof CommandPrimitive>>(\n ({ className, ...props }, forwardedRef) => {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n ref={forwardedRef}\n className={cn(\n 'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md',\n className,\n )}\n {...props}\n />\n );\n },\n);\n\nfunction CommandDialog({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n ...props\n}: ComponentProps<typeof Dialog> & {\n title?: string;\n description?: string;\n className?: string;\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent className={cn('overflow-hidden p-0', className)}>\n <Command className=\"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction CommandInput({ className, ...props }: ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div data-slot=\"command-input-wrapper\" className=\"flex h-9 items-center gap-2 border-b px-3\">\n <LuSearch className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n 'placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 outline-hidden disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\nfunction CommandList({ className, ...props }: ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn('max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto', className)}\n {...props}\n />\n );\n}\n\nfunction CommandEmpty({ ...props }: ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty data-slot=\"command-empty\" className=\"py-6 text-center\" {...props} />\n );\n}\n\nfunction CommandGroup({ className, ...props }: ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n 'text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn('bg-border -mx-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction CommandItem({ className, ...props }: ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-primary [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CommandShortcut({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn('text-muted-foreground ml-auto text-xs tracking-widest', className)}\n {...props}\n />\n );\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n"]}
@@ -1,2 +1,2 @@
1
- 'use strict';var chunk3IALNK6B_cjs=require('./chunk-3IALNK6B.cjs'),chunkQQCLAYHR_cjs=require('./chunk-QQCLAYHR.cjs'),chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),lu=require('react-icons/lu'),react=require('react'),jsxRuntime=require('react/jsx-runtime');var D=({classNames:a=void 0,options:s,onChange:y=void 0,onOpenChange:d=void 0,placeholder:x="Select an option",searchLabel:w="Search...",notFoundMessage:P="Not found.",value:r=void 0,size:k="default"})=>{let[t,p]=react.useState(false);return jsxRuntime.jsxs(chunk3IALNK6B_cjs.a,{open:t,onOpenChange:()=>{p(!t),d?.(!t);},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",k==="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:[!r&&jsxRuntime.jsx(lu.LuSearch,{}),r?s.find(e=>e.value===r)?.label:x]}),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(chunkQQCLAYHR_cjs.a,{children:[jsxRuntime.jsx(chunkQQCLAYHR_cjs.c,{placeholder:w,className:chunkQRO22BPZ_cjs.a("h-9",a?.input)}),jsxRuntime.jsxs(chunkQQCLAYHR_cjs.d,{children:[jsxRuntime.jsx(chunkQQCLAYHR_cjs.e,{children:P}),jsxRuntime.jsx(chunkQQCLAYHR_cjs.f,{children:s.map(e=>jsxRuntime.jsxs(chunkQQCLAYHR_cjs.h,{value:e.value,keywords:[e.label],onSelect:l=>{y?.(l===r?"":l),p(false),d?.(false);},className:a?.item,children:[e.label,jsxRuntime.jsx(lu.LuCheck,{className:chunkQRO22BPZ_cjs.a("ml-auto",r===e.value?"opacity-100":"opacity-0")})]},e.value))})]})]})})]})};exports.a=D;//# sourceMappingURL=chunk-RFBFFIHG.cjs.map
2
- //# sourceMappingURL=chunk-RFBFFIHG.cjs.map
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 D=({classNames:a=void 0,options:s,onChange:y=void 0,onOpenChange:d=void 0,placeholder:x="Select an option",searchLabel:w="Search...",notFoundMessage:P="Not found.",value:r=void 0,size:k="default"})=>{let[t,p]=react.useState(false);return jsxRuntime.jsxs(chunk3IALNK6B_cjs.a,{open:t,onOpenChange:()=>{p(!t),d?.(!t);},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",k==="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:[!r&&jsxRuntime.jsx(lu.LuSearch,{}),r?s.find(e=>e.value===r)?.label:x]}),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:w,className:chunkQRO22BPZ_cjs.a("h-9",a?.input)}),jsxRuntime.jsxs(chunkHYP7A6HK_cjs.d,{children:[jsxRuntime.jsx(chunkHYP7A6HK_cjs.e,{children:P}),jsxRuntime.jsx(chunkHYP7A6HK_cjs.f,{children:s.map(e=>jsxRuntime.jsxs(chunkHYP7A6HK_cjs.h,{value:e.value,keywords:[e.label],onSelect:l=>{y?.(l===r?"":l),p(false),d?.(false);},className:a?.item,children:[e.label,jsxRuntime.jsx(lu.LuCheck,{className:chunkQRO22BPZ_cjs.a("ml-auto",r===e.value?"opacity-100":"opacity-0")})]},e.value))})]})]})})]})};exports.a=D;//# sourceMappingURL=chunk-MBKRMANH.cjs.map
2
+ //# sourceMappingURL=chunk-MBKRMANH.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/v2/combobox/combobox.tsx"],"names":["Combobox","classNames","options","onChange","onOpenChange","placeholder","searchLabel","notFoundMessage","value","size","open","setOpen","useState","jsxs","Popover","PopoverTrigger","cn","jsx","LuSearch","item","LuChevronsUpDown","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","currentValue","LuCheck"],"mappings":"mQA8BO,IAAMA,EAAW,CAAC,CACvB,UAAAC,CAAAA,CAAAA,CAAa,MACb,CAAA,OAAA,CAAAC,EACA,QAAAC,CAAAA,CAAAA,CAAW,OACX,YAAAC,CAAAA,CAAAA,CAAe,OACf,WAAAC,CAAAA,CAAAA,CAAc,kBACd,CAAA,WAAA,CAAAC,CAAc,CAAA,WAAA,CACd,gBAAAC,CAAkB,CAAA,YAAA,CAClB,KAAAC,CAAAA,CAAAA,CAAQ,MACR,CAAA,IAAA,CAAAC,EAAO,SACT,CAAA,GAAqB,CACnB,GAAM,CAACC,CAAAA,CAAMC,CAAO,CAAIC,CAAAA,cAAAA,CAAS,KAAK,CAMtC,CAAA,OACEC,gBAACC,mBAAA,CAAA,CAAQ,IAAMJ,CAAAA,CAAAA,CAAM,YANE,CAAA,IAAM,CAC7BC,CAAQ,CAAA,CAACD,CAAI,CAAA,CACbN,CAAe,GAAA,CAACM,CAAI,EACtB,CAAA,CAII,QAAAG,CAAAA,CAAAA,eAAAA,CAACE,mBAAA,CAAA,CACC,UAAWC,mBACT,CAAA,yeAAA,CACAP,CAAS,GAAA,IAAA,EAAQ,qDACjBR,CAAAA,CAAAA,EAAY,OACd,CAEA,CAAA,QAAA,CAAA,CAAAY,eAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,yBAAA,CACZ,WAACL,CAASS,EAAAA,cAAAA,CAACC,WAAA,CAAA,EAAS,CACpBV,CAAAA,CAAAA,CAAQN,EAAQ,IAAMiB,CAAAA,CAAAA,EAASA,CAAK,CAAA,KAAA,GAAUX,CAAK,CAAA,EAAG,MAAQH,CACjE,CAAA,CAAA,CAAA,CACAY,eAACG,mBAAA,CAAA,CAAiB,UAAU,YAAa,CAAA,CAAA,CAAA,CAC3C,CACAH,CAAAA,cAAAA,CAACI,mBAAA,CAAA,CACC,UAAWL,mBAAG,CAAA,4CAAA,CAA8Cf,CAAY,EAAA,OAAO,CAE/E,CAAA,QAAA,CAAAY,gBAACS,mBAAA,CAAA,CACC,QAAAL,CAAAA,CAAAA,cAAAA,CAACM,mBAAA,CAAA,CAAa,YAAajB,CAAa,CAAA,SAAA,CAAWU,oBAAG,KAAOf,CAAAA,CAAAA,EAAY,KAAK,CAAG,CAAA,CAAA,CACjFY,eAACW,CAAAA,mBAAAA,CAAA,CACC,QAAA,CAAA,CAAAP,eAACQ,mBAAA,CAAA,CAAc,QAAAlB,CAAAA,CAAAA,CAAgB,CAC/BU,CAAAA,cAAAA,CAACS,oBAAA,CACE,QAAA,CAAAxB,CAAQ,CAAA,GAAA,CAAKiB,CACZN,EAAAA,eAAAA,CAACc,oBAAA,CAEC,KAAA,CAAOR,EAAK,KACZ,CAAA,QAAA,CAAU,CAACA,CAAK,CAAA,KAAK,CACrB,CAAA,QAAA,CAAWS,CAAiB,EAAA,CAC1BzB,IAAWyB,CAAiBpB,GAAAA,CAAAA,CAAQ,EAAKoB,CAAAA,CAAY,CACrDjB,CAAAA,CAAAA,CAAQ,KAAK,CACbP,CAAAA,CAAAA,GAAe,KAAK,EACtB,CACA,CAAA,SAAA,CAAWH,GAAY,IAEtB,CAAA,QAAA,CAAA,CAAAkB,CAAK,CAAA,KAAA,CACNF,cAACY,CAAAA,UAAAA,CAAA,CACC,SAAWb,CAAAA,mBAAAA,CAAG,SAAWR,CAAAA,CAAAA,GAAUW,CAAK,CAAA,KAAA,CAAQ,cAAgB,WAAW,CAAA,CAC7E,CAbKA,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,KAcZ,CACD,EACH,CACF,CAAA,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAAA,CACF,CAEJ","file":"chunk-RFBFFIHG.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 ComboboxProps = {\n classNames?: {\n content?: string;\n input?: string;\n item?: string;\n trigger?: string;\n };\n options: { label: string; value: string }[];\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 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 const handleOpenChange = () => {\n setOpen(!open);\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 placeholder={searchLabel} className={cn('h-9', classNames?.input)} />\n <CommandList>\n <CommandEmpty>{notFoundMessage}</CommandEmpty>\n <CommandGroup>\n {options.map((item) => (\n <CommandItem\n key={item.value}\n value={item.value}\n keywords={[item.label]}\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"]}
1
+ {"version":3,"sources":["../src/v2/combobox/combobox.tsx"],"names":["Combobox","classNames","options","onChange","onOpenChange","placeholder","searchLabel","notFoundMessage","value","size","open","setOpen","useState","jsxs","Popover","PopoverTrigger","cn","jsx","LuSearch","item","LuChevronsUpDown","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","currentValue","LuCheck"],"mappings":"mQA8BO,IAAMA,EAAW,CAAC,CACvB,UAAAC,CAAAA,CAAAA,CAAa,MACb,CAAA,OAAA,CAAAC,EACA,QAAAC,CAAAA,CAAAA,CAAW,OACX,YAAAC,CAAAA,CAAAA,CAAe,OACf,WAAAC,CAAAA,CAAAA,CAAc,kBACd,CAAA,WAAA,CAAAC,CAAc,CAAA,WAAA,CACd,gBAAAC,CAAkB,CAAA,YAAA,CAClB,KAAAC,CAAAA,CAAAA,CAAQ,MACR,CAAA,IAAA,CAAAC,EAAO,SACT,CAAA,GAAqB,CACnB,GAAM,CAACC,CAAAA,CAAMC,CAAO,CAAIC,CAAAA,cAAAA,CAAS,KAAK,CAMtC,CAAA,OACEC,gBAACC,mBAAA,CAAA,CAAQ,IAAMJ,CAAAA,CAAAA,CAAM,YANE,CAAA,IAAM,CAC7BC,CAAQ,CAAA,CAACD,CAAI,CAAA,CACbN,CAAe,GAAA,CAACM,CAAI,EACtB,CAAA,CAII,QAAAG,CAAAA,CAAAA,eAAAA,CAACE,mBAAA,CAAA,CACC,UAAWC,mBACT,CAAA,yeAAA,CACAP,CAAS,GAAA,IAAA,EAAQ,qDACjBR,CAAAA,CAAAA,EAAY,OACd,CAEA,CAAA,QAAA,CAAA,CAAAY,eAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,yBAAA,CACZ,WAACL,CAASS,EAAAA,cAAAA,CAACC,WAAA,CAAA,EAAS,CACpBV,CAAAA,CAAAA,CAAQN,EAAQ,IAAMiB,CAAAA,CAAAA,EAASA,CAAK,CAAA,KAAA,GAAUX,CAAK,CAAA,EAAG,MAAQH,CACjE,CAAA,CAAA,CAAA,CACAY,eAACG,mBAAA,CAAA,CAAiB,UAAU,YAAa,CAAA,CAAA,CAAA,CAC3C,CACAH,CAAAA,cAAAA,CAACI,mBAAA,CAAA,CACC,UAAWL,mBAAG,CAAA,4CAAA,CAA8Cf,CAAY,EAAA,OAAO,CAE/E,CAAA,QAAA,CAAAY,gBAACS,mBAAA,CAAA,CACC,QAAAL,CAAAA,CAAAA,cAAAA,CAACM,mBAAA,CAAA,CAAa,YAAajB,CAAa,CAAA,SAAA,CAAWU,oBAAG,KAAOf,CAAAA,CAAAA,EAAY,KAAK,CAAG,CAAA,CAAA,CACjFY,eAACW,CAAAA,mBAAAA,CAAA,CACC,QAAA,CAAA,CAAAP,eAACQ,mBAAA,CAAA,CAAc,QAAAlB,CAAAA,CAAAA,CAAgB,CAC/BU,CAAAA,cAAAA,CAACS,oBAAA,CACE,QAAA,CAAAxB,CAAQ,CAAA,GAAA,CAAKiB,CACZN,EAAAA,eAAAA,CAACc,oBAAA,CAEC,KAAA,CAAOR,EAAK,KACZ,CAAA,QAAA,CAAU,CAACA,CAAK,CAAA,KAAK,CACrB,CAAA,QAAA,CAAWS,CAAiB,EAAA,CAC1BzB,IAAWyB,CAAiBpB,GAAAA,CAAAA,CAAQ,EAAKoB,CAAAA,CAAY,CACrDjB,CAAAA,CAAAA,CAAQ,KAAK,CACbP,CAAAA,CAAAA,GAAe,KAAK,EACtB,CACA,CAAA,SAAA,CAAWH,GAAY,IAEtB,CAAA,QAAA,CAAA,CAAAkB,CAAK,CAAA,KAAA,CACNF,cAACY,CAAAA,UAAAA,CAAA,CACC,SAAWb,CAAAA,mBAAAA,CAAG,SAAWR,CAAAA,CAAAA,GAAUW,CAAK,CAAA,KAAA,CAAQ,cAAgB,WAAW,CAAA,CAC7E,CAbKA,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,KAcZ,CACD,EACH,CACF,CAAA,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAAA,CACF,CAEJ","file":"chunk-MBKRMANH.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 ComboboxProps = {\n classNames?: {\n content?: string;\n input?: string;\n item?: string;\n trigger?: string;\n };\n options: { label: string; value: string }[];\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 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 const handleOpenChange = () => {\n setOpen(!open);\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 placeholder={searchLabel} className={cn('h-9', classNames?.input)} />\n <CommandList>\n <CommandEmpty>{notFoundMessage}</CommandEmpty>\n <CommandGroup>\n {options.map((item) => (\n <CommandItem\n key={item.value}\n value={item.value}\n keywords={[item.label]}\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"]}
@@ -1,2 +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-LBJURDW7.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 D=({classNames:a$3=void 0,options:s,onChange:y=void 0,onOpenChange:d$1=void 0,placeholder:x="Select an option",searchLabel:w="Search...",notFoundMessage:P="Not found.",value:r=void 0,size:k="default"})=>{let[t,p]=useState(false);return jsxs(a,{open:t,onOpenChange:()=>{p(!t),d$1?.(!t);},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",k==="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:[!r&&jsx(LuSearch,{}),r?s.find(e=>e.value===r)?.label:x]}),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:w,className:a$1("h-9",a$3?.input)}),jsxs(d,{children:[jsx(e,{children:P}),jsx(f,{children:s.map(e=>jsxs(h,{value:e.value,keywords:[e.label],onSelect:l=>{y?.(l===r?"":l),p(false),d$1?.(false);},className:a$3?.item,children:[e.label,jsx(LuCheck,{className:a$1("ml-auto",r===e.value?"opacity-100":"opacity-0")})]},e.value))})]})]})})]})};export{D as a};//# sourceMappingURL=chunk-RAWF227R.js.map
2
- //# sourceMappingURL=chunk-RAWF227R.js.map
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 D=({classNames:a$3=void 0,options:s,onChange:y=void 0,onOpenChange:d$1=void 0,placeholder:x="Select an option",searchLabel:w="Search...",notFoundMessage:P="Not found.",value:r=void 0,size:k="default"})=>{let[t,p]=useState(false);return jsxs(a,{open:t,onOpenChange:()=>{p(!t),d$1?.(!t);},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",k==="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:[!r&&jsx(LuSearch,{}),r?s.find(e=>e.value===r)?.label:x]}),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:w,className:a$1("h-9",a$3?.input)}),jsxs(d,{children:[jsx(e,{children:P}),jsx(f,{children:s.map(e=>jsxs(h,{value:e.value,keywords:[e.label],onSelect:l=>{y?.(l===r?"":l),p(false),d$1?.(false);},className:a$3?.item,children:[e.label,jsx(LuCheck,{className:a$1("ml-auto",r===e.value?"opacity-100":"opacity-0")})]},e.value))})]})]})})]})};export{D as a};//# sourceMappingURL=chunk-WSS5BEPI.js.map
2
+ //# sourceMappingURL=chunk-WSS5BEPI.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/v2/combobox/combobox.tsx"],"names":["Combobox","classNames","options","onChange","onOpenChange","placeholder","searchLabel","notFoundMessage","value","size","open","setOpen","useState","jsxs","Popover","PopoverTrigger","cn","jsx","LuSearch","item","LuChevronsUpDown","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","currentValue","LuCheck"],"mappings":"oRA8BO,IAAMA,EAAW,CAAC,CACvB,UAAAC,CAAAA,GAAAA,CAAa,MACb,CAAA,OAAA,CAAAC,EACA,QAAAC,CAAAA,CAAAA,CAAW,OACX,YAAAC,CAAAA,GAAAA,CAAe,OACf,WAAAC,CAAAA,CAAAA,CAAc,kBACd,CAAA,WAAA,CAAAC,CAAc,CAAA,WAAA,CACd,gBAAAC,CAAkB,CAAA,YAAA,CAClB,KAAAC,CAAAA,CAAAA,CAAQ,MACR,CAAA,IAAA,CAAAC,EAAO,SACT,CAAA,GAAqB,CACnB,GAAM,CAACC,CAAAA,CAAMC,CAAO,CAAIC,CAAAA,QAAAA,CAAS,KAAK,CAMtC,CAAA,OACEC,KAACC,CAAA,CAAA,CAAQ,IAAMJ,CAAAA,CAAAA,CAAM,YANE,CAAA,IAAM,CAC7BC,CAAQ,CAAA,CAACD,CAAI,CAAA,CACbN,GAAe,GAAA,CAACM,CAAI,EACtB,CAAA,CAII,QAAAG,CAAAA,CAAAA,IAAAA,CAACE,CAAA,CAAA,CACC,UAAWC,GACT,CAAA,yeAAA,CACAP,CAAS,GAAA,IAAA,EAAQ,qDACjBR,CAAAA,GAAAA,EAAY,OACd,CAEA,CAAA,QAAA,CAAA,CAAAY,IAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,yBAAA,CACZ,WAACL,CAASS,EAAAA,GAAAA,CAACC,QAAA,CAAA,EAAS,CACpBV,CAAAA,CAAAA,CAAQN,EAAQ,IAAMiB,CAAAA,CAAAA,EAASA,CAAK,CAAA,KAAA,GAAUX,CAAK,CAAA,EAAG,MAAQH,CACjE,CAAA,CAAA,CAAA,CACAY,IAACG,gBAAA,CAAA,CAAiB,UAAU,YAAa,CAAA,CAAA,CAAA,CAC3C,CACAH,CAAAA,GAAAA,CAACI,CAAA,CAAA,CACC,UAAWL,GAAG,CAAA,4CAAA,CAA8Cf,GAAY,EAAA,OAAO,CAE/E,CAAA,QAAA,CAAAY,KAACS,GAAA,CAAA,CACC,QAAAL,CAAAA,CAAAA,GAAAA,CAACM,GAAA,CAAA,CAAa,YAAajB,CAAa,CAAA,SAAA,CAAWU,IAAG,KAAOf,CAAAA,GAAAA,EAAY,KAAK,CAAG,CAAA,CAAA,CACjFY,IAACW,CAAAA,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAP,IAACQ,CAAA,CAAA,CAAc,QAAAlB,CAAAA,CAAAA,CAAgB,CAC/BU,CAAAA,GAAAA,CAACS,EAAA,CACE,QAAA,CAAAxB,CAAQ,CAAA,GAAA,CAAKiB,CACZN,EAAAA,IAAAA,CAACc,EAAA,CAEC,KAAA,CAAOR,EAAK,KACZ,CAAA,QAAA,CAAU,CAACA,CAAK,CAAA,KAAK,CACrB,CAAA,QAAA,CAAWS,CAAiB,EAAA,CAC1BzB,IAAWyB,CAAiBpB,GAAAA,CAAAA,CAAQ,EAAKoB,CAAAA,CAAY,CACrDjB,CAAAA,CAAAA,CAAQ,KAAK,CACbP,CAAAA,GAAAA,GAAe,KAAK,EACtB,CACA,CAAA,SAAA,CAAWH,KAAY,IAEtB,CAAA,QAAA,CAAA,CAAAkB,CAAK,CAAA,KAAA,CACNF,GAACY,CAAAA,OAAAA,CAAA,CACC,SAAWb,CAAAA,GAAAA,CAAG,SAAWR,CAAAA,CAAAA,GAAUW,CAAK,CAAA,KAAA,CAAQ,cAAgB,WAAW,CAAA,CAC7E,CAbKA,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,KAcZ,CACD,EACH,CACF,CAAA,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAAA,CACF,CAEJ","file":"chunk-RAWF227R.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 ComboboxProps = {\n classNames?: {\n content?: string;\n input?: string;\n item?: string;\n trigger?: string;\n };\n options: { label: string; value: string }[];\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 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 const handleOpenChange = () => {\n setOpen(!open);\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 placeholder={searchLabel} className={cn('h-9', classNames?.input)} />\n <CommandList>\n <CommandEmpty>{notFoundMessage}</CommandEmpty>\n <CommandGroup>\n {options.map((item) => (\n <CommandItem\n key={item.value}\n value={item.value}\n keywords={[item.label]}\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"]}
1
+ {"version":3,"sources":["../src/v2/combobox/combobox.tsx"],"names":["Combobox","classNames","options","onChange","onOpenChange","placeholder","searchLabel","notFoundMessage","value","size","open","setOpen","useState","jsxs","Popover","PopoverTrigger","cn","jsx","LuSearch","item","LuChevronsUpDown","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","currentValue","LuCheck"],"mappings":"oRA8BO,IAAMA,EAAW,CAAC,CACvB,UAAAC,CAAAA,GAAAA,CAAa,MACb,CAAA,OAAA,CAAAC,EACA,QAAAC,CAAAA,CAAAA,CAAW,OACX,YAAAC,CAAAA,GAAAA,CAAe,OACf,WAAAC,CAAAA,CAAAA,CAAc,kBACd,CAAA,WAAA,CAAAC,CAAc,CAAA,WAAA,CACd,gBAAAC,CAAkB,CAAA,YAAA,CAClB,KAAAC,CAAAA,CAAAA,CAAQ,MACR,CAAA,IAAA,CAAAC,EAAO,SACT,CAAA,GAAqB,CACnB,GAAM,CAACC,CAAAA,CAAMC,CAAO,CAAIC,CAAAA,QAAAA,CAAS,KAAK,CAMtC,CAAA,OACEC,KAACC,CAAA,CAAA,CAAQ,IAAMJ,CAAAA,CAAAA,CAAM,YANE,CAAA,IAAM,CAC7BC,CAAQ,CAAA,CAACD,CAAI,CAAA,CACbN,GAAe,GAAA,CAACM,CAAI,EACtB,CAAA,CAII,QAAAG,CAAAA,CAAAA,IAAAA,CAACE,CAAA,CAAA,CACC,UAAWC,GACT,CAAA,yeAAA,CACAP,CAAS,GAAA,IAAA,EAAQ,qDACjBR,CAAAA,GAAAA,EAAY,OACd,CAEA,CAAA,QAAA,CAAA,CAAAY,IAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,yBAAA,CACZ,WAACL,CAASS,EAAAA,GAAAA,CAACC,QAAA,CAAA,EAAS,CACpBV,CAAAA,CAAAA,CAAQN,EAAQ,IAAMiB,CAAAA,CAAAA,EAASA,CAAK,CAAA,KAAA,GAAUX,CAAK,CAAA,EAAG,MAAQH,CACjE,CAAA,CAAA,CAAA,CACAY,IAACG,gBAAA,CAAA,CAAiB,UAAU,YAAa,CAAA,CAAA,CAAA,CAC3C,CACAH,CAAAA,GAAAA,CAACI,CAAA,CAAA,CACC,UAAWL,GAAG,CAAA,4CAAA,CAA8Cf,GAAY,EAAA,OAAO,CAE/E,CAAA,QAAA,CAAAY,KAACS,GAAA,CAAA,CACC,QAAAL,CAAAA,CAAAA,GAAAA,CAACM,GAAA,CAAA,CAAa,YAAajB,CAAa,CAAA,SAAA,CAAWU,IAAG,KAAOf,CAAAA,GAAAA,EAAY,KAAK,CAAG,CAAA,CAAA,CACjFY,IAACW,CAAAA,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAP,IAACQ,CAAA,CAAA,CAAc,QAAAlB,CAAAA,CAAAA,CAAgB,CAC/BU,CAAAA,GAAAA,CAACS,EAAA,CACE,QAAA,CAAAxB,CAAQ,CAAA,GAAA,CAAKiB,CACZN,EAAAA,IAAAA,CAACc,EAAA,CAEC,KAAA,CAAOR,EAAK,KACZ,CAAA,QAAA,CAAU,CAACA,CAAK,CAAA,KAAK,CACrB,CAAA,QAAA,CAAWS,CAAiB,EAAA,CAC1BzB,IAAWyB,CAAiBpB,GAAAA,CAAAA,CAAQ,EAAKoB,CAAAA,CAAY,CACrDjB,CAAAA,CAAAA,CAAQ,KAAK,CACbP,CAAAA,GAAAA,GAAe,KAAK,EACtB,CACA,CAAA,SAAA,CAAWH,KAAY,IAEtB,CAAA,QAAA,CAAA,CAAAkB,CAAK,CAAA,KAAA,CACNF,GAACY,CAAAA,OAAAA,CAAA,CACC,SAAWb,CAAAA,GAAAA,CAAG,SAAWR,CAAAA,CAAAA,GAAUW,CAAK,CAAA,KAAA,CAAQ,cAAgB,WAAW,CAAA,CAC7E,CAbKA,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,KAcZ,CACD,EACH,CACF,CAAA,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAAA,CACF,CAEJ","file":"chunk-WSS5BEPI.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 ComboboxProps = {\n classNames?: {\n content?: string;\n input?: string;\n item?: string;\n trigger?: string;\n };\n options: { label: string; value: string }[];\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 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 const handleOpenChange = () => {\n setOpen(!open);\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 placeholder={searchLabel} className={cn('h-9', classNames?.input)} />\n <CommandList>\n <CommandEmpty>{notFoundMessage}</CommandEmpty>\n <CommandGroup>\n {options.map((item) => (\n <CommandItem\n key={item.value}\n value={item.value}\n keywords={[item.label]}\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"]}
@@ -0,0 +1,2 @@
1
+ import {a as a$1,g,i,j,f}from'./chunk-PKXLHFJM.js';import {a}from'./chunk-YTIIAU4W.js';import {forwardRef}from'react';import {Command}from'cmdk';import {LuSearch}from'react-icons/lu';import {jsx,jsxs}from'react/jsx-runtime';var C=forwardRef(({className:o,...e},a$1)=>jsx(Command,{"data-slot":"command",ref:a$1,className:a("bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",o),...e}));function P({title:o="Command Palette",description:e="Search for a command to run...",children:a$2,className:c,...u}){return jsxs(a$1,{...u,children:[jsxs(g,{className:"sr-only",children:[jsx(i,{children:o}),jsx(j,{children:e})]}),jsx(f,{className:a("overflow-hidden p-0",c),children:jsx(C,{className:"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5",children:a$2})})]})}function w({className:o,...e}){return jsxs("div",{"data-slot":"command-input-wrapper",className:"flex h-9 items-center gap-2 border-b px-3",children:[jsx(LuSearch,{className:"size-4 shrink-0 opacity-50"}),jsx(Command.Input,{"data-slot":"command-input",className:a("placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 outline-hidden disabled:cursor-not-allowed disabled:opacity-50",o),...e})]})}function D({className:o,...e}){return jsx(Command.List,{"data-slot":"command-list",className:a("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",o),...e})}function N({...o}){return jsx(Command.Empty,{"data-slot":"command-empty",className:"py-6 text-center",...o})}function b({className:o,...e}){return jsx(Command.Group,{"data-slot":"command-group",className:a("text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium",o),...e})}function I({className:o,...e}){return jsx(Command.Separator,{"data-slot":"command-separator",className:a("bg-border -mx-1 h-px",o),...e})}function S({className:o,...e}){return jsx(Command.Item,{"data-slot":"command-item",className:a("data-[selected=true]:bg-accent data-[selected=true]:text-primary [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",o),...e})}function L({className:o,...e}){return jsx("span",{"data-slot":"command-shortcut",className:a("text-muted-foreground ml-auto text-xs tracking-widest",o),...e})}export{C as a,P as b,w as c,D as d,N as e,b as f,I as g,S as h,L as i};//# sourceMappingURL=chunk-XMEBDMUG.js.map
2
+ //# sourceMappingURL=chunk-XMEBDMUG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/v2/command/command.tsx"],"names":["Command","forwardRef","className","props","forwardedRef","jsx","CommandPrimitive","cn","CommandDialog","title","description","children","jsxs","Dialog","DialogHeader","DialogTitle","DialogDescription","DialogContent","CommandInput","LuSearch","CommandList","CommandEmpty","CommandGroup","CommandSeparator","CommandItem","CommandShortcut"],"mappings":"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","file":"chunk-XMEBDMUG.js","sourcesContent":["import { ComponentProps, forwardRef } from 'react';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { LuSearch } from 'react-icons/lu';\n\nimport { cn } from '@/lib/utils';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@/v2/dialog/dialog';\n\nconst Command = forwardRef<HTMLDivElement, ComponentProps<typeof CommandPrimitive>>(\n ({ className, ...props }, forwardedRef) => {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n ref={forwardedRef}\n className={cn(\n 'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md',\n className,\n )}\n {...props}\n />\n );\n },\n);\n\nfunction CommandDialog({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n ...props\n}: ComponentProps<typeof Dialog> & {\n title?: string;\n description?: string;\n className?: string;\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent className={cn('overflow-hidden p-0', className)}>\n <Command className=\"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction CommandInput({ className, ...props }: ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div data-slot=\"command-input-wrapper\" className=\"flex h-9 items-center gap-2 border-b px-3\">\n <LuSearch className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n 'placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 outline-hidden disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\nfunction CommandList({ className, ...props }: ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn('max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto', className)}\n {...props}\n />\n );\n}\n\nfunction CommandEmpty({ ...props }: ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty data-slot=\"command-empty\" className=\"py-6 text-center\" {...props} />\n );\n}\n\nfunction CommandGroup({ className, ...props }: ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n 'text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn('bg-border -mx-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction CommandItem({ className, ...props }: ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-primary [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CommandShortcut({ className, ...props }: ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn('text-muted-foreground ml-auto text-xs tracking-widest', className)}\n {...props}\n />\n );\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n"]}