@infinityfx/fluid
Version:
React UI library, using zero-runtime CSS-in-JS.
4 lines (3 loc) • 4.57 kB
JavaScript
"use client";
import{jsxs as r,jsx as e,Fragment as a}from"react/jsx-runtime";import{useId as l,useRef as o,useState as i,useEffect as t}from"react";import n from"./button.js";import{combineClasses as d,classes as c,combineRefs as s}from"../../core/utils.js";import f from"../display/badge.js";import u from"../display/combobox/index.js";import m from"../../hooks/use-input-props.js";import{createStyles as p}from"../../core/style.js";import{Icon as b}from"../../core/icons.js";const g=p("select",{".field":{borderRadius:"var(--f-radius-sml)",color:"var(--f-clr-grey-200)",transition:"background-color .2s, border-color .2s, color .2s, outline-color .2s",display:"flex",alignItems:"center",minWidth:"min(var(--width, 100vw), 12em)",outline:"solid 3px transparent"},".v__default":{backgroundColor:"var(--f-clr-fg-100)",border:"solid 1px var(--f-clr-fg-200)"},".v__minimal":{backgroundColor:"var(--f-clr-fg-100)"},".v__default:focus-within":{borderColor:"var(--f-clr-primary-100)",color:"var(--f-clr-primary-100)",outlineColor:"var(--f-clr-primary-500)"},".v__minimal:focus-within":{backgroundColor:"var(--f-clr-fg-200)"},'.field[data-error="true"]':{borderColor:"var(--f-clr-error-100)",color:"var(--f-clr-error-200)"},'.field[data-error="true"]:focus-within':{outlineColor:"var(--f-clr-error-400)"},'.field[data-error="true"] .content':{color:"var(--f-clr-error-200)"},'.field[data-disabled="true"]':{backgroundColor:"var(--f-clr-grey-100)",borderColor:"var(--f-clr-grey-200)"},'.field[data-disabled="true"] .content':{color:"var(--f-clr-grey-500)"},".content__wrapper":{padding:".675em",display:"flex",alignItems:"center",gap:"var(--f-spacing-xsm)",overflow:"hidden",flexGrow:1},".content__wrapper > *:not(.content)":{flexShrink:0},".content":{position:"relative",display:"flex",alignItems:"center",gap:"var(--f-spacing-xsm)",flexGrow:1,overflow:"hidden",color:"var(--f-clr-text-100)",minHeight:"1.375em"},".content > *":{flexShrink:0},".placeholder":{color:"var(--f-clr-grey-300)"},".input":{position:"absolute",opacity:0,width:0},".s__xsm":{fontSize:"var(--f-font-size-xxs)"},".s__sml":{fontSize:"var(--f-font-size-xsm)"},".s__med":{fontSize:"var(--f-font-size-sml)"},".s__lrg":{fontSize:"var(--f-font-size-med)"},".field.round":{borderRadius:"calc(1.4em + 1px)"},".field .badge":{backgroundColor:"var(--f-clr-fg-200)"},'.field[data-error="true"] .badge':{backgroundColor:"var(--f-clr-error-400)"},'.field[data-disabled="true"] .badge':{backgroundColor:"var(--f-clr-grey-200)"},".icon":{display:"flex",marginLeft:"auto"}});function v({cc:p={},options:v,multiple:h=!1,searchable:y,limit:_,emptyMessage:x="Nothing found",placeholder:C,value:k,defaultValue:w,onChange:z,readOnly:S,error:j,icon:N,size:I="med",variant:R="default",contentSize:O,round:H,inputRef:A,mobileContainer:G,virtualItemHeight:M,...$}){const L=d(g,p),T=l(),V=o(null),W=o(null),[q,B]=m($),[D,E]=void 0!==k?[k,z]:i(w||(h?[]:"")),F=Array.isArray(D);return t((()=>{h!==F&&E?.(h?D?[D]:[]:D[0])}),[h,F]),r(u.Root,{ref:W,stretch:!0,mobileContainer:G,children:[e(u.Trigger,{disabled:$.disabled||S,children:r("div",{...B,"aria-haspopup":"listbox",className:c(L.field,L[`s__${I}`],L[`v__${R}`],H&&L.round,$.className),"data-error":!!j,"data-disabled":$.disabled,"data-fb":"default"===R?"true":void 0,children:[r("div",{className:L.content__wrapper,children:[N,r("div",{className:L.content,children:[(F?!D.length:null==D||""===D)&&e("div",{className:L.placeholder,id:T,children:C}),F?D.length<3?D.map(((r,a)=>e(f,{round:H,cc:{badge:L.badge},children:r},a))):r(a,{children:[e(f,{round:H,cc:{badge:L.badge},children:D[0]}),r(f,{round:H,cc:{badge:L.badge},children:["+",D.length-1," more"]})]}):v.find((r=>r.value===D))?.label]}),e("input",{"aria-labelledby":C?T:void 0,...q,ref:s(A,V),readOnly:!0,className:L.input,value:D?.toString(),"aria-invalid":!!j})]}),e(n,{compact:!0,"aria-label":q["aria-label"],"aria-labelledby":q["aria-labelledby"],round:H,size:I,disabled:$.disabled||S,variant:"minimal",style:{marginRight:".2em"},children:e(b,{type:"expand"})})]})}),e(u.Content,{round:H,size:O,"aria-multiselectable":h,searchable:y,emptyMessage:x,virtualItemHeight:M,children:v.map((({label:a,value:l,key:o,disabled:i})=>{const t=F?D.includes(l):D===l;return r(u.Option,{value:o||""+a,disabled:i,"aria-selected":t,onSelect:()=>{if(F){const r=D.slice(),e=r.indexOf(l);e<0?(!_||r.length<_)&&r.push(l):r.splice(e,1),E?.(r)}else W.current?.close(),V.current?.focus(),E?.(l)},children:[a,t&&e("div",{className:L.icon,children:e(b,{type:"check"})})]},""+l)}))})]})}export{v as default};
//# sourceMappingURL=select.js.map