UNPKG

@stanfordspezi/spezi-web-design-system

Version:

Stanford Biodesign Digital Health Spezi Web Design System

2 lines (1 loc) 4.27 kB
"use strict";const t=require("react/jsx-runtime"),a=require("./Command-BGwzNkUL.js"),u=require("react"),S=require("./index-DwV9MiDB.js"),O=require("./react-CPyQz9wY.js"),R=require("./Button-CoJ-cT_W.js"),b=require("./Popover-B2LKUvk1.js"),z=require("./check-CzvLR4PA.js"),k=require("./chevron-down-B138CK2f.js"),g=require("./isUndefined-DokR09-E.js"),M=require("./index-V7nJjm5x.js"),I=u.createContext(null),x=()=>{const e=u.useContext(I);if(e===null)throw new Error("useSelectContext must be used within a SelectContext");return e},$=e=>{const s={placeholder:"Search...",emptyMessage:"No results found."};return g.isUndefined(e)?null:g.isBoolean(e)?e?s:null:{...s,...e}},A=e=>g.isUndefined(e)||e===!1?null:e===!0?{}:e,y=({value:e,defaultValue:s,onValueChange:n,create:r,search:c,disabled:o,formatValue:i,id:d})=>{const[l,m]=u.useState(!1),[p,P]=u.useState(e??s),[T,V]=u.useState(new Map),v=f=>{P(f),n?.(f),m(!1)},E=u.useCallback((f,w)=>{V(C=>{const h=C.get(f);return h&&h.label===h.label&&h.itemText===w.itemText?C:new Map(C).set(f,w)})},[]);return{open:l,setOpen:m,selectedValue:e??p,selectValue:v,items:T,onItemAdded:E,create:A(r),search:$(c),disabled:o,formatValue:i,id:d}},B=({children:e,...s})=>{const n=y(s);return t.jsx(I.Provider,{value:n,children:t.jsx(b.PopoverRoot,{open:n.open,onOpenChange:n.setOpen,children:e})})},F=({role:e="combobox","aria-expanded":s,className:n,children:r,id:c,...o})=>{const{open:i,disabled:d,id:l}=x();return t.jsx(b.PopoverTrigger,{asChild:!0,children:t.jsxs(R.Button,{...o,"data-slot":"select-trigger",id:c??l,role:e,size:null,variant:null,"aria-expanded":s??i,disabled:d,className:S.cn("group border-input bg-surface-primary ring-offset-surface placeholder:text-muted-foreground focus-ring flex h-10 w-full items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm","[&>span]:line-clamp-1 [&>span]:text-left","disabled:cursor-not-allowed disabled:opacity-50",n),children:[r,t.jsx(k.default,{className:"size-4 shrink-0 opacity-50 transition group-hover:opacity-80"})]})})},G=({placeholder:e,className:s,...n})=>{const{selectedValue:r,items:c,formatValue:o}=x();return r?t.jsx("span",{"data-slot":"select-value",className:S.cn("w-full min-w-0 overflow-hidden",s),...n,children:c.get(r)?.itemText??c.get(r)?.label??o?.(r)??r}):t.jsx("span",{"data-slot":"select-value",className:S.cn("text-muted-foreground w-full min-w-0 overflow-hidden font-normal",s),...n,children:e})},q="CREATE-NEW-OPTION:select-unique-key-123",U=({children:e,...s})=>{const{create:n,search:r,items:c}=x();return t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"hidden","aria-hidden":"true",children:t.jsx(a.Command,{"aria-hidden":"true",tabIndex:-1,children:t.jsx(a.CommandList,{"aria-hidden":"true",tabIndex:-1,children:e})})}),t.jsx(b.PopoverContent,{className:"min-w-[var(--radix-popover-trigger-width)] !p-0",children:t.jsxs(a.Command,{...s,filter:(o,i,d)=>{if(o===q)return 1e-4;const l=c.get(o),m=O.reactNodeToText(l?.label),p=`${o}${l?.itemText}${m}`;return a.Re(p,i,d)},children:[r?t.jsx(a.CommandInput,{placeholder:r.placeholder}):t.jsx("button",{autoFocus:!0,className:"sr-only"}),t.jsxs(a.CommandList,{children:[r&&t.jsx(a.CommandEmpty,{children:r.emptyMessage}),e,n&&t.jsx(N,{...n})]})]})})]})},j=({value:e,children:s,onSelect:n,addToItems:r=!0,itemText:c,...o})=>{const{selectValue:i,selectedValue:d,onItemAdded:l,formatValue:m}=x(),p=d===e;return u.useEffect(()=>{r&&l(e,{label:s,itemText:c})},[e,s,l,r,c]),t.jsxs(a.CommandItem,{...o,value:e,onSelect:()=>{i(e),n?.(e)},children:[t.jsx(M.Root,{children:c}),t.jsx(z.default,{className:S.cn("size-4",p?"opacity-100":"opacity-0")}),s??m?.(e)??e]})},L=e=>t.jsx(a.CommandGroup,{...e}),D=e=>t.jsx(a.CommandSeparator,{...e}),N=({onCreateOption:e,render:s})=>{const n=a.P(l=>l.search),{selectValue:r,items:c,selectedValue:o,formatValue:i}=x(),d=o&&!c.has(o);return t.jsxs(t.Fragment,{children:[d&&t.jsx(j,{addToItems:!1,value:o,children:i?.(o)??o}),n&&t.jsx(j,{value:q,addToItems:!1,onSelect:()=>{r(n),e?.(n)},children:s?.(n)??`Create "${n}"`})]})};exports.Select=B;exports.SelectContent=U;exports.SelectCreateItem=N;exports.SelectGroup=L;exports.SelectItem=j;exports.SelectSeparator=D;exports.SelectTrigger=F;exports.SelectValue=G;exports.useSelectContext=x;exports.useSelectProvider=y;