veza/apps/web/dist_verification/assets/Select-EdCpbbCo.js
senke 670282989b chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification
- apps/web: test updates (Vitest/setup), playbackAnalyticsService, TrackGrid, serviceErrorHandler
- veza-common: logging, metrics, traits, validation, random
- veza-stream-server: audio pipeline, codecs, cache, monitoring, routes
- apps/web/dist_verification: refresh build assets (content-hashed filenames)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-13 19:39:18 +01:00

1 line
5.8 KiB
JavaScript

import{j as s,a as p}from"./vendor-react-C9dYU-TK.js";import{D as E}from"./dropdown-CPqsiWN7.js";import{B as O,c as k}from"./index-BMBS6scK.js";import{X as $,a1 as K,C as S}from"./vendor-icons-BSV6HBy1.js";import{I as L}from"./input-DeoQfymd.js";function H({displayValue:l,placeholder:r,value:i,multiple:f,disabled:n,open:a,className:g,ariaLabel:c,ariaLabelledBy:b,onClear:y}){const h=i&&(Array.isArray(i)&&i.length>0||!Array.isArray(i)),m=f?!h:!l;return s.jsxs(O,{variant:"outline",disabled:n,className:k("w-full justify-between",m?"text-muted-foreground":"",g),type:"button","aria-label":c,"aria-labelledby":b,"aria-haspopup":"listbox","aria-expanded":a,children:[s.jsx("span",{className:"truncate",children:m?r:l}),s.jsxs("div",{className:"flex items-center gap-1 ml-2",children:[h&&s.jsx("button",{type:"button",onClick:y,className:"shrink-0 opacity-50 hover:opacity-100 transition-opacity","aria-label":"Effacer la sélection",children:s.jsx($,{className:"h-4 w-4"})}),s.jsx(K,{className:"h-4 w-4 shrink-0 opacity-50"})]})]})}function A({option:l,isSelected:r,isHighlighted:i,multiple:f,onSelect:n,optionId:a}){const g=c=>{l.disabled||(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),n(l.value))};return s.jsxs("div",{id:a,role:"option","aria-selected":r,className:k("relative flex items-center px-4 py-2 text-sm cursor-pointer","hover:bg-muted hover:text-foreground","focus:bg-muted focus:text-foreground","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background","transition-colors text-foreground",r&&"bg-primary/10 text-primary",i&&"bg-muted text-foreground",l.disabled&&"opacity-50 cursor-not-allowed pointer-events-none"),onClick:()=>!l.disabled&&n(l.value),onKeyDown:g,tabIndex:l.disabled?-1:0,children:[f&&s.jsx("div",{className:k("mr-2 flex h-4 w-4 items-center justify-center rounded-sm border border-border",r&&"bg-primary border-border text-primary-foreground"),children:r&&s.jsx(S,{className:"h-3 w-3"})}),s.jsx("span",{className:"flex-1",children:l.label}),!f&&r&&s.jsx(S,{className:"h-4 w-4 text-primary"})]})}function R({searchable:l,search:r,onSearchChange:i,searchInputRef:f,filteredOptions:n,multiple:a,isSelected:g,onSelect:c,ariaLabel:b,name:y,placeholder:h}){const m=p.useId(),[u,x]=p.useState(-1),d=p.useMemo(()=>{const e=[...n.ungrouped];return Object.values(n.groups).forEach(t=>{e.push(...t)}),e.filter(t=>!t.disabled)},[n]),j=u>=0&&u<d.length?`${m}-option-${d[u]?.value}`:void 0,v=e=>{switch(e.key){case"ArrowDown":e.preventDefault(),x(t=>t<d.length-1?t+1:0);break;case"ArrowUp":e.preventDefault(),x(t=>t>0?t-1:d.length-1);break;case"Enter":case" ":u>=0&&u<d.length&&(e.preventDefault(),c(d[u].value));break;case"Home":e.preventDefault(),x(0);break;case"End":e.preventDefault(),x(d.length-1);break}},N=n.ungrouped.length>0||Object.keys(n.groups).length>0;return s.jsxs("div",{className:"w-full min-w-48 max-h-72 overflow-y-auto",role:"listbox","aria-label":b||y||h,"aria-activedescendant":j,onKeyDown:v,children:[l&&s.jsx("div",{className:"p-2 border-b",children:s.jsx(L,{ref:f,type:"text",placeholder:"Search...",value:r,onChange:e=>i(e.target.value),onClick:e=>e.stopPropagation(),onKeyDown:v,className:"w-full"})}),n.ungrouped.length>0&&s.jsx("div",{className:"py-1",children:n.ungrouped.map(e=>s.jsx(A,{option:e,isSelected:g(e.value),isHighlighted:u>=0&&u<d.length&&d[u]?.value===e.value,multiple:a,onSelect:c,optionId:`${m}-option-${e.value}`},e.value))}),Object.entries(n.groups).map(([e,t])=>s.jsxs("div",{className:"py-1",children:[s.jsx("div",{className:"px-4 py-1.5 text-xs font-semibold text-muted-foreground uppercase",children:e}),t.map(o=>s.jsx(A,{option:o,isSelected:g(o.value),isHighlighted:u>=0&&u<d.length&&d[u]?.value===o.value,multiple:a,onSelect:c,optionId:`${m}-option-${o.value}`},o.value))]},e)),!N&&s.jsx("div",{className:"px-4 py-2 text-sm text-muted-foreground text-center",children:"No options found"})]})}function B({options:l,value:r,onChange:i,multiple:f=!1,searchable:n=!1}){const[a,g]=p.useState(!1),[c,b]=p.useState(""),y=p.useRef(null),h=p.useMemo(()=>{const e={},t=[];return l.forEach(o=>{o.group?(e[o.group]||(e[o.group]=[]),e[o.group].push(o)):t.push(o)}),{groups:e,ungrouped:t}},[l]),m=p.useMemo(()=>{if(!n||!c)return h;const e=c.toLowerCase(),t={};Object.entries(h.groups).forEach(([w,C])=>{const D=C.filter(I=>I.label.toLowerCase().includes(e));D.length>0&&(t[w]=D)});const o=h.ungrouped.filter(w=>w.label.toLowerCase().includes(e));return{groups:t,ungrouped:o}},[n,c,h]),x=r?(Array.isArray(r)?r:[r]).map(t=>l.find(o=>o.value===t)?.label).filter(Boolean):[],d=f?x.length>0?`${x.length} selected`:"":x[0]||"",j=e=>r?f?Array.isArray(r)&&r.includes(e):r===e:!1,v=e=>{if(f){const t=Array.isArray(r)?r:[],o=t.includes(e)?t.filter(w=>w!==e):[...t,e];i(o)}else i(e),g(!1),b("")},N=e=>{e.stopPropagation(),i(f?[]:"")};return p.useEffect(()=>{a&&n&&y.current&&y.current.focus()},[a,n]),p.useEffect(()=>{a||b("")},[a]),{open:a,setOpen:g,search:c,setSearch:b,searchInputRef:y,groupedOptions:h,filteredOptions:m,displayValue:d,selectedLabels:x,isSelected:j,handleSelect:v,handleClear:N}}function T({placeholder:l="Select an option...",name:r,"aria-label":i,"aria-labelledby":f,className:n,...a}){const{open:g,setOpen:c,search:b,setSearch:y,searchInputRef:h,filteredOptions:m,displayValue:u,isSelected:x,handleSelect:d,handleClear:j}=B({...a}),v=s.jsx(H,{displayValue:u,placeholder:l,value:a.value,multiple:a.multiple??!1,disabled:a.disabled??!1,open:g,className:n,ariaLabel:i,ariaLabelledBy:f,onClear:j});return s.jsxs(s.Fragment,{children:[s.jsx(E,{trigger:v,align:"left",onOpenChange:c,className:"w-full",children:s.jsx(R,{searchable:a.searchable??!1,search:b,onSearchChange:y,searchInputRef:h,filteredOptions:m,multiple:a.multiple??!1,isSelected:x,onSelect:d,ariaLabel:i,name:r,placeholder:l})}),r&&s.jsx("input",{type:"hidden",name:r,value:Array.isArray(a.value)?a.value.join(","):a.value??""})]})}export{T as S};