the-omelet-ui 1.8.69 → 1.8.71
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.
- package/dist/chunk-ZLFUJ2SP.js +1 -0
- package/dist/entries/bottomSheet.d.ts +34 -0
- package/dist/entries/bottomSheet.js +1 -0
- package/dist/entries/districtDropdown.js +1 -1
- package/dist/entries/modal.js +1 -1
- package/dist/entries/provinceDropdown.js +1 -1
- package/dist/entries/searchInput.js +1 -1
- package/dist/entries/searchSelect.d.ts +3 -1
- package/dist/entries/searchSelect.js +1 -1
- package/dist/entries/searchSelectWithApi.d.ts +3 -1
- package/dist/entries/searchSelectWithApi.js +1 -1
- package/dist/entries/subDistrictDropdown.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-E7CR2CS6.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {a as a$5}from'./chunk-KYNNMWQA.js';import {a as a$7}from'./chunk-J2VIBL5U.js';import {a as a$2}from'./chunk-FUTRX3HX.js';import {a as a$4}from'./chunk-KA7C25YJ.js';import {a as a$6}from'./chunk-IX36POX2.js';import {a as a$3}from'./chunk-H7BTHYKO.js';import {a}from'./chunk-THE2HQGT.js';import {a as a$1}from'./chunk-6GLPXMGB.js';import*as t from'react';import*as i from'@radix-ui/react-popover';import {jsx,jsxs}from'react/jsx-runtime';var Xe=s=>a=>{s(typeof a=="string"?a:a[0]||"");},Ye=s=>a=>{s(Array.isArray(a)?a:[a]);};function ce(s){return typeof s=="string"?{id:s,label:s}:s}var He={neutral:"border-neutral-900 bg-neutral-900 text-white",primary:"border-black bg-black text-white",red:"border-red-600 bg-red-600 text-white",green:"border-green-600 bg-green-600 text-white",blue:"border-blue-600 bg-blue-600 text-white",yellow:"border-yellow-500 bg-yellow-500 text-black",violet:"border-violet-600 bg-violet-600 text-white"};function Fe(s,a){let[N,L]=t.useState(s);return t.useEffect(()=>{let n=setTimeout(()=>L(s),a);return ()=>clearTimeout(n)},[s,a]),N}function je({autoFocus:s=false,trigger:a$8,triggerPlaceholder:N="Choose",items:L,loadOptions:n,selectionMode:A="multiple",value:W,defaultValue:ie,onChange:ue,searchable:Z=true,placeholder:de="Placeholder Text",searchButtonLabel:me="Search",onQueryChange:ge,onSearch:z,loading:fe=false,emptyLabel:pe="No results",errorLabel:be="Failed to load options",triggerClassName:he,contentClassName:xe,maxHeight:Re=288,renderItem:_,buttonColor:ve="primary",searchButtonColor:ye,searchButtonClassName:Ce,checkedColor:ke="primary",checkedClassName:Ne,renderTriggerValue:$,label:D,required:we,enablePagination:x=false,pageSize:G=20,errorMessage:M,size:Ie="md",onSearchMode:R="onClickButton",debounceMs:Se=300,onOpenChange:J,popoverZIndex:Be=1001,disabled:v=false}){let[w,K]=t.useState(false),[m,X]=t.useState(""),[I,y]=t.useState(""),[Pe,S]=t.useState([]),[E,Y]=t.useState(false),[q,Q]=t.useState(null),[Te,B]=t.useState(1),[Le,P]=t.useState(true),u=Fe(m,Se),C=t.useRef(null),c=A==="multiple",[Ae,ze]=t.useState(ie??(c?[]:"")),l=W??Ae,O=n?Pe:L||[],p=t.useMemo(()=>O.map(ce),[O]),b=t.useCallback(async(e,o=1,g=false)=>{if(n){Y(true),Q(null);try{let j=(await n(e)).map(ce);S(g?Ve=>[...Ve,...j]:j),x&&P(j.length===G);}catch(f){Q(f instanceof Error?f.message:"Unknown error"),S([]);}finally{Y(false);}}},[n,x,G]),De=t.useCallback(e=>{K(e),J?.(e),e&&(X(""),y(""),B(1),P(true),Q(null),S([]),C.current=null,n&&(b("",1,false),C.current=""));},[n,b,J]);t.useEffect(()=>{!w||R!=="onChange"||u!==C.current&&(C.current=u,n?(B(1),P(true),b(u,1,false),y(u)):(y(u),z?.(u)));},[u,w,R,n,b,z]);let T=t.useMemo(()=>{if(n)return p;let o=(R==="onChange"?u:I).trim().toLowerCase();return o?p.filter(g=>String(g.label).toLowerCase().includes(o)):p},[p,I,u,n,R]),ee=e=>{ue?.(e),W===void 0&&ze(e);},Me=e=>{if(c){let o=new Set(l);o.has(e)?o.delete(e):o.add(e),ee(Array.from(o));}else ee(e),K(false);},Ee=e=>c?l.includes(e):l===e,te=()=>{n?(B(1),P(true),b(m,1,false),y(m),C.current=m):(y(m),z?.(m));},qe=()=>{if(!E&&Le&&x){let e=Te+1;B(e),b(I,e,true);}},V=t.useMemo(()=>c?l:l?[l]:[],[l,c]),k=t.useMemo(()=>p.filter(e=>V.includes(e.id)),[p,V]),Qe=t.useMemo(()=>k.length===0?N:c?`\u0E40\u0E25\u0E37\u0E2D\u0E01 ${k.length} \u0E23\u0E32\u0E22\u0E01\u0E32\u0E23`:k[0].label,[k,c,N]),H=E||fe,F=R==="onClickButton";return jsx("fieldset",{children:jsxs(i.Root,{open:w&&!v,onOpenChange:v?void 0:De,children:[D&&jsx(a,{label:D,required:we}),D&&jsx("div",{className:"mb-2"}),jsx(i.Trigger,{asChild:true,children:a$8??jsxs("button",{type:"button",className:a$1("flex w-full min-w-[260px] items-center justify-between","rounded-md border border-[#C9D7E3] bg-white px-2 py-3 text-left","outline-none focus-visible:ring-2 ring-black/20",M&&!v?"border-red-600":"",v?"bg-[#f4f4f4] pointer-events-none text-[#BDC2BE] border-none":"",a$3[Ie],he),children:[jsx("span",{className:a$1("flex-1 line-clamp-1",{"text-[#A5A9AD]":c?l?.length===0:!l,"text-black":c?l?.length>0:!!l,"text-[#BDC2BE]":v}),children:$?$(V,k):Qe}),jsx(a$2,{fontSize:16,className:a$1("ml-3 text-black/60 transition-transform",w?"rotate-180":"rotate-0")})]})}),M&&jsx("small",{className:"text-xs text-red-500",children:M}),jsx(i.Portal,{children:jsxs(i.Content,{sideOffset:8,onOpenAutoFocus:e=>{if(!s){e.preventDefault();return}},style:{zIndex:Be},className:a$1("w-[300px] rounded-md border border-black/10 bg-white p-2 shadow-xl","z-[1001]",xe),children:[Z&&jsxs("form",{className:a$1("gap-3",F?"grid grid-cols-[1fr_auto]":"block"),onSubmit:e=>{e.preventDefault(),F&&te();},children:[jsx(a$4,{start:jsx(a$5,{}),value:m,onChange:e=>{X(e.currentTarget.value),ge?.(e.currentTarget.value);},size:"sm",placeholder:de}),F&&jsx(a$6,{color:ye??ve,disabled:H||m.trim()===I.trim(),size:"sm",className:Ce,onClick:te,children:me})]}),jsxs("div",{role:"listbox","aria-multiselectable":c||void 0,className:a$1("overflow-y-auto rounded-md",{"mt-3":Z}),style:{maxHeight:Re},onScroll:e=>{if(!x)return;let{scrollTop:o,scrollHeight:g,clientHeight:f}=e.currentTarget;g-o<=f+50&&qe();},children:[H&&T.length===0&&jsx("div",{className:"p-6 text-center text-black/60",children:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14\u2026"}),q&&jsx("div",{className:"p-6 text-center text-red-600",children:be}),!H&&!q&&T.length===0&&jsx("div",{className:"p-6 text-center text-black/50",children:pe}),!q&&T.map(e=>{let o=Ee(e.id),g=He[ke],f=jsxs(a$6,{type:"button",role:"option","aria-selected":o,onClick:()=>Me(e.id),disabled:e.disabled,size:"sm",className:a$1("group flex w-full items-center justify-between gap-3 rounded-md px-2 py-2 text-left bg-white h-auto","hover:bg-black/[0.04] disabled:opacity-50",{"bg-black/[0.04]":o&&A==="single"}),children:[jsx("span",{className:"text-black text-md",children:e.label}),A==="multiple"&&jsx("span",{className:a$1("grid h-5 w-5 place-items-center rounded-full border-2",o?g:"border-black/20",o&&Ne),children:o?jsx(a$7,{fontSize:10}):null})]},e.id);return _?jsx("div",{children:_(e,false,o)},e.id):f}),x&&E&&T.length>0&&jsx("div",{className:"p-2 text-sm text-center text-black/40",children:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21..."})]}),jsx(i.Arrow,{className:"fill-white stroke-black/10"})]})})]})})}var Oe=je;export{Xe as a,Ye as b,Oe as c};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import React__default from 'react';
|
|
3
|
+
|
|
4
|
+
interface BottomSheetProps {
|
|
5
|
+
open?: boolean;
|
|
6
|
+
onOpenChange?: (open: boolean) => void;
|
|
7
|
+
/**
|
|
8
|
+
* ความสูงของ bottom sheet — รองรับเปอร์เซ็นต์ เช่น `"90%"` หรือ `90`
|
|
9
|
+
* @default "90%"
|
|
10
|
+
*/
|
|
11
|
+
height?: number | string;
|
|
12
|
+
children: React__default.ReactNode;
|
|
13
|
+
className?: string;
|
|
14
|
+
closeOnOverlayClick?: boolean;
|
|
15
|
+
closeOnEscape?: boolean;
|
|
16
|
+
duration?: number;
|
|
17
|
+
}
|
|
18
|
+
declare function BottomSheetRoot({ open, onOpenChange, height, children, className, closeOnOverlayClick, closeOnEscape, duration, }: BottomSheetProps): react_jsx_runtime.JSX.Element;
|
|
19
|
+
interface BottomSheetContentProps {
|
|
20
|
+
children: React__default.ReactNode;
|
|
21
|
+
className?: string;
|
|
22
|
+
}
|
|
23
|
+
declare function BottomSheetContent({ children, className }: BottomSheetContentProps): react_jsx_runtime.JSX.Element;
|
|
24
|
+
interface BottomSheetFooterProps {
|
|
25
|
+
children: React__default.ReactNode;
|
|
26
|
+
className?: string;
|
|
27
|
+
}
|
|
28
|
+
declare function BottomSheetFooter({ children, className }: BottomSheetFooterProps): react_jsx_runtime.JSX.Element;
|
|
29
|
+
declare const BottomSheet: typeof BottomSheetRoot & {
|
|
30
|
+
Content: typeof BottomSheetContent;
|
|
31
|
+
Footer: typeof BottomSheetFooter;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export { BottomSheet, type BottomSheetContentProps, type BottomSheetFooterProps, type BottomSheetProps, BottomSheet as default };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {a}from'../chunk-6GLPXMGB.js';import {createContext,useState,useEffect,useCallback,useLayoutEffect}from'react';import {createPortal}from'react-dom';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var P=createContext(void 0);function N(e="ui-bottom-sheet-portal"){let[o,l]=useState(null);return useLayoutEffect(()=>{let t=document.getElementById(e);return t||(t=document.createElement("div"),t.id=e,document.body.appendChild(t)),l(t),()=>{t&&t.childElementCount===0&&t.remove();}},[e]),o}function k(e){return typeof e=="number"?`${e}%`:/%|vh|px|rem|em$/.test(e.trim())?e:`${e}%`}function O({open:e=false,onOpenChange:o,height:l="90%",children:t,className:x,closeOnOverlayClick:C=true,closeOnEscape:u=true,duration:f=300}){let[n,p]=useState(e),[h,b]=useState(false),v=N();useEffect(()=>{p(e);},[e]);let i=useCallback(r=>{p(r),o?.(r);},[o]);useEffect(()=>{if(!n){b(false),document.body.style.overflow="unset";return}let r=document.body.style.overflow;document.body.style.overflow="hidden";let m=window.setTimeout(()=>b(true),10);return ()=>{window.clearTimeout(m),document.body.style.overflow=r;}},[n]),useEffect(()=>{if(!u||!n)return;let r=m=>{m.key==="Escape"&&i(false);};return document.addEventListener("keydown",r),()=>document.removeEventListener("keydown",r)},[u,i,n]);let S=k(l);return jsx(P.Provider,{value:{open:n,onOpenChange:i},children:n&&v&&createPortal(jsxs(Fragment,{children:[jsx("div",{role:"presentation","aria-hidden":!n,className:a("fixed inset-0 z-50 bg-black/50 transition-opacity",h?"opacity-100":"opacity-0"),style:{transitionDuration:`${f}ms`},onClick:()=>C&&i(false)}),jsx("div",{role:"dialog","aria-modal":"true",className:a("fixed inset-x-0 bottom-0 z-50 flex flex-col bg-white shadow-[0_-8px_32px_rgba(0,0,0,0.12)]","rounded-t-[28px] transition-transform ease-out",h?"translate-y-0":"translate-y-full",x),style:{height:S,maxHeight:"100dvh",transitionDuration:`${f}ms`},children:t})]}),v)})}function R({children:e,className:o}){return jsx("div",{className:a("min-h-0 flex-1 overflow-y-auto overscroll-contain",o),children:e})}function F({children:e,className:o}){return jsx("footer",{className:a("shrink-0 border-t border-[#E8EEF3] bg-white px-4 pb-[max(1rem,env(safe-area-inset-bottom))] pt-4",o),children:e})}var y=Object.assign(O,{Content:R,Footer:F}),H=y;export{y as BottomSheet,H as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {c}from'../chunk-
|
|
1
|
+
import {c}from'../chunk-ZLFUJ2SP.js';import'../chunk-KYNNMWQA.js';import'../chunk-J2VIBL5U.js';import'../chunk-FUTRX3HX.js';import'../chunk-KA7C25YJ.js';import'../chunk-QRYSV225.js';import'../chunk-IX36POX2.js';import'../chunk-H7BTHYKO.js';import'../chunk-THE2HQGT.js';import'../chunk-6GLPXMGB.js';import {useState,useEffect,useCallback}from'react';import {jsx}from'react/jsx-runtime';var B=(t,n)=>n==="en"?{id:t.id,name:t.name_en,value:t.id,label:t.name_en}:{id:t.id,name:t.name_th,value:t.id,label:t.name_th},y=async t=>{try{let n=await fetch("https://raw.githubusercontent.com/kongvut/thai-province-data/refs/heads/master/api/latest/district.json"),a=(await(await fetch("https://raw.githubusercontent.com/kongvut/thai-province-data/refs/heads/master/api/latest/province.json")).json()).find(e=>e.name_th===t||e.name_en===t||e.id===t);if(a&&(t=a.id),!n.ok)throw new Error(`HTTP ${n.status}`);let s=await n.json()??[];return t&&(s=s.filter(e=>e.province_id===t)),s}catch{return []}},j=({searchLabel:t="Search",locale:n="th",searchPlaceholder:u="Search District",placeholder:h="Select District",label:a,searchButtonClassName:m="bg-blue-500",onChange:s,value:e,required:b=false,provinceId:c$1,error:v,onSearchMode:_="onClickButton",debounceMs:C,onOpenChange:w,popoverZIndex:P})=>{let[o,S]=useState([]),[l,d]=useState(null);useEffect(()=>{y(c$1??void 0).then(S);},[c$1]),useEffect(()=>{if(!e){d(null);return}let r=o.find(i=>i.id===e||i.name_th===e||i.name_en===e);d(r??null);},[o,e,n]);let k=useCallback(r=>{let i=o.find(x=>x.id===r);i&&(d(i),s?.(i));},[o,s]);return jsx("div",{children:jsx(c,{items:o.map(r=>B(r,n)),placeholder:u,triggerPlaceholder:h,label:a,selectionMode:"single",searchButtonClassName:m,onChange:r=>{k(r);},searchButtonLabel:t,value:l?.id!=null?l.id:void 0,required:b,disabled:!c$1&&l==null,errorMessage:v,onSearchMode:_,debounceMs:C,onOpenChange:w,popoverZIndex:P})})},q=j;
|
|
2
2
|
export{q as default};
|
package/dist/entries/modal.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {a
|
|
1
|
+
import {a}from'../chunk-6GLPXMGB.js';import {a as a$1}from'../chunk-VR7M77PA.js';import*as t from'react';import {createPortal}from'react-dom';import {jsxs,jsx}from'react/jsx-runtime';function P(n="ui-portal"){let[a,r]=t.useState(null);return t.useLayoutEffect(()=>{let e=document.getElementById(n);return e||(e=document.createElement("div"),e.id=n,document.body.appendChild(e)),r(e),()=>{e&&e.childElementCount===0&&e.remove();}},[n]),a}function A({open:n,onClose:a$2,icon:r,title:e,description:c,footer:f,wrapperClassName:k,contentClassName:L,showCloseX:C=false,closeOnEsc:p=true,closeOnOverlayClick:v=true,initialFocusRef:y,children:b}){let x=P(),i=t.useRef(null),R=t.useRef(null),H=t.useCallback(()=>{v&&a$2?.();},[v,a$2]);return t.useEffect(()=>{if(!n)return;R.current=document.activeElement??null;let u=document.body.style.overflow;document.body.style.overflow="hidden";let T=y?.current||i.current;requestAnimationFrame(()=>T?.focus());let E=l=>{if(l.key==="Escape"&&p&&(l.stopPropagation(),a$2?.()),l.key==="Tab"){let w=i.current;if(!w)return;let s=w.querySelectorAll('a[href],button,textarea,input,select,[tabindex]:not([tabindex="-1"])');if(!s.length)return;let h=s[0],N=s[s.length-1],g=document.activeElement;l.shiftKey&&g===h?(l.preventDefault(),N.focus()):!l.shiftKey&&g===N&&(l.preventDefault(),h.focus());}};return document.addEventListener("keydown",E),()=>{document.body.style.overflow=u,document.removeEventListener("keydown",E),R.current?.focus?.();}},[n,p,a$2,y]),!n||!x?null:createPortal(jsxs("div",{className:a("fixed inset-0 z-[1000] grid place-items-center p-4 bg-black/50 overflow-auto",k),onMouseDown:H,"aria-live":"polite",children:[jsxs("div",{role:"dialog","aria-modal":"true",ref:i,tabIndex:-1,onMouseDown:u=>u.stopPropagation(),className:a("relative w-full max-w-[480px] rounded-2xl bg-white shadow-xl outline-none px-6 py-6 animate-slide-down",L),children:[C&&jsx("button",{"aria-label":"Close",onClick:a$2,className:"absolute right-3 top-3 grid h-8 w-8 place-items-center rounded-full text-[#C9D7E3] hover:text-gray-600 transition-colors cursor-pointer",children:jsx(a$1,{fontSize:14})}),(r||e||c)&&jsxs("div",{className:"text-center",children:[r&&jsx("div",{className:"mb-4 flex justify-center",children:r}),e&&jsx("h2",{className:"text-xl font-semibold text-black",children:e}),c&&jsx("p",{className:"mt-2 text-black/70",children:c})]}),b&&jsx("div",{className:"mt-4",children:b}),f&&jsx("div",{className:"mt-6 flex items-center justify-center gap-3",children:f})]}),jsx("style",{children:`
|
|
2
2
|
@keyframes slide-down {
|
|
3
3
|
from {
|
|
4
4
|
opacity: 0;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {c}from'../chunk-
|
|
1
|
+
import {c}from'../chunk-ZLFUJ2SP.js';import'../chunk-KYNNMWQA.js';import'../chunk-J2VIBL5U.js';import'../chunk-FUTRX3HX.js';import'../chunk-KA7C25YJ.js';import'../chunk-QRYSV225.js';import'../chunk-IX36POX2.js';import'../chunk-H7BTHYKO.js';import'../chunk-THE2HQGT.js';import'../chunk-6GLPXMGB.js';import {useState,useEffect,useCallback}from'react';import {jsx}from'react/jsx-runtime';var y=(e,t)=>t==="en"?{id:e.id,name:e.name_en,value:e.id,label:e.name_en}:{id:e.id,name:e.name_th,value:e.id,label:e.name_th},q=async()=>await(await fetch("https://raw.githubusercontent.com/kongvut/thai-province-data/refs/heads/master/api/latest/province.json")).json(),I=({searchLabel:e="Search",disabled:t,locale:s="th",searchPlaceholder:p="Search Province",placeholder:v="Select Province",label:m,searchButtonClassName:P="bg-blue-500",onChange:i,value:a,required:g=false,error:b,onSearchMode:f,debounceMs:C,onOpenChange:S,popoverZIndex:_})=>{let[o,x]=useState([]),[M,c$1]=useState(null);useEffect(()=>{q().then(x);},[]),useEffect(()=>{if(a){let n=o.find(r=>s==="th"?r.name_th===a:r.name_en===a);n&&c$1(n);}},[o,a,s]);let w=useCallback(n=>{let r=o.find(B=>B.id===n);r&&(c$1(r),i?.(r));},[o,i]);return jsx("div",{children:jsx(c,{items:o.map(n=>y(n,s)),placeholder:p,triggerPlaceholder:v,label:m,selectionMode:"single",searchButtonClassName:P,onChange:n=>{w(n);},searchButtonLabel:e,value:M?.id,required:g,disabled:t,errorMessage:b,onSearchMode:f,debounceMs:C,onOpenChange:S,popoverZIndex:_})})},L=I;
|
|
2
2
|
export{L as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a
|
|
1
|
+
import {a}from'../chunk-6GLPXMGB.js';import {a as a$1}from'../chunk-VR7M77PA.js';import {forwardRef,memo,useState,useRef,useImperativeHandle,useCallback,useMemo,useEffect}from'react';import*as h from'@radix-ui/react-popover';import {jsxs,jsx}from'react/jsx-runtime';var ye=({title:i,titleId:p,...n},a)=>jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 16 16",width:"1em",height:"1em",ref:a,"aria-labelledby":p,...n,children:[i?jsx("title",{id:p,children:i}):null,jsx("path",{fill:"currentColor",fillRule:"evenodd",d:"M7.513 1.391a6.122 6.122 0 1 0 4.283 10.497q0-.003.003-.004A6.122 6.122 0 0 0 7.513 1.39m5.744 10.965a7.513 7.513 0 1 0-.992.976l2.556 2.472a.695.695 0 1 0 .967-1z",clipRule:"evenodd"})]}),Oe=forwardRef(ye),xe=memo(Oe),Y=xe;var q=forwardRef(({placeholder:i="\u0E04\u0E49\u0E19\u0E2B\u0E32...",defaultValue:p="",value:n,onChange:a$2,onSelect:v,onSubmit:s,options:f=[],onSearch:l,debounceMs:g=300,isLoading:x=false,disabled:k=false,className:L,inputClassName:te,popoverClassName:re,optionClassName:ne,clearButtonClassName:ae,leftIconClassName:oe,showClearButton:H=true,showSearchIcon:M=true,leftIcon:E,emptyMessage:ie="\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E1C\u0E25\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32",loadingMessage:se="\u0E01\u0E33\u0E25\u0E31\u0E07\u0E04\u0E49\u0E19\u0E2B\u0E32...",maxResults:D=10,renderOption:le,minSearchLength:w=0,hintText:Q,autoSelectFirst:N=false},de)=>{let[ce,T]=useState(p),[j,c]=useState(false),[o,C]=useState([]),[ue,U]=useState(false),[I,A]=useState(N?0:-1),m=useRef(null),R=useRef(void 0),d=n!==void 0?n:ce,$=x||ue;useImperativeHandle(de,()=>({focus:()=>{m.current?.focus();},blur:()=>{m.current?.blur();},clear:()=>{J();},getInputElement:()=>m.current}),[]);let F=useCallback(e=>{if(!e||e.length<w)return [];let t=e.toLowerCase();return f.filter(b=>b.label.toLowerCase().includes(t)||b.value.toLowerCase().includes(t)||b.category?.toLowerCase().includes(t)).slice(0,D)},[f,D,w]),G=useCallback(async e=>{if(!e||e.length<w){C([]),c(false);return}if(!l){let t=F(e);C(t),c(t.length>0);return}R.current&&window.clearTimeout(R.current),R.current=window.setTimeout(async()=>{U(true);try{let t=await l(e);C(t.slice(0,D)),c(t.length>0);}catch{C([]);}finally{U(false);}},g);},[l,F,g,D,w]),pe=useCallback(e=>{let t=e.target.value;n===void 0&&T(t),a$2?.(t),G(t),A(N?0:-1);},[n,a$2,G,N]),z=useCallback(e=>{let t=e.label;n===void 0&&T(t),a$2?.(t),v?.(e),c(false),m.current?.blur();},[n,a$2,v]),J=useCallback(()=>{n===void 0&&T(""),a$2?.(""),C([]),c(false),m.current?.focus();},[n,a$2]),K=useCallback(e=>{s?.(e),c(false),m.current?.blur();},[s]),fe=useCallback(e=>{if(!j||o.length===0){e.key==="Enter"&&(e.preventDefault(),s&&K(d));return}switch(e.key){case "ArrowDown":e.preventDefault(),A(t=>t===-1?0:t<o.length-1?t+1:t);break;case "ArrowUp":e.preventDefault(),A(t=>t<=0?N?0:-1:t-1);break;case "Enter":e.preventDefault(),I>=0&&o[I]?z(o[I]):s&&K(d);break;case "Escape":e.preventDefault(),c(false),m.current?.blur();break}},[j,o,I,N,s,d,z,K]),S=useMemo(()=>o.reduce((e,t)=>{let b=t.category||"default";return e[b]||(e[b]=[]),e[b].push(t),e},{}),[o]),ge=useMemo(()=>Object.keys(S).length>1||Object.keys(S).length===1&&!S.default,[S]);useEffect(()=>()=>{R.current&&window.clearTimeout(R.current);},[]);let me=useMemo(()=>({paddingLeft:M||E?"3.5rem":"1.5rem",paddingRight:H&&d?"3.5rem":"1.5rem"}),[M,E,H,d]);return jsxs("div",{className:"w-full",children:[jsxs(h.Root,{open:j,onOpenChange:c,children:[jsx(h.Anchor,{asChild:true,children:jsxs("div",{className:a("relative",L),children:[(M||E)&&jsx("div",{className:a("absolute top-1/2 -translate-y-1/2 pointer-events-none",oe),style:{left:"1rem"},children:E||jsx(Y,{})}),jsx("input",{ref:m,type:"text",value:d,onChange:pe,onKeyDown:fe,onFocus:useCallback(()=>{d&&o.length>0&&c(true);},[d,o.length]),placeholder:i,disabled:k,style:me,className:a("w-full h-10 rounded-full border border-gray-300","text-base","focus:outline-none focus:border-gray-900 focus:ring-2 focus:ring-gray-100","disabled:bg-gray-50 disabled:cursor-not-allowed","transition-all",te)}),H&&d&&!k&&jsx("button",{type:"button",onClick:J,className:a("absolute top-1/2 -translate-y-1/2","w-6 h-6 rounded-full","flex items-center justify-center","bg-gray-200 hover:bg-gray-300","transition-colors",ae),style:{right:"1rem"},"aria-label":"Clear search",children:jsx(a$1,{className:"text-[10px]"})})]})}),jsx(h.Portal,{children:jsxs(h.Content,{side:"bottom",align:"start",sideOffset:8,className:a("w-[var(--radix-popover-trigger-width)]","bg-white rounded-2xl shadow-lg border border-gray-200","max-h-[400px] overflow-y-auto","z-50","animate-in fade-in-0 zoom-in-95",re),onOpenAutoFocus:e=>e.preventDefault(),children:[$&&jsx("div",{className:"p-4 text-center text-gray-500 text-sm",children:jsxs("div",{className:"flex items-center justify-center gap-2",children:[jsx("div",{className:"w-4 h-4 border-2 border-gray-300 border-t-gray-600 rounded-full animate-spin"}),jsx("span",{children:se})]})}),!$&&o.length===0&&d.length>=w&&jsx("div",{className:"p-4 text-center text-gray-500 text-sm",children:ie}),!$&&o.length>0&&jsx(ee,{hasCategories:ge,groupedOptions:S,filteredOptions:o,highlightedIndex:I,renderOption:le,optionClassName:ne,onSelect:z})]})})]}),Q&&jsx("div",{className:"mt-3 text-center text-sm text-gray-400",children:Q})]})});q.displayName="SearchInput";var ee=memo(({hasCategories:i,groupedOptions:p,filteredOptions:n,highlightedIndex:a,renderOption:v,optionClassName:s,onSelect:f})=>jsx("div",{className:"py-2",children:i?Object.entries(p).map(([l,g])=>jsxs("div",{children:[l!=="default"&&jsx("div",{className:"px-4 py-2 text-xs font-semibold text-gray-400 uppercase",children:l}),g.map((x,k)=>{let L=n.indexOf(x);return jsx(B,{option:x,index:L,isHighlighted:L===a,renderOption:v,optionClassName:s,onSelect:f},`${x.value}-${k}`)})]},l)):n.map((l,g)=>jsx(B,{option:l,index:g,isHighlighted:g===a,renderOption:v,optionClassName:s,onSelect:f},`${l.value}-${g}`))}));ee.displayName="OptionsList";var B=memo(({option:i,index:p,isHighlighted:n,renderOption:a$1,optionClassName:v,onSelect:s})=>{let f=useCallback(()=>{s(i);},[i,s]);return a$1?jsx("div",{onClick:f,children:a$1(i,p)}):jsx("button",{type:"button",onClick:f,className:a("w-full px-4 py-3 text-left text-sm","hover:bg-gray-50 transition-colors",n&&"bg-gray-100",v),children:i.label})});B.displayName="OptionItem";var Ie=q;
|
|
2
2
|
export{Ie as default};
|
|
@@ -28,6 +28,8 @@ type SearchSelectProps = {
|
|
|
28
28
|
loading?: boolean;
|
|
29
29
|
emptyLabel?: React.ReactNode;
|
|
30
30
|
className?: string;
|
|
31
|
+
/** คลาสเพิ่มบน trigger แบบฟิลด์ (เช่น min-w) */
|
|
32
|
+
triggerClassName?: string;
|
|
31
33
|
contentClassName?: string;
|
|
32
34
|
maxHeight?: number;
|
|
33
35
|
renderItem?: (item: BaseItem, active: boolean, selected: boolean) => React.ReactNode;
|
|
@@ -48,6 +50,6 @@ type SearchSelectProps = {
|
|
|
48
50
|
/** Auto focus on search input when popover opens (default: false) */
|
|
49
51
|
autoFocus?: boolean;
|
|
50
52
|
};
|
|
51
|
-
declare function SearchSelect({ autoFocus, trigger, triggerPlaceholder, items, selectionMode, value, defaultValue, onChange, searchable, placeholder, searchButtonLabel, onQueryChange, onSearch, loading, emptyLabel, contentClassName, maxHeight, renderItem, buttonColor, searchButtonColor, searchButtonClassName, checkedColor, checkedClassName, renderTriggerValue, label, required, errorMessage, disabled, size }: SearchSelectProps): react_jsx_runtime.JSX.Element;
|
|
53
|
+
declare function SearchSelect({ autoFocus, trigger, triggerPlaceholder, items, selectionMode, value, defaultValue, onChange, searchable, placeholder, searchButtonLabel, onQueryChange, onSearch, loading, emptyLabel, triggerClassName, contentClassName, maxHeight, renderItem, buttonColor, searchButtonColor, searchButtonClassName, checkedColor, checkedClassName, renderTriggerValue, label, required, errorMessage, disabled, size }: SearchSelectProps): react_jsx_runtime.JSX.Element;
|
|
52
54
|
|
|
53
55
|
export { type SearchSelectProps, SearchSelect as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {a as a$6}from'../chunk-KYNNMWQA.js';import {a as a$8}from'../chunk-J2VIBL5U.js';import {a as a$
|
|
1
|
+
import {a as a$6}from'../chunk-KYNNMWQA.js';import {a as a$8}from'../chunk-J2VIBL5U.js';import {a as a$3}from'../chunk-FUTRX3HX.js';import {a as a$5}from'../chunk-KA7C25YJ.js';import'../chunk-QRYSV225.js';import {a as a$7}from'../chunk-IX36POX2.js';import {a as a$4}from'../chunk-H7BTHYKO.js';import {a as a$1}from'../chunk-THE2HQGT.js';import {a as a$2}from'../chunk-6GLPXMGB.js';import*as a from'react';import*as l from'@radix-ui/react-popover';import {jsxs,jsx}from'react/jsx-runtime';function me(c){return typeof c=="string"?{id:c,label:c}:c}var ue={neutral:"border-neutral-900 bg-neutral-900 text-white",primary:"border-black bg-black text-white",red:"border-red-600 bg-red-600 text-white",green:"border-green-600 bg-green-600 text-white",blue:"border-blue-600 bg-blue-600 text-white",yellow:"border-yellow-500 bg-yellow-500 text-black",violet:"border-violet-600 bg-violet-600 text-white"};function pe({autoFocus:c=false,trigger:O,triggerPlaceholder:R="Choose",items:y,selectionMode:b="multiple",value:w,defaultValue:Q,onChange:V,searchable:N=true,placeholder:F="Placeholder Text",searchButtonLabel:j="Search",onQueryChange:E,onSearch:H,loading:u=false,emptyLabel:_="No results",triggerClassName:$,contentClassName:G,maxHeight:J=288,renderItem:k,buttonColor:K="primary",searchButtonColor:U,searchButtonClassName:W,checkedColor:X="primary",checkedClassName:Y,renderTriggerValue:C,label:P,required:Z,errorMessage:f,disabled:p,size:ee="md"}){let[S,I]=a.useState(false),[g,te]=a.useState(""),[h,re]=a.useState(""),s=b==="multiple",[oe,ae]=a.useState(Q??(s?[]:"")),o=w??oe,d=a.useMemo(()=>y.map(me),[y]),B=a.useMemo(()=>{let e=h.trim().toLowerCase();return e?d.filter(r=>String(r.label).toLowerCase().includes(e)):d},[d,h]),L=e=>{V?.(e),w===void 0&&ae(e);},se=e=>{if(s){let r=new Set(o);r.has(e)?r.delete(e):r.add(e),L(Array.from(r));}else L(e),I(false);},le=e=>s?o.includes(e):o===e,ne=()=>{re(g),H?.(g);},v=a.useMemo(()=>s?o:o?[o]:[],[o,s]),m=a.useMemo(()=>d.filter(e=>v.includes(e.id)),[d,v]),ie=a.useMemo(()=>m.length===0?R:s?`\u0E40\u0E25\u0E37\u0E2D\u0E01 ${m.length} \u0E23\u0E32\u0E22\u0E01\u0E32\u0E23`:m[0].label,[m,s,R]);return jsxs("fieldset",{children:[P&&jsx(a$1,{label:P,required:Z}),jsxs(l.Root,{open:S&&!p,onOpenChange:e=>!p&&I(e),children:[jsx("div",{className:"mb-2"}),jsx(l.Trigger,{asChild:true,children:O??jsxs("button",{type:"button",className:a$2("flex w-full min-w-[260px] items-center justify-between","rounded-md border border-[#C9D7E3] bg-white px-2 text-left","outline-none focus-visible:ring-2 ring-black/20",f&&!p?"border-red-600":"",p?"opacity-50 cursor-not-allowed":"",a$4[ee],$),children:[jsx("span",{className:a$2("flex-1 line-clamp-1",{"text-[#A5A9AD]":s?o?.length===0:!o,"text-black":s?o?.length>0:!!o}),children:C?C(v,m):ie}),jsx(a$3,{fontSize:16,className:a$2("ml-3 text-black/60 transition-transform",S?"rotate-180":"rotate-0")})]})}),jsx(l.Portal,{children:jsxs(l.Content,{sideOffset:8,onOpenAutoFocus:e=>{if(!c){e.preventDefault();return}},className:a$2("w-[300px] rounded-md border border-black/10 bg-white p-2 shadow-xl",G),children:[N&&jsxs("form",{className:"grid grid-cols-[1fr_auto] gap-3",onSubmit:e=>{e.preventDefault(),ne();},children:[jsx(a$5,{start:jsx(a$6,{}),value:g,onChange:e=>{te(e.currentTarget.value),E?.(e.currentTarget.value);},size:"md",placeholder:F}),jsx(a$7,{color:U??K,type:"submit",disabled:u||g.trim()===h.trim(),size:"sm",className:W,children:j})]}),jsxs("div",{role:"listbox","aria-multiselectable":s||void 0,className:a$2(" overflow-y-auto rounded-md",{"mt-3":N}),style:{maxHeight:J},children:[u&&jsx("div",{className:"p-6 text-center text-black/60",children:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14\u2026"}),!u&&B.length===0&&jsx("div",{className:"p-6 text-center text-black/50",children:_}),!u&&B.map(e=>{let r=le(e.id),ce=ue[X],de=jsxs(a$7,{type:"button",role:"option","aria-selected":r,onClick:()=>se(e.id),disabled:e.disabled,size:"sm",className:a$2("group flex w-full items-center justify-between gap-3 rounded-md px-2 py-2 text-left bg-white","hover:bg-black/[0.04] disabled:opacity-50",{"bg-black/[0.04]":r&&b==="single"}),children:[jsx("span",{className:"text-md text-black",children:e.label}),b==="multiple"&&jsx("span",{className:a$2("grid h-5 w-5 place-items-center rounded-full border-2",r?ce:"border-black/20",r&&Y),children:r?jsx(a$8,{fontSize:10}):null})]},e.id);return k?jsx("div",{children:k(e,false,r)},e.id):de})]}),jsx(l.Arrow,{className:"fill-white stroke-black/10"})]})})]}),f&&jsx("small",{className:"text-red-500 text-xs",children:f})]})}var ge=pe;export{ge as default};
|
|
@@ -32,6 +32,8 @@ type SearchSelectProps = {
|
|
|
32
32
|
emptyLabel?: React.ReactNode;
|
|
33
33
|
errorLabel?: React.ReactNode;
|
|
34
34
|
className?: string;
|
|
35
|
+
/** คลาสเพิ่มบน trigger แบบฟิลด์ (เช่น min-w) */
|
|
36
|
+
triggerClassName?: string;
|
|
35
37
|
contentClassName?: string;
|
|
36
38
|
maxHeight?: number;
|
|
37
39
|
renderItem?: (item: BaseItem, active: boolean, selected: boolean) => React.ReactNode;
|
|
@@ -54,6 +56,6 @@ type SearchSelectProps = {
|
|
|
54
56
|
popoverZIndex?: number;
|
|
55
57
|
disabled?: boolean;
|
|
56
58
|
};
|
|
57
|
-
declare function SearchSelectWithAPI({ autoFocus, trigger, triggerPlaceholder, items: propItems, loadOptions, selectionMode, value, defaultValue, onChange, searchable, placeholder, searchButtonLabel, onQueryChange, onSearch, loading: externalLoading, emptyLabel, errorLabel, contentClassName, maxHeight, renderItem, buttonColor, searchButtonColor, searchButtonClassName, checkedColor, checkedClassName, renderTriggerValue, label, required, enablePagination, pageSize, errorMessage, size, onSearchMode, debounceMs, onOpenChange, popoverZIndex, disabled, }: SearchSelectProps): react_jsx_runtime.JSX.Element;
|
|
59
|
+
declare function SearchSelectWithAPI({ autoFocus, trigger, triggerPlaceholder, items: propItems, loadOptions, selectionMode, value, defaultValue, onChange, searchable, placeholder, searchButtonLabel, onQueryChange, onSearch, loading: externalLoading, emptyLabel, errorLabel, triggerClassName, contentClassName, maxHeight, renderItem, buttonColor, searchButtonColor, searchButtonClassName, checkedColor, checkedClassName, renderTriggerValue, label, required, enablePagination, pageSize, errorMessage, size, onSearchMode, debounceMs, onOpenChange, popoverZIndex, disabled, }: SearchSelectProps): react_jsx_runtime.JSX.Element;
|
|
58
60
|
|
|
59
61
|
export { type SearchSelectProps, SearchSelectWithAPI as default, handleMultipleChange, handleSingleChange };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{c as default,b as handleMultipleChange,a as handleSingleChange}from'../chunk-
|
|
1
|
+
export{c as default,b as handleMultipleChange,a as handleSingleChange}from'../chunk-ZLFUJ2SP.js';import'../chunk-KYNNMWQA.js';import'../chunk-J2VIBL5U.js';import'../chunk-FUTRX3HX.js';import'../chunk-KA7C25YJ.js';import'../chunk-QRYSV225.js';import'../chunk-IX36POX2.js';import'../chunk-H7BTHYKO.js';import'../chunk-THE2HQGT.js';import'../chunk-6GLPXMGB.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {c}from'../chunk-
|
|
1
|
+
import {c}from'../chunk-ZLFUJ2SP.js';import'../chunk-KYNNMWQA.js';import'../chunk-J2VIBL5U.js';import'../chunk-FUTRX3HX.js';import'../chunk-KA7C25YJ.js';import'../chunk-QRYSV225.js';import'../chunk-IX36POX2.js';import'../chunk-H7BTHYKO.js';import'../chunk-THE2HQGT.js';import'../chunk-6GLPXMGB.js';import {useState,useEffect,useCallback}from'react';import {jsx}from'react/jsx-runtime';var k=(t,c)=>c==="en"?{id:t.id,name:t.name_en,value:t.id,label:t.name_en}:{id:t.id,name:t.name_th,value:t.id,label:t.name_th},y=async t=>{try{let l=(await(await fetch("https://raw.githubusercontent.com/kongvut/thai-province-data/refs/heads/master/api/latest/district.json")).json()).find(r=>r.name_th===t||r.name_en===t||r.id===t);l&&(t=l.id);let s=await fetch("https://raw.githubusercontent.com/kongvut/thai-province-data/refs/heads/master/api/latest/sub_district.json");if(!s.ok)throw new Error(`HTTP ${s.status}`);let e=await s.json(),n=[{id:e.length+1,zip_code:10800,name_th:"\u0E27\u0E07\u0E28\u0E4C\u0E2A\u0E27\u0E48\u0E32\u0E07",name_en:"Wong Sawang",district_id:1029,lat:6.249,long:101.875,created_at:"2019-08-09T03:33:09.000+07:00",updated_at:"2025-09-20T06:31:26.000+07:00",deleted_at:null},{id:e.length+2,zip_code:10230,name_th:"\u0E23\u0E32\u0E21\u0E2D\u0E34\u0E19\u0E17\u0E23\u0E32",name_en:"Ram Inthra",district_id:1043,lat:null,long:null,created_at:"2019-08-09T03:33:09.000+07:00",updated_at:"2025-09-20T06:31:26.000+07:00",deleted_at:null}];return e=[...e,...n],t&&(e=e.filter(r=>r.district_id===t)),e}catch{return []}},B=({locale:t="th",searchPlaceholder:c$1="Search Sub District",placeholder:b="Select Sub District",label:l,searchButtonClassName:s="bg-blue-500",onChange:e,value:n,required:r=false,districtId:u,error:_,searchLabel:f="Search",onSearchMode:D,debounceMs:w,onOpenChange:v,popoverZIndex:C})=>{let[o,P]=useState([]),[d,h]=useState(null);useEffect(()=>{y(u??void 0).then(P);},[u]),useEffect(()=>{if(!n){h(null);return}let i=o.find(a=>a.id===n||a.name_th===n||a.name_en===n);h(i??null);},[o,n,t]);let x=useCallback(i=>{let a=o.find(M=>M.id===i);a&&(h(a),e?.(a));},[o,e]);return jsx("div",{children:jsx(c,{items:o.map(i=>k(i,t)),placeholder:c$1,triggerPlaceholder:b,label:l,selectionMode:"single",searchButtonClassName:s,onChange:i=>{x(i);},searchButtonLabel:f,value:d?.id!=null?d.id:void 0,required:r,disabled:!u&&d==null,errorMessage:_,onSearchMode:D,debounceMs:w,onOpenChange:v,popoverZIndex:C})})},j=B;
|
|
2
2
|
export{j as default};
|
package/package.json
CHANGED
package/dist/chunk-E7CR2CS6.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {a as a$5}from'./chunk-KYNNMWQA.js';import {a as a$7}from'./chunk-J2VIBL5U.js';import {a as a$4}from'./chunk-KA7C25YJ.js';import {a as a$2}from'./chunk-FUTRX3HX.js';import {a as a$6}from'./chunk-IX36POX2.js';import {a as a$3}from'./chunk-H7BTHYKO.js';import {a}from'./chunk-THE2HQGT.js';import {a as a$1}from'./chunk-6GLPXMGB.js';import*as t from'react';import*as i from'@radix-ui/react-popover';import {jsx,jsxs}from'react/jsx-runtime';var Ke=s=>a=>{s(typeof a=="string"?a:a[0]||"");},Xe=s=>a=>{s(Array.isArray(a)?a:[a]);};function ce(s){return typeof s=="string"?{id:s,label:s}:s}var Ve={neutral:"border-neutral-900 bg-neutral-900 text-white",primary:"border-black bg-black text-white",red:"border-red-600 bg-red-600 text-white",green:"border-green-600 bg-green-600 text-white",blue:"border-blue-600 bg-blue-600 text-white",yellow:"border-yellow-500 bg-yellow-500 text-black",violet:"border-violet-600 bg-violet-600 text-white"};function He(s,a){let[N,L]=t.useState(s);return t.useEffect(()=>{let n=setTimeout(()=>L(s),a);return ()=>clearTimeout(n)},[s,a]),N}function Fe({autoFocus:s=false,trigger:a$8,triggerPlaceholder:N="Choose",items:L,loadOptions:n,selectionMode:A="multiple",value:W,defaultValue:ie,onChange:ue,searchable:Z=true,placeholder:de="Placeholder Text",searchButtonLabel:me="Search",onQueryChange:ge,onSearch:z,loading:fe=false,emptyLabel:pe="No results",errorLabel:be="Failed to load options",contentClassName:he,maxHeight:xe=288,renderItem:_,buttonColor:Re="primary",searchButtonColor:ve,searchButtonClassName:ye,checkedColor:Ce="primary",checkedClassName:ke,renderTriggerValue:$,label:D,required:Ne,enablePagination:x=false,pageSize:G=20,errorMessage:M,size:we="md",onSearchMode:R="onClickButton",debounceMs:Ie=300,onOpenChange:J,popoverZIndex:Se=1001,disabled:v=false}){let[w,K]=t.useState(false),[m,X]=t.useState(""),[I,y]=t.useState(""),[Be,S]=t.useState([]),[E,Y]=t.useState(false),[q,Q]=t.useState(null),[Pe,B]=t.useState(1),[Te,P]=t.useState(true),u=He(m,Ie),C=t.useRef(null),c=A==="multiple",[Le,Ae]=t.useState(ie??(c?[]:"")),l=W??Le,O=n?Be:L||[],p=t.useMemo(()=>O.map(ce),[O]),b=t.useCallback(async(e,o=1,g=false)=>{if(n){Y(true),Q(null);try{let j=(await n(e)).map(ce);S(g?Qe=>[...Qe,...j]:j),x&&P(j.length===G);}catch(f){Q(f instanceof Error?f.message:"Unknown error"),S([]);}finally{Y(false);}}},[n,x,G]),ze=t.useCallback(e=>{K(e),J?.(e),e&&(X(""),y(""),B(1),P(true),Q(null),S([]),C.current=null,n&&(b("",1,false),C.current=""));},[n,b,J]);t.useEffect(()=>{!w||R!=="onChange"||u!==C.current&&(C.current=u,n?(B(1),P(true),b(u,1,false),y(u)):(y(u),z?.(u)));},[u,w,R,n,b,z]);let T=t.useMemo(()=>{if(n)return p;let o=(R==="onChange"?u:I).trim().toLowerCase();return o?p.filter(g=>String(g.label).toLowerCase().includes(o)):p},[p,I,u,n,R]),ee=e=>{ue?.(e),W===void 0&&Ae(e);},De=e=>{if(c){let o=new Set(l);o.has(e)?o.delete(e):o.add(e),ee(Array.from(o));}else ee(e),K(false);},Me=e=>c?l.includes(e):l===e,te=()=>{n?(B(1),P(true),b(m,1,false),y(m),C.current=m):(y(m),z?.(m));},Ee=()=>{if(!E&&Te&&x){let e=Pe+1;B(e),b(I,e,true);}},V=t.useMemo(()=>c?l:l?[l]:[],[l,c]),k=t.useMemo(()=>p.filter(e=>V.includes(e.id)),[p,V]),qe=t.useMemo(()=>k.length===0?N:c?`\u0E40\u0E25\u0E37\u0E2D\u0E01 ${k.length} \u0E23\u0E32\u0E22\u0E01\u0E32\u0E23`:k[0].label,[k,c,N]),H=E||fe,F=R==="onClickButton";return jsx("fieldset",{children:jsxs(i.Root,{open:w&&!v,onOpenChange:v?void 0:ze,children:[D&&jsx(a,{label:D,required:Ne}),D&&jsx("div",{className:"mb-2"}),jsx(i.Trigger,{asChild:true,children:a$8??jsxs("button",{type:"button",className:a$1("flex w-full min-w-[260px] items-center justify-between","rounded-md border border-[#C9D7E3] bg-white px-2 py-3 text-left","outline-none focus-visible:ring-2 ring-black/20",M&&!v?"border-red-600":"",v?"bg-[#f4f4f4] pointer-events-none text-[#BDC2BE] border-none":"",a$3[we]),children:[jsx("span",{className:a$1("flex-1 line-clamp-1",{"text-[#A5A9AD]":c?l?.length===0:!l,"text-black":c?l?.length>0:!!l,"text-[#BDC2BE]":v}),children:$?$(V,k):qe}),jsx(a$2,{fontSize:16,className:a$1("ml-3 text-black/60 transition-transform",w?"rotate-180":"rotate-0")})]})}),M&&jsx("small",{className:"text-xs text-red-500",children:M}),jsx(i.Portal,{children:jsxs(i.Content,{sideOffset:8,onOpenAutoFocus:e=>{if(!s){e.preventDefault();return}},style:{zIndex:Se},className:a$1("w-[300px] rounded-md border border-black/10 bg-white p-2 shadow-xl","z-[1001]",he),children:[Z&&jsxs("form",{className:a$1("gap-3",F?"grid grid-cols-[1fr_auto]":"block"),onSubmit:e=>{e.preventDefault(),F&&te();},children:[jsx(a$4,{start:jsx(a$5,{}),value:m,onChange:e=>{X(e.currentTarget.value),ge?.(e.currentTarget.value);},size:"sm",placeholder:de}),F&&jsx(a$6,{color:ve??Re,disabled:H||m.trim()===I.trim(),size:"sm",className:ye,onClick:te,children:me})]}),jsxs("div",{role:"listbox","aria-multiselectable":c||void 0,className:a$1("overflow-y-auto rounded-md",{"mt-3":Z}),style:{maxHeight:xe},onScroll:e=>{if(!x)return;let{scrollTop:o,scrollHeight:g,clientHeight:f}=e.currentTarget;g-o<=f+50&&Ee();},children:[H&&T.length===0&&jsx("div",{className:"p-6 text-center text-black/60",children:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14\u2026"}),q&&jsx("div",{className:"p-6 text-center text-red-600",children:be}),!H&&!q&&T.length===0&&jsx("div",{className:"p-6 text-center text-black/50",children:pe}),!q&&T.map(e=>{let o=Me(e.id),g=Ve[Ce],f=jsxs(a$6,{type:"button",role:"option","aria-selected":o,onClick:()=>De(e.id),disabled:e.disabled,size:"sm",className:a$1("group flex w-full items-center justify-between gap-3 rounded-md px-2 py-2 text-left bg-white h-auto","hover:bg-black/[0.04] disabled:opacity-50",{"bg-black/[0.04]":o&&A==="single"}),children:[jsx("span",{className:"text-black text-md",children:e.label}),A==="multiple"&&jsx("span",{className:a$1("grid h-5 w-5 place-items-center rounded-full border-2",o?g:"border-black/20",o&&ke),children:o?jsx(a$7,{fontSize:10}):null})]},e.id);return _?jsx("div",{children:_(e,false,o)},e.id):f}),x&&E&&T.length>0&&jsx("div",{className:"p-2 text-sm text-center text-black/40",children:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21..."})]}),jsx(i.Arrow,{className:"fill-white stroke-black/10"})]})})]})})}var Ye=Fe;export{Ke as a,Xe as b,Ye as c};
|