@object-ui/fields 15.0.0 → 16.0.0

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,26 @@
1
1
  # @object-ui/fields
2
2
 
3
+ ## 16.0.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [d3e19ed]
8
+ - Updated dependencies [59d4fa9]
9
+ - Updated dependencies [4c7c47f]
10
+ - Updated dependencies [210806a]
11
+ - Updated dependencies [b4ef588]
12
+ - Updated dependencies [ca0f5f0]
13
+ - Updated dependencies [5534535]
14
+ - Updated dependencies [9b8f978]
15
+ - Updated dependencies [195a651]
16
+ - Updated dependencies [33b4995]
17
+ - @object-ui/react@16.0.0
18
+ - @object-ui/components@16.0.0
19
+ - @object-ui/types@16.0.0
20
+ - @object-ui/i18n@16.0.0
21
+ - @object-ui/core@16.0.0
22
+ - @object-ui/providers@16.0.0
23
+
3
24
  ## 15.0.0
4
25
 
5
26
  ### 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,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},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/i18n"),p=require("@object-ui/components"),m=require("lucide-react"),h=require("@object-ui/react"),g=require("react/jsx-runtime"),_=require("@object-ui/providers"),v=require("react-markdown");v=l(v,1);let y=require("remark-gfm");y=l(y,1);let b=require("rehype-sanitize");b=l(b,1);var x=s({TextField:()=>S});function S({value:e,onChange:t,field:n,readonly:r,...i}){let a=n||i.schema;if(r)return(0,g.jsx)(`span`,{className:`text-sm`,children:e||(0,g.jsx)(p.EmptyValue,{})});let o=a?.rows,{inputType:s,...c}=i;return o&&o>1?(0,g.jsx)(p.Textarea,{...c,value:e||``,onChange:e=>t(e.target.value),placeholder:a?.placeholder,disabled:r||c.disabled}):(0,g.jsx)(p.Input,{...c,type:a?.type===`password`?`password`:`text`,value:e||``,onChange:e=>t(e.target.value),placeholder:a?.placeholder,disabled:r||c.disabled})}var C=o((()=>{})),w=s({NumberField:()=>T});function T({value:e,onChange:t,field:n,readonly:r,...i}){if(r)return e==null?(0,g.jsx)(p.EmptyValue,{}):(0,g.jsx)(`span`,{className:`text-sm`,children:e});let a=n||i.schema,o=a?.scale,s=typeof a?.step==`number`?a.step:typeof o==`number`?10**-o:`any`,{inputType:c,...l}=i;return(0,g.jsx)(p.Input,{...l,type:`number`,value:e??``,onChange:e=>{let n=e.target.value;t(n===``?null:Number(n))},placeholder:a?.placeholder,disabled:r||l.disabled,min:typeof a?.min==`number`?a.min:void 0,max:typeof a?.max==`number`?a.max:void 0,step:s})}var E=o((()=>{})),ee=s({BooleanField:()=>D});function D({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,g.jsx)(`span`,{className:`text-sm`,children:e?`Yes`:`No`});let{inputType:d,...f}=i;return o===`checkbox`?(0,g.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,g.jsx)(p.Checkbox,{...f,id:c,checked:!!e,onCheckedChange:e=>t(!!e),disabled:r||f.disabled}),(0,g.jsx)(p.Label,{htmlFor:c,className:`sr-only`,children:l})]}):(0,g.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,g.jsx)(p.Switch,{...f,id:c,checked:!!e,onCheckedChange:t,disabled:r||f.disabled}),(0,g.jsx)(p.Label,{htmlFor:c,className:`sr-only`,children:l})]})}var O=o((()=>{})),k,te,A=o((()=>{k={"common.selectOption":`Select an option`,"common.select":`Select...`,"common.search":`Search`,"common.loading":`Loading...`,"common.noResults":`No results found`,"common.cancel":`Cancel`,"common.confirm":`Confirm`,"table.selected":`{{count}} selected`,"table.search":`Search...`,"lookup.loading":`Loading…`,"lookup.noOptions":`No options found`,"lookup.noRecords":`No records found`,"lookup.recentlyUsed":`Recently used`,"lookup.allResults":`All results`,"lookup.createNew":`Create new`,"lookup.createNamed":`Create new "{{name}}"`,"lookup.showingResults":`Showing {{shown}} of {{total}} results`,"lookup.showAllResults":`Show all results ({{count}})`,"lookup.selectedBadge":`Selected`,"lookup.browseAll":`Browse all records`,"lookup.remove":`Remove {{label}}`,"lookup.selectFirst":`Select {{fields}} first`,"lookup.selectRecord":`Select record`,"lookup.recordCount":`{{count}} records`,"lookup.recordCountOne":`1 record`,"lookup.pageOf":`Page {{current}} of {{total}}`,"lookup.filters":`Filters`,"lookup.clear":`Clear`,"lookup.yes":`Yes`,"lookup.filterPlaceholder":`Filter {{label}}`,"lookup.prevPage":`Previous page`,"lookup.nextPage":`Next page`,"lookup.jumpToPage":`Jump to page`,"lookup.retry":`Retry`},te=(0,f.createSafeTranslation)(k,`common.selectOption`)})),ne=s({SelectField:()=>j});function j({value:e,onChange:t,field:n,readonly:r,schema:i,dependentValues:a,dependsOn:o,emptyHint:s,dataSource:c,...l}){let f=n||i,m=f?.options||[],{t:_}=te(),v=l.name||f?.name||l.id||``,y=(0,u.useContext)(h.SchemaRendererContext),b=(0,u.useMemo)(()=>a??y?.formValues??y?.data??{},[a,y?.formValues,y?.data]),x=(0,h.usePredicateScope)(),S=f?.dependsOn??o,C=(0,u.useMemo)(()=>(0,d.resolveDependsOnFields)(S),[S]),w=(0,u.useMemo)(()=>C.length>0&&(0,d.isOptionGroupGated)(S,b),[C,S,b]),T=(0,u.useMemo)(()=>w?[]:(0,d.resolveVisibleOptions)(m,b,x),[w,m,b,x]);if((0,u.useEffect)(()=>{r||e==null||e===``||(0,d.isValueStillOffered)(e,T)||t?.(void 0)},[T,w]),r){let t=m.find(t=>t.value===e)?.label||e;return t?(0,g.jsx)(`span`,{className:`text-sm`,children:t}):(0,g.jsx)(p.EmptyValue,{})}if(T.length===0){let e=w?`Select ${C.join(` / `)} first`:`No options available`;return(0,g.jsx)(`div`,{"data-testid":v?`select-empty-${v}`:void 0,className:`flex h-9 w-full items-center rounded-md border border-input bg-muted/30 px-3 py-2 text-sm text-muted-foreground`,children:e})}return(0,g.jsxs)(p.Select,{...l,value:e,onValueChange:t,disabled:r||l.disabled,children:[(0,g.jsx)(p.SelectTrigger,{className:l.className,id:l.id,"data-testid":v?`select-trigger-${v}`:void 0,children:(0,g.jsx)(p.SelectValue,{placeholder:f?.placeholder||_(`common.selectOption`)})}),(0,g.jsx)(p.SelectContent,{position:`popper`,children:T.map(e=>(0,g.jsx)(p.SelectItem,{value:e.value,"data-testid":`select-option-${e.value}`,children:e.label},e.value))})]})}var M=o((()=>{A()}));function N(e){if(!(e.disabled||e.readOnly))try{e.showPicker?.()}catch{}}var re=o((()=>{})),P=s({DateField:()=>F});function F({value:e,onChange:t,field:n,readonly:r,...i}){if(r)return e?(0,g.jsx)(`span`,{className:`text-sm`,children:new Date(e).toLocaleDateString()}):(0,g.jsx)(p.EmptyValue,{});let{inputType:a,...o}=i;return(0,g.jsx)(p.Input,{...o,type:`date`,value:e||``,onChange:e=>t(e.target.value),onClick:e=>{N(e.currentTarget),o.onClick?.(e)},disabled:r||o.disabled})}var ie=o((()=>{re()})),I=s({EmailField:()=>L});function L({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){let o=n||a.schema;if(r)return e?(0,g.jsx)(`a`,{href:`mailto:${e}`,className:`text-sm text-blue-600 hover:text-blue-800 hover:underline`,children:e}):(0,g.jsx)(p.EmptyValue,{});let{inputType:s,...c}=a;return(0,g.jsx)(p.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 R=o((()=>{})),z=s({PhoneField:()=>B});function B({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){let o=n||a.schema;if(r)return e?(0,g.jsx)(`a`,{href:`tel:${e}`,className:`text-sm text-blue-600 hover:text-blue-800 hover:underline`,children:e}):(0,g.jsx)(p.EmptyValue,{});let{inputType:s,...c}=a;return(0,g.jsx)(p.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 V=o((()=>{})),H=s({UrlField:()=>U});function U({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,g.jsx)(`a`,{href:e,target:`_blank`,rel:`noopener noreferrer`,className:`text-sm text-blue-600 hover:text-blue-800 hover:underline`,children:e}):(0,g.jsx)(`span`,{className:`text-sm`,children:e}):(0,g.jsx)(p.EmptyValue,{});let{inputType:s,...c}=a;return(0,g.jsx)(p.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 W=o((()=>{})),G=o((()=>{})),K=s({CurrencyField:()=>q});function ae(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 q({value:e,onChange:t,field:n,readonly:r,errorMessage:i,className:a,...o}){let s=n||o.schema,{currency:c}=(0,f.useLocalization)(),l=(0,f.resolveFieldCurrency)(s,c),u=s?.precision??2;if(r)return e==null?(0,g.jsx)(p.EmptyValue,{}):(0,g.jsx)(`span`,{className:`text-sm font-medium tabular-nums`,children:ae(Number(e),l,u)});let d=e=>{let n=parseFloat(e.target.value);isNaN(n)||t(parseFloat(n.toFixed(u)))},m=l?l===`USD`?`$`:l:``;return(0,g.jsxs)(`div`,{className:`relative`,children:[m&&(0,g.jsx)(`span`,{className:`absolute left-3 top-1/2 -translate-y-1/2 text-sm text-gray-500`,children:m}),(0,g.jsx)(p.Input,{...o,type:`number`,value:e??``,onChange:e=>{t(e.target.value===``?null:parseFloat(e.target.value))},onBlur:d,placeholder:s?.placeholder||`0.00`,disabled:r||o.disabled,className:`${m?`pl-8`:``} ${a||``}`,min:typeof s?.min==`number`?s.min:void 0,max:typeof s?.max==`number`?s.max:void 0,step:(10**-u).toFixed(u),"aria-invalid":!!i})]})}var oe=o((()=>{G()})),se=s({TextAreaField:()=>J});function J({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){if(r)return(0,g.jsx)(`div`,{className:`text-sm whitespace-pre-wrap`,children:e||(0,g.jsx)(p.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,f]=(0,u.useState)(!1),[h,_]=(0,u.useState)(e??``),v=()=>{_(e??``),f(!0)},y=()=>f(!1),b=()=>{t(h),f(!1)},{inputType:x,mobileFullscreen:S,...C}=a;return(0,g.jsxs)(`div`,{className:`relative`,children:[(0,g.jsx)(p.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,g.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,g.jsx)(m.Maximize2,{className:`size-3.5`})}),c&&(0,g.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,g.jsx)(p.Dialog,{open:d,onOpenChange:f,children:(0,g.jsxs)(p.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,g.jsx)(p.DialogHeader,{className:`p-4 border-b`,children:(0,g.jsx)(p.DialogTitle,{className:`text-base`,children:o?.label??`Edit text`})}),(0,g.jsx)(`div`,{className:`flex-1 min-h-0 p-4`,children:(0,g.jsx)(p.Textarea,{autoFocus:!0,value:h,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,g.jsxs)(p.DialogFooter,{className:`p-3 border-t flex-row justify-between sm:justify-end gap-2`,children:[c&&(0,g.jsxs)(`span`,{className:`text-xs text-muted-foreground self-center`,children:[h.length,`/`,c]}),(0,g.jsxs)(`div`,{className:`flex gap-2 ml-auto`,children:[(0,g.jsxs)(p.Button,{type:`button`,variant:`ghost`,onClick:y,children:[(0,g.jsx)(m.X,{className:`size-4 mr-1`}),` Cancel`]}),(0,g.jsxs)(p.Button,{type:`button`,onClick:b,"data-testid":`textarea-fullscreen-save`,children:[(0,g.jsx)(m.Check,{className:`size-4 mr-1`}),` Done`]})]})]})]})})]})}var ce=o((()=>{})),Y=s({RichTextField:()=>X});function X({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){let{t:o}=(0,h.useObjectTranslation)();if(r)return(0,g.jsx)(`div`,{className:`text-sm prose prose-sm max-w-none`,children:e||(0,g.jsx)(p.EmptyValue,{})});let s=n||a.schema,c=s?.rows||8,l=s?.format||`markdown`;return(0,g.jsxs)(`div`,{className:`space-y-2`,children:[(0,g.jsxs)(`div`,{className:`flex items-center justify-between text-xs text-gray-500`,children:[(0,g.jsx)(`span`,{children:o(`fields.richText.format`,{format:l,defaultValue:`Format: ${l}`})}),(0,g.jsx)(`span`,{className:`italic`,children:o(`fields.richText.basicEditorHint`,{defaultValue:`Rich text editor (basic)`})})]}),(0,g.jsx)(p.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 le=o((()=>{}));function ue(e){let{dataSource:t,objectName:n,enabled:r=!0,pageSize:i=50,paginate:a=!1,filter:o,expand:s,searchFields:c,debounceMs:l=300}=e,[d,f]=(0,u.useState)([]),[p,m]=(0,u.useState)(!1),[h,g]=(0,u.useState)(null),[_,v]=(0,u.useState)(0),[y,b]=(0,u.useState)(1),[x,S]=(0,u.useState)(``),[C,w]=(0,u.useState)(null),T=(0,u.useRef)(null),E=(0,u.useMemo)(()=>o&&Object.keys(o).length?JSON.stringify(o):``,[o]),ee=(0,u.useMemo)(()=>s?.length?s.join(`,`):``,[s]),D=(0,u.useMemo)(()=>c?.length?c.join(`,`):``,[c]),O=!!r&&!!t&&typeof t.find==`function`&&!!n,k=(0,u.useCallback)(async(e,r,l)=>{if(!(!O||!t||!n)){m(!0),g(null);try{let u={$top:i};a&&(u.$skip=(r-1)*i),e&&e.trim()&&(u.$search=e.trim()),c&&c.length>0&&(u.$searchFields=c),l&&(u.$orderby={[l.field]:l.direction}),o&&Object.keys(o).length>0&&(u.$filter=o),s&&s.length>0&&(u.$expand=s);let d=await t.find(n,u),p=d?.data??d??[];f(p),v(d?.total??p.length)}catch(e){g(e instanceof Error?e.message:String(e)),f([])}finally{m(!1)}}},[O,t,n,i,a,E,ee,D]);(0,u.useEffect)(()=>{O&&k(x,y,C)},[O,y,C,k]),(0,u.useEffect)(()=>{r||(f([]),g(null),S(``),b(1),w(null))},[r]),(0,u.useEffect)(()=>()=>{T.current&&clearTimeout(T.current)},[]);let te=(0,u.useCallback)(e=>{S(e),b(1),T.current&&clearTimeout(T.current),T.current=setTimeout(()=>{k(e,1,C)},l)},[k,C,l]),A=(0,u.useCallback)(e=>{b(e)},[]),ne=(0,u.useCallback)(e=>{w(t=>t&&t.field===e?{field:e,direction:t.direction===`asc`?`desc`:`asc`}:{field:e,direction:`asc`}),b(1)},[]),j=(0,u.useCallback)(e=>{w(e),b(1)},[]),M=(0,u.useCallback)(()=>{T.current&&clearTimeout(T.current),f([]),g(null),S(``),b(1),w(null)},[]),N=(0,u.useCallback)(()=>{k(x,y,C)},[k,x,y,C]);return{records:d,loading:p,error:h,total:_,totalPages:Math.max(1,Math.ceil(_/Math.max(1,i))),page:y,search:x,sort:C,setPage:A,setSearch:te,toggleSort:ne,setSort:j,reset:M,refetch:N}}var de=o((()=>{}));function fe(e){return typeof e==`string`?{field:e}:e}function pe(e){return e.replace(/_/g,` `).replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/\b\w/g,e=>e.toUpperCase())}function me(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 he(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 ge({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=_e,value:f,onSelect:h,onSelectRecords:_,lookupFilters:v,baseFilter:y,cellRenderer:b,filterColumns:x,renderFilterBar:S,renderGrid:C}){let{t:w}=te(),[T,E]=(0,u.useState)(new Set),ee=(0,u.useRef)(new Map),[D,O]=(0,u.useState)(-1),k=(0,u.useRef)(null),[A,ne]=(0,u.useState)(!1),[j,M]=(0,u.useState)({}),[N,re]=(0,u.useState)({}),P=(0,u.useRef)(null),[F,ie]=(0,u.useState)(``),I=(0,u.useMemo)(()=>o&&o.length>0?o.map(fe):[{field:s,label:pe(s)}],[o,s]),L=(0,u.useMemo)(()=>{if(x&&x.length>0)return x;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:pe(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}})}:{}}})},[x,v]),R=ue({dataSource:i,objectName:a,enabled:e,pageSize:d,paginate:!0,filter:(0,u.useMemo)(()=>{let e=v?.length?me(v):{},t=L?.length?he(j,L):{},n={...e,...t,...y??{}};return Object.keys(n).length>0?n:void 0},[v,L,j,y])}),{records:z,loading:B,error:V}=R,H=R.total,U=R.totalPages,W=R.search,G=R.page,K=R.sort?.field??null,ae=R.sort?.direction??`asc`,q=R.setPage,oe=R.toggleSort,se=R.setSearch;(0,u.useEffect)(()=>{e||(O(-1),ne(!1),M({}),re({}),ie(``),E(new Set(r&&Array.isArray(f)?f:[])),ee.current.clear())},[e]),(0,u.useEffect)(()=>{e&&r&&E(new Set(Array.isArray(f)?f:[]))},[e,r,f]),(0,u.useEffect)(()=>{O(-1)},[z]);let J=(0,u.useCallback)(e=>e[l]??e.id??e._id,[l]),ce=(0,u.useCallback)(e=>{let t=J(e);return r?T.has(t):f===t},[r,f,T,J]),Y=(0,u.useCallback)(e=>{let n=J(e);r?E(t=>{let r=new Set(t);return r.has(n)?(r.delete(n),ee.current.delete(n)):(r.add(n),ee.current.set(n,e)),r}):(h(n),_?.([e]),t(!1))},[r,J,h,_,t]),X=(0,u.useCallback)(()=>{let e=Array.from(T);h(e);let n=e.map(e=>ee.current.get(e)).filter(Boolean);_?.(n),t(!1)},[T,h,_,t]),le=(0,u.useCallback)(()=>{q(Math.max(1,G-1))},[q,G]),de=(0,u.useCallback)(()=>{q(Math.min(U,G+1))},[q,G,U]),ge=(0,u.useCallback)(e=>{if(e.key!==`Enter`)return;let t=parseInt(F,10);!isNaN(t)&&t>=1&&t<=U&&q(t),ie(``)},[F,U]),be=(0,u.useCallback)(e=>{z.length!==0&&(e.key===`ArrowDown`?(e.preventDefault(),O(e=>Math.min(e+1,z.length-1))):e.key===`ArrowUp`?(e.preventDefault(),O(e=>Math.max(e-1,0))):(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),D>=0&&D<z.length&&Y(z[D])))},[z,D,Y]);(0,u.useEffect)(()=>{if(D>=0&&k.current){let e=k.current.querySelector(`[data-row-index="${D}"]`);e&&typeof e.scrollIntoView==`function`&&e.scrollIntoView({block:`nearest`})}},[D]);let xe=(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&&b){let e=b(t.type);if(e)return(0,g.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)},[b,c,s]),Se=(0,u.useCallback)(e=>K===e?ae===`asc`?(0,g.jsx)(m.ArrowUp,{className:`ml-1 size-3`}):(0,g.jsx)(m.ArrowDown,{className:`ml-1 size-3`}):(0,g.jsx)(m.ArrowUpDown,{className:`ml-1 size-3 opacity-40`}),[K,ae]),Ce=(0,u.useCallback)((e,t,n)=>{e.preventDefault(),e.stopPropagation(),P.current={field:t,startX:e.clientX,startWidth:n};let r=e=>{if(!P.current)return;let t=e.clientX-P.current.startX,n=Math.max(ve,P.current.startWidth+t);re(e=>({...e,[P.current.field]:n}))},i=()=>{P.current=null,document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[]),we=(0,u.useCallback)((e,t)=>{M(n=>({...n,[e]:t})),q(1)},[]),Z=(0,u.useCallback)(()=>{M({}),q(1)},[]),Q=(0,u.useMemo)(()=>Object.values(j).filter(e=>e!=null&&e!==``).length,[j]),Te=(0,u.useCallback)(e=>{let t=j[e.field],n=e.label||pe(e.field);switch(e.type){case`select`:return(0,g.jsxs)(`div`,{className:`space-y-1`,children:[(0,g.jsx)(p.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,g.jsxs)(p.Select,{value:t==null?``:String(t),onValueChange:t=>we(e.field,t),children:[(0,g.jsx)(p.SelectTrigger,{className:`h-8 text-xs`,children:(0,g.jsx)(p.SelectValue,{placeholder:w(`lookup.filterPlaceholder`,{label:n})})}),(0,g.jsx)(p.SelectContent,{children:e.options?.map(e=>(0,g.jsx)(p.SelectItem,{value:String(e.value),children:e.label},String(e.value)))})]})]});case`number`:return(0,g.jsxs)(`div`,{className:`space-y-1`,children:[(0,g.jsx)(p.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,g.jsx)(p.Input,{type:`number`,className:`h-8 text-xs`,value:t??``,placeholder:w(`lookup.filterPlaceholder`,{label:n}),onChange:t=>{let n=t.target.value;we(e.field,n===``?``:Number(n))}})]});case`date`:return(0,g.jsxs)(`div`,{className:`space-y-1`,children:[(0,g.jsx)(p.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,g.jsx)(p.Input,{type:`date`,className:`h-8 text-xs`,value:t??``,onChange:t=>we(e.field,t.target.value)})]});case`boolean`:return(0,g.jsxs)(`div`,{className:`space-y-1`,children:[(0,g.jsx)(p.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,g.jsxs)(`div`,{className:`flex items-center gap-2 h-8`,children:[(0,g.jsx)(p.Checkbox,{checked:!!t,onCheckedChange:t=>we(e.field,!!t)}),(0,g.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:w(`lookup.yes`)})]})]});default:return(0,g.jsxs)(`div`,{className:`space-y-1`,children:[(0,g.jsx)(p.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,g.jsx)(p.Input,{className:`h-8 text-xs`,value:t??``,placeholder:w(`lookup.filterPlaceholder`,{label:n}),onChange:t=>we(e.field,t.target.value)})]})}},[j,we]),Ee=(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,g.jsx)(p.Dialog,{open:e,onOpenChange:t,children:(0,g.jsxs)(p.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,g.jsx)(p.DialogHeader,{children:(0,g.jsxs)(p.DialogTitle,{children:[n,r&&(0,g.jsx)(`span`,{className:`sr-only`,children:` (multiple selection)`})]})}),(0,g.jsxs)(`div`,{className:`relative rounded-md border bg-muted/30 mb-3`,children:[(0,g.jsx)(m.Search,{className:`absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground`}),(0,g.jsx)(p.Input,{placeholder:w(`table.search`),value:W,onChange:e=>se(e.target.value),className:`pl-9 border-0 bg-transparent shadow-none focus-visible:ring-0`,"data-testid":`record-picker-search`}),B&&(0,g.jsx)(m.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`})]}),L&&L.length>0&&(0,g.jsx)(`div`,{className:`py-2`,children:S?(0,g.jsx)(`div`,{"data-testid":`record-picker-filter-bar`,children:S({filterColumns:L,values:j,onChange:we,onClear:Z,activeCount:Q})}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-2`,"data-testid":`record-picker-filter-bar`,children:[(0,g.jsxs)(p.Button,{type:`button`,variant:Q>0?`secondary`:`outline`,size:`sm`,className:`gap-1.5 shrink-0`,onClick:()=>ne(e=>!e),children:[(0,g.jsx)(m.SlidersHorizontal,{className:`size-3.5`}),w(`lookup.filters`),Q>0&&(0,g.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:Q})]}),Q>0&&(0,g.jsxs)(p.Button,{type:`button`,variant:`ghost`,size:`sm`,className:`gap-1 text-xs`,onClick:Z,children:[(0,g.jsx)(m.X,{className:`size-3`}),w(`lookup.clear`)]})]}),A&&(0,g.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:L.map(e=>(0,g.jsx)(`div`,{children:Te(e)},e.field))})]})}),V&&(0,g.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-4`,role:`alert`,children:[(0,g.jsx)(m.AlertCircle,{className:`size-5 text-destructive`}),(0,g.jsx)(`p`,{className:`text-sm text-destructive`,children:V}),(0,g.jsx)(p.Button,{variant:`outline`,size:`sm`,onClick:()=>R.refetch(),type:`button`,children:w(`lookup.retry`)})]}),C?(0,g.jsx)(`div`,{className:`flex-1 min-h-0`,"data-testid":`record-picker-grid-slot`,children:C({columns:I,records:z,loading:B,totalCount:H,currentPage:G,pageSize:d,sortField:K,sortDirection:ae,onSort:oe,onPageChange:q,onRowClick:Y,isSelected:ce,multiple:r,idField:l,cellRenderer:b})}):(0,g.jsxs)(g.Fragment,{children:[B&&z.length===0&&!V&&(0,g.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,g.jsxs)(p.Table,{children:[(0,g.jsx)(p.TableHeader,{children:(0,g.jsxs)(p.TableRow,{className:`bg-muted/40`,children:[r&&(0,g.jsx)(p.TableHead,{className:`w-10`}),I.map(e=>(0,g.jsx)(p.TableHead,{children:(0,g.jsx)(p.Skeleton,{className:`h-4 w-20`})},e.field))]})}),(0,g.jsx)(p.TableBody,{children:Array.from({length:ye},(e,t)=>(0,g.jsxs)(p.TableRow,{children:[r&&(0,g.jsx)(p.TableCell,{className:`w-10`,children:(0,g.jsx)(p.Skeleton,{className:`size-4 rounded`})}),I.map(e=>(0,g.jsx)(p.TableCell,{children:(0,g.jsx)(p.Skeleton,{className:`h-4 w-full`})},e.field))]},t))})]})}),!B&&!V&&z.length===0&&(0,g.jsx)(`div`,{className:`py-8 text-center`,children:(0,g.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:w(`lookup.noRecords`)})}),!V&&z.length>0&&(0,g.jsxs)(`div`,{className:`relative flex-1 overflow-auto min-h-0 border rounded-md`,"aria-busy":B||void 0,"data-state":B?`loading`:`idle`,tabIndex:0,onKeyDown:be,role:`grid`,"aria-label":`Records`,children:[B&&(0,g.jsx)(`div`,{className:`absolute inset-0 z-10 flex items-center justify-center bg-background/60`,"data-testid":`record-picker-loading-overlay`,children:(0,g.jsx)(m.Loader2,{className:`size-6 animate-spin text-muted-foreground`})}),(0,g.jsxs)(p.Table,{style:Object.keys(N).length>0?{tableLayout:`fixed`}:void 0,children:[(0,g.jsx)(p.TableHeader,{className:`sticky top-0 z-[5] bg-muted/50 [&_tr]:border-b`,"data-testid":`record-picker-sticky-header`,children:(0,g.jsxs)(p.TableRow,{children:[r&&(0,g.jsx)(p.TableHead,{className:`w-10`}),I.map(e=>{let t=N[e.field];return(0,g.jsxs)(p.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:()=>oe(e.field),"aria-sort":K===e.field?ae===`asc`?`ascending`:`descending`:`none`,children:[(0,g.jsxs)(`span`,{className:`inline-flex items-center`,children:[e.label||pe(e.field),Se(e.field)]}),(0,g.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();Ce(t,e.field,n?.width??100)},onClick:e=>e.stopPropagation(),"data-testid":`resize-handle-${e.field}`})]},e.field)})]})}),(0,g.jsx)(p.TableBody,{ref:k,children:z.map((e,t)=>{let n=J(e),i=ce(e),a=t===D;return(0,g.jsxs)(p.TableRow,{"data-row-index":t,className:(0,p.cn)(`cursor-pointer transition-colors`,Ee(i,t),a&&`ring-2 ring-primary ring-inset`),onClick:()=>Y(e),"data-testid":`record-row-${n}`,"aria-selected":i,children:[r&&(0,g.jsx)(p.TableCell,{className:`w-10`,children:i&&(0,g.jsx)(m.Check,{className:`size-4 text-primary`})}),I.map(t=>(0,g.jsx)(p.TableCell,{className:`py-2.5`,children:xe(e,t)},t.field))]},n??t)})})]})]}),!V&&H>0&&(0,g.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,g.jsxs)(`span`,{children:[H===1?w(`lookup.recordCountOne`):w(`lookup.recordCount`,{count:H}),U>1&&` · ${w(`lookup.pageOf`,{current:G,total:U})}`]}),U>1&&(0,g.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,g.jsx)(p.Button,{variant:`outline`,size:`icon`,className:`size-7`,onClick:le,disabled:G<=1,type:`button`,"aria-label":w(`lookup.prevPage`),children:(0,g.jsx)(m.ChevronLeft,{className:`size-4`})}),(0,g.jsx)(p.Input,{className:`h-7 w-12 text-center text-xs px-1`,placeholder:String(G),value:F,onChange:e=>ie(e.target.value),onKeyDown:ge,"aria-label":w(`lookup.jumpToPage`),"data-testid":`record-picker-page-jump`}),(0,g.jsx)(p.Button,{variant:`outline`,size:`icon`,className:`size-7`,onClick:de,disabled:G>=U,type:`button`,"aria-label":w(`lookup.nextPage`),children:(0,g.jsx)(m.ChevronRight,{className:`size-4`})})]})]})]}),r&&(0,g.jsx)(p.DialogFooter,{children:(0,g.jsxs)(`div`,{className:`flex items-center gap-2 w-full justify-between`,children:[(0,g.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:w(`table.selected`,{count:T.size})}),(0,g.jsxs)(`div`,{className:`flex gap-2`,children:[(0,g.jsx)(p.Button,{variant:`outline`,type:`button`,onClick:()=>t(!1),children:w(`common.cancel`)}),(0,g.jsx)(p.Button,{type:`button`,onClick:X,children:w(`common.confirm`)})]})]})})]})})}var _e,ve,ye,be=o((()=>{A(),de(),_e=10,ve=60,ye=5}));function xe(e,t){if(!(!e||!t))return t.includes(`.`)?t.split(`.`).reduce((e,t)=>e==null?e:e[t],e):e[t]}function Se(e,t=`name`){return e==null?``:String(typeof e==`object`?e[t]??e.name??e.username??e.label??``:e)}function Ce(e){let t=(e||``).trim();if(!t)return`?`;let n=t.split(/\s+/).filter(Boolean);if(n.length>=2)return(n[0][0]+n[n.length-1][0]).toUpperCase();let r=n[0];return/[㐀-鿿]/.test(r)?r.length<=2?r:r.slice(-2):r.slice(0,2).toUpperCase()}function we(e,t){return!e||!t||t.length===0?``:t.map(t=>xe(e,t)).filter(e=>e!=null&&e!==``).map(e=>String(e)).join(` · `)}function Z(e,t=`image`){let n=e?xe(e,t):void 0;return n?String(n):void 0}function Q(e,t=`id`){return!e||typeof e!=`object`?e:e[t]??e.id??e._id}function Te(e,t){let n=e??``,r=(t??``).trim().toLowerCase();if(!r||!n)return[];let i=n.toLowerCase(),a=[],o=0;for(;;){let e=i.indexOf(r,o);if(e===-1)break;a.push([e,e+r.length]),o=e+r.length}return a}var Ee=o((()=>{}));function De({text:e,query:t}){let n=t?Te(e,t):[];if(n.length===0)return(0,g.jsx)(g.Fragment,{children:e});let r=[],i=0;return n.forEach(([t,n],a)=>{t>i&&r.push(e.slice(i,t)),r.push((0,g.jsx)(`mark`,{className:`rounded-[2px] bg-primary/20 px-px text-inherit`,children:e.slice(t,n)},a)),i=n}),i<e.length&&r.push(e.slice(i)),(0,g.jsx)(g.Fragment,{children:r})}function Oe({record:e,displayField:t=`name`,subtitleFields:n,avatarField:r=`image`,selected:i=!1,active:a=!1,highlightQuery:o,onSelect:s,className:c}){let l=Se(e,t),d=we(e,n),f=Z(e,r),h=Ce(l),_=(0,u.useRef)(null);return(0,u.useEffect)(()=>{a&&_.current?.scrollIntoView?.({block:`nearest`})},[a]),(0,g.jsxs)(`button`,{ref:_,type:`button`,tabIndex:-1,onClick:()=>s?.(e),"aria-pressed":i,"data-testid":`person-row`,"data-active":a||void 0,className:(0,p.cn)(`flex w-full items-center gap-3 rounded-md px-2 py-1.5 text-left transition-colors`,`hover:bg-accent focus-visible:outline-none`,i&&`bg-accent`,a&&`bg-accent ring-1 ring-inset ring-ring`,c),children:[(0,g.jsxs)(p.Avatar,{className:`size-9 shrink-0`,children:[f&&(0,g.jsx)(p.AvatarImage,{src:f,alt:l}),(0,g.jsx)(p.AvatarFallback,{className:`text-xs`,children:h})]}),(0,g.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,g.jsx)(`div`,{className:`truncate text-sm font-medium`,children:l?(0,g.jsx)(De,{text:l,query:o}):`—`}),d&&(0,g.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:(0,g.jsx)(De,{text:d,query:o})})]}),i&&(0,g.jsx)(m.Check,{className:`size-4 shrink-0 text-primary`,"aria-hidden":!0})]})}var ke=o((()=>{Ee()}));function Ae({records:e,onRemove:t,displayField:n=`name`,avatarField:r=`image`,idField:i=`id`,label:a,onClear:o,clearLabel:s,emptyText:c,className:l}){let u=!!a||!!o&&e.length>0;return(0,g.jsxs)(`div`,{className:(0,p.cn)(`flex flex-col gap-1.5`,l),"data-testid":`selection-tray`,children:[u&&(0,g.jsxs)(`div`,{className:`flex items-center justify-between`,children:[a&&(0,g.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:a}),o&&e.length>0&&(0,g.jsx)(`button`,{type:`button`,onClick:o,className:`text-xs text-muted-foreground transition-colors hover:text-foreground`,"data-testid":`selection-clear`,children:s??`Clear all`})]}),e.length===0?(0,g.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:c??``}):(0,g.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:e.map(e=>{let a=Q(e,i),o=Se(e,n),s=Z(e,r),c=Ce(o);return(0,g.jsxs)(`span`,{"data-testid":`selection-chip`,className:`inline-flex items-center gap-1.5 rounded-full border bg-background py-0.5 pl-0.5 pr-1.5 text-sm`,children:[(0,g.jsxs)(p.Avatar,{className:`size-6 shrink-0`,children:[s&&(0,g.jsx)(p.AvatarImage,{src:s,alt:o}),(0,g.jsx)(p.AvatarFallback,{className:`text-[10px]`,children:c})]}),(0,g.jsx)(`span`,{className:`max-w-[10rem] truncate`,children:o||`—`}),(0,g.jsx)(`button`,{type:`button`,onClick:()=>t(a),"aria-label":`Remove ${o}`,className:`rounded-full p-0.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground`,children:(0,g.jsx)(m.X,{className:`size-3.5`,"aria-hidden":!0})})]},String(a))})})]})}var je=o((()=>{Ee()}));function Me(){try{return typeof localStorage<`u`?localStorage:null}catch{return null}}function Ne(e){let t=Me();if(!e||!t)return[];try{let n=t.getItem(Fe+e);if(!n)return[];let r=JSON.parse(n);return Array.isArray(r)?r.slice(0,Ie):[]}catch{return[]}}function Pe(e,t){let n=Me();if(!(!e||t==null||t===``||!n))try{let r=[t,...Ne(e).filter(e=>e!==t)].slice(0,Ie);n.setItem(Fe+e,JSON.stringify(r))}catch{}}var Fe,Ie,Le=o((()=>{Fe=`objectui:lookup:recent:`,Ie=5}));function Re({open:e,onOpenChange:t,title:n,multiple:r=!1,dataSource:i,objectName:a,displayField:o=`name`,idField:s=`id`,subtitleFields:c,avatarField:l=`image`,expand:d,searchFields:f,pageSize:h=ze,lookupFilters:_,baseFilter:v,value:y,onSelect:b,onSelectRecords:x,inline:S=!1,trigger:C}){let{t:w}=te(),T=(0,p.useIsMobile)(),E=(0,u.useMemo)(()=>{let e={..._?.length?me(_):{},...v??{}};return Object.keys(e).length>0?e:void 0},[_,v]),ee=(0,u.useMemo)(()=>{if(d&&d.length)return d;let e=new Set;return(c??[]).forEach(t=>{t.includes(`.`)&&e.add(t.split(`.`)[0])}),e.size?Array.from(e):void 0},[d,c]),D=ue({dataSource:i,objectName:a,enabled:e,pageSize:h,filter:E,expand:ee,searchFields:f}),O=(0,u.useMemo)(()=>e?Ne(a):[],[e,a]),k=(0,u.useMemo)(()=>r?Array.isArray(y)?y:[]:y!=null&&y!==``?[y]:[],[r,y]),A=(0,u.useMemo)(()=>Array.from(new Set([...k,...O].map(e=>e))),[k,O]),ne=ue({dataSource:i,objectName:a,enabled:e&&A.length>0,pageSize:Math.max(1,A.length),filter:{[s]:{$in:A}},expand:ee}),j=(0,u.useMemo)(()=>{let e=new Map;for(let t of ne.records)e.set(String(Q(t,s)),t);return e},[ne.records,s]),[M,N]=(0,u.useState)([]),re=(0,u.useRef)(!1),P=(0,u.useRef)(!1);(0,u.useEffect)(()=>{e||(re.current=!1,P.current=!1,N([]))},[e]),(0,u.useEffect)(()=>{if(!e||re.current)return;if(k.length===0){re.current=!0;return}if(ne.loading){P.current=!0;return}if(!P.current)return;let t=k.map(e=>j.get(String(e))).filter(Boolean);N(t),re.current=!0},[e,k,ne.loading,j]);let F=(0,u.useMemo)(()=>new Set(M.map(e=>String(Q(e,s)))),[M,s]),ie=(0,u.useCallback)((e,n)=>{b(r?e:e[0]??null),x?.(n),e.forEach(e=>Pe(a,e)),t(!1)},[r,a,b,x,t]),I=(0,u.useCallback)(e=>{b(e.map(e=>Q(e,s))),x?.(e)},[b,x,s]),L=(0,u.useCallback)(e=>{let t=Q(e,s);if(!r){ie([t],[e]);return}let n=String(t),i=M.some(e=>String(Q(e,s))===n),o=i?M.filter(e=>String(Q(e,s))!==n):[...M,e];N(o),S&&(i||Pe(a,t),I(o))},[r,s,ie,M,S,a,I]),R=(0,u.useCallback)(e=>{let t=String(e),n=M.filter(e=>String(Q(e,s))!==t);N(n),S&&I(n)},[s,M,S,I]),z=(0,u.useCallback)(()=>{ie(M.map(e=>Q(e,s)),M)},[ie,M,s]),B=D.search.trim().length>0,V=(0,u.useMemo)(()=>B?[]:O.map(e=>j.get(String(e))).filter(Boolean),[B,O,j]),H=(0,u.useMemo)(()=>{if(B)return D.records;let e=new Set(O.map(String));return D.records.filter(t=>!e.has(String(Q(t,s))))},[B,D.records,O,s]),U=(0,u.useMemo)(()=>[...V,...H],[V,H]),[W,G]=(0,u.useState)(-1),K=(0,u.useMemo)(()=>D.records.map(e=>String(Q(e,s))).join(`\0`),[D.records,s]);(0,u.useEffect)(()=>{G(-1)},[D.search,K]),(0,u.useEffect)(()=>{G(e=>e>=U.length?U.length-1:e)},[U.length]);let ae=(0,u.useCallback)(e=>{e.key===`ArrowDown`?(e.preventDefault(),G(e=>U.length?Math.min(U.length-1,e+1):-1)):e.key===`ArrowUp`?(e.preventDefault(),G(e=>Math.max(0,e-1))):e.key===`Enter`?W>=0&&W<U.length&&(e.preventDefault(),L(U[W])):e.key===`Backspace`&&D.search.length===0&&r&&M.length>0&&R(Q(M[M.length-1],s))},[U,W,L,D.search,r,M,R,s]),q=D.loading&&!D.error&&D.records.length===0&&V.length===0,oe=D.loading&&!q,se=!D.loading&&!D.error&&H.length===0&&V.length===0,J=(e,t)=>{let n=Q(e,s);return(0,g.jsx)(Oe,{record:e,displayField:o,subtitleFields:c,avatarField:l,selected:F.has(String(n)),active:t===W,highlightQuery:D.search,onSelect:L},String(n))},ce=n||w(`lookup.selectRecord`),Y=(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(`div`,{className:`relative`,children:[(0,g.jsx)(m.Search,{className:`pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground`,"aria-hidden":!0}),(0,g.jsx)(p.Input,{autoFocus:!T,value:D.search,onChange:e=>D.setSearch(e.target.value),onKeyDown:ae,placeholder:w(`table.search`),className:`px-8`,role:`combobox`,"aria-expanded":!0,"aria-controls":`people-picker-list`,"data-testid":`people-picker-search`}),D.loading&&(0,g.jsx)(m.Loader2,{className:`pointer-events-none absolute right-2.5 top-1/2 size-4 -translate-y-1/2 animate-spin text-muted-foreground`,"aria-hidden":!0})]}),(0,g.jsx)(p.ScrollArea,{className:`min-h-0 flex-1`,"data-testid":`people-picker-list`,children:(0,g.jsx)(`div`,{id:`people-picker-list`,role:`listbox`,"aria-busy":D.loading,className:(0,p.cn)(`flex flex-col gap-0.5 pr-2 transition-opacity`,oe&&`opacity-70`),children:D.error?(0,g.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-8 text-center text-sm text-muted-foreground`,children:[(0,g.jsx)(m.AlertCircle,{className:`size-5 text-destructive`,"aria-hidden":!0}),(0,g.jsx)(`span`,{className:`max-w-xs`,children:D.error}),(0,g.jsx)(p.Button,{type:`button`,variant:`outline`,size:`sm`,onClick:D.refetch,children:w(`lookup.retry`)})]}):q?Array.from({length:Be}).map((e,t)=>(0,g.jsxs)(`div`,{className:`flex items-center gap-3 px-2 py-1.5`,children:[(0,g.jsx)(p.Skeleton,{className:`size-9 shrink-0 rounded-full`}),(0,g.jsxs)(`div`,{className:`flex-1 space-y-1.5`,children:[(0,g.jsx)(p.Skeleton,{className:`h-3 w-1/3`}),(0,g.jsx)(p.Skeleton,{className:`h-2.5 w-1/2`})]})]},t)):(0,g.jsxs)(g.Fragment,{children:[V.length>0&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`div`,{className:`px-2 py-1 text-xs font-medium text-muted-foreground`,children:w(`lookup.recentlyUsed`)}),V.map((e,t)=>J(e,t)),H.length>0&&(0,g.jsxs)(`div`,{className:`mt-1 flex items-center gap-1.5 px-2 py-1 text-xs font-medium text-muted-foreground`,children:[(0,g.jsx)(`span`,{children:w(`lookup.allResults`)}),(0,g.jsxs)(`span`,{className:`font-normal opacity-70`,children:[`· `,D.total]})]})]}),H.map((e,t)=>J(e,V.length+t)),se&&(0,g.jsx)(`div`,{className:`py-8 text-center text-sm text-muted-foreground`,children:w(`lookup.noRecords`)})]})})}),r&&!S&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(Ae,{records:M,onRemove:R,onClear:()=>N([]),clearLabel:w(`lookup.clear`),displayField:o,avatarField:l,idField:s,label:w(`table.selected`,{count:M.length}),className:(0,p.cn)(`border-t pt-3`)}),(0,g.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,g.jsx)(p.Button,{type:`button`,variant:`outline`,onClick:()=>t(!1),children:w(`common.cancel`)}),(0,g.jsx)(p.Button,{type:`button`,onClick:z,children:w(`common.confirm`)})]})]})]});return S?T?(0,g.jsxs)(p.Sheet,{open:e,onOpenChange:t,children:[(0,g.jsx)(p.SheetTrigger,{asChild:!0,children:C}),(0,g.jsxs)(p.SheetContent,{side:`bottom`,className:`flex h-[85vh] flex-col gap-3`,"data-testid":`people-picker-sheet`,children:[(0,g.jsx)(p.SheetHeader,{className:`text-left`,children:(0,g.jsx)(p.SheetTitle,{children:ce})}),Y]})]}):(0,g.jsxs)(p.Popover,{open:e,onOpenChange:t,children:[(0,g.jsx)(p.PopoverTrigger,{asChild:!0,children:C}),(0,g.jsx)(p.PopoverContent,{align:`start`,className:`flex max-h-[min(28rem,60vh)] w-[var(--radix-popover-trigger-width)] min-w-72 flex-col gap-3 p-3`,"data-testid":`people-picker-inline`,children:Y})]}):T?(0,g.jsx)(p.Sheet,{open:e,onOpenChange:t,children:(0,g.jsxs)(p.SheetContent,{side:`bottom`,className:`flex h-[85vh] flex-col gap-3`,"data-testid":`people-picker-sheet`,children:[(0,g.jsx)(p.SheetHeader,{className:`text-left`,children:(0,g.jsx)(p.SheetTitle,{children:ce})}),Y]})}):(0,g.jsx)(p.Dialog,{open:e,onOpenChange:t,children:(0,g.jsxs)(p.DialogContent,{className:`flex max-h-[80vh] flex-col gap-3 sm:max-w-lg`,"data-testid":`people-picker-dialog`,children:[(0,g.jsx)(p.DialogHeader,{children:(0,g.jsx)(p.DialogTitle,{children:ce})}),Y]})})}var ze,Be,Ve=o((()=>{de(),be(),Ee(),ke(),je(),Le(),A(),ze=25,Be=6}));function He(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function Ue(e,{displayField:t,max:n=4}){let r=e?.fields??{},i=e=>r[e]??{},a=e=>{let t=i(e);return{field:e,...t.label?{label:t.label}:{},...t.type?{type:t.type}:{}}};if(Object.keys(r).length===0)return[];let o=e=>!Array.isArray(e)||e.length===0?null:He([t,...e.filter(e=>typeof e==`string`&&e.length>0).filter(e=>e!==t)]).slice(0,n).map(a);return o(e?.highlightFields)||o(e?.displayFields)||He([t,...Object.keys(r).filter(e=>{if(e===t||We.has(e))return!1;let n=i(e);return!(n.hidden||n.type&&Ge.has(n.type))})]).slice(0,n).map(a)}var We,Ge,Ke=o((()=>{We=new Set([`id`,`_id`,`created`,`modified`,`created_at`,`updated_at`,`created_by`,`updated_by`,`modified_by`,`owner_id`,`organization_id`,`space`,`company_id`,`instance_state`,`locked`,`is_deleted`,`deleted`]),Ge=new Set([`json`,`object`,`grid`,`html`,`richtext`,`markdown`,`code`,`image`,`file`,`avatar`,`vector`,`location`,`geometry`,`textarea`,`secret`,`password`,`encrypted`])}));function qe(e){Ye=e}function Je(){return Ye}var Ye,Xe=o((()=>{})),Ze=s({LookupField:()=>rt});function Qe(e){return!!e&&!ot.test(e)&&!st.has(e)}function $e(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 et(e,t,n,r,i,a){let o=e[n]??e.id??e._id??e.externalId,s=i?$e(e,i):null,c;if(a){let t=(0,d.getRecordDisplayName)(a,e),n=e?.id??e?._id;t===`Untitled`||n!=null&&t===`Record #${n}`||(c=t)}let l=s??e[t]??c??e.label??e.name??e.full_name??e.title??e.subject??e.externalId??String(o),u=r?e[r]:void 0;return{value:o,label:String(l),description:u,...e}}function tt(e){if(typeof e!=`string`)return null;let t=e.trim();if(!t.startsWith(`{`)||!t.endsWith(`}`))return null;try{let e=JSON.parse(t);return e&&typeof e==`object`&&!Array.isArray(e)?e:null}catch{return null}}function nt(e){return{text:`text`,number:`number`,currency:`number`,percent:`number`,select:`select`,status:`select`,date:`date`,datetime:`date`,boolean:`boolean`}[e]}function rt({value:e,onChange:t,field:n,readonly:r,...i}){let[a,o]=(0,u.useState)(!1),{t:s}=te(),c=u.default.useId(),[l,d]=(0,u.useState)(null),[f,_]=(0,u.useState)([]),[v,y]=(0,u.useState)(-1),b=(0,u.useRef)(null),x=n||i.schema,S=x?.field,C=S&&typeof S==`object`&&(`reference_to`in S||`reference`in S||`type`in S)?S:x,w=C?.options||[],T=C?.multiple||!1,E=C?.display_field||C?.displayField||C?.reference_field||`name`,ee=C?.description_field??C?.descriptionField,D=C?.id_field||`id`,O=C?.reference_to||C?.reference,k=C?.allow_create??C?.allowCreate,A=k==null?Qe(O):!!k,ne=C?.lookup_columns??C?.lookupColumns,j=C?.lookup_page_size??C?.lookupPageSize,M=C?.lookup_filters??C?.lookupFilters,N=C?.picker,re=C?.subtitle,P=C?.avatar_field??C?.avatarField??`image`,F=(0,u.useMemo)(()=>{let e=C?.depends_on??C?.dependsOn;return e&&Array.isArray(e)?e.map(e=>typeof e==`string`?{field:e,param:e}:{field:e.field,param:e.param??e.field}):[]},[C?.depends_on,C?.dependsOn]),ie=i.dependentValues,I=(0,u.useContext)(at),L=I?.dataSource??null,R=i.dataSource??x?.dataSource??C?.dataSource??L,z=(0,u.useMemo)(()=>ie||(I?.formValues??I?.data??{}),[ie,I?.formValues,I?.data]),B=(0,u.useMemo)(()=>F.length!==0&&F.some(({field:e})=>{let t=z[e];return t==null||t===``||Array.isArray(t)&&t.length===0}),[F,z]),V=R!=null&&typeof R.find==`function`&&!!O,[H,U]=(0,u.useState)(null);(0,u.useEffect)(()=>{if(!R||!O)return;let e=R.getObjectSchema;if(typeof e!=`function`)return;let t=!0;return Promise.resolve(e.call(R,O)).then(e=>{t&&U(e)}).catch(()=>{}),()=>{t=!1}},[R,O]);let W=(0,u.useMemo)(()=>{let e=H?.titleFormat;return typeof e==`string`?e:e&&typeof e==`object`&&typeof e.source==`string`?e.source:null},[H]),G=(0,u.useMemo)(()=>{if(ne&&ne.length>0)return ne;let e=Ue(H,{displayField:E});return e.length>0?e:void 0},[ne,H,E]),K=(0,u.useMemo)(()=>{if(ee)return ee;let e=G?.find(e=>(typeof e==`string`?e:e.field)!==E);if(e)return typeof e==`string`?e:e.field},[ee,G,E]),ae=(0,u.useMemo)(()=>{if(!G)return;let e=[];for(let t of G)if(typeof t==`object`&&t.type){let n=nt(t.type);n&&e.push({field:t.field,label:t.label,type:n})}return e.length>0?e:void 0},[G]),q=i.onCreateNew??x?.onCreateNew,[oe,se]=(0,u.useState)(!1),J=(0,u.useMemo)(()=>{let e={};for(let{field:t,param:n}of F){let r=z[t];r==null||r===``||(e[n]=typeof r==`number`?r:String(r))}return Object.keys(e).length>0?e:void 0},[F,z]),ce=(0,u.useMemo)(()=>{let e={...M&&M.length>0?me(M):{},...J??{}};return Object.keys(e).length>0?e:void 0},[J,M]),Y=ue({dataSource:R,objectName:O,enabled:a&&V&&!B,pageSize:it,filter:ce}),X=Y.search,le=Y.loading,de=Y.total,fe=Y.error??l,pe=(0,u.useMemo)(()=>Y.records.map(e=>et(e,E,D,K,W,H)),[Y.records,E,D,K,W,H]),he=V?pe:w,_e=(0,u.useMemo)(()=>{if(V||!X)return he;let e=X.toLowerCase();return he.filter(t=>t.label.toLowerCase().includes(e)||t.description&&t.description.toLowerCase().includes(e))},[V,he,X]);(0,u.useEffect)(()=>{y(-1)},[_e.length]),(0,u.useEffect)(()=>{a||y(-1)},[a]);let ve=(0,u.useCallback)(e=>Y.setSearch(e),[Y.setSearch]);(0,u.useEffect)(()=>{if(!V||!R||!O)return;let t=(T?Array.isArray(e)?e:[]:e!=null&&e!==``?[e]:[]).filter(e=>e!=null&&e!==``&&typeof e!=`object`&&!tt(e));if(!t.length)return;let n=t.filter(e=>!ye(e));if(!n.length)return;let r=!1;return(async()=>{try{let e=[];for(let t of n)if(typeof R.findOne==`function`){let n=await R.findOne(O,t);n&&e.push(et(n,E,D,K,W,H))}else{let n=await R.find(O,{$filter:{[D]:t},$top:1}),r=n?.data??n??[];r[0]&&e.push(et(r[0],E,D,K,W,H))}!r&&e.length&&_(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,V,O,E,D,K,T]);let ye=(0,u.useCallback)(e=>w.find(t=>t.value===e)??pe.find(t=>t.value===e)??f.find(t=>t.value===e),[w,pe,f]),be=(0,u.useCallback)(e=>{let t=String(e);return w.find(e=>String(e.value)===t)??pe.find(e=>String(e.value)===t)??f.find(e=>String(e.value)===t)},[w,pe,f]),xe=(0,u.useCallback)(e=>{let t=typeof e==`object`&&e?e:tt(e);return t?t[D]??t.id??t._id??t.externalId:e},[D]),Se=(0,u.useMemo)(()=>T?Array.isArray(e)?e.map(xe):[]:xe(e),[T,e,xe]),we=(0,u.useCallback)(e=>{if(e==null||e===``)return;let t=typeof e==`object`?e:tt(e);return t?et(t,E,D,K,W,H):ye(e)??be(e)},[ye,be,E,D,K,W,H]),Z=T?(Array.isArray(e)?e:[]).map(we).filter(Boolean):e?[we(e)].filter(Boolean):[],Q=i.onSelectRecord,Te=(0,u.useCallback)(n=>{if(n&&n.value!=null&&_(e=>{let t=new Map(e.map(e=>[e.value,e]));return t.set(n.value,n),Array.from(t.values())}),T){let r=(Array.isArray(e)?e:[]).map(xe);r.includes(n.value)?t(r.filter(e=>e!==n.value)):(O&&Pe(O,n.value),t([...r,n.value]))}else O&&Pe(O,n.value),Q?Q(n):t(n.value),o(!1)},[T,e,t,Q,O,xe]),Ee=n=>{t(T?(Array.isArray(e)?e:[]).map(xe).filter(e=>e!==n):null)},De=(0,u.useCallback)(e=>{let t=e.map(e=>et(e,E,D,K,W,H));O&&t.forEach(e=>Pe(O,e.value)),_(t)},[E,D,K,W,O]),[Oe,ke]=(0,u.useState)([]);(0,u.useEffect)(()=>{if(!a||!V||!R||!O||X)return;let e=Ne(O);if(!e.length){ke([]);return}let t=!1;return(async()=>{try{let n=[];for(let t of e){let e=ye(t);if(e){n.push(e);continue}if(typeof R.findOne==`function`){let e=await R.findOne(O,t);e&&n.push(et(e,E,D,K,W,H))}}t||ke(n)}catch{t||ke([])}})(),()=>{t=!0}},[a,V,O,X]);let Ae=!X&&V?Oe.length:0,je=(0,u.useMemo)(()=>{if(X||!V||Oe.length===0)return _e;let e=new Set(Oe.map(e=>e.value));return[...Oe,..._e.filter(t=>!e.has(t.value))]},[X,V,Oe,_e]);(0,u.useEffect)(()=>{y(-1)},[je.length]);let[Me,Fe]=(0,u.useState)(!1),{execute:Ie}=(0,h.useAction)(),Le=(0,h.useHasActionProvider)(),ze=!!q||A&&(Le||V),Be=(0,u.useCallback)(async e=>{let t=(e||``).trim();if(q){q(t),o(!1);return}if(!(!A||!O)){if(d(null),Le){o(!1),await new Promise(e=>setTimeout(e,0));let e=await Ie({type:`modal`,modal:{objectName:O,mode:`create`}});if(e?.success&&e.data){let t=et(e.data,E,D,K,W,H);_(e=>[t,...e.filter(e=>e.value!==t.value)]),Te(t);return}if(!(e?.success&&e.modal))return}if(!(!R||!t)){Fe(!0);try{let e=et(await R.create(O,{[E]:t}),E,D,K,W,H);_(t=>[e,...t.filter(t=>t.value!==e.value)]),Te(e)}catch(e){d(e instanceof Error?e.message:String(e))}finally{Fe(!1)}}}},[q,A,O,Le,Ie,R,E,D,K,W,H,Te]),Ve=(0,u.useCallback)(e=>{if(!G||G.length===0)return;let t=[];for(let n of G){let r=typeof n==`string`?n:n.field;if(r===E)continue;let i=e[r];if(i==null||i===``)continue;let a=typeof n==`string`?r:n.label||r,o=typeof i==`object`?i.name??i.label??JSON.stringify(i):i;t.push(`${a}: ${o}`)}return t.length?t.join(` · `):void 0},[G,E]),He=(0,u.useCallback)(e=>{e.key===`ArrowDown`?(e.preventDefault(),y(e=>e<je.length-1?e+1:e)):e.key===`ArrowUp`?(e.preventDefault(),y(e=>e>0?e-1:0)):e.key===`Enter`&&(e.preventDefault(),v>=0&&v<je.length&&Te(je[v]))},[je,v,Te]);if((0,u.useEffect)(()=>{v>=0&&b.current&&b.current.querySelector(`[data-lookup-index="${v}"]`)?.scrollIntoView({block:`nearest`})},[v]),r)return Z.length?T?(0,g.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:Z.map((e,t)=>(0,g.jsx)(p.Badge,{variant:`outline`,children:e?.label||e?.[E]},t))}):(0,g.jsx)(`span`,{className:`text-sm`,children:Z[0]?.label||Z[0]?.[E]}):(0,g.jsx)(p.EmptyValue,{});let We=!!i.compact,Ge=Z[0]?.label||Z[0]?.[E],Ke=(0,g.jsxs)(p.Button,{variant:`outline`,className:(0,p.cn)(`min-w-0 flex-1 justify-start text-left font-normal`,We&&`h-8 rounded-none border-0 bg-transparent px-2 shadow-none focus-visible:ring-1 focus-visible:ring-ring/60`),type:`button`,disabled:B||i.disabled,"data-testid":B?`lookup-trigger-gated`:i.name||x?.name?`lookup-trigger-${i.name||x.name}`:`lookup-trigger`,title:B?s(`lookup.selectFirst`,{fields:F.map(e=>e.field).join(`, `)}):void 0,children:[(0,g.jsx)(m.Search,{className:(0,p.cn)(`size-4 shrink-0 text-muted-foreground`,We?`mr-1.5`:`mr-2`)}),(0,g.jsx)(`span`,{className:(0,p.cn)(`truncate`,We&&Z.length===0&&`text-muted-foreground`),children:B?s(`lookup.selectFirst`,{fields:F.map(e=>e.field).join(`, `)}):We&&!T&&Z.length>0?Ge:Z.length===0?x?.placeholder||s(`common.select`):T?s(`table.selected`,{count:Z.length}):s(`common.select`)})]});return(0,g.jsxs)(`div`,{className:We?``:`space-y-2`,children:[Z.length>0&&!We&&(0,g.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:Z.map((e,t)=>{let n=e?.label||e?.[E];if(N===`search`){let r=e?.[P]||e?.image;return(0,g.jsxs)(`span`,{"data-testid":`people-field-chip`,className:`inline-flex items-center gap-1.5 rounded-full border bg-background py-0.5 pl-0.5 pr-1.5 text-sm`,children:[(0,g.jsxs)(p.Avatar,{className:`size-6 shrink-0`,children:[r&&(0,g.jsx)(p.AvatarImage,{src:r,alt:String(n||``)}),(0,g.jsx)(p.AvatarFallback,{className:`text-[10px]`,children:Ce(String(n||``))})]}),(0,g.jsx)(`span`,{className:`max-w-[10rem] truncate`,children:n}),(0,g.jsx)(`button`,{onClick:()=>Ee(e?.value),className:`rounded-full p-0.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground`,type:`button`,"aria-label":s(`lookup.remove`,{label:n}),children:(0,g.jsx)(m.X,{className:`size-3`})})]},t)}return(0,g.jsxs)(p.Badge,{variant:`outline`,className:`gap-1`,children:[n,(0,g.jsx)(`button`,{onClick:()=>Ee(e?.value),className:`ml-1 hover:text-destructive`,type:`button`,"aria-label":s(`lookup.remove`,{label:n}),children:(0,g.jsx)(m.X,{className:`size-3`})})]},t)})}),N===`search`&&V&&R&&O?(0,g.jsx)(Re,{inline:!0,trigger:Ke,open:oe,onOpenChange:se,title:x?.label||s(`common.select`),multiple:T,dataSource:R,objectName:O,displayField:E,idField:D,subtitleFields:re,avatarField:P,pageSize:j,value:Se,onSelect:t,onSelectRecords:De,lookupFilters:M,baseFilter:J}):(0,g.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,g.jsxs)(p.Popover,{open:a,onOpenChange:e=>{B||o(e)},children:[(0,g.jsx)(p.PopoverTrigger,{asChild:!0,children:Ke}),(0,g.jsxs)(p.PopoverContent,{className:`w-[var(--radix-popover-trigger-width)] p-0`,align:`start`,children:[(0,g.jsx)(`div`,{className:`p-2`,children:(0,g.jsxs)(`div`,{className:`relative`,children:[(0,g.jsx)(m.Search,{className:`absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground`}),(0,g.jsx)(p.Input,{placeholder:s(`common.search`)+`...`,value:X,onChange:e=>ve(e.target.value),onKeyDown:He,className:`w-full pl-9 h-8 text-sm`,role:`combobox`,"aria-autocomplete":`list`,"aria-controls":c,"aria-expanded":a,"aria-activedescendant":v>=0?`${c}-opt-${v}`:void 0}),le&&(0,g.jsx)(m.Loader2,{className:`absolute right-3 top-1/2 -translate-y-1/2 size-4 animate-spin text-muted-foreground`,"data-testid":`lookup-loading`})]})}),fe&&(0,g.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-4 px-2`,role:`alert`,children:[(0,g.jsx)(m.AlertCircle,{className:`size-5 text-destructive`}),(0,g.jsx)(`p`,{className:`text-sm text-destructive`,children:fe}),(0,g.jsx)(p.Button,{variant:`outline`,size:`sm`,onClick:()=>Y.refetch(),type:`button`,children:s(`lookup.retry`)})]}),le&&_e.length===0&&!fe&&(0,g.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-6`,role:`status`,"aria-live":`polite`,children:[(0,g.jsx)(m.Loader2,{className:`size-6 animate-spin text-muted-foreground`}),(0,g.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:s(`lookup.loading`)})]}),!fe&&!(le&&_e.length===0)&&(0,g.jsx)(`div`,{ref:b,className:`max-h-64 overflow-y-auto px-1 pb-1`,role:`listbox`,id:c,children:je.length===0?(0,g.jsxs)(`div`,{className:`py-4 text-center`,children:[(0,g.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:s(`lookup.noOptions`)}),ze&&(0,g.jsxs)(p.Button,{variant:`ghost`,size:`sm`,className:`mt-2 gap-1`,type:`button`,disabled:Me,onClick:()=>Be(X),children:[Me?(0,g.jsx)(m.Loader2,{className:`size-4 animate-spin`}):(0,g.jsx)(m.Plus,{className:`size-4`}),X?s(`lookup.createNamed`,{name:X}):s(`lookup.createNew`)]})]}):(0,g.jsxs)(g.Fragment,{children:[je.map((t,n)=>{let r=T?(Array.isArray(e)?e:[]).map(xe).includes(t.value):xe(e)===t.value,i=n===v,a=Ae>0&&n===0,o=Ae>0&&n===Ae;return(0,g.jsxs)(u.default.Fragment,{children:[a&&(0,g.jsx)(`div`,{className:`px-3 pt-2 pb-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground`,children:s(`lookup.recentlyUsed`)}),o&&(0,g.jsx)(`div`,{className:`mt-1 border-t px-3 pt-2 pb-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground`,children:s(`lookup.allResults`)}),(0,g.jsxs)(`button`,{id:`${c}-opt-${n}`,"data-lookup-index":n,role:`option`,"aria-selected":r,title:Ve(t),onClick:()=>Te(t),className:`w-full text-left px-3 py-2 rounded-md text-sm hover:bg-accent flex items-center justify-between ${i?`bg-accent text-accent-foreground`:r?`bg-accent/50 text-accent-foreground`:``}`,type:`button`,children:[(0,g.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,g.jsx)(`span`,{className:`block truncate`,children:t.label}),t.description&&(0,g.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:t.description})]}),r&&(0,g.jsx)(p.Badge,{variant:`default`,className:`ml-2 shrink-0`,children:s(`lookup.selectedBadge`)})]})]},t.value)}),V&&de>_e.length&&(0,g.jsx)(`p`,{className:`text-xs text-muted-foreground text-center py-2`,children:s(`lookup.showingResults`,{shown:_e.length,total:de})}),V&&de>_e.length&&(0,g.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),se(!0)},"data-testid":`show-all-results`,children:[(0,g.jsx)(m.TableProperties,{className:`size-3.5`}),s(`lookup.showAllResults`,{count:de})]}),ze&&(0,g.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`,disabled:Me,onClick:()=>Be(X),children:[Me?(0,g.jsx)(m.Loader2,{className:`size-3.5 animate-spin`}):(0,g.jsx)(m.Plus,{className:`size-3.5`}),X?s(`lookup.createNamed`,{name:X}):s(`lookup.createNew`)]})]})})]})]}),V&&N!==`search`&&(0,g.jsx)(p.Button,{variant:`outline`,size:`icon`,className:`shrink-0`,type:`button`,disabled:B||i.disabled,onClick:()=>se(!0),"aria-label":s(`lookup.browseAll`),title:B?s(`lookup.selectFirst`,{fields:F.map(e=>e.field).join(`, `)}):s(`lookup.browseAll`),"data-testid":`browse-all-records`,children:(0,g.jsx)(m.TableProperties,{className:`size-4`})})]}),V&&R&&O&&N!==`search`&&(0,g.jsx)(ge,{open:oe,onOpenChange:se,title:x?.label||s(`common.select`),multiple:T,dataSource:R,objectName:O,columns:G,displayField:E,titleFormat:W,idField:D,pageSize:j,value:Se,onSelect:t,onSelectRecords:De,lookupFilters:M,baseFilter:J,cellRenderer:Je(),filterColumns:ae})]})}var it,at,ot,st,ct=o((()=>{be(),Ve(),de(),Ke(),Le(),Ee(),Xe(),A(),it=50,at=h.SchemaRendererContext,ot=/^(sys_|cloud_|ai_)/,st=new Set([`user`,`users`])}));C(),E(),O(),M(),ie(),R(),V(),W(),oe(),ce(),le(),ct();function lt(e){if(Array.isArray(e))return e.map(e=>String(e)).filter(Boolean);if(typeof e==`string`){let t=e.trim();if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.map(e=>String(e)).filter(Boolean):[String(e)].filter(Boolean)}catch{return t.split(`,`).map(e=>e.trim()).filter(Boolean)}}return[]}var ut=[`platform`,`org`,`other`],dt={platform:`Platform`,org:`Organization`,other:`Other`};function ft({value:e,onChange:t,readonly:n,className:r,...i}){let a=u.default.useContext(h.SchemaRendererContext),o=i.dataSource??a?.dataSource??null,s=i.disabled,[c,l]=u.default.useState(null),d=u.default.useMemo(()=>lt(e),[e]);u.default.useEffect(()=>{if(!o||typeof o.find!=`function`)return;let e=!1;return(async()=>{try{let t=await o.find(`sys_capability`,{$filter:{active:!0},$top:500}),n=t?.data??t?.records??(Array.isArray(t)?t:[]);e||l(Array.isArray(n)?n:[])}catch{e||l([])}})(),()=>{e=!0}},[o]);let f=u.default.useCallback(e=>t(JSON.stringify(e)),[t]),m=u.default.useMemo(()=>{let e=new Map;for(let t of c??[])t?.name&&e.set(t.name,t);for(let t of d)e.has(t)||e.set(t,{name:t,label:t,scope:`other`});return e},[c,d]),_=e=>m.get(e)?.label||e,v=u.default.useMemo(()=>{let e=new Map;for(let t of m.values()){let n=ut.includes(t.scope)?t.scope:`other`,r=e.get(n)??[];r.push(t),e.set(n,r)}return ut.filter(t=>e.has(t)).map(t=>({scope:t,label:dt[t]??t,items:(e.get(t)??[]).sort((e,t)=>(e.label||e.name).localeCompare(t.label||t.name))}))},[m]);if(n)return d.length===0?(0,g.jsx)(p.EmptyValue,{}):(0,g.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:d.map(e=>(0,g.jsx)(p.Badge,{variant:`outline`,title:m.get(e)?.description,children:_(e)},e))});let y=e=>{let t=d.includes(e)?d.filter(t=>t!==e):[...d,e];f(t)};return(0,g.jsxs)(`div`,{className:(0,p.cn)(`flex flex-col gap-3`,r),children:[c===null&&v.length===0&&(0,g.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:`Loading capabilities…`}),v.map(e=>(0,g.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,g.jsx)(`div`,{className:`text-xs font-medium uppercase tracking-wide text-muted-foreground`,children:e.label}),(0,g.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:e.items.map(e=>{let t=d.includes(e.name);return(0,g.jsx)(`button`,{type:`button`,onClick:()=>y(e.name),disabled:s,"aria-pressed":t,title:e.description||void 0,className:(0,p.cn)(`rounded-full border px-3 py-1 text-sm transition-colors disabled:opacity-50`,t?`border-primary bg-primary text-primary-foreground`:`border-input bg-background text-foreground hover:bg-accent`),children:e.label||e.name},e.name)})})]},e.scope))]})}var pt=s({DateTimeField:()=>mt});function mt({value:e,onChange:t,field:n,readonly:r,...i}){if(r){if(!e)return(0,g.jsx)(p.EmptyValue,{});let t=new Date(e);return(0,g.jsxs)(`span`,{className:`text-sm`,children:[t.toLocaleDateString(),` `,t.toLocaleTimeString()]})}let{inputType:a,...o}=i;return(0,g.jsx)(p.Input,{...o,type:`datetime-local`,value:e||``,onChange:e=>t(e.target.value),onClick:e=>{N(e.currentTarget),o.onClick?.(e)},disabled:r||o.disabled})}var ht=o((()=>{re()})),gt=s({TimeField:()=>_t});function _t({value:e,onChange:t,field:n,readonly:r,...i}){if(r)return(0,g.jsx)(`span`,{className:`text-sm`,children:e||(0,g.jsx)(p.EmptyValue,{})});let{inputType:a,...o}=i;return(0,g.jsx)(p.Input,{...o,type:`time`,value:e||``,onChange:e=>t(e.target.value),onClick:e=>{N(e.currentTarget),o.onClick?.(e)},disabled:r||o.disabled})}var vt=o((()=>{re()})),yt=s({PercentField:()=>bt});function bt({value:e,onChange:t,field:n,readonly:r,errorMessage:i,className:a,...o}){let s=n||o.schema,c=s?.precision??2,l=typeof s?.max==`number`?s.max:void 0,u=l!=null&&l>1,d=e=>u?e:e*100,f=e=>u?e:e/100,m=u?l:100;if(r)return e==null?(0,g.jsx)(p.EmptyValue,{}):(0,g.jsxs)(`span`,{className:`text-sm font-medium tabular-nums`,children:[d(e).toFixed(c),`%`]});let h=e==null?``:d(e),_=e==null?0:d(e),v=e=>{if(e.target.value===``){t(null);return}let n=parseFloat(e.target.value);t(isNaN(n)?null:f(n))},y=e=>{if(r||o.disabled)return;if(!Array.isArray(e)||e.length===0){t(null);return}let n=e[0];t(typeof n==`number`?f(n):null)},b=10**-c;return(0,g.jsxs)(`div`,{className:`space-y-2`,children:[(0,g.jsxs)(`div`,{className:`relative`,children:[(0,g.jsx)(p.Input,{...o,type:`number`,value:h,onChange:v,placeholder:s?.placeholder||`0`,disabled:r||o.disabled,className:`pr-8 ${a||``}`,step:(10**-c).toFixed(c),"aria-invalid":!!i}),(0,g.jsx)(`span`,{className:`absolute right-3 top-1/2 -translate-y-1/2 text-sm text-gray-500`,children:`%`})]}),(0,g.jsx)(p.Slider,{value:[_],onValueChange:y,min:0,max:m,step:b,disabled:r||o.disabled,className:`w-full`,"aria-label":`Percentage`,"data-testid":`percent-slider`})]})}var xt=o((()=>{})),St=s({PasswordField:()=>Ct});function Ct({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,g.jsx)(`span`,{className:`text-sm`,children:`••••••••`});let{inputType:l,...d}=a;return(0,g.jsxs)(`div`,{className:`relative`,children:[(0,g.jsx)(p.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,g.jsx)(p.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,g.jsx)(m.EyeOff,{className:`size-4 text-gray-500`}):(0,g.jsx)(m.Eye,{className:`size-4 text-gray-500`})})]})}var wt=o((()=>{})),Tt=s({FileCell:()=>Ot,FileField:()=>Dt});function Et(e){let{files:t,multiple:n,maxSize:r,onChange:i}=e,{upload:a}=(0,_.useUpload)(),[o,s]=(0,u.useState)([]),[c,l]=(0,u.useState)({}),[d,f]=(0,u.useState)(!1);return{processFiles:(0,u.useCallback)(async e=>{if(e.length===0)return;let o=[],c=e.filter(e=>{if(r&&e.size>r){let t=(r/(1024*1024)).toFixed(1);return o.push(`"${e.name}" exceeds max size (${t} MB)`),!1}return!0});if(s(o),c.length!==0){f(!0);try{let e=(await Promise.all(c.map(async e=>{try{let t=await a(e,{onProgress:t=>l(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 o.push(`Failed to upload "${e.name}": ${t.message}`),s([...o]),null}}))).filter(Boolean);if(e.length===0)return;i(n?[...t,...e]:e[0])}finally{f(!1),l({})}}},[t,n,i,r,a]),errors:o,uploading:d,uploadProgress:c}}function Dt({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,f=s?.capture??null,h=!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`)),_=typeof navigator<`u`&&(navigator.maxTouchPoints>0||/Mobi|Android/i.test(navigator.userAgent)),v=f===!1?!1:f??(h&&_?`environment`:null),[y,b]=(0,u.useState)(!1),x=e?Array.isArray(e)?e:[e]:[],{processFiles:S,errors:C,uploading:w,uploadProgress:T}=Et({files:x,multiple:c,maxSize:d,onChange:t}),E=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),b(!0)},[]),ee=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),b(!1)},[]),D=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),b(!1);let t=Array.from(e.dataTransfer.files);if(l){let e=l.split(`,`).map(e=>e.trim().toLowerCase()),n=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(`/*`,`/`)))});S(n)}else S(t)},[l,S]);if(r)return e?(0,g.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:(Array.isArray(e)?e:[e]).map((e,t)=>(0,g.jsx)(`span`,{className:`text-sm truncate max-w-xs`,children:e.name||e.original_name||`File`},t))}):(0,g.jsx)(p.EmptyValue,{});let O=e=>{S(Array.from(e.target.files||[]))},k=e=>{if(c){let n=x.filter((t,n)=>n!==e);t(n.length>0?n:null)}else t(null)},te=e=>(e.mime_type||``).startsWith(`image/`);return(0,g.jsxs)(`div`,{className:i.className,children:[(0,g.jsx)(`input`,{ref:a,type:`file`,multiple:c,accept:l,onChange:O,className:`hidden`}),v&&(0,g.jsx)(`input`,{ref:o,type:`file`,accept:`image/*`,capture:v,onChange:O,className:`hidden`,"aria-label":`Camera capture`,"data-testid":`file-field-camera-input`}),(0,g.jsxs)(`div`,{className:`space-y-2`,children:[(0,g.jsxs)(`div`,{onDragOver:E,onDragLeave:ee,onDrop:D,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,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},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/i18n"),p=require("@object-ui/components"),m=require("lucide-react"),h=require("@object-ui/react"),g=require("react/jsx-runtime"),_=require("@object-ui/providers"),v=require("react-markdown");v=l(v,1);let y=require("remark-gfm");y=l(y,1);let b=require("rehype-sanitize");b=l(b,1);var x=s({TextField:()=>S});function S({value:e,onChange:t,field:n,readonly:r,...i}){let a=n||i.schema;if(r)return(0,g.jsx)(`span`,{className:`text-sm`,children:e||(0,g.jsx)(p.EmptyValue,{})});let o=a?.rows,{inputType:s,...c}=i;return o&&o>1?(0,g.jsx)(p.Textarea,{...c,value:e||``,onChange:e=>t(e.target.value),placeholder:a?.placeholder,disabled:r||c.disabled}):(0,g.jsx)(p.Input,{...c,type:a?.type===`password`?`password`:`text`,value:e||``,onChange:e=>t(e.target.value),placeholder:a?.placeholder,disabled:r||c.disabled})}var C=o((()=>{})),w=s({NumberField:()=>T});function T({value:e,onChange:t,field:n,readonly:r,...i}){if(r)return e==null?(0,g.jsx)(p.EmptyValue,{}):(0,g.jsx)(`span`,{className:`text-sm`,children:e});let a=n||i.schema,o=a?.scale,s=typeof a?.step==`number`?a.step:typeof o==`number`?10**-o:`any`,{inputType:c,...l}=i;return(0,g.jsx)(p.Input,{...l,type:`number`,value:e??``,onChange:e=>{let n=e.target.value;t(n===``?null:Number(n))},placeholder:a?.placeholder,disabled:r||l.disabled,min:typeof a?.min==`number`?a.min:void 0,max:typeof a?.max==`number`?a.max:void 0,step:s})}var E=o((()=>{})),ee=s({BooleanField:()=>D});function D({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,g.jsx)(`span`,{className:`text-sm`,children:e?`Yes`:`No`});let{inputType:d,...f}=i;return o===`checkbox`?(0,g.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,g.jsx)(p.Checkbox,{...f,id:c,checked:!!e,onCheckedChange:e=>t(!!e),disabled:r||f.disabled}),(0,g.jsx)(p.Label,{htmlFor:c,className:`sr-only`,children:l})]}):(0,g.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,g.jsx)(p.Switch,{...f,id:c,checked:!!e,onCheckedChange:t,disabled:r||f.disabled}),(0,g.jsx)(p.Label,{htmlFor:c,className:`sr-only`,children:l})]})}var O=o((()=>{})),k,te,A=o((()=>{k={"common.selectOption":`Select an option`,"common.select":`Select...`,"common.search":`Search`,"common.loading":`Loading...`,"common.noResults":`No results found`,"common.cancel":`Cancel`,"common.confirm":`Confirm`,"table.selected":`{{count}} selected`,"table.search":`Search...`,"lookup.loading":`Loading…`,"lookup.noOptions":`No options found`,"lookup.noRecords":`No records found`,"lookup.recentlyUsed":`Recently used`,"lookup.allResults":`All results`,"lookup.createNew":`Create new`,"lookup.createNamed":`Create new "{{name}}"`,"lookup.showingResults":`Showing {{shown}} of {{total}} results`,"lookup.showAllResults":`Show all results ({{count}})`,"lookup.selectedBadge":`Selected`,"lookup.browseAll":`Browse all records`,"lookup.remove":`Remove {{label}}`,"lookup.selectFirst":`Select {{fields}} first`,"lookup.selectRecord":`Select record`,"lookup.recordCount":`{{count}} records`,"lookup.recordCountOne":`1 record`,"lookup.pageOf":`Page {{current}} of {{total}}`,"lookup.filters":`Filters`,"lookup.clear":`Clear`,"lookup.yes":`Yes`,"lookup.filterPlaceholder":`Filter {{label}}`,"lookup.prevPage":`Previous page`,"lookup.nextPage":`Next page`,"lookup.jumpToPage":`Jump to page`,"lookup.retry":`Retry`,"capability.group.platform":`Platform`,"capability.group.org":`Organization`,"capability.group.other":`Other`,"capability.label.manage_users":`Manage Users`,"capability.label.manage_org_users":`Manage Organization Users`,"capability.label.manage_metadata":`Manage Metadata`,"capability.label.manage_platform_settings":`Manage Platform Settings`,"capability.label.setup_access":`Setup Access`,"capability.label.setup_write":`Write Settings`,"capability.label.studio_access":`Studio Access`},te=(0,f.createSafeTranslation)(k,`common.selectOption`)})),ne=s({SelectField:()=>j});function j({value:e,onChange:t,field:n,readonly:r,schema:i,dependentValues:a,dependsOn:o,emptyHint:s,dataSource:c,...l}){let f=n||i,m=f?.options||[],{t:_}=te(),v=l.name||f?.name||l.id||``,y=(0,u.useContext)(h.SchemaRendererContext),b=(0,u.useMemo)(()=>a??y?.formValues??y?.data??{},[a,y?.formValues,y?.data]),x=(0,h.usePredicateScope)(),S=f?.dependsOn??o,C=(0,u.useMemo)(()=>(0,d.resolveDependsOnFields)(S),[S]),w=(0,u.useMemo)(()=>C.length>0&&(0,d.isOptionGroupGated)(S,b),[C,S,b]),T=(0,u.useMemo)(()=>w?[]:(0,d.resolveVisibleOptions)(m,b,x),[w,m,b,x]);if((0,u.useEffect)(()=>{r||e==null||e===``||(0,d.isValueStillOffered)(e,T)||t?.(void 0)},[T,w]),r){let t=m.find(t=>t.value===e)?.label||e;return t?(0,g.jsx)(`span`,{className:`text-sm`,children:t}):(0,g.jsx)(p.EmptyValue,{})}if(T.length===0){let e=w?`Select ${C.join(` / `)} first`:`No options available`;return(0,g.jsx)(`div`,{"data-testid":v?`select-empty-${v}`:void 0,className:`flex h-9 w-full items-center rounded-md border border-input bg-muted/30 px-3 py-2 text-sm text-muted-foreground`,children:e})}return(0,g.jsxs)(p.Select,{...l,value:e,onValueChange:t,disabled:r||l.disabled,children:[(0,g.jsx)(p.SelectTrigger,{className:l.className,id:l.id,"data-testid":v?`select-trigger-${v}`:void 0,children:(0,g.jsx)(p.SelectValue,{placeholder:f?.placeholder||_(`common.selectOption`)})}),(0,g.jsx)(p.SelectContent,{position:`popper`,children:T.map(e=>(0,g.jsx)(p.SelectItem,{value:e.value,"data-testid":`select-option-${e.value}`,children:e.label},e.value))})]})}var M=o((()=>{A()}));function N(e){if(!(e.disabled||e.readOnly))try{e.showPicker?.()}catch{}}var re=o((()=>{})),P=s({DateField:()=>F});function F({value:e,onChange:t,field:n,readonly:r,...i}){if(r)return e?(0,g.jsx)(`span`,{className:`text-sm`,children:new Date(e).toLocaleDateString()}):(0,g.jsx)(p.EmptyValue,{});let{inputType:a,...o}=i;return(0,g.jsx)(p.Input,{...o,type:`date`,value:e||``,onChange:e=>t(e.target.value),onClick:e=>{N(e.currentTarget),o.onClick?.(e)},disabled:r||o.disabled})}var ie=o((()=>{re()})),I=s({EmailField:()=>L});function L({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){let o=n||a.schema;if(r)return e?(0,g.jsx)(`a`,{href:`mailto:${e}`,className:`text-sm text-blue-600 hover:text-blue-800 hover:underline`,children:e}):(0,g.jsx)(p.EmptyValue,{});let{inputType:s,...c}=a;return(0,g.jsx)(p.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 R=o((()=>{})),z=s({PhoneField:()=>B});function B({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){let o=n||a.schema;if(r)return e?(0,g.jsx)(`a`,{href:`tel:${e}`,className:`text-sm text-blue-600 hover:text-blue-800 hover:underline`,children:e}):(0,g.jsx)(p.EmptyValue,{});let{inputType:s,...c}=a;return(0,g.jsx)(p.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 V=o((()=>{})),H=s({UrlField:()=>U});function U({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,g.jsx)(`a`,{href:e,target:`_blank`,rel:`noopener noreferrer`,className:`text-sm text-blue-600 hover:text-blue-800 hover:underline`,children:e}):(0,g.jsx)(`span`,{className:`text-sm`,children:e}):(0,g.jsx)(p.EmptyValue,{});let{inputType:s,...c}=a;return(0,g.jsx)(p.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 W=o((()=>{})),G=o((()=>{})),K=s({CurrencyField:()=>q});function ae(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 q({value:e,onChange:t,field:n,readonly:r,errorMessage:i,className:a,...o}){let s=n||o.schema,{currency:c}=(0,f.useLocalization)(),l=(0,f.resolveFieldCurrency)(s,c),u=s?.precision??2;if(r)return e==null?(0,g.jsx)(p.EmptyValue,{}):(0,g.jsx)(`span`,{className:`text-sm font-medium tabular-nums`,children:ae(Number(e),l,u)});let d=e=>{let n=parseFloat(e.target.value);isNaN(n)||t(parseFloat(n.toFixed(u)))},m=l?l===`USD`?`$`:l:``;return(0,g.jsxs)(`div`,{className:`relative`,children:[m&&(0,g.jsx)(`span`,{className:`absolute left-3 top-1/2 -translate-y-1/2 text-sm text-gray-500`,children:m}),(0,g.jsx)(p.Input,{...o,type:`number`,value:e??``,onChange:e=>{t(e.target.value===``?null:parseFloat(e.target.value))},onBlur:d,placeholder:s?.placeholder||`0.00`,disabled:r||o.disabled,className:`${m?`pl-8`:``} ${a||``}`,min:typeof s?.min==`number`?s.min:void 0,max:typeof s?.max==`number`?s.max:void 0,step:(10**-u).toFixed(u),"aria-invalid":!!i})]})}var oe=o((()=>{G()})),se=s({TextAreaField:()=>J});function J({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){if(r)return(0,g.jsx)(`div`,{className:`text-sm whitespace-pre-wrap`,children:e||(0,g.jsx)(p.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,f]=(0,u.useState)(!1),[h,_]=(0,u.useState)(e??``),v=()=>{_(e??``),f(!0)},y=()=>f(!1),b=()=>{t(h),f(!1)},{inputType:x,mobileFullscreen:S,...C}=a;return(0,g.jsxs)(`div`,{className:`relative`,children:[(0,g.jsx)(p.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,g.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,g.jsx)(m.Maximize2,{className:`size-3.5`})}),c&&(0,g.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,g.jsx)(p.Dialog,{open:d,onOpenChange:f,children:(0,g.jsxs)(p.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,g.jsx)(p.DialogHeader,{className:`p-4 border-b`,children:(0,g.jsx)(p.DialogTitle,{className:`text-base`,children:o?.label??`Edit text`})}),(0,g.jsx)(`div`,{className:`flex-1 min-h-0 p-4`,children:(0,g.jsx)(p.Textarea,{autoFocus:!0,value:h,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,g.jsxs)(p.DialogFooter,{className:`p-3 border-t flex-row justify-between sm:justify-end gap-2`,children:[c&&(0,g.jsxs)(`span`,{className:`text-xs text-muted-foreground self-center`,children:[h.length,`/`,c]}),(0,g.jsxs)(`div`,{className:`flex gap-2 ml-auto`,children:[(0,g.jsxs)(p.Button,{type:`button`,variant:`ghost`,onClick:y,children:[(0,g.jsx)(m.X,{className:`size-4 mr-1`}),` Cancel`]}),(0,g.jsxs)(p.Button,{type:`button`,onClick:b,"data-testid":`textarea-fullscreen-save`,children:[(0,g.jsx)(m.Check,{className:`size-4 mr-1`}),` Done`]})]})]})]})})]})}var ce=o((()=>{})),Y=s({RichTextField:()=>X});function X({value:e,onChange:t,field:n,readonly:r,errorMessage:i,...a}){let{t:o}=(0,h.useObjectTranslation)();if(r)return(0,g.jsx)(`div`,{className:`text-sm prose prose-sm max-w-none`,children:e||(0,g.jsx)(p.EmptyValue,{})});let s=n||a.schema,c=s?.rows||8,l=s?.format||`markdown`;return(0,g.jsxs)(`div`,{className:`space-y-2`,children:[(0,g.jsxs)(`div`,{className:`flex items-center justify-between text-xs text-gray-500`,children:[(0,g.jsx)(`span`,{children:o(`fields.richText.format`,{format:l,defaultValue:`Format: ${l}`})}),(0,g.jsx)(`span`,{className:`italic`,children:o(`fields.richText.basicEditorHint`,{defaultValue:`Rich text editor (basic)`})})]}),(0,g.jsx)(p.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 le=o((()=>{}));function ue(e){let{dataSource:t,objectName:n,enabled:r=!0,pageSize:i=50,paginate:a=!1,filter:o,expand:s,searchFields:c,debounceMs:l=300}=e,[d,f]=(0,u.useState)([]),[p,m]=(0,u.useState)(!1),[h,g]=(0,u.useState)(null),[_,v]=(0,u.useState)(0),[y,b]=(0,u.useState)(1),[x,S]=(0,u.useState)(``),[C,w]=(0,u.useState)(null),T=(0,u.useRef)(null),E=(0,u.useMemo)(()=>o&&Object.keys(o).length?JSON.stringify(o):``,[o]),ee=(0,u.useMemo)(()=>s?.length?s.join(`,`):``,[s]),D=(0,u.useMemo)(()=>c?.length?c.join(`,`):``,[c]),O=!!r&&!!t&&typeof t.find==`function`&&!!n,k=(0,u.useCallback)(async(e,r,l)=>{if(!(!O||!t||!n)){m(!0),g(null);try{let u={$top:i};a&&(u.$skip=(r-1)*i),e&&e.trim()&&(u.$search=e.trim()),c&&c.length>0&&(u.$searchFields=c),l&&(u.$orderby={[l.field]:l.direction}),o&&Object.keys(o).length>0&&(u.$filter=o),s&&s.length>0&&(u.$expand=s);let d=await t.find(n,u),p=d?.data??d??[];f(p),v(d?.total??p.length)}catch(e){g(e instanceof Error?e.message:String(e)),f([])}finally{m(!1)}}},[O,t,n,i,a,E,ee,D]);(0,u.useEffect)(()=>{O&&k(x,y,C)},[O,y,C,k]),(0,u.useEffect)(()=>{r||(f([]),g(null),S(``),b(1),w(null))},[r]),(0,u.useEffect)(()=>()=>{T.current&&clearTimeout(T.current)},[]);let te=(0,u.useCallback)(e=>{S(e),b(1),T.current&&clearTimeout(T.current),T.current=setTimeout(()=>{k(e,1,C)},l)},[k,C,l]),A=(0,u.useCallback)(e=>{b(e)},[]),ne=(0,u.useCallback)(e=>{w(t=>t&&t.field===e?{field:e,direction:t.direction===`asc`?`desc`:`asc`}:{field:e,direction:`asc`}),b(1)},[]),j=(0,u.useCallback)(e=>{w(e),b(1)},[]),M=(0,u.useCallback)(()=>{T.current&&clearTimeout(T.current),f([]),g(null),S(``),b(1),w(null)},[]),N=(0,u.useCallback)(()=>{k(x,y,C)},[k,x,y,C]);return{records:d,loading:p,error:h,total:_,totalPages:Math.max(1,Math.ceil(_/Math.max(1,i))),page:y,search:x,sort:C,setPage:A,setSearch:te,toggleSort:ne,setSort:j,reset:M,refetch:N}}var de=o((()=>{}));function fe(e){return typeof e==`string`?{field:e}:e}function pe(e){return e.replace(/_/g,` `).replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/\b\w/g,e=>e.toUpperCase())}function me(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 he(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 ge({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=_e,value:f,onSelect:h,onSelectRecords:_,lookupFilters:v,baseFilter:y,cellRenderer:b,filterColumns:x,renderFilterBar:S,renderGrid:C}){let{t:w}=te(),[T,E]=(0,u.useState)(new Set),ee=(0,u.useRef)(new Map),[D,O]=(0,u.useState)(-1),k=(0,u.useRef)(null),[A,ne]=(0,u.useState)(!1),[j,M]=(0,u.useState)({}),[N,re]=(0,u.useState)({}),P=(0,u.useRef)(null),[F,ie]=(0,u.useState)(``),I=(0,u.useMemo)(()=>o&&o.length>0?o.map(fe):[{field:s,label:pe(s)}],[o,s]),L=(0,u.useMemo)(()=>{if(x&&x.length>0)return x;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:pe(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}})}:{}}})},[x,v]),R=ue({dataSource:i,objectName:a,enabled:e,pageSize:d,paginate:!0,filter:(0,u.useMemo)(()=>{let e=v?.length?me(v):{},t=L?.length?he(j,L):{},n={...e,...t,...y??{}};return Object.keys(n).length>0?n:void 0},[v,L,j,y])}),{records:z,loading:B,error:V}=R,H=R.total,U=R.totalPages,W=R.search,G=R.page,K=R.sort?.field??null,ae=R.sort?.direction??`asc`,q=R.setPage,oe=R.toggleSort,se=R.setSearch;(0,u.useEffect)(()=>{e||(O(-1),ne(!1),M({}),re({}),ie(``),E(new Set(r&&Array.isArray(f)?f:[])),ee.current.clear())},[e]),(0,u.useEffect)(()=>{e&&r&&E(new Set(Array.isArray(f)?f:[]))},[e,r,f]),(0,u.useEffect)(()=>{O(-1)},[z]);let J=(0,u.useCallback)(e=>e[l]??e.id??e._id,[l]),ce=(0,u.useCallback)(e=>{let t=J(e);return r?T.has(t):f===t},[r,f,T,J]),Y=(0,u.useCallback)(e=>{let n=J(e);r?E(t=>{let r=new Set(t);return r.has(n)?(r.delete(n),ee.current.delete(n)):(r.add(n),ee.current.set(n,e)),r}):(h(n),_?.([e]),t(!1))},[r,J,h,_,t]),X=(0,u.useCallback)(()=>{let e=Array.from(T);h(e);let n=e.map(e=>ee.current.get(e)).filter(Boolean);_?.(n),t(!1)},[T,h,_,t]),le=(0,u.useCallback)(()=>{q(Math.max(1,G-1))},[q,G]),de=(0,u.useCallback)(()=>{q(Math.min(U,G+1))},[q,G,U]),ge=(0,u.useCallback)(e=>{if(e.key!==`Enter`)return;let t=parseInt(F,10);!isNaN(t)&&t>=1&&t<=U&&q(t),ie(``)},[F,U]),be=(0,u.useCallback)(e=>{z.length!==0&&(e.key===`ArrowDown`?(e.preventDefault(),O(e=>Math.min(e+1,z.length-1))):e.key===`ArrowUp`?(e.preventDefault(),O(e=>Math.max(e-1,0))):(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),D>=0&&D<z.length&&Y(z[D])))},[z,D,Y]);(0,u.useEffect)(()=>{if(D>=0&&k.current){let e=k.current.querySelector(`[data-row-index="${D}"]`);e&&typeof e.scrollIntoView==`function`&&e.scrollIntoView({block:`nearest`})}},[D]);let xe=(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&&b){let e=b(t.type);if(e)return(0,g.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)},[b,c,s]),Se=(0,u.useCallback)(e=>K===e?ae===`asc`?(0,g.jsx)(m.ArrowUp,{className:`ml-1 size-3`}):(0,g.jsx)(m.ArrowDown,{className:`ml-1 size-3`}):(0,g.jsx)(m.ArrowUpDown,{className:`ml-1 size-3 opacity-40`}),[K,ae]),Ce=(0,u.useCallback)((e,t,n)=>{e.preventDefault(),e.stopPropagation(),P.current={field:t,startX:e.clientX,startWidth:n};let r=e=>{if(!P.current)return;let t=e.clientX-P.current.startX,n=Math.max(ve,P.current.startWidth+t);re(e=>({...e,[P.current.field]:n}))},i=()=>{P.current=null,document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[]),we=(0,u.useCallback)((e,t)=>{M(n=>({...n,[e]:t})),q(1)},[]),Z=(0,u.useCallback)(()=>{M({}),q(1)},[]),Q=(0,u.useMemo)(()=>Object.values(j).filter(e=>e!=null&&e!==``).length,[j]),Te=(0,u.useCallback)(e=>{let t=j[e.field],n=e.label||pe(e.field);switch(e.type){case`select`:return(0,g.jsxs)(`div`,{className:`space-y-1`,children:[(0,g.jsx)(p.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,g.jsxs)(p.Select,{value:t==null?``:String(t),onValueChange:t=>we(e.field,t),children:[(0,g.jsx)(p.SelectTrigger,{className:`h-8 text-xs`,children:(0,g.jsx)(p.SelectValue,{placeholder:w(`lookup.filterPlaceholder`,{label:n})})}),(0,g.jsx)(p.SelectContent,{children:e.options?.map(e=>(0,g.jsx)(p.SelectItem,{value:String(e.value),children:e.label},String(e.value)))})]})]});case`number`:return(0,g.jsxs)(`div`,{className:`space-y-1`,children:[(0,g.jsx)(p.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,g.jsx)(p.Input,{type:`number`,className:`h-8 text-xs`,value:t??``,placeholder:w(`lookup.filterPlaceholder`,{label:n}),onChange:t=>{let n=t.target.value;we(e.field,n===``?``:Number(n))}})]});case`date`:return(0,g.jsxs)(`div`,{className:`space-y-1`,children:[(0,g.jsx)(p.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,g.jsx)(p.Input,{type:`date`,className:`h-8 text-xs`,value:t??``,onChange:t=>we(e.field,t.target.value)})]});case`boolean`:return(0,g.jsxs)(`div`,{className:`space-y-1`,children:[(0,g.jsx)(p.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,g.jsxs)(`div`,{className:`flex items-center gap-2 h-8`,children:[(0,g.jsx)(p.Checkbox,{checked:!!t,onCheckedChange:t=>we(e.field,!!t)}),(0,g.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:w(`lookup.yes`)})]})]});default:return(0,g.jsxs)(`div`,{className:`space-y-1`,children:[(0,g.jsx)(p.Label,{className:`text-xs text-muted-foreground`,children:n}),(0,g.jsx)(p.Input,{className:`h-8 text-xs`,value:t??``,placeholder:w(`lookup.filterPlaceholder`,{label:n}),onChange:t=>we(e.field,t.target.value)})]})}},[j,we]),Ee=(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,g.jsx)(p.Dialog,{open:e,onOpenChange:t,children:(0,g.jsxs)(p.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,g.jsx)(p.DialogHeader,{children:(0,g.jsxs)(p.DialogTitle,{children:[n,r&&(0,g.jsx)(`span`,{className:`sr-only`,children:` (multiple selection)`})]})}),(0,g.jsxs)(`div`,{className:`relative rounded-md border bg-muted/30 mb-3`,children:[(0,g.jsx)(m.Search,{className:`absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground`}),(0,g.jsx)(p.Input,{placeholder:w(`table.search`),value:W,onChange:e=>se(e.target.value),className:`pl-9 border-0 bg-transparent shadow-none focus-visible:ring-0`,"data-testid":`record-picker-search`}),B&&(0,g.jsx)(m.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`})]}),L&&L.length>0&&(0,g.jsx)(`div`,{className:`py-2`,children:S?(0,g.jsx)(`div`,{"data-testid":`record-picker-filter-bar`,children:S({filterColumns:L,values:j,onChange:we,onClear:Z,activeCount:Q})}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-2`,"data-testid":`record-picker-filter-bar`,children:[(0,g.jsxs)(p.Button,{type:`button`,variant:Q>0?`secondary`:`outline`,size:`sm`,className:`gap-1.5 shrink-0`,onClick:()=>ne(e=>!e),children:[(0,g.jsx)(m.SlidersHorizontal,{className:`size-3.5`}),w(`lookup.filters`),Q>0&&(0,g.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:Q})]}),Q>0&&(0,g.jsxs)(p.Button,{type:`button`,variant:`ghost`,size:`sm`,className:`gap-1 text-xs`,onClick:Z,children:[(0,g.jsx)(m.X,{className:`size-3`}),w(`lookup.clear`)]})]}),A&&(0,g.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:L.map(e=>(0,g.jsx)(`div`,{children:Te(e)},e.field))})]})}),V&&(0,g.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-4`,role:`alert`,children:[(0,g.jsx)(m.AlertCircle,{className:`size-5 text-destructive`}),(0,g.jsx)(`p`,{className:`text-sm text-destructive`,children:V}),(0,g.jsx)(p.Button,{variant:`outline`,size:`sm`,onClick:()=>R.refetch(),type:`button`,children:w(`lookup.retry`)})]}),C?(0,g.jsx)(`div`,{className:`flex-1 min-h-0`,"data-testid":`record-picker-grid-slot`,children:C({columns:I,records:z,loading:B,totalCount:H,currentPage:G,pageSize:d,sortField:K,sortDirection:ae,onSort:oe,onPageChange:q,onRowClick:Y,isSelected:ce,multiple:r,idField:l,cellRenderer:b})}):(0,g.jsxs)(g.Fragment,{children:[B&&z.length===0&&!V&&(0,g.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,g.jsxs)(p.Table,{children:[(0,g.jsx)(p.TableHeader,{children:(0,g.jsxs)(p.TableRow,{className:`bg-muted/40`,children:[r&&(0,g.jsx)(p.TableHead,{className:`w-10`}),I.map(e=>(0,g.jsx)(p.TableHead,{children:(0,g.jsx)(p.Skeleton,{className:`h-4 w-20`})},e.field))]})}),(0,g.jsx)(p.TableBody,{children:Array.from({length:ye},(e,t)=>(0,g.jsxs)(p.TableRow,{children:[r&&(0,g.jsx)(p.TableCell,{className:`w-10`,children:(0,g.jsx)(p.Skeleton,{className:`size-4 rounded`})}),I.map(e=>(0,g.jsx)(p.TableCell,{children:(0,g.jsx)(p.Skeleton,{className:`h-4 w-full`})},e.field))]},t))})]})}),!B&&!V&&z.length===0&&(0,g.jsx)(`div`,{className:`py-8 text-center`,children:(0,g.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:w(`lookup.noRecords`)})}),!V&&z.length>0&&(0,g.jsxs)(`div`,{className:`relative flex-1 overflow-auto min-h-0 border rounded-md`,"aria-busy":B||void 0,"data-state":B?`loading`:`idle`,tabIndex:0,onKeyDown:be,role:`grid`,"aria-label":`Records`,children:[B&&(0,g.jsx)(`div`,{className:`absolute inset-0 z-10 flex items-center justify-center bg-background/60`,"data-testid":`record-picker-loading-overlay`,children:(0,g.jsx)(m.Loader2,{className:`size-6 animate-spin text-muted-foreground`})}),(0,g.jsxs)(p.Table,{style:Object.keys(N).length>0?{tableLayout:`fixed`}:void 0,children:[(0,g.jsx)(p.TableHeader,{className:`sticky top-0 z-[5] bg-muted/50 [&_tr]:border-b`,"data-testid":`record-picker-sticky-header`,children:(0,g.jsxs)(p.TableRow,{children:[r&&(0,g.jsx)(p.TableHead,{className:`w-10`}),I.map(e=>{let t=N[e.field];return(0,g.jsxs)(p.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:()=>oe(e.field),"aria-sort":K===e.field?ae===`asc`?`ascending`:`descending`:`none`,children:[(0,g.jsxs)(`span`,{className:`inline-flex items-center`,children:[e.label||pe(e.field),Se(e.field)]}),(0,g.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();Ce(t,e.field,n?.width??100)},onClick:e=>e.stopPropagation(),"data-testid":`resize-handle-${e.field}`})]},e.field)})]})}),(0,g.jsx)(p.TableBody,{ref:k,children:z.map((e,t)=>{let n=J(e),i=ce(e),a=t===D;return(0,g.jsxs)(p.TableRow,{"data-row-index":t,className:(0,p.cn)(`cursor-pointer transition-colors`,Ee(i,t),a&&`ring-2 ring-primary ring-inset`),onClick:()=>Y(e),"data-testid":`record-row-${n}`,"aria-selected":i,children:[r&&(0,g.jsx)(p.TableCell,{className:`w-10`,children:i&&(0,g.jsx)(m.Check,{className:`size-4 text-primary`})}),I.map(t=>(0,g.jsx)(p.TableCell,{className:`py-2.5`,children:xe(e,t)},t.field))]},n??t)})})]})]}),!V&&H>0&&(0,g.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,g.jsxs)(`span`,{children:[H===1?w(`lookup.recordCountOne`):w(`lookup.recordCount`,{count:H}),U>1&&` · ${w(`lookup.pageOf`,{current:G,total:U})}`]}),U>1&&(0,g.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,g.jsx)(p.Button,{variant:`outline`,size:`icon`,className:`size-7`,onClick:le,disabled:G<=1,type:`button`,"aria-label":w(`lookup.prevPage`),children:(0,g.jsx)(m.ChevronLeft,{className:`size-4`})}),(0,g.jsx)(p.Input,{className:`h-7 w-12 text-center text-xs px-1`,placeholder:String(G),value:F,onChange:e=>ie(e.target.value),onKeyDown:ge,"aria-label":w(`lookup.jumpToPage`),"data-testid":`record-picker-page-jump`}),(0,g.jsx)(p.Button,{variant:`outline`,size:`icon`,className:`size-7`,onClick:de,disabled:G>=U,type:`button`,"aria-label":w(`lookup.nextPage`),children:(0,g.jsx)(m.ChevronRight,{className:`size-4`})})]})]})]}),r&&(0,g.jsx)(p.DialogFooter,{children:(0,g.jsxs)(`div`,{className:`flex items-center gap-2 w-full justify-between`,children:[(0,g.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:w(`table.selected`,{count:T.size})}),(0,g.jsxs)(`div`,{className:`flex gap-2`,children:[(0,g.jsx)(p.Button,{variant:`outline`,type:`button`,onClick:()=>t(!1),children:w(`common.cancel`)}),(0,g.jsx)(p.Button,{type:`button`,onClick:X,children:w(`common.confirm`)})]})]})})]})})}var _e,ve,ye,be=o((()=>{A(),de(),_e=10,ve=60,ye=5}));function xe(e,t){if(!(!e||!t))return t.includes(`.`)?t.split(`.`).reduce((e,t)=>e==null?e:e[t],e):e[t]}function Se(e,t=`name`){return e==null?``:String(typeof e==`object`?e[t]??e.name??e.username??e.label??``:e)}function Ce(e){let t=(e||``).trim();if(!t)return`?`;let n=t.split(/\s+/).filter(Boolean);if(n.length>=2)return(n[0][0]+n[n.length-1][0]).toUpperCase();let r=n[0];return/[㐀-鿿]/.test(r)?r.length<=2?r:r.slice(-2):r.slice(0,2).toUpperCase()}function we(e,t){return!e||!t||t.length===0?``:t.map(t=>xe(e,t)).filter(e=>e!=null&&e!==``).map(e=>String(e)).join(` · `)}function Z(e,t=`image`){let n=e?xe(e,t):void 0;return n?String(n):void 0}function Q(e,t=`id`){return!e||typeof e!=`object`?e:e[t]??e.id??e._id}function Te(e,t){let n=e??``,r=(t??``).trim().toLowerCase();if(!r||!n)return[];let i=n.toLowerCase(),a=[],o=0;for(;;){let e=i.indexOf(r,o);if(e===-1)break;a.push([e,e+r.length]),o=e+r.length}return a}var Ee=o((()=>{}));function De({text:e,query:t}){let n=t?Te(e,t):[];if(n.length===0)return(0,g.jsx)(g.Fragment,{children:e});let r=[],i=0;return n.forEach(([t,n],a)=>{t>i&&r.push(e.slice(i,t)),r.push((0,g.jsx)(`mark`,{className:`rounded-[2px] bg-primary/20 px-px text-inherit`,children:e.slice(t,n)},a)),i=n}),i<e.length&&r.push(e.slice(i)),(0,g.jsx)(g.Fragment,{children:r})}function Oe({record:e,displayField:t=`name`,subtitleFields:n,avatarField:r=`image`,selected:i=!1,active:a=!1,highlightQuery:o,onSelect:s,className:c}){let l=Se(e,t),d=we(e,n),f=Z(e,r),h=Ce(l),_=(0,u.useRef)(null);return(0,u.useEffect)(()=>{a&&_.current?.scrollIntoView?.({block:`nearest`})},[a]),(0,g.jsxs)(`button`,{ref:_,type:`button`,tabIndex:-1,onClick:()=>s?.(e),"aria-pressed":i,"data-testid":`person-row`,"data-active":a||void 0,className:(0,p.cn)(`flex w-full items-center gap-3 rounded-md px-2 py-1.5 text-left transition-colors`,`hover:bg-accent focus-visible:outline-none`,i&&`bg-accent`,a&&`bg-accent ring-1 ring-inset ring-ring`,c),children:[(0,g.jsxs)(p.Avatar,{className:`size-9 shrink-0`,children:[f&&(0,g.jsx)(p.AvatarImage,{src:f,alt:l}),(0,g.jsx)(p.AvatarFallback,{className:`text-xs`,children:h})]}),(0,g.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,g.jsx)(`div`,{className:`truncate text-sm font-medium`,children:l?(0,g.jsx)(De,{text:l,query:o}):`—`}),d&&(0,g.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:(0,g.jsx)(De,{text:d,query:o})})]}),i&&(0,g.jsx)(m.Check,{className:`size-4 shrink-0 text-primary`,"aria-hidden":!0})]})}var ke=o((()=>{Ee()}));function Ae({records:e,onRemove:t,displayField:n=`name`,avatarField:r=`image`,idField:i=`id`,label:a,onClear:o,clearLabel:s,emptyText:c,className:l}){let u=!!a||!!o&&e.length>0;return(0,g.jsxs)(`div`,{className:(0,p.cn)(`flex flex-col gap-1.5`,l),"data-testid":`selection-tray`,children:[u&&(0,g.jsxs)(`div`,{className:`flex items-center justify-between`,children:[a&&(0,g.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:a}),o&&e.length>0&&(0,g.jsx)(`button`,{type:`button`,onClick:o,className:`text-xs text-muted-foreground transition-colors hover:text-foreground`,"data-testid":`selection-clear`,children:s??`Clear all`})]}),e.length===0?(0,g.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:c??``}):(0,g.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:e.map(e=>{let a=Q(e,i),o=Se(e,n),s=Z(e,r),c=Ce(o);return(0,g.jsxs)(`span`,{"data-testid":`selection-chip`,className:`inline-flex items-center gap-1.5 rounded-full border bg-background py-0.5 pl-0.5 pr-1.5 text-sm`,children:[(0,g.jsxs)(p.Avatar,{className:`size-6 shrink-0`,children:[s&&(0,g.jsx)(p.AvatarImage,{src:s,alt:o}),(0,g.jsx)(p.AvatarFallback,{className:`text-[10px]`,children:c})]}),(0,g.jsx)(`span`,{className:`max-w-[10rem] truncate`,children:o||`—`}),(0,g.jsx)(`button`,{type:`button`,onClick:()=>t(a),"aria-label":`Remove ${o}`,className:`rounded-full p-0.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground`,children:(0,g.jsx)(m.X,{className:`size-3.5`,"aria-hidden":!0})})]},String(a))})})]})}var je=o((()=>{Ee()}));function Me(){try{return typeof localStorage<`u`?localStorage:null}catch{return null}}function Ne(e){let t=Me();if(!e||!t)return[];try{let n=t.getItem(Fe+e);if(!n)return[];let r=JSON.parse(n);return Array.isArray(r)?r.slice(0,Ie):[]}catch{return[]}}function Pe(e,t){let n=Me();if(!(!e||t==null||t===``||!n))try{let r=[t,...Ne(e).filter(e=>e!==t)].slice(0,Ie);n.setItem(Fe+e,JSON.stringify(r))}catch{}}var Fe,Ie,Le=o((()=>{Fe=`objectui:lookup:recent:`,Ie=5}));function Re({open:e,onOpenChange:t,title:n,multiple:r=!1,dataSource:i,objectName:a,displayField:o=`name`,idField:s=`id`,subtitleFields:c,avatarField:l=`image`,expand:d,searchFields:f,pageSize:h=ze,lookupFilters:_,baseFilter:v,value:y,onSelect:b,onSelectRecords:x,inline:S=!1,trigger:C}){let{t:w}=te(),T=(0,p.useIsMobile)(),E=(0,u.useMemo)(()=>{let e={..._?.length?me(_):{},...v??{}};return Object.keys(e).length>0?e:void 0},[_,v]),ee=(0,u.useMemo)(()=>{if(d&&d.length)return d;let e=new Set;return(c??[]).forEach(t=>{t.includes(`.`)&&e.add(t.split(`.`)[0])}),e.size?Array.from(e):void 0},[d,c]),D=ue({dataSource:i,objectName:a,enabled:e,pageSize:h,filter:E,expand:ee,searchFields:f}),O=(0,u.useMemo)(()=>e?Ne(a):[],[e,a]),k=(0,u.useMemo)(()=>r?Array.isArray(y)?y:[]:y!=null&&y!==``?[y]:[],[r,y]),A=(0,u.useMemo)(()=>Array.from(new Set([...k,...O].map(e=>e))),[k,O]),ne=ue({dataSource:i,objectName:a,enabled:e&&A.length>0,pageSize:Math.max(1,A.length),filter:{[s]:{$in:A}},expand:ee}),j=(0,u.useMemo)(()=>{let e=new Map;for(let t of ne.records)e.set(String(Q(t,s)),t);return e},[ne.records,s]),[M,N]=(0,u.useState)([]),re=(0,u.useRef)(!1),P=(0,u.useRef)(!1);(0,u.useEffect)(()=>{e||(re.current=!1,P.current=!1,N([]))},[e]),(0,u.useEffect)(()=>{if(!e||re.current)return;if(k.length===0){re.current=!0;return}if(ne.loading){P.current=!0;return}if(!P.current)return;let t=k.map(e=>j.get(String(e))).filter(Boolean);N(t),re.current=!0},[e,k,ne.loading,j]);let F=(0,u.useMemo)(()=>new Set(M.map(e=>String(Q(e,s)))),[M,s]),ie=(0,u.useCallback)((e,n)=>{b(r?e:e[0]??null),x?.(n),e.forEach(e=>Pe(a,e)),t(!1)},[r,a,b,x,t]),I=(0,u.useCallback)(e=>{b(e.map(e=>Q(e,s))),x?.(e)},[b,x,s]),L=(0,u.useCallback)(e=>{let t=Q(e,s);if(!r){ie([t],[e]);return}let n=String(t),i=M.some(e=>String(Q(e,s))===n),o=i?M.filter(e=>String(Q(e,s))!==n):[...M,e];N(o),S&&(i||Pe(a,t),I(o))},[r,s,ie,M,S,a,I]),R=(0,u.useCallback)(e=>{let t=String(e),n=M.filter(e=>String(Q(e,s))!==t);N(n),S&&I(n)},[s,M,S,I]),z=(0,u.useCallback)(()=>{ie(M.map(e=>Q(e,s)),M)},[ie,M,s]),B=D.search.trim().length>0,V=(0,u.useMemo)(()=>B?[]:O.map(e=>j.get(String(e))).filter(Boolean),[B,O,j]),H=(0,u.useMemo)(()=>{if(B)return D.records;let e=new Set(O.map(String));return D.records.filter(t=>!e.has(String(Q(t,s))))},[B,D.records,O,s]),U=(0,u.useMemo)(()=>[...V,...H],[V,H]),[W,G]=(0,u.useState)(-1),K=(0,u.useMemo)(()=>D.records.map(e=>String(Q(e,s))).join(`\0`),[D.records,s]);(0,u.useEffect)(()=>{G(-1)},[D.search,K]),(0,u.useEffect)(()=>{G(e=>e>=U.length?U.length-1:e)},[U.length]);let ae=(0,u.useCallback)(e=>{e.key===`ArrowDown`?(e.preventDefault(),G(e=>U.length?Math.min(U.length-1,e+1):-1)):e.key===`ArrowUp`?(e.preventDefault(),G(e=>Math.max(0,e-1))):e.key===`Enter`?W>=0&&W<U.length&&(e.preventDefault(),L(U[W])):e.key===`Backspace`&&D.search.length===0&&r&&M.length>0&&R(Q(M[M.length-1],s))},[U,W,L,D.search,r,M,R,s]),q=D.loading&&!D.error&&D.records.length===0&&V.length===0,oe=D.loading&&!q,se=!D.loading&&!D.error&&H.length===0&&V.length===0,J=(e,t)=>{let n=Q(e,s);return(0,g.jsx)(Oe,{record:e,displayField:o,subtitleFields:c,avatarField:l,selected:F.has(String(n)),active:t===W,highlightQuery:D.search,onSelect:L},String(n))},ce=n||w(`lookup.selectRecord`),Y=(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(`div`,{className:`relative`,children:[(0,g.jsx)(m.Search,{className:`pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground`,"aria-hidden":!0}),(0,g.jsx)(p.Input,{autoFocus:!T,value:D.search,onChange:e=>D.setSearch(e.target.value),onKeyDown:ae,placeholder:w(`table.search`),className:`px-8`,role:`combobox`,"aria-expanded":!0,"aria-controls":`people-picker-list`,"data-testid":`people-picker-search`}),D.loading&&(0,g.jsx)(m.Loader2,{className:`pointer-events-none absolute right-2.5 top-1/2 size-4 -translate-y-1/2 animate-spin text-muted-foreground`,"aria-hidden":!0})]}),(0,g.jsx)(p.ScrollArea,{className:`min-h-0 flex-1`,"data-testid":`people-picker-list`,children:(0,g.jsx)(`div`,{id:`people-picker-list`,role:`listbox`,"aria-busy":D.loading,className:(0,p.cn)(`flex flex-col gap-0.5 pr-2 transition-opacity`,oe&&`opacity-70`),children:D.error?(0,g.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-8 text-center text-sm text-muted-foreground`,children:[(0,g.jsx)(m.AlertCircle,{className:`size-5 text-destructive`,"aria-hidden":!0}),(0,g.jsx)(`span`,{className:`max-w-xs`,children:D.error}),(0,g.jsx)(p.Button,{type:`button`,variant:`outline`,size:`sm`,onClick:D.refetch,children:w(`lookup.retry`)})]}):q?Array.from({length:Be}).map((e,t)=>(0,g.jsxs)(`div`,{className:`flex items-center gap-3 px-2 py-1.5`,children:[(0,g.jsx)(p.Skeleton,{className:`size-9 shrink-0 rounded-full`}),(0,g.jsxs)(`div`,{className:`flex-1 space-y-1.5`,children:[(0,g.jsx)(p.Skeleton,{className:`h-3 w-1/3`}),(0,g.jsx)(p.Skeleton,{className:`h-2.5 w-1/2`})]})]},t)):(0,g.jsxs)(g.Fragment,{children:[V.length>0&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`div`,{className:`px-2 py-1 text-xs font-medium text-muted-foreground`,children:w(`lookup.recentlyUsed`)}),V.map((e,t)=>J(e,t)),H.length>0&&(0,g.jsxs)(`div`,{className:`mt-1 flex items-center gap-1.5 px-2 py-1 text-xs font-medium text-muted-foreground`,children:[(0,g.jsx)(`span`,{children:w(`lookup.allResults`)}),(0,g.jsxs)(`span`,{className:`font-normal opacity-70`,children:[`· `,D.total]})]})]}),H.map((e,t)=>J(e,V.length+t)),se&&(0,g.jsx)(`div`,{className:`py-8 text-center text-sm text-muted-foreground`,children:w(`lookup.noRecords`)})]})})}),r&&!S&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(Ae,{records:M,onRemove:R,onClear:()=>N([]),clearLabel:w(`lookup.clear`),displayField:o,avatarField:l,idField:s,label:w(`table.selected`,{count:M.length}),className:(0,p.cn)(`border-t pt-3`)}),(0,g.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,g.jsx)(p.Button,{type:`button`,variant:`outline`,onClick:()=>t(!1),children:w(`common.cancel`)}),(0,g.jsx)(p.Button,{type:`button`,onClick:z,children:w(`common.confirm`)})]})]})]});return S?T?(0,g.jsxs)(p.Sheet,{open:e,onOpenChange:t,children:[(0,g.jsx)(p.SheetTrigger,{asChild:!0,children:C}),(0,g.jsxs)(p.SheetContent,{side:`bottom`,className:`flex h-[85vh] flex-col gap-3`,"data-testid":`people-picker-sheet`,children:[(0,g.jsx)(p.SheetHeader,{className:`text-left`,children:(0,g.jsx)(p.SheetTitle,{children:ce})}),Y]})]}):(0,g.jsxs)(p.Popover,{open:e,onOpenChange:t,children:[(0,g.jsx)(p.PopoverTrigger,{asChild:!0,children:C}),(0,g.jsx)(p.PopoverContent,{align:`start`,className:`flex max-h-[min(28rem,60vh)] w-[var(--radix-popover-trigger-width)] min-w-72 flex-col gap-3 p-3`,"data-testid":`people-picker-inline`,children:Y})]}):T?(0,g.jsx)(p.Sheet,{open:e,onOpenChange:t,children:(0,g.jsxs)(p.SheetContent,{side:`bottom`,className:`flex h-[85vh] flex-col gap-3`,"data-testid":`people-picker-sheet`,children:[(0,g.jsx)(p.SheetHeader,{className:`text-left`,children:(0,g.jsx)(p.SheetTitle,{children:ce})}),Y]})}):(0,g.jsx)(p.Dialog,{open:e,onOpenChange:t,children:(0,g.jsxs)(p.DialogContent,{className:`flex max-h-[80vh] flex-col gap-3 sm:max-w-lg`,"data-testid":`people-picker-dialog`,children:[(0,g.jsx)(p.DialogHeader,{children:(0,g.jsx)(p.DialogTitle,{children:ce})}),Y]})})}var ze,Be,Ve=o((()=>{de(),be(),Ee(),ke(),je(),Le(),A(),ze=25,Be=6}));function He(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function Ue(e,{displayField:t,max:n=4}){let r=e?.fields??{},i=e=>r[e]??{},a=e=>{let t=i(e);return{field:e,...t.label?{label:t.label}:{},...t.type?{type:t.type}:{}}};if(Object.keys(r).length===0)return[];let o=e=>!Array.isArray(e)||e.length===0?null:He([t,...e.filter(e=>typeof e==`string`&&e.length>0).filter(e=>e!==t)]).slice(0,n).map(a);return o(e?.highlightFields)||o(e?.displayFields)||He([t,...Object.keys(r).filter(e=>{if(e===t||We.has(e))return!1;let n=i(e);return!(n.hidden||n.type&&Ge.has(n.type))})]).slice(0,n).map(a)}var We,Ge,Ke=o((()=>{We=new Set([`id`,`_id`,`created`,`modified`,`created_at`,`updated_at`,`created_by`,`updated_by`,`modified_by`,`owner_id`,`organization_id`,`space`,`company_id`,`instance_state`,`locked`,`is_deleted`,`deleted`]),Ge=new Set([`json`,`object`,`grid`,`html`,`richtext`,`markdown`,`code`,`image`,`file`,`avatar`,`vector`,`location`,`geometry`,`textarea`,`secret`,`password`,`encrypted`])}));function qe(e){Ye=e}function Je(){return Ye}var Ye,Xe=o((()=>{})),Ze=s({LookupField:()=>rt});function Qe(e){return!!e&&!ot.test(e)&&!st.has(e)}function $e(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 et(e,t,n,r,i,a){let o=e[n]??e.id??e._id??e.externalId,s=i?$e(e,i):null,c;if(a){let t=(0,d.getRecordDisplayName)(a,e),n=e?.id??e?._id;t===`Untitled`||n!=null&&t===`Record #${n}`||(c=t)}let l=s??e[t]??c??e.label??e.name??e.full_name??e.title??e.subject??e.externalId??String(o),u=r?e[r]:void 0;return{value:o,label:String(l),description:u,...e}}function tt(e){if(typeof e!=`string`)return null;let t=e.trim();if(!t.startsWith(`{`)||!t.endsWith(`}`))return null;try{let e=JSON.parse(t);return e&&typeof e==`object`&&!Array.isArray(e)?e:null}catch{return null}}function nt(e){return{text:`text`,number:`number`,currency:`number`,percent:`number`,select:`select`,status:`select`,date:`date`,datetime:`date`,boolean:`boolean`}[e]}function rt({value:e,onChange:t,field:n,readonly:r,...i}){let[a,o]=(0,u.useState)(!1),{t:s}=te(),c=u.default.useId(),[l,d]=(0,u.useState)(null),[f,_]=(0,u.useState)([]),[v,y]=(0,u.useState)(-1),b=(0,u.useRef)(null),x=n||i.schema,S=x?.field,C=S&&typeof S==`object`&&(`reference_to`in S||`reference`in S||`type`in S)?S:x,w=C?.options||[],T=C?.multiple||!1,E=C?.display_field||C?.displayField||C?.reference_field||`name`,ee=C?.description_field??C?.descriptionField,D=C?.id_field||`id`,O=C?.reference_to||C?.reference,k=C?.allow_create??C?.allowCreate,A=k==null?Qe(O):!!k,ne=C?.lookup_columns??C?.lookupColumns,j=C?.lookup_page_size??C?.lookupPageSize,M=C?.lookup_filters??C?.lookupFilters,N=C?.picker,re=C?.subtitle,P=C?.avatar_field??C?.avatarField??`image`,F=(0,u.useMemo)(()=>{let e=C?.depends_on??C?.dependsOn;return e&&Array.isArray(e)?e.map(e=>typeof e==`string`?{field:e,param:e}:{field:e.field,param:e.param??e.field}):[]},[C?.depends_on,C?.dependsOn]),ie=i.dependentValues,I=(0,u.useContext)(at),L=I?.dataSource??null,R=i.dataSource??x?.dataSource??C?.dataSource??L,z=(0,u.useMemo)(()=>ie||(I?.formValues??I?.data??{}),[ie,I?.formValues,I?.data]),B=(0,u.useMemo)(()=>F.length!==0&&F.some(({field:e})=>{let t=z[e];return t==null||t===``||Array.isArray(t)&&t.length===0}),[F,z]),V=R!=null&&typeof R.find==`function`&&!!O,[H,U]=(0,u.useState)(null);(0,u.useEffect)(()=>{if(!R||!O)return;let e=R.getObjectSchema;if(typeof e!=`function`)return;let t=!0;return Promise.resolve(e.call(R,O)).then(e=>{t&&U(e)}).catch(()=>{}),()=>{t=!1}},[R,O]);let W=(0,u.useMemo)(()=>{let e=H?.titleFormat;return typeof e==`string`?e:e&&typeof e==`object`&&typeof e.source==`string`?e.source:null},[H]),G=(0,u.useMemo)(()=>{if(ne&&ne.length>0)return ne;let e=Ue(H,{displayField:E});return e.length>0?e:void 0},[ne,H,E]),K=(0,u.useMemo)(()=>{if(ee)return ee;let e=G?.find(e=>(typeof e==`string`?e:e.field)!==E);if(e)return typeof e==`string`?e:e.field},[ee,G,E]),ae=(0,u.useMemo)(()=>{if(!G)return;let e=[];for(let t of G)if(typeof t==`object`&&t.type){let n=nt(t.type);n&&e.push({field:t.field,label:t.label,type:n})}return e.length>0?e:void 0},[G]),q=i.onCreateNew??x?.onCreateNew,[oe,se]=(0,u.useState)(!1),J=(0,u.useMemo)(()=>{let e={};for(let{field:t,param:n}of F){let r=z[t];r==null||r===``||(e[n]=typeof r==`number`?r:String(r))}return Object.keys(e).length>0?e:void 0},[F,z]),ce=(0,u.useMemo)(()=>{let e={...M&&M.length>0?me(M):{},...J??{}};return Object.keys(e).length>0?e:void 0},[J,M]),Y=ue({dataSource:R,objectName:O,enabled:a&&V&&!B,pageSize:it,filter:ce}),X=Y.search,le=Y.loading,de=Y.total,fe=Y.error??l,pe=(0,u.useMemo)(()=>Y.records.map(e=>et(e,E,D,K,W,H)),[Y.records,E,D,K,W,H]),he=V?pe:w,_e=(0,u.useMemo)(()=>{if(V||!X)return he;let e=X.toLowerCase();return he.filter(t=>t.label.toLowerCase().includes(e)||t.description&&t.description.toLowerCase().includes(e))},[V,he,X]);(0,u.useEffect)(()=>{y(-1)},[_e.length]),(0,u.useEffect)(()=>{a||y(-1)},[a]);let ve=(0,u.useCallback)(e=>Y.setSearch(e),[Y.setSearch]);(0,u.useEffect)(()=>{if(!V||!R||!O)return;let t=(T?Array.isArray(e)?e:[]:e!=null&&e!==``?[e]:[]).filter(e=>e!=null&&e!==``&&typeof e!=`object`&&!tt(e));if(!t.length)return;let n=t.filter(e=>!ye(e));if(!n.length)return;let r=!1;return(async()=>{try{let e=[];for(let t of n)if(typeof R.findOne==`function`){let n=await R.findOne(O,t);n&&e.push(et(n,E,D,K,W,H))}else{let n=await R.find(O,{$filter:{[D]:t},$top:1}),r=n?.data??n??[];r[0]&&e.push(et(r[0],E,D,K,W,H))}!r&&e.length&&_(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,V,O,E,D,K,T]);let ye=(0,u.useCallback)(e=>w.find(t=>t.value===e)??pe.find(t=>t.value===e)??f.find(t=>t.value===e),[w,pe,f]),be=(0,u.useCallback)(e=>{let t=String(e);return w.find(e=>String(e.value)===t)??pe.find(e=>String(e.value)===t)??f.find(e=>String(e.value)===t)},[w,pe,f]),xe=(0,u.useCallback)(e=>{let t=typeof e==`object`&&e?e:tt(e);return t?t[D]??t.id??t._id??t.externalId:e},[D]),Se=(0,u.useMemo)(()=>T?Array.isArray(e)?e.map(xe):[]:xe(e),[T,e,xe]),we=(0,u.useCallback)(e=>{if(e==null||e===``)return;let t=typeof e==`object`?e:tt(e);return t?et(t,E,D,K,W,H):ye(e)??be(e)},[ye,be,E,D,K,W,H]),Z=T?(Array.isArray(e)?e:[]).map(we).filter(Boolean):e?[we(e)].filter(Boolean):[],Q=i.onSelectRecord,Te=(0,u.useCallback)(n=>{if(n&&n.value!=null&&_(e=>{let t=new Map(e.map(e=>[e.value,e]));return t.set(n.value,n),Array.from(t.values())}),T){let r=(Array.isArray(e)?e:[]).map(xe);r.includes(n.value)?t(r.filter(e=>e!==n.value)):(O&&Pe(O,n.value),t([...r,n.value]))}else O&&Pe(O,n.value),Q?Q(n):t(n.value),o(!1)},[T,e,t,Q,O,xe]),Ee=n=>{t(T?(Array.isArray(e)?e:[]).map(xe).filter(e=>e!==n):null)},De=(0,u.useCallback)(e=>{let t=e.map(e=>et(e,E,D,K,W,H));O&&t.forEach(e=>Pe(O,e.value)),_(t)},[E,D,K,W,O]),[Oe,ke]=(0,u.useState)([]);(0,u.useEffect)(()=>{if(!a||!V||!R||!O||X)return;let e=Ne(O);if(!e.length){ke([]);return}let t=!1;return(async()=>{try{let n=[];for(let t of e){let e=ye(t);if(e){n.push(e);continue}if(typeof R.findOne==`function`){let e=await R.findOne(O,t);e&&n.push(et(e,E,D,K,W,H))}}t||ke(n)}catch{t||ke([])}})(),()=>{t=!0}},[a,V,O,X]);let Ae=!X&&V?Oe.length:0,je=(0,u.useMemo)(()=>{if(X||!V||Oe.length===0)return _e;let e=new Set(Oe.map(e=>e.value));return[...Oe,..._e.filter(t=>!e.has(t.value))]},[X,V,Oe,_e]);(0,u.useEffect)(()=>{y(-1)},[je.length]);let[Me,Fe]=(0,u.useState)(!1),{execute:Ie}=(0,h.useAction)(),Le=(0,h.useHasActionProvider)(),ze=!!q||A&&(Le||V),Be=(0,u.useCallback)(async e=>{let t=(e||``).trim();if(q){q(t),o(!1);return}if(!(!A||!O)){if(d(null),Le){o(!1),await new Promise(e=>setTimeout(e,0));let e=await Ie({type:`modal`,modal:{objectName:O,mode:`create`}});if(e?.success&&e.data){let t=et(e.data,E,D,K,W,H);_(e=>[t,...e.filter(e=>e.value!==t.value)]),Te(t);return}if(!(e?.success&&e.modal))return}if(!(!R||!t)){Fe(!0);try{let e=et(await R.create(O,{[E]:t}),E,D,K,W,H);_(t=>[e,...t.filter(t=>t.value!==e.value)]),Te(e)}catch(e){d(e instanceof Error?e.message:String(e))}finally{Fe(!1)}}}},[q,A,O,Le,Ie,R,E,D,K,W,H,Te]),Ve=(0,u.useCallback)(e=>{if(!G||G.length===0)return;let t=[];for(let n of G){let r=typeof n==`string`?n:n.field;if(r===E)continue;let i=e[r];if(i==null||i===``)continue;let a=typeof n==`string`?r:n.label||r,o=typeof i==`object`?i.name??i.label??JSON.stringify(i):i;t.push(`${a}: ${o}`)}return t.length?t.join(` · `):void 0},[G,E]),He=(0,u.useCallback)(e=>{e.key===`ArrowDown`?(e.preventDefault(),y(e=>e<je.length-1?e+1:e)):e.key===`ArrowUp`?(e.preventDefault(),y(e=>e>0?e-1:0)):e.key===`Enter`&&(e.preventDefault(),v>=0&&v<je.length&&Te(je[v]))},[je,v,Te]);if((0,u.useEffect)(()=>{v>=0&&b.current&&b.current.querySelector(`[data-lookup-index="${v}"]`)?.scrollIntoView({block:`nearest`})},[v]),r)return Z.length?T?(0,g.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:Z.map((e,t)=>(0,g.jsx)(p.Badge,{variant:`outline`,children:e?.label||e?.[E]},t))}):(0,g.jsx)(`span`,{className:`text-sm`,children:Z[0]?.label||Z[0]?.[E]}):(0,g.jsx)(p.EmptyValue,{});let We=!!i.compact,Ge=Z[0]?.label||Z[0]?.[E],Ke=(0,g.jsxs)(p.Button,{variant:`outline`,className:(0,p.cn)(`min-w-0 flex-1 justify-start text-left font-normal`,We&&`h-8 rounded-none border-0 bg-transparent px-2 shadow-none focus-visible:ring-1 focus-visible:ring-ring/60`),type:`button`,disabled:B||i.disabled,"data-testid":B?`lookup-trigger-gated`:i.name||x?.name?`lookup-trigger-${i.name||x.name}`:`lookup-trigger`,title:B?s(`lookup.selectFirst`,{fields:F.map(e=>e.field).join(`, `)}):void 0,children:[(0,g.jsx)(m.Search,{className:(0,p.cn)(`size-4 shrink-0 text-muted-foreground`,We?`mr-1.5`:`mr-2`)}),(0,g.jsx)(`span`,{className:(0,p.cn)(`truncate`,We&&Z.length===0&&`text-muted-foreground`),children:B?s(`lookup.selectFirst`,{fields:F.map(e=>e.field).join(`, `)}):We&&!T&&Z.length>0?Ge:Z.length===0?x?.placeholder||s(`common.select`):T?s(`table.selected`,{count:Z.length}):s(`common.select`)})]});return(0,g.jsxs)(`div`,{className:We?``:`space-y-2`,children:[Z.length>0&&!We&&(0,g.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:Z.map((e,t)=>{let n=e?.label||e?.[E];if(N===`search`){let r=e?.[P]||e?.image;return(0,g.jsxs)(`span`,{"data-testid":`people-field-chip`,className:`inline-flex items-center gap-1.5 rounded-full border bg-background py-0.5 pl-0.5 pr-1.5 text-sm`,children:[(0,g.jsxs)(p.Avatar,{className:`size-6 shrink-0`,children:[r&&(0,g.jsx)(p.AvatarImage,{src:r,alt:String(n||``)}),(0,g.jsx)(p.AvatarFallback,{className:`text-[10px]`,children:Ce(String(n||``))})]}),(0,g.jsx)(`span`,{className:`max-w-[10rem] truncate`,children:n}),(0,g.jsx)(`button`,{onClick:()=>Ee(e?.value),className:`rounded-full p-0.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground`,type:`button`,"aria-label":s(`lookup.remove`,{label:n}),children:(0,g.jsx)(m.X,{className:`size-3`})})]},t)}return(0,g.jsxs)(p.Badge,{variant:`outline`,className:`gap-1`,children:[n,(0,g.jsx)(`button`,{onClick:()=>Ee(e?.value),className:`ml-1 hover:text-destructive`,type:`button`,"aria-label":s(`lookup.remove`,{label:n}),children:(0,g.jsx)(m.X,{className:`size-3`})})]},t)})}),N===`search`&&V&&R&&O?(0,g.jsx)(Re,{inline:!0,trigger:Ke,open:oe,onOpenChange:se,title:x?.label||s(`common.select`),multiple:T,dataSource:R,objectName:O,displayField:E,idField:D,subtitleFields:re,avatarField:P,pageSize:j,value:Se,onSelect:t,onSelectRecords:De,lookupFilters:M,baseFilter:J}):(0,g.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,g.jsxs)(p.Popover,{open:a,onOpenChange:e=>{B||o(e)},children:[(0,g.jsx)(p.PopoverTrigger,{asChild:!0,children:Ke}),(0,g.jsxs)(p.PopoverContent,{className:`w-[var(--radix-popover-trigger-width)] p-0`,align:`start`,children:[(0,g.jsx)(`div`,{className:`p-2`,children:(0,g.jsxs)(`div`,{className:`relative`,children:[(0,g.jsx)(m.Search,{className:`absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground`}),(0,g.jsx)(p.Input,{placeholder:s(`common.search`)+`...`,value:X,onChange:e=>ve(e.target.value),onKeyDown:He,className:`w-full pl-9 h-8 text-sm`,role:`combobox`,"aria-autocomplete":`list`,"aria-controls":c,"aria-expanded":a,"aria-activedescendant":v>=0?`${c}-opt-${v}`:void 0}),le&&(0,g.jsx)(m.Loader2,{className:`absolute right-3 top-1/2 -translate-y-1/2 size-4 animate-spin text-muted-foreground`,"data-testid":`lookup-loading`})]})}),fe&&(0,g.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-4 px-2`,role:`alert`,children:[(0,g.jsx)(m.AlertCircle,{className:`size-5 text-destructive`}),(0,g.jsx)(`p`,{className:`text-sm text-destructive`,children:fe}),(0,g.jsx)(p.Button,{variant:`outline`,size:`sm`,onClick:()=>Y.refetch(),type:`button`,children:s(`lookup.retry`)})]}),le&&_e.length===0&&!fe&&(0,g.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-6`,role:`status`,"aria-live":`polite`,children:[(0,g.jsx)(m.Loader2,{className:`size-6 animate-spin text-muted-foreground`}),(0,g.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:s(`lookup.loading`)})]}),!fe&&!(le&&_e.length===0)&&(0,g.jsx)(`div`,{ref:b,className:`max-h-64 overflow-y-auto px-1 pb-1`,role:`listbox`,id:c,children:je.length===0?(0,g.jsxs)(`div`,{className:`py-4 text-center`,children:[(0,g.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:s(`lookup.noOptions`)}),ze&&(0,g.jsxs)(p.Button,{variant:`ghost`,size:`sm`,className:`mt-2 gap-1`,type:`button`,disabled:Me,onClick:()=>Be(X),children:[Me?(0,g.jsx)(m.Loader2,{className:`size-4 animate-spin`}):(0,g.jsx)(m.Plus,{className:`size-4`}),X?s(`lookup.createNamed`,{name:X}):s(`lookup.createNew`)]})]}):(0,g.jsxs)(g.Fragment,{children:[je.map((t,n)=>{let r=T?(Array.isArray(e)?e:[]).map(xe).includes(t.value):xe(e)===t.value,i=n===v,a=Ae>0&&n===0,o=Ae>0&&n===Ae;return(0,g.jsxs)(u.default.Fragment,{children:[a&&(0,g.jsx)(`div`,{className:`px-3 pt-2 pb-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground`,children:s(`lookup.recentlyUsed`)}),o&&(0,g.jsx)(`div`,{className:`mt-1 border-t px-3 pt-2 pb-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground`,children:s(`lookup.allResults`)}),(0,g.jsxs)(`button`,{id:`${c}-opt-${n}`,"data-lookup-index":n,role:`option`,"aria-selected":r,title:Ve(t),onClick:()=>Te(t),className:`w-full text-left px-3 py-2 rounded-md text-sm hover:bg-accent flex items-center justify-between ${i?`bg-accent text-accent-foreground`:r?`bg-accent/50 text-accent-foreground`:``}`,type:`button`,children:[(0,g.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,g.jsx)(`span`,{className:`block truncate`,children:t.label}),t.description&&(0,g.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:t.description})]}),r&&(0,g.jsx)(p.Badge,{variant:`default`,className:`ml-2 shrink-0`,children:s(`lookup.selectedBadge`)})]})]},t.value)}),V&&de>_e.length&&(0,g.jsx)(`p`,{className:`text-xs text-muted-foreground text-center py-2`,children:s(`lookup.showingResults`,{shown:_e.length,total:de})}),V&&de>_e.length&&(0,g.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),se(!0)},"data-testid":`show-all-results`,children:[(0,g.jsx)(m.TableProperties,{className:`size-3.5`}),s(`lookup.showAllResults`,{count:de})]}),ze&&(0,g.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`,disabled:Me,onClick:()=>Be(X),children:[Me?(0,g.jsx)(m.Loader2,{className:`size-3.5 animate-spin`}):(0,g.jsx)(m.Plus,{className:`size-3.5`}),X?s(`lookup.createNamed`,{name:X}):s(`lookup.createNew`)]})]})})]})]}),V&&N!==`search`&&(0,g.jsx)(p.Button,{variant:`outline`,size:`icon`,className:`shrink-0`,type:`button`,disabled:B||i.disabled,onClick:()=>se(!0),"aria-label":s(`lookup.browseAll`),title:B?s(`lookup.selectFirst`,{fields:F.map(e=>e.field).join(`, `)}):s(`lookup.browseAll`),"data-testid":`browse-all-records`,children:(0,g.jsx)(m.TableProperties,{className:`size-4`})})]}),V&&R&&O&&N!==`search`&&(0,g.jsx)(ge,{open:oe,onOpenChange:se,title:x?.label||s(`common.select`),multiple:T,dataSource:R,objectName:O,columns:G,displayField:E,titleFormat:W,idField:D,pageSize:j,value:Se,onSelect:t,onSelectRecords:De,lookupFilters:M,baseFilter:J,cellRenderer:Je(),filterColumns:ae})]})}var it,at,ot,st,ct=o((()=>{be(),Ve(),de(),Ke(),Le(),Ee(),Xe(),A(),it=50,at=h.SchemaRendererContext,ot=/^(sys_|cloud_|ai_)/,st=new Set([`user`,`users`])}));C(),E(),O(),M(),ie(),R(),V(),W(),oe(),ce(),le(),ct(),A();function lt(e){if(Array.isArray(e))return e.map(e=>String(e)).filter(Boolean);if(typeof e==`string`){let t=e.trim();if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.map(e=>String(e)).filter(Boolean):[String(e)].filter(Boolean)}catch{return t.split(`,`).map(e=>e.trim()).filter(Boolean)}}return[]}var ut=[`platform`,`org`,`other`],dt=new Set([`manage_users`,`manage_org_users`,`manage_metadata`,`manage_platform_settings`,`setup_access`,`setup_write`,`studio_access`]);function ft({value:e,onChange:t,readonly:n,className:r,...i}){let{t:a}=te(),o=u.default.useContext(h.SchemaRendererContext),s=i.dataSource??o?.dataSource??null,c=i.disabled,[l,d]=u.default.useState(null),f=u.default.useMemo(()=>lt(e),[e]);u.default.useEffect(()=>{if(!s||typeof s.find!=`function`)return;let e=!1;return(async()=>{try{let t=await s.find(`sys_capability`,{$filter:{active:!0},$top:500}),n=t?.data??t?.records??(Array.isArray(t)?t:[]);e||d(Array.isArray(n)?n:[])}catch{e||d([])}})(),()=>{e=!0}},[s]);let m=u.default.useCallback(e=>t(JSON.stringify(e)),[t]),_=u.default.useMemo(()=>{let e=new Map;for(let t of l??[])t?.name&&e.set(t.name,t);for(let t of f)e.has(t)||e.set(t,{name:t,label:t,scope:`other`});return e},[l,f]),v=e=>{let t=e.replace(/\./g,`_`);return dt.has(t)?a(`capability.label.${t}`):_.get(e)?.label||e},y=u.default.useMemo(()=>{let e=new Map;for(let t of _.values()){let n=ut.includes(t.scope)?t.scope:`other`,r=e.get(n)??[];r.push(t),e.set(n,r)}return ut.filter(t=>e.has(t)).map(t=>({scope:t,label:a(`capability.group.${t}`),items:(e.get(t)??[]).sort((e,t)=>(e.label||e.name).localeCompare(t.label||t.name))}))},[_,a]);if(n)return f.length===0?(0,g.jsx)(p.EmptyValue,{}):(0,g.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:f.map(e=>(0,g.jsx)(p.Badge,{variant:`outline`,title:_.get(e)?.description,children:v(e)},e))});let b=e=>{let t=f.includes(e)?f.filter(t=>t!==e):[...f,e];m(t)};return(0,g.jsxs)(`div`,{className:(0,p.cn)(`flex flex-col gap-3`,r),children:[l===null&&y.length===0&&(0,g.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:`Loading capabilities…`}),y.map(e=>(0,g.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,g.jsx)(`div`,{className:`text-xs font-medium uppercase tracking-wide text-muted-foreground`,children:e.label}),(0,g.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:e.items.map(e=>{let t=f.includes(e.name);return(0,g.jsx)(`button`,{type:`button`,onClick:()=>b(e.name),disabled:c,"aria-pressed":t,title:e.description||void 0,className:(0,p.cn)(`rounded-full border px-3 py-1 text-sm transition-colors disabled:opacity-50`,t?`border-primary bg-primary text-primary-foreground`:`border-input bg-background text-foreground hover:bg-accent`),children:v(e.name)},e.name)})})]},e.scope))]})}var pt=s({DateTimeField:()=>mt});function mt({value:e,onChange:t,field:n,readonly:r,...i}){if(r){if(!e)return(0,g.jsx)(p.EmptyValue,{});let t=new Date(e);return(0,g.jsxs)(`span`,{className:`text-sm`,children:[t.toLocaleDateString(),` `,t.toLocaleTimeString()]})}let{inputType:a,...o}=i;return(0,g.jsx)(p.Input,{...o,type:`datetime-local`,value:e||``,onChange:e=>t(e.target.value),onClick:e=>{N(e.currentTarget),o.onClick?.(e)},disabled:r||o.disabled})}var ht=o((()=>{re()})),gt=s({TimeField:()=>_t});function _t({value:e,onChange:t,field:n,readonly:r,...i}){if(r)return(0,g.jsx)(`span`,{className:`text-sm`,children:e||(0,g.jsx)(p.EmptyValue,{})});let{inputType:a,...o}=i;return(0,g.jsx)(p.Input,{...o,type:`time`,value:e||``,onChange:e=>t(e.target.value),onClick:e=>{N(e.currentTarget),o.onClick?.(e)},disabled:r||o.disabled})}var vt=o((()=>{re()})),yt=s({PercentField:()=>bt});function bt({value:e,onChange:t,field:n,readonly:r,errorMessage:i,className:a,...o}){let s=n||o.schema,c=s?.precision??2,l=typeof s?.max==`number`?s.max:void 0,u=l!=null&&l>1,d=e=>u?e:e*100,f=e=>u?e:e/100,m=u?l:100;if(r)return e==null?(0,g.jsx)(p.EmptyValue,{}):(0,g.jsxs)(`span`,{className:`text-sm font-medium tabular-nums`,children:[d(e).toFixed(c),`%`]});let h=e==null?``:d(e),_=e==null?0:d(e),v=e=>{if(e.target.value===``){t(null);return}let n=parseFloat(e.target.value);t(isNaN(n)?null:f(n))},y=e=>{if(r||o.disabled)return;if(!Array.isArray(e)||e.length===0){t(null);return}let n=e[0];t(typeof n==`number`?f(n):null)},b=10**-c;return(0,g.jsxs)(`div`,{className:`space-y-2`,children:[(0,g.jsxs)(`div`,{className:`relative`,children:[(0,g.jsx)(p.Input,{...o,type:`number`,value:h,onChange:v,placeholder:s?.placeholder||`0`,disabled:r||o.disabled,className:`pr-8 ${a||``}`,step:(10**-c).toFixed(c),"aria-invalid":!!i}),(0,g.jsx)(`span`,{className:`absolute right-3 top-1/2 -translate-y-1/2 text-sm text-gray-500`,children:`%`})]}),(0,g.jsx)(p.Slider,{value:[_],onValueChange:y,min:0,max:m,step:b,disabled:r||o.disabled,className:`w-full`,"aria-label":`Percentage`,"data-testid":`percent-slider`})]})}var xt=o((()=>{})),St=s({PasswordField:()=>Ct});function Ct({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,g.jsx)(`span`,{className:`text-sm`,children:`••••••••`});let{inputType:l,...d}=a;return(0,g.jsxs)(`div`,{className:`relative`,children:[(0,g.jsx)(p.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,g.jsx)(p.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,g.jsx)(m.EyeOff,{className:`size-4 text-gray-500`}):(0,g.jsx)(m.Eye,{className:`size-4 text-gray-500`})})]})}var wt=o((()=>{})),Tt=s({FileCell:()=>Ot,FileField:()=>Dt});function Et(e){let{files:t,multiple:n,maxSize:r,onChange:i}=e,{upload:a}=(0,_.useUpload)(),[o,s]=(0,u.useState)([]),[c,l]=(0,u.useState)({}),[d,f]=(0,u.useState)(!1);return{processFiles:(0,u.useCallback)(async e=>{if(e.length===0)return;let o=[],c=e.filter(e=>{if(r&&e.size>r){let t=(r/(1024*1024)).toFixed(1);return o.push(`"${e.name}" exceeds max size (${t} MB)`),!1}return!0});if(s(o),c.length!==0){f(!0);try{let e=(await Promise.all(c.map(async e=>{try{let t=await a(e,{onProgress:t=>l(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 o.push(`Failed to upload "${e.name}": ${t.message}`),s([...o]),null}}))).filter(Boolean);if(e.length===0)return;i(n?[...t,...e]:e[0])}finally{f(!1),l({})}}},[t,n,i,r,a]),errors:o,uploading:d,uploadProgress:c}}function Dt({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,f=s?.capture??null,h=!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`)),_=typeof navigator<`u`&&(navigator.maxTouchPoints>0||/Mobi|Android/i.test(navigator.userAgent)),v=f===!1?!1:f??(h&&_?`environment`:null),[y,b]=(0,u.useState)(!1),x=e?Array.isArray(e)?e:[e]:[],{processFiles:S,errors:C,uploading:w,uploadProgress:T}=Et({files:x,multiple:c,maxSize:d,onChange:t}),E=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),b(!0)},[]),ee=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),b(!1)},[]),D=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),b(!1);let t=Array.from(e.dataTransfer.files);if(l){let e=l.split(`,`).map(e=>e.trim().toLowerCase()),n=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(`/*`,`/`)))});S(n)}else S(t)},[l,S]);if(r)return e?(0,g.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:(Array.isArray(e)?e:[e]).map((e,t)=>(0,g.jsx)(`span`,{className:`text-sm truncate max-w-xs`,children:e.name||e.original_name||`File`},t))}):(0,g.jsx)(p.EmptyValue,{});let O=e=>{S(Array.from(e.target.files||[]))},k=e=>{if(c){let n=x.filter((t,n)=>n!==e);t(n.length>0?n:null)}else t(null)},te=e=>(e.mime_type||``).startsWith(`image/`);return(0,g.jsxs)(`div`,{className:i.className,children:[(0,g.jsx)(`input`,{ref:a,type:`file`,multiple:c,accept:l,onChange:O,className:`hidden`}),v&&(0,g.jsx)(`input`,{ref:o,type:`file`,accept:`image/*`,capture:v,onChange:O,className:`hidden`,"aria-label":`Camera capture`,"data-testid":`file-field-camera-input`}),(0,g.jsxs)(`div`,{className:`space-y-2`,children:[(0,g.jsxs)(`div`,{onDragOver:E,onDragLeave:ee,onDrop:D,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/dist/index.js CHANGED
@@ -140,7 +140,17 @@ var ht = Z((() => {})), gt, _t, vt = Z((() => {
140
140
  "lookup.prevPage": "Previous page",
141
141
  "lookup.nextPage": "Next page",
142
142
  "lookup.jumpToPage": "Jump to page",
143
- "lookup.retry": "Retry"
143
+ "lookup.retry": "Retry",
144
+ "capability.group.platform": "Platform",
145
+ "capability.group.org": "Organization",
146
+ "capability.group.other": "Other",
147
+ "capability.label.manage_users": "Manage Users",
148
+ "capability.label.manage_org_users": "Manage Organization Users",
149
+ "capability.label.manage_metadata": "Manage Metadata",
150
+ "capability.label.manage_platform_settings": "Manage Platform Settings",
151
+ "capability.label.setup_access": "Setup Access",
152
+ "capability.label.setup_write": "Write Settings",
153
+ "capability.label.studio_access": "Studio Access"
144
154
  }, _t = v(gt, "common.selectOption");
145
155
  })), yt = /* @__PURE__ */ Q({ SelectField: () => bt });
146
156
  function bt({ value: e, onChange: t, field: n, readonly: r, schema: o, dependentValues: c, dependsOn: l, emptyHint: u, dataSource: d, ...m }) {
@@ -2322,7 +2332,7 @@ function Un({ value: t, onChange: n, field: o, readonly: u, ...d }) {
2322
2332
  var Wn, Gn, Kn, qn, Jn = Z((() => {
2323
2333
  rn(), Dn(), Jt(), Mn(), Cn(), fn(), In(), vt(), Wn = 50, Gn = Xe, Kn = /^(sys_|cloud_|ai_)/, qn = /* @__PURE__ */ new Set(["user", "users"]);
2324
2334
  }));
2325
- lt(), ft(), ht(), xt(), Et(), kt(), Mt(), Ft(), Bt(), Ut(), Kt(), Jn();
2335
+ lt(), ft(), ht(), xt(), Et(), kt(), Mt(), Ft(), Bt(), Ut(), Kt(), Jn(), vt();
2326
2336
  function Yn(e) {
2327
2337
  if (Array.isArray(e)) return e.map((e) => String(e)).filter(Boolean);
2328
2338
  if (typeof e == "string") {
@@ -2341,69 +2351,76 @@ var Xn = [
2341
2351
  "platform",
2342
2352
  "org",
2343
2353
  "other"
2344
- ], Zn = {
2345
- platform: "Platform",
2346
- org: "Organization",
2347
- other: "Other"
2348
- };
2354
+ ], Zn = /* @__PURE__ */ new Set([
2355
+ "manage_users",
2356
+ "manage_org_users",
2357
+ "manage_metadata",
2358
+ "manage_platform_settings",
2359
+ "setup_access",
2360
+ "setup_write",
2361
+ "studio_access"
2362
+ ]);
2349
2363
  function Qn({ value: t, onChange: n, readonly: r, className: i, ...a }) {
2350
- let o = e.useContext(Xe), s = a.dataSource ?? o?.dataSource ?? null, c = a.disabled, [l, u] = e.useState(null), d = e.useMemo(() => Yn(t), [t]);
2364
+ let { t: o } = _t(), s = e.useContext(Xe), c = a.dataSource ?? s?.dataSource ?? null, l = a.disabled, [u, d] = e.useState(null), f = e.useMemo(() => Yn(t), [t]);
2351
2365
  e.useEffect(() => {
2352
- if (!s || typeof s.find != "function") return;
2366
+ if (!c || typeof c.find != "function") return;
2353
2367
  let e = !1;
2354
2368
  return (async () => {
2355
2369
  try {
2356
- let t = await s.find("sys_capability", {
2370
+ let t = await c.find("sys_capability", {
2357
2371
  $filter: { active: !0 },
2358
2372
  $top: 500
2359
2373
  }), n = t?.data ?? t?.records ?? (Array.isArray(t) ? t : []);
2360
- e || u(Array.isArray(n) ? n : []);
2374
+ e || d(Array.isArray(n) ? n : []);
2361
2375
  } catch {
2362
- e || u([]);
2376
+ e || d([]);
2363
2377
  }
2364
2378
  })(), () => {
2365
2379
  e = !0;
2366
2380
  };
2367
- }, [s]);
2368
- let f = e.useCallback((e) => n(JSON.stringify(e)), [n]), p = e.useMemo(() => {
2381
+ }, [c]);
2382
+ let p = e.useCallback((e) => n(JSON.stringify(e)), [n]), m = e.useMemo(() => {
2369
2383
  let e = /* @__PURE__ */ new Map();
2370
- for (let t of l ?? []) t?.name && e.set(t.name, t);
2371
- for (let t of d) e.has(t) || e.set(t, {
2384
+ for (let t of u ?? []) t?.name && e.set(t.name, t);
2385
+ for (let t of f) e.has(t) || e.set(t, {
2372
2386
  name: t,
2373
2387
  label: t,
2374
2388
  scope: "other"
2375
2389
  });
2376
2390
  return e;
2377
- }, [l, d]), m = (e) => p.get(e)?.label || e, h = e.useMemo(() => {
2391
+ }, [u, f]), h = (e) => {
2392
+ let t = e.replace(/\./g, "_");
2393
+ return Zn.has(t) ? o(`capability.label.${t}`) : m.get(e)?.label || e;
2394
+ }, g = e.useMemo(() => {
2378
2395
  let e = /* @__PURE__ */ new Map();
2379
- for (let t of p.values()) {
2396
+ for (let t of m.values()) {
2380
2397
  let n = Xn.includes(t.scope) ? t.scope : "other", r = e.get(n) ?? [];
2381
2398
  r.push(t), e.set(n, r);
2382
2399
  }
2383
2400
  return Xn.filter((t) => e.has(t)).map((t) => ({
2384
2401
  scope: t,
2385
- label: Zn[t] ?? t,
2402
+ label: o(`capability.group.${t}`),
2386
2403
  items: (e.get(t) ?? []).sort((e, t) => (e.label || e.name).localeCompare(t.label || t.name))
2387
2404
  }));
2388
- }, [p]);
2389
- if (r) return d.length === 0 ? /* @__PURE__ */ Y(P, {}) : /* @__PURE__ */ Y("div", {
2405
+ }, [m, o]);
2406
+ if (r) return f.length === 0 ? /* @__PURE__ */ Y(P, {}) : /* @__PURE__ */ Y("div", {
2390
2407
  className: "flex flex-wrap gap-1",
2391
- children: d.map((e) => /* @__PURE__ */ Y(w, {
2408
+ children: f.map((e) => /* @__PURE__ */ Y(w, {
2392
2409
  variant: "outline",
2393
- title: p.get(e)?.description,
2394
- children: m(e)
2410
+ title: m.get(e)?.description,
2411
+ children: h(e)
2395
2412
  }, e))
2396
2413
  });
2397
- let g = (e) => {
2398
- let t = d.includes(e) ? d.filter((t) => t !== e) : [...d, e];
2399
- f(t);
2414
+ let _ = (e) => {
2415
+ let t = f.includes(e) ? f.filter((t) => t !== e) : [...f, e];
2416
+ p(t);
2400
2417
  };
2401
2418
  return /* @__PURE__ */ X("div", {
2402
2419
  className: K("flex flex-col gap-3", i),
2403
- children: [l === null && h.length === 0 && /* @__PURE__ */ Y("span", {
2420
+ children: [u === null && g.length === 0 && /* @__PURE__ */ Y("span", {
2404
2421
  className: "text-sm text-muted-foreground",
2405
2422
  children: "Loading capabilities…"
2406
- }), h.map((e) => /* @__PURE__ */ X("div", {
2423
+ }), g.map((e) => /* @__PURE__ */ X("div", {
2407
2424
  className: "flex flex-col gap-1.5",
2408
2425
  children: [/* @__PURE__ */ Y("div", {
2409
2426
  className: "text-xs font-medium uppercase tracking-wide text-muted-foreground",
@@ -2411,15 +2428,15 @@ function Qn({ value: t, onChange: n, readonly: r, className: i, ...a }) {
2411
2428
  }), /* @__PURE__ */ Y("div", {
2412
2429
  className: "flex flex-wrap gap-1.5",
2413
2430
  children: e.items.map((e) => {
2414
- let t = d.includes(e.name);
2431
+ let t = f.includes(e.name);
2415
2432
  return /* @__PURE__ */ Y("button", {
2416
2433
  type: "button",
2417
- onClick: () => g(e.name),
2418
- disabled: c,
2434
+ onClick: () => _(e.name),
2435
+ disabled: l,
2419
2436
  "aria-pressed": t,
2420
2437
  title: e.description || void 0,
2421
2438
  className: K("rounded-full border px-3 py-1 text-sm transition-colors disabled:opacity-50", t ? "border-primary bg-primary text-primary-foreground" : "border-input bg-background text-foreground hover:bg-accent"),
2422
- children: e.label || e.name
2439
+ children: h(e.name)
2423
2440
  }, e.name);
2424
2441
  })
2425
2442
  })]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@object-ui/fields",
3
- "version": "15.0.0",
3
+ "version": "16.0.0",
4
4
  "description": "Field renderers and registry for Object UI",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -30,12 +30,12 @@
30
30
  "rehype-sanitize": "^6.0.0",
31
31
  "remark-gfm": "^4.0.1",
32
32
  "tailwind-merge": "^3.6.0",
33
- "@object-ui/components": "15.0.0",
34
- "@object-ui/core": "15.0.0",
35
- "@object-ui/i18n": "15.0.0",
36
- "@object-ui/providers": "15.0.0",
37
- "@object-ui/react": "15.0.0",
38
- "@object-ui/types": "15.0.0"
33
+ "@object-ui/components": "16.0.0",
34
+ "@object-ui/core": "16.0.0",
35
+ "@object-ui/i18n": "16.0.0",
36
+ "@object-ui/providers": "16.0.0",
37
+ "@object-ui/react": "16.0.0",
38
+ "@object-ui/types": "16.0.0"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "react": "^18.0.0 || ^19.0.0",
@@ -106,7 +106,11 @@ describe('CapabilityMultiSelectField', () => {
106
106
  dataSource={mockDataSource()}
107
107
  />,
108
108
  );
109
- fireEvent.click(await screen.findByRole('button', { name: 'Studio Access' }));
109
+ // Chip labels now resolve through the i18n bundle (objectui#2600 B5), so an
110
+ // async translation-settle can re-render the chips between findBy and the
111
+ // click — re-query at click time so we act on the live node, not a detached one.
112
+ await screen.findByRole('button', { name: 'Studio Access' });
113
+ fireEvent.click(screen.getByRole('button', { name: 'Studio Access' }));
110
114
  const emitted = onChange.mock.calls[0][0];
111
115
  expect(typeof emitted).toBe('string');
112
116
  expect(JSON.parse(emitted)).toEqual(['manage_users']);
@@ -140,4 +144,25 @@ describe('CapabilityMultiSelectField', () => {
140
144
  expect(await screen.findByText('Studio Access')).toBeInTheDocument();
141
145
  expect(screen.queryByRole('button', { name: 'Manage Users' })).not.toBeInTheDocument();
142
146
  });
147
+
148
+ // objectui#2600 B5 — curated platform caps get a localized label; package/
149
+ // admin-authored caps keep whatever label the registry served.
150
+ it('localizes curated capability labels but preserves registry labels for others', async () => {
151
+ render(
152
+ <CapabilityMultiSelectField
153
+ value={'[]'}
154
+ onChange={vi.fn()}
155
+ field={{ name: 'system_permissions' } as any}
156
+ dataSource={mockDataSource([
157
+ // Registry sends a shorter label; the curated client map wins.
158
+ { name: 'manage_org_users', label: 'Manage Org Users', description: 'Org members', scope: 'org', active: true },
159
+ // Not a curated platform capability — its registry label is kept.
160
+ { name: 'export_data', label: 'Export Data', description: 'Export', scope: 'org', active: true },
161
+ ])}
162
+ />,
163
+ );
164
+ expect(await screen.findByRole('button', { name: 'Manage Organization Users' })).toBeInTheDocument();
165
+ expect(screen.queryByRole('button', { name: 'Manage Org Users' })).not.toBeInTheDocument();
166
+ expect(screen.getByRole('button', { name: 'Export Data' })).toBeInTheDocument();
167
+ });
143
168
  });
@@ -3,6 +3,7 @@ import { Badge, EmptyValue, cn } from '@object-ui/components';
3
3
  import { SchemaRendererContext } from '@object-ui/react';
4
4
  import type { DataSource, QueryParams } from '@object-ui/types';
5
5
  import { FieldWidgetProps } from './types';
6
+ import { useFieldTranslation } from './useFieldTranslation';
6
7
 
7
8
  /**
8
9
  * CapabilityMultiSelectField — structured picker for a permission set's
@@ -54,13 +55,30 @@ export function parseCapabilityNames(value: unknown): string[] {
54
55
  return [];
55
56
  }
56
57
 
57
- /** Scope → group header. Order is intentional (platform powers first). */
58
+ /**
59
+ * Scope → group header order (platform powers first). The visible header is
60
+ * localized via `capability.group.<scope>` (objectui#2600 B5) — the capability
61
+ * *labels themselves* still come from the sys_capability registry, whose
62
+ * per-locale localization is tracked separately (framework).
63
+ */
58
64
  const SCOPE_ORDER = ['platform', 'org', 'other'] as const;
59
- const SCOPE_LABEL: Record<string, string> = {
60
- platform: 'Platform',
61
- org: 'Organization',
62
- other: 'Other',
63
- };
65
+
66
+ /**
67
+ * objectui#2600 B5 — the curated platform capabilities are a FIXED, known set
68
+ * whose labels the sys_capability registry serves in English. Localize just
69
+ * these client-side via `capability.label.<name>` (dots → underscores);
70
+ * package- and admin-authored capabilities keep their authored registry label.
71
+ * (Mirrors @objectstack/spec/security `PLATFORM_CAPABILITIES`.)
72
+ */
73
+ const CURATED_CAPABILITY_LABELS = new Set([
74
+ 'manage_users',
75
+ 'manage_org_users',
76
+ 'manage_metadata',
77
+ 'manage_platform_settings',
78
+ 'setup_access',
79
+ 'setup_write',
80
+ 'studio_access',
81
+ ]);
64
82
 
65
83
  export function CapabilityMultiSelectField({
66
84
  value,
@@ -69,6 +87,7 @@ export function CapabilityMultiSelectField({
69
87
  className,
70
88
  ...props
71
89
  }: FieldWidgetProps<string | string[]>) {
90
+ const { t } = useFieldTranslation();
72
91
  const ctx = React.useContext(SchemaRendererContext);
73
92
  const dataSource: DataSource | null =
74
93
  (props as any).dataSource ?? (ctx as any)?.dataSource ?? null;
@@ -119,7 +138,13 @@ export function CapabilityMultiSelectField({
119
138
  return map;
120
139
  }, [caps, selected]);
121
140
 
122
- const labelFor = (name: string) => byName.get(name)?.label || name;
141
+ // Curated platform caps get a localized label (objectui#2600 B5); everything
142
+ // else keeps the registry-served label.
143
+ const labelFor = (name: string) => {
144
+ const norm = name.replace(/\./g, '_');
145
+ if (CURATED_CAPABILITY_LABELS.has(norm)) return t(`capability.label.${norm}`);
146
+ return byName.get(name)?.label || name;
147
+ };
123
148
 
124
149
  // Group options by scope for the editable grid. Computed BEFORE the readonly
125
150
  // early-return so the hook order stays stable regardless of `readonly`.
@@ -135,12 +160,12 @@ export function CapabilityMultiSelectField({
135
160
  }
136
161
  return SCOPE_ORDER.filter((s) => buckets.has(s)).map((s) => ({
137
162
  scope: s,
138
- label: SCOPE_LABEL[s] ?? s,
163
+ label: t(`capability.group.${s}`),
139
164
  items: (buckets.get(s) ?? []).sort((a, b) =>
140
165
  (a.label || a.name).localeCompare(b.label || b.name),
141
166
  ),
142
167
  }));
143
- }, [byName]);
168
+ }, [byName, t]);
144
169
 
145
170
  if (readonly) {
146
171
  if (selected.length === 0) return <EmptyValue />;
@@ -190,7 +215,7 @@ export function CapabilityMultiSelectField({
190
215
  : 'border-input bg-background text-foreground hover:bg-accent',
191
216
  )}
192
217
  >
193
- {cap.label || cap.name}
218
+ {labelFor(cap.name)}
194
219
  </button>
195
220
  );
196
221
  })}
@@ -39,6 +39,19 @@ const FIELD_DEFAULTS: Record<string, string> = {
39
39
  'lookup.nextPage': 'Next page',
40
40
  'lookup.jumpToPage': 'Jump to page',
41
41
  'lookup.retry': 'Retry',
42
+ // objectui#2600 B5 — capability picker scope group headers.
43
+ 'capability.group.platform': 'Platform',
44
+ 'capability.group.org': 'Organization',
45
+ 'capability.group.other': 'Other',
46
+ // objectui#2600 B5 — curated platform capability labels (registry serves
47
+ // English; dots in the api-name become underscores in the key).
48
+ 'capability.label.manage_users': 'Manage Users',
49
+ 'capability.label.manage_org_users': 'Manage Organization Users',
50
+ 'capability.label.manage_metadata': 'Manage Metadata',
51
+ 'capability.label.manage_platform_settings': 'Manage Platform Settings',
52
+ 'capability.label.setup_access': 'Setup Access',
53
+ 'capability.label.setup_write': 'Write Settings',
54
+ 'capability.label.studio_access': 'Studio Access',
42
55
  };
43
56
 
44
57
  export const useFieldTranslation = createSafeTranslation(