@object-ui/fields 6.0.2 → 6.0.4

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/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @object-ui/fields
2
2
 
3
+ ## 6.0.4
4
+
5
+ ### Patch Changes
6
+
7
+ - @object-ui/types@6.0.4
8
+ - @object-ui/core@6.0.4
9
+ - @object-ui/i18n@6.0.4
10
+ - @object-ui/react@6.0.4
11
+ - @object-ui/components@6.0.4
12
+ - @object-ui/providers@6.0.4
13
+
14
+ ## 6.0.3
15
+
16
+ ### Patch Changes
17
+
18
+ - @object-ui/types@6.0.3
19
+ - @object-ui/core@6.0.3
20
+ - @object-ui/i18n@6.0.3
21
+ - @object-ui/react@6.0.3
22
+ - @object-ui/components@6.0.3
23
+ - @object-ui/providers@6.0.3
24
+
3
25
  ## 6.0.2
4
26
 
5
27
  ### Patch Changes
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(e&&(t=e(e=0)),t),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let u=require(`react`);u=l(u,1);let d=require(`@object-ui/core`),f=require(`@object-ui/components`),p=require(`lucide-react`),m=require(`@object-ui/react`),h=require(`react/jsx-runtime`),g=require(`@object-ui/i18n`),_=require(`@object-ui/providers`);var v=s({TextField:()=>y});function y({value:e,onChange:t,field:n,readonly:r,...i}){let a=n||i.schema;if(r)return(0,h.jsx)(`span`,{className:`text-sm`,children:e||(0,h.jsx)(f.EmptyValue,{})});let o=a?.rows,{inputType:s,...c}=i;return o&&o>1?(0,h.jsx)(f.Textarea,{...c,value:e||``,onChange:e=>t(e.target.value),placeholder:a?.placeholder,disabled:r||c.disabled}):(0,h.jsx)(f.Input,{...c,type:a?.type===`password`?`password`:`text`,value:e||``,onChange:e=>t(e.target.value),placeholder:a?.placeholder,disabled:r||c.disabled})}var b=o((()=>{})),x=s({NumberField:()=>S});function S({value:e,onChange:t,field:n,readonly:r,...i}){if(r)return e==null?(0,h.jsx)(f.EmptyValue,{}):(0,h.jsx)(`span`,{className:`text-sm`,children:e});let a=n||i.schema,o=a?.precision,{inputType:s,...c}=i;return(0,h.jsx)(f.Input,{...c,type:`number`,value:e??``,onChange:e=>{let n=e.target.value;t(n===``?null:Number(n))},placeholder:a?.placeholder,disabled:r||c.disabled,step:o?10**-o:`any`})}var C=o((()=>{})),w=s({BooleanField:()=>T});function T({value:e,onChange:t,field:n,readonly:r,...i}){let a=n||i.schema,o=a?.widget,s=(0,u.useId)(),c=a?.name||s,l=a?.label||`Checkbox`;if(r)return(0,h.jsx)(`span`,{className:`text-sm`,children:e?`Yes`:`No`});let{inputType:d,...p}=i;return o===`checkbox`?(0,h.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,h.jsx)(f.Checkbox,{...p,id:c,checked:!!e,onCheckedChange:e=>t(!!e),disabled:r||p.disabled}),(0,h.jsx)(f.Label,{htmlFor:c,className:`sr-only`,children:l})]}):(0,h.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,h.jsx)(f.Switch,{...p,id:c,checked:!!e,onCheckedChange:t,disabled:r||p.disabled}),(0,h.jsx)(f.Label,{htmlFor:c,className:`sr-only`,children:l})]})}var E=o((()=>{})),D,ee,O=o((()=>{D={"common.selectOption":`Select an option`,"common.select":`Select...`,"common.search":`Search`,"table.selected":`{{count}} selected`},ee=(0,g.createSafeTranslation)(D,`common.selectOption`)})),k=s({SelectField:()=>A});function A({value:e,onChange:t,field:n,readonly:r,...i}){let a=n||i.schema,o=a?.options||[],{t:s}=ee();if(r){let t=o.find(t=>t.value===e)?.label||e;return t?(0,h.jsx)(`span`,{className:`text-sm`,children:t}):(0,h.jsx)(f.EmptyValue,{})}return(0,h.jsxs)(f.Select,{...i,value:e,onValueChange:t,disabled:r||i.disabled,children:[(0,h.jsx)(f.SelectTrigger,{className:i.className,id:i.id,children:(0,h.jsx)(f.SelectValue,{placeholder:a?.placeholder||s(`common.selectOption`)})}),(0,h.jsx)(f.SelectContent,{position:`popper`,children:o.map(e=>(0,h.jsx)(f.SelectItem,{value:e.value,children:e.label},e.value))})]})}var te=o((()=>{O()})),j=s({DateField:()=>M});function M({value:e,onChange:t,field:n,readonly:r,...i}){if(r)return e?(0,h.jsx)(`span`,{className:`text-sm`,children:new Date(e).toLocaleDateString()}):(0,h.jsx)(f.EmptyValue,{});let{inputType:a,...o}=i;return(0,h.jsx)(f.Input,{...o,type:`date`,value:e||``,onChange:e=>t(e.target.value),disabled:r||o.disabled})}var N=o((()=>{})),P=s({EmailField:()=>F});function F({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){let o=n||a.schema;if(r)return e?(0,h.jsx)(`a`,{href:`mailto:${e}`,className:`text-sm text-blue-600 hover:text-blue-800 hover:underline`,children:e}):(0,h.jsx)(f.EmptyValue,{});let{inputType:s,...c}=a;return(0,h.jsx)(f.Input,{...c,type:`email`,value:e||``,onChange:e=>t(e.target.value),placeholder:o?.placeholder||`email@example.com`,disabled:r||c.disabled,"aria-invalid":!!i})}var I=o((()=>{})),ne=s({PhoneField:()=>L});function L({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){let o=n||a.schema;if(r)return e?(0,h.jsx)(`a`,{href:`tel:${e}`,className:`text-sm text-blue-600 hover:text-blue-800 hover:underline`,children:e}):(0,h.jsx)(f.EmptyValue,{});let{inputType:s,...c}=a;return(0,h.jsx)(f.Input,{...c,type:`tel`,value:e||``,onChange:e=>t(e.target.value),placeholder:o?.placeholder||`(555) 123-4567`,disabled:r||c.disabled,"aria-invalid":!!i})}var R=o((()=>{})),re=s({UrlField:()=>z});function z({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){let o=n||a.schema;if(r)return e?e.startsWith(`http://`)||e.startsWith(`https://`)?(0,h.jsx)(`a`,{href:e,target:`_blank`,rel:`noopener noreferrer`,className:`text-sm text-blue-600 hover:text-blue-800 hover:underline`,children:e}):(0,h.jsx)(`span`,{className:`text-sm`,children:e}):(0,h.jsx)(f.EmptyValue,{});let{inputType:s,...c}=a;return(0,h.jsx)(f.Input,{...c,type:`url`,value:e||``,onChange:e=>t(e.target.value),placeholder:o?.placeholder||`https://example.com`,disabled:r||c.disabled,"aria-invalid":!!i})}var B=o((()=>{})),ie=s({CurrencyField:()=>H});function V(e,t,n){if(t)try{return new Intl.NumberFormat(`en-US`,{style:`currency`,currency:t,minimumFractionDigits:n,maximumFractionDigits:n}).format(e)}catch{return`${t} ${e.toFixed(n)}`}try{return new Intl.NumberFormat(`en-US`,{minimumFractionDigits:n,maximumFractionDigits:n}).format(e)}catch{return e.toFixed(n)}}function H({value:e,onChange:t,field:n,readonly:r,errorMessage:i,className:a,...o}){let s=n||o.schema,c=s?.currency,l=s?.precision??2;if(r)return e==null?(0,h.jsx)(f.EmptyValue,{}):(0,h.jsx)(`span`,{className:`text-sm font-medium tabular-nums`,children:V(Number(e),c,l)});let u=e=>{let n=parseFloat(e.target.value);isNaN(n)||t(parseFloat(n.toFixed(l)))},d=c?c===`USD`?`$`:c:``;return(0,h.jsxs)(`div`,{className:`relative`,children:[d&&(0,h.jsx)(`span`,{className:`absolute left-3 top-1/2 -translate-y-1/2 text-sm text-gray-500`,children:d}),(0,h.jsx)(f.Input,{...o,type:`number`,value:e??``,onChange:e=>{t(e.target.value===``?null:parseFloat(e.target.value))},onBlur:u,placeholder:s?.placeholder||`0.00`,disabled:r||o.disabled,className:`${d?`pl-8`:``} ${a||``}`,step:(10**-l).toFixed(l),"aria-invalid":!!i})]})}var U=o((()=>{})),W=s({TextAreaField:()=>ae});function ae({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){if(r)return(0,h.jsx)(`div`,{className:`text-sm whitespace-pre-wrap`,children:e||(0,h.jsx)(f.EmptyValue,{})});let o=n||a.schema,s=o?.rows||4,c=o?.max_length,l=!!(a.mobileFullscreen??o?.mobile_fullscreen??a.mobile_fullscreen??a.schema?.mobile_fullscreen),[d,m]=(0,u.useState)(!1),[g,_]=(0,u.useState)(e??``),v=()=>{_(e??``),m(!0)},y=()=>m(!1),b=()=>{t(g),m(!1)},{inputType:x,mobileFullscreen:S,...C}=a;return(0,h.jsxs)(`div`,{className:`relative`,children:[(0,h.jsx)(f.Textarea,{...C,value:e||``,onChange:e=>t(e.target.value),placeholder:o?.placeholder,disabled:r||C.disabled,rows:s,maxLength:c,"aria-invalid":!!i,className:C.className}),l&&(0,h.jsx)(`button`,{type:`button`,onClick:v,className:`absolute top-1.5 right-1.5 inline-flex items-center justify-center size-7 rounded-md bg-background/80 text-muted-foreground hover:text-foreground hover:bg-background border shadow-sm transition-colors`,"aria-label":`Edit ${o?.label??`text`} fullscreen`,"data-testid":`textarea-fullscreen-toggle`,children:(0,h.jsx)(p.Maximize2,{className:`size-3.5`})}),c&&(0,h.jsxs)(`div`,{className:`absolute bottom-2 right-2 text-xs text-gray-400`,"aria-live":`polite`,"aria-label":`Character count: ${(e||``).length} of ${c}`,children:[(e||``).length,`/`,c]}),l&&(0,h.jsx)(f.Dialog,{open:d,onOpenChange:m,children:(0,h.jsxs)(f.DialogContent,{className:`sm:max-w-3xl h-[100dvh] sm:h-[80vh] max-h-[100dvh] sm:max-h-[80vh] flex flex-col p-0 gap-0`,"data-testid":`textarea-fullscreen-dialog`,children:[(0,h.jsx)(f.DialogHeader,{className:`p-4 border-b`,children:(0,h.jsx)(f.DialogTitle,{className:`text-base`,children:o?.label??`Edit text`})}),(0,h.jsx)(`div`,{className:`flex-1 min-h-0 p-4`,children:(0,h.jsx)(f.Textarea,{autoFocus:!0,value:g,onChange:e=>_(e.target.value),maxLength:c,placeholder:o?.placeholder,className:`h-full min-h-full resize-none text-base`,"data-testid":`textarea-fullscreen-input`})}),(0,h.jsxs)(f.DialogFooter,{className:`p-3 border-t flex-row justify-between sm:justify-end gap-2`,children:[c&&(0,h.jsxs)(`span`,{className:`text-xs text-muted-foreground self-center`,children:[g.length,`/`,c]}),(0,h.jsxs)(`div`,{className:`flex gap-2 ml-auto`,children:[(0,h.jsxs)(f.Button,{type:`button`,variant:`ghost`,onClick:y,children:[(0,h.jsx)(p.X,{className:`size-4 mr-1`}),` Cancel`]}),(0,h.jsxs)(f.Button,{type:`button`,onClick:b,"data-testid":`textarea-fullscreen-save`,children:[(0,h.jsx)(p.Check,{className:`size-4 mr-1`}),` Done`]})]})]})]})})]})}var oe=o((()=>{})),G=s({RichTextField:()=>K});function K({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){let{t:o}=(0,m.useObjectTranslation)();if(r)return(0,h.jsx)(`div`,{className:`text-sm prose prose-sm max-w-none`,children:e||(0,h.jsx)(f.EmptyValue,{})});let s=n||a.schema,c=s?.rows||8,l=s?.format||`markdown`;return(0,h.jsxs)(`div`,{className:`space-y-2`,children:[(0,h.jsxs)(`div`,{className:`flex items-center justify-between text-xs text-gray-500`,children:[(0,h.jsx)(`span`,{children:o(`fields.richText.format`,{format:l,defaultValue:`Format: ${l}`})}),(0,h.jsx)(`span`,{className:`italic`,children:o(`fields.richText.basicEditorHint`,{defaultValue:`Rich text editor (basic)`})})]}),(0,h.jsx)(f.Textarea,{value:e||``,onChange:e=>t(e.target.value),placeholder:s?.placeholder||o(`fields.richText.placeholder`,{defaultValue:`Enter text...`}),disabled:r||a.disabled,rows:c,className:`font-mono text-sm ${a.className||``}`,"aria-invalid":!!i})]})}var se=o((()=>{}));function ce(e){return typeof e==`string`?{field:e}:e}function le(e){return e.replace(/_/g,` `).replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/\b\w/g,e=>e.toUpperCase())}function q(e){let t={};for(let n of e)switch(n.operator){case`eq`:t[n.field]=n.value;break;case`ne`:t[n.field]={$ne:n.value};break;case`gt`:t[n.field]={$gt:n.value};break;case`lt`:t[n.field]={$lt:n.value};break;case`gte`:t[n.field]={$gte:n.value};break;case`lte`:t[n.field]={$lte:n.value};break;case`contains`:t[n.field]={$contains:n.value};break;case`in`:t[n.field]={$in:n.value};break;case`notIn`:t[n.field]={$nin:n.value};break}return t}function ue(e,t){let n={};for(let r of t){let t=e[r.field];t==null||t===``||(r.type===`boolean`?n[r.field]=!!t:r.type===`text`?n[r.field]={$contains:t}:n[r.field]=t)}return n}function de({open:e,onOpenChange:t,title:n=`Select Record`,multiple:r=!1,dataSource:i,objectName:a,columns:o,displayField:s=`name`,titleFormat:c,idField:l=`id`,pageSize:d=fe,value:m,onSelect:g,onSelectRecords:_,lookupFilters:v,cellRenderer:y,filterColumns:b,renderFilterBar:x,renderGrid:S}){let[C,w]=(0,u.useState)([]),[T,E]=(0,u.useState)(!1),[D,ee]=(0,u.useState)(null),[O,k]=(0,u.useState)(0),[A,te]=(0,u.useState)(``),[j,M]=(0,u.useState)(1),N=(0,u.useRef)(null),[P,F]=(0,u.useState)(null),[I,ne]=(0,u.useState)(`asc`),[L,R]=(0,u.useState)(new Set),re=(0,u.useRef)(new Map),[z,B]=(0,u.useState)(-1),ie=(0,u.useRef)(null),[V,H]=(0,u.useState)(!1),[U,W]=(0,u.useState)({}),[ae,oe]=(0,u.useState)({}),G=(0,u.useRef)(null),[K,se]=(0,u.useState)(``),de=(0,u.useMemo)(()=>o&&o.length>0?o.map(ce):[{field:s,label:le(s)}],[o,s]),Y=(0,u.useMemo)(()=>{if(b&&b.length>0)return b;if(v&&v.length>0)return v.map(e=>{let t=`text`;return typeof e.value==`boolean`?t=`boolean`:Array.isArray(e.value)?t=`select`:typeof e.value==`number`||e.operator===`gt`||e.operator===`lt`||e.operator===`gte`||e.operator===`lte`?t=`number`:(e.operator===`in`||e.operator===`notIn`)&&(t=`select`),{field:e.field,label:le(e.field),type:t,...Array.isArray(e.value)?{options:e.value.map(e=>{if(typeof e==`object`&&e){let t=e;return{label:String(t.name||t.label||t.title||e),value:e}}return{label:String(e),value:e}})}:{}}})},[b,v]),me=(0,u.useMemo)(()=>{let e=v?.length?q(v):{},t=Y?.length?ue(U,Y):{},n={...e,...t};return Object.keys(n).length>0?n:void 0},[v,Y,U]),X=Math.max(1,Math.ceil(O/d)),he=(0,u.useCallback)(async(e,t=1,n,r)=>{if(!(!i||!a)){E(!0),ee(null);try{let o={$top:d,$skip:(t-1)*d};e&&e.trim()&&(o.$search=e.trim()),n&&(o.$orderby={[n.field]:n.direction});let s=r===void 0?me:r;s&&Object.keys(s).length>0&&(o.$filter=s);let c=await i.find(a,o),l=c?.data??c??[];w(l),k(c?.total??l.length),B(-1)}catch(e){ee(e instanceof Error?e.message:String(e)),w([])}finally{E(!1)}}},[i,a,d,me]),ge=(0,u.useMemo)(()=>P?{field:P,direction:I}:null,[P,I]);(0,u.useEffect)(()=>{e||(te(``),M(1),ee(null),w([]),F(null),ne(`asc`),B(-1),H(!1),W({}),oe({}),se(``),R(new Set(r&&Array.isArray(m)?m:[])),re.current.clear())},[e]),(0,u.useEffect)(()=>{e&&he(A||void 0,j,ge)},[e,j,ge,me]),(0,u.useEffect)(()=>{e&&r&&R(new Set(Array.isArray(m)?m:[]))},[e,r,m]);let _e=(0,u.useCallback)(e=>{te(e),M(1),N.current&&clearTimeout(N.current),N.current=setTimeout(()=>{he(e||void 0,1,ge)},300)},[he,ge]);(0,u.useEffect)(()=>()=>{N.current&&clearTimeout(N.current)},[]);let ve=(0,u.useCallback)(e=>{F(t=>t===e?(ne(e=>e===`asc`?`desc`:`asc`),e):(ne(`asc`),e)),M(1)},[]),ye=(0,u.useCallback)(e=>e[l]??e.id??e._id,[l]),be=(0,u.useCallback)(e=>{let t=ye(e);return r?L.has(t):m===t},[r,m,L,ye]),xe=(0,u.useCallback)(e=>{let n=ye(e);r?R(t=>{let r=new Set(t);return r.has(n)?(r.delete(n),re.current.delete(n)):(r.add(n),re.current.set(n,e)),r}):(g(n),_?.([e]),t(!1))},[r,ye,g,_,t]),Se=(0,u.useCallback)(()=>{let e=Array.from(L);g(e);let n=e.map(e=>re.current.get(e)).filter(Boolean);_?.(n),t(!1)},[L,g,_,t]),Ce=(0,u.useCallback)(()=>{M(e=>Math.max(1,e-1))},[]),we=(0,u.useCallback)(()=>{M(e=>Math.min(X,e+1))},[X]),Te=(0,u.useCallback)(e=>{if(e.key!==`Enter`)return;let t=parseInt(K,10);!isNaN(t)&&t>=1&&t<=X&&M(t),se(``)},[K,X]),Ee=(0,u.useCallback)(e=>{C.length!==0&&(e.key===`ArrowDown`?(e.preventDefault(),B(e=>Math.min(e+1,C.length-1))):e.key===`ArrowUp`?(e.preventDefault(),B(e=>Math.max(e-1,0))):(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),z>=0&&z<C.length&&xe(C[z])))},[C,z,xe]);(0,u.useEffect)(()=>{if(z>=0&&ie.current){let e=ie.current.querySelector(`[data-row-index="${z}"]`);e&&typeof e.scrollIntoView==`function`&&e.scrollIntoView({block:`nearest`})}},[z]);let De=(0,u.useCallback)((e,t)=>{if(c&&t.field===s){let t=`[-\\u2013\\u2014|/·,:]`,n=!1,r=c.replace(/\{([^{}]+)\}/g,(t,r)=>{let i=e[r.trim()];return i!=null&&i!==``?(n=!0,String(i)):`\0`});if(n){let e=r.replace(RegExp(`\\s*${t}\\s*`,`g`),``).replace(RegExp(`\\s*${t}\\s*`,`g`),``).replace(RegExp(`\0`,`g`),``).replace(/\s+/g,` `).trim();if(e)return e}}let n=e[t.field];if(t.type&&y){let e=y(t.type);if(e)return(0,h.jsx)(e,{value:n,field:{name:t.field,type:t.type}})}return n==null?``:typeof n==`object`?n.$numberDecimal?String(Number(n.$numberDecimal)):n.$oid?String(n.$oid):n.$date?new Date(n.$date).toLocaleDateString():n.name||n.label?String(n.name||n.label):JSON.stringify(n):typeof n==`boolean`?n?`Yes`:`No`:String(n)},[y,c,s]),Oe=(0,u.useCallback)(e=>P===e?I===`asc`?(0,h.jsx)(p.ArrowUp,{className:`ml-1 size-3`}):(0,h.jsx)(p.ArrowDown,{className:`ml-1 size-3`}):(0,h.jsx)(p.ArrowUpDown,{className:`ml-1 size-3 opacity-40`}),[P,I]),ke=(0,u.useCallback)((e,t,n)=>{e.preventDefault(),e.stopPropagation(),G.current={field:t,startX:e.clientX,startWidth:n};let r=e=>{if(!G.current)return;let t=e.clientX-G.current.startX,n=Math.max(pe,G.current.startWidth+t);oe(e=>({...e,[G.current.field]:n}))},i=()=>{G.current=null,document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[]),Z=(0,u.useCallback)((e,t)=>{W(n=>({...n,[e]:t})),M(1)},[]),Ae=(0,u.useCallback)(()=>{W({}),M(1)},[]),je=(0,u.useMemo)(()=>Object.values(U).filter(e=>e!=null&&e!==``).length,[U]),Me=(0,u.useCallback)(e=>{let t=U[e.field],n=e.label||le(e.field);switch(e.type){case`select`:return(0,h.jsxs)(`div`,{className:`space-y-1`,children:[(0,h.jsx)(f.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,h.jsxs)(f.Select,{value:t==null?``:String(t),onValueChange:t=>Z(e.field,t),children:[(0,h.jsx)(f.SelectTrigger,{className:`h-8 text-xs`,children:(0,h.jsx)(f.SelectValue,{placeholder:`Filter ${n}`})}),(0,h.jsx)(f.SelectContent,{children:e.options?.map(e=>(0,h.jsx)(f.SelectItem,{value:String(e.value),children:e.label},String(e.value)))})]})]});case`number`:return(0,h.jsxs)(`div`,{className:`space-y-1`,children:[(0,h.jsx)(f.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,h.jsx)(f.Input,{type:`number`,className:`h-8 text-xs`,value:t??``,placeholder:`Filter ${n}`,onChange:t=>{let n=t.target.value;Z(e.field,n===``?``:Number(n))}})]});case`date`:return(0,h.jsxs)(`div`,{className:`space-y-1`,children:[(0,h.jsx)(f.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,h.jsx)(f.Input,{type:`date`,className:`h-8 text-xs`,value:t??``,onChange:t=>Z(e.field,t.target.value)})]});case`boolean`:return(0,h.jsxs)(`div`,{className:`space-y-1`,children:[(0,h.jsx)(f.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,h.jsxs)(`div`,{className:`flex items-center gap-2 h-8`,children:[(0,h.jsx)(f.Checkbox,{checked:!!t,onCheckedChange:t=>Z(e.field,!!t)}),(0,h.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Yes`})]})]});default:return(0,h.jsxs)(`div`,{className:`space-y-1`,children:[(0,h.jsx)(f.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,h.jsx)(f.Input,{className:`h-8 text-xs`,value:t??``,placeholder:`Filter ${n}`,onChange:t=>Z(e.field,t.target.value)})]})}},[U,Z]),Ne=(0,u.useCallback)((e,t)=>e?`bg-primary/5 hover:bg-primary/10`:t%2==1?`bg-muted/20 hover:bg-accent/30`:`hover:bg-accent/30`,[]);return(0,h.jsx)(f.Dialog,{open:e,onOpenChange:t,children:(0,h.jsxs)(f.DialogContent,{className:`w-[95vw] sm:max-w-3xl lg:max-w-5xl max-h-[85vh] sm:max-h-[80vh] flex flex-col gap-0`,"data-testid":`record-picker-dialog`,children:[(0,h.jsx)(f.DialogHeader,{children:(0,h.jsxs)(f.DialogTitle,{children:[n,r&&(0,h.jsx)(`span`,{className:`sr-only`,children:` (multiple selection)`})]})}),(0,h.jsxs)(`div`,{className:`relative rounded-md border bg-muted/30 mb-3`,children:[(0,h.jsx)(p.Search,{className:`absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground`}),(0,h.jsx)(f.Input,{placeholder:`Search...`,value:A,onChange:e=>_e(e.target.value),className:`pl-9 border-0 bg-transparent shadow-none focus-visible:ring-0`,"data-testid":`record-picker-search`}),T&&(0,h.jsx)(p.Loader2,{className:`absolute right-3 top-1/2 -translate-y-1/2 size-4 animate-spin text-muted-foreground`,"data-testid":`record-picker-loading-indicator`})]}),Y&&Y.length>0&&(0,h.jsx)(`div`,{className:`py-2`,children:x?(0,h.jsx)(`div`,{"data-testid":`record-picker-filter-bar`,children:x({filterColumns:Y,values:U,onChange:Z,onClear:Ae,activeCount:je})}):(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)(`div`,{className:`flex items-center gap-2`,"data-testid":`record-picker-filter-bar`,children:[(0,h.jsxs)(f.Button,{type:`button`,variant:je>0?`secondary`:`outline`,size:`sm`,className:`gap-1.5 shrink-0`,onClick:()=>H(e=>!e),children:[(0,h.jsx)(p.SlidersHorizontal,{className:`size-3.5`}),`Filters`,je>0&&(0,h.jsx)(`span`,{className:`inline-flex h-5 min-w-[20px] items-center justify-center rounded-full bg-primary/10 px-1 text-xs font-medium text-primary`,children:je})]}),je>0&&(0,h.jsxs)(f.Button,{type:`button`,variant:`ghost`,size:`sm`,className:`gap-1 text-xs`,onClick:Ae,children:[(0,h.jsx)(p.X,{className:`size-3`}),`Clear`]})]}),V&&(0,h.jsx)(`div`,{className:`mt-2 grid gap-3 sm:grid-cols-2 lg:grid-cols-3 border rounded-md p-3 bg-muted/30`,"data-testid":`record-picker-filter-panel`,children:Y.map(e=>(0,h.jsx)(`div`,{children:Me(e)},e.field))})]})}),D&&(0,h.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-4`,role:`alert`,children:[(0,h.jsx)(p.AlertCircle,{className:`size-5 text-destructive`}),(0,h.jsx)(`p`,{className:`text-sm text-destructive`,children:D}),(0,h.jsx)(f.Button,{variant:`outline`,size:`sm`,onClick:()=>he(A||void 0,j,ge),type:`button`,children:`Retry`})]}),S?(0,h.jsx)(`div`,{className:`flex-1 min-h-0`,"data-testid":`record-picker-grid-slot`,children:S({columns:de,records:C,loading:T,totalCount:O,currentPage:j,pageSize:d,sortField:P,sortDirection:I,onSort:ve,onPageChange:M,onRowClick:xe,isSelected:be,multiple:r,idField:l,cellRenderer:y})}):(0,h.jsxs)(h.Fragment,{children:[T&&C.length===0&&!D&&(0,h.jsx)(`div`,{className:`flex-1 overflow-hidden min-h-0 border rounded-md`,role:`status`,"aria-live":`polite`,"data-testid":`record-picker-skeleton`,children:(0,h.jsxs)(f.Table,{children:[(0,h.jsx)(f.TableHeader,{children:(0,h.jsxs)(f.TableRow,{className:`bg-muted/40`,children:[r&&(0,h.jsx)(f.TableHead,{className:`w-10`}),de.map(e=>(0,h.jsx)(f.TableHead,{children:(0,h.jsx)(f.Skeleton,{className:`h-4 w-20`})},e.field))]})}),(0,h.jsx)(f.TableBody,{children:Array.from({length:J},(e,t)=>(0,h.jsxs)(f.TableRow,{children:[r&&(0,h.jsx)(f.TableCell,{className:`w-10`,children:(0,h.jsx)(f.Skeleton,{className:`size-4 rounded`})}),de.map(e=>(0,h.jsx)(f.TableCell,{children:(0,h.jsx)(f.Skeleton,{className:`h-4 w-full`})},e.field))]},t))})]})}),!T&&!D&&C.length===0&&(0,h.jsx)(`div`,{className:`py-8 text-center`,children:(0,h.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No records found`})}),!D&&C.length>0&&(0,h.jsxs)(`div`,{className:`relative flex-1 overflow-auto min-h-0 border rounded-md`,tabIndex:0,onKeyDown:Ee,role:`grid`,"aria-label":`Records`,children:[T&&(0,h.jsx)(`div`,{className:`absolute inset-0 z-10 flex items-center justify-center bg-background/60`,"data-testid":`record-picker-loading-overlay`,children:(0,h.jsx)(p.Loader2,{className:`size-6 animate-spin text-muted-foreground`})}),(0,h.jsxs)(f.Table,{style:Object.keys(ae).length>0?{tableLayout:`fixed`}:void 0,children:[(0,h.jsx)(f.TableHeader,{className:`sticky top-0 z-[5] bg-muted/50 [&_tr]:border-b`,"data-testid":`record-picker-sticky-header`,children:(0,h.jsxs)(f.TableRow,{children:[r&&(0,h.jsx)(f.TableHead,{className:`w-10`}),de.map(e=>{let t=ae[e.field];return(0,h.jsxs)(f.TableHead,{style:t?{width:`${t}px`,minWidth:`${t}px`}:e.width?{width:e.width}:void 0,className:`cursor-pointer select-none relative group text-xs font-semibold uppercase tracking-wider`,onClick:()=>ve(e.field),"aria-sort":P===e.field?I===`asc`?`ascending`:`descending`:`none`,children:[(0,h.jsxs)(`span`,{className:`inline-flex items-center`,children:[e.label||le(e.field),Oe(e.field)]}),(0,h.jsx)(`span`,{role:`separator`,"aria-orientation":`vertical`,className:`absolute right-0 top-0 bottom-0 w-1 cursor-col-resize opacity-0 group-hover:opacity-100 bg-border hover:bg-primary/50 transition-opacity`,onMouseDown:t=>{let n=t.currentTarget.parentElement?.getBoundingClientRect();ke(t,e.field,n?.width??100)},onClick:e=>e.stopPropagation(),"data-testid":`resize-handle-${e.field}`})]},e.field)})]})}),(0,h.jsx)(f.TableBody,{ref:ie,children:C.map((e,t)=>{let n=ye(e),i=be(e),a=t===z;return(0,h.jsxs)(f.TableRow,{"data-row-index":t,className:(0,f.cn)(`cursor-pointer transition-colors`,Ne(i,t),a&&`ring-2 ring-primary ring-inset`),onClick:()=>xe(e),"data-testid":`record-row-${n}`,"aria-selected":i,children:[r&&(0,h.jsx)(f.TableCell,{className:`w-10`,children:i&&(0,h.jsx)(p.Check,{className:`size-4 text-primary`})}),de.map(t=>(0,h.jsx)(f.TableCell,{className:`py-2.5`,children:De(e,t)},t.field))]},n??t)})})]})]}),!D&&O>0&&(0,h.jsxs)(`div`,{className:`flex items-center justify-between text-sm text-muted-foreground border-t pt-3 mt-2 px-1`,"data-testid":`record-picker-pagination`,children:[(0,h.jsxs)(`span`,{children:[O,` `,O===1?`record`:`records`,X>1&&` · Page ${j} of ${X}`]}),X>1&&(0,h.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,h.jsx)(f.Button,{variant:`outline`,size:`icon`,className:`size-7`,onClick:Ce,disabled:j<=1,type:`button`,"aria-label":`Previous page`,children:(0,h.jsx)(p.ChevronLeft,{className:`size-4`})}),(0,h.jsx)(f.Input,{className:`h-7 w-12 text-center text-xs px-1`,placeholder:String(j),value:K,onChange:e=>se(e.target.value),onKeyDown:Te,"aria-label":`Jump to page`,"data-testid":`record-picker-page-jump`}),(0,h.jsx)(f.Button,{variant:`outline`,size:`icon`,className:`size-7`,onClick:we,disabled:j>=X,type:`button`,"aria-label":`Next page`,children:(0,h.jsx)(p.ChevronRight,{className:`size-4`})})]})]})]}),r&&(0,h.jsx)(f.DialogFooter,{children:(0,h.jsxs)(`div`,{className:`flex items-center gap-2 w-full justify-between`,children:[(0,h.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[L.size,` selected`]}),(0,h.jsxs)(`div`,{className:`flex gap-2`,children:[(0,h.jsx)(f.Button,{variant:`outline`,type:`button`,onClick:()=>t(!1),children:`Cancel`}),(0,h.jsx)(f.Button,{type:`button`,onClick:Se,children:`Confirm`})]})]})})]})})}var fe,pe,J,Y=o((()=>{fe=10,pe=60,J=5}));function me(e){he=e}function X(){return he}var he,ge=o((()=>{})),_e=s({LookupField:()=>xe});function ve(e,t){if(!e||typeof e!=`object`||!t)return null;let n=`[-\\u2013\\u2014|/·,:]`,r=!1,i=t.replace(/\{([^{}]+)\}/g,(t,n)=>{let i=e[n.trim()];return i!=null&&i!==``?(r=!0,String(i)):`\0`});return r&&i.replace(RegExp(`\\s*${n}\\s*`,`g`),``).replace(RegExp(`\\s*${n}\\s*`,`g`),``).replace(RegExp(`\0`,`g`),``).replace(/\s+/g,` `).trim()||null}function ye(e,t,n,r,i){let a=e[n]??e.id??e._id,o=(i?ve(e,i):null)??e[t]??e.label??e.name??e.full_name??e.title??e.subject??String(a),s=r?e[r]:void 0;return{value:a,label:String(o),description:s,...e}}function be(e){return{text:`text`,number:`number`,currency:`number`,percent:`number`,select:`select`,status:`select`,date:`date`,datetime:`date`,boolean:`boolean`}[e]}function xe({value:e,onChange:t,field:n,readonly:r,...i}){let[a,o]=(0,u.useState)(!1),[s,c]=(0,u.useState)(``),{t:l}=ee(),[d,m]=(0,u.useState)([]),[g,_]=(0,u.useState)(!1),[v,y]=(0,u.useState)(null),[b,x]=(0,u.useState)(0),S=(0,u.useRef)(null),[C,w]=(0,u.useState)([]),[T,E]=(0,u.useState)(-1),D=(0,u.useRef)(null),O=n||i.schema,k=O?.field,A=k&&typeof k==`object`&&(`reference_to`in k||`reference`in k||`type`in k)?k:O,te=A?.options||[],j=A?.multiple||!1,M=A?.display_field||A?.reference_field||`name`,N=A?.description_field,P=A?.id_field||`id`,F=A?.reference_to||A?.reference,I=A?.lookup_columns,ne=A?.lookup_page_size,L=A?.lookup_filters,R=(0,u.useMemo)(()=>{let e=A?.depends_on??A?.dependsOn;return e&&Array.isArray(e)?e.map(e=>typeof e==`string`?{field:e,param:e}:{field:e.field,param:e.param??e.field}):[]},[A?.depends_on,A?.dependsOn]),re=i.dependentValues,z=(0,u.useMemo)(()=>{if(!I)return;let e=[];for(let t of I)if(typeof t==`object`&&t.type){let n=be(t.type);n&&e.push({field:t.field,label:t.label,type:n})}return e.length>0?e:void 0},[I]),B=(0,u.useContext)(Ce),ie=B?.dataSource??null,V=i.dataSource??O?.dataSource??A?.dataSource??ie,H=(0,u.useMemo)(()=>re||(B?.formValues??B?.data??{}),[re,B?.formValues,B?.data]),U=(0,u.useMemo)(()=>R.length===0?!1:R.some(({field:e})=>{let t=H[e];return t==null||t===``||Array.isArray(t)&&t.length===0}),[R,H]),W=V!=null&&typeof V.find==`function`&&!!F,[ae,oe]=(0,u.useState)(null);(0,u.useEffect)(()=>{if(!V||!F)return;let e=V.getObjectSchema;if(typeof e!=`function`)return;let t=!0;return Promise.resolve(e.call(V,F)).then(e=>{t&&oe(e)}).catch(()=>{}),()=>{t=!1}},[V,F]);let G=(0,u.useMemo)(()=>{let e=ae?.titleFormat;return typeof e==`string`?e:e&&typeof e==`object`&&typeof e.source==`string`?e.source:null},[ae]),K=i.onCreateNew??O?.onCreateNew,[se,ce]=(0,u.useState)(!1),le=W?d:te,q=(0,u.useMemo)(()=>{if(W||!s)return le;let e=s.toLowerCase();return le.filter(t=>t.label.toLowerCase().includes(e)||t.description&&t.description.toLowerCase().includes(e))},[W,le,s]);(0,u.useEffect)(()=>{E(-1)},[q.length]);let ue=(0,u.useCallback)(async e=>{if(!(!V||!F)){if(U){m([]),x(0);return}_(!0),y(null);try{let t={$top:Se};if(e&&e.trim()&&(t.$search=e.trim()),R.length>0){let e={};for(let{field:t,param:n}of R){let r=H[t];r==null||r===``||(e[n]=typeof r==`number`?r:String(r))}Object.keys(e).length>0&&(t.$filter=e)}let n=await V.find(F,t),r=n?.data??n??[];m(r.map(e=>ye(e,M,P,N,G))),x(n?.total??r.length)}catch(e){y(e instanceof Error?e.message:String(e)),m([])}finally{_(!1)}}},[V,F,M,P,N,G,U,R,H]);(0,u.useEffect)(()=>{a&&W&&R.length>0&&ue(s||void 0)},[(0,u.useMemo)(()=>R.map(e=>`${e.param}=${H[e.field]??``}`).join(`|`),[R,H])]),(0,u.useEffect)(()=>{a&&W&&ue(s||void 0),a||(c(``),y(null),E(-1))},[a]);let fe=(0,u.useCallback)(e=>{c(e),W&&(S.current&&clearTimeout(S.current),S.current=setTimeout(()=>{ue(e||void 0)},300))},[W,ue]);(0,u.useEffect)(()=>()=>{S.current&&clearTimeout(S.current)},[]),(0,u.useEffect)(()=>{if(!W||!V||!F)return;let t=j?Array.isArray(e)?e:[]:e!=null&&e!==``?[e]:[];if(!t.length)return;let n=t.filter(e=>!pe(e));if(!n.length)return;let r=!1;return(async()=>{try{let e=[];for(let t of n)if(typeof V.findOne==`function`){let n=await V.findOne(F,t);n&&e.push(ye(n,M,P,N,G))}else{let n=await V.find(F,{$filter:{[P]:t},$top:1}),r=n?.data??n??[];r[0]&&e.push(ye(r[0],M,P,N,G))}!r&&e.length&&w(t=>{let n=new Map(t.map(e=>[e.value,e]));for(let t of e)n.set(t.value,t);return Array.from(n.values())})}catch{}})(),()=>{r=!0}},[e,W,F,M,P,N,j]);let pe=(0,u.useCallback)(e=>te.find(t=>t.value===e)??d.find(t=>t.value===e)??C.find(t=>t.value===e),[te,d,C]),J=j?(Array.isArray(e)?e:[]).map(pe).filter(Boolean):e?[pe(e)].filter(Boolean):[],Y=(0,u.useCallback)(n=>{if(j){let r=Array.isArray(e)?e:[];r.includes(n.value)?t(r.filter(e=>e!==n.value)):t([...r,n.value])}else t(n.value),o(!1)},[j,e,t]),me=n=>{t(j?(Array.isArray(e)?e:[]).filter(e=>e!==n):null)},he=(0,u.useCallback)(e=>{w(e.map(e=>ye(e,M,P,N,G)))},[M,P,N,G]),ge=(0,u.useCallback)(e=>{e.key===`ArrowDown`?(e.preventDefault(),E(e=>e<q.length-1?e+1:e)):e.key===`ArrowUp`?(e.preventDefault(),E(e=>e>0?e-1:0)):e.key===`Enter`&&(e.preventDefault(),T>=0&&T<q.length&&Y(q[T]))},[q,T,Y]);return(0,u.useEffect)(()=>{T>=0&&D.current&&D.current.querySelector(`[data-lookup-index="${T}"]`)?.scrollIntoView({block:`nearest`})},[T]),r?J.length?j?(0,h.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:J.map((e,t)=>(0,h.jsx)(f.Badge,{variant:`outline`,children:e?.label||e?.[M]},t))}):(0,h.jsx)(`span`,{className:`text-sm`,children:J[0]?.label||J[0]?.[M]}):(0,h.jsx)(f.EmptyValue,{}):(0,h.jsxs)(`div`,{className:`space-y-2`,children:[J.length>0&&(0,h.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:J.map((e,t)=>(0,h.jsxs)(f.Badge,{variant:`outline`,className:`gap-1`,children:[e?.label||e?.[M],(0,h.jsx)(`button`,{onClick:()=>me(e?.value),className:`ml-1 hover:text-destructive`,type:`button`,"aria-label":`Remove ${e?.label||e?.[M]}`,children:(0,h.jsx)(p.X,{className:`size-3`})})]},t))}),(0,h.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,h.jsxs)(f.Popover,{open:a,onOpenChange:e=>!U&&o(e),children:[(0,h.jsx)(f.PopoverTrigger,{asChild:!0,children:(0,h.jsxs)(f.Button,{variant:`outline`,className:`min-w-0 flex-1 justify-start text-left font-normal`,type:`button`,disabled:U||i.disabled,"data-testid":U?`lookup-trigger-gated`:void 0,title:U?`Select ${R.map(e=>e.field).join(`, `)} first`:void 0,children:[(0,h.jsx)(p.Search,{className:`mr-2 size-4`}),U?`Select ${R.map(e=>e.field).join(`, `)} first`:J.length===0?O?.placeholder||l(`common.select`):j?l(`table.selected`,{count:J.length}):l(`common.select`)]})}),(0,h.jsxs)(f.PopoverContent,{className:`w-[var(--radix-popover-trigger-width)] p-0`,align:`start`,children:[(0,h.jsx)(`div`,{className:`p-2`,children:(0,h.jsxs)(`div`,{className:`relative`,children:[(0,h.jsx)(p.Search,{className:`absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground`}),(0,h.jsx)(f.Input,{placeholder:l(`common.search`)+`...`,value:s,onChange:e=>fe(e.target.value),onKeyDown:ge,className:`w-full pl-9 h-8 text-sm`}),g&&(0,h.jsx)(p.Loader2,{className:`absolute right-3 top-1/2 -translate-y-1/2 size-4 animate-spin text-muted-foreground`,"data-testid":`lookup-loading`})]})}),v&&(0,h.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-4 px-2`,role:`alert`,children:[(0,h.jsx)(p.AlertCircle,{className:`size-5 text-destructive`}),(0,h.jsx)(`p`,{className:`text-sm text-destructive`,children:v}),(0,h.jsx)(f.Button,{variant:`outline`,size:`sm`,onClick:()=>ue(s||void 0),type:`button`,children:`Retry`})]}),g&&q.length===0&&!v&&(0,h.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-6`,role:`status`,"aria-live":`polite`,children:[(0,h.jsx)(p.Loader2,{className:`size-6 animate-spin text-muted-foreground`}),(0,h.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading…`})]}),!v&&!(g&&q.length===0)&&(0,h.jsx)(`div`,{ref:D,className:`max-h-64 overflow-y-auto px-1 pb-1`,role:`listbox`,children:q.length===0?(0,h.jsxs)(`div`,{className:`py-4 text-center`,children:[(0,h.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No options found`}),K&&(0,h.jsxs)(f.Button,{variant:`ghost`,size:`sm`,className:`mt-2 gap-1`,type:`button`,onClick:()=>{K(s),o(!1)},children:[(0,h.jsx)(p.Plus,{className:`size-4`}),`Create new`]})]}):(0,h.jsxs)(h.Fragment,{children:[q.map((t,n)=>{let r=j?(Array.isArray(e)?e:[]).includes(t.value):e===t.value;return(0,h.jsxs)(`button`,{"data-lookup-index":n,role:`option`,"aria-selected":r,onClick:()=>Y(t),className:`w-full text-left px-3 py-2 rounded-md text-sm hover:bg-accent flex items-center justify-between ${n===T?`bg-accent text-accent-foreground`:r?`bg-accent/50 text-accent-foreground`:``}`,type:`button`,children:[(0,h.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,h.jsx)(`span`,{className:`block truncate`,children:t.label}),t.description&&(0,h.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:t.description})]}),r&&(0,h.jsx)(f.Badge,{variant:`default`,className:`ml-2 shrink-0`,children:`Selected`})]},t.value)}),W&&b>q.length&&(0,h.jsxs)(`p`,{className:`text-xs text-muted-foreground text-center py-2`,children:[`Showing `,q.length,` of `,b,` results.`]}),W&&b>q.length&&(0,h.jsxs)(`button`,{type:`button`,className:`w-full text-center px-3 py-2 rounded-md text-sm font-medium text-primary hover:bg-accent flex items-center justify-center gap-1.5`,onClick:()=>{o(!1),ce(!0)},"data-testid":`show-all-results`,children:[(0,h.jsx)(p.TableProperties,{className:`size-3.5`}),`Show All Results (`,b,`)`]}),K&&(0,h.jsxs)(`button`,{type:`button`,className:`w-full text-left px-3 py-2 rounded-md text-sm hover:bg-accent flex items-center gap-1.5 text-muted-foreground`,onClick:()=>{K(s),o(!1)},children:[(0,h.jsx)(p.Plus,{className:`size-3.5`}),`Create new`,s?` "${s}"`:``]})]})})]})]}),W&&(0,h.jsx)(f.Button,{variant:`outline`,size:`icon`,className:`shrink-0`,type:`button`,onClick:()=>ce(!0),"aria-label":`Browse all records`,title:`Browse all records`,"data-testid":`browse-all-records`,children:(0,h.jsx)(p.TableProperties,{className:`size-4`})})]}),W&&V&&F&&(0,h.jsx)(de,{open:se,onOpenChange:ce,title:O?.label||`Select`,multiple:j,dataSource:V,objectName:F,columns:I,displayField:M,titleFormat:G,idField:P,pageSize:ne,value:e,onSelect:t,onSelectRecords:he,lookupFilters:L,cellRenderer:X(),filterColumns:z})]})}var Se,Ce,we=o((()=>{Y(),ge(),O(),Se=50,Ce=m.SchemaRendererContext})),Te=s({DateTimeField:()=>Ee});function Ee({value:e,onChange:t,field:n,readonly:r,...i}){if(r){if(!e)return(0,h.jsx)(f.EmptyValue,{});let t=new Date(e);return(0,h.jsxs)(`span`,{className:`text-sm`,children:[t.toLocaleDateString(),` `,t.toLocaleTimeString()]})}let{inputType:a,...o}=i;return(0,h.jsx)(f.Input,{...o,type:`datetime-local`,value:e||``,onChange:e=>t(e.target.value),disabled:r||o.disabled})}var De=o((()=>{})),Oe=s({TimeField:()=>ke});function ke({value:e,onChange:t,field:n,readonly:r,...i}){if(r)return(0,h.jsx)(`span`,{className:`text-sm`,children:e||(0,h.jsx)(f.EmptyValue,{})});let{inputType:a,...o}=i;return(0,h.jsx)(f.Input,{...o,type:`time`,value:e||``,onChange:e=>t(e.target.value),disabled:r||o.disabled})}var Z=o((()=>{})),Ae=s({PercentField:()=>je});function je({value:e,onChange:t,field:n,readonly:r,errorMessage:i,className:a,...o}){let s=n||o.schema,c=s?.precision??2;if(r)return e==null?(0,h.jsx)(f.EmptyValue,{}):(0,h.jsxs)(`span`,{className:`text-sm font-medium tabular-nums`,children:[(e*100).toFixed(c),`%`]});let l=e==null?``:e*100,u=e==null?0:e*100,d=e=>{if(e.target.value===``){t(null);return}let n=parseFloat(e.target.value);t(isNaN(n)?null:n/100)},p=e=>{if(r||o.disabled)return;if(!Array.isArray(e)||e.length===0){t(null);return}let n=e[0];t(typeof n==`number`?n/100:null)},m=10**-c;return(0,h.jsxs)(`div`,{className:`space-y-2`,children:[(0,h.jsxs)(`div`,{className:`relative`,children:[(0,h.jsx)(f.Input,{...o,type:`number`,value:l,onChange:d,placeholder:s?.placeholder||`0`,disabled:r||o.disabled,className:`pr-8 ${a||``}`,step:(10**-c).toFixed(c),"aria-invalid":!!i}),(0,h.jsx)(`span`,{className:`absolute right-3 top-1/2 -translate-y-1/2 text-sm text-gray-500`,children:`%`})]}),(0,h.jsx)(f.Slider,{value:[u],onValueChange:p,min:0,max:100,step:m,disabled:r||o.disabled,className:`w-full`,"aria-label":`Percentage`,"data-testid":`percent-slider`})]})}var Me=o((()=>{})),Ne=s({PasswordField:()=>Pe});function Pe({value:e,onChange:t,field:n,readonly:r,className:i,...a}){let[o,s]=(0,u.useState)(!1),c=n||a.schema;if(r)return(0,h.jsx)(`span`,{className:`text-sm`,children:`••••••••`});let{inputType:l,...d}=a;return(0,h.jsxs)(`div`,{className:`relative`,children:[(0,h.jsx)(f.Input,{...d,type:o?`text`:`password`,value:e||``,onChange:e=>t(e.target.value),placeholder:c?.placeholder,disabled:r||d.disabled,className:`pr-10 ${i||``}`}),(0,h.jsx)(f.Button,{type:`button`,variant:`ghost`,size:`sm`,className:`absolute right-0 top-0 h-full px-3 py-2 hover:bg-transparent`,onClick:()=>s(!o),tabIndex:-1,children:o?(0,h.jsx)(p.EyeOff,{className:`size-4 text-gray-500`}):(0,h.jsx)(p.Eye,{className:`size-4 text-gray-500`})})]})}var Fe=o((()=>{})),Ie=s({FileField:()=>Le});function Le({value:e,onChange:t,field:n,readonly:r,...i}){let a=(0,u.useRef)(null),o=(0,u.useRef)(null),s=n||i.schema,c=s?.multiple||!1,l=s?.accept?s.accept.join(`,`):void 0,d=s?.maxSize,m=s?.capture??null,g=!l||l.split(`,`).some(e=>e.trim().startsWith(`image/`)||e.trim()===`image/*`||e.trim().startsWith(`.jp`)||e.trim().startsWith(`.png`)||e.trim().startsWith(`.gif`)||e.trim().startsWith(`.webp`)),v=typeof navigator<`u`&&(navigator.maxTouchPoints>0||/Mobi|Android/i.test(navigator.userAgent)),y=m===!1?!1:m??(g&&v?`environment`:null),[b,x]=(0,u.useState)(!1),[S,C]=(0,u.useState)([]),{upload:w}=(0,_.useUpload)(),[T,E]=(0,u.useState)({}),[D,ee]=(0,u.useState)(!1),O=e?Array.isArray(e)?e:[e]:[],k=(0,u.useCallback)(async e=>{if(e.length===0)return;let n=[],r=e.filter(e=>{if(d&&e.size>d){let t=(d/(1024*1024)).toFixed(1);return n.push(`"${e.name}" exceeds max size (${t} MB)`),!1}return!0});if(C(n),r.length!==0){ee(!0);try{let e=(await Promise.all(r.map(async e=>{try{let t=await w(e,{onProgress:t=>E(n=>({...n,[e.name]:t}))});return{name:t.name,original_name:e.name,size:t.size,mime_type:t.mimeType,url:t.url}}catch(t){return n.push(`Failed to upload "${e.name}": ${t.message}`),C([...n]),null}}))).filter(Boolean);if(e.length===0)return;t(c?[...O,...e]:e[0])}finally{ee(!1),E({})}}},[O,c,t,d,w]),A=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),x(!0)},[]),te=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),x(!1)},[]),j=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),x(!1);let t=Array.from(e.dataTransfer.files);if(l){let e=l.split(`,`).map(e=>e.trim().toLowerCase());k(t.filter(t=>{let n=t.name.split(`.`),r=n.length>1?`.`+n.pop()?.toLowerCase():``;return e.some(e=>e===t.type||r&&e===r||e.endsWith(`/*`)&&t.type.startsWith(e.replace(`/*`,`/`)))}))}else k(t)},[l,k]);if(r)return e?(0,h.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:(Array.isArray(e)?e:[e]).map((e,t)=>(0,h.jsx)(`span`,{className:`text-sm truncate max-w-xs`,children:e.name||e.original_name||`File`},t))}):(0,h.jsx)(f.EmptyValue,{});let M=e=>{k(Array.from(e.target.files||[]))},N=e=>{if(c){let n=O.filter((t,n)=>n!==e);t(n.length>0?n:null)}else t(null)},P=e=>(e.mime_type||``).startsWith(`image/`);return(0,h.jsxs)(`div`,{className:i.className,children:[(0,h.jsx)(`input`,{ref:a,type:`file`,multiple:c,accept:l,onChange:M,className:`hidden`}),y&&(0,h.jsx)(`input`,{ref:o,type:`file`,accept:`image/*`,capture:y,onChange:M,className:`hidden`,"aria-label":`Camera capture`,"data-testid":`file-field-camera-input`}),(0,h.jsxs)(`div`,{className:`space-y-2`,children:[(0,h.jsxs)(`div`,{onDragOver:A,onDragLeave:te,onDrop:j,onClick:()=>a.current?.click(),className:`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(e&&(t=e(e=0)),t),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let u=require("react");u=l(u,1);let d=require("@object-ui/core"),f=require("@object-ui/components"),p=require("lucide-react"),m=require("@object-ui/react"),h=require("react/jsx-runtime"),g=require("@object-ui/i18n"),_=require("@object-ui/providers");var v=s({TextField:()=>y});function y({value:e,onChange:t,field:n,readonly:r,...i}){let a=n||i.schema;if(r)return(0,h.jsx)(`span`,{className:`text-sm`,children:e||(0,h.jsx)(f.EmptyValue,{})});let o=a?.rows,{inputType:s,...c}=i;return o&&o>1?(0,h.jsx)(f.Textarea,{...c,value:e||``,onChange:e=>t(e.target.value),placeholder:a?.placeholder,disabled:r||c.disabled}):(0,h.jsx)(f.Input,{...c,type:a?.type===`password`?`password`:`text`,value:e||``,onChange:e=>t(e.target.value),placeholder:a?.placeholder,disabled:r||c.disabled})}var b=o((()=>{})),x=s({NumberField:()=>S});function S({value:e,onChange:t,field:n,readonly:r,...i}){if(r)return e==null?(0,h.jsx)(f.EmptyValue,{}):(0,h.jsx)(`span`,{className:`text-sm`,children:e});let a=n||i.schema,o=a?.precision,{inputType:s,...c}=i;return(0,h.jsx)(f.Input,{...c,type:`number`,value:e??``,onChange:e=>{let n=e.target.value;t(n===``?null:Number(n))},placeholder:a?.placeholder,disabled:r||c.disabled,step:o?10**-o:`any`})}var C=o((()=>{})),w=s({BooleanField:()=>T});function T({value:e,onChange:t,field:n,readonly:r,...i}){let a=n||i.schema,o=a?.widget,s=(0,u.useId)(),c=a?.name||s,l=a?.label||`Checkbox`;if(r)return(0,h.jsx)(`span`,{className:`text-sm`,children:e?`Yes`:`No`});let{inputType:d,...p}=i;return o===`checkbox`?(0,h.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,h.jsx)(f.Checkbox,{...p,id:c,checked:!!e,onCheckedChange:e=>t(!!e),disabled:r||p.disabled}),(0,h.jsx)(f.Label,{htmlFor:c,className:`sr-only`,children:l})]}):(0,h.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,h.jsx)(f.Switch,{...p,id:c,checked:!!e,onCheckedChange:t,disabled:r||p.disabled}),(0,h.jsx)(f.Label,{htmlFor:c,className:`sr-only`,children:l})]})}var E=o((()=>{})),D,ee,O=o((()=>{D={"common.selectOption":`Select an option`,"common.select":`Select...`,"common.search":`Search`,"table.selected":`{{count}} selected`},ee=(0,g.createSafeTranslation)(D,`common.selectOption`)})),k=s({SelectField:()=>A});function A({value:e,onChange:t,field:n,readonly:r,...i}){let a=n||i.schema,o=a?.options||[],{t:s}=ee();if(r){let t=o.find(t=>t.value===e)?.label||e;return t?(0,h.jsx)(`span`,{className:`text-sm`,children:t}):(0,h.jsx)(f.EmptyValue,{})}return(0,h.jsxs)(f.Select,{...i,value:e,onValueChange:t,disabled:r||i.disabled,children:[(0,h.jsx)(f.SelectTrigger,{className:i.className,id:i.id,children:(0,h.jsx)(f.SelectValue,{placeholder:a?.placeholder||s(`common.selectOption`)})}),(0,h.jsx)(f.SelectContent,{position:`popper`,children:o.map(e=>(0,h.jsx)(f.SelectItem,{value:e.value,children:e.label},e.value))})]})}var te=o((()=>{O()})),j=s({DateField:()=>M});function M({value:e,onChange:t,field:n,readonly:r,...i}){if(r)return e?(0,h.jsx)(`span`,{className:`text-sm`,children:new Date(e).toLocaleDateString()}):(0,h.jsx)(f.EmptyValue,{});let{inputType:a,...o}=i;return(0,h.jsx)(f.Input,{...o,type:`date`,value:e||``,onChange:e=>t(e.target.value),disabled:r||o.disabled})}var N=o((()=>{})),P=s({EmailField:()=>F});function F({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){let o=n||a.schema;if(r)return e?(0,h.jsx)(`a`,{href:`mailto:${e}`,className:`text-sm text-blue-600 hover:text-blue-800 hover:underline`,children:e}):(0,h.jsx)(f.EmptyValue,{});let{inputType:s,...c}=a;return(0,h.jsx)(f.Input,{...c,type:`email`,value:e||``,onChange:e=>t(e.target.value),placeholder:o?.placeholder||`email@example.com`,disabled:r||c.disabled,"aria-invalid":!!i})}var I=o((()=>{})),ne=s({PhoneField:()=>L});function L({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){let o=n||a.schema;if(r)return e?(0,h.jsx)(`a`,{href:`tel:${e}`,className:`text-sm text-blue-600 hover:text-blue-800 hover:underline`,children:e}):(0,h.jsx)(f.EmptyValue,{});let{inputType:s,...c}=a;return(0,h.jsx)(f.Input,{...c,type:`tel`,value:e||``,onChange:e=>t(e.target.value),placeholder:o?.placeholder||`(555) 123-4567`,disabled:r||c.disabled,"aria-invalid":!!i})}var R=o((()=>{})),re=s({UrlField:()=>z});function z({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){let o=n||a.schema;if(r)return e?e.startsWith(`http://`)||e.startsWith(`https://`)?(0,h.jsx)(`a`,{href:e,target:`_blank`,rel:`noopener noreferrer`,className:`text-sm text-blue-600 hover:text-blue-800 hover:underline`,children:e}):(0,h.jsx)(`span`,{className:`text-sm`,children:e}):(0,h.jsx)(f.EmptyValue,{});let{inputType:s,...c}=a;return(0,h.jsx)(f.Input,{...c,type:`url`,value:e||``,onChange:e=>t(e.target.value),placeholder:o?.placeholder||`https://example.com`,disabled:r||c.disabled,"aria-invalid":!!i})}var B=o((()=>{})),ie=s({CurrencyField:()=>H});function V(e,t,n){if(t)try{return new Intl.NumberFormat(`en-US`,{style:`currency`,currency:t,minimumFractionDigits:n,maximumFractionDigits:n}).format(e)}catch{return`${t} ${e.toFixed(n)}`}try{return new Intl.NumberFormat(`en-US`,{minimumFractionDigits:n,maximumFractionDigits:n}).format(e)}catch{return e.toFixed(n)}}function H({value:e,onChange:t,field:n,readonly:r,errorMessage:i,className:a,...o}){let s=n||o.schema,c=s?.currency,l=s?.precision??2;if(r)return e==null?(0,h.jsx)(f.EmptyValue,{}):(0,h.jsx)(`span`,{className:`text-sm font-medium tabular-nums`,children:V(Number(e),c,l)});let u=e=>{let n=parseFloat(e.target.value);isNaN(n)||t(parseFloat(n.toFixed(l)))},d=c?c===`USD`?`$`:c:``;return(0,h.jsxs)(`div`,{className:`relative`,children:[d&&(0,h.jsx)(`span`,{className:`absolute left-3 top-1/2 -translate-y-1/2 text-sm text-gray-500`,children:d}),(0,h.jsx)(f.Input,{...o,type:`number`,value:e??``,onChange:e=>{t(e.target.value===``?null:parseFloat(e.target.value))},onBlur:u,placeholder:s?.placeholder||`0.00`,disabled:r||o.disabled,className:`${d?`pl-8`:``} ${a||``}`,step:(10**-l).toFixed(l),"aria-invalid":!!i})]})}var U=o((()=>{})),W=s({TextAreaField:()=>ae});function ae({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){if(r)return(0,h.jsx)(`div`,{className:`text-sm whitespace-pre-wrap`,children:e||(0,h.jsx)(f.EmptyValue,{})});let o=n||a.schema,s=o?.rows||4,c=o?.max_length,l=!!(a.mobileFullscreen??o?.mobile_fullscreen??a.mobile_fullscreen??a.schema?.mobile_fullscreen),[d,m]=(0,u.useState)(!1),[g,_]=(0,u.useState)(e??``),v=()=>{_(e??``),m(!0)},y=()=>m(!1),b=()=>{t(g),m(!1)},{inputType:x,mobileFullscreen:S,...C}=a;return(0,h.jsxs)(`div`,{className:`relative`,children:[(0,h.jsx)(f.Textarea,{...C,value:e||``,onChange:e=>t(e.target.value),placeholder:o?.placeholder,disabled:r||C.disabled,rows:s,maxLength:c,"aria-invalid":!!i,className:C.className}),l&&(0,h.jsx)(`button`,{type:`button`,onClick:v,className:`absolute top-1.5 right-1.5 inline-flex items-center justify-center size-7 rounded-md bg-background/80 text-muted-foreground hover:text-foreground hover:bg-background border shadow-sm transition-colors`,"aria-label":`Edit ${o?.label??`text`} fullscreen`,"data-testid":`textarea-fullscreen-toggle`,children:(0,h.jsx)(p.Maximize2,{className:`size-3.5`})}),c&&(0,h.jsxs)(`div`,{className:`absolute bottom-2 right-2 text-xs text-gray-400`,"aria-live":`polite`,"aria-label":`Character count: ${(e||``).length} of ${c}`,children:[(e||``).length,`/`,c]}),l&&(0,h.jsx)(f.Dialog,{open:d,onOpenChange:m,children:(0,h.jsxs)(f.DialogContent,{className:`sm:max-w-3xl h-[100dvh] sm:h-[80vh] max-h-[100dvh] sm:max-h-[80vh] flex flex-col p-0 gap-0`,"data-testid":`textarea-fullscreen-dialog`,children:[(0,h.jsx)(f.DialogHeader,{className:`p-4 border-b`,children:(0,h.jsx)(f.DialogTitle,{className:`text-base`,children:o?.label??`Edit text`})}),(0,h.jsx)(`div`,{className:`flex-1 min-h-0 p-4`,children:(0,h.jsx)(f.Textarea,{autoFocus:!0,value:g,onChange:e=>_(e.target.value),maxLength:c,placeholder:o?.placeholder,className:`h-full min-h-full resize-none text-base`,"data-testid":`textarea-fullscreen-input`})}),(0,h.jsxs)(f.DialogFooter,{className:`p-3 border-t flex-row justify-between sm:justify-end gap-2`,children:[c&&(0,h.jsxs)(`span`,{className:`text-xs text-muted-foreground self-center`,children:[g.length,`/`,c]}),(0,h.jsxs)(`div`,{className:`flex gap-2 ml-auto`,children:[(0,h.jsxs)(f.Button,{type:`button`,variant:`ghost`,onClick:y,children:[(0,h.jsx)(p.X,{className:`size-4 mr-1`}),` Cancel`]}),(0,h.jsxs)(f.Button,{type:`button`,onClick:b,"data-testid":`textarea-fullscreen-save`,children:[(0,h.jsx)(p.Check,{className:`size-4 mr-1`}),` Done`]})]})]})]})})]})}var oe=o((()=>{})),G=s({RichTextField:()=>K});function K({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){let{t:o}=(0,m.useObjectTranslation)();if(r)return(0,h.jsx)(`div`,{className:`text-sm prose prose-sm max-w-none`,children:e||(0,h.jsx)(f.EmptyValue,{})});let s=n||a.schema,c=s?.rows||8,l=s?.format||`markdown`;return(0,h.jsxs)(`div`,{className:`space-y-2`,children:[(0,h.jsxs)(`div`,{className:`flex items-center justify-between text-xs text-gray-500`,children:[(0,h.jsx)(`span`,{children:o(`fields.richText.format`,{format:l,defaultValue:`Format: ${l}`})}),(0,h.jsx)(`span`,{className:`italic`,children:o(`fields.richText.basicEditorHint`,{defaultValue:`Rich text editor (basic)`})})]}),(0,h.jsx)(f.Textarea,{value:e||``,onChange:e=>t(e.target.value),placeholder:s?.placeholder||o(`fields.richText.placeholder`,{defaultValue:`Enter text...`}),disabled:r||a.disabled,rows:c,className:`font-mono text-sm ${a.className||``}`,"aria-invalid":!!i})]})}var se=o((()=>{}));function ce(e){return typeof e==`string`?{field:e}:e}function le(e){return e.replace(/_/g,` `).replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/\b\w/g,e=>e.toUpperCase())}function q(e){let t={};for(let n of e)switch(n.operator){case`eq`:t[n.field]=n.value;break;case`ne`:t[n.field]={$ne:n.value};break;case`gt`:t[n.field]={$gt:n.value};break;case`lt`:t[n.field]={$lt:n.value};break;case`gte`:t[n.field]={$gte:n.value};break;case`lte`:t[n.field]={$lte:n.value};break;case`contains`:t[n.field]={$contains:n.value};break;case`in`:t[n.field]={$in:n.value};break;case`notIn`:t[n.field]={$nin:n.value};break}return t}function ue(e,t){let n={};for(let r of t){let t=e[r.field];t==null||t===``||(r.type===`boolean`?n[r.field]=!!t:r.type===`text`?n[r.field]={$contains:t}:n[r.field]=t)}return n}function de({open:e,onOpenChange:t,title:n=`Select Record`,multiple:r=!1,dataSource:i,objectName:a,columns:o,displayField:s=`name`,titleFormat:c,idField:l=`id`,pageSize:d=fe,value:m,onSelect:g,onSelectRecords:_,lookupFilters:v,cellRenderer:y,filterColumns:b,renderFilterBar:x,renderGrid:S}){let[C,w]=(0,u.useState)([]),[T,E]=(0,u.useState)(!1),[D,ee]=(0,u.useState)(null),[O,k]=(0,u.useState)(0),[A,te]=(0,u.useState)(``),[j,M]=(0,u.useState)(1),N=(0,u.useRef)(null),[P,F]=(0,u.useState)(null),[I,ne]=(0,u.useState)(`asc`),[L,R]=(0,u.useState)(new Set),re=(0,u.useRef)(new Map),[z,B]=(0,u.useState)(-1),ie=(0,u.useRef)(null),[V,H]=(0,u.useState)(!1),[U,W]=(0,u.useState)({}),[ae,oe]=(0,u.useState)({}),G=(0,u.useRef)(null),[K,se]=(0,u.useState)(``),de=(0,u.useMemo)(()=>o&&o.length>0?o.map(ce):[{field:s,label:le(s)}],[o,s]),Y=(0,u.useMemo)(()=>{if(b&&b.length>0)return b;if(v&&v.length>0)return v.map(e=>{let t=`text`;return typeof e.value==`boolean`?t=`boolean`:Array.isArray(e.value)?t=`select`:typeof e.value==`number`||e.operator===`gt`||e.operator===`lt`||e.operator===`gte`||e.operator===`lte`?t=`number`:(e.operator===`in`||e.operator===`notIn`)&&(t=`select`),{field:e.field,label:le(e.field),type:t,...Array.isArray(e.value)?{options:e.value.map(e=>{if(typeof e==`object`&&e){let t=e;return{label:String(t.name||t.label||t.title||e),value:e}}return{label:String(e),value:e}})}:{}}})},[b,v]),me=(0,u.useMemo)(()=>{let e=v?.length?q(v):{},t=Y?.length?ue(U,Y):{},n={...e,...t};return Object.keys(n).length>0?n:void 0},[v,Y,U]),X=Math.max(1,Math.ceil(O/d)),he=(0,u.useCallback)(async(e,t=1,n,r)=>{if(!(!i||!a)){E(!0),ee(null);try{let o={$top:d,$skip:(t-1)*d};e&&e.trim()&&(o.$search=e.trim()),n&&(o.$orderby={[n.field]:n.direction});let s=r===void 0?me:r;s&&Object.keys(s).length>0&&(o.$filter=s);let c=await i.find(a,o),l=c?.data??c??[];w(l),k(c?.total??l.length),B(-1)}catch(e){ee(e instanceof Error?e.message:String(e)),w([])}finally{E(!1)}}},[i,a,d,me]),ge=(0,u.useMemo)(()=>P?{field:P,direction:I}:null,[P,I]);(0,u.useEffect)(()=>{e||(te(``),M(1),ee(null),w([]),F(null),ne(`asc`),B(-1),H(!1),W({}),oe({}),se(``),R(new Set(r&&Array.isArray(m)?m:[])),re.current.clear())},[e]),(0,u.useEffect)(()=>{e&&he(A||void 0,j,ge)},[e,j,ge,me]),(0,u.useEffect)(()=>{e&&r&&R(new Set(Array.isArray(m)?m:[]))},[e,r,m]);let _e=(0,u.useCallback)(e=>{te(e),M(1),N.current&&clearTimeout(N.current),N.current=setTimeout(()=>{he(e||void 0,1,ge)},300)},[he,ge]);(0,u.useEffect)(()=>()=>{N.current&&clearTimeout(N.current)},[]);let ve=(0,u.useCallback)(e=>{F(t=>t===e?(ne(e=>e===`asc`?`desc`:`asc`),e):(ne(`asc`),e)),M(1)},[]),ye=(0,u.useCallback)(e=>e[l]??e.id??e._id,[l]),be=(0,u.useCallback)(e=>{let t=ye(e);return r?L.has(t):m===t},[r,m,L,ye]),xe=(0,u.useCallback)(e=>{let n=ye(e);r?R(t=>{let r=new Set(t);return r.has(n)?(r.delete(n),re.current.delete(n)):(r.add(n),re.current.set(n,e)),r}):(g(n),_?.([e]),t(!1))},[r,ye,g,_,t]),Se=(0,u.useCallback)(()=>{let e=Array.from(L);g(e);let n=e.map(e=>re.current.get(e)).filter(Boolean);_?.(n),t(!1)},[L,g,_,t]),Ce=(0,u.useCallback)(()=>{M(e=>Math.max(1,e-1))},[]),we=(0,u.useCallback)(()=>{M(e=>Math.min(X,e+1))},[X]),Te=(0,u.useCallback)(e=>{if(e.key!==`Enter`)return;let t=parseInt(K,10);!isNaN(t)&&t>=1&&t<=X&&M(t),se(``)},[K,X]),Ee=(0,u.useCallback)(e=>{C.length!==0&&(e.key===`ArrowDown`?(e.preventDefault(),B(e=>Math.min(e+1,C.length-1))):e.key===`ArrowUp`?(e.preventDefault(),B(e=>Math.max(e-1,0))):(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),z>=0&&z<C.length&&xe(C[z])))},[C,z,xe]);(0,u.useEffect)(()=>{if(z>=0&&ie.current){let e=ie.current.querySelector(`[data-row-index="${z}"]`);e&&typeof e.scrollIntoView==`function`&&e.scrollIntoView({block:`nearest`})}},[z]);let De=(0,u.useCallback)((e,t)=>{if(c&&t.field===s){let t=`[-\\u2013\\u2014|/·,:]`,n=!1,r=c.replace(/\{([^{}]+)\}/g,(t,r)=>{let i=e[r.trim()];return i!=null&&i!==``?(n=!0,String(i)):`\0`});if(n){let e=r.replace(RegExp(`\\s*${t}\\s*`,`g`),``).replace(RegExp(`\\s*${t}\\s*`,`g`),``).replace(RegExp(`\0`,`g`),``).replace(/\s+/g,` `).trim();if(e)return e}}let n=e[t.field];if(t.type&&y){let e=y(t.type);if(e)return(0,h.jsx)(e,{value:n,field:{name:t.field,type:t.type}})}return n==null?``:typeof n==`object`?n.$numberDecimal?String(Number(n.$numberDecimal)):n.$oid?String(n.$oid):n.$date?new Date(n.$date).toLocaleDateString():n.name||n.label?String(n.name||n.label):JSON.stringify(n):typeof n==`boolean`?n?`Yes`:`No`:String(n)},[y,c,s]),Oe=(0,u.useCallback)(e=>P===e?I===`asc`?(0,h.jsx)(p.ArrowUp,{className:`ml-1 size-3`}):(0,h.jsx)(p.ArrowDown,{className:`ml-1 size-3`}):(0,h.jsx)(p.ArrowUpDown,{className:`ml-1 size-3 opacity-40`}),[P,I]),ke=(0,u.useCallback)((e,t,n)=>{e.preventDefault(),e.stopPropagation(),G.current={field:t,startX:e.clientX,startWidth:n};let r=e=>{if(!G.current)return;let t=e.clientX-G.current.startX,n=Math.max(pe,G.current.startWidth+t);oe(e=>({...e,[G.current.field]:n}))},i=()=>{G.current=null,document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[]),Z=(0,u.useCallback)((e,t)=>{W(n=>({...n,[e]:t})),M(1)},[]),Ae=(0,u.useCallback)(()=>{W({}),M(1)},[]),je=(0,u.useMemo)(()=>Object.values(U).filter(e=>e!=null&&e!==``).length,[U]),Me=(0,u.useCallback)(e=>{let t=U[e.field],n=e.label||le(e.field);switch(e.type){case`select`:return(0,h.jsxs)(`div`,{className:`space-y-1`,children:[(0,h.jsx)(f.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,h.jsxs)(f.Select,{value:t==null?``:String(t),onValueChange:t=>Z(e.field,t),children:[(0,h.jsx)(f.SelectTrigger,{className:`h-8 text-xs`,children:(0,h.jsx)(f.SelectValue,{placeholder:`Filter ${n}`})}),(0,h.jsx)(f.SelectContent,{children:e.options?.map(e=>(0,h.jsx)(f.SelectItem,{value:String(e.value),children:e.label},String(e.value)))})]})]});case`number`:return(0,h.jsxs)(`div`,{className:`space-y-1`,children:[(0,h.jsx)(f.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,h.jsx)(f.Input,{type:`number`,className:`h-8 text-xs`,value:t??``,placeholder:`Filter ${n}`,onChange:t=>{let n=t.target.value;Z(e.field,n===``?``:Number(n))}})]});case`date`:return(0,h.jsxs)(`div`,{className:`space-y-1`,children:[(0,h.jsx)(f.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,h.jsx)(f.Input,{type:`date`,className:`h-8 text-xs`,value:t??``,onChange:t=>Z(e.field,t.target.value)})]});case`boolean`:return(0,h.jsxs)(`div`,{className:`space-y-1`,children:[(0,h.jsx)(f.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,h.jsxs)(`div`,{className:`flex items-center gap-2 h-8`,children:[(0,h.jsx)(f.Checkbox,{checked:!!t,onCheckedChange:t=>Z(e.field,!!t)}),(0,h.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Yes`})]})]});default:return(0,h.jsxs)(`div`,{className:`space-y-1`,children:[(0,h.jsx)(f.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,h.jsx)(f.Input,{className:`h-8 text-xs`,value:t??``,placeholder:`Filter ${n}`,onChange:t=>Z(e.field,t.target.value)})]})}},[U,Z]),Ne=(0,u.useCallback)((e,t)=>e?`bg-primary/5 hover:bg-primary/10`:t%2==1?`bg-muted/20 hover:bg-accent/30`:`hover:bg-accent/30`,[]);return(0,h.jsx)(f.Dialog,{open:e,onOpenChange:t,children:(0,h.jsxs)(f.DialogContent,{className:`w-[95vw] sm:max-w-3xl lg:max-w-5xl max-h-[85vh] sm:max-h-[80vh] flex flex-col gap-0`,"data-testid":`record-picker-dialog`,children:[(0,h.jsx)(f.DialogHeader,{children:(0,h.jsxs)(f.DialogTitle,{children:[n,r&&(0,h.jsx)(`span`,{className:`sr-only`,children:` (multiple selection)`})]})}),(0,h.jsxs)(`div`,{className:`relative rounded-md border bg-muted/30 mb-3`,children:[(0,h.jsx)(p.Search,{className:`absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground`}),(0,h.jsx)(f.Input,{placeholder:`Search...`,value:A,onChange:e=>_e(e.target.value),className:`pl-9 border-0 bg-transparent shadow-none focus-visible:ring-0`,"data-testid":`record-picker-search`}),T&&(0,h.jsx)(p.Loader2,{className:`absolute right-3 top-1/2 -translate-y-1/2 size-4 animate-spin text-muted-foreground`,"data-testid":`record-picker-loading-indicator`})]}),Y&&Y.length>0&&(0,h.jsx)(`div`,{className:`py-2`,children:x?(0,h.jsx)(`div`,{"data-testid":`record-picker-filter-bar`,children:x({filterColumns:Y,values:U,onChange:Z,onClear:Ae,activeCount:je})}):(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)(`div`,{className:`flex items-center gap-2`,"data-testid":`record-picker-filter-bar`,children:[(0,h.jsxs)(f.Button,{type:`button`,variant:je>0?`secondary`:`outline`,size:`sm`,className:`gap-1.5 shrink-0`,onClick:()=>H(e=>!e),children:[(0,h.jsx)(p.SlidersHorizontal,{className:`size-3.5`}),`Filters`,je>0&&(0,h.jsx)(`span`,{className:`inline-flex h-5 min-w-[20px] items-center justify-center rounded-full bg-primary/10 px-1 text-xs font-medium text-primary`,children:je})]}),je>0&&(0,h.jsxs)(f.Button,{type:`button`,variant:`ghost`,size:`sm`,className:`gap-1 text-xs`,onClick:Ae,children:[(0,h.jsx)(p.X,{className:`size-3`}),`Clear`]})]}),V&&(0,h.jsx)(`div`,{className:`mt-2 grid gap-3 sm:grid-cols-2 lg:grid-cols-3 border rounded-md p-3 bg-muted/30`,"data-testid":`record-picker-filter-panel`,children:Y.map(e=>(0,h.jsx)(`div`,{children:Me(e)},e.field))})]})}),D&&(0,h.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-4`,role:`alert`,children:[(0,h.jsx)(p.AlertCircle,{className:`size-5 text-destructive`}),(0,h.jsx)(`p`,{className:`text-sm text-destructive`,children:D}),(0,h.jsx)(f.Button,{variant:`outline`,size:`sm`,onClick:()=>he(A||void 0,j,ge),type:`button`,children:`Retry`})]}),S?(0,h.jsx)(`div`,{className:`flex-1 min-h-0`,"data-testid":`record-picker-grid-slot`,children:S({columns:de,records:C,loading:T,totalCount:O,currentPage:j,pageSize:d,sortField:P,sortDirection:I,onSort:ve,onPageChange:M,onRowClick:xe,isSelected:be,multiple:r,idField:l,cellRenderer:y})}):(0,h.jsxs)(h.Fragment,{children:[T&&C.length===0&&!D&&(0,h.jsx)(`div`,{className:`flex-1 overflow-hidden min-h-0 border rounded-md`,role:`status`,"aria-live":`polite`,"data-testid":`record-picker-skeleton`,children:(0,h.jsxs)(f.Table,{children:[(0,h.jsx)(f.TableHeader,{children:(0,h.jsxs)(f.TableRow,{className:`bg-muted/40`,children:[r&&(0,h.jsx)(f.TableHead,{className:`w-10`}),de.map(e=>(0,h.jsx)(f.TableHead,{children:(0,h.jsx)(f.Skeleton,{className:`h-4 w-20`})},e.field))]})}),(0,h.jsx)(f.TableBody,{children:Array.from({length:J},(e,t)=>(0,h.jsxs)(f.TableRow,{children:[r&&(0,h.jsx)(f.TableCell,{className:`w-10`,children:(0,h.jsx)(f.Skeleton,{className:`size-4 rounded`})}),de.map(e=>(0,h.jsx)(f.TableCell,{children:(0,h.jsx)(f.Skeleton,{className:`h-4 w-full`})},e.field))]},t))})]})}),!T&&!D&&C.length===0&&(0,h.jsx)(`div`,{className:`py-8 text-center`,children:(0,h.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No records found`})}),!D&&C.length>0&&(0,h.jsxs)(`div`,{className:`relative flex-1 overflow-auto min-h-0 border rounded-md`,tabIndex:0,onKeyDown:Ee,role:`grid`,"aria-label":`Records`,children:[T&&(0,h.jsx)(`div`,{className:`absolute inset-0 z-10 flex items-center justify-center bg-background/60`,"data-testid":`record-picker-loading-overlay`,children:(0,h.jsx)(p.Loader2,{className:`size-6 animate-spin text-muted-foreground`})}),(0,h.jsxs)(f.Table,{style:Object.keys(ae).length>0?{tableLayout:`fixed`}:void 0,children:[(0,h.jsx)(f.TableHeader,{className:`sticky top-0 z-[5] bg-muted/50 [&_tr]:border-b`,"data-testid":`record-picker-sticky-header`,children:(0,h.jsxs)(f.TableRow,{children:[r&&(0,h.jsx)(f.TableHead,{className:`w-10`}),de.map(e=>{let t=ae[e.field];return(0,h.jsxs)(f.TableHead,{style:t?{width:`${t}px`,minWidth:`${t}px`}:e.width?{width:e.width}:void 0,className:`cursor-pointer select-none relative group text-xs font-semibold uppercase tracking-wider`,onClick:()=>ve(e.field),"aria-sort":P===e.field?I===`asc`?`ascending`:`descending`:`none`,children:[(0,h.jsxs)(`span`,{className:`inline-flex items-center`,children:[e.label||le(e.field),Oe(e.field)]}),(0,h.jsx)(`span`,{role:`separator`,"aria-orientation":`vertical`,className:`absolute right-0 top-0 bottom-0 w-1 cursor-col-resize opacity-0 group-hover:opacity-100 bg-border hover:bg-primary/50 transition-opacity`,onMouseDown:t=>{let n=t.currentTarget.parentElement?.getBoundingClientRect();ke(t,e.field,n?.width??100)},onClick:e=>e.stopPropagation(),"data-testid":`resize-handle-${e.field}`})]},e.field)})]})}),(0,h.jsx)(f.TableBody,{ref:ie,children:C.map((e,t)=>{let n=ye(e),i=be(e),a=t===z;return(0,h.jsxs)(f.TableRow,{"data-row-index":t,className:(0,f.cn)(`cursor-pointer transition-colors`,Ne(i,t),a&&`ring-2 ring-primary ring-inset`),onClick:()=>xe(e),"data-testid":`record-row-${n}`,"aria-selected":i,children:[r&&(0,h.jsx)(f.TableCell,{className:`w-10`,children:i&&(0,h.jsx)(p.Check,{className:`size-4 text-primary`})}),de.map(t=>(0,h.jsx)(f.TableCell,{className:`py-2.5`,children:De(e,t)},t.field))]},n??t)})})]})]}),!D&&O>0&&(0,h.jsxs)(`div`,{className:`flex items-center justify-between text-sm text-muted-foreground border-t pt-3 mt-2 px-1`,"data-testid":`record-picker-pagination`,children:[(0,h.jsxs)(`span`,{children:[O,` `,O===1?`record`:`records`,X>1&&` · Page ${j} of ${X}`]}),X>1&&(0,h.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,h.jsx)(f.Button,{variant:`outline`,size:`icon`,className:`size-7`,onClick:Ce,disabled:j<=1,type:`button`,"aria-label":`Previous page`,children:(0,h.jsx)(p.ChevronLeft,{className:`size-4`})}),(0,h.jsx)(f.Input,{className:`h-7 w-12 text-center text-xs px-1`,placeholder:String(j),value:K,onChange:e=>se(e.target.value),onKeyDown:Te,"aria-label":`Jump to page`,"data-testid":`record-picker-page-jump`}),(0,h.jsx)(f.Button,{variant:`outline`,size:`icon`,className:`size-7`,onClick:we,disabled:j>=X,type:`button`,"aria-label":`Next page`,children:(0,h.jsx)(p.ChevronRight,{className:`size-4`})})]})]})]}),r&&(0,h.jsx)(f.DialogFooter,{children:(0,h.jsxs)(`div`,{className:`flex items-center gap-2 w-full justify-between`,children:[(0,h.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[L.size,` selected`]}),(0,h.jsxs)(`div`,{className:`flex gap-2`,children:[(0,h.jsx)(f.Button,{variant:`outline`,type:`button`,onClick:()=>t(!1),children:`Cancel`}),(0,h.jsx)(f.Button,{type:`button`,onClick:Se,children:`Confirm`})]})]})})]})})}var fe,pe,J,Y=o((()=>{fe=10,pe=60,J=5}));function me(e){he=e}function X(){return he}var he,ge=o((()=>{})),_e=s({LookupField:()=>xe});function ve(e,t){if(!e||typeof e!=`object`||!t)return null;let n=`[-\\u2013\\u2014|/·,:]`,r=!1,i=t.replace(/\{([^{}]+)\}/g,(t,n)=>{let i=e[n.trim()];return i!=null&&i!==``?(r=!0,String(i)):`\0`});return r&&i.replace(RegExp(`\\s*${n}\\s*`,`g`),``).replace(RegExp(`\\s*${n}\\s*`,`g`),``).replace(RegExp(`\0`,`g`),``).replace(/\s+/g,` `).trim()||null}function ye(e,t,n,r,i){let a=e[n]??e.id??e._id,o=(i?ve(e,i):null)??e[t]??e.label??e.name??e.full_name??e.title??e.subject??String(a),s=r?e[r]:void 0;return{value:a,label:String(o),description:s,...e}}function be(e){return{text:`text`,number:`number`,currency:`number`,percent:`number`,select:`select`,status:`select`,date:`date`,datetime:`date`,boolean:`boolean`}[e]}function xe({value:e,onChange:t,field:n,readonly:r,...i}){let[a,o]=(0,u.useState)(!1),[s,c]=(0,u.useState)(``),{t:l}=ee(),[d,m]=(0,u.useState)([]),[g,_]=(0,u.useState)(!1),[v,y]=(0,u.useState)(null),[b,x]=(0,u.useState)(0),S=(0,u.useRef)(null),[C,w]=(0,u.useState)([]),[T,E]=(0,u.useState)(-1),D=(0,u.useRef)(null),O=n||i.schema,k=O?.field,A=k&&typeof k==`object`&&(`reference_to`in k||`reference`in k||`type`in k)?k:O,te=A?.options||[],j=A?.multiple||!1,M=A?.display_field||A?.reference_field||`name`,N=A?.description_field,P=A?.id_field||`id`,F=A?.reference_to||A?.reference,I=A?.lookup_columns,ne=A?.lookup_page_size,L=A?.lookup_filters,R=(0,u.useMemo)(()=>{let e=A?.depends_on??A?.dependsOn;return e&&Array.isArray(e)?e.map(e=>typeof e==`string`?{field:e,param:e}:{field:e.field,param:e.param??e.field}):[]},[A?.depends_on,A?.dependsOn]),re=i.dependentValues,z=(0,u.useMemo)(()=>{if(!I)return;let e=[];for(let t of I)if(typeof t==`object`&&t.type){let n=be(t.type);n&&e.push({field:t.field,label:t.label,type:n})}return e.length>0?e:void 0},[I]),B=(0,u.useContext)(Ce),ie=B?.dataSource??null,V=i.dataSource??O?.dataSource??A?.dataSource??ie,H=(0,u.useMemo)(()=>re||(B?.formValues??B?.data??{}),[re,B?.formValues,B?.data]),U=(0,u.useMemo)(()=>R.length===0?!1:R.some(({field:e})=>{let t=H[e];return t==null||t===``||Array.isArray(t)&&t.length===0}),[R,H]),W=V!=null&&typeof V.find==`function`&&!!F,[ae,oe]=(0,u.useState)(null);(0,u.useEffect)(()=>{if(!V||!F)return;let e=V.getObjectSchema;if(typeof e!=`function`)return;let t=!0;return Promise.resolve(e.call(V,F)).then(e=>{t&&oe(e)}).catch(()=>{}),()=>{t=!1}},[V,F]);let G=(0,u.useMemo)(()=>{let e=ae?.titleFormat;return typeof e==`string`?e:e&&typeof e==`object`&&typeof e.source==`string`?e.source:null},[ae]),K=i.onCreateNew??O?.onCreateNew,[se,ce]=(0,u.useState)(!1),le=W?d:te,q=(0,u.useMemo)(()=>{if(W||!s)return le;let e=s.toLowerCase();return le.filter(t=>t.label.toLowerCase().includes(e)||t.description&&t.description.toLowerCase().includes(e))},[W,le,s]);(0,u.useEffect)(()=>{E(-1)},[q.length]);let ue=(0,u.useCallback)(async e=>{if(!(!V||!F)){if(U){m([]),x(0);return}_(!0),y(null);try{let t={$top:Se};if(e&&e.trim()&&(t.$search=e.trim()),R.length>0){let e={};for(let{field:t,param:n}of R){let r=H[t];r==null||r===``||(e[n]=typeof r==`number`?r:String(r))}Object.keys(e).length>0&&(t.$filter=e)}let n=await V.find(F,t),r=n?.data??n??[];m(r.map(e=>ye(e,M,P,N,G))),x(n?.total??r.length)}catch(e){y(e instanceof Error?e.message:String(e)),m([])}finally{_(!1)}}},[V,F,M,P,N,G,U,R,H]);(0,u.useEffect)(()=>{a&&W&&R.length>0&&ue(s||void 0)},[(0,u.useMemo)(()=>R.map(e=>`${e.param}=${H[e.field]??``}`).join(`|`),[R,H])]),(0,u.useEffect)(()=>{a&&W&&ue(s||void 0),a||(c(``),y(null),E(-1))},[a]);let fe=(0,u.useCallback)(e=>{c(e),W&&(S.current&&clearTimeout(S.current),S.current=setTimeout(()=>{ue(e||void 0)},300))},[W,ue]);(0,u.useEffect)(()=>()=>{S.current&&clearTimeout(S.current)},[]),(0,u.useEffect)(()=>{if(!W||!V||!F)return;let t=j?Array.isArray(e)?e:[]:e!=null&&e!==``?[e]:[];if(!t.length)return;let n=t.filter(e=>!pe(e));if(!n.length)return;let r=!1;return(async()=>{try{let e=[];for(let t of n)if(typeof V.findOne==`function`){let n=await V.findOne(F,t);n&&e.push(ye(n,M,P,N,G))}else{let n=await V.find(F,{$filter:{[P]:t},$top:1}),r=n?.data??n??[];r[0]&&e.push(ye(r[0],M,P,N,G))}!r&&e.length&&w(t=>{let n=new Map(t.map(e=>[e.value,e]));for(let t of e)n.set(t.value,t);return Array.from(n.values())})}catch{}})(),()=>{r=!0}},[e,W,F,M,P,N,j]);let pe=(0,u.useCallback)(e=>te.find(t=>t.value===e)??d.find(t=>t.value===e)??C.find(t=>t.value===e),[te,d,C]),J=j?(Array.isArray(e)?e:[]).map(pe).filter(Boolean):e?[pe(e)].filter(Boolean):[],Y=(0,u.useCallback)(n=>{if(j){let r=Array.isArray(e)?e:[];r.includes(n.value)?t(r.filter(e=>e!==n.value)):t([...r,n.value])}else t(n.value),o(!1)},[j,e,t]),me=n=>{t(j?(Array.isArray(e)?e:[]).filter(e=>e!==n):null)},he=(0,u.useCallback)(e=>{w(e.map(e=>ye(e,M,P,N,G)))},[M,P,N,G]),ge=(0,u.useCallback)(e=>{e.key===`ArrowDown`?(e.preventDefault(),E(e=>e<q.length-1?e+1:e)):e.key===`ArrowUp`?(e.preventDefault(),E(e=>e>0?e-1:0)):e.key===`Enter`&&(e.preventDefault(),T>=0&&T<q.length&&Y(q[T]))},[q,T,Y]);return(0,u.useEffect)(()=>{T>=0&&D.current&&D.current.querySelector(`[data-lookup-index="${T}"]`)?.scrollIntoView({block:`nearest`})},[T]),r?J.length?j?(0,h.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:J.map((e,t)=>(0,h.jsx)(f.Badge,{variant:`outline`,children:e?.label||e?.[M]},t))}):(0,h.jsx)(`span`,{className:`text-sm`,children:J[0]?.label||J[0]?.[M]}):(0,h.jsx)(f.EmptyValue,{}):(0,h.jsxs)(`div`,{className:`space-y-2`,children:[J.length>0&&(0,h.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:J.map((e,t)=>(0,h.jsxs)(f.Badge,{variant:`outline`,className:`gap-1`,children:[e?.label||e?.[M],(0,h.jsx)(`button`,{onClick:()=>me(e?.value),className:`ml-1 hover:text-destructive`,type:`button`,"aria-label":`Remove ${e?.label||e?.[M]}`,children:(0,h.jsx)(p.X,{className:`size-3`})})]},t))}),(0,h.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,h.jsxs)(f.Popover,{open:a,onOpenChange:e=>!U&&o(e),children:[(0,h.jsx)(f.PopoverTrigger,{asChild:!0,children:(0,h.jsxs)(f.Button,{variant:`outline`,className:`min-w-0 flex-1 justify-start text-left font-normal`,type:`button`,disabled:U||i.disabled,"data-testid":U?`lookup-trigger-gated`:void 0,title:U?`Select ${R.map(e=>e.field).join(`, `)} first`:void 0,children:[(0,h.jsx)(p.Search,{className:`mr-2 size-4`}),U?`Select ${R.map(e=>e.field).join(`, `)} first`:J.length===0?O?.placeholder||l(`common.select`):j?l(`table.selected`,{count:J.length}):l(`common.select`)]})}),(0,h.jsxs)(f.PopoverContent,{className:`w-[var(--radix-popover-trigger-width)] p-0`,align:`start`,children:[(0,h.jsx)(`div`,{className:`p-2`,children:(0,h.jsxs)(`div`,{className:`relative`,children:[(0,h.jsx)(p.Search,{className:`absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground`}),(0,h.jsx)(f.Input,{placeholder:l(`common.search`)+`...`,value:s,onChange:e=>fe(e.target.value),onKeyDown:ge,className:`w-full pl-9 h-8 text-sm`}),g&&(0,h.jsx)(p.Loader2,{className:`absolute right-3 top-1/2 -translate-y-1/2 size-4 animate-spin text-muted-foreground`,"data-testid":`lookup-loading`})]})}),v&&(0,h.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-4 px-2`,role:`alert`,children:[(0,h.jsx)(p.AlertCircle,{className:`size-5 text-destructive`}),(0,h.jsx)(`p`,{className:`text-sm text-destructive`,children:v}),(0,h.jsx)(f.Button,{variant:`outline`,size:`sm`,onClick:()=>ue(s||void 0),type:`button`,children:`Retry`})]}),g&&q.length===0&&!v&&(0,h.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-6`,role:`status`,"aria-live":`polite`,children:[(0,h.jsx)(p.Loader2,{className:`size-6 animate-spin text-muted-foreground`}),(0,h.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading…`})]}),!v&&!(g&&q.length===0)&&(0,h.jsx)(`div`,{ref:D,className:`max-h-64 overflow-y-auto px-1 pb-1`,role:`listbox`,children:q.length===0?(0,h.jsxs)(`div`,{className:`py-4 text-center`,children:[(0,h.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No options found`}),K&&(0,h.jsxs)(f.Button,{variant:`ghost`,size:`sm`,className:`mt-2 gap-1`,type:`button`,onClick:()=>{K(s),o(!1)},children:[(0,h.jsx)(p.Plus,{className:`size-4`}),`Create new`]})]}):(0,h.jsxs)(h.Fragment,{children:[q.map((t,n)=>{let r=j?(Array.isArray(e)?e:[]).includes(t.value):e===t.value;return(0,h.jsxs)(`button`,{"data-lookup-index":n,role:`option`,"aria-selected":r,onClick:()=>Y(t),className:`w-full text-left px-3 py-2 rounded-md text-sm hover:bg-accent flex items-center justify-between ${n===T?`bg-accent text-accent-foreground`:r?`bg-accent/50 text-accent-foreground`:``}`,type:`button`,children:[(0,h.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,h.jsx)(`span`,{className:`block truncate`,children:t.label}),t.description&&(0,h.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:t.description})]}),r&&(0,h.jsx)(f.Badge,{variant:`default`,className:`ml-2 shrink-0`,children:`Selected`})]},t.value)}),W&&b>q.length&&(0,h.jsxs)(`p`,{className:`text-xs text-muted-foreground text-center py-2`,children:[`Showing `,q.length,` of `,b,` results.`]}),W&&b>q.length&&(0,h.jsxs)(`button`,{type:`button`,className:`w-full text-center px-3 py-2 rounded-md text-sm font-medium text-primary hover:bg-accent flex items-center justify-center gap-1.5`,onClick:()=>{o(!1),ce(!0)},"data-testid":`show-all-results`,children:[(0,h.jsx)(p.TableProperties,{className:`size-3.5`}),`Show All Results (`,b,`)`]}),K&&(0,h.jsxs)(`button`,{type:`button`,className:`w-full text-left px-3 py-2 rounded-md text-sm hover:bg-accent flex items-center gap-1.5 text-muted-foreground`,onClick:()=>{K(s),o(!1)},children:[(0,h.jsx)(p.Plus,{className:`size-3.5`}),`Create new`,s?` "${s}"`:``]})]})})]})]}),W&&(0,h.jsx)(f.Button,{variant:`outline`,size:`icon`,className:`shrink-0`,type:`button`,onClick:()=>ce(!0),"aria-label":`Browse all records`,title:`Browse all records`,"data-testid":`browse-all-records`,children:(0,h.jsx)(p.TableProperties,{className:`size-4`})})]}),W&&V&&F&&(0,h.jsx)(de,{open:se,onOpenChange:ce,title:O?.label||`Select`,multiple:j,dataSource:V,objectName:F,columns:I,displayField:M,titleFormat:G,idField:P,pageSize:ne,value:e,onSelect:t,onSelectRecords:he,lookupFilters:L,cellRenderer:X(),filterColumns:z})]})}var Se,Ce,we=o((()=>{Y(),ge(),O(),Se=50,Ce=m.SchemaRendererContext})),Te=s({DateTimeField:()=>Ee});function Ee({value:e,onChange:t,field:n,readonly:r,...i}){if(r){if(!e)return(0,h.jsx)(f.EmptyValue,{});let t=new Date(e);return(0,h.jsxs)(`span`,{className:`text-sm`,children:[t.toLocaleDateString(),` `,t.toLocaleTimeString()]})}let{inputType:a,...o}=i;return(0,h.jsx)(f.Input,{...o,type:`datetime-local`,value:e||``,onChange:e=>t(e.target.value),disabled:r||o.disabled})}var De=o((()=>{})),Oe=s({TimeField:()=>ke});function ke({value:e,onChange:t,field:n,readonly:r,...i}){if(r)return(0,h.jsx)(`span`,{className:`text-sm`,children:e||(0,h.jsx)(f.EmptyValue,{})});let{inputType:a,...o}=i;return(0,h.jsx)(f.Input,{...o,type:`time`,value:e||``,onChange:e=>t(e.target.value),disabled:r||o.disabled})}var Z=o((()=>{})),Ae=s({PercentField:()=>je});function je({value:e,onChange:t,field:n,readonly:r,errorMessage:i,className:a,...o}){let s=n||o.schema,c=s?.precision??2;if(r)return e==null?(0,h.jsx)(f.EmptyValue,{}):(0,h.jsxs)(`span`,{className:`text-sm font-medium tabular-nums`,children:[(e*100).toFixed(c),`%`]});let l=e==null?``:e*100,u=e==null?0:e*100,d=e=>{if(e.target.value===``){t(null);return}let n=parseFloat(e.target.value);t(isNaN(n)?null:n/100)},p=e=>{if(r||o.disabled)return;if(!Array.isArray(e)||e.length===0){t(null);return}let n=e[0];t(typeof n==`number`?n/100:null)},m=10**-c;return(0,h.jsxs)(`div`,{className:`space-y-2`,children:[(0,h.jsxs)(`div`,{className:`relative`,children:[(0,h.jsx)(f.Input,{...o,type:`number`,value:l,onChange:d,placeholder:s?.placeholder||`0`,disabled:r||o.disabled,className:`pr-8 ${a||``}`,step:(10**-c).toFixed(c),"aria-invalid":!!i}),(0,h.jsx)(`span`,{className:`absolute right-3 top-1/2 -translate-y-1/2 text-sm text-gray-500`,children:`%`})]}),(0,h.jsx)(f.Slider,{value:[u],onValueChange:p,min:0,max:100,step:m,disabled:r||o.disabled,className:`w-full`,"aria-label":`Percentage`,"data-testid":`percent-slider`})]})}var Me=o((()=>{})),Ne=s({PasswordField:()=>Pe});function Pe({value:e,onChange:t,field:n,readonly:r,className:i,...a}){let[o,s]=(0,u.useState)(!1),c=n||a.schema;if(r)return(0,h.jsx)(`span`,{className:`text-sm`,children:`••••••••`});let{inputType:l,...d}=a;return(0,h.jsxs)(`div`,{className:`relative`,children:[(0,h.jsx)(f.Input,{...d,type:o?`text`:`password`,value:e||``,onChange:e=>t(e.target.value),placeholder:c?.placeholder,disabled:r||d.disabled,className:`pr-10 ${i||``}`}),(0,h.jsx)(f.Button,{type:`button`,variant:`ghost`,size:`sm`,className:`absolute right-0 top-0 h-full px-3 py-2 hover:bg-transparent`,onClick:()=>s(!o),tabIndex:-1,children:o?(0,h.jsx)(p.EyeOff,{className:`size-4 text-gray-500`}):(0,h.jsx)(p.Eye,{className:`size-4 text-gray-500`})})]})}var Fe=o((()=>{})),Ie=s({FileField:()=>Le});function Le({value:e,onChange:t,field:n,readonly:r,...i}){let a=(0,u.useRef)(null),o=(0,u.useRef)(null),s=n||i.schema,c=s?.multiple||!1,l=s?.accept?s.accept.join(`,`):void 0,d=s?.maxSize,m=s?.capture??null,g=!l||l.split(`,`).some(e=>e.trim().startsWith(`image/`)||e.trim()===`image/*`||e.trim().startsWith(`.jp`)||e.trim().startsWith(`.png`)||e.trim().startsWith(`.gif`)||e.trim().startsWith(`.webp`)),v=typeof navigator<`u`&&(navigator.maxTouchPoints>0||/Mobi|Android/i.test(navigator.userAgent)),y=m===!1?!1:m??(g&&v?`environment`:null),[b,x]=(0,u.useState)(!1),[S,C]=(0,u.useState)([]),{upload:w}=(0,_.useUpload)(),[T,E]=(0,u.useState)({}),[D,ee]=(0,u.useState)(!1),O=e?Array.isArray(e)?e:[e]:[],k=(0,u.useCallback)(async e=>{if(e.length===0)return;let n=[],r=e.filter(e=>{if(d&&e.size>d){let t=(d/(1024*1024)).toFixed(1);return n.push(`"${e.name}" exceeds max size (${t} MB)`),!1}return!0});if(C(n),r.length!==0){ee(!0);try{let e=(await Promise.all(r.map(async e=>{try{let t=await w(e,{onProgress:t=>E(n=>({...n,[e.name]:t}))});return{name:t.name,original_name:e.name,size:t.size,mime_type:t.mimeType,url:t.url}}catch(t){return n.push(`Failed to upload "${e.name}": ${t.message}`),C([...n]),null}}))).filter(Boolean);if(e.length===0)return;t(c?[...O,...e]:e[0])}finally{ee(!1),E({})}}},[O,c,t,d,w]),A=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),x(!0)},[]),te=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),x(!1)},[]),j=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),x(!1);let t=Array.from(e.dataTransfer.files);if(l){let e=l.split(`,`).map(e=>e.trim().toLowerCase());k(t.filter(t=>{let n=t.name.split(`.`),r=n.length>1?`.`+n.pop()?.toLowerCase():``;return e.some(e=>e===t.type||r&&e===r||e.endsWith(`/*`)&&t.type.startsWith(e.replace(`/*`,`/`)))}))}else k(t)},[l,k]);if(r)return e?(0,h.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:(Array.isArray(e)?e:[e]).map((e,t)=>(0,h.jsx)(`span`,{className:`text-sm truncate max-w-xs`,children:e.name||e.original_name||`File`},t))}):(0,h.jsx)(f.EmptyValue,{});let M=e=>{k(Array.from(e.target.files||[]))},N=e=>{if(c){let n=O.filter((t,n)=>n!==e);t(n.length>0?n:null)}else t(null)},P=e=>(e.mime_type||``).startsWith(`image/`);return(0,h.jsxs)(`div`,{className:i.className,children:[(0,h.jsx)(`input`,{ref:a,type:`file`,multiple:c,accept:l,onChange:M,className:`hidden`}),y&&(0,h.jsx)(`input`,{ref:o,type:`file`,accept:`image/*`,capture:y,onChange:M,className:`hidden`,"aria-label":`Camera capture`,"data-testid":`file-field-camera-input`}),(0,h.jsxs)(`div`,{className:`space-y-2`,children:[(0,h.jsxs)(`div`,{onDragOver:A,onDragLeave:te,onDrop:j,onClick:()=>a.current?.click(),className:`
2
2
  flex flex-col items-center justify-center gap-2 p-6
3
3
  border-2 border-dashed rounded-lg cursor-pointer
4
4
  transition-colors duration-200
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@object-ui/fields",
3
- "version": "6.0.2",
3
+ "version": "6.0.4",
4
4
  "description": "Field renderers and registry for Object UI",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -27,12 +27,12 @@
27
27
  "clsx": "^2.1.1",
28
28
  "lucide-react": "^1.16.0",
29
29
  "tailwind-merge": "^3.6.0",
30
- "@object-ui/components": "6.0.2",
31
- "@object-ui/core": "6.0.2",
32
- "@object-ui/i18n": "6.0.2",
33
- "@object-ui/providers": "6.0.2",
34
- "@object-ui/react": "6.0.2",
35
- "@object-ui/types": "6.0.2"
30
+ "@object-ui/components": "6.0.4",
31
+ "@object-ui/core": "6.0.4",
32
+ "@object-ui/i18n": "6.0.4",
33
+ "@object-ui/react": "6.0.4",
34
+ "@object-ui/types": "6.0.4",
35
+ "@object-ui/providers": "6.0.4"
36
36
  },
37
37
  "peerDependencies": {
38
38
  "react": "^18.0.0 || ^19.0.0",
@@ -43,7 +43,7 @@
43
43
  "@types/react-dom": "19.2.3",
44
44
  "@vitejs/plugin-react": "^6.0.2",
45
45
  "typescript": "^6.0.3",
46
- "vite": "^8.0.13",
46
+ "vite": "^8.0.14",
47
47
  "vite-plugin-dts": "^5.0.0"
48
48
  },
49
49
  "publishConfig": {