@objectstack/console 7.5.0 → 7.7.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.
Files changed (74) hide show
  1. package/dist/assets/{AiPendingActionsPage-lmvGLNua.js → AiPendingActionsPage-jLWo6Ayv.js} +1 -1
  2. package/dist/assets/{ApiConsolePage-2Hfplikq.js → ApiConsolePage-C8YrK4Z2.js} +1 -1
  3. package/dist/assets/{AppManagementPage-CvdaGmZp.js → AppManagementPage-B_5Fa-DJ.js} +1 -1
  4. package/dist/assets/ApprovalsInboxPage-BjgnPpO0.js +1 -0
  5. package/dist/assets/{AuditLogPage-B_XhBMoJ.js → AuditLogPage-5XSTvoRE.js} +1 -1
  6. package/dist/assets/{ComponentNavView-DscbHf4h.js → ComponentNavView-BzBKVw0V.js} +1 -1
  7. package/dist/assets/ConsoleFloatingChatbot-iFC0LZXD.js +1 -0
  8. package/dist/assets/{DeveloperHubPage-CJ7NZxLQ.js → DeveloperHubPage-dAwpubU9.js} +1 -1
  9. package/dist/assets/FlowRunsPage-vNJ-LHl4.js +1 -0
  10. package/dist/assets/{MonacoImpl-DcAVOHcx.js → MonacoImpl-D8XcOOYC.js} +1 -1
  11. package/dist/assets/{ProfilePage-wEhY3kyx.js → ProfilePage-BWTzOuUR.js} +1 -1
  12. package/dist/assets/PublicFormsPage-BV_uZLQO.js +1 -0
  13. package/dist/assets/{RecentItemsProvider-VqVTd5Ra.js → RecentItemsProvider-C6mWTgDQ.js} +1 -1
  14. package/dist/assets/{SettingsHub-BLGHmF-y.js → SettingsHub-CIY42FH1.js} +1 -1
  15. package/dist/assets/{SettingsView-tuRcbYy6.js → SettingsView-CegTe8Ea.js} +1 -1
  16. package/dist/assets/{SystemHubPage-B-apkIco.js → SystemHubPage-DnzWHWwD.js} +1 -1
  17. package/dist/assets/{data-adapter-BI1S6gix.js → data-adapter-DnBY1kLN.js} +1 -1
  18. package/dist/assets/{dist-Dal4BOHf.js → dist-BG5mNWi0.js} +1 -1
  19. package/dist/assets/{framework-Bsl5NTfe.js → framework-Bg_8y02a.js} +4 -4
  20. package/dist/assets/{highlighted-body-OFNGDK62-DzZ5rNlx.js → highlighted-body-OFNGDK62-Cb0ueA71.js} +1 -1
  21. package/dist/assets/index--IqVdzh7.css +2 -0
  22. package/dist/assets/index-DFCyFV4X.js +33 -0
  23. package/dist/assets/{infrastructure-CFhpdDcd.js → infrastructure-xzEwJt5N.js} +2 -2
  24. package/dist/assets/{maplibre-gl-CoREonuK.js → maplibre-gl-C3Ve5bV1.js} +1 -1
  25. package/dist/assets/mermaid-GHXKKRXX-l3hYvjCm.js +1 -0
  26. package/dist/assets/plugin-calendar-BFas9fSm.js +1 -0
  27. package/dist/assets/plugin-charts-CP4h02tQ.js +7 -0
  28. package/dist/assets/{plugin-chatbot-CeHz9iQm.js → plugin-chatbot-Byj2Ut9C.js} +55 -55
  29. package/dist/assets/plugin-dashboard-T9rNXqHD.js +3 -0
  30. package/dist/assets/{plugin-form-CoZn3nk3.js → plugin-form-BOb7Pz1P.js} +1 -1
  31. package/dist/assets/plugin-gantt-B6c7-NaD.js +1 -0
  32. package/dist/assets/plugin-grid-Dnbdtwqg.js +6 -0
  33. package/dist/assets/plugin-kanban-CYoyum5o.js +1 -0
  34. package/dist/assets/{plugin-map-dgG_mKQS.js → plugin-map-Dogg70cr.js} +1 -1
  35. package/dist/assets/{plugin-markdown-CWpRZuHu.js → plugin-markdown-BR6MY8l8.js} +1 -1
  36. package/dist/assets/plugin-report-I3m5_ooy.js +59 -0
  37. package/dist/assets/{plugin-timeline-Dk3Nk3zI.js → plugin-timeline-CQbcDFeM.js} +1 -1
  38. package/dist/assets/plugin-view-CpsHblZK.js +1 -0
  39. package/dist/assets/plugins-views-BUSRnnI0.js +4 -0
  40. package/dist/assets/{src-CwB7sUUJ.js → src-CefK1cl3.js} +1 -1
  41. package/dist/assets/{types-B9HyZbLK.js → types-uOhYwSbE.js} +1 -1
  42. package/dist/assets/ui-components-C7AytqY9.js +41 -0
  43. package/dist/assets/{ui-layout-fny5eaNl.js → ui-layout-B_j0BM4b.js} +1 -1
  44. package/dist/assets/{vendor-charts-BWpBMKWq.js → vendor-charts-BfGsKLn4.js} +1 -1
  45. package/dist/assets/{vendor-dndkit-CucFgdMa.js → vendor-dndkit-Ds4hJT77.js} +1 -1
  46. package/dist/assets/{vendor-i18n-DPyFo2xM.js → vendor-i18n-D22Ua8-0.js} +1 -1
  47. package/dist/assets/{vendor-icons-core-Cx2WYOuR.js → vendor-icons-core-XrvLM9sL.js} +1 -1
  48. package/dist/assets/{vendor-markdown-B0mCB2Nu.js → vendor-markdown-CW3B88C8.js} +1 -1
  49. package/dist/assets/vendor-objectstack-DCNcl1ou.js +65 -0
  50. package/dist/assets/{vendor-radix-thTS_QfF.js → vendor-radix-Bzf7fki-.js} +1 -1
  51. package/dist/assets/{vendor-react-CyVA1SE-.js → vendor-react-BMpe6Iqg.js} +3 -3
  52. package/dist/assets/vendor-sentry-BreXt3n4.js +501 -0
  53. package/dist/assets/{vendor-ui-utils-BbOuugky.js → vendor-ui-utils-CWvoJB0S.js} +1 -1
  54. package/dist/index.html +6 -6
  55. package/package.json +1 -1
  56. package/dist/assets/ApprovalsInboxPage-DDI1tDfy.js +0 -1
  57. package/dist/assets/ConsoleFloatingChatbot-CIW0GtvK.js +0 -1
  58. package/dist/assets/FlowRunsPage-0KW8LdCn.js +0 -1
  59. package/dist/assets/PublicFormsPage-BkfIcEml.js +0 -1
  60. package/dist/assets/index-CiY4zPLP.js +0 -33
  61. package/dist/assets/index-ljRQeZRW.css +0 -2
  62. package/dist/assets/mermaid-GHXKKRXX-CwDRCmSe.js +0 -1
  63. package/dist/assets/plugin-calendar-CHvFKG6D.js +0 -1
  64. package/dist/assets/plugin-charts-BvH5iWMS.js +0 -7
  65. package/dist/assets/plugin-dashboard-CXLv53tc.js +0 -3
  66. package/dist/assets/plugin-gantt-DY4QgxI_.js +0 -1
  67. package/dist/assets/plugin-grid-CNT3y-BZ.js +0 -6
  68. package/dist/assets/plugin-kanban-DSD6E3zx.js +0 -1
  69. package/dist/assets/plugin-report-BFZ-T3Th.js +0 -59
  70. package/dist/assets/plugin-view-B8Wznem_.js +0 -1
  71. package/dist/assets/plugins-views-CBhDf8Cj.js +0 -4
  72. package/dist/assets/ui-components-Dv0hQu4t.js +0 -41
  73. package/dist/assets/vendor-objectstack-D6pAOWWu.js +0 -65
  74. package/dist/assets/vendor-sentry-DjMgMAaz.js +0 -484
@@ -1,7 +1,7 @@
1
- import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{r as t,y as n}from"./vendor-react-CyVA1SE-.js";import{m as r}from"./vendor-objectstack-D6pAOWWu.js";import{i,n as a,r as o,t as s}from"./vendor-i18n-DPyFo2xM.js";var c=new class{components=new Map;lazyEntries=new Map;listeners=new Set;register(e,t,n){let r=n?.namespace?`${n.namespace}:${e}`:e;n?.namespace||console.warn(`Registering component "${e}" without a namespace is deprecated. Please provide a namespace in the meta parameter.\n\n Migration:\n // Before (deprecated):\n registry.register('${e}', MyComponent);\n\n // After:\n registry.register('${e}', MyComponent, { namespace: 'my-plugin' });\n\n See: https://github.com/objectstack-ai/objectui/blob/main/MIGRATION_GUIDE.md`),this.components.has(r),this.components.set(r,{type:r,component:t,...n}),n?.namespace&&!n?.skipFallback&&this.components.set(e,{type:r,component:t,...n}),this.lazyEntries.delete(r),this.lazyEntries.delete(e),this.notify()}registerLazy(e,t,n){let r=n?.namespace?`${n.namespace}:${e}`:e,i={loader:t,meta:n};this.lazyEntries.set(r,i),n?.namespace&&!n?.skipFallback&&this.lazyEntries.set(e,i)}hasLazy(e,t){return t?this.lazyEntries.has(`${t}:${e}`):this.lazyEntries.has(e)}loadLazy(e,t){let n=t?`${t}:${e}`:e,r=this.lazyEntries.get(n);if(r)return r.pending||=r.loader().catch(e=>{throw r.pending=void 0,e}),r.pending}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}notify(){for(let e of this.listeners)try{e()}catch(e){console.error(`[Registry] listener error`,e)}}get(e,t){if(t){let n=`${t}:${e}`;return this.components.get(n)?.component}return this.components.get(e)?.component}getConfig(e,t){if(t){let n=`${t}:${e}`;return this.components.get(n)}return this.components.get(e)}has(e,t){if(t){let n=`${t}:${e}`;return this.components.has(n)}return this.components.has(e)}getAllTypes(){return Array.from(this.components.keys())}getAllConfigs(){return Array.from(this.components.values())}getNamespaceComponents(e){return Array.from(this.components.values()).filter(t=>t.namespace===e)}},l={type:{required:!0,validate:e=>typeof e==`string`&&e.length>0,message:`type must be a non-empty string`},id:{required:!1,validate:e=>typeof e==`string`,message:`id must be a string`},className:{required:!1,validate:e=>typeof e==`string`,message:`className must be a string`},visible:{required:!1,validate:e=>typeof e==`boolean`,message:`visible must be a boolean`},disabled:{required:!1,validate:e=>typeof e==`boolean`,message:`disabled must be a boolean`}};function u(e,t=`schema`){let n=[];return!e||typeof e!=`object`?(n.push({path:t,message:`Schema must be an object`,type:`error`,code:`INVALID_SCHEMA`}),n):(Object.entries(l).forEach(([r,i])=>{let a=e[r];i.required&&a===void 0&&n.push({path:`${t}.${r}`,message:`${r} is required`,type:`error`,code:`MISSING_REQUIRED`}),a!==void 0&&!i.validate(a)&&n.push({path:`${t}.${r}`,message:i.message,type:`error`,code:`INVALID_TYPE`})}),n)}function d(e,t=`schema`){let n=[];return e.type===`crud`&&((!e.columns||!Array.isArray(e.columns))&&n.push({path:`${t}.columns`,message:`CRUD schema requires columns array`,type:`error`,code:`MISSING_COLUMNS`}),!e.api&&!e.dataSource&&n.push({path:`${t}.api`,message:`CRUD schema requires api or dataSource`,type:`warning`,code:`MISSING_DATA_SOURCE`}),e.columns&&Array.isArray(e.columns)&&e.columns.forEach((e,r)=>{e.name||n.push({path:`${t}.columns[${r}]`,message:`Column requires name property`,type:`error`,code:`MISSING_COLUMN_NAME`})}),e.fields&&Array.isArray(e.fields)&&e.fields.forEach((e,r)=>{e.name||n.push({path:`${t}.fields[${r}]`,message:`Field requires name property`,type:`error`,code:`MISSING_FIELD_NAME`})})),n}function f(e,t=`schema`){let n=[];return e.type===`form`&&e.fields&&Array.isArray(e.fields)&&e.fields.forEach((r,i)=>{r.name||n.push({path:`${t}.fields[${i}]`,message:`Form field requires name property`,type:`error`,code:`MISSING_FIELD_NAME`}),e.fields.filter(e=>e.name===r.name).length>1&&n.push({path:`${t}.fields[${i}]`,message:`Duplicate field name: ${r.name}`,type:`warning`,code:`DUPLICATE_FIELD_NAME`})}),n}function p(e,t=`schema`){let n=[],r=e.children||e.body;if(r){if(Array.isArray(r))r.forEach((e,r)=>{if(typeof e==`object`&&e){let i=m(e,`${t}.children[${r}]`);n.push(...i.errors,...i.warnings)}});else if(typeof r==`object`&&r){let e=m(r,`${t}.children`);n.push(...e.errors,...e.warnings)}}return n}function m(e,t=`schema`){let n=[];n.push(...u(e,t)),n.push(...d(e,t)),n.push(...f(e,t)),n.push(...p(e,t));let r=n.filter(e=>e.type===`error`),i=n.filter(e=>e.type===`warning`);return{valid:r.length===0,errors:r,warnings:i}}function h(e){return{$eq:`=`,$ne:`!=`,$gt:`>`,$gte:`>=`,$lt:`<`,$lte:`<=`,$in:`in`,$nin:`nin`,$notin:`nin`,$between:`between`,$contains:`contains`,$notContains:`notcontains`,$notcontains:`notcontains`,$startsWith:`startswith`,$startswith:`startswith`,$endsWith:`endswith`,$endswith:`endswith`}[e]||null}function g(e){let t=[];for(let[n,r]of Object.entries(e))if(r!=null)if(typeof r==`object`&&!Array.isArray(r))for(let[e,i]of Object.entries(r)){if(e===`$regex`){console.warn(`[ObjectUI] Warning: \$regex operator is not fully supported. Converting to 'contains' which only supports substring matching, not regex patterns. Field: '${n}', Value: ${JSON.stringify(i)}. Consider using $contains or $startsWith instead.`),t.push([n,`contains`,i]);continue}if(e===`$null`){t.push([n,i?`is_null`:`is_not_null`,!0]);continue}if(e===`$exists`){t.push([n,i?`is_not_null`:`is_null`,!0]);continue}let r=h(e);if(r)t.push([n,r,i]);else throw Error(`[ObjectUI] Unknown filter operator '${e}' for field '${n}'. Supported operators: $eq, $ne, $gt, $gte, $lt, $lte, $in, $nin, $between, $contains, $notContains, $startsWith, $endsWith, $null, $exists. If you need exact object matching, use the value directly without an operator.`)}else t.push([n,`=`,r]);return t.length===0?e:t.length===1?t[0]:[`and`,...t]}function _(e){switch(e){case`equals`:case`eq`:return`=`;case`notEquals`:case`ne`:case`neq`:return`!=`;case`contains`:return`contains`;case`notContains`:return`notcontains`;case`greaterThan`:case`gt`:return`>`;case`greaterOrEqual`:case`gte`:return`>=`;case`lessThan`:case`lt`:return`<`;case`lessOrEqual`:case`lte`:return`<=`;case`in`:return`in`;case`notIn`:return`not in`;case`before`:return`<`;case`after`:return`>`;default:return e}}function v(e){if(`id`in e&&`filters`in e&&e.label&&Array.isArray(e.filters))return e;if(`field`in e&&`operator`in e){let t=_(e.operator);return{id:`${e.field}-${e.operator}-${String(e.value??``)}`,label:e.label||`${e.field} ${e.operator} ${String(e.value??``)}`,filters:[[e.field,t,e.value]],icon:e.icon,defaultActive:e.defaultActive}}return e}function y(e){if(!(!e||e.length===0))return e.map(v)}function b(e){if(Array.isArray(e))return e;if(e&&typeof e==`object`){if(Array.isArray(e.records))return e.records;if(Array.isArray(e.data))return e.data;if(Array.isArray(e.value))return e.value}return[]}function x(e,t){if(!e||typeof e!=`object`)return[];let n=[];for(let[t,r]of Object.entries(e))r&&typeof r==`object`&&(r.type===`lookup`||r.type===`master_detail`)&&n.push(t);if(n.length===0)return[];if(t&&Array.isArray(t)&&t.length>0){let e=new Set;for(let n of t)if(typeof n==`string`)e.add(n);else if(n&&typeof n==`object`){let t=n.field??n.name??n.fieldName;t&&e.add(t)}return n.filter(t=>e.has(t))}return n}var S=class e{scopes=[];constructor(e={}){this.scopes.push(new Map(Object.entries(e)))}pushScope(e){this.scopes.push(new Map(Object.entries(e)))}popScope(){this.scopes.length>1&&this.scopes.pop()}get(e){let t=e.split(`.`),n=t[0];for(let e=this.scopes.length-1;e>=0;e--)if(this.scopes[e].has(n)){let r=this.scopes[e].get(n);for(let e=1;e<t.length;e++)if(r&&typeof r==`object`)r=r[t[e]];else return;return r}}set(e,t){this.scopes.length>0&&this.scopes[this.scopes.length-1].set(e,t)}has(e){let t=e.split(`.`)[0];for(let e=this.scopes.length-1;e>=0;e--)if(this.scopes[e].has(t))return!0;return!1}toObject(){let e={};for(let t of this.scopes)for(let[n,r]of t.entries())e[n]=r;return e}createChild(t={}){let n=new e;return n.scopes=[...this.scopes,new Map(Object.entries(t))],n}},C={Math,JSON,parseInt,parseFloat,isNaN,isFinite},ee=new Set([`constructor`,`__proto__`,`prototype`,`__defineGetter__`,`__defineSetter__`,`__lookupGetter__`,`__lookupSetter__`]),te=class e{source=``;pos=0;context={};_evaluating=!0;evaluate(e,t){this.source=e.trim(),this.pos=0,this.context={...C,...t};let n=this.parseTernary();if(this.skipWhitespace(),this.pos<this.source.length)throw SyntaxError(`Unexpected token "${this.source[this.pos]}" at position ${this.pos} in expression "${e}"`);return n}skipWhitespace(){for(;this.pos<this.source.length&&/\s/.test(this.source[this.pos]);)this.pos++}peek(e=0){return this.source[this.pos+e]??``}consume(){return this.source[this.pos++]??``}withEvaluation(e,t){let n=this._evaluating;this._evaluating=e;try{return t()}finally{this._evaluating=n}}assertSafeProp(e){if(typeof e==`string`&&ee.has(e))throw TypeError(`Access to property "${e}" is not permitted in expressions`)}parseTernary(){let e=this.parseNullish();if(this.skipWhitespace(),this.peek()===`?`&&this.peek(1)!==`?`){if(this.pos++,this.skipWhitespace(),!this._evaluating){if(this.parseTernary(),this.skipWhitespace(),this.peek()!==`:`)throw SyntaxError(`Expected ":" in ternary expression`);this.pos++,this.skipWhitespace(),this.parseTernary();return}if(e){let e=this.parseTernary();if(this.skipWhitespace(),this.peek()!==`:`)throw SyntaxError(`Expected ":" in ternary expression`);return this.pos++,this.skipWhitespace(),this.withEvaluation(!1,()=>this.parseTernary()),e}else{if(this.withEvaluation(!1,()=>this.parseTernary()),this.skipWhitespace(),this.peek()!==`:`)throw SyntaxError(`Expected ":" in ternary expression`);return this.pos++,this.skipWhitespace(),this.parseTernary()}}return e}parseNullish(){let e=this.parseOr();for(this.skipWhitespace();this.peek()===`?`&&this.peek(1)===`?`;){if(this.pos+=2,this.skipWhitespace(),this._evaluating&&e!=null)this.withEvaluation(!1,()=>this.parseOr());else{let t=this.parseOr();this._evaluating&&(e??=t)}this.skipWhitespace()}return e}parseOr(){let e=this.parseAnd();for(this.skipWhitespace();this.peek()===`|`&&this.peek(1)===`|`;){if(this.pos+=2,this.skipWhitespace(),this._evaluating&&e)this.withEvaluation(!1,()=>this.parseAnd());else{let t=this.parseAnd();this._evaluating&&(e||=t)}this.skipWhitespace()}return e}parseAnd(){let e=this.parseEquality();for(this.skipWhitespace();this.peek()===`&`&&this.peek(1)===`&`;){if(this.pos+=2,this.skipWhitespace(),this._evaluating&&!e)this.withEvaluation(!1,()=>this.parseEquality());else{let t=this.parseEquality();this._evaluating&&(e&&=t)}this.skipWhitespace()}return e}parseEquality(){let e=this.parseAddition();for(this.skipWhitespace();;){let t=null;if(this.peek()===`=`&&this.peek(1)===`=`&&this.peek(2)===`=`)t=`===`,this.pos+=3;else if(this.peek()===`!`&&this.peek(1)===`=`&&this.peek(2)===`=`)t=`!==`,this.pos+=3;else if(this.peek()===`=`&&this.peek(1)===`=`)t=`==`,this.pos+=2;else if(this.peek()===`!`&&this.peek(1)===`=`)t=`!=`,this.pos+=2;else if(this.peek()===`>`&&this.peek(1)===`=`)t=`>=`,this.pos+=2;else if(this.peek()===`<`&&this.peek(1)===`=`)t=`<=`,this.pos+=2;else if(this.peek()===`>`&&this.peek(1)!==`>`)t=`>`,this.pos++;else if(this.peek()===`<`&&this.peek(1)!==`<`)t=`<`,this.pos++;else break;this.skipWhitespace();let n=this.parseAddition();switch(t){case`===`:e=e===n;break;case`!==`:e=e!==n;break;case`==`:e=e==n;break;case`!=`:e=e!=n;break;case`>`:e=e>n;break;case`<`:e=e<n;break;case`>=`:e=e>=n;break;case`<=`:e=e<=n;break}this.skipWhitespace()}return e}parseAddition(){let e=this.parseMultiplication();for(this.skipWhitespace();(this.peek()===`+`||this.peek()===`-`)&&this.peek(1)!==`=`;){let t=this.consume();this.skipWhitespace();let n=this.parseMultiplication();e=t===`+`?e+n:e-n,this.skipWhitespace()}return e}parseMultiplication(){let e=this.parseUnary();for(this.skipWhitespace();(this.peek()===`*`||this.peek()===`/`||this.peek()===`%`)&&this.peek(1)!==`=`;){let t=this.consume();this.skipWhitespace();let n=this.parseUnary();t===`*`?e*=n:t===`/`?e/=n:e%=n,this.skipWhitespace()}return e}parseUnary(){if(this.skipWhitespace(),this.source.startsWith(`typeof`,this.pos)&&!/[\w$]/.test(this.source[this.pos+6]??``)){this.pos+=6,this.skipWhitespace();try{return typeof this.parseUnary()}catch{return`undefined`}}return this.peek()===`!`?(this.pos++,!this.parseUnary()):this.peek()===`-`?(this.pos++,-this.parseUnary()):this.peek()===`+`?(this.pos++,+this.parseUnary()):this.parseMember()}parseMember(){let e=this.parsePrimary();for(;;){this.skipWhitespace();let t=this.peek()===`?`&&this.peek(1)===`.`;if(this.peek()===`.`&&this.peek(1)!==`.`||t){t&&this.pos++,this.pos++,this.skipWhitespace();let n=this.parseIdentifierName();if(!n)break;if(this.assertSafeProp(n),this.skipWhitespace(),this.peek()===`(`){this.pos++;let t=this.parseArgList();if(this.peek()!==`)`)throw SyntaxError(`Expected ")" after argument list at position ${this.pos}`);if(this.pos++,!this._evaluating){e=void 0;continue}e=e!=null&&typeof e[n]==`function`?e[n](...t):void 0}else{if(!this._evaluating){e=void 0;continue}e=e?.[n]}continue}let n=this.peek()===`?`&&this.peek(1)===`[`;if(this.peek()===`[`||n){n&&this.pos++,this.pos++,this.skipWhitespace();let t=this.parseTernary();if(this.skipWhitespace(),this.peek()!==`]`)throw SyntaxError(`Expected "]" after bracket expression at position ${this.pos}`);if(this.pos++,this.assertSafeProp(t),!this._evaluating){e=void 0;continue}e=e?.[t];continue}if(this.peek()===`(`){this.pos++;let t=this.parseArgList();if(this.peek()!==`)`)throw SyntaxError(`Expected ")" after argument list at position ${this.pos}`);if(this.pos++,!this._evaluating){e=void 0;continue}if(typeof e==`function`)e=e(...t);else throw TypeError(`${String(e)} is not a function`);continue}break}return e}parsePrimary(){this.skipWhitespace();let e=this.peek();if(e===`(`){this.pos++;let e=this.parseTernary();if(this.skipWhitespace(),this.peek()!==`)`)throw SyntaxError(`Expected ")" to close "(" expression at position ${this.pos}`);return this.pos++,e}if(e===`[`)return this.parseArrayLiteral();if(e===`"`||e===`'`)return this.parseString(e);if(/\d/.test(e)||e===`.`&&/\d/.test(this.peek(1)))return this.parseNumber();if(/[a-zA-Z_$]/.test(e))return this.parseIdentifierOrKeyword();throw SyntaxError(`Unexpected character "${e}" at position ${this.pos}`)}parseArrayLiteral(){this.pos++;let e=[];for(this.skipWhitespace();this.peek()!==`]`&&this.pos<this.source.length;)e.push(this.parseTernary()),this.skipWhitespace(),this.peek()===`,`&&(this.pos++,this.skipWhitespace());if(this.peek()!==`]`)throw SyntaxError(`Expected "]" to close array literal at position ${this.pos}`);return this.pos++,e}parseString(e){this.pos++;let t=``;for(;this.pos<this.source.length;){let n=this.source[this.pos];if(n===`\\`){this.pos++;let e=this.source[this.pos++]??``;switch(e){case`n`:t+=`
2
- `;break;case`t`:t+=` `;break;case`r`:t+=`\r`;break;case`\\`:t+=`\\`;break;case`"`:t+=`"`;break;case`'`:t+=`'`;break;case"`":t+="`";break;default:t+=e}}else if(n===e){this.pos++;break}else t+=n,this.pos++}return t}parseNumber(){let e=this.pos,t=!1;for(;this.pos<this.source.length&&/\d/.test(this.source[this.pos]);)t=!0,this.pos++;if(this.source[this.pos]===`.`)for(this.pos++;this.pos<this.source.length&&/\d/.test(this.source[this.pos]);)t=!0,this.pos++;if(/[eE]/.test(this.source[this.pos]??``)){this.pos++,/[+\-]/.test(this.source[this.pos]??``)&&this.pos++;let t=0;for(;this.pos<this.source.length&&/\d/.test(this.source[this.pos]);)t++,this.pos++;if(t===0)throw SyntaxError(`Invalid numeric literal exponent at position ${e}`)}if(!t)throw SyntaxError(`Invalid numeric literal at position ${e}`);let n=this.source.slice(e,this.pos),r=Number(n);if(!Number.isFinite(r))throw SyntaxError(`Invalid numeric literal "${n}" at position ${e}`);return r}parseIdentifierName(){let e=this.pos;for(;this.pos<this.source.length&&/[\w$]/.test(this.source[this.pos]);)this.pos++;return this.source.slice(e,this.pos)}parseIdentifierOrKeyword(){let e=this.parseIdentifierName();switch(e){case`true`:return!0;case`false`:return!1;case`null`:return null;case`undefined`:return;case`NaN`:return NaN;case`Infinity`:return 1/0}if(e===`new`)return this.parseNewExpression();if(this.skipWhitespace(),this.peek()===`=`&&this.peek(1)===`>`)return this.parseArrowFunction(e);if(this.peek()===`(`){this.pos++;let t=this.parseArgList();if(this.peek()!==`)`)throw SyntaxError(`Expected ")" after argument list at position ${this.pos}`);if(this.pos++,!this._evaluating)return;let n=this.context[e];if(typeof n==`function`)return n(...t);throw TypeError(`"${e}" is not a function`)}if(this._evaluating){if(!(e in this.context))throw ReferenceError(`${e} is not defined`);return this.context[e]}}parseNewExpression(){this.skipWhitespace();let e=this.parseIdentifierName();this.skipWhitespace();let t=[];if(this.peek()===`(`){if(this.pos++,t=this.parseArgList(),this.peek()!==`)`)throw SyntaxError(`Expected ")" after new ${e}() at position ${this.pos}`);this.pos++}if(this._evaluating)switch(e){case`Date`:return new Date(...t);case`RegExp`:return new RegExp(t[0],t[1]);default:throw TypeError(`new ${e}() is not supported in expressions`)}}parseArrowFunction(t){this.pos+=2,this.skipWhitespace();let n=this.pos,r=this.scanExpressionEnd(),i=this.source.slice(n,r).trim();this.pos=r;let a=this.context;return n=>new e().evaluate(i,{...a,[t]:n})}scanExpressionEnd(){let e=this.pos,t=0,n=!1,r=``;for(;e<this.source.length;){let i=this.source[e];if(n){if(i===`\\`){e+=2;continue}i===r&&(n=!1),e++;continue}if(i===`"`||i===`'`){n=!0,r=i,e++;continue}if(i===`(`||i===`[`)t++;else if(i===`)`||i===`]`){if(t===0)break;t--}else if(i===`,`&&t===0)break;e++}return e}parseArgList(){let e=[];for(this.skipWhitespace();this.peek()!==`)`&&this.pos<this.source.length;)e.push(this.parseTernary()),this.skipWhitespace(),this.peek()===`,`&&(this.pos++,this.skipWhitespace());return e}},w=class{cache=new Map;maxSize;constructor(e=1e3){this.maxSize=e}compile(e,t){let n=`${e}::${t.join(`,`)}`;if(this.cache.has(n)){let e=this.cache.get(n);return e.hitCount++,e}this.cache.size>=this.maxSize&&this.evictLFU();let r={fn:this.compileExpression(e,t),varNames:[...t],expression:e,compiledAt:Date.now(),hitCount:1};return this.cache.set(n,r),r}compileExpression(e,t){let n=new te;return(...r)=>{let i={};for(let e=0;e<t.length;e++)i[t[e]]=r[e];return n.evaluate(e,i)}}evictLFU(){let e=null,t=1/0,n=1/0;for(let[r,i]of this.cache.entries())(i.hitCount<n||i.hitCount===n&&i.compiledAt<t)&&(e=r,t=i.compiledAt,n=i.hitCount);e&&this.cache.delete(e)}has(e,t){let n=`${e}::${t.join(`,`)}`;return this.cache.has(n)}clear(){this.cache.clear()}getStats(){let e=0,t=[];for(let n of this.cache.values())e+=n.hitCount,t.push({expression:n.expression,hitCount:n.hitCount});return{size:this.cache.size,maxSize:this.maxSize,totalHits:e,entries:t.sort((e,t)=>t.hitCount-e.hitCount)}}},T=class{functions=new Map;constructor(){this.registerDefaults()}register(e,t){this.functions.set(e.toUpperCase(),t)}get(e){return this.functions.get(e.toUpperCase())}has(e){return this.functions.has(e.toUpperCase())}getNames(){return Array.from(this.functions.keys())}toObject(){let e={};for(let[t,n]of this.functions)e[t]=n;return e}registerDefaults(){this.registerAggregationFunctions(),this.registerDateFunctions(),this.registerLogicFunctions(),this.registerStringFunctions(),this.registerStringSearchFunctions(),this.registerStatisticalFunctions()}registerAggregationFunctions(){this.register(`SUM`,(...e)=>E(e).reduce((e,t)=>e+t,0)),this.register(`AVG`,(...e)=>{let t=E(e);return t.length===0?0:t.reduce((e,t)=>e+t,0)/t.length}),this.register(`COUNT`,(...e)=>D(e).filter(e=>e!=null).length),this.register(`MIN`,(...e)=>{let t=E(e);return t.length===0?0:Math.min(...t)}),this.register(`MAX`,(...e)=>{let t=E(e);return t.length===0?0:Math.max(...t)})}registerDateFunctions(){this.register(`TODAY`,()=>new Date().toISOString().split(`T`)[0]),this.register(`NOW`,()=>new Date().toISOString()),this.register(`DATEADD`,(e,t,n)=>{let r=new Date(e);if(isNaN(r.getTime()))throw Error(`DATEADD: Invalid date "${e}"`);switch(String(n).toLowerCase()){case`day`:case`days`:r.setDate(r.getDate()+t);break;case`month`:case`months`:r.setMonth(r.getMonth()+t);break;case`year`:case`years`:r.setFullYear(r.getFullYear()+t);break;case`hour`:case`hours`:r.setHours(r.getHours()+t);break;case`minute`:case`minutes`:r.setMinutes(r.getMinutes()+t);break;default:throw Error(`DATEADD: Unsupported unit "${n}"`)}return r.toISOString()}),this.register(`DATEDIFF`,(e,t,n)=>{let r=new Date(e),i=new Date(t);if(isNaN(r.getTime()))throw Error(`DATEDIFF: Invalid date "${e}"`);if(isNaN(i.getTime()))throw Error(`DATEDIFF: Invalid date "${t}"`);let a=i.getTime()-r.getTime();switch(String(n).toLowerCase()){case`day`:case`days`:return Math.floor(a/(1e3*60*60*24));case`month`:case`months`:return(i.getFullYear()-r.getFullYear())*12+(i.getMonth()-r.getMonth());case`year`:case`years`:return i.getFullYear()-r.getFullYear();case`hour`:case`hours`:return Math.floor(a/(1e3*60*60));case`minute`:case`minutes`:return Math.floor(a/(1e3*60));default:throw Error(`DATEDIFF: Unsupported unit "${n}"`)}}),this.register(`DATEFORMAT`,(e,t)=>{let n=new Date(e);if(isNaN(n.getTime()))throw Error(`DATEFORMAT: Invalid date "${e}"`);let r=(e,t=2)=>String(e).padStart(t,`0`);return t.replace(`YYYY`,String(n.getFullYear())).replace(`YY`,String(n.getFullYear()).slice(-2)).replace(`MM`,r(n.getMonth()+1)).replace(`DD`,r(n.getDate())).replace(`HH`,r(n.getHours())).replace(`mm`,r(n.getMinutes())).replace(`ss`,r(n.getSeconds()))})}registerLogicFunctions(){this.register(`IF`,(e,t,n)=>e?t:n),this.register(`AND`,(...e)=>e.every(Boolean)),this.register(`OR`,(...e)=>e.some(Boolean)),this.register(`NOT`,e=>!e),this.register(`SWITCH`,(e,...t)=>{for(let n=0;n<t.length-1;n+=2)if(e===t[n])return t[n+1];if(t.length%2==1)return t[t.length-1]})}registerStringFunctions(){this.register(`CONCAT`,(...e)=>e.map(e=>String(e??``)).join(``)),this.register(`LEFT`,(e,t)=>String(e??``).substring(0,t)),this.register(`RIGHT`,(e,t)=>{let n=String(e??``);return n.substring(Math.max(0,n.length-t))}),this.register(`TRIM`,e=>String(e??``).trim()),this.register(`UPPER`,e=>String(e??``).toUpperCase()),this.register(`LOWER`,e=>String(e??``).toLowerCase())}registerStringSearchFunctions(){this.register(`FIND`,(e,t,n)=>String(t??``).indexOf(String(e??``),n??0)),this.register(`REPLACE`,(e,t,n)=>String(e??``).split(String(t??``)).join(String(n??``))),this.register(`SUBSTRING`,(e,t,n)=>{let r=String(e??``);return n===void 0?r.substring(t):r.substring(t,t+n)}),this.register(`REGEX`,(e,t,n)=>{let r=String(e??``);return new RegExp(t,n).test(r)}),this.register(`LEN`,e=>String(e??``).length)}registerStatisticalFunctions(){this.register(`MEDIAN`,(...e)=>{let t=E(e).sort((e,t)=>e-t);if(t.length===0)return 0;let n=Math.floor(t.length/2);return t.length%2==0?(t[n-1]+t[n])/2:t[n]}),this.register(`STDEV`,(...e)=>{let t=E(e);if(t.length<2)return 0;let n=t.reduce((e,t)=>e+t,0)/t.length,r=t.map(e=>(e-n)**2).reduce((e,t)=>e+t,0)/(t.length-1);return Math.sqrt(r)}),this.register(`VARIANCE`,(...e)=>{let t=E(e);if(t.length<2)return 0;let n=t.reduce((e,t)=>e+t,0)/t.length;return t.map(e=>(e-n)**2).reduce((e,t)=>e+t,0)/(t.length-1)}),this.register(`PERCENTILE`,(e,...t)=>{let n=E(t).sort((e,t)=>e-t);if(n.length===0)return 0;let r=Math.max(0,Math.min(100,e))/100*(n.length-1),i=Math.floor(r),a=Math.ceil(r);if(i===a)return n[i];let o=r-i;return n[i]+o*(n[a]-n[i])})}};function E(e){let t=[];for(let n of e)if(Array.isArray(n))t.push(...E(n));else{let e=Number(n);isNaN(e)||t.push(e)}return t}function D(e){let t=[];for(let n of e)Array.isArray(n)?t.push(...D(n)):t.push(n);return t}var O=class e{context;cache;formulas;constructor(e,t,n){e instanceof S?this.context=e:this.context=new S(e||{}),this.cache=t||new w,this.formulas=n||new T}evaluate(e,t={}){if(e&&typeof e==`object`&&typeof e.source==`string`&&(e=e.source),typeof e!=`string`)return e;let{defaultValue:n,throwOnError:r=!1,sanitize:i=!0}=t;try{if(!e.includes("${"))return e;let t=e.match(/^\$\{([^}]+)\}$/);return t?this.evaluateExpression(t[1].trim(),{sanitize:i}):e.replace(/\$\{([^}]+)\}/g,(e,t)=>{try{let e=this.evaluateExpression(t.trim(),{sanitize:i});return String(e??``)}catch(n){if(r)throw n;return console.warn(`Expression evaluation failed for: ${t}`,n),e}})}catch(t){if(r)throw t;return console.warn(`Failed to evaluate expression: ${e}`,t),n??e}}evaluateExpression(e,t={}){let{sanitize:n=!0}=t;if(!(!e||e.trim()===``)){if(n&&this.isDangerous(e))throw Error(`Potentially dangerous expression detected: ${e}`);try{let t=this.context.toObject(),n={...this.formulas.toObject(),...t},r=Object.keys(n),i=Object.values(n);return this.cache.compile(e,r).fn(...i)}catch(t){throw Error(`Failed to evaluate expression "${e}": ${t.message}`)}}}isDangerous(e){return[/eval\s*\(/i,/Function\s*\(/i,/setTimeout\s*\(/i,/setInterval\s*\(/i,/import\s*\(/i,/require\s*\(/i,/process\./i,/global\./i,/window\./i,/document\./i,/__proto__/i,/constructor\s*\(/i,/prototype\./i].some(t=>t.test(e))}evaluateCondition(e,t={}){return typeof e==`boolean`?e:(e&&typeof e==`object`&&typeof e.source==`string`&&(e=e.source),e?!!this.evaluate(e,t):!0)}updateContext(e){Object.entries(e).forEach(([e,t])=>{this.context.set(e,t)})}getContext(){return this.context}withContext(t){return new e(this.context.createChild(t),this.cache,this.formulas)}getCacheStats(){return this.cache.getStats()}clearCache(){this.cache.clear()}getFormulas(){return this.formulas}registerFunction(e,t){this.formulas.register(e,t)}},k=new w,A=new T;function ne(e,t){let n=new O({...t,data:t},k,A);try{return(/\$\{/.test(e)?n.evaluate(e,{throwOnError:!0}):n.evaluateExpression(e))===!0}catch{return!1}}var j=class{handlers=new Map;scripts=new Map;evaluator;context;confirmHandler;toastHandler;modalHandler;navigationHandler;paramCollectionHandler;resultDialogHandler;constructor(e={}){this.context=e,this.evaluator=new O(e),this.confirmHandler=async e=>window.confirm(e),this.toastHandler=null,this.modalHandler=null,this.navigationHandler=null,this.paramCollectionHandler=null,this.resultDialogHandler=null}setConfirmHandler(e){this.confirmHandler=e}setToastHandler(e){this.toastHandler=e}setModalHandler(e){this.modalHandler=e}setNavigationHandler(e){this.navigationHandler=e}setParamCollectionHandler(e){this.paramCollectionHandler=e}setResultDialogHandler(e){this.resultDialogHandler=e}registerHandler(e,t){this.handlers.set(e,t)}unregisterHandler(e){this.handlers.delete(e)}registerScript(e,t){this.scripts.set(e,t)}unregisterScript(e){this.scripts.delete(e)}async execute(e){try{let t=e.type||e.actionType||e.name||``;if(e.condition&&!this.evaluator.evaluateCondition(e.condition))return{success:!1,error:`Action condition not met`};if(e.disabled&&(typeof e.disabled==`string`?this.evaluator.evaluateCondition(e.disabled):e.disabled))return{success:!1,error:`Action is disabled`};let n=e.confirm?.message||e.confirmText;if(n&&!await this.confirmHandler(this.evaluator.evaluate(n),e.confirm?{title:e.confirm.title,confirmText:e.confirm.confirmText,cancelText:e.confirm.cancelText}:void 0))return{success:!1,error:`Action cancelled by user`};let r=e.actionParams&&Array.isArray(e.actionParams)?e.actionParams:Array.isArray(e.params)?e.params:void 0;if(r&&r.length>0&&this.paramCollectionHandler){let t=await this.paramCollectionHandler(r,e);if(t===null)return{success:!1,error:`Action cancelled by user (params)`};let n=Array.isArray(e.params)?{}:e.params||{},i=n._rowRecord;e.params={...n,...t},i!==void 0&&(e.params._rowRecord=i)}if(t&&this.handlers.has(t)){let n=await this.handlers.get(t)(e,this.context);return await this.handlePostExecution(e,n),n}let i;switch(t){case`script`:i=await this.executeScript(e);break;case`url`:i=await this.executeUrl(e);break;case`modal`:i=await this.executeModal(e);break;case`flow`:i=await this.executeFlow(e);break;case`api`:i=await this.executeAPI(e);break;case`navigation`:i=await this.executeNavigation(e);break;default:e.navigate?i=await this.executeNavigation(e):e.api||e.endpoint?i=await this.executeAPI(e):e.onClick?(await e.onClick(),i={success:!0}):i=await this.executeActionSchema(e)}return await this.handlePostExecution(e,i),i}catch(t){let n={success:!1,error:t.message};return await this.handlePostExecution(e,n),n}}async executeChain(e,t=`sequential`){if(e.length===0)return{success:!0};if(t===`parallel`){let t=await Promise.allSettled(e.map(e=>this.execute(e)));if(t.filter(e=>e.status===`rejected`||e.status===`fulfilled`&&!e.value.success).length>0)return{success:!1,error:t.find(e=>e.status===`fulfilled`&&!e.value.success)?.value?.error||`One or more parallel actions failed`};let n=t[t.length-1];return n.status===`fulfilled`?n.value:{success:!1,error:`Action failed`}}let n={success:!0};for(let t of e)if(n=await this.execute(t),!n.success)return n;return n}async handlePostExecution(e,t){let n=!!(e.resultDialog&&t.success);if(this.toastHandler){let r=e.toast??{showOnSuccess:!0,showOnError:!0},i=e.toast?.duration;if(t.success&&!n&&r.showOnSuccess!==!1){let t=e.successMessage||`Action completed successfully`;this.toastHandler(t,{type:`success`,duration:i})}if(!t.success&&r.showOnError!==!1&&t.error){let n=e.errorMessage||t.error;this.toastHandler(n,{type:`error`,duration:i})}}if(n)if(this.resultDialogHandler)try{await this.resultDialogHandler(e.resultDialog,t.data,e)}catch(e){console.warn(`[ActionRunner] resultDialog handler rejected; treating as acknowledged`,e)}else console.warn(`[ActionRunner] action.resultDialog set but no resultDialogHandler registered — the response value will not be shown to the user.`,{action:e.name,data:t.data});if(e.refreshAfter&&t.success&&(t.reload=!0),e.chain&&e.chain.length>0&&t.success){let n=await this.executeChain(e.chain,e.chainMode||`sequential`);n.success||(t.success=!1,t.error=n.error),n.data&&(t.data=n.data),n.redirect&&(t.redirect=n.redirect),n.reload&&(t.reload=!0)}if(t.success&&e.onSuccess){let t=Array.isArray(e.onSuccess)?e.onSuccess:[e.onSuccess];await this.executeChain(t,`sequential`)}if(!t.success&&e.onFailure){let t=Array.isArray(e.onFailure)?e.onFailure:[e.onFailure];await this.executeChain(t,`sequential`)}}async executeScript(e){let t=e.execute||e.target;if(!t)return{success:!1,error:`No script provided for script action`};let n=this.scripts.get(t);if(n)try{return await n(e,this.context)}catch(e){return{success:!1,error:`Script execution failed: ${e.message}`}}try{return{success:!0,data:this.evaluator.evaluate(`\${${t}}`)}}catch(e){return{success:!1,error:`Script execution failed: ${e.message}`}}}async executeUrl(e){let t=e.target||e.redirect;if(!t)return{success:!1,error:`No URL provided for url action`};let n=this.interpolateTarget(t,e),r=this.evaluator.evaluate(n);if(!this.isValidUrl(r))return{success:!1,error:`Invalid URL scheme. Only http://, https://, and relative URLs are allowed.`};let i=typeof this.context.apiBase==`string`?this.context.apiBase.replace(/\/+$/,``):``;i&&/^\/(api|_auth|_account)\//.test(r)&&(r=`${i}${r}`);let a=r.startsWith(`http://`)||r.startsWith(`https://`);if(/\/(api|_auth|_account)\//.test(r)&&(a||r.startsWith(`/`)))return window.location.href=r,{success:!0};let o=e.params?.newTab??a;if(this.navigationHandler)return this.navigationHandler(r,{external:a,newTab:o}),{success:!0};if(o)window.open(r,`_blank`,`noopener,noreferrer`);else return{success:!0,redirect:r};return{success:!0}}async executeModal(e){let t=e.modal||e.target||e.params?.schema;return t?this.modalHandler?await this.modalHandler(t,this.context):{success:!0,modal:t}:{success:!1,error:`No modal schema or target provided for modal action`}}async executeFlow(e){let t=e.target||e.name;return t?this.handlers.has(`flow`)?await this.handlers.get(`flow`)(e,this.context):{success:!1,error:`Flow handler not registered. Cannot execute flow: ${t}`}:{success:!1,error:`No flow target provided for flow action`}}async executeActionSchema(e){let t={success:!0};if(e.api||e.endpoint){let n=await this.executeAPI(e);if(!n.success)return n;t.data=n.data}return e.onClick&&await e.onClick(),t.reload=e.reload!==!1,t.close=e.close!==!1,e.redirect&&(t.redirect=this.evaluator.evaluate(e.redirect)),t}async executeNavigation(e){let t=e.navigate||e,n=this.evaluator.evaluate(t.to||t.target);if(!this.isValidUrl(n))return{success:!1,error:`Invalid URL scheme. Only http://, https://, and relative URLs are allowed.`};let r=t.external||typeof n==`string`&&(n.startsWith(`http://`)||n.startsWith(`https://`));if(this.navigationHandler)return this.navigationHandler(n,{external:r,newTab:t.newTab??r,replace:t.replace}),{success:!0};if(r)window.open(n,`_blank`,`noopener,noreferrer`);else return{success:!0,redirect:n};return{success:!0}}async executeAPI(e){let t=e.api||e.endpoint||e.target;if(!t)return{success:!1,error:`No API endpoint provided`};try{let n,r,i={"Content-Type":`application/json`},a,o=`json`;if(typeof t==`string`)n=this.interpolateTarget(t,e),r=e.method||`POST`,a=JSON.stringify(e.params||this.context.data||{});else{let s=t;if(n=this.interpolateTarget(s.url,e),r=s.method||e.method||`POST`,i={...i,...s.headers},o=s.responseType||`json`,s.queryParams){let e=new URLSearchParams(s.queryParams);n=`${n}${n.includes(`?`)?`&`:`?`}${e.toString()}`}s.body?a=typeof s.body==`string`?s.body:JSON.stringify(s.body):r!==`GET`&&r!==`HEAD`&&(a=JSON.stringify(e.params||this.context.data||{}))}let s={method:r,headers:i};a&&r!==`GET`&&r!==`HEAD`&&(s.body=a);let c=await fetch(n,s);if(!c.ok)throw Error(`HTTP ${c.status}: ${c.statusText}`);let l;switch(o){case`text`:l=await c.text();break;case`blob`:l=await c.blob();break;default:l=await c.json()}return{success:!0,data:l}}catch(e){return{success:!1,error:e.message}}}isValidUrl(e){return typeof e==`string`&&(e.startsWith(`http://`)||e.startsWith(`https://`)||e.startsWith(`/`)||e.startsWith(`./`))}interpolateTarget(e,t){if(typeof e!=`string`||e.indexOf("${")===-1)return e;let n=t.params&&typeof t.params==`object`&&!Array.isArray(t.params)?t.params:{},r=this.buildInterpolationContext();return e.replace(/\$\{(param|ctx)\.([\w.]+)\}/g,(e,t,i)=>{let a=re(t===`param`?n:r,i);return a==null?``:encodeURIComponent(String(a))})}buildInterpolationContext(){let e={origin:typeof window<`u`?window.location.origin:``,apiBase:typeof this.context.apiBase==`string`?this.context.apiBase.replace(/\/+$/,``):``,user:this.context.user??{},org:this.context.org??this.context.organization??{},recordId:this.context.record?.id??this.context.recordId};return this.context.ctx&&typeof this.context.ctx==`object`&&Object.assign(e,this.context.ctx),e}updateContext(e){this.context={...this.context,...e},this.evaluator.updateContext(e)}getContext(){return this.context}getEvaluator(){return this.evaluator}};function re(e,t){if(e!=null)return t.split(`.`).reduce((e,t)=>{if(e!=null)return e[t]},e)}function ie(e){return/^[a-z][a-z0-9]*(_[a-z0-9]+)*$/.test(e)}function ae(e){return{type:`app`,name:e.name,title:e.title,label:e.title,description:e.description,icon:e.icon,logo:e.branding.logo,favicon:e.branding.favicon,branding:e.branding,layout:e.layout,navigation:e.navigation}}function oe(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.name==`string`&&typeof t.objectName==`string`&&Array.isArray(t.columns)}function se(e){if(!oe(e))return!1;let t=e;return t.type===`joined`&&Array.isArray(t.blocks)}var ce=[`list_toolbar`,`list_item`,`record_header`,`record_more`,`record_related`,`record_section`,`global_nav`];r(ce);function le(e){return e.toLowerCase().split(`+`).map(e=>e.trim()).sort().join(`+`)}var ue=class{actions=new Map;mappings=[];shortcuts=[];normalizedShortcutMap=new Map;runner;constructor(e={}){this.runner=e instanceof j?e:new j(e)}getRunner(){return this.runner}registerAction(e,t){let n=e.name||e.type||``;if(!n)throw Error(`Action must have a name or type`);this.actions.set(n,{action:e,locations:t?.locations||[],shortcut:t?.shortcut,bulkEnabled:t?.bulkEnabled??!1,priority:t?.priority??100}),t?.shortcut&&(this.shortcuts.push({keys:t.shortcut,actionName:n}),this.normalizedShortcutMap.set(le(t.shortcut),n))}registerActions(e){for(let t of e)this.registerAction(t,{locations:t.locations,shortcut:t.shortcut,bulkEnabled:t.bulkEnabled})}unregisterAction(e){let t=this.actions.get(e);t?.shortcut&&this.normalizedShortcutMap.delete(le(t.shortcut)),this.actions.delete(e),this.shortcuts=this.shortcuts.filter(t=>t.actionName!==e),this.mappings=this.mappings.filter(t=>t.actionName!==e)}addMapping(e){this.mappings.push(e)}getActionsForLocation(e){let t=this.runner.getEvaluator();return Array.from(this.actions.values()).filter(t=>t.locations.includes(e)).filter(e=>{let n=e.action.visible;if(n==null||n===``||n===!0)return!0;if(n===!1)return!1;let r;if(typeof n==`string`)r=`\${${n}}`;else if(typeof n==`object`&&typeof n.source==`string`){let e=n.source;if(!e)return!0;r=`\${${e}}`}else r=!!n;try{return t.evaluateCondition(r,{throwOnError:!0})}catch{return!1}}).sort((e,t)=>(e.priority??100)-(t.priority??100)).map(e=>e.action)}getBulkActions(){return Array.from(this.actions.values()).filter(e=>e.bulkEnabled).sort((e,t)=>(e.priority??100)-(t.priority??100)).map(e=>e.action)}getShortcuts(){return[...this.shortcuts]}getAction(e){return this.actions.get(e)?.action}async executeAction(e,t){let n=this.actions.get(e);return n?(t&&this.runner.updateContext(t),this.runner.execute(n.action)):{success:!1,error:`Action not found: ${e}`}}async dispatch(e,t){let n=this.mappings.filter(t=>t.event===e);if(n.length===0)return[];let r=[];for(let e of n){if(e.condition&&!this.runner.getEvaluator().evaluateCondition(e.condition))continue;let n=await this.executeAction(e.actionName,t);r.push(n)}return r}async handleShortcut(e,t){let n=this.normalizedShortcutMap.get(le(e));return n?this.executeAction(n,t):null}async executeBulk(e,t,n){let r=this.actions.get(e);if(!r)return{total:0,succeeded:0,failed:0,results:[{success:!1,error:`Action not found: ${e}`}]};if(!r.bulkEnabled)return{total:0,succeeded:0,failed:0,results:[{success:!1,error:`Action ${e} does not support bulk operations`}]};let i=[],a=0,o=0;if(n?.parallel){let e=t.map(e=>(this.runner.updateContext({record:e,selectedRecords:t}),this.runner.execute(r.action))),n=await Promise.allSettled(e);for(let e of n)e.status===`fulfilled`?(i.push(e.value),e.value.success?a++:o++):(i.push({success:!1,error:e.reason?.message||`Unknown error`}),o++)}else for(let e of t){this.runner.updateContext({record:e,selectedRecords:t});let s=await this.runner.execute(r.action);if(i.push(s),s.success)a++;else if(o++,!n?.continueOnError)break}return{total:t.length,succeeded:a,failed:o,results:i}}updateContext(e){this.runner.updateContext(e)}clear(){this.actions.clear(),this.mappings=[],this.shortcuts=[],this.normalizedShortcutMap.clear()}};function de(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.id==`string`&&typeof t.type==`string`&&typeof t.objectName==`string`&&typeof t.recordId==`string`&&typeof t.timestamp==`number`}var M=new class e{undoStack=[];redoStack=[];maxHistory;listeners=new Set;constructor(e){this.maxHistory=e?.maxHistory??50}push(e){this.undoStack.push(e),this.undoStack.length>this.maxHistory&&this.undoStack.shift(),this.redoStack=[],this.notify()}peekUndo(){return this.undoStack[this.undoStack.length-1]}peekRedo(){return this.redoStack[this.redoStack.length-1]}popUndo(){let e=this.undoStack.pop();return e&&(this.redoStack.push(e),this.notify()),e}popRedo(){let e=this.redoStack.pop();return e&&(this.undoStack.push(e),this.notify()),e}clear(){this.undoStack=[],this.redoStack=[],this.notify()}get canUndo(){return this.undoStack.length>0}get canRedo(){return this.redoStack.length>0}get undoCount(){return this.undoStack.length}get redoCount(){return this.redoStack.length}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}getHistory(){return[...this.undoStack]}getRedoHistory(){return[...this.redoStack]}pushBatch(e){e.length!==0&&(this.undoStack.push(...e),this.undoStack.length>this.maxHistory&&this.undoStack.splice(0,this.undoStack.length-this.maxHistory),this.redoStack=[],this.notify())}popUndoBatch(e){let t=Math.min(e,this.undoStack.length);if(t===0)return[];let n=this.undoStack.splice(this.undoStack.length-t,t);return this.redoStack.push(...n),this.notify(),n}popRedoBatch(e){let t=Math.min(e,this.redoStack.length);if(t===0)return[];let n=this.redoStack.splice(this.redoStack.length-t,t);return this.undoStack.push(...n),this.notify(),n}static STORAGE_KEY=`objectui:undo-history`;saveToStorage(){try{let t=JSON.stringify({undoStack:this.undoStack,redoStack:this.redoStack});localStorage.setItem(e.STORAGE_KEY,t)}catch{}}loadFromStorage(){try{if(typeof localStorage>`u`)return;let t=localStorage.getItem(e.STORAGE_KEY);if(!t)return;let n=JSON.parse(t);Array.isArray(n.undoStack)&&(this.undoStack=n.undoStack.filter(de)),Array.isArray(n.redoStack)&&(this.redoStack=n.redoStack.filter(de)),this.undoStack.length>this.maxHistory&&this.undoStack.splice(0,this.undoStack.length-this.maxHistory),this.notify()}catch{}}notify(){this.listeners.forEach(e=>e())}};async function fe(e,t){let{ids:n,allowBulk:r,offset:i,label:a=`bulk`}=e,o={succeeded:0,failed:0,errors:[]};if(r&&typeof t.bulkCall==`function`)try{let e=await t.bulkCall(n),r=Math.max(0,Math.min(e,n.length));o.succeeded+=r;let s=n.length-r;return s>0&&(o.failed+=s,o.errors.push({id:`batch_${i}`,error:`${s} record${s===1?``:`s`} failed in ${a}`})),o}catch{}return(await Promise.allSettled(n.map(e=>t.perRow(e)))).forEach((e,t)=>{e.status===`fulfilled`?o.succeeded+=1:(o.failed+=1,o.errors.push({id:n[t],error:e.reason instanceof Error?e.reason.message:String(e.reason)}))}),o}function N(e,t){return t?e[t]:e.id??e._id}function pe(e,t){if(!t||t.length===0)return!0;let n=t[0];if(n===`and`)return t.slice(1).every(t=>pe(e,t));if(n===`or`)return t.slice(1).some(t=>pe(e,t));if(t.length===3&&typeof n==`string`){let[n,r,i]=t,a=e[n];switch(r){case`=`:return a===i;case`!=`:return a!==i;case`>`:return a>i;case`>=`:return a>=i;case`<`:return a<i;case`<=`:return a<=i;case`in`:return Array.isArray(i)&&i.includes(a);case`not in`:case`not_in`:case`nin`:case`notin`:return Array.isArray(i)&&!i.includes(a);case`contains`:{let e=typeof a==`string`?a.toLowerCase():``;return typeof a==`string`&&e.includes(String(i).toLowerCase())}case`notcontains`:{let e=typeof a==`string`?a.toLowerCase():``;return typeof a==`string`&&!e.includes(String(i).toLowerCase())}case`startswith`:{let e=typeof a==`string`?a.toLowerCase():``;return typeof a==`string`&&e.startsWith(String(i).toLowerCase())}case`between`:return Array.isArray(i)&&i.length===2&&a>=i[0]&&a<=i[1];default:return!0}}return!0}function me(e,t){for(let[n,r]of Object.entries(t)){let t=e[n];if(r&&typeof r==`object`&&!Array.isArray(r))for(let[e,n]of Object.entries(r))switch(e){case`$gt`:if(!(t>n))return!1;break;case`$gte`:if(!(t>=n))return!1;break;case`$lt`:if(!(t<n))return!1;break;case`$lte`:if(!(t<=n))return!1;break;case`$ne`:if(t===n)return!1;break;case`$in`:if(!Array.isArray(n)||!n.includes(t))return!1;break;case`$contains`:if(typeof t!=`string`||!t.toLowerCase().includes(String(n).toLowerCase()))return!1;break;default:break}else if(t!==r)return!1}return!0}function he(e,t){if(!t)return e;let n=[];return Array.isArray(t)?n=t.map(e=>typeof e==`string`?e.startsWith(`-`)?{field:e.slice(1),order:`desc`}:{field:e,order:`asc`}:{field:e.field,order:e.order??`asc`}):typeof t==`object`&&(n=Object.entries(t).map(([e,t])=>({field:e,order:t}))),n.length===0?e:[...e].sort((e,t)=>{for(let{field:r,order:i}of n){let n=e[r],a=t[r];if(n===a)continue;if(n==null)return i===`asc`?-1:1;if(a==null)return i===`asc`?1:-1;let o=n<a?-1:1;return i===`asc`?o:-o}return 0})}function ge(e,t){if(!t||t.length===0)return e;let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}var _e=class{items;idField;mutationListeners=new Set;constructor(e){this.items=JSON.parse(JSON.stringify(e.items)),this.idField=e.idField}emitMutation(e){for(let t of this.mutationListeners)try{t(e)}catch(e){console.warn(`ValueDataSource: mutation listener error`,e)}}async find(e,t){let n=[...this.items];if(t?.$filter&&(Array.isArray(t.$filter)&&t.$filter.length>0?n=n.filter(e=>pe(e,t.$filter)):!Array.isArray(t.$filter)&&Object.keys(t.$filter).length>0&&(n=n.filter(e=>me(e,t.$filter)))),t?.$search){let e=t.$search.toLowerCase();n=n.filter(t=>Object.values(t).some(t=>typeof t==`string`&&t.toLowerCase().includes(e)))}let r=n.length;n=he(n,t?.$orderby);let i=t?.$skip??0,a=t?.$top;return i>0&&(n=n.slice(i)),a!==void 0&&(n=n.slice(0,a)),t?.$select?.length&&(n=n.map(e=>ge(e,t.$select))),{data:n,total:r,hasMore:i+(a??n.length)<r}}async findOne(e,t,n){let r=this.items.find(e=>String(N(e,this.idField))===String(t));return r?n?.$select?.length?ge(r,n.$select):{...r}:null}async create(e,t){let n={...t};if(!N(n,this.idField)){let e=this.idField??`id`;n[e]=`auto_${Date.now()}_${Math.random().toString(36).slice(2,8)}`}return this.items.push(n),this.emitMutation({type:`create`,resource:e,record:{...n}}),{...n}}async update(e,t,n){let r=this.items.findIndex(e=>String(N(e,this.idField))===String(t));if(r===-1)throw Error(`ValueDataSource: Record with id "${t}" not found`);return this.items[r]={...this.items[r],...n},this.emitMutation({type:`update`,resource:e,id:t,record:{...this.items[r]}}),{...this.items[r]}}async delete(e,t){let n=this.items.findIndex(e=>String(N(e,this.idField))===String(t));return n===-1?!1:(this.items.splice(n,1),this.emitMutation({type:`delete`,resource:e,id:t}),!0)}async bulk(e,t,n){let r=[];for(let i of n)switch(t){case`create`:r.push(await this.create(e,i));break;case`update`:{let t=N(i,this.idField);t!==void 0&&r.push(await this.update(e,t,i));break}case`delete`:{let t=N(i,this.idField);t!==void 0&&await this.delete(e,t);break}}return r}async getObjectSchema(e){if(this.items.length===0)return{name:e,fields:{}};let t=this.items[0],n={};for(let[e,r]of Object.entries(t))n[e]={type:typeof r};return{name:e,fields:n}}async getView(e,t){return null}async getApp(e){return null}async aggregate(e,t){let{field:n,function:r,groupBy:i}=t,a={};for(let e of this.items){let t=String(e[i]??`Unknown`);a[t]||(a[t]=[]),a[t].push(e)}return Object.entries(a).map(([e,t])=>{let a=t.map(e=>Number(e[n])||0),o;switch(r){case`count`:o=t.length;break;case`avg`:o=a.length>0?a.reduce((e,t)=>e+t,0)/a.length:0;break;case`min`:o=a.length>0?Math.min(...a):0;break;case`max`:o=a.length>0?Math.max(...a):0;break;default:o=a.reduce((e,t)=>e+t,0);break}return{[i]:e,[n]:o}})}onMutation(e){return this.mutationListeners.add(e),()=>{this.mutationListeners.delete(e)}}get count(){return this.items.length}getAll(){return JSON.parse(JSON.stringify(this.items))}},P=`https://objectui.dev/docs/errors`,ve={"OBJUI-001":{code:`OBJUI-001`,message:'Unknown component type: "${type}"',suggestion:`Ensure the component is registered via registry.register() before rendering. Check for typos in the component type name.`,docUrl:`${P}/OBJUI-001`},"OBJUI-002":{code:`OBJUI-002`,message:"Schema validation failed: ${reason}",suggestion:`Verify the schema against the ObjectUI JSON spec. Run the built-in schema validator for details.`,docUrl:`${P}/OBJUI-002`},"OBJUI-003":{code:`OBJUI-003`,message:"Expression evaluation failed: ${expression}",suggestion:`Check the expression syntax and ensure all referenced variables exist in the current data scope.`,docUrl:`${P}/OBJUI-003`},"OBJUI-004":{code:`OBJUI-004`,message:'Plugin dependency missing: "${dependency}"',suggestion:`Install the required dependency and register it before loading this plugin.`,docUrl:`${P}/OBJUI-004`},"OBJUI-005":{code:`OBJUI-005`,message:'Plugin already loaded: "${plugin}"',suggestion:`A plugin with the same name is already registered. Remove the duplicate or use a unique plugin name.`,docUrl:`${P}/OBJUI-005`},"OBJUI-006":{code:`OBJUI-006`,message:'Plugin not found: "${plugin}"',suggestion:`Verify the plugin name and ensure it has been registered before access.`,docUrl:`${P}/OBJUI-006`},"OBJUI-007":{code:`OBJUI-007`,message:'Registry namespace deprecated: "${namespace}"',suggestion:`Migrate to the new namespace format. See the migration guide for details.`,docUrl:`${P}/OBJUI-007`},"OBJUI-008":{code:`OBJUI-008`,message:'Read-only scope violation: "${scope}"',suggestion:`You are trying to mutate a read-only data scope. Use a writable scope or clone the data before modifying.`,docUrl:`${P}/OBJUI-008`},"OBJUI-009":{code:`OBJUI-009`,message:'Invalid field configuration: "${field}"',suggestion:`Check the field schema for required properties (type, name). Ensure the field widget is registered.`,docUrl:`${P}/OBJUI-009`},"OBJUI-010":{code:`OBJUI-010`,message:'Action execution failed: "${action}"',suggestion:`Verify the action handler is registered and that all required parameters are provided.`,docUrl:`${P}/OBJUI-010`}},ye=class extends Error{code;details;constructor(e,t,n){super(e),this.code=t,this.details=n,this.name=`ObjectUIError`,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,message:this.message,code:this.code,details:this.details,stack:this.stack}}};function be(e){return e instanceof ye}var F=`__debug`;function xe(e){let t=e;if(t===void 0)try{t=typeof window<`u`?window.location.search:``}catch{t=``}let n=new URLSearchParams(t),r=n.has(F),i=n.has(`${F}_schema`),a=n.has(`${F}_perf`),o=n.has(`${F}_data`),s=n.has(`${F}_expr`),c=n.has(`${F}_events`),l=n.has(`${F}_registry`);return{enabled:r||i||a||o||s||c||l,...i&&{schema:i},...a&&{perf:a},...o&&{data:o},...s&&{expr:s},...c&&{events:c},...l&&{registry:l}}}function Se(){try{if(typeof window<`u`)try{if(xe(window.location.search).enabled)return!0}catch{}let e=typeof globalThis<`u`&&globalThis.OBJECTUI_DEBUG;return e===!0||e===`true`||globalThis.process?.env?.OBJECTUI_DEBUG===`true`}catch{return!1}}function Ce(e,t,n){Se()&&(n===void 0?console.log(`[ObjectUI Debug][${e}] ${t}`):console.log(`[ObjectUI Debug][${e}] ${t}`,n))}var we=new Map;function Te(e){Se()&&we.set(e,performance.now())}function Ee(e){if(!Se())return;let t=we.get(e);if(t!==void 0){let n=(performance.now()-t).toFixed(2);console.log(`[ObjectUI Debug][perf] ${e}: ${n}ms`),we.delete(e)}}var De=200,Oe=class e{static instance=null;entries=[];subscribers=new Set;static getInstance(){return e.instance||=new e,e.instance}static resetInstance(){e.instance=null}addPerf(e){this.push({kind:`perf`,data:e})}addExpr(e){this.push({kind:`expr`,data:e})}addEvent(e){this.push({kind:`event`,data:e})}getEntries(e){return e?this.entries.filter(t=>t.kind===e):this.entries.slice()}clear(){this.entries=[]}subscribe(e){return this.subscribers.add(e),()=>this.subscribers.delete(e)}push(e){this.entries.push(e),this.entries.length>De&&(this.entries=this.entries.slice(-200));for(let t of this.subscribers)try{t(e)}catch{}}},ke=/\$\{event\.([a-zA-Z0-9_]+)\}/g;function Ae(e,t){return typeof e!=`string`||e.indexOf("${event.")===-1?e:e.replace(ke,(e,n)=>{let r=t[n];return r==null?``:String(r)})}function je(e,t){if(typeof e==`string`){let n=e.match(/^\$\{event\.([a-zA-Z0-9_]+)\}$/);if(n){let e=t[n[1]];return e===``||e===void 0?null:e}return Ae(e,t)}if(Array.isArray(e))return e.map(e=>je(e,t));if(e&&typeof e==`object`){let n={};for(let[r,i]of Object.entries(e))n[r]=je(i,t);return n}return e}function Me(e,t,n={}){if(e?.filter)return je(e.filter,t);let r={},{rowField:i,columnField:a,groupByField:o}=n,s=t.scope??`cell`;return s===`total`?r:((s===`cell`||s===`row`)&&i&&`rowKey`in t&&(r[i]=t.rowKey===``?null:t.rowKey),(s===`cell`||s===`column`)&&a&&`colKey`in t&&(r[a]=t.colKey===``?null:t.colKey),o&&`category`in t&&(r[o]=t.category===``?null:t.category),r)}function Ne(e,t,n=`Details`){if(e?.title){let n=Ae(e.title,t).trim();if(n)return n}let r=[];return t.rowLabel&&r.push(t.rowLabel),t.colLabel&&r.push(t.colLabel),t.categoryLabel?r.push(t.categoryLabel):t.category&&r.push(t.category),t.series&&r.push(t.series),r.length>0?r.join(` × `):n}function Pe(e){return e?e.enabled!==!1:!1}function Fe(e,t=new Date){if(e==null)return e;let n=e=>{let t=new Date(e);return t.setHours(0,0,0,0),t},r=e=>{let t=n(e);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}`},i=e=>{let t=n(e),r=(t.getDay()+6)%7;return t.setDate(t.getDate()-r),t},a=e=>new Date(e.getFullYear(),e.getMonth(),1),o=e=>{let t=Math.floor(e.getMonth()/3);return new Date(e.getFullYear(),t*3,1)},s=e=>new Date(e.getFullYear(),0,1),c=(e,t)=>new Date(e.getFullYear(),e.getMonth()+t,1),l=(e,t)=>{let r=n(e);return r.setDate(r.getDate()+t),r},u=e=>l(c(a(e),1),-1),d=e=>l(i(e),6),f=e=>l(c(o(e),3),-1),p=e=>new Date(e.getFullYear(),11,31),m={today:()=>r(t),yesterday:()=>r(l(t,-1)),tomorrow:()=>r(l(t,1)),now:()=>t.toISOString(),current_week_start:()=>r(i(t)),current_week_end:()=>r(d(t)),current_month_start:()=>r(a(t)),current_month_end:()=>r(u(t)),current_quarter_start:()=>r(o(t)),current_quarter_end:()=>r(f(t)),current_year_start:()=>r(s(t)),current_year_end:()=>r(p(t)),last_week_start:()=>r(l(i(t),-7)),last_week_end:()=>r(l(i(t),-1)),last_month_start:()=>r(c(a(t),-1)),last_month_end:()=>r(l(a(t),-1)),last_quarter_start:()=>r(c(o(t),-3)),last_quarter_end:()=>r(l(o(t),-1)),last_year_start:()=>r(new Date(t.getFullYear()-1,0,1)),last_year_end:()=>r(new Date(t.getFullYear()-1,11,31)),next_week_start:()=>r(l(i(t),7)),next_month_start:()=>r(c(a(t),1)),next_quarter_start:()=>r(c(o(t),3)),next_year_start:()=>r(new Date(t.getFullYear()+1,0,1))};for(let[e,t]of Object.entries({week_start:`current_week_start`,week_end:`current_week_end`,month_start:`current_month_start`,month_end:`current_month_end`,quarter_start:`current_quarter_start`,quarter_end:`current_quarter_end`,year_start:`current_year_start`,year_end:`current_year_end`}))m[e]=m[t];let h=/^(\d+)_(minutes?|hours?|days?|weeks?|months?|years?)_(ago|from_now)$/,g=e=>{let n=e.match(h);if(!n)return null;let i=parseInt(n[1],10);if(!Number.isFinite(i))return null;let a=n[3]===`ago`?-1:1,o=n[2].replace(/s$/,``);return o===`minute`?new Date(t.getTime()+a*i*60*1e3).toISOString():o===`hour`?new Date(t.getTime()+a*i*60*60*1e3).toISOString():o===`day`?r(l(t,a*i)):o===`week`?r(l(t,a*i*7)):o===`month`?r(new Date(t.getFullYear(),t.getMonth()+a*i,t.getDate())):o===`year`?r(new Date(t.getFullYear()+a*i,t.getMonth(),t.getDate())):null},_=/\$?\{([a-zA-Z0-9_]+)\}/g,v=e=>{if(e==null)return e;if(typeof e==`string`){let t=e.match(/^\$?\{([a-zA-Z0-9_]+)\}$/);if(t){let e=t[1];if(m[e])return m[e]();let n=g(e);if(n!=null)return n}let n=!1,r=e.replace(_,(e,t)=>{if(m[t])return n=!0,m[t]();let r=g(t);return r==null?e:(n=!0,r)});return n?r:e}if(Array.isArray(e))return e.map(v);if(typeof e==`object`){let t={};for(let n of Object.keys(e))t[n]=v(e[n]);return t}return e};return v(e)}var Ie={current_week_start:`last_week_start`,current_week_end:`last_week_end`,current_month_start:`last_month_start`,current_month_end:`last_month_end`,current_quarter_start:`last_quarter_start`,current_quarter_end:`last_quarter_end`,current_year_start:`last_year_start`,current_year_end:`last_year_end`,week_start:`last_week_start`,week_end:`last_week_end`,month_start:`last_month_start`,month_end:`last_month_end`,quarter_start:`last_quarter_start`,quarter_end:`last_quarter_end`,year_start:`last_year_start`,year_end:`last_year_end`,today:`yesterday`};function Le(e,t){if(e==null)return e;if(typeof e==`string`)return e.replace(/\$?\{([a-zA-Z0-9_]+)\}/g,(e,n)=>{let r=t[n];return r?`{${r}}`:e});if(Array.isArray(e))return e.map(e=>Le(e,t));if(typeof e==`object`){let n={};for(let r of Object.keys(e))n[r]=Le(e[r],t);return n}return e}function Re(e,t){let n=t.match(/^(\d+)([dwMy])$/);if(!n)return null;let r=parseInt(n[1],10),i=n[2],a=new Date(e);if(i===`d`)a.setDate(a.getDate()-r);else if(i===`w`)a.setDate(a.getDate()-r*7);else if(i===`M`)a.setMonth(a.getMonth()-r);else if(i===`y`)a.setFullYear(a.getFullYear()-r);else return null;return a}function ze(e,t,n=new Date){if(t===`previousYear`)return Fe(e,new Date(n.getFullYear()-1,n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds()));if(typeof t==`object`&&t&&`offset`in t){let r=Re(n,t.offset);return r?Fe(e,r):Fe(e,n)}return Fe(Le(e,Ie),n)}function Be(e,t){if(e===`previousYear`)return`vsLastYear`;if(typeof e==`object`&&e&&`offset`in e)return`vsPreviousPeriod`;let n=t?JSON.stringify(t):``;return/current_year_|year_start|year_end/.test(n)?`vsLastYear`:/current_quarter_|quarter_start|quarter_end/.test(n)?`vsLastQuarter`:/current_month_|month_start|month_end/.test(n)?`vsLastMonth`:/current_week_|week_start|week_end/.test(n)?`vsLastWeek`:/\btoday\b/.test(n)?`vsYesterday`:`vsPreviousPeriod`}var I=e(n(),1),L=t(),Ve=(0,I.createContext)(null),He=({children:e,dataSource:t,debug:n,debugFlags:r})=>{let i=(0,I.useMemo)(()=>({dataSource:t,debug:n,debugFlags:r}),[t,n,r]);return(0,L.jsx)(Ve.Provider,{value:i,children:e})},Ue=()=>{let e=(0,I.useContext)(Ve);if(!e)throw Error(`useSchemaContext must be used within a SchemaRendererProvider`);return e},We=e=>{let t=(0,I.useContext)(Ve)?.dataSource;if(e&&t)return e.split(`.`).reduce((e,t)=>e&&e[t],t)};function Ge(e){if(e!=null)return typeof e==`string`?e:e.defaultValue||e.key}var Ke=(()=>{try{return!1}catch{return!0}})(),qe=typeof WeakMap<`u`?new WeakMap:{set(){},get(){},has(){return!1}},Je=typeof WeakSet<`u`?new WeakSet:{add(){},has(){return!1}};function Ye(e){if(!Ke||!e||typeof e!=`object`)return{valid:!0,messages:[]};let t=qe.get(e);if(t)return t;let n={valid:!0,messages:[]};try{let t=m(e);if(!t.valid){let r=t.errors.map(e=>`${e.path}: ${e.message}`);n={valid:!1,messages:r},Je.has(e)||(Je.add(e),console.warn(`[ObjectUI] Invalid schema detected:
1
+ import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{r as t,y as n}from"./vendor-react-BMpe6Iqg.js";import{m as r}from"./vendor-objectstack-DCNcl1ou.js";import{i,n as a,r as o,t as s}from"./vendor-i18n-D22Ua8-0.js";var c=new class{components=new Map;lazyEntries=new Map;listeners=new Set;register(e,t,n){let r=n?.namespace?`${n.namespace}:${e}`:e;n?.namespace||console.warn(`Registering component "${e}" without a namespace is deprecated. Please provide a namespace in the meta parameter.\n\n Migration:\n // Before (deprecated):\n registry.register('${e}', MyComponent);\n\n // After:\n registry.register('${e}', MyComponent, { namespace: 'my-plugin' });\n\n See: https://github.com/objectstack-ai/objectui/blob/main/MIGRATION_GUIDE.md`),this.components.has(r),this.components.set(r,{type:r,component:t,...n}),n?.namespace&&!n?.skipFallback&&this.components.set(e,{type:r,component:t,...n}),this.lazyEntries.delete(r),this.lazyEntries.delete(e),this.notify()}registerLazy(e,t,n){let r=n?.namespace?`${n.namespace}:${e}`:e,i={loader:t,meta:n};this.lazyEntries.set(r,i),n?.namespace&&!n?.skipFallback&&this.lazyEntries.set(e,i)}hasLazy(e,t){return t?this.lazyEntries.has(`${t}:${e}`):this.lazyEntries.has(e)}loadLazy(e,t){let n=t?`${t}:${e}`:e,r=this.lazyEntries.get(n);if(r)return r.pending||=r.loader().catch(e=>{throw r.pending=void 0,e}),r.pending}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}notify(){for(let e of this.listeners)try{e()}catch(e){console.error(`[Registry] listener error`,e)}}get(e,t){if(t){let n=`${t}:${e}`;return this.components.get(n)?.component}return this.components.get(e)?.component}getConfig(e,t){if(t){let n=`${t}:${e}`;return this.components.get(n)}return this.components.get(e)}has(e,t){if(t){let n=`${t}:${e}`;return this.components.has(n)}return this.components.has(e)}getAllTypes(){return Array.from(this.components.keys())}getAllConfigs(){return Array.from(this.components.values())}getNamespaceComponents(e){return Array.from(this.components.values()).filter(t=>t.namespace===e)}},l={type:{required:!0,validate:e=>typeof e==`string`&&e.length>0,message:`type must be a non-empty string`},id:{required:!1,validate:e=>typeof e==`string`,message:`id must be a string`},className:{required:!1,validate:e=>typeof e==`string`,message:`className must be a string`},visible:{required:!1,validate:e=>typeof e==`boolean`,message:`visible must be a boolean`},disabled:{required:!1,validate:e=>typeof e==`boolean`,message:`disabled must be a boolean`}};function u(e,t=`schema`){let n=[];return!e||typeof e!=`object`?(n.push({path:t,message:`Schema must be an object`,type:`error`,code:`INVALID_SCHEMA`}),n):(Object.entries(l).forEach(([r,i])=>{let a=e[r];i.required&&a===void 0&&n.push({path:`${t}.${r}`,message:`${r} is required`,type:`error`,code:`MISSING_REQUIRED`}),a!==void 0&&!i.validate(a)&&n.push({path:`${t}.${r}`,message:i.message,type:`error`,code:`INVALID_TYPE`})}),n)}function d(e,t=`schema`){let n=[];return e.type===`crud`&&((!e.columns||!Array.isArray(e.columns))&&n.push({path:`${t}.columns`,message:`CRUD schema requires columns array`,type:`error`,code:`MISSING_COLUMNS`}),!e.api&&!e.dataSource&&n.push({path:`${t}.api`,message:`CRUD schema requires api or dataSource`,type:`warning`,code:`MISSING_DATA_SOURCE`}),e.columns&&Array.isArray(e.columns)&&e.columns.forEach((e,r)=>{e.name||n.push({path:`${t}.columns[${r}]`,message:`Column requires name property`,type:`error`,code:`MISSING_COLUMN_NAME`})}),e.fields&&Array.isArray(e.fields)&&e.fields.forEach((e,r)=>{e.name||n.push({path:`${t}.fields[${r}]`,message:`Field requires name property`,type:`error`,code:`MISSING_FIELD_NAME`})})),n}function f(e,t=`schema`){let n=[];return e.type===`form`&&e.fields&&Array.isArray(e.fields)&&e.fields.forEach((r,i)=>{r.name||n.push({path:`${t}.fields[${i}]`,message:`Form field requires name property`,type:`error`,code:`MISSING_FIELD_NAME`}),e.fields.filter(e=>e.name===r.name).length>1&&n.push({path:`${t}.fields[${i}]`,message:`Duplicate field name: ${r.name}`,type:`warning`,code:`DUPLICATE_FIELD_NAME`})}),n}function p(e,t=`schema`){let n=[],r=e.children||e.body;if(r){if(Array.isArray(r))r.forEach((e,r)=>{if(typeof e==`object`&&e){let i=m(e,`${t}.children[${r}]`);n.push(...i.errors,...i.warnings)}});else if(typeof r==`object`&&r){let e=m(r,`${t}.children`);n.push(...e.errors,...e.warnings)}}return n}function m(e,t=`schema`){let n=[];n.push(...u(e,t)),n.push(...d(e,t)),n.push(...f(e,t)),n.push(...p(e,t));let r=n.filter(e=>e.type===`error`),i=n.filter(e=>e.type===`warning`);return{valid:r.length===0,errors:r,warnings:i}}function h(e){return{$eq:`=`,$ne:`!=`,$gt:`>`,$gte:`>=`,$lt:`<`,$lte:`<=`,$in:`in`,$nin:`nin`,$notin:`nin`,$between:`between`,$contains:`contains`,$notContains:`notcontains`,$notcontains:`notcontains`,$startsWith:`startswith`,$startswith:`startswith`,$endsWith:`endswith`,$endswith:`endswith`}[e]||null}function g(e){let t=[];for(let[n,r]of Object.entries(e))if(r!=null)if(typeof r==`object`&&!Array.isArray(r))for(let[e,i]of Object.entries(r)){if(e===`$regex`){console.warn(`[ObjectUI] Warning: \$regex operator is not fully supported. Converting to 'contains' which only supports substring matching, not regex patterns. Field: '${n}', Value: ${JSON.stringify(i)}. Consider using $contains or $startsWith instead.`),t.push([n,`contains`,i]);continue}if(e===`$null`){t.push([n,i?`is_null`:`is_not_null`,!0]);continue}if(e===`$exists`){t.push([n,i?`is_not_null`:`is_null`,!0]);continue}let r=h(e);if(r)t.push([n,r,i]);else throw Error(`[ObjectUI] Unknown filter operator '${e}' for field '${n}'. Supported operators: $eq, $ne, $gt, $gte, $lt, $lte, $in, $nin, $between, $contains, $notContains, $startsWith, $endsWith, $null, $exists. If you need exact object matching, use the value directly without an operator.`)}else t.push([n,`=`,r]);return t.length===0?e:t.length===1?t[0]:[`and`,...t]}function _(e){switch(e){case`equals`:case`eq`:return`=`;case`notEquals`:case`ne`:case`neq`:return`!=`;case`contains`:return`contains`;case`notContains`:return`notcontains`;case`greaterThan`:case`gt`:return`>`;case`greaterOrEqual`:case`gte`:return`>=`;case`lessThan`:case`lt`:return`<`;case`lessOrEqual`:case`lte`:return`<=`;case`in`:return`in`;case`notIn`:return`not in`;case`before`:return`<`;case`after`:return`>`;default:return e}}function v(e){if(`id`in e&&`filters`in e&&e.label&&Array.isArray(e.filters))return e;if(`field`in e&&`operator`in e){let t=_(e.operator);return{id:`${e.field}-${e.operator}-${String(e.value??``)}`,label:e.label||`${e.field} ${e.operator} ${String(e.value??``)}`,filters:[[e.field,t,e.value]],icon:e.icon,defaultActive:e.defaultActive}}return e}function y(e){if(!(!e||e.length===0))return e.map(v)}function b(e){if(Array.isArray(e))return e;if(e&&typeof e==`object`){if(Array.isArray(e.records))return e.records;if(Array.isArray(e.data))return e.data;if(Array.isArray(e.value))return e.value}return[]}function x(e,t){if(!e||typeof e!=`object`)return[];let n=[];for(let[t,r]of Object.entries(e))r&&typeof r==`object`&&(r.type===`lookup`||r.type===`master_detail`)&&n.push(t);if(n.length===0)return[];if(t&&Array.isArray(t)&&t.length>0){let e=new Set;for(let n of t)if(typeof n==`string`)e.add(n);else if(n&&typeof n==`object`){let t=n.field??n.name??n.fieldName;t&&e.add(t)}return n.filter(t=>e.has(t))}return n}var S=class e{scopes=[];constructor(e={}){this.scopes.push(new Map(Object.entries(e)))}pushScope(e){this.scopes.push(new Map(Object.entries(e)))}popScope(){this.scopes.length>1&&this.scopes.pop()}get(e){let t=e.split(`.`),n=t[0];for(let e=this.scopes.length-1;e>=0;e--)if(this.scopes[e].has(n)){let r=this.scopes[e].get(n);for(let e=1;e<t.length;e++)if(r&&typeof r==`object`)r=r[t[e]];else return;return r}}set(e,t){this.scopes.length>0&&this.scopes[this.scopes.length-1].set(e,t)}has(e){let t=e.split(`.`)[0];for(let e=this.scopes.length-1;e>=0;e--)if(this.scopes[e].has(t))return!0;return!1}toObject(){let e={};for(let t of this.scopes)for(let[n,r]of t.entries())e[n]=r;return e}createChild(t={}){let n=new e;return n.scopes=[...this.scopes,new Map(Object.entries(t))],n}},C={Math,JSON,parseInt,parseFloat,isNaN,isFinite},ee=new Set([`constructor`,`__proto__`,`prototype`,`__defineGetter__`,`__defineSetter__`,`__lookupGetter__`,`__lookupSetter__`]),w=class e{source=``;pos=0;context={};_evaluating=!0;evaluate(e,t){this.source=e.trim(),this.pos=0,this.context={...C,...t};let n=this.parseTernary();if(this.skipWhitespace(),this.pos<this.source.length)throw SyntaxError(`Unexpected token "${this.source[this.pos]}" at position ${this.pos} in expression "${e}"`);return n}skipWhitespace(){for(;this.pos<this.source.length&&/\s/.test(this.source[this.pos]);)this.pos++}peek(e=0){return this.source[this.pos+e]??``}consume(){return this.source[this.pos++]??``}withEvaluation(e,t){let n=this._evaluating;this._evaluating=e;try{return t()}finally{this._evaluating=n}}assertSafeProp(e){if(typeof e==`string`&&ee.has(e))throw TypeError(`Access to property "${e}" is not permitted in expressions`)}parseTernary(){let e=this.parseNullish();if(this.skipWhitespace(),this.peek()===`?`&&this.peek(1)!==`?`){if(this.pos++,this.skipWhitespace(),!this._evaluating){if(this.parseTernary(),this.skipWhitespace(),this.peek()!==`:`)throw SyntaxError(`Expected ":" in ternary expression`);this.pos++,this.skipWhitespace(),this.parseTernary();return}if(e){let e=this.parseTernary();if(this.skipWhitespace(),this.peek()!==`:`)throw SyntaxError(`Expected ":" in ternary expression`);return this.pos++,this.skipWhitespace(),this.withEvaluation(!1,()=>this.parseTernary()),e}else{if(this.withEvaluation(!1,()=>this.parseTernary()),this.skipWhitespace(),this.peek()!==`:`)throw SyntaxError(`Expected ":" in ternary expression`);return this.pos++,this.skipWhitespace(),this.parseTernary()}}return e}parseNullish(){let e=this.parseOr();for(this.skipWhitespace();this.peek()===`?`&&this.peek(1)===`?`;){if(this.pos+=2,this.skipWhitespace(),this._evaluating&&e!=null)this.withEvaluation(!1,()=>this.parseOr());else{let t=this.parseOr();this._evaluating&&(e??=t)}this.skipWhitespace()}return e}parseOr(){let e=this.parseAnd();for(this.skipWhitespace();this.peek()===`|`&&this.peek(1)===`|`;){if(this.pos+=2,this.skipWhitespace(),this._evaluating&&e)this.withEvaluation(!1,()=>this.parseAnd());else{let t=this.parseAnd();this._evaluating&&(e||=t)}this.skipWhitespace()}return e}parseAnd(){let e=this.parseEquality();for(this.skipWhitespace();this.peek()===`&`&&this.peek(1)===`&`;){if(this.pos+=2,this.skipWhitespace(),this._evaluating&&!e)this.withEvaluation(!1,()=>this.parseEquality());else{let t=this.parseEquality();this._evaluating&&(e&&=t)}this.skipWhitespace()}return e}parseEquality(){let e=this.parseAddition();for(this.skipWhitespace();;){let t=null;if(this.peek()===`=`&&this.peek(1)===`=`&&this.peek(2)===`=`)t=`===`,this.pos+=3;else if(this.peek()===`!`&&this.peek(1)===`=`&&this.peek(2)===`=`)t=`!==`,this.pos+=3;else if(this.peek()===`=`&&this.peek(1)===`=`)t=`==`,this.pos+=2;else if(this.peek()===`!`&&this.peek(1)===`=`)t=`!=`,this.pos+=2;else if(this.peek()===`>`&&this.peek(1)===`=`)t=`>=`,this.pos+=2;else if(this.peek()===`<`&&this.peek(1)===`=`)t=`<=`,this.pos+=2;else if(this.peek()===`>`&&this.peek(1)!==`>`)t=`>`,this.pos++;else if(this.peek()===`<`&&this.peek(1)!==`<`)t=`<`,this.pos++;else break;this.skipWhitespace();let n=this.parseAddition();switch(t){case`===`:e=e===n;break;case`!==`:e=e!==n;break;case`==`:e=e==n;break;case`!=`:e=e!=n;break;case`>`:e=e>n;break;case`<`:e=e<n;break;case`>=`:e=e>=n;break;case`<=`:e=e<=n;break}this.skipWhitespace()}return e}parseAddition(){let e=this.parseMultiplication();for(this.skipWhitespace();(this.peek()===`+`||this.peek()===`-`)&&this.peek(1)!==`=`;){let t=this.consume();this.skipWhitespace();let n=this.parseMultiplication();e=t===`+`?e+n:e-n,this.skipWhitespace()}return e}parseMultiplication(){let e=this.parseUnary();for(this.skipWhitespace();(this.peek()===`*`||this.peek()===`/`||this.peek()===`%`)&&this.peek(1)!==`=`;){let t=this.consume();this.skipWhitespace();let n=this.parseUnary();t===`*`?e*=n:t===`/`?e/=n:e%=n,this.skipWhitespace()}return e}parseUnary(){if(this.skipWhitespace(),this.source.startsWith(`typeof`,this.pos)&&!/[\w$]/.test(this.source[this.pos+6]??``)){this.pos+=6,this.skipWhitespace();try{return typeof this.parseUnary()}catch{return`undefined`}}return this.peek()===`!`?(this.pos++,!this.parseUnary()):this.peek()===`-`?(this.pos++,-this.parseUnary()):this.peek()===`+`?(this.pos++,+this.parseUnary()):this.parseMember()}parseMember(){let e=this.parsePrimary();for(;;){this.skipWhitespace();let t=this.peek()===`?`&&this.peek(1)===`.`;if(this.peek()===`.`&&this.peek(1)!==`.`||t){t&&this.pos++,this.pos++,this.skipWhitespace();let n=this.parseIdentifierName();if(!n)break;if(this.assertSafeProp(n),this.skipWhitespace(),this.peek()===`(`){this.pos++;let t=this.parseArgList();if(this.peek()!==`)`)throw SyntaxError(`Expected ")" after argument list at position ${this.pos}`);if(this.pos++,!this._evaluating){e=void 0;continue}e=e!=null&&typeof e[n]==`function`?e[n](...t):void 0}else{if(!this._evaluating){e=void 0;continue}e=e?.[n]}continue}let n=this.peek()===`?`&&this.peek(1)===`[`;if(this.peek()===`[`||n){n&&this.pos++,this.pos++,this.skipWhitespace();let t=this.parseTernary();if(this.skipWhitespace(),this.peek()!==`]`)throw SyntaxError(`Expected "]" after bracket expression at position ${this.pos}`);if(this.pos++,this.assertSafeProp(t),!this._evaluating){e=void 0;continue}e=e?.[t];continue}if(this.peek()===`(`){this.pos++;let t=this.parseArgList();if(this.peek()!==`)`)throw SyntaxError(`Expected ")" after argument list at position ${this.pos}`);if(this.pos++,!this._evaluating){e=void 0;continue}if(typeof e==`function`)e=e(...t);else throw TypeError(`${String(e)} is not a function`);continue}break}return e}parsePrimary(){this.skipWhitespace();let e=this.peek();if(e===`(`){this.pos++;let e=this.parseTernary();if(this.skipWhitespace(),this.peek()!==`)`)throw SyntaxError(`Expected ")" to close "(" expression at position ${this.pos}`);return this.pos++,e}if(e===`[`)return this.parseArrayLiteral();if(e===`"`||e===`'`)return this.parseString(e);if(/\d/.test(e)||e===`.`&&/\d/.test(this.peek(1)))return this.parseNumber();if(/[a-zA-Z_$]/.test(e))return this.parseIdentifierOrKeyword();throw SyntaxError(`Unexpected character "${e}" at position ${this.pos}`)}parseArrayLiteral(){this.pos++;let e=[];for(this.skipWhitespace();this.peek()!==`]`&&this.pos<this.source.length;)e.push(this.parseTernary()),this.skipWhitespace(),this.peek()===`,`&&(this.pos++,this.skipWhitespace());if(this.peek()!==`]`)throw SyntaxError(`Expected "]" to close array literal at position ${this.pos}`);return this.pos++,e}parseString(e){this.pos++;let t=``;for(;this.pos<this.source.length;){let n=this.source[this.pos];if(n===`\\`){this.pos++;let e=this.source[this.pos++]??``;switch(e){case`n`:t+=`
2
+ `;break;case`t`:t+=` `;break;case`r`:t+=`\r`;break;case`\\`:t+=`\\`;break;case`"`:t+=`"`;break;case`'`:t+=`'`;break;case"`":t+="`";break;default:t+=e}}else if(n===e){this.pos++;break}else t+=n,this.pos++}return t}parseNumber(){let e=this.pos,t=!1;for(;this.pos<this.source.length&&/\d/.test(this.source[this.pos]);)t=!0,this.pos++;if(this.source[this.pos]===`.`)for(this.pos++;this.pos<this.source.length&&/\d/.test(this.source[this.pos]);)t=!0,this.pos++;if(/[eE]/.test(this.source[this.pos]??``)){this.pos++,/[+\-]/.test(this.source[this.pos]??``)&&this.pos++;let t=0;for(;this.pos<this.source.length&&/\d/.test(this.source[this.pos]);)t++,this.pos++;if(t===0)throw SyntaxError(`Invalid numeric literal exponent at position ${e}`)}if(!t)throw SyntaxError(`Invalid numeric literal at position ${e}`);let n=this.source.slice(e,this.pos),r=Number(n);if(!Number.isFinite(r))throw SyntaxError(`Invalid numeric literal "${n}" at position ${e}`);return r}parseIdentifierName(){let e=this.pos;for(;this.pos<this.source.length&&/[\w$]/.test(this.source[this.pos]);)this.pos++;return this.source.slice(e,this.pos)}parseIdentifierOrKeyword(){let e=this.parseIdentifierName();switch(e){case`true`:return!0;case`false`:return!1;case`null`:return null;case`undefined`:return;case`NaN`:return NaN;case`Infinity`:return 1/0}if(e===`new`)return this.parseNewExpression();if(this.skipWhitespace(),this.peek()===`=`&&this.peek(1)===`>`)return this.parseArrowFunction(e);if(this.peek()===`(`){this.pos++;let t=this.parseArgList();if(this.peek()!==`)`)throw SyntaxError(`Expected ")" after argument list at position ${this.pos}`);if(this.pos++,!this._evaluating)return;let n=this.context[e];if(typeof n==`function`)return n(...t);throw TypeError(`"${e}" is not a function`)}if(this._evaluating){if(!(e in this.context))throw ReferenceError(`${e} is not defined`);return this.context[e]}}parseNewExpression(){this.skipWhitespace();let e=this.parseIdentifierName();this.skipWhitespace();let t=[];if(this.peek()===`(`){if(this.pos++,t=this.parseArgList(),this.peek()!==`)`)throw SyntaxError(`Expected ")" after new ${e}() at position ${this.pos}`);this.pos++}if(this._evaluating)switch(e){case`Date`:return new Date(...t);case`RegExp`:return new RegExp(t[0],t[1]);default:throw TypeError(`new ${e}() is not supported in expressions`)}}parseArrowFunction(t){this.pos+=2,this.skipWhitespace();let n=this.pos,r=this.scanExpressionEnd(),i=this.source.slice(n,r).trim();this.pos=r;let a=this.context;return n=>new e().evaluate(i,{...a,[t]:n})}scanExpressionEnd(){let e=this.pos,t=0,n=!1,r=``;for(;e<this.source.length;){let i=this.source[e];if(n){if(i===`\\`){e+=2;continue}i===r&&(n=!1),e++;continue}if(i===`"`||i===`'`){n=!0,r=i,e++;continue}if(i===`(`||i===`[`)t++;else if(i===`)`||i===`]`){if(t===0)break;t--}else if(i===`,`&&t===0)break;e++}return e}parseArgList(){let e=[];for(this.skipWhitespace();this.peek()!==`)`&&this.pos<this.source.length;)e.push(this.parseTernary()),this.skipWhitespace(),this.peek()===`,`&&(this.pos++,this.skipWhitespace());return e}},T=class{cache=new Map;maxSize;constructor(e=1e3){this.maxSize=e}compile(e,t){let n=`${e}::${t.join(`,`)}`;if(this.cache.has(n)){let e=this.cache.get(n);return e.hitCount++,e}this.cache.size>=this.maxSize&&this.evictLFU();let r={fn:this.compileExpression(e,t),varNames:[...t],expression:e,compiledAt:Date.now(),hitCount:1};return this.cache.set(n,r),r}compileExpression(e,t){let n=new w;return(...r)=>{let i={};for(let e=0;e<t.length;e++)i[t[e]]=r[e];return n.evaluate(e,i)}}evictLFU(){let e=null,t=1/0,n=1/0;for(let[r,i]of this.cache.entries())(i.hitCount<n||i.hitCount===n&&i.compiledAt<t)&&(e=r,t=i.compiledAt,n=i.hitCount);e&&this.cache.delete(e)}has(e,t){let n=`${e}::${t.join(`,`)}`;return this.cache.has(n)}clear(){this.cache.clear()}getStats(){let e=0,t=[];for(let n of this.cache.values())e+=n.hitCount,t.push({expression:n.expression,hitCount:n.hitCount});return{size:this.cache.size,maxSize:this.maxSize,totalHits:e,entries:t.sort((e,t)=>t.hitCount-e.hitCount)}}},E=class{functions=new Map;constructor(){this.registerDefaults()}register(e,t){this.functions.set(e.toUpperCase(),t)}get(e){return this.functions.get(e.toUpperCase())}has(e){return this.functions.has(e.toUpperCase())}getNames(){return Array.from(this.functions.keys())}toObject(){let e={};for(let[t,n]of this.functions)e[t]=n;return e}registerDefaults(){this.registerAggregationFunctions(),this.registerDateFunctions(),this.registerLogicFunctions(),this.registerStringFunctions(),this.registerStringSearchFunctions(),this.registerStatisticalFunctions()}registerAggregationFunctions(){this.register(`SUM`,(...e)=>D(e).reduce((e,t)=>e+t,0)),this.register(`AVG`,(...e)=>{let t=D(e);return t.length===0?0:t.reduce((e,t)=>e+t,0)/t.length}),this.register(`COUNT`,(...e)=>O(e).filter(e=>e!=null).length),this.register(`MIN`,(...e)=>{let t=D(e);return t.length===0?0:Math.min(...t)}),this.register(`MAX`,(...e)=>{let t=D(e);return t.length===0?0:Math.max(...t)})}registerDateFunctions(){this.register(`TODAY`,()=>new Date().toISOString().split(`T`)[0]),this.register(`NOW`,()=>new Date().toISOString()),this.register(`DATEADD`,(e,t,n)=>{let r=new Date(e);if(isNaN(r.getTime()))throw Error(`DATEADD: Invalid date "${e}"`);switch(String(n).toLowerCase()){case`day`:case`days`:r.setDate(r.getDate()+t);break;case`month`:case`months`:r.setMonth(r.getMonth()+t);break;case`year`:case`years`:r.setFullYear(r.getFullYear()+t);break;case`hour`:case`hours`:r.setHours(r.getHours()+t);break;case`minute`:case`minutes`:r.setMinutes(r.getMinutes()+t);break;default:throw Error(`DATEADD: Unsupported unit "${n}"`)}return r.toISOString()}),this.register(`DATEDIFF`,(e,t,n)=>{let r=new Date(e),i=new Date(t);if(isNaN(r.getTime()))throw Error(`DATEDIFF: Invalid date "${e}"`);if(isNaN(i.getTime()))throw Error(`DATEDIFF: Invalid date "${t}"`);let a=i.getTime()-r.getTime();switch(String(n).toLowerCase()){case`day`:case`days`:return Math.floor(a/(1e3*60*60*24));case`month`:case`months`:return(i.getFullYear()-r.getFullYear())*12+(i.getMonth()-r.getMonth());case`year`:case`years`:return i.getFullYear()-r.getFullYear();case`hour`:case`hours`:return Math.floor(a/(1e3*60*60));case`minute`:case`minutes`:return Math.floor(a/(1e3*60));default:throw Error(`DATEDIFF: Unsupported unit "${n}"`)}}),this.register(`DATEFORMAT`,(e,t)=>{let n=new Date(e);if(isNaN(n.getTime()))throw Error(`DATEFORMAT: Invalid date "${e}"`);let r=(e,t=2)=>String(e).padStart(t,`0`);return t.replace(`YYYY`,String(n.getFullYear())).replace(`YY`,String(n.getFullYear()).slice(-2)).replace(`MM`,r(n.getMonth()+1)).replace(`DD`,r(n.getDate())).replace(`HH`,r(n.getHours())).replace(`mm`,r(n.getMinutes())).replace(`ss`,r(n.getSeconds()))})}registerLogicFunctions(){this.register(`IF`,(e,t,n)=>e?t:n),this.register(`AND`,(...e)=>e.every(Boolean)),this.register(`OR`,(...e)=>e.some(Boolean)),this.register(`NOT`,e=>!e),this.register(`SWITCH`,(e,...t)=>{for(let n=0;n<t.length-1;n+=2)if(e===t[n])return t[n+1];if(t.length%2==1)return t[t.length-1]})}registerStringFunctions(){this.register(`CONCAT`,(...e)=>e.map(e=>String(e??``)).join(``)),this.register(`LEFT`,(e,t)=>String(e??``).substring(0,t)),this.register(`RIGHT`,(e,t)=>{let n=String(e??``);return n.substring(Math.max(0,n.length-t))}),this.register(`TRIM`,e=>String(e??``).trim()),this.register(`UPPER`,e=>String(e??``).toUpperCase()),this.register(`LOWER`,e=>String(e??``).toLowerCase())}registerStringSearchFunctions(){this.register(`FIND`,(e,t,n)=>String(t??``).indexOf(String(e??``),n??0)),this.register(`REPLACE`,(e,t,n)=>String(e??``).split(String(t??``)).join(String(n??``))),this.register(`SUBSTRING`,(e,t,n)=>{let r=String(e??``);return n===void 0?r.substring(t):r.substring(t,t+n)}),this.register(`REGEX`,(e,t,n)=>{let r=String(e??``);return new RegExp(t,n).test(r)}),this.register(`LEN`,e=>String(e??``).length)}registerStatisticalFunctions(){this.register(`MEDIAN`,(...e)=>{let t=D(e).sort((e,t)=>e-t);if(t.length===0)return 0;let n=Math.floor(t.length/2);return t.length%2==0?(t[n-1]+t[n])/2:t[n]}),this.register(`STDEV`,(...e)=>{let t=D(e);if(t.length<2)return 0;let n=t.reduce((e,t)=>e+t,0)/t.length,r=t.map(e=>(e-n)**2).reduce((e,t)=>e+t,0)/(t.length-1);return Math.sqrt(r)}),this.register(`VARIANCE`,(...e)=>{let t=D(e);if(t.length<2)return 0;let n=t.reduce((e,t)=>e+t,0)/t.length;return t.map(e=>(e-n)**2).reduce((e,t)=>e+t,0)/(t.length-1)}),this.register(`PERCENTILE`,(e,...t)=>{let n=D(t).sort((e,t)=>e-t);if(n.length===0)return 0;let r=Math.max(0,Math.min(100,e))/100*(n.length-1),i=Math.floor(r),a=Math.ceil(r);if(i===a)return n[i];let o=r-i;return n[i]+o*(n[a]-n[i])})}};function D(e){let t=[];for(let n of e)if(Array.isArray(n))t.push(...D(n));else{let e=Number(n);isNaN(e)||t.push(e)}return t}function O(e){let t=[];for(let n of e)Array.isArray(n)?t.push(...O(n)):t.push(n);return t}var k=class e{context;cache;formulas;constructor(e,t,n){e instanceof S?this.context=e:this.context=new S(e||{}),this.cache=t||new T,this.formulas=n||new E}evaluate(e,t={}){if(e&&typeof e==`object`&&typeof e.source==`string`&&(e=e.source),typeof e!=`string`)return e;let{defaultValue:n,throwOnError:r=!1,sanitize:i=!0}=t;try{if(!e.includes("${"))return e;let t=e.match(/^\$\{([^}]+)\}$/);return t?this.evaluateExpression(t[1].trim(),{sanitize:i}):e.replace(/\$\{([^}]+)\}/g,(e,t)=>{try{let e=this.evaluateExpression(t.trim(),{sanitize:i});return String(e??``)}catch(n){if(r)throw n;return console.warn(`Expression evaluation failed for: ${t}`,n),e}})}catch(t){if(r)throw t;return console.warn(`Failed to evaluate expression: ${e}`,t),n??e}}evaluateExpression(e,t={}){let{sanitize:n=!0}=t;if(!(!e||e.trim()===``)){if(n&&this.isDangerous(e))throw Error(`Potentially dangerous expression detected: ${e}`);try{let t=this.context.toObject(),n={...this.formulas.toObject(),...t},r=Object.keys(n),i=Object.values(n);return this.cache.compile(e,r).fn(...i)}catch(t){throw Error(`Failed to evaluate expression "${e}": ${t.message}`)}}}isDangerous(e){return[/eval\s*\(/i,/Function\s*\(/i,/setTimeout\s*\(/i,/setInterval\s*\(/i,/import\s*\(/i,/require\s*\(/i,/process\./i,/global\./i,/window\./i,/document\./i,/__proto__/i,/constructor\s*\(/i,/prototype\./i].some(t=>t.test(e))}evaluateCondition(e,t={}){return typeof e==`boolean`?e:(e&&typeof e==`object`&&typeof e.source==`string`&&(e=e.source),e?!!this.evaluate(e,t):!0)}updateContext(e){Object.entries(e).forEach(([e,t])=>{this.context.set(e,t)})}getContext(){return this.context}withContext(t){return new e(this.context.createChild(t),this.cache,this.formulas)}getCacheStats(){return this.cache.getStats()}clearCache(){this.cache.clear()}getFormulas(){return this.formulas}registerFunction(e,t){this.formulas.register(e,t)}},A=new T,j=new E;function te(e,t){let n=new k({...t,data:t},A,j);try{return(/\$\{/.test(e)?n.evaluate(e,{throwOnError:!0}):n.evaluateExpression(e))===!0}catch{return!1}}var M=class{handlers=new Map;scripts=new Map;evaluator;context;confirmHandler;toastHandler;modalHandler;navigationHandler;paramCollectionHandler;resultDialogHandler;constructor(e={}){this.context=e,this.evaluator=new k(e),this.confirmHandler=async e=>window.confirm(e),this.toastHandler=null,this.modalHandler=null,this.navigationHandler=null,this.paramCollectionHandler=null,this.resultDialogHandler=null}setConfirmHandler(e){this.confirmHandler=e}setToastHandler(e){this.toastHandler=e}setModalHandler(e){this.modalHandler=e}setNavigationHandler(e){this.navigationHandler=e}setParamCollectionHandler(e){this.paramCollectionHandler=e}setResultDialogHandler(e){this.resultDialogHandler=e}registerHandler(e,t){this.handlers.set(e,t)}unregisterHandler(e){this.handlers.delete(e)}registerScript(e,t){this.scripts.set(e,t)}unregisterScript(e){this.scripts.delete(e)}async execute(e){try{let t=e.type||e.actionType||e.name||``;if(e.condition&&!this.evaluator.evaluateCondition(e.condition))return{success:!1,error:`Action condition not met`};if(e.disabled&&(typeof e.disabled==`string`?this.evaluator.evaluateCondition(e.disabled):e.disabled))return{success:!1,error:`Action is disabled`};let n=e.confirm?.message||e.confirmText;if(n&&!await this.confirmHandler(this.evaluator.evaluate(n),e.confirm?{title:e.confirm.title,confirmText:e.confirm.confirmText,cancelText:e.confirm.cancelText}:void 0))return{success:!1,error:`Action cancelled by user`};let r=e.actionParams&&Array.isArray(e.actionParams)?e.actionParams:Array.isArray(e.params)?e.params:void 0;if(r&&r.length>0&&this.paramCollectionHandler){let t=await this.paramCollectionHandler(r,e);if(t===null)return{success:!1,error:`Action cancelled by user (params)`};let n=Array.isArray(e.params)?{}:e.params||{},i=n._rowRecord;e.params={...n,...t},i!==void 0&&(e.params._rowRecord=i)}if(t&&this.handlers.has(t)){let n=await this.handlers.get(t)(e,this.context);return await this.handlePostExecution(e,n),n}let i;switch(t){case`script`:i=await this.executeScript(e);break;case`url`:i=await this.executeUrl(e);break;case`modal`:i=await this.executeModal(e);break;case`flow`:i=await this.executeFlow(e);break;case`api`:i=await this.executeAPI(e);break;case`navigation`:i=await this.executeNavigation(e);break;default:e.navigate?i=await this.executeNavigation(e):e.api||e.endpoint?i=await this.executeAPI(e):e.onClick?(await e.onClick(),i={success:!0}):i=await this.executeActionSchema(e)}return await this.handlePostExecution(e,i),i}catch(t){let n={success:!1,error:t.message};return await this.handlePostExecution(e,n),n}}async executeChain(e,t=`sequential`){if(e.length===0)return{success:!0};if(t===`parallel`){let t=await Promise.allSettled(e.map(e=>this.execute(e)));if(t.filter(e=>e.status===`rejected`||e.status===`fulfilled`&&!e.value.success).length>0)return{success:!1,error:t.find(e=>e.status===`fulfilled`&&!e.value.success)?.value?.error||`One or more parallel actions failed`};let n=t[t.length-1];return n.status===`fulfilled`?n.value:{success:!1,error:`Action failed`}}let n={success:!0};for(let t of e)if(n=await this.execute(t),!n.success)return n;return n}async handlePostExecution(e,t){let n=!!(e.resultDialog&&t.success);if(this.toastHandler){let r=e.toast??{showOnSuccess:!0,showOnError:!0},i=e.toast?.duration;if(t.success&&!n&&r.showOnSuccess!==!1){let t=e.successMessage||`Action completed successfully`;this.toastHandler(t,{type:`success`,duration:i})}if(!t.success&&r.showOnError!==!1&&t.error){let n=e.errorMessage||t.error;this.toastHandler(n,{type:`error`,duration:i})}}if(n)if(this.resultDialogHandler)try{await this.resultDialogHandler(e.resultDialog,t.data,e)}catch(e){console.warn(`[ActionRunner] resultDialog handler rejected; treating as acknowledged`,e)}else console.warn(`[ActionRunner] action.resultDialog set but no resultDialogHandler registered — the response value will not be shown to the user.`,{action:e.name,data:t.data});if(e.refreshAfter&&t.success&&(t.reload=!0),e.chain&&e.chain.length>0&&t.success){let n=await this.executeChain(e.chain,e.chainMode||`sequential`);n.success||(t.success=!1,t.error=n.error),n.data&&(t.data=n.data),n.redirect&&(t.redirect=n.redirect),n.reload&&(t.reload=!0)}if(t.success&&e.onSuccess){let t=Array.isArray(e.onSuccess)?e.onSuccess:[e.onSuccess];await this.executeChain(t,`sequential`)}if(!t.success&&e.onFailure){let t=Array.isArray(e.onFailure)?e.onFailure:[e.onFailure];await this.executeChain(t,`sequential`)}}async executeScript(e){let t=e.execute||e.target;if(!t)return{success:!1,error:`No script provided for script action`};let n=this.scripts.get(t);if(n)try{return await n(e,this.context)}catch(e){return{success:!1,error:`Script execution failed: ${e.message}`}}try{return{success:!0,data:this.evaluator.evaluate(`\${${t}}`)}}catch(e){return{success:!1,error:`Script execution failed: ${e.message}`}}}async executeUrl(e){let t=e.target||e.redirect;if(!t)return{success:!1,error:`No URL provided for url action`};let n=this.interpolateTarget(t,e),r=this.evaluator.evaluate(n);if(!this.isValidUrl(r))return{success:!1,error:`Invalid URL scheme. Only http://, https://, and relative URLs are allowed.`};let i=typeof this.context.apiBase==`string`?this.context.apiBase.replace(/\/+$/,``):``;i&&/^\/(api|_auth|_account)\//.test(r)&&(r=`${i}${r}`);let a=r.startsWith(`http://`)||r.startsWith(`https://`);if(/\/(api|_auth|_account)\//.test(r)&&(a||r.startsWith(`/`)))return window.location.href=r,{success:!0};let o=e.params?.newTab??a;if(this.navigationHandler)return this.navigationHandler(r,{external:a,newTab:o}),{success:!0};if(o)window.open(r,`_blank`,`noopener,noreferrer`);else return{success:!0,redirect:r};return{success:!0}}async executeModal(e){let t=e.modal||e.target||e.params?.schema;return t?this.modalHandler?await this.modalHandler(t,this.context):{success:!0,modal:t}:{success:!1,error:`No modal schema or target provided for modal action`}}async executeFlow(e){let t=e.target||e.name;return t?this.handlers.has(`flow`)?await this.handlers.get(`flow`)(e,this.context):{success:!1,error:`Flow handler not registered. Cannot execute flow: ${t}`}:{success:!1,error:`No flow target provided for flow action`}}async executeActionSchema(e){let t={success:!0};if(e.api||e.endpoint){let n=await this.executeAPI(e);if(!n.success)return n;t.data=n.data}return e.onClick&&await e.onClick(),t.reload=e.reload!==!1,t.close=e.close!==!1,e.redirect&&(t.redirect=this.evaluator.evaluate(e.redirect)),t}async executeNavigation(e){let t=e.navigate||e,n=this.evaluator.evaluate(t.to||t.target);if(!this.isValidUrl(n))return{success:!1,error:`Invalid URL scheme. Only http://, https://, and relative URLs are allowed.`};let r=t.external||typeof n==`string`&&(n.startsWith(`http://`)||n.startsWith(`https://`));if(this.navigationHandler)return this.navigationHandler(n,{external:r,newTab:t.newTab??r,replace:t.replace}),{success:!0};if(r)window.open(n,`_blank`,`noopener,noreferrer`);else return{success:!0,redirect:n};return{success:!0}}async executeAPI(e){let t=e.api||e.endpoint||e.target;if(!t)return{success:!1,error:`No API endpoint provided`};try{let n,r,i={"Content-Type":`application/json`},a,o=`json`;if(typeof t==`string`)n=this.interpolateTarget(t,e),r=e.method||`POST`,a=JSON.stringify(e.params||this.context.data||{});else{let s=t;if(n=this.interpolateTarget(s.url,e),r=s.method||e.method||`POST`,i={...i,...s.headers},o=s.responseType||`json`,s.queryParams){let e=new URLSearchParams(s.queryParams);n=`${n}${n.includes(`?`)?`&`:`?`}${e.toString()}`}s.body?a=typeof s.body==`string`?s.body:JSON.stringify(s.body):r!==`GET`&&r!==`HEAD`&&(a=JSON.stringify(e.params||this.context.data||{}))}let s={method:r,headers:i};a&&r!==`GET`&&r!==`HEAD`&&(s.body=a);let c=await fetch(n,s);if(!c.ok)throw Error(`HTTP ${c.status}: ${c.statusText}`);let l;switch(o){case`text`:l=await c.text();break;case`blob`:l=await c.blob();break;default:l=await c.json()}return{success:!0,data:l}}catch(e){return{success:!1,error:e.message}}}isValidUrl(e){return typeof e==`string`&&(e.startsWith(`http://`)||e.startsWith(`https://`)||e.startsWith(`/`)||e.startsWith(`./`))}interpolateTarget(e,t){if(typeof e!=`string`||e.indexOf("${")===-1)return e;let n=t.params&&typeof t.params==`object`&&!Array.isArray(t.params)?t.params:{},r=this.buildInterpolationContext();return e.replace(/\$\{(param|ctx)\.([\w.]+)\}/g,(e,t,i)=>{let a=ne(t===`param`?n:r,i);return a==null?``:encodeURIComponent(String(a))})}buildInterpolationContext(){let e={origin:typeof window<`u`?window.location.origin:``,apiBase:typeof this.context.apiBase==`string`?this.context.apiBase.replace(/\/+$/,``):``,user:this.context.user??{},org:this.context.org??this.context.organization??{},recordId:this.context.record?.id??this.context.recordId};return this.context.ctx&&typeof this.context.ctx==`object`&&Object.assign(e,this.context.ctx),e}updateContext(e){this.context={...this.context,...e},this.evaluator.updateContext(e)}getContext(){return this.context}getEvaluator(){return this.evaluator}};function ne(e,t){if(e!=null)return t.split(`.`).reduce((e,t)=>{if(e!=null)return e[t]},e)}function re(e){return/^[a-z][a-z0-9]*(_[a-z0-9]+)*$/.test(e)}function ie(e){return{type:`app`,name:e.name,title:e.title,label:e.title,description:e.description,icon:e.icon,logo:e.branding.logo,favicon:e.branding.favicon,branding:e.branding,layout:e.layout,navigation:e.navigation}}function ae(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.name==`string`&&typeof t.objectName==`string`&&Array.isArray(t.columns)}function oe(e){if(!ae(e))return!1;let t=e;return t.type===`joined`&&Array.isArray(t.blocks)}var se=[`list_toolbar`,`list_item`,`record_header`,`record_more`,`record_related`,`record_section`,`global_nav`];r(se);function ce(e){return e.toLowerCase().split(`+`).map(e=>e.trim()).sort().join(`+`)}var le=class{actions=new Map;mappings=[];shortcuts=[];normalizedShortcutMap=new Map;runner;constructor(e={}){this.runner=e instanceof M?e:new M(e)}getRunner(){return this.runner}registerAction(e,t){let n=e.name||e.type||``;if(!n)throw Error(`Action must have a name or type`);this.actions.set(n,{action:e,locations:t?.locations||[],shortcut:t?.shortcut,bulkEnabled:t?.bulkEnabled??!1,priority:t?.priority??100}),t?.shortcut&&(this.shortcuts.push({keys:t.shortcut,actionName:n}),this.normalizedShortcutMap.set(ce(t.shortcut),n))}registerActions(e){for(let t of e)this.registerAction(t,{locations:t.locations,shortcut:t.shortcut,bulkEnabled:t.bulkEnabled})}unregisterAction(e){let t=this.actions.get(e);t?.shortcut&&this.normalizedShortcutMap.delete(ce(t.shortcut)),this.actions.delete(e),this.shortcuts=this.shortcuts.filter(t=>t.actionName!==e),this.mappings=this.mappings.filter(t=>t.actionName!==e)}addMapping(e){this.mappings.push(e)}getActionsForLocation(e){let t=this.runner.getEvaluator();return Array.from(this.actions.values()).filter(t=>t.locations.includes(e)).filter(e=>{let n=e.action.visible;if(n==null||n===``||n===!0)return!0;if(n===!1)return!1;let r;if(typeof n==`string`)r=`\${${n}}`;else if(typeof n==`object`&&typeof n.source==`string`){let e=n.source;if(!e)return!0;r=`\${${e}}`}else r=!!n;try{return t.evaluateCondition(r,{throwOnError:!0})}catch{return!1}}).sort((e,t)=>(e.priority??100)-(t.priority??100)).map(e=>e.action)}getBulkActions(){return Array.from(this.actions.values()).filter(e=>e.bulkEnabled).sort((e,t)=>(e.priority??100)-(t.priority??100)).map(e=>e.action)}getShortcuts(){return[...this.shortcuts]}getAction(e){return this.actions.get(e)?.action}async executeAction(e,t){let n=this.actions.get(e);return n?(t&&this.runner.updateContext(t),this.runner.execute(n.action)):{success:!1,error:`Action not found: ${e}`}}async dispatch(e,t){let n=this.mappings.filter(t=>t.event===e);if(n.length===0)return[];let r=[];for(let e of n){if(e.condition&&!this.runner.getEvaluator().evaluateCondition(e.condition))continue;let n=await this.executeAction(e.actionName,t);r.push(n)}return r}async handleShortcut(e,t){let n=this.normalizedShortcutMap.get(ce(e));return n?this.executeAction(n,t):null}async executeBulk(e,t,n){let r=this.actions.get(e);if(!r)return{total:0,succeeded:0,failed:0,results:[{success:!1,error:`Action not found: ${e}`}]};if(!r.bulkEnabled)return{total:0,succeeded:0,failed:0,results:[{success:!1,error:`Action ${e} does not support bulk operations`}]};let i=[],a=0,o=0;if(n?.parallel){let e=t.map(e=>(this.runner.updateContext({record:e,selectedRecords:t}),this.runner.execute(r.action))),n=await Promise.allSettled(e);for(let e of n)e.status===`fulfilled`?(i.push(e.value),e.value.success?a++:o++):(i.push({success:!1,error:e.reason?.message||`Unknown error`}),o++)}else for(let e of t){this.runner.updateContext({record:e,selectedRecords:t});let s=await this.runner.execute(r.action);if(i.push(s),s.success)a++;else if(o++,!n?.continueOnError)break}return{total:t.length,succeeded:a,failed:o,results:i}}updateContext(e){this.runner.updateContext(e)}clear(){this.actions.clear(),this.mappings=[],this.shortcuts=[],this.normalizedShortcutMap.clear()}};function ue(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.id==`string`&&typeof t.type==`string`&&typeof t.objectName==`string`&&typeof t.recordId==`string`&&typeof t.timestamp==`number`}var N=new class e{undoStack=[];redoStack=[];maxHistory;listeners=new Set;constructor(e){this.maxHistory=e?.maxHistory??50}push(e){this.undoStack.push(e),this.undoStack.length>this.maxHistory&&this.undoStack.shift(),this.redoStack=[],this.notify()}peekUndo(){return this.undoStack[this.undoStack.length-1]}peekRedo(){return this.redoStack[this.redoStack.length-1]}popUndo(){let e=this.undoStack.pop();return e&&(this.redoStack.push(e),this.notify()),e}popRedo(){let e=this.redoStack.pop();return e&&(this.undoStack.push(e),this.notify()),e}clear(){this.undoStack=[],this.redoStack=[],this.notify()}get canUndo(){return this.undoStack.length>0}get canRedo(){return this.redoStack.length>0}get undoCount(){return this.undoStack.length}get redoCount(){return this.redoStack.length}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}getHistory(){return[...this.undoStack]}getRedoHistory(){return[...this.redoStack]}pushBatch(e){e.length!==0&&(this.undoStack.push(...e),this.undoStack.length>this.maxHistory&&this.undoStack.splice(0,this.undoStack.length-this.maxHistory),this.redoStack=[],this.notify())}popUndoBatch(e){let t=Math.min(e,this.undoStack.length);if(t===0)return[];let n=this.undoStack.splice(this.undoStack.length-t,t);return this.redoStack.push(...n),this.notify(),n}popRedoBatch(e){let t=Math.min(e,this.redoStack.length);if(t===0)return[];let n=this.redoStack.splice(this.redoStack.length-t,t);return this.undoStack.push(...n),this.notify(),n}static STORAGE_KEY=`objectui:undo-history`;saveToStorage(){try{let t=JSON.stringify({undoStack:this.undoStack,redoStack:this.redoStack});localStorage.setItem(e.STORAGE_KEY,t)}catch{}}loadFromStorage(){try{if(typeof localStorage>`u`)return;let t=localStorage.getItem(e.STORAGE_KEY);if(!t)return;let n=JSON.parse(t);Array.isArray(n.undoStack)&&(this.undoStack=n.undoStack.filter(ue)),Array.isArray(n.redoStack)&&(this.redoStack=n.redoStack.filter(ue)),this.undoStack.length>this.maxHistory&&this.undoStack.splice(0,this.undoStack.length-this.maxHistory),this.notify()}catch{}}notify(){this.listeners.forEach(e=>e())}};async function de(e,t){let{ids:n,allowBulk:r,offset:i,label:a=`bulk`}=e,o={succeeded:0,failed:0,errors:[]};if(r&&typeof t.bulkCall==`function`)try{let e=await t.bulkCall(n),r=Math.max(0,Math.min(e,n.length));o.succeeded+=r;let s=n.length-r;return s>0&&(o.failed+=s,o.errors.push({id:`batch_${i}`,error:`${s} record${s===1?``:`s`} failed in ${a}`})),o}catch{}return(await Promise.allSettled(n.map(e=>t.perRow(e)))).forEach((e,t)=>{e.status===`fulfilled`?o.succeeded+=1:(o.failed+=1,o.errors.push({id:n[t],error:e.reason instanceof Error?e.reason.message:String(e.reason)}))}),o}function fe(e,t){return t?e[t]:e.id??e._id}function pe(e,t){if(!t||t.length===0)return!0;let n=t[0];if(n===`and`)return t.slice(1).every(t=>pe(e,t));if(n===`or`)return t.slice(1).some(t=>pe(e,t));if(t.length===3&&typeof n==`string`){let[n,r,i]=t,a=e[n];switch(r){case`=`:return a===i;case`!=`:return a!==i;case`>`:return a>i;case`>=`:return a>=i;case`<`:return a<i;case`<=`:return a<=i;case`in`:return Array.isArray(i)&&i.includes(a);case`not in`:case`not_in`:case`nin`:case`notin`:return Array.isArray(i)&&!i.includes(a);case`contains`:{let e=typeof a==`string`?a.toLowerCase():``;return typeof a==`string`&&e.includes(String(i).toLowerCase())}case`notcontains`:{let e=typeof a==`string`?a.toLowerCase():``;return typeof a==`string`&&!e.includes(String(i).toLowerCase())}case`startswith`:{let e=typeof a==`string`?a.toLowerCase():``;return typeof a==`string`&&e.startsWith(String(i).toLowerCase())}case`between`:return Array.isArray(i)&&i.length===2&&a>=i[0]&&a<=i[1];default:return!0}}return!0}function me(e,t){for(let[n,r]of Object.entries(t)){let t=e[n];if(r&&typeof r==`object`&&!Array.isArray(r))for(let[e,n]of Object.entries(r))switch(e){case`$gt`:if(!(t>n))return!1;break;case`$gte`:if(!(t>=n))return!1;break;case`$lt`:if(!(t<n))return!1;break;case`$lte`:if(!(t<=n))return!1;break;case`$ne`:if(t===n)return!1;break;case`$in`:if(!Array.isArray(n)||!n.includes(t))return!1;break;case`$contains`:if(typeof t!=`string`||!t.toLowerCase().includes(String(n).toLowerCase()))return!1;break;default:break}else if(t!==r)return!1}return!0}function he(e,t){if(!t)return e;let n=[];return Array.isArray(t)?n=t.map(e=>typeof e==`string`?e.startsWith(`-`)?{field:e.slice(1),order:`desc`}:{field:e,order:`asc`}:{field:e.field,order:e.order??`asc`}):typeof t==`object`&&(n=Object.entries(t).map(([e,t])=>({field:e,order:t}))),n.length===0?e:[...e].sort((e,t)=>{for(let{field:r,order:i}of n){let n=e[r],a=t[r];if(n===a)continue;if(n==null)return i===`asc`?-1:1;if(a==null)return i===`asc`?1:-1;let o=n<a?-1:1;return i===`asc`?o:-o}return 0})}function ge(e,t){if(!t||t.length===0)return e;let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}var _e=class{items;idField;mutationListeners=new Set;constructor(e){this.items=JSON.parse(JSON.stringify(e.items)),this.idField=e.idField}emitMutation(e){for(let t of this.mutationListeners)try{t(e)}catch(e){console.warn(`ValueDataSource: mutation listener error`,e)}}async find(e,t){let n=[...this.items];if(t?.$filter&&(Array.isArray(t.$filter)&&t.$filter.length>0?n=n.filter(e=>pe(e,t.$filter)):!Array.isArray(t.$filter)&&Object.keys(t.$filter).length>0&&(n=n.filter(e=>me(e,t.$filter)))),t?.$search){let e=t.$search.toLowerCase();n=n.filter(t=>Object.values(t).some(t=>typeof t==`string`&&t.toLowerCase().includes(e)))}let r=n.length;n=he(n,t?.$orderby);let i=t?.$skip??0,a=t?.$top;return i>0&&(n=n.slice(i)),a!==void 0&&(n=n.slice(0,a)),t?.$select?.length&&(n=n.map(e=>ge(e,t.$select))),{data:n,total:r,hasMore:i+(a??n.length)<r}}async findOne(e,t,n){let r=this.items.find(e=>String(fe(e,this.idField))===String(t));return r?n?.$select?.length?ge(r,n.$select):{...r}:null}async create(e,t){let n={...t};if(!fe(n,this.idField)){let e=this.idField??`id`;n[e]=`auto_${Date.now()}_${Math.random().toString(36).slice(2,8)}`}return this.items.push(n),this.emitMutation({type:`create`,resource:e,record:{...n}}),{...n}}async update(e,t,n){let r=this.items.findIndex(e=>String(fe(e,this.idField))===String(t));if(r===-1)throw Error(`ValueDataSource: Record with id "${t}" not found`);return this.items[r]={...this.items[r],...n},this.emitMutation({type:`update`,resource:e,id:t,record:{...this.items[r]}}),{...this.items[r]}}async delete(e,t){let n=this.items.findIndex(e=>String(fe(e,this.idField))===String(t));return n===-1?!1:(this.items.splice(n,1),this.emitMutation({type:`delete`,resource:e,id:t}),!0)}async bulk(e,t,n){let r=[];for(let i of n)switch(t){case`create`:r.push(await this.create(e,i));break;case`update`:{let t=fe(i,this.idField);t!==void 0&&r.push(await this.update(e,t,i));break}case`delete`:{let t=fe(i,this.idField);t!==void 0&&await this.delete(e,t);break}}return r}async getObjectSchema(e){if(this.items.length===0)return{name:e,fields:{}};let t=this.items[0],n={};for(let[e,r]of Object.entries(t))n[e]={type:typeof r};return{name:e,fields:n}}async getView(e,t){return null}async getApp(e){return null}async aggregate(e,t){let{field:n,function:r,groupBy:i}=t,a={};for(let e of this.items){let t=String(e[i]??`Unknown`);a[t]||(a[t]=[]),a[t].push(e)}return Object.entries(a).map(([e,t])=>{let a=t.map(e=>Number(e[n])||0),o;switch(r){case`count`:o=t.length;break;case`avg`:o=a.length>0?a.reduce((e,t)=>e+t,0)/a.length:0;break;case`min`:o=a.length>0?Math.min(...a):0;break;case`max`:o=a.length>0?Math.max(...a):0;break;default:o=a.reduce((e,t)=>e+t,0);break}return{[i]:e,[n]:o}})}onMutation(e){return this.mutationListeners.add(e),()=>{this.mutationListeners.delete(e)}}get count(){return this.items.length}getAll(){return JSON.parse(JSON.stringify(this.items))}},P=`https://objectui.dev/docs/errors`,ve={"OBJUI-001":{code:`OBJUI-001`,message:'Unknown component type: "${type}"',suggestion:`Ensure the component is registered via registry.register() before rendering. Check for typos in the component type name.`,docUrl:`${P}/OBJUI-001`},"OBJUI-002":{code:`OBJUI-002`,message:"Schema validation failed: ${reason}",suggestion:`Verify the schema against the ObjectUI JSON spec. Run the built-in schema validator for details.`,docUrl:`${P}/OBJUI-002`},"OBJUI-003":{code:`OBJUI-003`,message:"Expression evaluation failed: ${expression}",suggestion:`Check the expression syntax and ensure all referenced variables exist in the current data scope.`,docUrl:`${P}/OBJUI-003`},"OBJUI-004":{code:`OBJUI-004`,message:'Plugin dependency missing: "${dependency}"',suggestion:`Install the required dependency and register it before loading this plugin.`,docUrl:`${P}/OBJUI-004`},"OBJUI-005":{code:`OBJUI-005`,message:'Plugin already loaded: "${plugin}"',suggestion:`A plugin with the same name is already registered. Remove the duplicate or use a unique plugin name.`,docUrl:`${P}/OBJUI-005`},"OBJUI-006":{code:`OBJUI-006`,message:'Plugin not found: "${plugin}"',suggestion:`Verify the plugin name and ensure it has been registered before access.`,docUrl:`${P}/OBJUI-006`},"OBJUI-007":{code:`OBJUI-007`,message:'Registry namespace deprecated: "${namespace}"',suggestion:`Migrate to the new namespace format. See the migration guide for details.`,docUrl:`${P}/OBJUI-007`},"OBJUI-008":{code:`OBJUI-008`,message:'Read-only scope violation: "${scope}"',suggestion:`You are trying to mutate a read-only data scope. Use a writable scope or clone the data before modifying.`,docUrl:`${P}/OBJUI-008`},"OBJUI-009":{code:`OBJUI-009`,message:'Invalid field configuration: "${field}"',suggestion:`Check the field schema for required properties (type, name). Ensure the field widget is registered.`,docUrl:`${P}/OBJUI-009`},"OBJUI-010":{code:`OBJUI-010`,message:'Action execution failed: "${action}"',suggestion:`Verify the action handler is registered and that all required parameters are provided.`,docUrl:`${P}/OBJUI-010`}},ye=class extends Error{code;details;constructor(e,t,n){super(e),this.code=t,this.details=n,this.name=`ObjectUIError`,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,message:this.message,code:this.code,details:this.details,stack:this.stack}}};function be(e){return e instanceof ye}var F=`__debug`;function xe(e){let t=e;if(t===void 0)try{t=typeof window<`u`?window.location.search:``}catch{t=``}let n=new URLSearchParams(t),r=n.has(F),i=n.has(`${F}_schema`),a=n.has(`${F}_perf`),o=n.has(`${F}_data`),s=n.has(`${F}_expr`),c=n.has(`${F}_events`),l=n.has(`${F}_registry`);return{enabled:r||i||a||o||s||c||l,...i&&{schema:i},...a&&{perf:a},...o&&{data:o},...s&&{expr:s},...c&&{events:c},...l&&{registry:l}}}function Se(){try{if(typeof window<`u`)try{if(xe(window.location.search).enabled)return!0}catch{}let e=typeof globalThis<`u`&&globalThis.OBJECTUI_DEBUG;return e===!0||e===`true`||globalThis.process?.env?.OBJECTUI_DEBUG===`true`}catch{return!1}}function Ce(e,t,n){Se()&&(n===void 0?console.log(`[ObjectUI Debug][${e}] ${t}`):console.log(`[ObjectUI Debug][${e}] ${t}`,n))}var we=new Map;function Te(e){Se()&&we.set(e,performance.now())}function Ee(e){if(!Se())return;let t=we.get(e);if(t!==void 0){let n=(performance.now()-t).toFixed(2);console.log(`[ObjectUI Debug][perf] ${e}: ${n}ms`),we.delete(e)}}var De=200,Oe=class e{static instance=null;entries=[];subscribers=new Set;static getInstance(){return e.instance||=new e,e.instance}static resetInstance(){e.instance=null}addPerf(e){this.push({kind:`perf`,data:e})}addExpr(e){this.push({kind:`expr`,data:e})}addEvent(e){this.push({kind:`event`,data:e})}getEntries(e){return e?this.entries.filter(t=>t.kind===e):this.entries.slice()}clear(){this.entries=[]}subscribe(e){return this.subscribers.add(e),()=>this.subscribers.delete(e)}push(e){this.entries.push(e),this.entries.length>De&&(this.entries=this.entries.slice(-200));for(let t of this.subscribers)try{t(e)}catch{}}},ke=/\$\{event\.([a-zA-Z0-9_]+)\}/g;function Ae(e,t){return typeof e!=`string`||e.indexOf("${event.")===-1?e:e.replace(ke,(e,n)=>{let r=t[n];return r==null?``:String(r)})}function je(e,t){if(typeof e==`string`){let n=e.match(/^\$\{event\.([a-zA-Z0-9_]+)\}$/);if(n){let e=t[n[1]];return e===``||e===void 0?null:e}return Ae(e,t)}if(Array.isArray(e))return e.map(e=>je(e,t));if(e&&typeof e==`object`){let n={};for(let[r,i]of Object.entries(e))n[r]=je(i,t);return n}return e}function Me(e,t,n={}){if(e?.filter)return je(e.filter,t);let r={},{rowField:i,columnField:a,groupByField:o}=n,s=t.scope??`cell`;return s===`total`?r:((s===`cell`||s===`row`)&&i&&`rowKey`in t&&(r[i]=t.rowKey===``?null:t.rowKey),(s===`cell`||s===`column`)&&a&&`colKey`in t&&(r[a]=t.colKey===``?null:t.colKey),o&&`category`in t&&(r[o]=t.category===``?null:t.category),r)}function Ne(e,t,n=`Details`){if(e?.title){let n=Ae(e.title,t).trim();if(n)return n}let r=[];return t.rowLabel&&r.push(t.rowLabel),t.colLabel&&r.push(t.colLabel),t.categoryLabel?r.push(t.categoryLabel):t.category&&r.push(t.category),t.series&&r.push(t.series),r.length>0?r.join(` × `):n}function Pe(e){return e?e.enabled!==!1:!1}function Fe(e,t=new Date){if(e==null)return e;let n=e=>{let t=new Date(e);return t.setHours(0,0,0,0),t},r=e=>{let t=n(e);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}`},i=e=>{let t=n(e),r=(t.getDay()+6)%7;return t.setDate(t.getDate()-r),t},a=e=>new Date(e.getFullYear(),e.getMonth(),1),o=e=>{let t=Math.floor(e.getMonth()/3);return new Date(e.getFullYear(),t*3,1)},s=e=>new Date(e.getFullYear(),0,1),c=(e,t)=>new Date(e.getFullYear(),e.getMonth()+t,1),l=(e,t)=>{let r=n(e);return r.setDate(r.getDate()+t),r},u=e=>l(c(a(e),1),-1),d=e=>l(i(e),6),f=e=>l(c(o(e),3),-1),p=e=>new Date(e.getFullYear(),11,31),m={today:()=>r(t),yesterday:()=>r(l(t,-1)),tomorrow:()=>r(l(t,1)),now:()=>t.toISOString(),current_week_start:()=>r(i(t)),current_week_end:()=>r(d(t)),current_month_start:()=>r(a(t)),current_month_end:()=>r(u(t)),current_quarter_start:()=>r(o(t)),current_quarter_end:()=>r(f(t)),current_year_start:()=>r(s(t)),current_year_end:()=>r(p(t)),last_week_start:()=>r(l(i(t),-7)),last_week_end:()=>r(l(i(t),-1)),last_month_start:()=>r(c(a(t),-1)),last_month_end:()=>r(l(a(t),-1)),last_quarter_start:()=>r(c(o(t),-3)),last_quarter_end:()=>r(l(o(t),-1)),last_year_start:()=>r(new Date(t.getFullYear()-1,0,1)),last_year_end:()=>r(new Date(t.getFullYear()-1,11,31)),next_week_start:()=>r(l(i(t),7)),next_month_start:()=>r(c(a(t),1)),next_quarter_start:()=>r(c(o(t),3)),next_year_start:()=>r(new Date(t.getFullYear()+1,0,1))};for(let[e,t]of Object.entries({week_start:`current_week_start`,week_end:`current_week_end`,month_start:`current_month_start`,month_end:`current_month_end`,quarter_start:`current_quarter_start`,quarter_end:`current_quarter_end`,year_start:`current_year_start`,year_end:`current_year_end`}))m[e]=m[t];let h=/^(\d+)_(minutes?|hours?|days?|weeks?|months?|years?)_(ago|from_now)$/,g=e=>{let n=e.match(h);if(!n)return null;let i=parseInt(n[1],10);if(!Number.isFinite(i))return null;let a=n[3]===`ago`?-1:1,o=n[2].replace(/s$/,``);return o===`minute`?new Date(t.getTime()+a*i*60*1e3).toISOString():o===`hour`?new Date(t.getTime()+a*i*60*60*1e3).toISOString():o===`day`?r(l(t,a*i)):o===`week`?r(l(t,a*i*7)):o===`month`?r(new Date(t.getFullYear(),t.getMonth()+a*i,t.getDate())):o===`year`?r(new Date(t.getFullYear()+a*i,t.getMonth(),t.getDate())):null},_=/\$?\{([a-zA-Z0-9_]+)\}/g,v=e=>{if(e==null)return e;if(typeof e==`string`){let t=e.match(/^\$?\{([a-zA-Z0-9_]+)\}$/);if(t){let e=t[1];if(m[e])return m[e]();let n=g(e);if(n!=null)return n}let n=!1,r=e.replace(_,(e,t)=>{if(m[t])return n=!0,m[t]();let r=g(t);return r==null?e:(n=!0,r)});return n?r:e}if(Array.isArray(e))return e.map(v);if(typeof e==`object`){let t={};for(let n of Object.keys(e))t[n]=v(e[n]);return t}return e};return v(e)}var Ie={current_week_start:`last_week_start`,current_week_end:`last_week_end`,current_month_start:`last_month_start`,current_month_end:`last_month_end`,current_quarter_start:`last_quarter_start`,current_quarter_end:`last_quarter_end`,current_year_start:`last_year_start`,current_year_end:`last_year_end`,week_start:`last_week_start`,week_end:`last_week_end`,month_start:`last_month_start`,month_end:`last_month_end`,quarter_start:`last_quarter_start`,quarter_end:`last_quarter_end`,year_start:`last_year_start`,year_end:`last_year_end`,today:`yesterday`};function Le(e,t){if(e==null)return e;if(typeof e==`string`)return e.replace(/\$?\{([a-zA-Z0-9_]+)\}/g,(e,n)=>{let r=t[n];return r?`{${r}}`:e});if(Array.isArray(e))return e.map(e=>Le(e,t));if(typeof e==`object`){let n={};for(let r of Object.keys(e))n[r]=Le(e[r],t);return n}return e}function Re(e,t){let n=t.match(/^(\d+)([dwMy])$/);if(!n)return null;let r=parseInt(n[1],10),i=n[2],a=new Date(e);if(i===`d`)a.setDate(a.getDate()-r);else if(i===`w`)a.setDate(a.getDate()-r*7);else if(i===`M`)a.setMonth(a.getMonth()-r);else if(i===`y`)a.setFullYear(a.getFullYear()-r);else return null;return a}function ze(e,t,n=new Date){if(t===`previousYear`)return Fe(e,new Date(n.getFullYear()-1,n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds()));if(typeof t==`object`&&t&&`offset`in t){let r=Re(n,t.offset);return r?Fe(e,r):Fe(e,n)}return Fe(Le(e,Ie),n)}function Be(e,t){if(e===`previousYear`)return`vsLastYear`;if(typeof e==`object`&&e&&`offset`in e)return`vsPreviousPeriod`;let n=t?JSON.stringify(t):``;return/current_year_|year_start|year_end/.test(n)?`vsLastYear`:/current_quarter_|quarter_start|quarter_end/.test(n)?`vsLastQuarter`:/current_month_|month_start|month_end/.test(n)?`vsLastMonth`:/current_week_|week_start|week_end/.test(n)?`vsLastWeek`:/\btoday\b/.test(n)?`vsYesterday`:`vsPreviousPeriod`}var I=e(n(),1),L=t(),Ve=(0,I.createContext)(null),He=({children:e,dataSource:t,debug:n,debugFlags:r})=>{let i=(0,I.useMemo)(()=>({dataSource:t,debug:n,debugFlags:r}),[t,n,r]);return(0,L.jsx)(Ve.Provider,{value:i,children:e})},Ue=()=>{let e=(0,I.useContext)(Ve);if(!e)throw Error(`useSchemaContext must be used within a SchemaRendererProvider`);return e},We=e=>{let t=(0,I.useContext)(Ve)?.dataSource;if(e&&t)return e.split(`.`).reduce((e,t)=>e&&e[t],t)};function Ge(e){if(e!=null)return typeof e==`string`?e:e.defaultValue||e.key}var Ke=(()=>{try{return!1}catch{return!0}})(),qe=typeof WeakMap<`u`?new WeakMap:{set(){},get(){},has(){return!1}},Je=typeof WeakSet<`u`?new WeakSet:{add(){},has(){return!1}};function Ye(e){if(!Ke||!e||typeof e!=`object`)return{valid:!0,messages:[]};let t=qe.get(e);if(t)return t;let n={valid:!0,messages:[]};try{let t=m(e);if(!t.valid){let r=t.errors.map(e=>`${e.path}: ${e.message}`);n={valid:!1,messages:r},Je.has(e)||(Je.add(e),console.warn(`[ObjectUI] Invalid schema detected:
3
3
  `+r.join(`
4
- `),e))}}catch(t){Je.has(e)||(Je.add(e),console.warn(`[ObjectUI] Schema validator threw:`,t))}return qe.set(e,n),n}function Xe(e){let t={};return e.ariaLabel&&(t[`aria-label`]=Ge(e.ariaLabel)),e.ariaDescribedBy&&(t[`aria-describedby`]=e.ariaDescribedBy),e.role&&(t.role=e.role),t}var Ze=class extends I.Component{state={hasError:!1,error:null};static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidUpdate(e){this.state.hasError&&(e.componentType!==this.props.componentType||e.resetKey!==this.props.resetKey)&&this.setState({hasError:!1,error:null})}handleRetry=()=>{this.setState({hasError:!1,error:null})};render(){if(this.state.hasError&&this.state.error){let e=this.state.error;return be(e),(0,L.jsxs)(`div`,{className:`p-4 border border-orange-400 rounded bg-orange-50 text-orange-700 my-2`,role:`alert`,children:[(0,L.jsxs)(`p`,{className:`font-medium`,children:[`Component`,this.props.componentType?` "${this.props.componentType}"`:``,` failed to render`]}),(0,L.jsx)(`p`,{className:`text-sm mt-1`,children:e.message}),!1,(0,L.jsx)(`button`,{onClick:this.handleRetry,className:`mt-2 text-sm underline hover:no-underline`,children:`Retry`})]})}return this.props.children}},Qe=(0,I.forwardRef)(({schema:e,...t},n)=>{let r=(0,I.useContext)(Ve),i=r?.dataSource||{},[,a]=(0,I.useReducer)(e=>e+1,0);(0,I.useEffect)(()=>{let e=c.subscribe(a);return a(),e},[]);let[o,s]=(0,I.useState)(null),l=(0,I.useMemo)(()=>{if(!e||typeof e==`string`)return e;let t=new O({data:i}),n={...e};if(n.properties){let e=n.type,t=n.id,r=n.properties;for(let[e,t]of Object.entries(r))e===`type`||e===`id`||(n[e]=t);e!==void 0&&(n.type=e),t!==void 0&&(n.id=t),n.properties=r}if(typeof n.content==`string`&&(n.content=t.evaluate(n.content)),n.props){let e={...n.props};for(let[n,r]of Object.entries(e))e[n]=t.evaluate(r);n.props=e}return(n.visible===void 0?n.visibleOn===void 0?n.hidden===void 0?n.hiddenOn!==void 0&&t.evaluateCondition(n.hiddenOn):t.evaluateCondition(n.hidden):!t.evaluateCondition(n.visibleOn):!t.evaluateCondition(n.visible))&&(n._hidden=!0),(n.disabled===void 0?n.disabledOn!==void 0&&t.evaluateCondition(n.disabledOn):t.evaluateCondition(n.disabled))&&(n._disabled=!0),n},[e,i]);if(!l||l?._hidden)return null;if(typeof l==`string`)return(0,L.jsx)(L.Fragment,{children:l});let u=Ke?Ye(e):{valid:!0,messages:[]};Ce(`schema`,`Rendering schema node`,{type:l.type,id:l.id});let d=c.get(l.type);if(!d){if(!o&&c.hasLazy(l.type)){let e=c.loadLazy(l.type);if(e)return e.catch(e=>{s(e instanceof Error?e:Error(String(e)))}),(0,L.jsxs)(`div`,{className:`p-2 text-sm text-muted-foreground animate-pulse`,role:`status`,"aria-live":`polite`,"data-lazy-loading":l.type,children:[`Loading `,(0,L.jsx)(`code`,{children:l.type}),`…`]})}return Ce(`schema`,`Component not found in registry`,{type:l.type}),ve[`OBJUI-001`],(0,L.jsxs)(`div`,{className:`p-4 border border-red-500 rounded text-red-500 bg-red-50 my-2`,role:`alert`,children:[(0,L.jsxs)(`p`,{className:`font-medium`,children:[`Unknown component type: `,(0,L.jsx)(`strong`,{children:l.type})]}),o&&(0,L.jsxs)(`p`,{className:`text-xs mt-1`,children:[`Failed to load plugin: `,o.message]}),!1,(0,L.jsx)(`pre`,{className:`text-xs mt-2 overflow-auto`,children:JSON.stringify(l,null,2)})]})}let{type:f,children:p,body:m,schema:h,visible:g,visibleOn:_,hidden:v,hiddenOn:y,disabled:b,disabledOn:x,_hidden:S,_disabled:C,...ee}=l,te=Xe(l),w=r?.debug||r?.debugFlags?.enabled,T={};w&&(T[`data-debug-type`]=l.type,l.id&&(T[`data-debug-id`]=l.id)),Te(`render:${l.type}:${l.id??`anon`}`);let E=w?performance.now():0,D=(0,L.jsx)(Ze,{componentType:l.type,resetKey:l.id??null,children:I.createElement(d,{schema:l,...ee,...l.props||{},...te,...T,disabled:C||void 0,className:l.className,"data-obj-id":l.id,"data-obj-type":l.type,...Ke&&!u.valid?{"data-obj-schema-invalid":`true`}:{},...t})});if(Ee(`render:${l.type}:${l.id??`anon`}`),w&&E){let e=performance.now()-E;Oe.getInstance().addPerf({type:l.type,id:l.id,durationMs:e,timestamp:Date.now()})}return D});Qe.displayName=`SchemaRenderer`;var $e=(0,I.createContext)({});function et({scope:e,children:t}){return(0,I.createElement)($e.Provider,{value:e},t)}function tt(){return(0,I.useContext)($e)}function nt(e){if(!(e==null||e===``)){if(typeof e==`boolean`)return e;if(typeof e==`string`)return`\${${e}}`;if(typeof e==`object`&&typeof e.source==`string`){let t=e.source;return t?`\${${t}}`:void 0}}}function rt(e,t={}){let n=tt();return(0,I.useMemo)(()=>new O({...n,...t}).evaluateCondition(e),[e,t,n])}function it(e={}){let{context:t={},onConfirm:n,onToast:r,onModal:i,onNavigate:a,onParamCollection:o,onResultDialog:s}=`context`in e?e:{context:e},[c,l]=(0,I.useState)(!1),[u,d]=(0,I.useState)(null),[f,p]=(0,I.useState)(null),m=(0,I.useMemo)(()=>{let e=new j(t);return n&&e.setConfirmHandler(n),r&&e.setToastHandler(r),i&&e.setModalHandler(i),a&&e.setNavigationHandler(a),o&&e.setParamCollectionHandler(o),s&&e.setResultDialogHandler(s),e},[JSON.stringify(t)]);return{execute:(0,I.useCallback)(async e=>{l(!0),d(null),p(null);try{let t=await m.execute(e);return p(t),t.success||d(t.error||`Action failed`),t}catch(e){let t=e.message;d(t);let n={success:!1,error:t};return p(n),n}finally{l(!1)}},[m]),loading:c,error:u,result:f,updateContext:(0,I.useCallback)(e=>{m.updateContext(e)},[m]),runner:m}}function at(e){let{navigation:t,objectName:n,onNavigate:r,onRowClick:i}=e,[a,o]=(0,I.useState)(!1),[s,c]=(0,I.useState)(null),l=t?.mode??`page`,u=t?.width,d=t?.view,f=l===`drawer`||l===`modal`||l===`split`||l===`popover`,p=(0,I.useCallback)(()=>{o(!1),c(null)},[]),m=(0,I.useCallback)(e=>{c(e),o(!0)},[]),h=(0,I.useCallback)((e,a)=>{if(i){i(e,a);return}if(a&&(a.metaKey||a.ctrlKey||a.button===1)){let t=e.id||e._id;if(r&&t!=null){r(t,`new_window`);return}}if(!t){let t=e.id||e._id;r&&t!=null&&r(t,d??`view`);return}if(!(l===`none`||t.preventNavigation)){if(l===`new_window`||t.openNewTab){let t=e.id||e._id;if(r&&t!=null){r(t,`new_window`);return}let i=encodeURIComponent(String(t)),a=n?`/${n}/record/${i}`:`/${i}`;window.open(a,`_blank`);return}if(l===`page`){let t=e.id||e._id;r&&t!=null&&r(t,d??`view`);return}if(f){c(e),o(!0);return}}},[i,t,l,n,r,f,d]);return(0,I.useMemo)(()=>({isOpen:a,selectedRecord:s,mode:l,close:p,open:m,setIsOpen:o,handleClick:h,width:u,view:d,isOverlay:f}),[a,s,l,p,m,h,u,d,f])}var ot=(0,I.createContext)(null);function st(e){if(!e||e.length===0)return{};let t={};for(let n of e)if(n.defaultValue!==void 0)t[n.name]=n.defaultValue;else switch(n.type){case`number`:t[n.name]=0;break;case`boolean`:t[n.name]=!1;break;case`object`:t[n.name]={};break;case`array`:t[n.name]=[];break;default:t[n.name]=``;break}return t}var ct=({definitions:e,children:t})=>{let[n,r]=(0,I.useState)(()=>st(e)),i=(0,I.useCallback)((e,t)=>{r(n=>({...n,[e]:t}))},[]),a=(0,I.useCallback)(e=>{r(t=>({...t,...e}))},[]),o=(0,I.useCallback)(()=>{r(st(e))},[e]),s=(0,I.useMemo)(()=>({variables:n,setVariable:i,setVariables:a,resetVariables:o}),[n,i,a,o]);return(0,L.jsx)(ot.Provider,{value:s,children:t})};ct.displayName=`PageVariablesProvider`;function lt(){let e=(0,I.useContext)(Ve)?.dataSource,[t,n]=(0,I.useState)(null),[r,i]=(0,I.useState)(!0),[a,o]=(0,I.useState)(null);return(0,I.useEffect)(()=>{let t=!1;async function r(){if(!e){i(!1);return}try{if(i(!0),typeof e.getDiscovery==`function`){let r=await e.getDiscovery();t||(n(r),o(null))}else t||(n(null),o(null))}catch(e){t||(o(e instanceof Error?e:Error(`Failed to fetch discovery`)),n(null))}finally{t||i(!1)}}return r(),()=>{t=!0}},[e]),{discovery:t,isLoading:r,error:a,isAuthEnabled:t?.services?.auth?.enabled??!0,isAiEnabled:t?.services?.ai?.enabled===!0&&t?.services?.ai?.status===`available`}}[`a[href]`,`button:not([disabled])`,`input:not([disabled])`,`select:not([disabled])`,`textarea:not([disabled])`,`[tabindex]:not([tabindex="-1"])`].join(`, `);var ut={compact:32,comfortable:40,spacious:52},dt={compact:`py-1 px-2`,comfortable:`py-2 px-3`,spacious:`py-3 px-4`},ft={compact:`text-xs`,comfortable:`text-sm`,spacious:`text-base`},pt=[`compact`,`comfortable`,`spacious`];function mt(e=`comfortable`,t){let[n,r]=(0,I.useState)(e),i=t?.rowHeights??ut,a=t?.paddingClasses??dt,o=t?.fontSizeClasses??ft,s=(0,I.useRef)(t?.onChange);(0,I.useEffect)(()=>{s.current=t?.onChange},[t?.onChange]);let c=(0,I.useRef)(e);(0,I.useEffect)(()=>{e!==c.current&&(c.current=e,r(e))},[e]);let l=(0,I.useCallback)(e=>{r(t=>t===e?t:(queueMicrotask(()=>s.current?.(e)),e))},[]),u=(0,I.useCallback)(()=>{r(e=>{let t=pt[(pt.indexOf(e)+1)%pt.length];return queueMicrotask(()=>s.current?.(t)),t})},[]);return(0,I.useMemo)(()=>({mode:n,setMode:l,cycle:u,rowHeight:i[n],paddingClass:a[n],fontSizeClass:o[n]}),[n,l,u,i,a,o])}var ht=0,gt=(0,I.createContext)(null),_t=({children:e,config:t={},onToast:n})=>{let r=(0,I.useMemo)(()=>({position:`top-right`,defaultDuration:5e3,maxVisible:5,stacking:!0,...t}),[JSON.stringify(t)]),[i,a]=(0,I.useState)([]),o=(0,I.useCallback)(e=>{let t=`notification-${++ht}`,i={...e,id:t,createdAt:new Date,read:!1};a(e=>[i,...e]),n&&n(i);let o=e.duration??r.defaultDuration??5e3;return o>0&&setTimeout(()=>{a(e=>e.filter(e=>e.id!==t))},o),t},[r.defaultDuration,n]),s=(0,I.useCallback)((e,t)=>o({title:e,message:t,severity:`info`}),[o]),c=(0,I.useCallback)((e,t)=>o({title:e,message:t,severity:`success`}),[o]),l=(0,I.useCallback)((e,t)=>o({title:e,message:t,severity:`warning`}),[o]),u=(0,I.useCallback)((e,t)=>o({title:e,message:t,severity:`error`}),[o]),d=(0,I.useCallback)(e=>{a(t=>t.map(t=>t.id===e?{...t,read:!0}:t))},[]),f=(0,I.useCallback)(()=>{a(e=>e.map(e=>({...e,read:!0})))},[]),p=(0,I.useCallback)(e=>{a(t=>t.filter(t=>t.id!==e))},[]),m=(0,I.useCallback)(()=>{a([])},[]),h=(0,I.useMemo)(()=>i.filter(e=>!e.read).length,[i]),g=(0,I.useMemo)(()=>({notifications:i,unreadCount:h,notify:o,info:s,success:c,warning:l,error:u,markAsRead:d,markAllAsRead:f,dismiss:p,clearAll:m,config:r}),[i,h,o,s,c,l,u,d,f,p,m,r]);return(0,L.jsx)(gt.Provider,{value:g,children:e})};_t.displayName=`NotificationProvider`;function vt(e){return typeof window>`u`?()=>{}:(window.addEventListener(`online`,e),window.addEventListener(`offline`,e),()=>{window.removeEventListener(`online`,e),window.removeEventListener(`offline`,e)})}function yt(){return typeof navigator<`u`?navigator.onLine:!0}function bt(){return!0}var xt=`objectui-offline-queue`;function St(){if(typeof localStorage>`u`)return[];try{let e=localStorage.getItem(xt);return e?JSON.parse(e):[]}catch{return[]}}function Ct(e){if(!(typeof localStorage>`u`))try{localStorage.setItem(xt,JSON.stringify(e))}catch{}}var wt=0;function Tt(){return wt+=1,`mut_${Date.now()}_${wt}`}var Et={enabled:!0,strategy:`network_first`,offlineIndicator:!0,offlineMessage:`You are currently offline. Changes will be synced when reconnected.`,queueMaxSize:100};function Dt(e={}){let{enabled:t=Et.enabled,strategy:n=Et.strategy,offlineIndicator:r=Et.offlineIndicator,offlineMessage:i=Et.offlineMessage,queueMaxSize:a=Et.queueMaxSize,sync:o}=e,s=(0,I.useSyncExternalStore)(vt,yt,bt),[c,l]=(0,I.useState)(St),[u,d]=(0,I.useState)(`idle`),f=(0,I.useRef)(o);f.current=o,(0,I.useEffect)(()=>{Ct(c)},[c]),(0,I.useEffect)(()=>{t&&(s?u===`offline`&&d(`idle`):d(`offline`))},[s,t,u]);let p=(0,I.useCallback)(e=>{t&&l(t=>{let n={...e,id:Tt(),timestamp:Date.now()},r=[...t,n];return r.length>a?r.slice(r.length-a):r})},[t,a]),m=(0,I.useCallback)(()=>{l([])},[]),h=(0,I.useCallback)(async()=>{if(!(!t||c.length===0)){d(`syncing`);try{let e=f.current?.batchSize??c.length,t=c.slice(0,e);await new Promise(e=>setTimeout(e,0)),l(e=>e.filter(e=>!t.some(t=>t.id===e.id))),d(`idle`)}catch{d(`error`)}}},[t,c]);return(0,I.useEffect)(()=>{if(!t||!s||c.length===0)return;let e=setTimeout(()=>{h()},100);return()=>clearTimeout(e)},[s,t]),(0,I.useMemo)(()=>({isOnline:s,enabled:t,syncState:u,strategy:n,pendingCount:c.length,queueMutation:p,sync:h,clearQueue:m,showIndicator:r&&!s,offlineMessage:i}),[s,t,u,n,c.length,p,h,m,r,i])}function Ot(){return{canUndo:M.canUndo,canRedo:M.canRedo,undoDescription:M.peekUndo()?.description,redoDescription:M.peekRedo()?.description,history:M.getHistory()}}function kt(){return{canUndo:!1,canRedo:!1,undoDescription:void 0,redoDescription:void 0,history:[]}}var At=Ot();function jt(e){return M.subscribe(()=>{At=Ot(),e()})}function Mt(){return At}function Nt(e={}){let t=(0,I.useRef)(e);t.current=e;let n=(0,I.useSyncExternalStore)(jt,Mt,kt),r=(0,I.useCallback)(async(e,n,r)=>{let i=t.current.dataSource;if(!i)return;let a=r===`undo`?{create:`delete`,update:`update`,delete:`create`}[e.type]:e.type;a===`delete`?await i.delete(e.objectName,e.recordId):a===`update`?await i.update(e.objectName,e.recordId,n):await i.create(e.objectName,n)},[]),i=(0,I.useCallback)(async()=>{let e=M.popUndo();e&&(await r(e,e.undoData,`undo`),t.current.onUndo?.(e))},[r]),a=(0,I.useCallback)(async()=>{let e=M.popRedo();e&&(await r(e,e.redoData,`redo`),t.current.onRedo?.(e))},[r]);return(0,I.useEffect)(()=>{let e=e=>{!(e.ctrlKey||e.metaKey)||e.key.toLowerCase()!==`z`||(e.preventDefault(),e.shiftKey?a():i())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[i,a]),(0,I.useMemo)(()=>({...n,undo:i,redo:a}),[n,i,a])}var Pt=(0,I.createContext)(null),Ft=({children:e,context:t={},onConfirm:n,onToast:r,onModal:i,onNavigate:a,onParamCollection:o,onResultDialog:s,handlers:c})=>{let[l,u]=(0,I.useState)(!1),[d,f]=(0,I.useState)(null),[p,m]=(0,I.useState)(null),h=(0,I.useMemo)(()=>{let e=new j({...t,ctx:t&&typeof t.ctx==`object`?{...t,...t.ctx}:{...t}});return n&&e.setConfirmHandler(n),r&&e.setToastHandler(r),i&&e.setModalHandler(i),a&&e.setNavigationHandler(a),o&&e.setParamCollectionHandler(o),s&&e.setResultDialogHandler(s),c&&Object.entries(c).forEach(([t,n])=>{e.registerHandler(t,n)}),e},[JSON.stringify(t)]),g=(0,I.useCallback)(async e=>{u(!0),f(null),m(null);try{let t=await h.execute(e);return m(t),t.success||f(t.error||`Action failed`),t}catch(e){let t=e.message;f(t);let n={success:!1,error:t};return m(n),n}finally{u(!1)}},[h]),_=(0,I.useCallback)(async(e,t)=>{u(!0),f(null),m(null);try{let n=await h.executeChain(e,t);return m(n),n.success||f(n.error||`Chain failed`),n}catch(e){let t=e.message;f(t);let n={success:!1,error:t};return m(n),n}finally{u(!1)}},[h]),v=(0,I.useCallback)(e=>{h.updateContext(e)},[h]),y=(0,I.useMemo)(()=>({execute:g,executeChain:_,loading:l,error:d,result:p,runner:h,updateContext:v}),[g,_,l,d,p,h,v]);return(0,L.jsx)(Pt.Provider,{value:y,children:e})};Ft.displayName=`ActionProvider`;function It(){let e=(0,I.useContext)(Pt);if(!e){let e=new j;return{execute:t=>e.execute(t),executeChain:(t,n)=>e.executeChain(t,n),loading:!1,error:null,result:null,runner:e,updateContext:t=>e.updateContext(t)}}return e}function Lt(e={}){let{actions:t=[],context:n={}}=e,r=(0,I.useContext)(Pt)?.runner??null,i=(0,I.useMemo)(()=>{let e=n&&Object.keys(n).length>0?{...n,ctx:n.ctx&&typeof n.ctx==`object`?{...n,...n.ctx}:{...n}}:n,i=r?new ue(r):new ue(e);if(r&&n&&Object.keys(n).length>0){let e=i.getRunner(),t=e.getEvaluator().getContext().toObject(),r=t&&typeof t.ctx==`object`?t.ctx:{},a=n.ctx&&typeof n.ctx==`object`?n.ctx:n,o={...n,ctx:{...r,...a}};e.updateContext(o)}return i.registerActions(t),i},[r,JSON.stringify(t),JSON.stringify(n)]);return{getActionsForLocation:(0,I.useCallback)(e=>i.getActionsForLocation(e),[i]),getBulkActions:(0,I.useCallback)(()=>i.getBulkActions(),[i]),executeAction:(0,I.useCallback)((e,t)=>i.executeAction(e,t),[i]),handleShortcut:(0,I.useCallback)(e=>i.handleShortcut(e),[i]),engine:i}}var Rt=(0,I.createContext)(null);function zt(){return(0,I.useContext)(Rt)}var Bt=(0,I.createContext)(null);function Vt(){return(0,I.useContext)(Bt)||{apps:[],objects:[],dashboards:[],reports:[],pages:[],loading:!1,error:null,refresh:async()=>{},invalidate:()=>{},ensureType:async()=>[],getItem:async()=>null,getItemsByType:()=>[]}}function Ht(e,t){let{getItem:n}=Vt(),[r,i]=(0,I.useState)({item:null,loading:!!t,error:null});return(0,I.useEffect)(()=>{if(!t){i({item:null,loading:!1,error:null});return}let r=!1;return i(e=>({...e,loading:!0,error:null})),n(e,t).then(e=>{r||i({item:e,loading:!1,error:null})}).catch(e=>{r||i({item:null,loading:!1,error:e instanceof Error?e:Error(String(e))})}),()=>{r=!0}},[e,t,n]),r}function Ut(e,t){return!0}function Wt(e,t={}){let n=Vt(),[r,i]=(0,I.useState)(!1),[a,o]=(0,I.useState)(null);(0,I.useEffect)(()=>{let e=!1;if(!n.ensureType){i(!0);return}return n.ensureType(`page`).then(()=>{e||(i(!0),o(null))}).catch(t=>{e||(o(t instanceof Error?t:Error(String(t))),i(!0))}),()=>{e=!0}},[n]);let s=(0,I.useMemo)(()=>{if(!e&&!t.pageName)return null;let r=Array.isArray(n.pages)?n.pages:[];if(!r.length)return null;if(t.pageName)return r.find(e=>e?.name===t.pageName)??null;let i=r.filter(n=>!n||(n.pageType??(n.type===`record`?`record`:void 0))!==`record`||n.object!==e?!1:Ut(n,t));return i.length?(i.sort((e,t)=>(t?.priority??0)-(e?.priority??0)),i[0]):null},[n.pages,e,t.pageName,t.recordType,t.profile,t.app,t.formFactor]),{page:c,slots:l}=(0,I.useMemo)(()=>s?s.kind===`slotted`?{page:null,slots:s.slots??{}}:{page:s,slots:null}:{page:null,slots:null},[s]);return{page:c,slots:l,loading:n.loading||!r,error:a??n.error??null}}function Gt(e,t){let n=e?.titleFormat;if(n&&typeof n==`string`){let e=n.replace(/\{\{\s*([\w.]+)\s*\}\}/g,(e,n)=>{let r=n.split(`.`).reduce((e,t)=>e==null?e:e[t],t);return r==null?``:String(r)}).trim();if(e.length>0)return e}return t?.name||t?.full_name||t?.fullName||t?.title||t?.label||t?.subject||t?.id||t?._id||`Untitled`}function Kt(e,t,n){if(!e)return 0;let r=e.toLowerCase(),i=(t||``).toLowerCase();return(n||``).toLowerCase()===r?110:i===r?100:i.startsWith(r)?80:i.split(/[\s_\-/.,:;()[\]]+/).filter(Boolean).some(e=>e.startsWith(r))?60:i.includes(r)?40:0}function qt(e){let{query:t,objects:n,dataSource:r,objectNames:i,maxObjectsQueried:a=8,topPerObject:o=3,minLength:s=2,debounceMs:c=250,enabled:l=!0,getDisplayName:u=Gt}=e,[d,f]=(0,I.useState)([]),[p,m]=(0,I.useState)(!1),[h,g]=(0,I.useState)(void 0),_=(0,I.useMemo)(()=>{if(!Array.isArray(n)||n.length===0)return[];let e=n;if(Array.isArray(i)&&i.length>0){let t=new Map;for(let e of n){let n=e?.name;typeof n==`string`&&t.set(n,e)}e=i.map(e=>t.get(e)).filter(e=>e!=null)}else e=n.filter(e=>e?.searchable!==!1);return e.slice(0,a)},[n,i,a]),v=(0,I.useMemo)(()=>_.map(e=>`${e?.name}:${e?.titleField??``}`).join(`|`),[_]),y=(0,I.useRef)(0);return(0,I.useEffect)(()=>{if(!l||!r||_.length===0){f([]),m(!1),g(void 0);return}let e=(t??``).trim();if(e.length<s){f([]),m(!1),g(void 0);return}let n=++y.current;m(!0),g(void 0);let i=setTimeout(()=>{if(y.current!==n)return;let t=_.map(t=>Promise.resolve().then(()=>r.find(t.name,{$search:e,$top:o})).then(e=>({obj:t,res:e,err:null})).catch(e=>({obj:t,res:null,err:e})));Promise.allSettled(t).then(t=>{if(y.current!==n)return;let r=[],i;for(let n of t){if(n.status!==`fulfilled`)continue;let{obj:t,res:a,err:s}=n.value;if(s){let e=s?.httpStatus??s?.status,t=s?.code;if(e===404||t===`object_not_found`)continue;i=s instanceof Error?s:Error(String(s));continue}let c=Array.isArray(a?.data)?a.data:Array.isArray(a)?a:[];for(let n of c.slice(0,o)){let i=n?.id??n?._id;if(i==null)continue;let a=u(t,n);r.push({objectName:t.name,objectLabel:typeof t.label==`string`&&t.label.length>0?t.label:t.name,recordId:String(i),display:a,icon:t?.icon,score:Kt(e,a,String(i)),raw:n})}}r.sort((e,t)=>t.score-e.score),f(r),m(!1),g(i)})},c);return()=>{clearTimeout(i)}},[t,l,r,v,o,s,c,u]),{results:d,isSearching:p,error:h}}(0,I.createContext)(null);var Jt=(0,I.createContext)(null),Yt=({children:e,config:t={},onDragStart:n,onDrop:r,onDragCancel:i})=>{let a=(0,I.useMemo)(()=>({enabled:!0,showPreview:!0,autoScroll:!0,...t}),[JSON.stringify(t)]),[o,s]=(0,I.useState)(null),[c]=(0,I.useState)(()=>new Map),l=(0,I.useCallback)(e=>{a.enabled&&(s(e),n?.({item:e,targetZoneId:null,effect:`move`}))},[a.enabled,n]),u=(0,I.useCallback)(e=>{if(!o)return;let t=(e?c.get(e):void 0)?.effect??`move`;r?.({item:o,targetZoneId:e??null,effect:t}),s(null)},[o,c,r]),d=(0,I.useCallback)(()=>{o&&(i?.({item:o,targetZoneId:null,effect:`none`}),s(null))},[o,i]),f=(0,I.useCallback)(e=>{c.set(e.id,e)},[c]),p=(0,I.useCallback)(e=>{c.delete(e)},[c]),m=(0,I.useCallback)((e,t)=>{let n=c.get(e);return!n||n.disabled?!1:n.acceptTypes.includes(t)},[c]),h=(0,I.useMemo)(()=>({config:a,enabled:a.enabled??!0,activeItem:o,dropZones:c,startDrag:l,endDrag:u,cancelDrag:d,registerDropZone:f,unregisterDropZone:p,canDrop:m}),[a,o,c,l,u,d,f,p,m]);return(0,L.jsx)(Jt.Provider,{value:h,children:e})};Yt.displayName=`DndProvider`;function Xt(){let e=(0,I.useContext)(Jt);if(!e)throw Error(`useDnd must be used within a <DndProvider>. Wrap your app with <DndProvider> to use the drag and drop system.`);return e}function Zt(){return(0,I.useContext)(Jt)!==null}var Qt=I.createContext(null),$t=({children:e})=>{let t=I.useMemo(()=>{let e=new Map,t=an,n=new Set,r=()=>{let r=new Set;for(let t of e.values())for(let e of t)r.add(e);if(r.size===t.size){let e=!0;for(let n of r)if(!t.has(n)){e=!1;break}if(e)return}t=r,n.forEach(e=>e())};return{getNames:()=>t,subscribe:e=>(n.add(e),()=>{n.delete(e)}),register:(t,n)=>{let i=e.get(t);i&&i.length===n.length&&i.every((e,t)=>e===n[t])||(e.set(t,[...n]),r())},unregister:t=>{e.delete(t)&&r()}}},[]);return(0,L.jsx)(Qt.Provider,{value:t,children:e})};function en(){let e=I.useContext(Qt);return I.useSyncExternalStore(e?e.subscribe:nn,e?e.getNames:rn,e?e.getNames:rn)}function tn(e,t){let n=I.useContext(Qt),r=t.join(`|`);I.useEffect(()=>{if(n)return n.register(e,r.length===0?[]:r.split(`|`)),()=>n.unregister(e)},[n,e,r])}var nn=e=>()=>{},rn=()=>an,an=new Set,on=I.createContext(null),sn=({children:e,...t})=>{let n=I.useMemo(()=>t,[t.objectName,t.recordId,t.dataSource,t.data,t.objectSchema,t.loading,t.error,t.refresh,t.embedded,t.headerSystemActions,t.isFavorite,t.onToggleFavorite]);return(0,L.jsx)(on.Provider,{value:n,children:e})};function cn(){return I.useContext(on)}var ln=I.createContext(null),un=({children:e,...t})=>{let n=I.useMemo(()=>t,[t.items,t.onAddComment,t.onAddReply,t.onToggleReaction,t.mentionSuggestions,t.onUploadAttachments,t.loading,t.error]);return(0,L.jsx)(ln.Provider,{value:n,children:e})};function dn(){return I.useContext(ln)}var fn=e=>e.type===`checkbox`,R=e=>e instanceof Date,z=e=>e==null,pn=e=>typeof e==`object`,B=e=>!z(e)&&!Array.isArray(e)&&pn(e)&&!R(e),mn=e=>B(e)&&e.target?fn(e.target)?e.target.checked:e.target.value:e,hn=(e,t)=>t.split(`.`).some((t,n,r)=>!isNaN(Number(t))&&e.has(r.slice(0,n).join(`.`))),gn=e=>{let t=e.constructor&&e.constructor.prototype;return B(t)&&t.hasOwnProperty(`isPrototypeOf`)},_n=typeof window<`u`&&window.HTMLElement!==void 0&&typeof document<`u`;function V(e){if(e instanceof Date)return new Date(e);let t=typeof FileList<`u`&&e instanceof FileList;if(_n&&(e instanceof Blob||t))return e;let n=Array.isArray(e);if(!n&&!(B(e)&&gn(e)))return e;let r=n?[]:Object.create(Object.getPrototypeOf(e));for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[t]=V(e[t]));return r}var vn=e=>/^\w*$/.test(e),H=e=>e===void 0,yn=e=>Array.isArray(e)?e.filter(Boolean):[],bn=e=>yn(e.replace(/["|']|\]/g,``).split(/\.|\[/)),U=(e,t,n)=>{if(!t||!B(e))return n;let r=(vn(t)?[t]:bn(t)).reduce((e,t)=>z(e)?void 0:e[t],e);return H(r)||r===e?H(e[t])?n:e[t]:r},W=e=>typeof e==`boolean`,G=e=>typeof e==`function`,K=(e,t,n)=>{let r=-1,i=vn(t)?[t]:bn(t),a=i.length,o=a-1;for(;++r<a;){let t=i[r],a=n;if(r!==o){let n=e[t];a=B(n)||Array.isArray(n)?n:isNaN(+i[r+1])?{}:[]}if(t===`__proto__`||t===`constructor`||t===`prototype`)return;e[t]=a,e=e[t]}},q={BLUR:`blur`,FOCUS_OUT:`focusout`,CHANGE:`change`,SUBMIT:`submit`,TRIGGER:`trigger`,VALID:`valid`},J={onBlur:`onBlur`,onChange:`onChange`,onSubmit:`onSubmit`,onTouched:`onTouched`,all:`all`},Y={max:`max`,min:`min`,maxLength:`maxLength`,minLength:`minLength`,pattern:`pattern`,required:`required`,validate:`validate`},xn=`form`,Sn=`root`,Cn=I.createContext(null);Cn.displayName=`HookFormControlContext`;var wn=()=>I.useContext(Cn),Tn=(e,t,n,r=!0)=>{let i={};for(let a in e)Object.defineProperty(i,a,{get:()=>{let i=a;return t._proxyFormState[i]!==J.all&&(t._proxyFormState[i]=!r||J.all),n&&(n[i]=!0),e[i]}});return i},En=typeof window<`u`?I.useLayoutEffect:I.useEffect;function Dn(e){let t=wn(),{control:n=t,disabled:r,name:i,exact:a}=e||{},[o,s]=I.useState(()=>({...n._formState,defaultValues:n._defaultValues})),c=I.useRef({isDirty:!1,isLoading:!1,dirtyFields:!1,touchedFields:!1,validatingFields:!1,isValidating:!1,isValid:!1,errors:!1});return En(()=>n._subscribe({name:i,formState:c.current,exact:a,callback:e=>{!r&&s({...n._formState,...e,defaultValues:n._defaultValues})}}),[i,r,a]),I.useEffect(()=>{c.current.isValid&&n._setValid(!0)},[n]),I.useMemo(()=>Tn(o,n,c.current,!1),[o,n])}var X=e=>typeof e==`string`,On=(e,t,n,r,i)=>X(e)?(r&&t.watch.add(e),U(n,e,i)):Array.isArray(e)?e.map(e=>(r&&t.watch.add(e),U(n,e))):(r&&(t.watchAll=!0),n),kn=e=>z(e)||!pn(e);function Z(e,t,n=new WeakSet){if(e===t)return!0;if(kn(e)||kn(t))return Object.is(e,t);if(R(e)&&R(t))return Object.is(e.getTime(),t.getTime());let r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!1;if(n.has(e)||n.has(t))return!0;n.add(e),n.add(t);for(let i of r){let r=e[i];if(!(i in t))return!1;if(i!==`ref`){let e=t[i];if(R(r)&&R(e)||(B(r)||Array.isArray(r))&&(B(e)||Array.isArray(e))?!Z(r,e,n):!Object.is(r,e))return!1}}return!0}function An(e){let t=wn(),{control:n=t,name:r,defaultValue:i,disabled:a,exact:o,compute:s}=e||{},c=I.useRef(i),l=I.useRef(s),u=I.useRef(void 0),d=I.useRef(n),f=I.useRef(r);l.current=s;let[p,m]=I.useState(()=>{let e=n._getWatch(r,c.current);return l.current?l.current(e):e}),h=I.useCallback(e=>{let t=On(r,n._names,e||n._formValues,!1,c.current);return l.current?l.current(t):t},[n._formValues,n._names,r]),g=I.useCallback(e=>{if(!a){let t=On(r,n._names,e||n._formValues,!1,c.current);if(l.current){let e=l.current(t);Z(e,u.current)||(m(e),u.current=e)}else m(t)}},[n._formValues,n._names,a,r]);En(()=>((d.current!==n||!Z(f.current,r))&&(d.current=n,f.current=r,g()),n._subscribe({name:r,formState:{values:!0},exact:o,callback:e=>{g(e.values)}})),[n,o,r,g]),I.useEffect(()=>n._removeUnmounted());let _=d.current!==n,v=f.current,y=I.useMemo(()=>{if(a)return null;let e=!_&&!Z(v,r);return _||e?h():null},[a,_,r,v,h]);return y===null?p:y}function jn(e){let t=wn(),{name:n,disabled:r,control:i=t,shouldUnregister:a,defaultValue:o,exact:s=!0}=e,c=hn(i._names.array,n),l=An({control:i,name:n,defaultValue:I.useMemo(()=>U(i._formValues,n,U(i._defaultValues,n,o)),[i,n,o]),exact:s}),u=Dn({control:i,name:n,exact:s}),d=I.useRef(e),f=I.useRef(i.register(n,{...e.rules,value:l,...W(e.disabled)?{disabled:e.disabled}:{}}));d.current=e;let p=I.useMemo(()=>Object.defineProperties({},{invalid:{enumerable:!0,get:()=>!!U(u.errors,n)},isDirty:{enumerable:!0,get:()=>!!U(u.dirtyFields,n)},isTouched:{enumerable:!0,get:()=>!!U(u.touchedFields,n)},isValidating:{enumerable:!0,get:()=>!!U(u.validatingFields,n)},error:{enumerable:!0,get:()=>U(u.errors,n)}}),[u,n]),m=I.useCallback(e=>f.current.onChange({target:{value:mn(e),name:n},type:q.CHANGE}),[n]),h=I.useCallback(()=>f.current.onBlur({target:{value:U(i._formValues,n),name:n},type:q.BLUR}),[n,i._formValues]),g=I.useCallback(e=>{let t=U(i._fields,n);t&&t._f&&e&&(t._f.ref={focus:()=>G(e.focus)&&e.focus(),select:()=>G(e.select)&&e.select(),setCustomValidity:t=>G(e.setCustomValidity)&&e.setCustomValidity(t),reportValidity:()=>G(e.reportValidity)&&e.reportValidity()})},[i._fields,n]),_=I.useMemo(()=>({name:n,value:l,...W(r)||u.disabled?{disabled:u.disabled||r}:{},onChange:m,onBlur:h,ref:g}),[n,r,u.disabled,m,h,g,l]);return I.useEffect(()=>{let e=i._options.shouldUnregister||a;i.register(n,{...d.current.rules,...W(d.current.disabled)?{disabled:d.current.disabled}:{}});let t=(e,t)=>{let n=U(i._fields,e);n&&n._f&&(n._f.mount=t)};if(t(n,!0),e){let e=V(U(i._defaultValues,n,U(i._options.defaultValues,n,d.current.defaultValue)));K(i._defaultValues,n,e),H(U(i._formValues,n))&&K(i._formValues,n,e)}return!c&&i.register(n),()=>{(c?e&&!i._state.action:e)?i.unregister(n):t(n,!1)}},[n,i,c,a]),I.useEffect(()=>{i._setDisabledField({disabled:r,name:n})},[r,n,i]),I.useMemo(()=>({field:_,formState:u,fieldState:p}),[_,u,p])}var Mn=e=>e.render(jn(e)),Nn=I.createContext(null);Nn.displayName=`HookFormContext`;var Pn=()=>I.useContext(Nn),Fn=e=>{let{children:t,watch:n,getValues:r,getFieldState:i,setError:a,clearErrors:o,setValue:s,setValues:c,trigger:l,formState:u,resetField:d,reset:f,handleSubmit:p,unregister:m,control:h,register:g,setFocus:_,subscribe:v}=e,y=I.useMemo(()=>({watch:n,getValues:r,getFieldState:i,setError:a,clearErrors:o,setValue:s,setValues:c,trigger:l,formState:u,resetField:d,reset:f,handleSubmit:p,unregister:m,control:h,register:g,setFocus:_,subscribe:v}),[o,h,u,i,r,p,g,f,d,a,_,s,c,v,l,m,n]);return I.createElement(Nn.Provider,{value:y},I.createElement(Cn.Provider,{value:y.control},t))},In=(e,t,n,r,i)=>t?{...n[e],types:{...n[e]&&n[e].types?n[e].types:{},[r]:i||!0}}:{},Ln=e=>Array.isArray(e)?e:[e],Rn=()=>{let e=[];return{get observers(){return e},next:t=>{for(let n of e)n.next&&n.next(t)},subscribe:t=>(e.push(t),{unsubscribe:()=>{e=e.filter(e=>e!==t)}}),unsubscribe:()=>{e=[]}}};function zn(e,t){let n={};for(let r in e)if(e.hasOwnProperty(r)){let i=e[r],a=t[r];if(i&&B(i)&&a){let e=zn(i,a);B(e)&&(n[r]=e)}else e[r]&&(n[r]=a)}return n}var Q=e=>B(e)&&!Object.keys(e).length,Bn=e=>e.type===`file`,Vn=e=>{if(!_n)return!1;let t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},Hn=e=>e.type===`select-multiple`,Un=e=>e.type===`radio`,Wn=e=>Un(e)||fn(e),Gn=e=>Vn(e)&&e.isConnected;function Kn(e,t){let n=t.slice(0,-1).length,r=0;for(;r<n;){if(z(e)){e=void 0;break}e=e[t[r]],r++}return e}function qn(e){for(let t in e)if(e.hasOwnProperty(t)&&!H(e[t]))return!1;return!0}function $(e,t){if(X(t)&&Object.prototype.hasOwnProperty.call(e,t))return delete e[t],e;let n=Array.isArray(t)?t:vn(t)?[t]:bn(t),r=n.length===1?e:Kn(e,n),i=n.length-1,a=n[i];return r&&delete r[a],i!==0&&(B(r)&&Q(r)||Array.isArray(r)&&qn(r))&&$(e,n.slice(0,-1)),e}var Jn=e=>{for(let t in e)if(G(e[t]))return!0;return!1};function Yn(e){return Array.isArray(e)||B(e)&&!Jn(e)}function Xn(e,t={}){for(let n in e){let r=e[n];Yn(r)?(t[n]=Array.isArray(r)?[]:{},Xn(r,t[n])):H(r)||(t[n]=!0)}return t}function Zn(e){if(e!==!1){if(e===!0)return!0;if(Array.isArray(e)){let t=e.map(e=>Zn(e));return t.some(e=>e!==void 0)?t:void 0}if(B(e)){let t={};for(let n in e){let r=Zn(e[n]);H(r)||(t[n]=r)}return Object.keys(t).length?t:void 0}}}function Qn(e,t,n){n||=Xn(t);for(let r in e){let i=e[r];if(Yn(i))H(t)||kn(n[r])?n[r]=Xn(i,Array.isArray(i)?[]:{}):Qn(i,z(t)?{}:t[r],n[r]);else{let e=t[r];n[r]=!Z(i,e)}}return Zn(n)||{}}var $n={value:!1,isValid:!1},er={value:!0,isValid:!0},tr=e=>{if(Array.isArray(e)){if(e.length>1){let t=e.filter(e=>e&&e.checked&&!e.disabled).map(e=>e.value);return{value:t,isValid:!!t.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!H(e[0].attributes.value)?H(e[0].value)||e[0].value===``?er:{value:e[0].value,isValid:!0}:er:$n}return $n},nr=(e,{valueAsNumber:t,valueAsDate:n,setValueAs:r})=>H(e)?e:t?e===``?NaN:e&&+e:n&&X(e)?new Date(e):r?r(e):e,rr={isValid:!1,value:null},ir=e=>Array.isArray(e)?e.reduce((e,t)=>t&&t.checked&&!t.disabled?{isValid:!0,value:t.value}:e,rr):rr;function ar(e){let t=e.ref;return Bn(t)?t.files:Un(t)?ir(e.refs).value:Hn(t)?[...t.selectedOptions].map(({value:e})=>e):fn(t)?tr(e.refs).value:nr(H(t.value)?e.ref.value:t.value,e)}var or=(e,t,n,r)=>{let i={};for(let n of e){let e=U(t,n);e&&K(i,n,e._f)}return{criteriaMode:n,names:[...e],fields:i,shouldUseNativeValidation:r}},sr=e=>e instanceof RegExp,cr=e=>H(e)?e:sr(e)?e.source:B(e)?sr(e.value)?e.value.source:e.value:e,lr=e=>({isOnSubmit:!e||e===J.onSubmit,isOnBlur:e===J.onBlur,isOnChange:e===J.onChange,isOnAll:e===J.all,isOnTouch:e===J.onTouched}),ur=`AsyncFunction`,dr=e=>!!e&&!!e.validate&&!!(G(e.validate)&&e.validate.constructor.name===ur||B(e.validate)&&Object.values(e.validate).find(e=>e.constructor.name===ur)),fr=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate),pr=(e,t,n)=>!n&&(t.watchAll||t.watch.has(e)||[...t.watch].some(t=>e.startsWith(t)&&/^\.\w+/.test(e.slice(t.length)))),mr=(e,t,n,r)=>{for(let i of n||Object.keys(e)){let n=U(e,i);if(n){let{_f:e,...a}=n;if(e){if(e.refs&&e.refs[0]&&t(e.refs[0],i)&&!r||e.ref&&t(e.ref,e.name)&&!r)return!0;if(mr(a,t))break}else if(B(a)&&mr(a,t))break}}};function hr(e,t,n){let r=U(e,n);if(r||vn(n))return{error:r,name:n};let i=n.split(`.`);for(;i.length;){let r=i.join(`.`),a=U(t,r),o=U(e,r);if(a&&!Array.isArray(a)&&n!==r)return{name:n};if(o&&o.type)return{name:r,error:o};if(o&&o.root&&o.root.type)return{name:`${r}.root`,error:o.root};i.pop()}return{name:n}}var gr=(e,t,n,r)=>{n(e);let{name:i,...a}=e;return Q(a)||r&&Object.keys(a).length>=Object.keys(t).length||Object.keys(a).find(e=>t[e]===(!r||J.all))},_r=(e,t,n)=>!e||!t||e===t||Ln(e).some(e=>e&&(n?e===t:e.startsWith(t)||t.startsWith(e))),vr=(e,t,n,r,i)=>i.isOnAll?!1:!n&&i.isOnTouch?!(t||e):(n?r.isOnBlur:i.isOnBlur)?!e:(n?r.isOnChange:i.isOnChange)?e:!0,yr=(e,t)=>!yn(U(e,t)).length&&$(e,t),br=(e,t,n)=>{let r=Ln(U(e,n));return K(r,Sn,t[n]),K(e,n,r),e};function xr(e,t,n=`validate`){if(X(e)||Array.isArray(e)&&e.every(X)||W(e)&&!e)return{type:n,message:X(e)?e:``,ref:t}}var Sr=e=>B(e)&&!sr(e)?e:{value:e,message:``},Cr=async(e,t,n,r,i,a)=>{let{ref:o,refs:s,required:c,maxLength:l,minLength:u,min:d,max:f,pattern:p,validate:m,name:h,valueAsNumber:g,mount:_}=e._f,v=U(n,h);if(!_||t.has(h))return{};let y=s?s[0]:o,b=e=>{i&&y.reportValidity&&(y.setCustomValidity(W(e)?``:e||``),y.reportValidity())},x={},S=Un(o),C=fn(o),ee=S||C,te=(g||Bn(o))&&H(o.value)&&H(v)||Vn(o)&&o.value===``||v===``||Array.isArray(v)&&!v.length,w=In.bind(null,h,r,x),T=(e,t,n,r=Y.maxLength,i=Y.minLength)=>{let a=e?t:n;x[h]={type:e?r:i,message:a,ref:o,...w(e?r:i,a)}};if(a?!Array.isArray(v)||!v.length:c&&(!ee&&(te||z(v))||W(v)&&!v||C&&!tr(s).isValid||S&&!ir(s).isValid)){let{value:e,message:t}=X(c)?{value:!!c,message:c}:Sr(c);if(e&&(x[h]={type:Y.required,message:t,ref:y,...w(Y.required,t)},!r))return b(t),x}if(!te&&(!z(d)||!z(f))){let e,t,n=Sr(f),i=Sr(d);if(!z(v)&&!isNaN(v)){let r=o.valueAsNumber||v&&+v;z(n.value)||(e=r>n.value),z(i.value)||(t=r<i.value)}else{let r=o.valueAsDate||new Date(v),a=e=>new Date(new Date().toDateString()+` `+e),s=o.type==`time`,c=o.type==`week`;X(n.value)&&v&&(e=s?a(v)>a(n.value):c?v>n.value:r>new Date(n.value)),X(i.value)&&v&&(t=s?a(v)<a(i.value):c?v<i.value:r<new Date(i.value))}if((e||t)&&(T(!!e,n.message,i.message,Y.max,Y.min),!r))return b(x[h].message),x}if((l||u)&&!te&&(X(v)||a&&Array.isArray(v))){let e=Sr(l),t=Sr(u),n=!z(e.value)&&v.length>+e.value,i=!z(t.value)&&v.length<+t.value;if((n||i)&&(T(n,e.message,t.message),!r))return b(x[h].message),x}if(p&&!te&&X(v)){let{value:e,message:t}=Sr(p);if(sr(e)&&!v.match(e)&&(x[h]={type:Y.pattern,message:t,ref:o,...w(Y.pattern,t)},!r))return b(t),x}if(m){if(G(m)){let e=xr(await m(v,n),y);if(e&&(x[h]={...e,...w(Y.validate,e.message)},!r))return b(e.message),x}else if(B(m)){let e={};for(let t in m){if(!Q(e)&&!r)break;let i=xr(await m[t](v,n),y,t);i&&(e={...i,...w(t,i.message)},b(i.message),r&&(x[h]=e))}if(!Q(e)&&(x[h]={ref:y,...e},!r))return x}}return b(!0),x},wr={mode:J.onSubmit,reValidateMode:J.onChange,shouldFocusError:!0},Tr={submitCount:0,isDirty:!1,isReady:!1,isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{}};function Er(e={}){let t={...wr,...e},n={...V(Tr),isLoading:G(t.defaultValues),errors:t.errors||{},disabled:t.disabled||!1},r={},i=(B(t.defaultValues)||B(t.values))&&V(t.defaultValues||t.values)||{},a=t.shouldUnregister?{}:V(i),o={action:!1,mount:!1,watch:!1,keepIsValid:!1},s={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set,registerName:new Set},c,l=0,u={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},d={...u},f={...d},p={array:Rn(),state:Rn()},m=t.criteriaMode===J.all,h=e=>t=>{clearTimeout(l),l=setTimeout(e,t)},g=async e=>{if(!o.keepIsValid&&!t.disabled&&(d.isValid||f.isValid||e)){let e;t.resolver?(e=Q((await w()).errors),_()):e=await D({fields:r,onlyCheckValid:!0,eventType:q.VALID}),e!==n.isValid&&p.state.next({isValid:e})}},_=(e,r)=>{!t.disabled&&(d.isValidating||d.validatingFields||f.isValidating||f.validatingFields)&&((e||Array.from(s.mount)).forEach(e=>{e&&(r?K(n.validatingFields,e,r):$(n.validatingFields,e))}),p.state.next({validatingFields:n.validatingFields,isValidating:!Q(n.validatingFields)}))},v=()=>{n.dirtyFields=Qn(i,a)},y=(e,i=[],s,c,l=!0,u=!0)=>{if(c&&s&&!t.disabled){if(o.action=!0,u&&Array.isArray(U(r,e))){let t=s(U(r,e),c.argA,c.argB);l&&K(r,e,t)}if(u&&Array.isArray(U(n.errors,e))){let t=s(U(n.errors,e),c.argA,c.argB);l&&K(n.errors,e,t),yr(n.errors,e)}if((d.touchedFields||f.touchedFields)&&u&&Array.isArray(U(n.touchedFields,e))){let t=s(U(n.touchedFields,e),c.argA,c.argB);l&&K(n.touchedFields,e,t)}(d.dirtyFields||f.dirtyFields)&&v(),p.state.next({name:e,isDirty:k(e,i),dirtyFields:n.dirtyFields,errors:n.errors,isValid:n.isValid})}else K(a,e,i)},b=(e,t)=>{K(n.errors,e,t),p.state.next({errors:n.errors})},x=e=>{n.errors=e,p.state.next({errors:n.errors,isValid:!1})},S=e=>{let t=vn(e)?[e]:bn(e),n=a,r=i;for(let e=0;e<t.length-1;e++){let i=t[e];if(n=z(n)?n:n[i],r=z(r)?r:r[i],n===null&&r!==null)return!0}return!1},C=(e,t,s,c)=>{let l=U(r,e);if(l){if(S(e))return;let r=H(U(a,e)),u=U(a,e,H(s)?U(i,e):s);H(u)||c&&c.defaultChecked||t?K(a,e,t?u:ar(l._f)):j(e,u),o.mount&&!o.action&&(g(),r&&n.isDirty&&(d.isDirty||f.isDirty)&&(k()||(n.isDirty=!1,p.state.next({...n}))))}},ee=(e,r,o,s,c)=>{let l=!1,u=!1,m={name:e};if(!t.disabled){if(!o||s){(d.isDirty||f.isDirty)&&(u=n.isDirty,n.isDirty=m.isDirty=k(),l=u!==m.isDirty);let t=Z(U(i,e),r);u=!!U(n.dirtyFields,e),t===n.isDirty?t?$(n.dirtyFields,e):K(n.dirtyFields,e,!0):n.dirtyFields=Qn(i,a),m.dirtyFields=n.dirtyFields,l||=(d.dirtyFields||f.dirtyFields)&&u!==!t}if(o){let t=U(n.touchedFields,e);t||(K(n.touchedFields,e,o),m.touchedFields=n.touchedFields,l||=(d.touchedFields||f.touchedFields)&&t!==o)}l&&c&&p.state.next(m)}return l?m:{}},te=(e,r,i,a)=>{let o=U(n.errors,e),s=(d.isValid||f.isValid)&&W(r)&&n.isValid!==r;if(t.delayError&&i?(c=h(()=>b(e,i)),c(t.delayError)):(clearTimeout(l),c=null,i?K(n.errors,e,i):$(n.errors,e)),(i?!Z(o,i):o)||!Q(a)||s){let t={...a,...s&&W(r)?{isValid:r}:{},errors:n.errors,name:e};n={...n,...t},p.state.next(t)}},w=async e=>(_(e,!0),await t.resolver(a,t.context,or(e||s.mount,r,t.criteriaMode,t.shouldUseNativeValidation))),T=async e=>{let{errors:t}=await w(e);if(_(e),e)for(let r of e){let e=U(t,r);e?s.array.has(r)&&B(e)?br(n.errors,{[r]:e},r):K(n.errors,r,e):$(n.errors,r)}else n.errors=t;return t},E=async({name:t,eventType:r})=>{if(e.validate){let i=await e.validate({formValues:a,formState:n,name:t,eventType:r});if(B(i))for(let e in i){let t=i[e];t&&fe(`${xn}.${e}`,{message:X(t.message)?t.message:``,type:t.type||Y.validate})}else X(i)||!i?fe(xn,{message:i||``,type:Y.validate}):M(xn);return i}return!0},D=async({fields:r,onlyCheckValid:i,name:o,eventType:c,context:l={valid:!0,runRootValidation:!1}})=>{if(e.validate&&(l.runRootValidation=!0,!await E({name:o,eventType:c})&&(l.valid=!1,i)))return l.valid;for(let o in r){let u=r[o];if(u){let{_f:r,...p}=u;if(r){let o=s.array.has(r.name),c=u._f&&dr(u._f),p=d.validatingFields||d.isValidating||f.validatingFields||f.isValidating;c&&p&&_([r.name],!0);let h=await Cr(u,s.disabled,a,m,t.shouldUseNativeValidation&&!i,o);if(c&&p&&_([r.name]),h[r.name]&&(l.valid=!1,i)||(!i&&(U(h,r.name)?o?br(n.errors,h,r.name):K(n.errors,r.name,h[r.name]):$(n.errors,r.name)),e.shouldUseNativeValidation&&h[r.name]))break}!Q(p)&&await D({context:l,onlyCheckValid:i,fields:p,name:o,eventType:c})}}return l.valid},O=()=>{for(let e of s.unMount){let t=U(r,e);t&&(t._f.refs?t._f.refs.every(e=>!Gn(e)):!Gn(t._f.ref))&&he(e)}s.unMount=new Set},k=(e,n)=>!t.disabled&&(e&&n&&K(a,e,n),!Z(ue(),i)),A=(e,t,n)=>On(e,s,{...o.mount?a:H(t)?i:X(e)?{[e]:t}:t},n,t),ne=e=>yn(U(o.mount?a:i,e,t.shouldUnregister?U(i,e,[]):[])),j=(e,t,n={},i=!1)=>{let o=U(r,e),s=t;if(o){let n=o._f;n&&(!n.disabled&&K(a,e,nr(t,n)),s=Vn(n.ref)&&z(t)?``:t,Hn(n.ref)?[...n.ref.options].forEach(e=>e.selected=s.includes(e.value)):n.refs?fn(n.ref)?n.refs.forEach(e=>{(!e.defaultChecked||!e.disabled)&&(Array.isArray(s)?e.checked=!!s.find(t=>t===e.value):e.checked=s===e.value||!!s)}):n.refs.forEach(e=>e.checked=e.value===s):Bn(n.ref)?n.ref.value=``:(n.ref.value=s,n.ref.type||p.state.next({name:e,values:i?a:V(a)})))}(n.shouldDirty||n.shouldTouch)&&ee(e,s,n.shouldTouch,n.shouldDirty,!0),n.shouldValidate&&le(e)},re=(e,t,n,i=!1)=>{for(let a in t){if(!t.hasOwnProperty(a))return;let o=t[a],c=e+`.`+a,l=U(r,c);(s.array.has(e)||B(o)||l&&!l._f)&&!R(o)?re(c,o,n,i):j(c,o,n,i)}},ie=(e,t,i,c)=>{let l=U(r,e),u=s.array.has(e),m=c?t:V(t),h=Z(U(a,e),m);if(h||K(a,e,m),u)p.array.next({name:e,values:c?a:V(a)}),(d.isDirty||d.dirtyFields||f.isDirty||f.dirtyFields)&&i.shouldDirty&&(v(),p.state.next({name:e,dirtyFields:n.dirtyFields,isDirty:k(e,m)}));else{let t=Array.isArray(m)&&!m.length||Q(m);!l||l._f||z(m)||t?j(e,m,i,c):re(e,m,i,c)}if(!h){let t=pr(e,s),r=c?a:V(a);p.state.next({...t&&n,name:o.mount||t?e:void 0,values:r})}},ae=(e,t,n={})=>ie(e,t,n,!1),oe=(e,t={})=>{let r=G(e)?e(a):e;if(!Z(a,r)){a={...a,...r};for(let e of s.mount)ie(e,U(r,e),t,!0);p.state.next({...n,name:void 0,type:void 0,values:a}),t.shouldValidate&&g()}},se=async i=>{o.mount=!0;let l=i.target,u=l.name,h=!0,v=U(r,u),y=e=>{h=Number.isNaN(e)||R(e)&&isNaN(e.getTime())||Z(e,U(a,u,e))},b=lr(t.mode),x=lr(t.reValidateMode);if(v){let o,S,C=l.type?ar(v._f):mn(i),T=i.type===q.BLUR||i.type===q.FOCUS_OUT,O=!fr(v._f)&&!e.validate&&!t.resolver&&!U(n.errors,u)&&!v._f.deps||vr(T,U(n.touchedFields,u),n.isSubmitted,x,b),k=pr(u,s,T);K(a,u,C),T?(!l||!l.readOnly)&&(v._f.onBlur&&v._f.onBlur(i),c&&c(0)):v._f.onChange&&v._f.onChange(i);let A=ee(u,C,T),ne=!Q(A)||k;if(!T&&p.state.next({name:u,type:i.type,values:V(a)}),O)return(d.isValid||f.isValid)&&(t.mode===`onBlur`?T&&g():T||g()),ne&&p.state.next({name:u,...k?{}:A});if(!t.resolver&&e.validate&&await E({name:u,eventType:i.type}),!T&&k&&p.state.next({...n}),t.resolver){let{errors:e}=await w([u]);if(_([u]),y(C),h){let t=hr(n.errors,r,u),i=hr(e,r,t.name||u);o=i.error,u=i.name,S=Q(e)}}else _([u],!0),o=(await Cr(v,s.disabled,a,m,t.shouldUseNativeValidation))[u],_([u]),y(C),h&&(o?S=!1:(d.isValid||f.isValid)&&(S=await D({fields:r,onlyCheckValid:!0,name:u,eventType:i.type})));h&&(v._f.deps&&(!Array.isArray(v._f.deps)||v._f.deps.length>0)&&le(v._f.deps),te(u,S,o,A))}},ce=(e,t)=>{if(U(n.errors,t)&&e.focus)return e.focus(),1},le=async(e,i={})=>{let a,o,c=Ln(e);if(t.resolver){let t=await T(H(e)?e:c);a=Q(t),o=e?!c.some(e=>U(t,e)):a}else e?(o=(await Promise.all(c.map(async e=>{let t=U(r,e);return await D({fields:t&&t._f?{[e]:t}:t,eventType:q.TRIGGER})}))).every(Boolean),!(!o&&!n.isValid)&&g()):o=a=await D({fields:r,name:e,eventType:q.TRIGGER});return p.state.next({...!X(e)||(d.isValid||f.isValid)&&a!==n.isValid?{}:{name:e},...t.resolver||!e?{isValid:a}:{},errors:n.errors}),i.shouldFocus&&!o&&mr(r,ce,e?c:s.mount),o},ue=(e,t)=>{let r={...o.mount?a:i};return t&&(r=zn(t.dirtyFields?n.dirtyFields:n.touchedFields,r)),H(e)?r:X(e)?U(r,e):e.map(e=>U(r,e))},de=(e,t)=>({invalid:!!U((t||n).errors,e),isDirty:!!U((t||n).dirtyFields,e),error:U((t||n).errors,e),isValidating:!!U(n.validatingFields,e),isTouched:!!U((t||n).touchedFields,e)}),M=e=>{let t=e?Ln(e):void 0;t?.forEach(e=>$(n.errors,e)),t?t.forEach(e=>{p.state.next({name:e,errors:n.errors})}):p.state.next({errors:{}})},fe=(e,t,i)=>{let a=(U(r,e,{_f:{}})._f||{}).ref,{ref:o,message:s,type:c,...l}=U(n.errors,e)||{};K(n.errors,e,{...l,...t,ref:a}),p.state.next({name:e,errors:n.errors,isValid:!1}),i&&i.shouldFocus&&a&&a.focus&&a.focus()},N=(e,t)=>G(e)?p.state.subscribe({next:n=>`values`in n&&e(n.values||A(void 0,t),n)}):A(e,t,!0),pe=e=>p.state.subscribe({next:t=>{if(_r(e.name,t.name,e.exact)&&gr(t,e.formState||d,Ce,e.reRenderRoot)){let r={...a};e.callback({values:r,...n,...t,defaultValues:i})}}}).unsubscribe,me=e=>(o.mount=!0,f={...f,...e.formState},pe({...e,formState:{...u,...e.formState}})),he=(e,o={})=>{for(let c of e?Ln(e):s.mount)s.mount.delete(c),s.array.delete(c),o.keepValue||($(r,c),$(a,c)),!o.keepError&&$(n.errors,c),!o.keepDirty&&$(n.dirtyFields,c),!o.keepTouched&&$(n.touchedFields,c),!o.keepIsValidating&&$(n.validatingFields,c),!t.shouldUnregister&&!o.keepDefaultValue&&$(i,c);p.state.next({values:V(a)}),p.state.next({...n,...o.keepDirty?{isDirty:k()}:{}}),!o.keepIsValid&&g()},ge=({disabled:e,name:t})=>{if(W(e)&&o.mount||e||s.disabled.has(t)){let n=s.disabled.has(t)!==!!e;e?s.disabled.add(t):s.disabled.delete(t),n&&o.mount&&!o.action&&g()}},_e=(e,n={})=>{let a=U(r,e),c=W(n.disabled)||W(t.disabled),l=!s.registerName.has(e)&&a&&a._f&&!a._f.mount;return K(r,e,{...a||{},_f:{...a&&a._f?a._f:{ref:{name:e}},name:e,mount:!0,...n}}),s.mount.add(e),a&&!l?ge({disabled:W(n.disabled)?n.disabled:t.disabled,name:e}):C(e,!0,n.value),{...c?{disabled:n.disabled||t.disabled}:{},...t.progressive?{required:!!n.required,min:cr(n.min),max:cr(n.max),minLength:cr(n.minLength),maxLength:cr(n.maxLength),pattern:cr(n.pattern)}:{},name:e,onChange:se,onBlur:se,ref:c=>{if(c){s.registerName.add(e),_e(e,n),s.registerName.delete(e),a=U(r,e);let t=H(c.value)&&c.querySelectorAll&&c.querySelectorAll(`input,select,textarea`)[0]||c,o=Wn(t),l=a._f.refs||[];if(o?l.find(e=>e===t):t===a._f.ref)return;K(r,e,{_f:{...a._f,...o?{refs:[...l.filter(Gn),t,...Array.isArray(U(i,e))?[{}]:[]],ref:{type:t.type,name:e}}:{ref:t}}}),C(e,!1,void 0,t)}else a=U(r,e,{}),a._f&&(a._f.mount=!1),(t.shouldUnregister||n.shouldUnregister)&&!(hn(s.array,e)&&o.action)&&s.unMount.add(e)}}},P=()=>t.shouldFocusError&&!t.shouldUseNativeValidation&&mr(r,ce,s.mount),ve=e=>{W(e)&&(p.state.next({disabled:e}),mr(r,(t,n)=>{let i=U(r,n);i&&(t.disabled=i._f.disabled||e,Array.isArray(i._f.refs)&&i._f.refs.forEach(t=>{t.disabled=i._f.disabled||e}))},0,!1))},ye=(e,i)=>async o=>{let c;o&&(o.preventDefault&&o.preventDefault(),o.persist&&o.persist());let l=V(a);if(p.state.next({isSubmitting:!0}),t.resolver){let{errors:e,values:t}=await w();_(),n.errors=e,l=V(t)}else await D({fields:r,eventType:q.SUBMIT});if(s.disabled.size)for(let e of s.disabled)$(l,e);if($(n.errors,Sn),Q(n.errors)){p.state.next({errors:{}});try{await e(l,o)}catch(e){c=e}}else i&&await i({...n.errors},o),P(),setTimeout(P);if(p.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:Q(n.errors)&&!c,submitCount:n.submitCount+1,errors:n.errors}),c)throw c},be=(e,t={})=>{U(r,e)&&(H(t.defaultValue)?ae(e,V(U(i,e))):(ae(e,t.defaultValue),K(i,e,V(t.defaultValue))),t.keepTouched||$(n.touchedFields,e),t.keepDirty||($(n.dirtyFields,e),n.isDirty=t.defaultValue?k(e,V(U(i,e))):k()),t.keepError||($(n.errors,e),d.isValid&&g()),p.state.next({...n}))},F=(e,c={})=>{let l=e?V(e):i,u=V(l),f=Q(e),m=f?i:u;if(c.keepDefaultValues||(i=l),!c.keepValues){if(c.keepDirtyValues){let e=new Set([...s.mount,...Object.keys(Qn(i,a))]);for(let t of Array.from(e)){let e=U(n.dirtyFields,t),r=U(a,t),i=U(m,t);e&&!H(r)?K(m,t,r):!e&&!H(i)&&ae(t,i)}}else{if(_n&&H(e))for(let e of s.mount){let t=U(r,e);if(t&&t._f){let e=Array.isArray(t._f.refs)?t._f.refs[0]:t._f.ref;if(Vn(e)){let t=e.closest(`form`);if(t){t.reset();break}}}}if(c.keepFieldsRef)for(let e of s.mount)ae(e,U(m,e));else r={}}a=t.shouldUnregister?c.keepDefaultValues?V(i):{}:V(m),p.array.next({values:{...m}}),p.state.next({values:{...m}})}s={mount:c.keepDirtyValues?s.mount:new Set,unMount:new Set,array:new Set,registerName:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:``},o.mount=!d.isValid||!!c.keepIsValid||!!c.keepDirtyValues||!t.shouldUnregister&&!Q(m),o.watch=!!t.shouldUnregister,o.keepIsValid=!!c.keepIsValid,o.action=!1,c.keepErrors||(n.errors={}),p.state.next({submitCount:c.keepSubmitCount?n.submitCount:0,isDirty:f?!1:c.keepDirty?n.isDirty:!!(c.keepDefaultValues&&!Z(e,i)),isSubmitted:c.keepIsSubmitted?n.isSubmitted:!1,dirtyFields:f?{}:c.keepDirtyValues?c.keepDefaultValues&&a?Qn(i,a):n.dirtyFields:c.keepDefaultValues&&e?Qn(i,e):c.keepDirty?n.dirtyFields:{},touchedFields:c.keepTouched?n.touchedFields:{},errors:c.keepErrors?n.errors:{},isSubmitSuccessful:c.keepIsSubmitSuccessful?n.isSubmitSuccessful:!1,isSubmitting:!1,defaultValues:i})},xe=(e,n)=>F(G(e)?e(a):e,{...t.resetOptions,...n}),Se=(e,t={})=>{let n=U(r,e),i=n&&n._f;if(i){let e=i.refs?i.refs[0]:i.ref;e.focus&&setTimeout(()=>{e.focus(),t.shouldSelect&&G(e.select)&&e.select()})}},Ce=e=>{n={...n,...e}},we={control:{register:_e,unregister:he,getFieldState:de,handleSubmit:ye,setError:fe,_subscribe:pe,_runSchema:w,_updateIsValidating:_,_focusError:P,_getWatch:A,_getDirty:k,_setValid:g,_setFieldArray:y,_setDisabledField:ge,_setErrors:x,_getFieldArray:ne,_reset:F,_resetDefaultValues:()=>G(t.defaultValues)&&t.defaultValues().then(e=>{xe(e,t.resetOptions),p.state.next({isLoading:!1})}),_removeUnmounted:O,_disableForm:ve,_subjects:p,_proxyFormState:d,get _fields(){return r},get _formValues(){return a},get _state(){return o},set _state(e){o=e},get _defaultValues(){return i},get _names(){return s},set _names(e){s=e},get _formState(){return n},get _options(){return t},set _options(e){t={...t,...e}}},subscribe:me,trigger:le,register:_e,handleSubmit:ye,watch:N,setValue:ae,setValues:oe,getValues:ue,reset:xe,resetField:be,clearErrors:M,unregister:he,setError:fe,setFocus:Se,getFieldState:de};return{...we,formControl:we}}function Dr(e={}){let t=I.useRef(void 0),n=I.useRef(void 0),[r,i]=I.useState(()=>({...V(Tr),isLoading:G(e.defaultValues),errors:e.errors||{},disabled:e.disabled||!1,defaultValues:G(e.defaultValues)?void 0:e.defaultValues}));if(!t.current)if(e.formControl)t.current={...e.formControl,formState:r},e.defaultValues&&!G(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{let{formControl:n,...i}=Er(e);t.current={...i,formState:r}}let a=t.current.control;return a._options=e,En(()=>{let e=a._subscribe({formState:a._proxyFormState,callback:()=>i({...a._formState,defaultValues:a._defaultValues}),reRenderRoot:!0});return i(e=>({...e,isReady:!0})),a._formState.isReady=!0,e},[a]),I.useEffect(()=>a._disableForm(e.disabled),[a,e.disabled]),I.useEffect(()=>{e.mode&&(a._options.mode=e.mode),e.reValidateMode&&(a._options.reValidateMode=e.reValidateMode)},[a,e.mode,e.reValidateMode]),I.useEffect(()=>{e.errors&&(a._setErrors(e.errors),a._focusError())},[a,e.errors]),I.useEffect(()=>{e.shouldUnregister&&a._subjects.state.next({values:a._getWatch()})},[a,e.shouldUnregister]),I.useEffect(()=>{if(a._proxyFormState.isDirty){let e=a._getDirty();e!==r.isDirty&&a._subjects.state.next({isDirty:e})}},[a,r.isDirty]),I.useEffect(()=>{e.values&&!Z(e.values,n.current)?(a._reset(e.values,{keepFieldsRef:!0,...a._options.resetOptions}),a._options.resetOptions?.keepIsValid||a._setValid(),n.current=e.values,i(e=>({...e}))):a._resetDefaultValues()},[a,e.values]),I.useEffect(()=>{a._state.mount||(a._setValid(),a._state.mount=!0),a._state.watch&&(a._state.watch=!1,a._subjects.state.next({...a._formState})),a._removeUnmounted()}),t.current.formState=I.useMemo(()=>Tn(r,a),[a,r]),t.current}var Or={en:{common:{loading:`Loading...`,save:`Save`,cancel:`Cancel`,delete:`Delete`,edit:`Edit`,create:`Create`,search:`Search`,filter:`Filter`,reset:`Reset`,confirm:`Confirm`,close:`Close`,back:`Back`,next:`Next`,previous:`Previous`,submit:`Submit`,refresh:`Refresh`,export:`Export`,import:`Import`,yes:`Yes`,no:`No`,ok:`OK`,actions:`Actions`,more:`More`,selectAll:`Select All`,clearAll:`Clear All`,addToFavorites:`Add to favorites`,removeFromFavorites:`Remove from favorites`,noData:`No data`,noResults:`No results found`,required:`Required`,optional:`Optional`,selectOption:`Select an option`,select:`Select...`,openChat:`Open chat`,closeChat:`Close chat`,toggleSidebar:`Toggle sidebar`},validation:{required:`{{field}} is required`,minLength:`{{field}} must be at least {{min}} characters`,maxLength:`{{field}} must be at most {{max}} characters`,min:`{{field}} must be at least {{min}}`,max:`{{field}} must be at most {{max}}`,email:`Please enter a valid email address`,url:`Please enter a valid URL`,pattern:`{{field}} format is invalid`,unique:`{{field}} must be unique`,type:`{{field}} must be a valid {{type}}`},form:{addItem:`Add item`,removeItem:`Remove item`,fieldRequired:`This field is required`,invalidFormat:`Invalid format`,saveSuccess:`Saved successfully`,saveError:`Failed to save`,unsavedChanges:`You have unsaved changes. Are you sure you want to leave?`,stepOf:`Step {{current}} of {{total}}`,createTitle:`Create {{object}}`,editTitle:`Edit {{object}}`,createDescription:`Add a new {{object}} to your database.`,editDescription:`Update details for {{object}}`,saveRecord:`Save`,create:`Create`,update:`Update`,createSuccess:`{{object}} created successfully`,updateSuccess:`{{object}} updated successfully`,deleteSuccess:`{{object}} deleted successfully`},fields:{richText:{format:`Format: {{format}}`,basicEditorHint:`Rich text editor (basic)`,placeholder:`Enter text...`}},table:{rowsPerPage:`Rows per page`,showing:`Showing {{from}} to {{to}} of {{total}}`,noRows:`No rows to display`,sortAsc:`Sort ascending`,sortDesc:`Sort descending`,filterColumn:`Filter {{column}}`,columns:`Columns`,exportCSV:`Export CSV`,exportExcel:`Export Excel`,selectRow:`Select row`,selectAllRows:`Select all rows`,expandRow:`Expand row`,collapseRow:`Collapse row`,hideColumn:`Hide column`,freezeColumn:`Freeze column`,unfreezeColumn:`Unfreeze column`,pageInfo:`Page {{current}} of {{total}}`,totalRecords:`{{count}} total`,noResults:`No results found`,noResultsHint:`Try adjusting your filters or search query.`,cancelAll:`Cancel All`,saveAll:`Save All ({{count}})`,addRecord:`Add record`,open:`Open`,search:`Search...`,modified:`{{count}} row modified`,selected:`{{count}} selected`,edit:`Edit`,delete:`Delete`},grid:{actions:`Actions`,edit:`Edit`,delete:`Delete`,export:`Export`,exportAs:`Export as {{format}}`,loading:`Loading grid...`,errorLoading:`Error loading grid`,pullToRefresh:`Pull to refresh`,refreshing:`Refreshing…`,openRecord:`Open record`,openMenu:`Open menu`,rowHeight:`Row height: {{mode}}`,empty:`Empty`,yes:`Yes`,no:`No`,systemFields:`System`,toolbar:{densityMode:`Density`,densityCompact:`Compact`,densityComfortable:`Comfortable`,densitySpacious:`Spacious`,densityCycleHint:`{{label}} (click to cycle)`,densityCycleShortHint:`Click to cycle`},import:{title:`Import {{object}}`,stepUpload:`Upload`,stepMapping:`Mapping`,stepPreview:`Preview`,uploadDescription:`Upload a CSV file to get started.`,mappingDescription:`Map CSV columns to object fields.`,previewDescription:`Review data before importing.`,dragDrop:`Drag & drop a CSV file here, or click to browse`,browseFiles:`Browse Files`,onlyCsv:`Only CSV files are supported.`,fileNeedsHeader:`File must contain a header row and at least one data row.`,mappingTemplate:`Mapping template:`,chooseTemplate:`Choose template…`,noSavedTemplates:`No saved templates`,noneOption:`— None —`,saveCurrent:`Save current`,templateName:`Template name`,save:`Save`,deleteTemplate:`Delete template`,csvColumn:`CSV Column`,mapsTo:`Maps To`,status:`Status`,skipColumn:`Skip column`,skip:`— Skip —`,mapped:`Mapped`,skipped:`Skipped`,rowsWithErrors:`{{count}} row(s) with errors`,rowsCorrected:`{{count}} row(s) corrected`,clickToFix:`— click a highlighted cell to fix it inline.`,showingRows:`Showing {{shown}} of {{total}} rows`,importing:`Importing… {{progress}}%`,importComplete:`Import Complete`,imported:`{{count}} imported`,skippedCount:`{{count}} skipped`,moreErrors:`…and {{count}} more errors`,cancel:`Cancel`,back:`Back`,next:`Next`,close:`Close`,importNRows:`Import {{count}} Rows`,importingProgress:`Importing…`,requiredMark:`*`,required:`Required`,invalidType:`Invalid {{type}}`}},calendar:{today:`Today`,month:`Month`,week:`Week`,day:`Day`,agenda:`Agenda`,allDay:`All Day`,noEvents:`No events`,newEvent:`New event`,moreEvents:`+{{count}} more`},list:{recordCount:`{{count}} records`,recordCountOne:`{{count}} record`,addRecord:`Add record`,tabs:`Tabs`,allRecords:`All Records`,search:`Search`,filter:`Filter`,filterRecords:`Filter Records`,sort:`Sort`,sortRecords:`Sort Records`,group:`Group`,groupBy:`Group By`,export:`Export`,exportAs:`Export as {{format}}`,color:`Color`,rowColor:`Row Color`,colorByField:`Color by field`,clear:`Clear`,none:`None`,hideFields:`Hide fields`,noItems:`No items found`,noItemsMessage:`There are no records to display. Try adjusting your filters or adding new data.`,showAll:`Show all`,pullToRefresh:`Pull to refresh`,refreshing:`Refreshing…`,share:`Share`,print:`Print`,hideFieldsTitle:`Hide Fields`,dataLimitReached:`Showing first {{limit}} records. More data may be available.`,viewSettings:`View settings`,viewSettingsHint:`Grouping, color, density, and visible fields.`,addGroup:`Add group field`,collapsedByDefault:`Collapsed by default`,removeGroup:`Remove`},kanban:{addCard:`Add card`,addColumn:`Add column`,moveCard:`Move card`,deleteCard:`Delete card`,deleteColumn:`Delete column`,noCards:`No cards`,cardTitlePlaceholder:`Enter card title...`},timeline:{bucket:{overdue:`Overdue`,today:`Today`,tomorrow:`Tomorrow`,thisWeek:`This week`,nextWeek:`Next week`,later:`Later`,noDate:`No date`,unassigned:`Unassigned`}},gantt:{column:{taskName:`Task Name`,start:`Start`,end:`End`},toolbar:{prevPeriod:`Previous period`,nextPeriod:`Next period`,zoomIn:`Zoom in`,zoomOut:`Zoom out`,jumpToToday:`Jump to today`,today:`Today`,showTaskList:`Show task list`,hideTaskList:`Hide task list`}},view:{rename:`Rename`,duplicateView:`Duplicate View`,shareView:`Share View`,setAsDefault:`Set as Default`,pinView:`Pin View`,unpinView:`Unpin View`,changeViewType:`Change View Type`,deleteView:`Delete View`,addView:`Add View`,unsavedChanges:`Unsaved changes`,saveAsView:`Save as View`,moreViews:`{{count}} more`,activeFilters:`Active filters`,activeSort:`Active sort`,manageViews:`Manage views`,manageAllViews:`Manage all views…`,searchViews:`Search views`,addNewView:`Add new view`,done:`Done`,noViewsFound:`No views match your search.`,dragToReorder:`Drag to reorder`,defaultView:`Default view`,tabActionsFor:`View actions for {{name}}`,readonlyAriaLabel:`Read-only view`,readonlyTooltip:`System view — duplicate to customize.`},detail:{back:`Back`,edit:`Edit`,editInline:`Edit`,save:`Save`,saveChanges:`Save changes`,saving:`Saving…`,editFieldsInline:`Edit fields`,lockedByApproval:`Locked for approval`,lockedTooltip:`This record has a pending approval request; editing is locked`,cancelApproval:`Recall approval`,cancelApprovalInFlight:`Recalling…`,cancelApprovalTooltip:`Recall the pending approval request to unlock this record`,cancelApprovalFailed:`Failed to recall approval`,cancelApprovalUnavailable:`Recalling approvals is not supported on this data source`,linkCopied:`Link copied to clipboard`,linkCopyFailed:`Failed to copy link`,cancel:`Cancel`,cancelEdit:`Discard changes`,sectionMoreDetails:`More details`,concurrentUpdateTitle:`This record was modified by someone else`,concurrentUpdateDescription:`Another user saved a newer version of {{field}} while you were editing. To prevent silently overwriting their change, please choose how to resolve the conflict.`,concurrentUpdateYourEdit:`Your edit`,concurrentUpdateCurrentValue:`Current value`,concurrentUpdateUpdatedBy:`Updated by {{name}}`,concurrentUpdateUpdatedAt:`Updated at {{when}}`,concurrentUpdateReload:`Reload latest`,concurrentUpdateOverwrite:`Overwrite anyway`,concurrentUpdateCancel:`Cancel`,openInNewTab:`Open in new tab`,share:`Share`,duplicate:`Duplicate`,export:`Export`,viewHistory:`View history`,delete:`Delete`,moreActions:`More actions`,addToFavorites:`Add to favorites`,removeFromFavorites:`Remove from favorites`,previousRecord:`Previous record`,nextRecord:`Next record`,recordOf:`{{current}} of {{total}}`,recordNotFound:`Record not found`,recordNotFoundDescription:`The record you are looking for does not exist or may have been deleted.`,goBack:`Go back`,details:`Details`,related:`Related`,relatedRecords:`{{count}} records`,relatedRecordOne:`{{count}} record`,noRelatedRecords:`No related records found`,loading:`Loading...`,copyToClipboard:`Copy to clipboard`,copied:`Copied!`,deleteConfirmation:`Are you sure you want to delete this record?`,editRecord:`Edit record`,viewAll:`View All`,new:`New`,emptyValue:`—`,activity:`Activity`,history:`History`,editRow:`Edit`,deleteRow:`Delete`,deleteRowConfirmation:`Are you sure you want to delete this record?`,deleteRowTitle:`Delete record`,actions:`Actions`,previousPage:`Previous`,nextPage:`Next`,pageOf:`Page {{current}} of {{total}}`,sortBy:`Sort by`,filterPlaceholder:`Filter...`,highlightFields:`Key Fields`,comments:`Comments`,searchComments:`Search comments…`,addCommentPlaceholder:`Add a comment… (Ctrl+Enter to submit)`,noMatchingComments:`No matching comments`,noCommentsYet:`No comments yet`,pinned:`Pinned`,pin:`Pin`,unpin:`Unpin`,justNow:`just now`,minutesAgo:`{{count}}m ago`,hoursAgo:`{{count}}h ago`,daysAgo:`{{count}}d ago`,createdBy:`Created by`,updatedBy:`Updated by`,dropFilesToUpload:`Drop files here or click to upload`,attachmentCount:`{{count}} attachment`,attachmentCountPlural:`{{count}} attachments`,removeAttachment:`Remove attachment`,unifiedDiff:`Unified diff`,sideBySideDiff:`Side-by-side diff`,noChanges:`No changes`,previousVersion:`Previous`,currentVersion:`Current`,discussion:`Discussion`,showDiscussion:`Show Discussion ({{count}})`,hideDiscussion:`Hide discussion`,bold:`Bold (Ctrl+B)`,italic:`Italic (Ctrl+I)`,listFormat:`List`,inlineCode:`Inline code`,mentionSomeone:`Mention someone`,preview:`Preview`,submitComment:`Submit (Ctrl+Enter)`,sendComment:`Send`,writeComment:`Write a comment…`,subscribedTooltip:`Subscribed — click to unsubscribe`,unsubscribedTooltip:`Subscribe to notifications`,firstRecord:`First record (Home)`,previousRecordKey:`Previous record (←)`,nextRecordKey:`Next record (→)`,lastRecord:`Last record (End)`,noRecords:`No records`,showEmptyRelated_one:`+ {{count}} empty`,showEmptyRelated_other:`+ {{count}} empty`,searchWhileNavigating:`Search while navigating`,searchRecords:`Search records…`,allActivity:`All Activity`,commentsOnly:`Comments Only`,fieldChangesFilter:`Field Changes`,tasksOnly:`Tasks Only`,leaveCommentPlaceholder:`Leave a comment… (Ctrl+Enter to submit)`,noActivity:`No activity recorded`,loadMore:`Load more`,edited:`(edited)`,via:`via {{source}}`,replyCount:`{{count}} reply`,replyCountPlural:`{{count}} replies`,replyPlaceholder:`Reply…`,filterActivity:`Filter activity`,openDiscussion:`Open discussion panel`,closeDiscussion:`Close discussion panel`,subscribeAriaLabel:`Subscribe to notifications`,unsubscribeAriaLabel:`Unsubscribe from notifications`,clearSearch:`Clear search`,copyEmail:`Copy email`,copyPhone:`Copy phone number`,copyRecordId:`Copy record ID`,showEmptyFields:`Show {{count}} empty fields`,hideEmptyFields:`Hide empty fields`,noValue:`No value`},chart:{noData:`No chart data available`,loading:`Loading chart...`},report:{rowTotal:`Row Total`,columnTotal:`Column Total`,grandTotal:`Grand Total`,totals:`Totals`,rowsLabel:`Row`,columnsLabel:`Column`,allLabel:`(All)`,emptyLabel:`(Empty)`,loading:`Loading…`,failedToLoad:`Failed to load matrix: {{message}}`,needsAcross:"Matrix report requires at least one `groupingsAcross` field.",aggregate:{count:`Count`,countDistinct:`Distinct Count`,sum:`Sum`,avg:`Average`,min:`Min`,max:`Max`,first:`First`},editor:{breadcrumb:`Configuration`,basic:`Basic`,title:`Title`,titlePlaceholder:`e.g. Pipeline by Quarter`,description:`Description`,descriptionPlaceholder:`What does this report show?`,type:`Report type`,typeTabular:`Tabular — flat list`,typeSummary:`Summary — grouped with totals`,typeMatrix:`Matrix — pivot rows × columns`,typeJoined:`Joined — multiple blocks`,typeHelp:`Pick the layout that matches what you want to see.`,data:`Data`,objectName:`Data source`,objectNamePlaceholder:`e.g. opportunity`,objectNameHelp:`Which object should this report query?`,limit:`Row limit`,limitPlaceholder:`e.g. 100`,columns:`Columns`,columnsHint:`Pick which fields appear as columns. Add an aggregate (Sum, Count…) on Summary or Matrix reports.`,filters:`Filters`,filtersHint:`Limit the rows that go into this report.`,filtersComplex:`This report uses an advanced filter that cannot be edited here. Save will keep it unchanged.`,groupBy:`Group by`,groupByHint:`Group the data and compute subtotals.`,rows:`Rows`,rowsHint:`Group rows by these fields.`,columnsAxis:`Columns`,columnsAxisHint:`Pivot these fields across the top.`,values:`Values`,valuesHint:`Numbers shown in each cell. Pick one or more fields and add an aggregate (Sum, Count…).`,grouping:`Grouping`,addGrouping:`Add grouping`,dateGranularity:`Date bucket`,dateGranularityNone:`(use raw value)`,day:`Day`,week:`Week`,month:`Month`,quarter:`Quarter`,year:`Year`,sortAsc:`Ascending`,sortDesc:`Descending`,chart:`Chart`,chartHint:`Optional visualization rendered alongside the table.`,chartType:`Chart type`,chartTitle:`Chart title`,chartTitlePlaceholder:`Defaults to the report title`,chartXAxis:`X-axis (category)`,chartYAxis:`Y-axis (value)`,chartShowLegend:`Show legend`,chartShowDataLabels:`Show data labels`,chartNone:`(no chart)`,chartBar:`Bar`,chartLine:`Line`,chartArea:`Area`,chartPie:`Pie`,chartDonut:`Donut`,chartFunnel:`Funnel`,validationNeedsObject:`Pick a data source before adding columns.`,validationMatrixNeedsRowsCols:`Matrix reports need at least one Row and one Column.`,validationSummaryNeedsRows:`Summary reports need at least one grouping field.`,blocks:`Blocks`,blocksHint:`Each block is its own table or chart. Block-level filters are ANDed with the report filter.`,addBlock:`Add block`,removeBlock:`Remove block`,blockName:`Block name`,blockNamePlaceholder:`unique_block_name`,blockLabel:`Display label`,blockLabelPlaceholder:`Shown above the block`,blockDescription:`Description`,blockDescriptionPlaceholder:`Optional context for this block`,validationJoinedNeedsBlocks:`Joined reports need at least one block.`,validationBlockNameRequired:`Every block needs a non-empty name.`,validationBlockNameDuplicate:`Block names must be unique within the report.`,validationBlockNeedsColumns:`Every block needs at least one column.`,noneOption:`(none)`,addCondition:`Add condition`,combineLogic:`Combine with`,opContains:`contains`,opIsEmpty:`is empty`,opIsNotEmpty:`is not empty`,formatAuto:`Auto`,formatCurrency:`Currency`,formatPercent:`Percent`,formatInteger:`Integer`,formatDate:`Date`,formatDatetime:`Date & time`,columnLabelPlaceholder:`Label override`,aggregateColumn:`Aggregate`,formatColumn:`Format`,addColumns:`Add fields`,searchFields:`Search fields…`,noMatchingFields:`No fields match your search.`,noFieldsAvailable:`No fields available.`,columnsCount:`{n} column(s) selected`,columnsEmpty:`No columns selected yet.`,fieldPickerTitle:`Select fields`,fieldPickerDescription:`Pick one or more fields to add. Use the search box to narrow the list.`,fieldPickerChangeTitle:`Change field`,fieldPickerAddGroupingTitle:`Add grouping`,fieldPickerEmpty:`(pick field)`,fieldPickerSelected:`{n} selected`,fieldPickerClear:`Clear selection`,fieldPickerAdd:`Add`,fieldPickerAddN:`Add {n}`}},map:{searchLocations:`Search locations…`,locationDetails:`Location Details`,markersCount:`{{count}} markers`,invalidCoordinates:`{{count}} record with missing or invalid coordinates excluded from the map.`,invalidCoordinatesPlural:`{{count}} records with missing or invalid coordinates excluded from the map.`},workflow:{draft:`Draft`,active:`Active`,paused:`Paused`,completed:`Completed`,cancelled:`Cancelled`,save:`Save`,publish:`Publish`,addNode:`Add Node`,workflowFlow:`Workflow Flow`,properties:`Properties`,connections:`Connections`,quickConnect:`Quick Connect`,fromPlaceholder:`From...`,toPlaceholder:`To...`,connect:`Connect`,label:`Label`,type:`Type`,description:`Description`,assignee:`Assignee`,assigneeType:`Assignee Type`,user:`User`,role:`Role`,group:`Group`,expression:`Expression`,timeoutMinutes:`Timeout (minutes)`,selectNodeToEdit:`Select a node to edit its properties`,workflowTitle:`Workflow Title`,newWorkflow:`New Workflow`,outConnections:`{{count}} out`,start:`Start`,end:`End`,task:`Task`,userTask:`User Task`,serviceTask:`Service Task`,scriptTask:`Script Task`,approval:`Approval`,condition:`Condition`,parallelGateway:`Parallel Gateway`,joinGateway:`Join Gateway`,boundaryEvent:`Boundary Event`,delay:`Delay`,notification:`Notification`,webhook:`Webhook`,allowConcurrency:`Allow (run concurrently)`,forbidConcurrency:`Forbid (skip new)`,replaceConcurrency:`Replace (cancel existing)`,queueConcurrency:`Queue (run after current)`,conditionEvent:`Condition`,manualEvent:`Manual`,webhookEvent:`Webhook`,timerEvent:`Timer`,signalEvent:`Signal`,versionHistory:`Version History`,importBpmn:`Import BPMN`,exportBpmn:`Export BPMN`,undo:`Undo`,redo:`Redo`,resetZoom:`Reset zoom`},dashboard:{addWidget:`Add widget`,removeWidget:`Remove widget`,editLayout:`Edit layout`,saveLayout:`Save layout`,resetLayout:`Reset layout`,total:`Total`,noDataAvailable:`No data available`,noDataSourceFor:`No data source available for`,trend:{vsLastQuarter:`vs last quarter`,vsLastMonth:`vs last month`,vsLastWeek:`vs last week`,vsLastYear:`vs last year`,vsYesterday:`vs yesterday`,vsPreviousPeriod:`vs previous period`}},configPanel:{save:`Save`,discard:`Discard`,close:`Close`,layout:`Layout`,columns:`Columns`,gap:`Gap`,rowHeight:`Row height`,data:`Data`,refreshInterval:`Refresh interval`,appearance:`Appearance`,title:`Title`,showDescription:`Show description`,theme:`Theme`,configuration:`Configuration`,general:`General`,advanced:`Advanced`},appDesigner:{createApp:`Create Application`,editApp:`Edit Application`,basicInfo:`Basic Info`,objects:`Objects`,navigation:`Navigation`,branding:`Branding`,appName:`App Name`,appTitle:`Title`,appDescription:`Description`,appIcon:`Icon`,template:`Template`,layout:`Layout`,layoutSidebar:`Sidebar`,layoutHeader:`Header`,layoutEmpty:`Empty`,selectObjects:`Select Objects`,searchObjects:`Search objects…`,selectAll:`Select All`,deselectAll:`Deselect All`,navBuilder:`Navigation Builder`,addGroup:`Add Group`,addUrl:`Add URL`,addSeparator:`Add Separator`,noNavItems:`No navigation items yet.`,logoUrl:`Logo URL`,primaryColor:`Primary Color`,faviconUrl:`Favicon URL`,preview:`Preview`,complete:`Complete`,snakeCaseHint:`Must be snake_case (e.g. my_app)`,modeEdit:`Edit`,modePreview:`Preview`,modeCode:`Code`,addWidget:`Add Widget`,widgetProperties:`Widget Properties`,dataSource:`Data Source`,valueField:`Value Field`,aggregate:`Aggregate`,colorVariant:`Color Variant`,addComponent:`Add Component`,componentProperties:`Component Properties`,viewType:`View Type`,fields:`Fields`,toolbar:`Toolbar`,showSearch:`Show Search`,showFilters:`Show Filters`,showSort:`Show Sort`,appearance:`Appearance`,rowHeight:`Row Height`,stripedRows:`Striped Rows`,bordered:`Bordered`,livePreview:`Live Preview`,stepBasicDesc:`Name, title, and layout`,stepObjectsDesc:`Select business objects`,stepNavigationDesc:`Build navigation tree`,stepBrandingDesc:`Logo, colors, and favicon`,noObjectsFound:`No objects found.`,noNavItemsHint:`No navigation items yet. Select objects in the previous step or add items manually.`,separator:`Separator`,separatorLabel:`— Separator —`,newGroup:`New Group`,newLink:`New Link`,saveDraft:`Save Draft`,cancelConfirmTitle:`Discard changes?`,cancelConfirmMessage:`You have unsaved changes. Are you sure you want to cancel?`,confirmDiscard:`Discard`,keepEditing:`Keep Editing`,navNoItems:`No navigation items. Click buttons above to add items.`,navNoPreviewItems:`No items`,navLivePreview:`Live Preview`,navCollapseGroup:`Collapse group`,navExpandGroup:`Expand group`,navAddChild:`Add child`,navMoveUp:`Move up`,navMoveDown:`Move down`,navRemove:`Remove`,navObjectPage:`Object Page`,navDashboard:`Dashboard`,navPage:`Page`,navReport:`Report`,navGroup:`Group`,navUrl:`URL`,navSeparator:`Separator`,navTypeObject:`Object`,navTypeDashboard:`Dashboard`,navTypePage:`Page`,navTypeReport:`Report`,navTypeUrl:`URL`,navTypeGroup:`Group`,navTypeSeparator:`Separator`,navTypeAction:`Action`,navEditIcon:`Edit icon`,navToggleVisible:`Toggle visibility`,navHidden:`Hidden`,navExportSchema:`Export JSON`,navImportSchema:`Import JSON`,navExportSuccess:`Navigation schema exported`,navImportSuccess:`Navigation schema imported`,navImportError:`Invalid navigation JSON`,navIconPlaceholder:`Icon name (e.g. Users)`,dashboardEditor:`Dashboard Editor`,noWidgets:`No widgets. Click a button above to add one.`,widgetLayoutSize:`Layout Size`,widgetWidth:`Width`,widgetHeight:`Height`,dashboardPreview:`Dashboard Preview`,noWidgetsPreview:`No widgets to preview`,pageCanvasEditor:`Page Canvas Editor`,emptyPage:`Empty page. Click a button above to add a component.`,pagePreview:`Page Preview`,noComponentsPreview:`No components to preview`,modePage:`Page`,modeDashboard:`Dashboard`,undo:`Undo`,redo:`Redo`,brandingEditor:`Branding Editor`,brandingExport:`Export JSON`,brandingImport:`Import JSON`,brandingPreview:`Preview`,brandingSampleButton:`Sample Button`,brandingSampleText:`This is how your brand theme will look.`,colorPalette:`Color Palette`,fontFamily:`Font Family`,fontDefault:`Default (System)`,modeLight:`Light`,modeDark:`Dark`,mobilePreview:`Mobile Preview`,objectManager:{title:`Object Manager`,addObject:`New Object`,searchPlaceholder:`Search objects…`,noObjects:`No objects found.`,objectName:`API Name`,objectLabel:`Label`,pluralLabel:`Plural Label`,icon:`Icon`,selectIcon:`Select icon…`,group:`Group`,noGroup:`No Group`,sortOrder:`Sort Order`,enabled:`Enabled`,relationships:`Relationships`,systemBadge:`System`,fieldCount:`{{count}} fields`,ungrouped:`Ungrouped`,deleteConfirmTitle:`Delete Object?`,deleteConfirmMessage:`This will permanently delete the object and all its fields. This action cannot be undone.`},fieldDesigner:{title:`Field Designer`,addField:`New Field`,searchPlaceholder:`Search fields…`,allTypes:`All Types`,noFields:`No fields found.`,fieldName:`API Name`,fieldLabel:`Label`,fieldType:`Type`,fieldGroup:`Group`,description:`Description`,required:`Required`,unique:`Unique`,readOnly:`Read Only`,hidden:`Hidden`,indexed:`Indexed`,externalId:`External ID`,trackHistory:`Track History`,defaultValue:`Default Value`,placeholder:`Placeholder`,referenceTo:`Reference To`,formula:`Formula`,options:`Options`,addOption:`Add Option`,validationRules:`Validation Rules`,addRule:`Add Rule`,systemBadge:`System`,ungrouped:`General`,deleteConfirmTitle:`Delete Field?`,deleteConfirmMessage:`This will permanently delete the field. Existing data in this field will be lost.`,basicSection:`Basic`,typeSpecificSection:`Type Settings`,advancedSection:`Advanced`,typeCategory:{text:`Text`,number:`Number`,date:`Date & Time`,choice:`Choice`,relation:`Relation`,advanced:`Advanced`}}},console:{title:`ObjectOS`,initializing:`Initializing application...`,search:`Search…`,breadcrumb:{dashboards:`Dashboards`,pages:`Pages`,reports:`Reports`,system:`System`},nav:{pinItem:`Pin {{name}}`,unpinItem:`Unpin {{name}}`,dragToReorder:`Drag to reorder`,favorites:`Favorites`},loadingSteps:{connecting:`Connecting to data source`,loadingConfig:`Loading configuration`,preparingWorkspace:`Preparing workspace`},error:{connectionFailed:`Cannot connect to server`,serverUnreachable:`The server at {{url}} is unreachable.`,checkServer:`Please check your network connection or that the backend is running.`,timeout:`Connection timed out after 10 seconds.`},actions:{retry:`Retry`,retrying:`Retrying…`},shortcuts:{title:`Keyboard Shortcuts`,description:`Quick reference for all available keyboard shortcuts.`,groups:{general:`General`,navigation:`Navigation`,dataViews:`Data Views`,preferences:`Preferences`},openCommandPalette:`Open command palette`,showShortcuts:`Show keyboard shortcuts`,closeDialog:`Close dialog / panel`,toggleSidebar:`Toggle sidebar`,focusSearch:`Focus search`,createRecord:`Create new record`,refreshData:`Refresh data`,editRecord:`Edit selected record`,toggleDarkMode:`Toggle dark mode`},commandPalette:{placeholder:`Type a command or search...`,noResults:`No results found.`,searching:`Searching…`,records:`Records`,recentRecords:`Recently viewed`,objects:`Objects`,dashboards:`Dashboards`,pages:`Pages`,reports:`Reports`,switchApp:`Switch App`,current:`Current`,preferences:`Preferences`,lightTheme:`Light Theme`,darkTheme:`Dark Theme`,systemTheme:`System Theme`,actions:`Actions`,openFullSearch:`Open Full Search Page`,createApp:`Create New App`},errors:{somethingWentWrong:`Something went wrong`,unexpectedError:`An unexpected error occurred while rendering this view.`,tryAgain:`Try Again`,goHome:`Go Home`,errorDetails:`Error Details (dev only)`},theme:{toggle:`Toggle theme`,light:`Light`,dark:`Dark`,system:`System`},objectView:{objectNotFound:`Object Not Found`,objectNotFoundDescription:`The object "{{objectName}}" does not exist in the current configuration.`,objectNotFoundHint:`Check your app navigation settings or select a different object from the sidebar.`,allRecords:`All Records`,exitDesignMode:`Exit Design Mode`,enterDesignMode:`Enter Design Mode`,metadataInspector:`Metadata Inspector`,editView:`Edit View`,addView:`Add View`,designTools:`Design tools`,new:`New`,import:`Import`,importTitle:`Import from CSV`,importedToast:`Imported {{count}} row(s).`,importedWithSkipped:`Imported {{ok}} row(s); skipped {{skipped}}.`,configureView:`Configure View`,closePanel:`Close panel`,showAdvancedSettings:`Show advanced settings`,showFewerSettings:`Show fewer settings`,page:`Page`,pageConfigHint:`Toolbar, navigation & view shell settings`,listConfigHint:`Data rendering, columns & appearance for this list type`,general:`General`,generalHint:`View title, description, and type`,toolbar:`Toolbar`,toolbarHint:`Search, filter, sort, group, and density toggles`,toolbarEnabledCount:`{{count}} of {{total}} enabled`,navigationSection:`Navigation`,navigationHint:`Row click behavior and detail view settings`,records:`Records`,recordsHint:`Selection mode, add record, and inline editing`,exportPrint:`Export & Print`,exportPrintHint:`Export formats, printing, and record count display`,showAllFields:`Show All`,hideAllFields:`Hide All`,searchFields:`Search fields...`,title:`Title`,description:`Description`,data:`Data`,source:`Source`,columns:`Columns`,filterBy:`Filter by`,sortBy:`Sort by`,appearance:`Appearance`,showDescription:`Show description`,viewType:`View type`,userFilters:`User filters`,enableSearch:`Enable search`,enableFilter:`Enable filter`,enableSort:`Enable sort`,enableHideFields:`Enable hide fields`,enableGroup:`Enable group`,enableColor:`Enable color`,enableDensity:`Enable density`,userActions:`User actions`,addRecordViaForm:`Add records through a form`,advanced:`Advanced`,allowExport:`Allow export`,recordCount:`{{count}} records`,noDescription:`No description`,none:`None`,columnsConfigured:`{{count}} columns`,save:`Save`,discard:`Discard`,createView:`Create View`,createViewDesc:`Pick a view type, then give it a name. You can change every setting afterwards.`,cancel:`Cancel`,create:`Create`,delete:`Delete`,deleteViewTitle:`Delete view`,deleteViewConfirm:`Are you sure you want to delete the view "{{name}}"? This cannot be undone.`,bulkDeleteConfirm:`Delete {{count}} selected records? This cannot be undone.`,duplicateViewName:`A view with this name already exists.`,viewTypeGrid:`Grid`,viewTypeGridDesc:`A spreadsheet-style table of records.`,viewTypeKanban:`Kanban`,viewTypeKanbanDesc:`Cards grouped into columns by a single-select field.`,viewTypeCalendar:`Calendar`,viewTypeCalendarDesc:`Records placed on a monthly calendar by date.`,viewTypeGallery:`Gallery`,viewTypeGalleryDesc:`Large image cards driven by an attachment field.`,viewTypeTimeline:`Timeline`,viewTypeTimelineDesc:`Records along a horizontal time axis.`,viewTypeGantt:`Gantt`,viewTypeGanttDesc:`Project bars with start / end and dependencies.`,viewTypeMap:`Map`,viewTypeMapDesc:`Geographic markers from latitude / longitude fields.`,viewTypeChart:`Chart`,viewTypeChartDesc:`Aggregated bar / line / pie visualisations.`,newView:`New View`,typeOptions:`Type Options`,groupByField:`Group by field`,groupByFieldHelp:`The kanban groups records into columns by this field's values.`,startDateField:`Start date field`,startDateFieldHelp:`The calendar places records on the cell matching this date.`,ganttStartDateFieldHelp:`The left edge of each Gantt bar uses this date.`,ganttEndDateFieldHelp:`The right edge of each Gantt bar uses this date.`,timelineDateFieldHelp:`Records are placed on the timeline by this date.`,titleField:`Title field`,latitudeField:`Latitude field`,latitudeFieldHelp:`Field providing the latitude coordinate (geo fields only).`,longitudeField:`Longitude field`,longitudeFieldHelp:`Field providing the longitude coordinate (geo fields only).`,imageField:`Image field`,imageFieldHelp:`The gallery cover comes from this image or attachment field.`,dateField:`Date field`,selectField:`Select field...`,selectOption:`Select...`,noEligibleFieldForType:`No eligible field of this type. Add one to the object first.`,viewTypeUnavailable:`This object has no field that can serve as "{{field}}".`,viewTypeUnavailableShort:`Not supported by this object.`,chartType:`Chart type`,chartTypeHelp:`Determines how the data is rendered.`,chartTypeBar:`Bar chart`,chartTypeLine:`Line chart`,chartTypePie:`Pie chart`,chartTypeArea:`Area chart`,chartTypeScatter:`Scatter chart`,xAxisField:`X-axis field`,xAxisFieldHelp:`The categorical or time dimension.`,yAxisField:`Y-axis field`,yAxisFieldHelp:`The numeric field to aggregate.`,gridOptionsHint:`Grid view uses the columns configured above.`,groupBy:`Group by`,prefixField:`Prefix field`,fields:`Fields`,fieldsVisible:`{{count}} visible`,sortsCount:`{{count}} sorts`,filtersCount:`{{count}} filters`,endDateField:`End date field`,color:`Color`,fieldTextColor:`Field text color`,rowHeight:`Row height`,wrapHeaders:`Wrap headers`,showFieldDescriptions:`Show field descriptions`,collapseAllByDefault:`Collapse all by default`,striped:`Striped rows`,bordered:`Bordered cells`,inlineEdit:`Edit records inline`,addDeleteRecordsInline:`Add/delete records inline`,clickIntoRecordDetails:`Click into record details`,navigationMode:`Navigation mode`,navigationWidth:`Navigation width`,navigationWidthHint:`Available for drawer, modal, and split navigation modes`,openNewTab:`Open in new tab`,openNewTabHint:`Available for page and new window navigation modes`,selectionMode:`Selection mode`,selectionNone:`None`,selectionSingle:`Single`,selectionMultiple:`Multiple`,pageSize:`Page size`,pageSizeOptions:`Page size options`,exportFormats:`Export formats`,exportMaxRecords:`Max records`,exportIncludeHeaders:`Include headers`,exportFileNamePrefix:`File name prefix`,searchableFields:`Searchable fields`,filterableFields:`Filterable fields`,resizableColumns:`Resizable columns`,densityCompact:`Compact`,densityComfortable:`Comfortable`,densitySpacious:`Spacious`,densityMode:`Density mode`,hiddenFields:`Hidden fields`,rowActions:`Row actions`,bulkActions:`Bulk actions`,sharing:`Sharing`,sharingEnabled:`Enable sharing`,sharingVisibility:`Visibility`,addRecordEnabled:`Enable add record`,addRecordPosition:`Position`,addRecordMode:`Mode`,addRecordFormView:`Form view`,conditionalFormatting:`Conditional formatting`,addRule:`Add rule`,quickFilters:`Quick filters`,addQuickFilter:`Add quick filter`,ufElements:`Elements`,ufDropdown:`Dropdown`,ufTabs:`Tabs`,ufToggle:`Toggle`,ufAddField:`+ Add filter field...`,ufNoFields:`No fields available`,ufAddTab:`+ Add tab`,ufTabLabel:`Label`,ufShowAllRecords:`Show "All records" tab`,ufAllowAddTab:`Allow adding tabs`,showRecordCount:`Show record count`,allowPrinting:`Allow printing`,virtualScroll:`Virtual scroll`,emptyStateTitle:`Empty state title`,emptyStateMessage:`Empty state message`,emptyStateIcon:`Empty state icon`,ariaLabel:`ARIA label`,ariaDescribedBy:`ARIA described by`,ariaLive:`ARIA live`,accessibility:`Accessibility`,viewTabs:`View Tabs`},localeSwitcher:{label:`Language`}},auth:{login:{title:`Sign in to your account`,description:`Enter your email and password to continue`,emailLabel:`Email`,emailPlaceholder:`name@example.com`,passwordLabel:`Password`,passwordPlaceholder:`Enter your password`,forgotPasswordText:`Forgot password?`,submitButton:`Sign In`,submittingButton:`Signing in...`,noAccountText:`Don't have an account?`,signUpText:`Sign up`,errors:{invalidCredentials:`Invalid email or password. Please try again.`,emailNotVerified:`Please verify your email address before signing in.`}},register:{title:`Create an account`,description:`Enter your information to get started`,nameLabel:`Name`,namePlaceholder:`John Doe`,emailLabel:`Email`,emailPlaceholder:`name@example.com`,passwordLabel:`Password`,passwordPlaceholder:`Create a password (min. 8 characters)`,confirmPasswordLabel:`Confirm Password`,confirmPasswordPlaceholder:`Confirm your password`,passwordMismatchError:`Passwords do not match`,passwordTooShortError:`Password must be at least 8 characters`,submitButton:`Create Account`,submittingButton:`Creating account...`,hasAccountText:`Already have an account?`,signInText:`Sign in`,errors:{userExists:`An account with this email already exists. Try signing in instead.`},verifyInbox:{title:`Check your inbox`,description:`We've sent a verification link to {{email}}. Click the link to activate your account.`,resend:`Resend verification email`,resending:`Sending…`,resent:`Verification email sent.`,backToSignIn:`Back to sign in`}},forgotPassword:{title:`Reset your password`,description:`Enter your email address and we'll send you a link to reset your password`,emailLabel:`Email`,emailPlaceholder:`name@example.com`,submitButton:`Send Reset Link`,submittingButton:`Sending...`,successTitle:`Check your email`,successDescription:`We've sent a password reset link to {{email}}. Please check your inbox.`,backToSignInText:`Back to sign in`,rememberPasswordText:`Remember your password?`,signInText:`Sign in`},resetPassword:{title:`Set a new password`,description:`Choose a password you have not used before.`,newPassword:`New password`,confirmPassword:`Confirm password`,submit:`Update password`,submitting:`Updating…`,success:`Password updated`,failed:`Reset failed`,invalidToken:`This reset link is invalid or has expired.`,missingToken:`Reset link is missing or expired`,passwordsMismatch:`Passwords do not match`,requestNewLink:`Request a new link`},verifyEmail:{title:`Verify your email address`,description:`We sent a verification link to your email address. Please click the link to verify your account.`,sentTo:`Sent to:`,verifyingTitle:`Verifying…`,verifyingDescription:`Hang tight while we confirm your email.`,successTitle:`Email verified`,successDescription:`Your email is confirmed. You can now sign in.`,errorTitle:`Verification failed`,errorDescription:`Verification failed. Please request a new link.`,missingToken:`Verification link is missing a token.`,emailMissing:`Email address is missing`,resendButton:`Resend verification email`,resending:`Sending…`,resent:`Email sent! Check your inbox`,resentSuccess:`Verification email sent!`,resentDescription:`Please check your inbox and click the verification link.`,resendFailed:`Cannot resend verification email`,signInLink:`Go to sign in`,backToSignIn:`Back to sign in`,backToLogin:`Back to login`,checkSpam:`Didn't receive the email? Check your spam folder or contact support.`,or:`Or`},setup:{welcomeTitle:`Welcome to ObjectStack`,description:`Create the first owner account to finish setting up this deployment.`,yourName:`Your name`,orgName:`Organization name`,orgNamePlaceholder:`Acme Inc.`,emailLabel:`Email`,emailPlaceholder:`name@example.com`,passwordLabel:`Password`,passwordHint:`Minimum 8 characters`,submit:`Create owner account`,submitting:`Setting up…`,failed:`Setup failed`},device:{title:`Authorize new device`,subtitle:`Approve this device to sign in as {{email}}.`,userCodeLabel:`Device code`,loggedInAs:`Signed in as {{email}}`,approve:`Approve device`,approving:`Approving…`,approvedTitle:`Device authorized`,approvedDescription:`You can return to the device — it should sign in shortly.`,approveSuccess:`Device authorized`,approveSuccessDescription:`You can close this window.`,approveFailed:`Approval failed`,deny:`Deny request`,denying:`Denying…`,deniedTitle:`Access denied`,deniedDescription:`The device will not be granted access.`,denyFailed:`Failed to deny request`,invalidTitle:`Invalid device link`,invalidDescription:`No device code was provided in the URL.`,loading:`Loading…`,cancel:`Cancel`},shell:{tenantHostHint:`You are signing in to this workspace`}},errors:{networkError:`Network error. Please check your connection.`,serverError:`Server error. Please try again later.`,notFound:`Resource not found.`,unauthorized:`You are not authorized to perform this action.`,forbidden:`Access denied.`,timeout:`Request timed out. Please try again.`,unknown:`An unexpected error occurred.`},workspace:{label:`Workspaces`,default:`My Workspace`,switch:`Switch workspace`,create:`Create workspace`,createTitle:`Create a workspace`,createDescription:`A workspace is a shared space for your team to collaborate.`,createButton:`Create workspace`,nameLabel:`Workspace name`,namePlaceholder:`e.g., Acme Inc`,slugLabel:`URL slug`,slugHint:`Used in URLs. Only lowercase letters, numbers, and hyphens.`,invite:`Invite member`,members:`Members`,settings:`Workspace settings`},sidebar:{settings:`Settings`,help:`Help`,helpTooltip:`Help & Documentation`,activityFeed:`Activity feed`,notifications:`Notifications`,approvals:`Approvals`,inbox:`Inbox`,inboxAriaLabel:`Open inbox`,area:`Area`,recent:`Recent`,favorites:`Favorites`,starred:`Starred`,removeFromFavorites:`Remove {{name}} from favorites`},home:{title:`Home`,subtitle:`Your workspace dashboard`,nav:`Home`,allApps:`All Applications`,greetingMorning:`Good morning`,greetingAfternoon:`Good afternoon`,greetingEvening:`Good evening`,greetingNight:`Working late`,heroTagline:`Pick up where you left off, or explore something new.`,open:`Open`,stats:{apps:`Applications`,starred:`Starred`,recent:`Recent items`},loading:`Loading workspace...`,recent:`Recent`,starred:`Starred`,welcome:`Welcome to ObjectUI`,welcomeDescription:`Get started by creating your first application or configure your system settings.`,createFirstApp:`Create Your First App`,systemSettings:`System Settings`,browseMarketplace:`Browse App Marketplace`,quickActions:{title:`Quick Actions`,createApp:`Create App`,createAppDesc:`Start with a new application`,manageObjects:`Manage Objects`,manageObjectsDesc:`Configure data models`,systemSettings:`System Settings`,systemSettingsDesc:`Configure your workspace`},recentApps:{title:`Recently Accessed`,itemType:{object:`Object`,dashboard:`Dashboard`,page:`Page`,record:`Record`}},starredApps:{title:`Starred`},gettingStarted:{title:`Make this home yours`,description:`Star an app to pin it here for one-click access. Anything you open will show up under Recently Accessed automatically.`,cta:`Browse all applications`},appCard:{noDescription:`No description`,default:`Default`}},layout:{appSwitcher:{home:`Home`,addApp:`Add App`,editApp:`Edit App`,manageAllApps:`Manage All Apps`,systemConsole:`System Console`,noAppsConfigured:`No apps configured`},activityFeed:{title:`Recent Activity`,filter:`Filter`,empty:`No recent activity`,viewAll:`View all activity`,ariaLabel:`Activity feed`,typeCreate:`Create`,typeUpdate:`Update`,typeDelete:`Delete`,typeComment:`Comment`,relativeJustNow:`just now`,relativeSecondsAgo:`{{count}}s ago`,relativeMinutesAgo:`{{count}}m ago`,relativeHoursAgo:`{{count}}h ago`,relativeDaysAgo:`{{count}}d ago`},metadata:{label:`Metadata`,toggleTitle:`Toggle Metadata Inspector`,panelTitle:`Metadata Inspector`,jsonBadge:`JSON`,copyJson:`Copy JSON`}},search:{title:`Search`,back:`Back`,placeholder:`Search objects, dashboards, pages, reports...`,inputAriaLabel:`Search objects, dashboards, pages, reports`,resultsCount:`{{count}} result for "{{query}}"`,resultsCountPlural:`{{count}} results for "{{query}}"`,itemsAvailable:`{{count}} items available`,noResults:`No results found`,noResultsHint:`Try adjusting your search terms`,typeObjects:`Objects`,typeDashboards:`Dashboards`,typePages:`Pages`,typeReports:`Reports`,badgeObject:`object`,badgeDashboard:`dashboard`,badgePage:`page`,badgeReport:`report`},empty:{objectNotFound:`Object Not Found`,objectNotFoundDescription:`Object "{{name}}" definition missing. Check your configuration or navigate back to select a valid object.`,recordNotFound:`Record not found`,recordNotFoundDescription:`The record you are looking for does not exist or may have been deleted.`,pageNotFound:`Page Not Found`,pageNotFoundDescription:`The page "{{name}}" could not be found. It may have been removed or renamed.`,dashboardNotFound:`Dashboard Not Found`,dashboardNotFoundDescription:`The dashboard "{{name}}" could not be found. It may have been removed or renamed.`,reportNotFound:`Report Not Found`,reportNotFoundDescription:`The report "{{name}}" could not be found. It may have been removed or renamed.`,noAppsConfigured:`No Apps Configured`,noAppsConfiguredDescription:`No applications have been registered. Create your first app or visit System Settings to configure your environment.`,createFirstApp:`Create Your First App`,systemSettings:`System Settings`,back:`Back`},renderer:{noPageSchema:`No page schema provided`,noFormSchema:`No form schema provided`,noDashboardSchema:`No dashboard schema provided`,pageRendering:`Page rendering: {{name}}`,dashboardRendering:`Dashboard rendering: {{name}}`,formRenderingMode:`Form rendering in {{mode}} mode`,formRenderingFor:`for record {{id}}`,createRecord:`Create Record`,editRecord:`Edit Record`,page:`Page`,dashboard:`Dashboard`,save:`Save`,cancel:`Cancel`},actionDialog:{title:`Action Parameters`,description:`Please provide the required information to continue.`,selectPlaceholder:`Select {{label}}`,requiredError:`{{label}} is required`,lookupPlaceholder:`Paste the {{label}} record id (UUID)`,lookupHelpText:`Enter the record id of the referenced object. A picker is coming soon.`,cancel:`Cancel`,confirm:`Confirm`,defaultActionTitle:`Action`,ok:`OK`},rowAction:{openMenu:`Open menu`,edit:`Edit`,delete:`Delete`},navigationSync:{addedPage:`Navigation updated: added page "{{name}}"`,addedDashboard:`Navigation updated: added dashboard "{{name}}"`,removedPage:`Navigation updated: removed page "{{name}}"`,removedDashboard:`Navigation updated: removed dashboard "{{name}}"`,renamedPage:`Navigation updated: renamed page "{{oldName}}" → "{{newName}}"`,renamedDashboard:`Navigation updated: renamed dashboard "{{oldName}}" → "{{newName}}"`,undoLabel:`Undo`,undone:`Navigation change undone`,undoFailed:`Failed to undo navigation change`,updateFailed:`Failed to update navigation`},objectActions:{deleteSuccess:`{{label}} deleted successfully`,deleteFailed:`Failed to delete {{label}}`,noRecordId:`No record ID provided`,deleteConfirm:`Are you sure you want to delete this record?`,bulkDeleteSuccess:`Deleted {{count}} {{label}} records`,bulkDeletePartial:`{{succeeded}} deleted, {{failed}} failed`},objectViewActions:{renameFailed:`Failed to rename view`,deleteFailed:`Failed to delete view`},dashboardActions:{pdfPreparing:`Preparing PDF export…`,exportFailed:`Export failed: {{message}}`,forecastSoon:`Forecast view coming soon`},recordDetail:{viewersTooltip:`Users viewing this record`},cellRender:{empty:`Empty`,yes:`Yes`,no:`No`,systemFields:`System`},user:{profile:`Profile`,settings:`Settings`,logout:`Log out`,preferences:`Preferences`,theme:`Theme`,language:`Language`},organizations:{mine:`My Organizations`,title:`Organizations`,heading:`Your Organizations`,subtitle:`Select an organization to continue, or create a new one.`,searchPlaceholder:`Search for an organization`,new:`New organization`,current:`Current organization`,manage:`Manage`,emptyTitle:`No organizations yet`,emptyDescription:`Create your first organization to get started.`,noMatches:`No organizations match your search.`},notifications:{empty:`No notifications`,emptyUnread:`You're all caught up`,filterUnread:`Unread`,filterAll:`All`,markAllRead:`Mark all read`,viewAll:`View all notifications`,approvalsPending:`{{count}} pending approvals`,viewApprovals:`View approvals`,noPendingApprovals:`No pending approvals`,openApprovalsInbox:`Open Approvals Inbox`},publicForm:{submit:`Submit`,submitting:`Submitting…`,submitAnother:`Submit another response`,poweredBy:`Powered by ObjectStack`,secureNotice:`Your information is transmitted securely and only used to respond to your request.`,thankYouTitle:`Thank you!`,thankYouMessage:`Your submission has been received successfully.`,redirecting:`Redirecting in {{seconds}} seconds…`,unavailableTitle:`Form unavailable`,unavailableDescription:`No public form is available at this URL. Make sure the underlying view has anonymous sharing enabled and matches this slug.`,tryDemo:`Try the demo`,retry:`Retry`,loading:`Loading form…`,requiredHint:`* Required field`,consentLabelDefault:`I agree to the privacy policy and consent to my data being processed for this request.`,consentLink:`Privacy policy`,consentRequired:`Please accept the privacy policy to continue.`,rateLimited:`Please take a moment to review your answers before submitting.`,redirectBlocked:`Submission accepted, but the redirect URL was blocked for security.`,demo:{contactTitle:`Contact us`,contactDescription:`Tell us about your project and a sales representative will get back to you within one business day.`,supportTitle:`Submit a support request`,supportDescription:`Tell us what is going wrong — our team responds within one business day.`,thankYouSalesTitle:`Thanks — we received your message!`,thankYouSalesMessage:`A sales representative will be in touch within one business day.`,thankYouSupportTitle:`Got it — your request is in the queue.`,thankYouSupportMessage:`A support engineer will follow up shortly. Save this page if you have more screenshots to add.`,field:{firstName:`First name`,lastName:`Last name`,email:`Work email`,phone:`Phone`,jobTitle:`Job title`,company:`Company`,website:`Website`,industry:`Industry`,companySize:`Company size`,howCanWeHelp:`How can we help?`,subject:`Subject`,description:`Description`,issueType:`Issue type`,priority:`Priority`},industry:{technology:`Technology`,software:`Software / SaaS`,finance:`Finance`,healthcare:`Healthcare`,retail:`Retail`,other:`Other`},issueType:{question:`Question`,problem:`Problem`,bug:`Bug`,feature_request:`Feature request`},priority:{low:`Low`,medium:`Medium`,high:`High`,critical:`Critical`}}},marketplace:{title:`App Marketplace`,subtitle:`Browse approved apps published to the ObjectStack catalog. Click an app to view details and install it into one of your environments.`,searchPlaceholder:`Search apps by name or manifest ID…`,searchAria:`Search marketplace apps`,installed:`Installed`,installedCount:`Installed ({{count}})`,refresh:`Refresh`,all:`All`,noApprovedYet:`No apps have been approved for the marketplace yet.`,noMatchFilters:`No apps match your filters.`,noDescription:`No description provided.`,back:`Back to marketplace`,installedTitle:`Installed Apps`,installedSubtitle:`Marketplace packages currently installed into this runtime's kernel. Cached manifests live in <code>.objectstack/installed-packages/</code> and survive restarts.`,installedEmpty:`No marketplace apps installed in this runtime yet.`,browseLink:`Browse the marketplace →`,installedAdditiveNote:`<strong>Note:</strong> The kernel API is additive only — uninstall removes the on-disk manifest so the package won't load on next boot, but the running kernel keeps the app registered until you restart the runtime.`,installedAt:`Installed {{when}}`,installedBy:`by {{user}}`,installedPackageId:`package`,cachedAs:`Cached as <code>{{path}}</code>`,versionBadge:`v{{version}}`,installedBadge:`Installed v{{version}}`,load:{failed:`Failed to load marketplace`,failedHint:`By default this runtime points at the public ObjectStack cloud. Check the runtime is online, or override <code>OS_CLOUD_URL</code> to point at a self-hosted control plane.`,packageFailed:`Failed to load package`,notFound:`Not found.`},detail:{homepage:`Homepage`,installedV:`Installed · v{{version}}`,about:`About`,noReadme:`No readme provided.`,versions:`Versions`,noApprovedVersions:`No approved versions.`,prerelease:`pre`,moreOptions:`More install options`,uninstallFromRuntime:`Uninstall from this runtime`},action:{install:`Install`,reinstall:`Reinstall`,working:`Working…`,installToCloud:`Install to cloud…`,installing:`Installing…`,uninstall:`Uninstall`,uninstalling:`Uninstalling…`,details:`Details`,close:`Close`,dismiss:`Dismiss`,openOnCloud:`Open on cloud`,backHome:`Back to home`},install:{dialogTitle:`Install {{name}}`,dialogDescCurrent:`Install into this environment ({{host}}).`,dialogDescPicker:`Choose an environment to install this app into. You need to be signed into ObjectStack Cloud.`,environment:`Environment`,environmentPlaceholder:`Pick an environment`,includeSampleData:`Include sample data`,noEnvs:`No environments found in your active organization.`,noPermission:`You do not have permission to install apps in any environment. Only organization owners and admins can install — ask your workspace admin.`,signInFirst:`You need to sign into ObjectStack Cloud first. Click "Open on cloud" below.`,success:`Installed successfully. Open the environment to see the new app.`,localSuccess:`Installed v{{version}} to this runtime. "{{name}}" should now appear in the app switcher.`,localManifestConflict:`{{message}}
4
+ `),e))}}catch(t){Je.has(e)||(Je.add(e),console.warn(`[ObjectUI] Schema validator threw:`,t))}return qe.set(e,n),n}function Xe(e){let t={};return e.ariaLabel&&(t[`aria-label`]=Ge(e.ariaLabel)),e.ariaDescribedBy&&(t[`aria-describedby`]=e.ariaDescribedBy),e.role&&(t.role=e.role),t}var Ze=class extends I.Component{state={hasError:!1,error:null};static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidUpdate(e){this.state.hasError&&(e.componentType!==this.props.componentType||e.resetKey!==this.props.resetKey)&&this.setState({hasError:!1,error:null})}handleRetry=()=>{this.setState({hasError:!1,error:null})};render(){if(this.state.hasError&&this.state.error){let e=this.state.error;return be(e),(0,L.jsxs)(`div`,{className:`p-4 border border-orange-400 rounded bg-orange-50 text-orange-700 my-2`,role:`alert`,children:[(0,L.jsxs)(`p`,{className:`font-medium`,children:[`Component`,this.props.componentType?` "${this.props.componentType}"`:``,` failed to render`]}),(0,L.jsx)(`p`,{className:`text-sm mt-1`,children:e.message}),!1,(0,L.jsx)(`button`,{onClick:this.handleRetry,className:`mt-2 text-sm underline hover:no-underline`,children:`Retry`})]})}return this.props.children}},Qe=(0,I.forwardRef)(({schema:e,...t},n)=>{let r=(0,I.useContext)(Ve),i=r?.dataSource||{},[,a]=(0,I.useReducer)(e=>e+1,0);(0,I.useEffect)(()=>{let e=c.subscribe(a);return a(),e},[]);let[o,s]=(0,I.useState)(null),l=(0,I.useMemo)(()=>{if(!e||typeof e==`string`)return e;let t=new k({data:i}),n={...e};if(n.properties){let e=n.type,t=n.id,r=n.properties;for(let[e,t]of Object.entries(r))e===`type`||e===`id`||(n[e]=t);e!==void 0&&(n.type=e),t!==void 0&&(n.id=t),n.properties=r}if(typeof n.content==`string`&&(n.content=t.evaluate(n.content)),n.props){let e={...n.props};for(let[n,r]of Object.entries(e))e[n]=t.evaluate(r);n.props=e}return(n.visible===void 0?n.visibleOn===void 0?n.hidden===void 0?n.hiddenOn!==void 0&&t.evaluateCondition(n.hiddenOn):t.evaluateCondition(n.hidden):!t.evaluateCondition(n.visibleOn):!t.evaluateCondition(n.visible))&&(n._hidden=!0),(n.disabled===void 0?n.disabledOn!==void 0&&t.evaluateCondition(n.disabledOn):t.evaluateCondition(n.disabled))&&(n._disabled=!0),n},[e,i]);if(!l||l?._hidden)return null;if(typeof l==`string`)return(0,L.jsx)(L.Fragment,{children:l});let u=Ke?Ye(e):{valid:!0,messages:[]};Ce(`schema`,`Rendering schema node`,{type:l.type,id:l.id});let d=c.get(l.type);if(!d){if(!o&&c.hasLazy(l.type)){let e=c.loadLazy(l.type);if(e)return e.catch(e=>{s(e instanceof Error?e:Error(String(e)))}),(0,L.jsxs)(`div`,{className:`p-2 text-sm text-muted-foreground animate-pulse`,role:`status`,"aria-live":`polite`,"data-lazy-loading":l.type,children:[`Loading `,(0,L.jsx)(`code`,{children:l.type}),`…`]})}return Ce(`schema`,`Component not found in registry`,{type:l.type}),ve[`OBJUI-001`],(0,L.jsxs)(`div`,{className:`p-4 border border-red-500 rounded text-red-500 bg-red-50 my-2`,role:`alert`,children:[(0,L.jsxs)(`p`,{className:`font-medium`,children:[`Unknown component type: `,(0,L.jsx)(`strong`,{children:l.type})]}),o&&(0,L.jsxs)(`p`,{className:`text-xs mt-1`,children:[`Failed to load plugin: `,o.message]}),!1,(0,L.jsx)(`pre`,{className:`text-xs mt-2 overflow-auto`,children:JSON.stringify(l,null,2)})]})}let{type:f,children:p,body:m,schema:h,visible:g,visibleOn:_,hidden:v,hiddenOn:y,disabled:b,disabledOn:x,_hidden:S,_disabled:C,...ee}=l,w=Xe(l),T=r?.debug||r?.debugFlags?.enabled,E={};T&&(E[`data-debug-type`]=l.type,l.id&&(E[`data-debug-id`]=l.id)),Te(`render:${l.type}:${l.id??`anon`}`);let D=T?performance.now():0,O=(0,L.jsx)(Ze,{componentType:l.type,resetKey:l.id??null,children:I.createElement(d,{schema:l,...ee,...l.props||{},...w,...E,disabled:C||void 0,className:l.className,"data-obj-id":l.id,"data-obj-type":l.type,...Ke&&!u.valid?{"data-obj-schema-invalid":`true`}:{},...t})});if(Ee(`render:${l.type}:${l.id??`anon`}`),T&&D){let e=performance.now()-D;Oe.getInstance().addPerf({type:l.type,id:l.id,durationMs:e,timestamp:Date.now()})}return O});Qe.displayName=`SchemaRenderer`;var $e=(0,I.createContext)({});function et({scope:e,children:t}){return(0,I.createElement)($e.Provider,{value:e},t)}function tt(){return(0,I.useContext)($e)}function nt(e){if(!(e==null||e===``)){if(typeof e==`boolean`)return e;if(typeof e==`string`)return`\${${e}}`;if(typeof e==`object`&&typeof e.source==`string`){let t=e.source;return t?`\${${t}}`:void 0}}}function rt(e,t={}){let n=tt();return(0,I.useMemo)(()=>new k({...n,...t}).evaluateCondition(e),[e,t,n])}function it(e={}){let{context:t={},onConfirm:n,onToast:r,onModal:i,onNavigate:a,onParamCollection:o,onResultDialog:s}=`context`in e?e:{context:e},[c,l]=(0,I.useState)(!1),[u,d]=(0,I.useState)(null),[f,p]=(0,I.useState)(null),m=(0,I.useMemo)(()=>{let e=new M(t);return n&&e.setConfirmHandler(n),r&&e.setToastHandler(r),i&&e.setModalHandler(i),a&&e.setNavigationHandler(a),o&&e.setParamCollectionHandler(o),s&&e.setResultDialogHandler(s),e},[JSON.stringify(t)]);return{execute:(0,I.useCallback)(async e=>{l(!0),d(null),p(null);try{let t=await m.execute(e);return p(t),t.success||d(t.error||`Action failed`),t}catch(e){let t=e.message;d(t);let n={success:!1,error:t};return p(n),n}finally{l(!1)}},[m]),loading:c,error:u,result:f,updateContext:(0,I.useCallback)(e=>{m.updateContext(e)},[m]),runner:m}}function at(e){let{navigation:t,objectName:n,onNavigate:r,onRowClick:i}=e,[a,o]=(0,I.useState)(!1),[s,c]=(0,I.useState)(null),l=t?.mode??`page`,u=t?.width,d=t?.view,f=l===`drawer`||l===`modal`||l===`split`||l===`popover`,p=(0,I.useCallback)(()=>{o(!1),c(null)},[]),m=(0,I.useCallback)(e=>{c(e),o(!0)},[]),h=(0,I.useCallback)((e,a)=>{if(i){i(e,a);return}if(a&&(a.metaKey||a.ctrlKey||a.button===1)){let t=e.id||e._id;if(r&&t!=null){r(t,`new_window`);return}}if(!t){let t=e.id||e._id;r&&t!=null&&r(t,d??`view`);return}if(!(l===`none`||t.preventNavigation)){if(l===`new_window`||t.openNewTab){let t=e.id||e._id;if(r&&t!=null){r(t,`new_window`);return}let i=encodeURIComponent(String(t)),a=n?`/${n}/record/${i}`:`/${i}`;window.open(a,`_blank`);return}if(l===`page`){let t=e.id||e._id;r&&t!=null&&r(t,d??`view`);return}if(f){c(e),o(!0);return}}},[i,t,l,n,r,f,d]);return(0,I.useMemo)(()=>({isOpen:a,selectedRecord:s,mode:l,close:p,open:m,setIsOpen:o,handleClick:h,width:u,view:d,isOverlay:f}),[a,s,l,p,m,h,u,d,f])}var ot=(0,I.createContext)(null);function st(e){if(!e||e.length===0)return{};let t={};for(let n of e)if(n.defaultValue!==void 0)t[n.name]=n.defaultValue;else switch(n.type){case`number`:t[n.name]=0;break;case`boolean`:t[n.name]=!1;break;case`object`:t[n.name]={};break;case`array`:t[n.name]=[];break;default:t[n.name]=``;break}return t}var ct=({definitions:e,children:t})=>{let[n,r]=(0,I.useState)(()=>st(e)),i=(0,I.useCallback)((e,t)=>{r(n=>({...n,[e]:t}))},[]),a=(0,I.useCallback)(e=>{r(t=>({...t,...e}))},[]),o=(0,I.useCallback)(()=>{r(st(e))},[e]),s=(0,I.useMemo)(()=>({variables:n,setVariable:i,setVariables:a,resetVariables:o}),[n,i,a,o]);return(0,L.jsx)(ot.Provider,{value:s,children:t})};ct.displayName=`PageVariablesProvider`;function lt(){let e=(0,I.useContext)(Ve)?.dataSource,[t,n]=(0,I.useState)(null),[r,i]=(0,I.useState)(!0),[a,o]=(0,I.useState)(null);return(0,I.useEffect)(()=>{let t=!1;async function r(){if(!e){i(!1);return}try{if(i(!0),typeof e.getDiscovery==`function`){let r=await e.getDiscovery();t||(n(r),o(null))}else t||(n(null),o(null))}catch(e){t||(o(e instanceof Error?e:Error(`Failed to fetch discovery`)),n(null))}finally{t||i(!1)}}return r(),()=>{t=!0}},[e]),{discovery:t,isLoading:r,error:a,isAuthEnabled:t?.services?.auth?.enabled??!0,isAiEnabled:t?.services?.ai?.enabled===!0&&t?.services?.ai?.status===`available`}}[`a[href]`,`button:not([disabled])`,`input:not([disabled])`,`select:not([disabled])`,`textarea:not([disabled])`,`[tabindex]:not([tabindex="-1"])`].join(`, `);var ut={compact:32,comfortable:40,spacious:52},dt={compact:`py-1 px-2`,comfortable:`py-2 px-3`,spacious:`py-3 px-4`},ft={compact:`text-xs`,comfortable:`text-sm`,spacious:`text-base`},pt=[`compact`,`comfortable`,`spacious`];function mt(e=`comfortable`,t){let[n,r]=(0,I.useState)(e),i=t?.rowHeights??ut,a=t?.paddingClasses??dt,o=t?.fontSizeClasses??ft,s=(0,I.useRef)(t?.onChange);(0,I.useEffect)(()=>{s.current=t?.onChange},[t?.onChange]);let c=(0,I.useRef)(e);(0,I.useEffect)(()=>{e!==c.current&&(c.current=e,r(e))},[e]);let l=(0,I.useCallback)(e=>{r(t=>t===e?t:(queueMicrotask(()=>s.current?.(e)),e))},[]),u=(0,I.useCallback)(()=>{r(e=>{let t=pt[(pt.indexOf(e)+1)%pt.length];return queueMicrotask(()=>s.current?.(t)),t})},[]);return(0,I.useMemo)(()=>({mode:n,setMode:l,cycle:u,rowHeight:i[n],paddingClass:a[n],fontSizeClass:o[n]}),[n,l,u,i,a,o])}var ht=0,gt=(0,I.createContext)(null),_t=({children:e,config:t={},onToast:n})=>{let r=(0,I.useMemo)(()=>({position:`top-right`,defaultDuration:5e3,maxVisible:5,stacking:!0,...t}),[JSON.stringify(t)]),[i,a]=(0,I.useState)([]),o=(0,I.useCallback)(e=>{let t=`notification-${++ht}`,i={...e,id:t,createdAt:new Date,read:!1};a(e=>[i,...e]),n&&n(i);let o=e.duration??r.defaultDuration??5e3;return o>0&&setTimeout(()=>{a(e=>e.filter(e=>e.id!==t))},o),t},[r.defaultDuration,n]),s=(0,I.useCallback)((e,t)=>o({title:e,message:t,severity:`info`}),[o]),c=(0,I.useCallback)((e,t)=>o({title:e,message:t,severity:`success`}),[o]),l=(0,I.useCallback)((e,t)=>o({title:e,message:t,severity:`warning`}),[o]),u=(0,I.useCallback)((e,t)=>o({title:e,message:t,severity:`error`}),[o]),d=(0,I.useCallback)(e=>{a(t=>t.map(t=>t.id===e?{...t,read:!0}:t))},[]),f=(0,I.useCallback)(()=>{a(e=>e.map(e=>({...e,read:!0})))},[]),p=(0,I.useCallback)(e=>{a(t=>t.filter(t=>t.id!==e))},[]),m=(0,I.useCallback)(()=>{a([])},[]),h=(0,I.useMemo)(()=>i.filter(e=>!e.read).length,[i]),g=(0,I.useMemo)(()=>({notifications:i,unreadCount:h,notify:o,info:s,success:c,warning:l,error:u,markAsRead:d,markAllAsRead:f,dismiss:p,clearAll:m,config:r}),[i,h,o,s,c,l,u,d,f,p,m,r]);return(0,L.jsx)(gt.Provider,{value:g,children:e})};_t.displayName=`NotificationProvider`;function vt(e){return typeof window>`u`?()=>{}:(window.addEventListener(`online`,e),window.addEventListener(`offline`,e),()=>{window.removeEventListener(`online`,e),window.removeEventListener(`offline`,e)})}function yt(){return typeof navigator<`u`?navigator.onLine:!0}function bt(){return!0}var xt=`objectui-offline-queue`;function St(){if(typeof localStorage>`u`)return[];try{let e=localStorage.getItem(xt);return e?JSON.parse(e):[]}catch{return[]}}function Ct(e){if(!(typeof localStorage>`u`))try{localStorage.setItem(xt,JSON.stringify(e))}catch{}}var wt=0;function Tt(){return wt+=1,`mut_${Date.now()}_${wt}`}var Et={enabled:!0,strategy:`network_first`,offlineIndicator:!0,offlineMessage:`You are currently offline. Changes will be synced when reconnected.`,queueMaxSize:100};function Dt(e={}){let{enabled:t=Et.enabled,strategy:n=Et.strategy,offlineIndicator:r=Et.offlineIndicator,offlineMessage:i=Et.offlineMessage,queueMaxSize:a=Et.queueMaxSize,sync:o}=e,s=(0,I.useSyncExternalStore)(vt,yt,bt),[c,l]=(0,I.useState)(St),[u,d]=(0,I.useState)(`idle`),f=(0,I.useRef)(o);f.current=o,(0,I.useEffect)(()=>{Ct(c)},[c]),(0,I.useEffect)(()=>{t&&(s?u===`offline`&&d(`idle`):d(`offline`))},[s,t,u]);let p=(0,I.useCallback)(e=>{t&&l(t=>{let n={...e,id:Tt(),timestamp:Date.now()},r=[...t,n];return r.length>a?r.slice(r.length-a):r})},[t,a]),m=(0,I.useCallback)(()=>{l([])},[]),h=(0,I.useCallback)(async()=>{if(!(!t||c.length===0)){d(`syncing`);try{let e=f.current?.batchSize??c.length,t=c.slice(0,e);await new Promise(e=>setTimeout(e,0)),l(e=>e.filter(e=>!t.some(t=>t.id===e.id))),d(`idle`)}catch{d(`error`)}}},[t,c]);return(0,I.useEffect)(()=>{if(!t||!s||c.length===0)return;let e=setTimeout(()=>{h()},100);return()=>clearTimeout(e)},[s,t]),(0,I.useMemo)(()=>({isOnline:s,enabled:t,syncState:u,strategy:n,pendingCount:c.length,queueMutation:p,sync:h,clearQueue:m,showIndicator:r&&!s,offlineMessage:i}),[s,t,u,n,c.length,p,h,m,r,i])}function Ot(){return{canUndo:N.canUndo,canRedo:N.canRedo,undoDescription:N.peekUndo()?.description,redoDescription:N.peekRedo()?.description,history:N.getHistory()}}function kt(){return{canUndo:!1,canRedo:!1,undoDescription:void 0,redoDescription:void 0,history:[]}}var At=Ot();function jt(e){return N.subscribe(()=>{At=Ot(),e()})}function Mt(){return At}function Nt(e={}){let t=(0,I.useRef)(e);t.current=e;let n=(0,I.useSyncExternalStore)(jt,Mt,kt),r=(0,I.useCallback)(async(e,n,r)=>{let i=t.current.dataSource;if(!i)return;let a=r===`undo`?{create:`delete`,update:`update`,delete:`create`}[e.type]:e.type;a===`delete`?await i.delete(e.objectName,e.recordId):a===`update`?await i.update(e.objectName,e.recordId,n):await i.create(e.objectName,n)},[]),i=(0,I.useCallback)(async()=>{let e=N.popUndo();e&&(await r(e,e.undoData,`undo`),t.current.onUndo?.(e))},[r]),a=(0,I.useCallback)(async()=>{let e=N.popRedo();e&&(await r(e,e.redoData,`redo`),t.current.onRedo?.(e))},[r]);return(0,I.useEffect)(()=>{let e=e=>{!(e.ctrlKey||e.metaKey)||e.key.toLowerCase()!==`z`||(e.preventDefault(),e.shiftKey?a():i())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[i,a]),(0,I.useMemo)(()=>({...n,undo:i,redo:a}),[n,i,a])}var Pt=(0,I.createContext)(null),Ft=({children:e,context:t={},onConfirm:n,onToast:r,onModal:i,onNavigate:a,onParamCollection:o,onResultDialog:s,handlers:c})=>{let[l,u]=(0,I.useState)(!1),[d,f]=(0,I.useState)(null),[p,m]=(0,I.useState)(null),h=(0,I.useMemo)(()=>{let e=new M({...t,ctx:t&&typeof t.ctx==`object`?{...t,...t.ctx}:{...t}});return n&&e.setConfirmHandler(n),r&&e.setToastHandler(r),i&&e.setModalHandler(i),a&&e.setNavigationHandler(a),o&&e.setParamCollectionHandler(o),s&&e.setResultDialogHandler(s),c&&Object.entries(c).forEach(([t,n])=>{e.registerHandler(t,n)}),e},[JSON.stringify(t)]),g=(0,I.useCallback)(async e=>{u(!0),f(null),m(null);try{let t=await h.execute(e);return m(t),t.success||f(t.error||`Action failed`),t}catch(e){let t=e.message;f(t);let n={success:!1,error:t};return m(n),n}finally{u(!1)}},[h]),_=(0,I.useCallback)(async(e,t)=>{u(!0),f(null),m(null);try{let n=await h.executeChain(e,t);return m(n),n.success||f(n.error||`Chain failed`),n}catch(e){let t=e.message;f(t);let n={success:!1,error:t};return m(n),n}finally{u(!1)}},[h]),v=(0,I.useCallback)(e=>{h.updateContext(e)},[h]),y=(0,I.useMemo)(()=>({execute:g,executeChain:_,loading:l,error:d,result:p,runner:h,updateContext:v}),[g,_,l,d,p,h,v]);return(0,L.jsx)(Pt.Provider,{value:y,children:e})};Ft.displayName=`ActionProvider`;function It(){let e=(0,I.useContext)(Pt);if(!e){let e=new M;return{execute:t=>e.execute(t),executeChain:(t,n)=>e.executeChain(t,n),loading:!1,error:null,result:null,runner:e,updateContext:t=>e.updateContext(t)}}return e}function Lt(e={}){let{actions:t=[],context:n={}}=e,r=(0,I.useContext)(Pt)?.runner??null,i=(0,I.useMemo)(()=>{let e=n&&Object.keys(n).length>0?{...n,ctx:n.ctx&&typeof n.ctx==`object`?{...n,...n.ctx}:{...n}}:n,i=r?new le(r):new le(e);if(r&&n&&Object.keys(n).length>0){let e=i.getRunner(),t=e.getEvaluator().getContext().toObject(),r=t&&typeof t.ctx==`object`?t.ctx:{},a=n.ctx&&typeof n.ctx==`object`?n.ctx:n,o={...n,ctx:{...r,...a}};e.updateContext(o)}return i.registerActions(t),i},[r,JSON.stringify(t),JSON.stringify(n)]);return{getActionsForLocation:(0,I.useCallback)(e=>i.getActionsForLocation(e),[i]),getBulkActions:(0,I.useCallback)(()=>i.getBulkActions(),[i]),executeAction:(0,I.useCallback)((e,t)=>i.executeAction(e,t),[i]),handleShortcut:(0,I.useCallback)(e=>i.handleShortcut(e),[i]),engine:i}}var Rt=(0,I.createContext)(null);function zt(){return(0,I.useContext)(Rt)}var Bt=(0,I.createContext)(null);function Vt(){return(0,I.useContext)(Bt)||{apps:[],objects:[],dashboards:[],reports:[],pages:[],loading:!1,error:null,refresh:async()=>{},invalidate:()=>{},ensureType:async()=>[],getItem:async()=>null,getItemsByType:()=>[]}}function Ht(e,t){let{getItem:n}=Vt(),[r,i]=(0,I.useState)({item:null,loading:!!t,error:null});return(0,I.useEffect)(()=>{if(!t){i({item:null,loading:!1,error:null});return}let r=!1;return i(e=>({...e,loading:!0,error:null})),n(e,t).then(e=>{r||i({item:e,loading:!1,error:null})}).catch(e=>{r||i({item:null,loading:!1,error:e instanceof Error?e:Error(String(e))})}),()=>{r=!0}},[e,t,n]),r}function Ut(e,t){return!0}function Wt(e,t={}){let n=Vt(),[r,i]=(0,I.useState)(!1),[a,o]=(0,I.useState)(null);(0,I.useEffect)(()=>{let e=!1;if(!n.ensureType){i(!0);return}return n.ensureType(`page`).then(()=>{e||(i(!0),o(null))}).catch(t=>{e||(o(t instanceof Error?t:Error(String(t))),i(!0))}),()=>{e=!0}},[n]);let s=(0,I.useMemo)(()=>{if(!e&&!t.pageName)return null;let r=Array.isArray(n.pages)?n.pages:[];if(!r.length)return null;if(t.pageName)return r.find(e=>e?.name===t.pageName)??null;let i=r.filter(n=>!n||(n.pageType??(n.type===`record`?`record`:void 0))!==`record`||n.object!==e?!1:Ut(n,t));return i.length?(i.sort((e,t)=>(t?.priority??0)-(e?.priority??0)),i[0]):null},[n.pages,e,t.pageName,t.recordType,t.profile,t.app,t.formFactor]),{page:c,slots:l}=(0,I.useMemo)(()=>s?s.kind===`slotted`?{page:null,slots:s.slots??{}}:{page:s,slots:null}:{page:null,slots:null},[s]);return{page:c,slots:l,loading:n.loading||!r,error:a??n.error??null}}function Gt(e,t){let n=e?.titleFormat;if(n&&typeof n==`string`){let e=n.replace(/\{\{\s*([\w.]+)\s*\}\}/g,(e,n)=>{let r=n.split(`.`).reduce((e,t)=>e==null?e:e[t],t);return r==null?``:String(r)}).trim();if(e.length>0)return e}return t?.name||t?.full_name||t?.fullName||t?.title||t?.label||t?.subject||t?.id||t?._id||`Untitled`}function Kt(e,t,n){if(!e)return 0;let r=e.toLowerCase(),i=(t||``).toLowerCase();return(n||``).toLowerCase()===r?110:i===r?100:i.startsWith(r)?80:i.split(/[\s_\-/.,:;()[\]]+/).filter(Boolean).some(e=>e.startsWith(r))?60:i.includes(r)?40:0}function qt(e){let{query:t,objects:n,dataSource:r,objectNames:i,maxObjectsQueried:a=8,topPerObject:o=3,minLength:s=2,debounceMs:c=250,enabled:l=!0,getDisplayName:u=Gt}=e,[d,f]=(0,I.useState)([]),[p,m]=(0,I.useState)(!1),[h,g]=(0,I.useState)(void 0),_=(0,I.useMemo)(()=>{if(!Array.isArray(n)||n.length===0)return[];let e=n;if(Array.isArray(i)&&i.length>0){let t=new Map;for(let e of n){let n=e?.name;typeof n==`string`&&t.set(n,e)}e=i.map(e=>t.get(e)).filter(e=>e!=null)}else e=n.filter(e=>e?.searchable!==!1);return e.slice(0,a)},[n,i,a]),v=(0,I.useMemo)(()=>_.map(e=>`${e?.name}:${e?.titleField??``}`).join(`|`),[_]),y=(0,I.useRef)(0);return(0,I.useEffect)(()=>{if(!l||!r||_.length===0){f([]),m(!1),g(void 0);return}let e=(t??``).trim();if(e.length<s){f([]),m(!1),g(void 0);return}let n=++y.current;m(!0),g(void 0);let i=setTimeout(()=>{if(y.current!==n)return;let t=_.map(t=>Promise.resolve().then(()=>r.find(t.name,{$search:e,$top:o})).then(e=>({obj:t,res:e,err:null})).catch(e=>({obj:t,res:null,err:e})));Promise.allSettled(t).then(t=>{if(y.current!==n)return;let r=[],i;for(let n of t){if(n.status!==`fulfilled`)continue;let{obj:t,res:a,err:s}=n.value;if(s){let e=s?.httpStatus??s?.status,t=s?.code;if(e===404||t===`object_not_found`)continue;i=s instanceof Error?s:Error(String(s));continue}let c=Array.isArray(a?.data)?a.data:Array.isArray(a)?a:[];for(let n of c.slice(0,o)){let i=n?.id??n?._id;if(i==null)continue;let a=u(t,n);r.push({objectName:t.name,objectLabel:typeof t.label==`string`&&t.label.length>0?t.label:t.name,recordId:String(i),display:a,icon:t?.icon,score:Kt(e,a,String(i)),raw:n})}}r.sort((e,t)=>t.score-e.score),f(r),m(!1),g(i)})},c);return()=>{clearTimeout(i)}},[t,l,r,v,o,s,c,u]),{results:d,isSearching:p,error:h}}(0,I.createContext)(null);var Jt=(0,I.createContext)(null),Yt=({children:e,config:t={},onDragStart:n,onDrop:r,onDragCancel:i})=>{let a=(0,I.useMemo)(()=>({enabled:!0,showPreview:!0,autoScroll:!0,...t}),[JSON.stringify(t)]),[o,s]=(0,I.useState)(null),[c]=(0,I.useState)(()=>new Map),l=(0,I.useCallback)(e=>{a.enabled&&(s(e),n?.({item:e,targetZoneId:null,effect:`move`}))},[a.enabled,n]),u=(0,I.useCallback)(e=>{if(!o)return;let t=(e?c.get(e):void 0)?.effect??`move`;r?.({item:o,targetZoneId:e??null,effect:t}),s(null)},[o,c,r]),d=(0,I.useCallback)(()=>{o&&(i?.({item:o,targetZoneId:null,effect:`none`}),s(null))},[o,i]),f=(0,I.useCallback)(e=>{c.set(e.id,e)},[c]),p=(0,I.useCallback)(e=>{c.delete(e)},[c]),m=(0,I.useCallback)((e,t)=>{let n=c.get(e);return!n||n.disabled?!1:n.acceptTypes.includes(t)},[c]),h=(0,I.useMemo)(()=>({config:a,enabled:a.enabled??!0,activeItem:o,dropZones:c,startDrag:l,endDrag:u,cancelDrag:d,registerDropZone:f,unregisterDropZone:p,canDrop:m}),[a,o,c,l,u,d,f,p,m]);return(0,L.jsx)(Jt.Provider,{value:h,children:e})};Yt.displayName=`DndProvider`;function Xt(){let e=(0,I.useContext)(Jt);if(!e)throw Error(`useDnd must be used within a <DndProvider>. Wrap your app with <DndProvider> to use the drag and drop system.`);return e}function Zt(){return(0,I.useContext)(Jt)!==null}var Qt=I.createContext(null),$t=({children:e})=>{let t=I.useMemo(()=>{let e=new Map,t=an,n=new Set,r=()=>{let r=new Set;for(let t of e.values())for(let e of t)r.add(e);if(r.size===t.size){let e=!0;for(let n of r)if(!t.has(n)){e=!1;break}if(e)return}t=r,n.forEach(e=>e())};return{getNames:()=>t,subscribe:e=>(n.add(e),()=>{n.delete(e)}),register:(t,n)=>{let i=e.get(t);i&&i.length===n.length&&i.every((e,t)=>e===n[t])||(e.set(t,[...n]),r())},unregister:t=>{e.delete(t)&&r()}}},[]);return(0,L.jsx)(Qt.Provider,{value:t,children:e})};function en(){let e=I.useContext(Qt);return I.useSyncExternalStore(e?e.subscribe:nn,e?e.getNames:rn,e?e.getNames:rn)}function tn(e,t){let n=I.useContext(Qt),r=t.join(`|`);I.useEffect(()=>{if(n)return n.register(e,r.length===0?[]:r.split(`|`)),()=>n.unregister(e)},[n,e,r])}var nn=e=>()=>{},rn=()=>an,an=new Set,on=I.createContext(null),sn=({children:e,...t})=>{let n=I.useMemo(()=>t,[t.objectName,t.recordId,t.dataSource,t.data,t.objectSchema,t.loading,t.error,t.refresh,t.embedded,t.headerSystemActions,t.isFavorite,t.onToggleFavorite]);return(0,L.jsx)(on.Provider,{value:n,children:e})};function cn(){return I.useContext(on)}var ln=I.createContext(null),un=({children:e,...t})=>{let n=I.useMemo(()=>t,[t.items,t.onAddComment,t.onAddReply,t.onToggleReaction,t.mentionSuggestions,t.onUploadAttachments,t.loading,t.error]);return(0,L.jsx)(ln.Provider,{value:n,children:e})};function dn(){return I.useContext(ln)}var fn=e=>e.type===`checkbox`,R=e=>e instanceof Date,z=e=>e==null,pn=e=>typeof e==`object`,B=e=>!z(e)&&!Array.isArray(e)&&pn(e)&&!R(e),mn=e=>B(e)&&e.target?fn(e.target)?e.target.checked:e.target.value:e,hn=(e,t)=>t.split(`.`).some((t,n,r)=>!isNaN(Number(t))&&e.has(r.slice(0,n).join(`.`))),gn=e=>{let t=e.constructor&&e.constructor.prototype;return B(t)&&t.hasOwnProperty(`isPrototypeOf`)},_n=typeof window<`u`&&window.HTMLElement!==void 0&&typeof document<`u`;function V(e){if(e instanceof Date)return new Date(e);let t=typeof FileList<`u`&&e instanceof FileList;if(_n&&(e instanceof Blob||t))return e;let n=Array.isArray(e);if(!n&&!(B(e)&&gn(e)))return e;let r=n?[]:Object.create(Object.getPrototypeOf(e));for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[t]=V(e[t]));return r}var H={BLUR:`blur`,FOCUS_OUT:`focusout`,CHANGE:`change`,SUBMIT:`submit`,TRIGGER:`trigger`,VALID:`valid`},U={onBlur:`onBlur`,onChange:`onChange`,onSubmit:`onSubmit`,onTouched:`onTouched`,all:`all`},W={max:`max`,min:`min`,maxLength:`maxLength`,minLength:`minLength`,pattern:`pattern`,required:`required`,validate:`validate`},vn=`form`,yn=`root`,bn=[`__proto__`,`constructor`,`prototype`],xn=e=>/^\w*$/.test(e),G=e=>e===void 0,Sn=e=>e.split(/[.[\]'"]/g).filter(Boolean),K=(e,t,n)=>{if(!t||!B(e))return n;let r=xn(t)?[t]:Sn(t);if(r.some(e=>bn.includes(e)))return n;let i=r.reduce((e,t)=>z(e)?void 0:e[t],e);return G(i)||i===e?G(e[t])?n:e[t]:i},q=e=>typeof e==`boolean`,J=e=>typeof e==`function`,Y=(e,t,n)=>{let r=-1,i=xn(t)?[t]:Sn(t),a=i.length,o=a-1;for(;++r<a;){let t=i[r],a=n;if(r!==o){let n=e[t];a=B(n)||Array.isArray(n)?n:isNaN(+i[r+1])?{}:[]}if(bn.includes(t))return;e[t]=a,e=e[t]}},Cn=I.createContext(null);Cn.displayName=`HookFormControlContext`;var wn=()=>I.useContext(Cn),Tn=(e,t,n,r=!0)=>{let i={};for(let a in e)Object.defineProperty(i,a,{get:()=>{let i=a;return t._proxyFormState[i]!==U.all&&(t._proxyFormState[i]=!r||U.all),n&&(n[i]=!0),e[i]}});return i},En=_n?I.useLayoutEffect:I.useEffect;function Dn(e){let t=wn(),{control:n=t,disabled:r,name:i,exact:a}=e||{},[o,s]=I.useState(()=>({...n._formState,defaultValues:n._defaultValues})),c=I.useRef({isDirty:!1,isLoading:!1,dirtyFields:!1,touchedFields:!1,validatingFields:!1,isValidating:!1,isValid:!1,errors:!1});return En(()=>n._subscribe({name:i,formState:c.current,exact:a,callback:e=>{!r&&s({...n._formState,...e,defaultValues:n._defaultValues})}}),[i,r,a]),I.useEffect(()=>{c.current.isValid&&n._setValid(!0)},[n]),I.useMemo(()=>Tn(o,n,c.current,!1),[o,n])}var X=e=>typeof e==`string`,On=(e,t,n,r,i)=>X(e)?(r&&t.watch.add(e),K(n,e,i)):Array.isArray(e)?e.map(e=>(r&&t.watch.add(e),K(n,e))):(r&&(t.watchAll=!0),n),kn=e=>z(e)||!pn(e);function Z(e,t,n=new WeakSet){if(e===t)return!0;if(kn(e)||kn(t))return Object.is(e,t);if(R(e)&&R(t))return Object.is(e.getTime(),t.getTime());let r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!1;if(n.has(e)||n.has(t))return!0;n.add(e),n.add(t);for(let i of r){let r=e[i];if(!(i in t))return!1;if(i!==`ref`){let e=t[i];if(R(r)&&R(e)||(B(r)||Array.isArray(r))&&(B(e)||Array.isArray(e))?!Z(r,e,n):!Object.is(r,e))return!1}}return!0}function An(e){let t=wn(),{control:n=t,name:r,defaultValue:i,disabled:a,exact:o,compute:s}=e||{},c=I.useRef(i),l=I.useRef(s),u=I.useRef(void 0),d=I.useRef(n),f=I.useRef(r);l.current=s;let[p,m]=I.useState(()=>{let e=n._getWatch(r,c.current);return l.current?l.current(e):e}),h=I.useCallback(e=>{let t=On(r,n._names,e||n._formValues,!1,c.current);return l.current?l.current(t):t},[n._formValues,n._names,r]),g=I.useCallback(e=>{if(!a){let t=On(r,n._names,e||n._formValues,!1,c.current);if(l.current){let e=l.current(t);Z(e,u.current)||(m(e),u.current=e)}else m(t)}},[n._formValues,n._names,a,r]);En(()=>((d.current!==n||!Z(f.current,r))&&(d.current=n,f.current=r,g()),n._subscribe({name:r,formState:{values:!0},exact:o,callback:e=>{g(e.values)}})),[n,o,r,g]),I.useEffect(()=>n._removeUnmounted());let _=d.current!==n,v=f.current,y=I.useMemo(()=>{if(a)return null;let e=!_&&!Z(v,r);return _||e?h():null},[a,_,r,v,h]);return y===null?p:y}function jn(e){let t=wn(),{name:n,disabled:r,control:i=t,shouldUnregister:a,defaultValue:o,exact:s=!0}=e,c=hn(i._names.array,n),l=An({control:i,name:n,defaultValue:I.useMemo(()=>K(i._formValues,n,K(i._defaultValues,n,o)),[i,n,o]),exact:s}),u=Dn({control:i,name:n,exact:s}),d=I.useRef(e),f=I.useRef(i.register(n,{...e.rules,value:l,...q(e.disabled)?{disabled:e.disabled}:{}}));d.current=e;let p=I.useMemo(()=>Object.defineProperties({},{invalid:{enumerable:!0,get:()=>!!K(u.errors,n)},isDirty:{enumerable:!0,get:()=>!!K(u.dirtyFields,n)},isTouched:{enumerable:!0,get:()=>!!K(u.touchedFields,n)},isValidating:{enumerable:!0,get:()=>!!K(u.validatingFields,n)},error:{enumerable:!0,get:()=>K(u.errors,n)}}),[u,n]),m=I.useCallback(e=>f.current.onChange({target:{value:mn(e),name:n},type:H.CHANGE}),[n]),h=I.useCallback(()=>f.current.onBlur({target:{value:K(i._formValues,n),name:n},type:H.BLUR}),[n,i._formValues]),g=I.useCallback(e=>{let t=K(i._fields,n);t&&t._f&&e&&(t._f.ref={focus:()=>J(e.focus)&&e.focus(),select:()=>J(e.select)&&e.select(),setCustomValidity:t=>J(e.setCustomValidity)&&e.setCustomValidity(t),reportValidity:()=>J(e.reportValidity)&&e.reportValidity()})},[i._fields,n]),_=I.useMemo(()=>({name:n,value:l,...q(r)||u.disabled?{disabled:u.disabled||r}:{},onChange:m,onBlur:h,ref:g}),[n,r,u.disabled,m,h,g,l]);return I.useEffect(()=>{let e=i._options.shouldUnregister||a;i.register(n,{...d.current.rules,...q(d.current.disabled)?{disabled:d.current.disabled}:{}});let t=(e,t)=>{let n=K(i._fields,e);n&&n._f&&(n._f.mount=t)};if(t(n,!0),e){let e=V(K(i._defaultValues,n,K(i._options.defaultValues,n,d.current.defaultValue)));Y(i._defaultValues,n,e),G(K(i._formValues,n))&&Y(i._formValues,n,e)}return!c&&i.register(n),()=>{(c?e&&!i._state.action:e)?i.unregister(n):t(n,!1)}},[n,i,c,a]),I.useEffect(()=>{i._setDisabledField({disabled:r,name:n})},[r,n,i]),I.useMemo(()=>({field:_,formState:u,fieldState:p}),[_,u,p])}var Mn=e=>e.render(jn(e)),Nn=I.createContext(null);Nn.displayName=`HookFormContext`;var Pn=()=>I.useContext(Nn),Fn=({children:e,watch:t,getValues:n,getFieldState:r,setError:i,clearErrors:a,setValue:o,setValues:s,trigger:c,formState:l,resetField:u,reset:d,handleSubmit:f,unregister:p,control:m,register:h,setFocus:g,subscribe:_})=>{let v=I.useMemo(()=>({watch:t,getValues:n,getFieldState:r,setError:i,clearErrors:a,setValue:o,setValues:s,trigger:c,formState:l,resetField:u,reset:d,handleSubmit:f,unregister:p,control:m,register:h,setFocus:g,subscribe:_}),[a,m,l,r,n,f,h,d,u,i,g,o,s,_,c,p,t]);return I.createElement(Nn.Provider,{value:v},I.createElement(Cn.Provider,{value:v.control},e))},In=(e,t,n,r,i)=>t?{...n[e],types:{...n[e]&&n[e].types?n[e].types:{},[r]:i||!0}}:{},Ln=e=>Array.isArray(e)?e.filter(Boolean):[],Rn=e=>Array.isArray(e)?e:[e],zn=()=>{let e=[];return{get observers(){return e},next:t=>{for(let n of e)n.next&&n.next(t)},subscribe:t=>(e.push(t),{unsubscribe:()=>{e=e.filter(e=>e!==t)}}),unsubscribe:()=>{e=[]}}};function Bn(e,t){let n={};for(let r in e)if(e.hasOwnProperty(r)){let i=e[r],a=t[r];if(i&&B(i)&&a){let e=Bn(i,a);B(e)&&(n[r]=e)}else e[r]&&(n[r]=a)}return n}var Q=e=>B(e)&&!Object.keys(e).length,Vn=e=>e.type===`file`,Hn=e=>{if(!_n)return!1;let t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},Un=e=>e.type===`select-multiple`,Wn=e=>e.type===`radio`,Gn=e=>Wn(e)||fn(e),Kn=e=>Hn(e)&&e.isConnected;function qn(e,t){let n=t.slice(0,-1).length,r=0;for(;r<n;){if(z(e)){e=void 0;break}e=e[t[r]],r++}return e}function Jn(e){for(let t in e)if(e.hasOwnProperty(t)&&!G(e[t]))return!1;return!0}function $(e,t){if(X(t)&&Object.prototype.hasOwnProperty.call(e,t))return delete e[t],e;let n=Array.isArray(t)?t:xn(t)?[t]:Sn(t),r=n.length===1?e:qn(e,n),i=n.length-1,a=n[i];return r&&delete r[a],i!==0&&(B(r)&&Q(r)||Array.isArray(r)&&Jn(r))&&$(e,n.slice(0,-1)),e}var Yn=e=>{for(let t in e)if(J(e[t]))return!0;return!1};function Xn(e){return Array.isArray(e)||B(e)&&!Yn(e)}function Zn(e,t={}){for(let n in e){let r=e[n];Xn(r)?(t[n]=Array.isArray(r)?[]:{},Zn(r,t[n])):G(r)||(t[n]=!0)}return t}function Qn(e){if(e!==!1){if(e===!0)return!0;if(Array.isArray(e)){let t=e.map(e=>Qn(e));return t.some(e=>e!==void 0)?t:void 0}if(B(e)){let t={};for(let n in e){let r=Qn(e[n]);G(r)||(t[n]=r)}return Object.keys(t).length?t:void 0}}}function $n(e,t,n){n||=Zn(t);for(let r in e){let i=e[r];if(Xn(i))G(t)||kn(n[r])?n[r]=Zn(i,Array.isArray(i)?[]:{}):$n(i,z(t)?{}:t[r],n[r]);else{let e=t[r];n[r]=!Z(i,e)}}return Qn(n)||{}}var er={value:!1,isValid:!1},tr={value:!0,isValid:!0},nr=e=>{if(Array.isArray(e)){if(e.length>1){let t=e.filter(e=>e&&e.checked&&!e.disabled).map(e=>e.value);return{value:t,isValid:!!t.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!G(e[0].attributes.value)?G(e[0].value)||e[0].value===``?tr:{value:e[0].value,isValid:!0}:tr:er}return er},rr=(e,{valueAsNumber:t,valueAsDate:n,setValueAs:r})=>G(e)?e:t?e===``?NaN:e&&+e:n&&X(e)?new Date(e):r?r(e):e,ir={isValid:!1,value:null},ar=e=>Array.isArray(e)?e.reduce((e,t)=>t&&t.checked&&!t.disabled?{isValid:!0,value:t.value}:e,ir):ir;function or(e){let t=e.ref;return Vn(t)?t.files:Wn(t)?ar(e.refs).value:Un(t)?[...t.selectedOptions].map(({value:e})=>e):fn(t)?nr(e.refs).value:rr(G(t.value)?e.ref.value:t.value,e)}var sr=(e,t,n,r)=>{let i={};for(let n of e){let e=K(t,n);e&&Y(i,n,e._f)}return{criteriaMode:n,names:[...e],fields:i,shouldUseNativeValidation:r}},cr=e=>e instanceof RegExp,lr=e=>G(e)?e:cr(e)?e.source:B(e)?cr(e.value)?e.value.source:e.value:e,ur=e=>({isOnSubmit:!e||e===U.onSubmit,isOnBlur:e===U.onBlur,isOnChange:e===U.onChange,isOnAll:e===U.all,isOnTouch:e===U.onTouched}),dr=`AsyncFunction`,fr=e=>!!e&&!!e.validate&&!!(J(e.validate)&&e.validate.constructor.name===dr||B(e.validate)&&Object.values(e.validate).find(e=>e.constructor.name===dr)),pr=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate),mr=(e,t,n)=>!n&&(t.watchAll||t.watch.has(e)||[...t.watch].some(t=>e.startsWith(`${t}.`))),hr=(e,t,n,r)=>{for(let i of n||Object.keys(e)){let n=K(e,i);if(n){let{_f:e,...a}=n;if(e){if(e.refs&&e.refs[0]&&t(e.refs[0],i)&&!r||e.ref&&t(e.ref,e.name)&&!r)return!0;if(hr(a,t))break}else if(B(a)&&hr(a,t))break}}};function gr(e,t,n){let r=K(e,n);if(r||xn(n))return{error:r,name:n};let i=n.split(`.`);for(;i.length;){let r=i.join(`.`),a=K(t,r),o=K(e,r);if(a&&!Array.isArray(a)&&n!==r)return{name:n};if(o&&o.type)return{name:r,error:o};if(o&&o.root&&o.root.type)return{name:`${r}.root`,error:o.root};i.pop()}return{name:n}}var _r=(e,t,n,r)=>{n(e);let{name:i,...a}=e;return Q(a)||r&&Object.keys(a).length>=Object.keys(t).length||Object.keys(a).find(e=>t[e]===(!r||U.all))},vr=(e,t,n)=>!e||!t||e===t||Rn(e).some(e=>e&&(n?e===t:e.startsWith(t)||t.startsWith(e))),yr=(e,t,n,r,i)=>i.isOnAll?!1:!n&&i.isOnTouch?!(t||e):(n?r.isOnBlur:i.isOnBlur)?!e:(n?r.isOnChange:i.isOnChange)?e:!0,br=(e,t)=>!Ln(K(e,t)).length&&$(e,t),xr=(e,t,n)=>{let r=K(e,n),i=Array.isArray(r)?r:[];return Y(i,yn,t[n]),Y(e,n,i),e};function Sr(e,t,n=`validate`){if(X(e)||Array.isArray(e)&&e.every(X)||q(e)&&!e)return{type:n,message:X(e)?e:``,ref:t}}var Cr=e=>B(e)&&!cr(e)?e:{value:e,message:``},wr=async(e,t,n,r,i,a)=>{let{ref:o,refs:s,required:c,maxLength:l,minLength:u,min:d,max:f,pattern:p,validate:m,name:h,valueAsNumber:g,mount:_}=e._f,v=K(n,h);if(!_||t.has(h))return{};let y=s?s[0]:o,b=e=>{i&&y.reportValidity&&(y.setCustomValidity(q(e)?``:e||``),y.reportValidity())},x={},S=Wn(o),C=fn(o),ee=S||C,w=(g||Vn(o))&&G(o.value)&&G(v)||Hn(o)&&o.value===``||v===``||Array.isArray(v)&&!v.length,T=In.bind(null,h,r,x),E=(e,t,n,r=W.maxLength,i=W.minLength)=>{let a=e?t:n;x[h]={type:e?r:i,message:a,ref:o,...T(e?r:i,a)}};if(a?!Array.isArray(v)||!v.length:c&&(!ee&&(w||z(v))||q(v)&&!v||C&&!nr(s).isValid||S&&!ar(s).isValid)){let{value:e,message:t}=X(c)?{value:!!c,message:c}:Cr(c);if(e&&(x[h]={type:W.required,message:t,ref:y,...T(W.required,t)},!r))return b(t),x}if(!w&&(!z(d)||!z(f))){let e,t,n=Cr(f),i=Cr(d);if(!z(v)&&!isNaN(v)){let r=o.valueAsNumber||v&&+v;z(n.value)||(e=r>n.value),z(i.value)||(t=r<i.value)}else{let r=o.valueAsDate||new Date(v),a=e=>new Date(new Date().toDateString()+` `+e),s=o.type==`time`,c=o.type==`week`;X(n.value)&&v&&(e=s?a(v)>a(n.value):c?v>n.value:r>new Date(n.value)),X(i.value)&&v&&(t=s?a(v)<a(i.value):c?v<i.value:r<new Date(i.value))}if((e||t)&&(E(!!e,n.message,i.message,W.max,W.min),!r))return b(x[h].message),x}if((l||u)&&!w&&(X(v)||a&&Array.isArray(v))){let e=Cr(l),t=Cr(u),n=!z(e.value)&&v.length>+e.value,i=!z(t.value)&&v.length<+t.value;if((n||i)&&(E(n,e.message,t.message),!r))return b(x[h].message),x}if(p&&!w&&X(v)){let{value:e,message:t}=Cr(p);if(cr(e)&&!v.match(e)&&(x[h]={type:W.pattern,message:t,ref:o,...T(W.pattern,t)},!r))return b(t),x}if(m){if(J(m)){let e=Sr(await m(v,n),y);if(e&&(x[h]={...e,...T(W.validate,e.message)},!r))return b(e.message),x}else if(B(m)){let e={};for(let t in m){if(!Q(e)&&!r)break;let i=Sr(await m[t](v,n),y,t);i&&(e={...i,...T(t,i.message)},b(i.message),r&&(x[h]=e))}if(!Q(e)&&(x[h]={ref:y,...e},!r))return x}}return b(!0),x},Tr={mode:U.onSubmit,reValidateMode:U.onChange,shouldFocusError:!0},Er={submitCount:0,isDirty:!1,isReady:!1,isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{}};function Dr(e={}){let t={...Tr,...e},n={...V(Er),isLoading:J(t.defaultValues),errors:t.errors||{},disabled:t.disabled||!1},r={},i=(B(t.defaultValues)||B(t.values))&&V(t.defaultValues||t.values)||{},a=t.shouldUnregister?{}:V(i),o={action:!1,mount:!1,watch:!1,keepIsValid:!1},s={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set,registerName:new Set},c,l=0,u={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},d={...u},f={...d},p={array:zn(),state:zn()},m=t.criteriaMode===U.all,h=e=>t=>{clearTimeout(l),l=setTimeout(e,t)},g=async e=>{if(!o.keepIsValid&&!t.disabled&&(d.isValid||f.isValid||e)){let e;t.resolver?(e=Q((await T()).errors),_()):e=await O({fields:r,onlyCheckValid:!0,eventType:H.VALID}),e!==n.isValid&&p.state.next({isValid:e})}},_=(e,r)=>{!t.disabled&&(d.isValidating||d.validatingFields||f.isValidating||f.validatingFields)&&((e||Array.from(s.mount)).forEach(e=>{e&&(r?Y(n.validatingFields,e,r):$(n.validatingFields,e))}),p.state.next({validatingFields:n.validatingFields,isValidating:!Q(n.validatingFields)}))},v=()=>{n.dirtyFields=$n(i,a)},y=(e,i=[],s,c,l=!0,u=!0)=>{if(c&&s&&!t.disabled){if(o.action=!0,u&&Array.isArray(K(r,e))){let t=s(K(r,e),c.argA,c.argB);l&&Y(r,e,t)}if(u&&Array.isArray(K(n.errors,e))){let t=s(K(n.errors,e),c.argA,c.argB);l&&Y(n.errors,e,t),br(n.errors,e)}if((d.touchedFields||f.touchedFields)&&u&&Array.isArray(K(n.touchedFields,e))){let t=s(K(n.touchedFields,e),c.argA,c.argB);l&&Y(n.touchedFields,e,t)}(d.dirtyFields||f.dirtyFields)&&v(),p.state.next({name:e,isDirty:A(e,i),dirtyFields:n.dirtyFields,errors:n.errors,isValid:n.isValid})}else Y(a,e,i)},b=(e,t)=>{Y(n.errors,e,t),p.state.next({errors:n.errors})},x=e=>{n.errors=e,p.state.next({errors:n.errors,isValid:!1})},S=e=>{let t=xn(e)?[e]:Sn(e),n=a,r=i;for(let e=0;e<t.length-1;e++){let i=t[e];if(n=z(n)?n:n[i],r=z(r)?r:r[i],n===null&&r!==null)return!0}return!1},C=(e,t,s,c)=>{let l=K(r,e);if(l){if(S(e))return;let r=G(K(a,e)),u=K(a,e,G(s)?K(i,e):s);G(u)||c&&c.defaultChecked||t?Y(a,e,t?u:or(l._f)):M(e,u),o.mount&&!o.action&&(g(),r&&n.isDirty&&(d.isDirty||f.isDirty)&&(A()||(n.isDirty=!1,p.state.next({...n}))))}},ee=(e,r,o,s,c)=>{let l=!1,u=!1,m={name:e};if(!t.disabled){if(!o||s){(d.isDirty||f.isDirty)&&(u=n.isDirty,n.isDirty=m.isDirty=A(),l=u!==m.isDirty);let t=Z(K(i,e),r);u=!!K(n.dirtyFields,e),t===n.isDirty?t?$(n.dirtyFields,e):Y(n.dirtyFields,e,!0):n.dirtyFields=$n(i,a),m.dirtyFields=n.dirtyFields,l||=(d.dirtyFields||f.dirtyFields)&&u!==!t}if(o){let t=K(n.touchedFields,e);t||(Y(n.touchedFields,e,o),m.touchedFields=n.touchedFields,l||=(d.touchedFields||f.touchedFields)&&t!==o)}l&&c&&p.state.next(m)}return l?m:{}},w=(e,r,i,a)=>{let o=K(n.errors,e),s=(d.isValid||f.isValid)&&q(r)&&n.isValid!==r;if(t.delayError&&i?(c=h(()=>b(e,i)),c(t.delayError)):(clearTimeout(l),c=null,i?Y(n.errors,e,i):$(n.errors,e)),(i?!Z(o,i):o)||!Q(a)||s){let t={...a,...s&&q(r)?{isValid:r}:{},errors:n.errors,name:e};n={...n,...t},p.state.next(t)}},T=async e=>(_(e,!0),await t.resolver(a,t.context,sr(e||s.mount,r,t.criteriaMode,t.shouldUseNativeValidation))),E=async e=>{let{errors:t}=await T(e);if(_(e),e)for(let r of e){let e=K(t,r);e?s.array.has(r)&&B(e)&&!Object.keys(e).some(e=>!Number.isNaN(Number(e)))?xr(n.errors,{[r]:e},r):Y(n.errors,r,e):$(n.errors,r)}else n.errors=t;return t},D=async({name:t,eventType:r})=>{if(e.validate){let i=await e.validate({formValues:a,formState:n,name:t,eventType:r});if(B(i))for(let e in i){let t=i[e];t&&de(`${vn}.${e}`,{message:X(t.message)?t.message:``,type:t.type||W.validate})}else X(i)||!i?de(vn,{message:i||``,type:W.validate}):N(vn);return i}return!0},O=async({fields:r,onlyCheckValid:i,name:o,eventType:c,context:l={valid:!0,runRootValidation:!1}})=>{if(e.validate&&(l.runRootValidation=!0,!await D({name:o,eventType:c})&&(l.valid=!1,i)))return l.valid;for(let o in r){let u=r[o];if(u){let{_f:r,...p}=u;if(r){let o=s.array.has(r.name),c=u._f&&fr(u._f),p=d.validatingFields||d.isValidating||f.validatingFields||f.isValidating;c&&p&&_([r.name],!0);let h=await wr(u,s.disabled,a,m,t.shouldUseNativeValidation&&!i,o);if(c&&p&&_([r.name]),h[r.name]&&(l.valid=!1,i)||(!i&&(K(h,r.name)?o?xr(n.errors,h,r.name):Y(n.errors,r.name,h[r.name]):$(n.errors,r.name)),e.shouldUseNativeValidation&&h[r.name]))break}!Q(p)&&await O({context:l,onlyCheckValid:i,fields:p,name:o,eventType:c})}}return l.valid},k=()=>{for(let e of s.unMount){let t=K(r,e);t&&(t._f.refs?t._f.refs.every(e=>!Kn(e)):!Kn(t._f.ref))&&he(e)}s.unMount=new Set},A=(e,n)=>!t.disabled&&(e&&n&&Y(a,e,n),!Z(le(),i)),j=(e,t,n)=>On(e,s,{...o.mount?a:G(t)?i:X(e)?{[e]:t}:t},n,t),te=e=>Ln(K(o.mount?a:i,e,t.shouldUnregister?K(i,e,[]):[])),M=(e,t,n={},i=!1)=>{let o=K(r,e),s=t;if(o){let n=o._f;n&&(!n.disabled&&Y(a,e,rr(t,n)),s=Hn(n.ref)&&z(t)?``:t,Un(n.ref)?[...n.ref.options].forEach(e=>e.selected=s.includes(e.value)):n.refs?fn(n.ref)?n.refs.forEach(e=>{(!e.defaultChecked||!e.disabled)&&(Array.isArray(s)?e.checked=!!s.find(t=>t===e.value):e.checked=s===e.value||!!s)}):n.refs.forEach(e=>e.checked=e.value===s):Vn(n.ref)?n.ref.value=``:(n.ref.value=s,n.ref.type||p.state.next({name:e,values:i?a:V(a)})))}(n.shouldDirty||n.shouldTouch)&&ee(e,s,n.shouldTouch,n.shouldDirty,!0),n.shouldValidate&&ce(e)},ne=(e,t,n,i=!1)=>{for(let a in t){if(!t.hasOwnProperty(a))return;let o=t[a],c=e+`.`+a,l=K(r,c);(s.array.has(e)||B(o)||l&&!l._f)&&!R(o)?ne(c,o,n,i):M(c,o,n,i)}},re=(e,t,i,c)=>{let l=K(r,e),u=s.array.has(e),m=c?t:V(t),h=Z(K(a,e),m);if(h||Y(a,e,m),u)p.array.next({name:e,values:c?a:V(a)}),(d.isDirty||d.dirtyFields||f.isDirty||f.dirtyFields)&&i.shouldDirty&&(v(),p.state.next({name:e,dirtyFields:n.dirtyFields,isDirty:A(e,m)}));else{let t=Array.isArray(m)&&!m.length||Q(m);!l||l._f||z(m)||t?M(e,m,i,c):ne(e,m,i,c)}if(!h){let t=mr(e,s),r=c?a:V(a);p.state.next({...t&&n,name:o.mount||t?e:void 0,values:r})}},ie=(e,t,n={})=>re(e,t,n,!1),ae=(e,t={})=>{let r=J(e)?e(a):e;if(!Z(a,r)){a={...a,...r};for(let e of s.mount)re(e,K(r,e),t,!0);p.state.next({...n,name:void 0,type:void 0,values:a}),t.shouldValidate&&g()}},oe=async i=>{o.mount=!0;let l=i.target,u=l.name,h=!0,v=K(r,u),y=e=>{h=Number.isNaN(e)||R(e)&&isNaN(e.getTime())||Z(e,K(a,u,e))},b=ur(t.mode),x=ur(t.reValidateMode);if(v){let o,S,C=l.type?or(v._f):mn(i),E=i.type===H.BLUR||i.type===H.FOCUS_OUT,k=!pr(v._f)&&!e.validate&&!t.resolver&&!K(n.errors,u)&&!v._f.deps||yr(E,K(n.touchedFields,u),n.isSubmitted,x,b),A=mr(u,s,E);Y(a,u,C),E?(!l||!l.readOnly)&&(v._f.onBlur&&v._f.onBlur(i),c&&c(0)):v._f.onChange&&v._f.onChange(i);let j=ee(u,C,E),te=!Q(j)||A;if(!E&&p.state.next({name:u,type:i.type,values:V(a)}),k)return(d.isValid||f.isValid)&&(t.mode===`onBlur`?E&&g():E||g()),te&&p.state.next({name:u,...A?{}:j});if(!t.resolver&&e.validate&&await D({name:u,eventType:i.type}),!E&&A&&p.state.next({...n}),t.resolver){let{errors:e}=await T([u]);if(_([u]),y(C),h){let t=gr(n.errors,r,u),i=gr(e,r,t.name||u);o=i.error,u=i.name,S=Q(e)}}else _([u],!0),o=(await wr(v,s.disabled,a,m,t.shouldUseNativeValidation))[u],_([u]),y(C),h&&(o?S=!1:(d.isValid||f.isValid)&&(S=await O({fields:r,onlyCheckValid:!0,name:u,eventType:i.type})));h&&(v._f.deps&&(!Array.isArray(v._f.deps)||v._f.deps.length>0)&&ce(v._f.deps),w(u,S,o,j))}},se=(e,t)=>{if(K(n.errors,t)&&e.focus)return e.focus(),1},ce=async(e,i={})=>{let a,o,c=Rn(e);if(t.resolver){let t=await E(G(e)?e:c);a=Q(t),o=e?!c.some(e=>K(t,e)):a}else e?(o=(await Promise.all(c.map(async e=>{let t=K(r,e);return await O({fields:t&&t._f?{[e]:t}:t,eventType:H.TRIGGER})}))).every(Boolean),!(!o&&!n.isValid)&&g()):o=a=await O({fields:r,name:e,eventType:H.TRIGGER});return p.state.next({...!X(e)||(d.isValid||f.isValid)&&a!==n.isValid?{}:{name:e},...t.resolver||!e?{isValid:a}:{},errors:n.errors}),i.shouldFocus&&!o&&hr(r,se,e?c:s.mount),o},le=(e,t)=>{let r={...o.mount?a:i};return t&&(r=Bn(t.dirtyFields?n.dirtyFields:n.touchedFields,r)),G(e)?r:X(e)?K(r,e):e.map(e=>K(r,e))},ue=(e,t)=>({invalid:!!K((t||n).errors,e),isDirty:!!K((t||n).dirtyFields,e),error:K((t||n).errors,e),isValidating:!!K(n.validatingFields,e),isTouched:!!K((t||n).touchedFields,e)}),N=e=>{let t=e?Rn(e):void 0;t?.forEach(e=>$(n.errors,e)),t?t.forEach(e=>{p.state.next({name:e,errors:n.errors})}):p.state.next({errors:{}})},de=(e,t,i)=>{let a=(K(r,e,{_f:{}})._f||{}).ref,{ref:o,message:s,type:c,...l}=K(n.errors,e)||{};Y(n.errors,e,{...l,...t,ref:a}),p.state.next({name:e,errors:n.errors,isValid:!1}),i&&i.shouldFocus&&a&&a.focus&&a.focus()},fe=(e,t)=>J(e)?p.state.subscribe({next:n=>`values`in n&&e(n.values||j(void 0,t),n)}):j(e,t,!0),pe=e=>p.state.subscribe({next:t=>{if(vr(e.name,t.name,e.exact)&&_r(t,e.formState||d,Ce,e.reRenderRoot)){let r={...a};e.callback({values:r,...n,...t,defaultValues:i})}}}).unsubscribe,me=e=>(o.mount=!0,f={...f,...e.formState},pe({...e,formState:{...u,...e.formState}})),he=(e,o={})=>{for(let c of e?Rn(e):s.mount)s.mount.delete(c),s.array.delete(c),o.keepValue||($(r,c),$(a,c)),!o.keepError&&$(n.errors,c),!o.keepDirty&&$(n.dirtyFields,c),!o.keepTouched&&$(n.touchedFields,c),!o.keepIsValidating&&$(n.validatingFields,c),!t.shouldUnregister&&!o.keepDefaultValue&&$(i,c);p.state.next({values:V(a)}),p.state.next({...n,...o.keepDirty?{isDirty:A()}:{}}),!o.keepIsValid&&g()},ge=({disabled:e,name:t})=>{if(q(e)&&o.mount||e||s.disabled.has(t)){let n=s.disabled.has(t)!==!!e;e?s.disabled.add(t):s.disabled.delete(t),n&&o.mount&&!o.action&&g()}},_e=(e,n={})=>{let a=K(r,e),c=q(n.disabled)||q(t.disabled),l=!s.registerName.has(e)&&a&&a._f&&!a._f.mount;return Y(r,e,{...a||{},_f:{...a&&a._f?a._f:{ref:{name:e}},name:e,mount:!0,...n}}),s.mount.add(e),a&&!l?ge({disabled:q(n.disabled)?n.disabled:t.disabled,name:e}):C(e,!0,n.value),{...c?{disabled:n.disabled||t.disabled}:{},...t.progressive?{required:!!n.required,min:lr(n.min),max:lr(n.max),minLength:lr(n.minLength),maxLength:lr(n.maxLength),pattern:lr(n.pattern)}:{},name:e,onChange:oe,onBlur:oe,ref:c=>{if(c){s.registerName.add(e),_e(e,n),s.registerName.delete(e),a=K(r,e);let t=G(c.value)&&c.querySelectorAll&&c.querySelectorAll(`input,select,textarea`)[0]||c,o=Gn(t),l=a._f.refs||[];if(o?l.find(e=>e===t):t===a._f.ref)return;Y(r,e,{_f:{...a._f,...o?{refs:[...l.filter(Kn),t,...Array.isArray(K(i,e))?[{}]:[]],ref:{type:t.type,name:e}}:{ref:t}}}),C(e,!1,void 0,t)}else a=K(r,e,{}),a._f&&(a._f.mount=!1),(t.shouldUnregister||n.shouldUnregister)&&!(hn(s.array,e)&&o.action)&&s.unMount.add(e)}}},P=()=>t.shouldFocusError&&!t.shouldUseNativeValidation&&hr(r,se,s.mount),ve=e=>{q(e)&&(p.state.next({disabled:e}),hr(r,(t,n)=>{let i=K(r,n);i&&(t.disabled=i._f.disabled||e,Array.isArray(i._f.refs)&&i._f.refs.forEach(t=>{t.disabled=i._f.disabled||e}))},0,!1))},ye=(e,i)=>async o=>{let c;o&&(o.preventDefault&&o.preventDefault(),o.persist&&o.persist());let l=V(a);if(p.state.next({isSubmitting:!0}),t.resolver){let{errors:e,values:t}=await T();_(),n.errors=e,l=V(t)}else await O({fields:r,eventType:H.SUBMIT});if(s.disabled.size)for(let e of s.disabled)$(l,e);if($(n.errors,yn),Q(n.errors)){p.state.next({errors:{}});try{await e(l,o)}catch(e){c=e}}else i&&await i({...n.errors},o),P(),setTimeout(P);if(p.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:Q(n.errors)&&!c,submitCount:n.submitCount+1,errors:n.errors}),c)throw c},be=(e,t={})=>{K(r,e)&&(G(t.defaultValue)?ie(e,V(K(i,e))):(ie(e,t.defaultValue),Y(i,e,V(t.defaultValue))),t.keepTouched||$(n.touchedFields,e),t.keepDirty||($(n.dirtyFields,e),n.isDirty=t.defaultValue?A(e,V(K(i,e))):A()),t.keepError||($(n.errors,e),d.isValid&&g()),p.state.next({...n}))},F=(e,c={})=>{let l=e?V(e):i,u=V(l),f=Q(e),m=u;if(c.keepDefaultValues||(i=l),!c.keepValues){if(c.keepDirtyValues){let e=new Set([...s.mount,...Object.keys($n(i,a))]);for(let t of Array.from(e)){let e=K(n.dirtyFields,t),r=K(a,t),i=K(m,t);e&&!G(r)?Y(m,t,r):!e&&!G(i)&&ie(t,i)}}else{if(_n&&G(e))for(let e of s.mount){let t=K(r,e);if(t&&t._f){let e=Array.isArray(t._f.refs)?t._f.refs[0]:t._f.ref;if(Hn(e)){let t=e.closest(`form`);if(t){t.reset();break}}}}if(c.keepFieldsRef)for(let e of s.mount)ie(e,K(m,e));else r={}}if(t.shouldUnregister){if(a=c.keepDefaultValues?V(i):{},c.keepFieldsRef)for(let e of s.mount)Y(a,e,K(m,e))}else a=V(m);p.array.next({values:{...m}}),p.state.next({values:{...m}})}s={mount:c.keepDirtyValues?s.mount:new Set,unMount:new Set,array:new Set,registerName:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:``},o.mount=!d.isValid||!!c.keepIsValid||!!c.keepDirtyValues||!t.shouldUnregister&&!Q(m),o.watch=!!t.shouldUnregister,o.keepIsValid=!!c.keepIsValid,o.action=!1,c.keepErrors||(n.errors={}),p.state.next({submitCount:c.keepSubmitCount?n.submitCount:0,isDirty:f?!1:c.keepDirty?n.isDirty:c.keepValues?A():!!(c.keepDefaultValues&&!Z(e,i)),isSubmitted:c.keepIsSubmitted?n.isSubmitted:!1,dirtyFields:f?{}:c.keepDirtyValues?c.keepDefaultValues&&a?$n(i,a):n.dirtyFields:c.keepDefaultValues&&e?$n(i,e):c.keepDirty?n.dirtyFields:{},touchedFields:c.keepTouched?n.touchedFields:{},errors:c.keepErrors?n.errors:{},isSubmitSuccessful:c.keepIsSubmitSuccessful?n.isSubmitSuccessful:!1,isSubmitting:!1,defaultValues:i})},xe=(e,n)=>F(J(e)?e(a):e,{...t.resetOptions,...n}),Se=(e,t={})=>{let n=K(r,e),i=n&&n._f;if(i){let e=i.refs?i.refs[0]:i.ref;e.focus&&setTimeout(()=>{e.focus(),t.shouldSelect&&J(e.select)&&e.select()})}},Ce=e=>{n={...n,...e}},we={control:{register:_e,unregister:he,getFieldState:ue,handleSubmit:ye,setError:de,_subscribe:pe,_runSchema:T,_updateIsValidating:_,_focusError:P,_getWatch:j,_getDirty:A,_setValid:g,_setFieldArray:y,_setDisabledField:ge,_setErrors:x,_getFieldArray:te,_reset:F,_resetDefaultValues:()=>J(t.defaultValues)&&t.defaultValues().then(e=>{xe(e,t.resetOptions),p.state.next({isLoading:!1})}),_removeUnmounted:k,_disableForm:ve,_subjects:p,_proxyFormState:d,get _fields(){return r},get _formValues(){return a},get _state(){return o},set _state(e){o=e},get _defaultValues(){return i},get _names(){return s},set _names(e){s=e},get _formState(){return n},get _options(){return t},set _options(e){t={...t,...e}}},subscribe:me,trigger:ce,register:_e,handleSubmit:ye,watch:fe,setValue:ie,setValues:ae,getValues:le,reset:xe,resetField:be,resetDefaultValues:(e,t={})=>{if(i=V(e),!t.keepDirty){let e=$n(i,a);n.dirtyFields=e,n.isDirty=!Q(e)}t.keepIsValid||g(),p.state.next({...n,defaultValues:i})},clearErrors:N,unregister:he,setError:de,setFocus:Se,getFieldState:ue};return{...we,formControl:we}}function Or(e={}){let t=I.useRef(void 0),n=I.useRef(void 0),[r,i]=I.useState(()=>({...V(Er),isLoading:J(e.defaultValues),errors:e.errors||{},disabled:e.disabled||!1,defaultValues:J(e.defaultValues)?void 0:e.defaultValues}));if(!t.current)if(e.formControl)t.current={...e.formControl,formState:r},e.defaultValues&&!J(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{let{formControl:n,...i}=Dr(e);t.current={...i,formState:r}}let a=t.current.control;return a._options=e,En(()=>{let e=a._subscribe({formState:a._proxyFormState,callback:()=>i({...a._formState,defaultValues:a._defaultValues}),reRenderRoot:!0});return i(e=>({...e,isReady:!0})),a._formState.isReady=!0,e},[a]),I.useEffect(()=>a._disableForm(e.disabled),[a,e.disabled]),I.useEffect(()=>{e.mode&&(a._options.mode=e.mode),e.reValidateMode&&(a._options.reValidateMode=e.reValidateMode)},[a,e.mode,e.reValidateMode]),I.useEffect(()=>{e.errors&&(a._setErrors(e.errors),a._focusError())},[a,e.errors]),I.useEffect(()=>{e.shouldUnregister&&a._subjects.state.next({values:a._getWatch()})},[a,e.shouldUnregister]),I.useEffect(()=>{if(a._proxyFormState.isDirty){let e=a._getDirty();e!==r.isDirty&&a._subjects.state.next({isDirty:e})}},[a,r.isDirty]),I.useEffect(()=>{e.values&&!Z(e.values,n.current)?(a._reset(e.values,{keepFieldsRef:!0,...a._options.resetOptions}),a._options.resetOptions?.keepIsValid||a._setValid(),n.current=e.values,i(e=>({...e}))):a._resetDefaultValues()},[a,e.values]),I.useEffect(()=>{a._state.mount||(a._setValid(),a._state.mount=!0),a._state.watch&&(a._state.watch=!1,a._subjects.state.next({...a._formState})),a._removeUnmounted()}),t.current.formState=I.useMemo(()=>Tn(r,a),[a,r]),t.current}var kr={en:{common:{loading:`Loading...`,save:`Save`,cancel:`Cancel`,delete:`Delete`,edit:`Edit`,create:`Create`,search:`Search`,filter:`Filter`,reset:`Reset`,confirm:`Confirm`,close:`Close`,back:`Back`,next:`Next`,previous:`Previous`,submit:`Submit`,refresh:`Refresh`,export:`Export`,import:`Import`,yes:`Yes`,no:`No`,ok:`OK`,actions:`Actions`,more:`More`,selectAll:`Select All`,clearAll:`Clear All`,addToFavorites:`Add to favorites`,removeFromFavorites:`Remove from favorites`,noData:`No data`,noResults:`No results found`,required:`Required`,optional:`Optional`,selectOption:`Select an option`,select:`Select...`,openChat:`Open chat`,closeChat:`Close chat`,toggleSidebar:`Toggle sidebar`},validation:{required:`{{field}} is required`,minLength:`{{field}} must be at least {{min}} characters`,maxLength:`{{field}} must be at most {{max}} characters`,min:`{{field}} must be at least {{min}}`,max:`{{field}} must be at most {{max}}`,email:`Please enter a valid email address`,url:`Please enter a valid URL`,pattern:`{{field}} format is invalid`,unique:`{{field}} must be unique`,type:`{{field}} must be a valid {{type}}`},form:{addItem:`Add item`,removeItem:`Remove item`,fieldRequired:`This field is required`,invalidFormat:`Invalid format`,saveSuccess:`Saved successfully`,saveError:`Failed to save`,unsavedChanges:`You have unsaved changes. Are you sure you want to leave?`,stepOf:`Step {{current}} of {{total}}`,createTitle:`Create {{object}}`,editTitle:`Edit {{object}}`,createDescription:`Add a new {{object}} to your database.`,editDescription:`Update details for {{object}}`,saveRecord:`Save`,create:`Create`,update:`Update`,createSuccess:`{{object}} created successfully`,updateSuccess:`{{object}} updated successfully`,deleteSuccess:`{{object}} deleted successfully`},fields:{richText:{format:`Format: {{format}}`,basicEditorHint:`Rich text editor (basic)`,placeholder:`Enter text...`}},table:{rowsPerPage:`Rows per page`,showing:`Showing {{from}} to {{to}} of {{total}}`,noRows:`No rows to display`,sortAsc:`Sort ascending`,sortDesc:`Sort descending`,filterColumn:`Filter {{column}}`,columns:`Columns`,exportCSV:`Export CSV`,exportExcel:`Export Excel`,selectRow:`Select row`,selectAllRows:`Select all rows`,expandRow:`Expand row`,collapseRow:`Collapse row`,hideColumn:`Hide column`,freezeColumn:`Freeze column`,unfreezeColumn:`Unfreeze column`,pageInfo:`Page {{current}} of {{total}}`,totalRecords:`{{count}} total`,noResults:`No results found`,noResultsHint:`Try adjusting your filters or search query.`,cancelAll:`Cancel All`,saveAll:`Save All ({{count}})`,addRecord:`Add record`,open:`Open`,search:`Search...`,modified:`{{count}} row modified`,selected:`{{count}} selected`,edit:`Edit`,delete:`Delete`},grid:{actions:`Actions`,edit:`Edit`,delete:`Delete`,export:`Export`,exportAs:`Export as {{format}}`,loading:`Loading grid...`,errorLoading:`Error loading grid`,pullToRefresh:`Pull to refresh`,refreshing:`Refreshing…`,openRecord:`Open record`,openMenu:`Open menu`,rowHeight:`Row height: {{mode}}`,empty:`Empty`,yes:`Yes`,no:`No`,systemFields:`System`,toolbar:{densityMode:`Density`,densityCompact:`Compact`,densityComfortable:`Comfortable`,densitySpacious:`Spacious`,densityCycleHint:`{{label}} (click to cycle)`,densityCycleShortHint:`Click to cycle`},import:{title:`Import {{object}}`,stepUpload:`Upload`,stepMapping:`Mapping`,stepPreview:`Preview`,uploadDescription:`Upload a CSV file to get started.`,mappingDescription:`Map CSV columns to object fields.`,previewDescription:`Review data before importing.`,dragDrop:`Drag & drop a CSV file here, or click to browse`,browseFiles:`Browse Files`,onlyCsv:`Only CSV files are supported.`,fileNeedsHeader:`File must contain a header row and at least one data row.`,mappingTemplate:`Mapping template:`,chooseTemplate:`Choose template…`,noSavedTemplates:`No saved templates`,noneOption:`— None —`,saveCurrent:`Save current`,templateName:`Template name`,save:`Save`,deleteTemplate:`Delete template`,csvColumn:`CSV Column`,mapsTo:`Maps To`,status:`Status`,skipColumn:`Skip column`,skip:`— Skip —`,mapped:`Mapped`,skipped:`Skipped`,rowsWithErrors:`{{count}} row(s) with errors`,rowsCorrected:`{{count}} row(s) corrected`,clickToFix:`— click a highlighted cell to fix it inline.`,showingRows:`Showing {{shown}} of {{total}} rows`,importing:`Importing… {{progress}}%`,importComplete:`Import Complete`,imported:`{{count}} imported`,skippedCount:`{{count}} skipped`,moreErrors:`…and {{count}} more errors`,cancel:`Cancel`,back:`Back`,next:`Next`,close:`Close`,importNRows:`Import {{count}} Rows`,importingProgress:`Importing…`,requiredMark:`*`,required:`Required`,invalidType:`Invalid {{type}}`}},calendar:{today:`Today`,month:`Month`,week:`Week`,day:`Day`,agenda:`Agenda`,allDay:`All Day`,noEvents:`No events`,newEvent:`New event`,moreEvents:`+{{count}} more`},list:{recordCount:`{{count}} records`,recordCountOne:`{{count}} record`,addRecord:`Add record`,tabs:`Tabs`,allRecords:`All Records`,search:`Search`,filter:`Filter`,filterRecords:`Filter Records`,sort:`Sort`,sortRecords:`Sort Records`,group:`Group`,groupBy:`Group By`,export:`Export`,exportAs:`Export as {{format}}`,color:`Color`,rowColor:`Row Color`,colorByField:`Color by field`,clear:`Clear`,none:`None`,hideFields:`Hide fields`,noItems:`No items found`,noItemsMessage:`There are no records to display. Try adjusting your filters or adding new data.`,showAll:`Show all`,pullToRefresh:`Pull to refresh`,refreshing:`Refreshing…`,share:`Share`,print:`Print`,hideFieldsTitle:`Hide Fields`,dataLimitReached:`Showing first {{limit}} records. More data may be available.`,viewSettings:`View settings`,viewSettingsHint:`Grouping, color, density, and visible fields.`,addGroup:`Add group field`,collapsedByDefault:`Collapsed by default`,removeGroup:`Remove`},kanban:{addCard:`Add card`,addColumn:`Add column`,moveCard:`Move card`,deleteCard:`Delete card`,deleteColumn:`Delete column`,noCards:`No cards`,cardTitlePlaceholder:`Enter card title...`},timeline:{bucket:{overdue:`Overdue`,today:`Today`,tomorrow:`Tomorrow`,thisWeek:`This week`,nextWeek:`Next week`,later:`Later`,noDate:`No date`,unassigned:`Unassigned`}},gantt:{column:{taskName:`Task Name`,start:`Start`,end:`End`},toolbar:{prevPeriod:`Previous period`,nextPeriod:`Next period`,zoomIn:`Zoom in`,zoomOut:`Zoom out`,jumpToToday:`Jump to today`,today:`Today`,showTaskList:`Show task list`,hideTaskList:`Hide task list`}},view:{rename:`Rename`,duplicateView:`Duplicate View`,shareView:`Share View`,setAsDefault:`Set as Default`,pinView:`Pin View`,unpinView:`Unpin View`,changeViewType:`Change View Type`,deleteView:`Delete View`,addView:`Add View`,unsavedChanges:`Unsaved changes`,saveAsView:`Save as View`,moreViews:`{{count}} more`,activeFilters:`Active filters`,activeSort:`Active sort`,manageViews:`Manage views`,manageAllViews:`Manage all views…`,searchViews:`Search views`,addNewView:`Add new view`,done:`Done`,noViewsFound:`No views match your search.`,dragToReorder:`Drag to reorder`,defaultView:`Default view`,tabActionsFor:`View actions for {{name}}`,readonlyAriaLabel:`Read-only view`,readonlyTooltip:`System view — duplicate to customize.`},detail:{back:`Back`,edit:`Edit`,editInline:`Edit`,save:`Save`,saveChanges:`Save changes`,saving:`Saving…`,editFieldsInline:`Edit fields`,lockedByApproval:`Locked for approval`,lockedTooltip:`This record has a pending approval request; editing is locked`,cancelApproval:`Recall approval`,cancelApprovalInFlight:`Recalling…`,cancelApprovalTooltip:`Recall the pending approval request to unlock this record`,cancelApprovalFailed:`Failed to recall approval`,cancelApprovalUnavailable:`Recalling approvals is not supported on this data source`,linkCopied:`Link copied to clipboard`,linkCopyFailed:`Failed to copy link`,cancel:`Cancel`,cancelEdit:`Discard changes`,sectionMoreDetails:`More details`,concurrentUpdateTitle:`This record was modified by someone else`,concurrentUpdateDescription:`Another user saved a newer version of {{field}} while you were editing. To prevent silently overwriting their change, please choose how to resolve the conflict.`,concurrentUpdateYourEdit:`Your edit`,concurrentUpdateCurrentValue:`Current value`,concurrentUpdateUpdatedBy:`Updated by {{name}}`,concurrentUpdateUpdatedAt:`Updated at {{when}}`,concurrentUpdateReload:`Reload latest`,concurrentUpdateOverwrite:`Overwrite anyway`,concurrentUpdateCancel:`Cancel`,openInNewTab:`Open in new tab`,share:`Share`,duplicate:`Duplicate`,export:`Export`,viewHistory:`View history`,delete:`Delete`,moreActions:`More actions`,addToFavorites:`Add to favorites`,removeFromFavorites:`Remove from favorites`,previousRecord:`Previous record`,nextRecord:`Next record`,recordOf:`{{current}} of {{total}}`,recordNotFound:`Record not found`,recordNotFoundDescription:`The record you are looking for does not exist or may have been deleted.`,goBack:`Go back`,details:`Details`,related:`Related`,relatedRecords:`{{count}} records`,relatedRecordOne:`{{count}} record`,noRelatedRecords:`No related records found`,loading:`Loading...`,copyToClipboard:`Copy to clipboard`,copied:`Copied!`,deleteConfirmation:`Are you sure you want to delete this record?`,editRecord:`Edit record`,viewAll:`View All`,new:`New`,emptyValue:`—`,activity:`Activity`,history:`History`,editRow:`Edit`,deleteRow:`Delete`,deleteRowConfirmation:`Are you sure you want to delete this record?`,deleteRowTitle:`Delete record`,actions:`Actions`,previousPage:`Previous`,nextPage:`Next`,pageOf:`Page {{current}} of {{total}}`,sortBy:`Sort by`,filterPlaceholder:`Filter...`,highlightFields:`Key Fields`,comments:`Comments`,searchComments:`Search comments…`,addCommentPlaceholder:`Add a comment… (Ctrl+Enter to submit)`,noMatchingComments:`No matching comments`,noCommentsYet:`No comments yet`,pinned:`Pinned`,pin:`Pin`,unpin:`Unpin`,justNow:`just now`,minutesAgo:`{{count}}m ago`,hoursAgo:`{{count}}h ago`,daysAgo:`{{count}}d ago`,createdBy:`Created by`,updatedBy:`Updated by`,dropFilesToUpload:`Drop files here or click to upload`,attachmentCount:`{{count}} attachment`,attachmentCountPlural:`{{count}} attachments`,removeAttachment:`Remove attachment`,unifiedDiff:`Unified diff`,sideBySideDiff:`Side-by-side diff`,noChanges:`No changes`,previousVersion:`Previous`,currentVersion:`Current`,discussion:`Discussion`,showDiscussion:`Show Discussion ({{count}})`,hideDiscussion:`Hide discussion`,bold:`Bold (Ctrl+B)`,italic:`Italic (Ctrl+I)`,listFormat:`List`,inlineCode:`Inline code`,mentionSomeone:`Mention someone`,preview:`Preview`,submitComment:`Submit (Ctrl+Enter)`,sendComment:`Send`,writeComment:`Write a comment…`,subscribedTooltip:`Subscribed — click to unsubscribe`,unsubscribedTooltip:`Subscribe to notifications`,firstRecord:`First record (Home)`,previousRecordKey:`Previous record (←)`,nextRecordKey:`Next record (→)`,lastRecord:`Last record (End)`,noRecords:`No records`,showEmptyRelated_one:`+ {{count}} empty`,showEmptyRelated_other:`+ {{count}} empty`,searchWhileNavigating:`Search while navigating`,searchRecords:`Search records…`,allActivity:`All Activity`,commentsOnly:`Comments Only`,fieldChangesFilter:`Field Changes`,tasksOnly:`Tasks Only`,leaveCommentPlaceholder:`Leave a comment… (Ctrl+Enter to submit)`,noActivity:`No activity recorded`,loadMore:`Load more`,edited:`(edited)`,via:`via {{source}}`,replyCount:`{{count}} reply`,replyCountPlural:`{{count}} replies`,replyPlaceholder:`Reply…`,filterActivity:`Filter activity`,openDiscussion:`Open discussion panel`,closeDiscussion:`Close discussion panel`,subscribeAriaLabel:`Subscribe to notifications`,unsubscribeAriaLabel:`Unsubscribe from notifications`,clearSearch:`Clear search`,copyEmail:`Copy email`,copyPhone:`Copy phone number`,copyRecordId:`Copy record ID`,showEmptyFields:`Show {{count}} empty fields`,hideEmptyFields:`Hide empty fields`,noValue:`No value`},chart:{noData:`No chart data available`,loading:`Loading chart...`},report:{rowTotal:`Row Total`,columnTotal:`Column Total`,grandTotal:`Grand Total`,totals:`Totals`,rowsLabel:`Row`,columnsLabel:`Column`,allLabel:`(All)`,emptyLabel:`(Empty)`,loading:`Loading…`,failedToLoad:`Failed to load matrix: {{message}}`,needsAcross:"Matrix report requires at least one `groupingsAcross` field.",aggregate:{count:`Count`,countDistinct:`Distinct Count`,sum:`Sum`,avg:`Average`,min:`Min`,max:`Max`,first:`First`},editor:{breadcrumb:`Configuration`,basic:`Basic`,title:`Title`,titlePlaceholder:`e.g. Pipeline by Quarter`,description:`Description`,descriptionPlaceholder:`What does this report show?`,type:`Report type`,typeTabular:`Tabular — flat list`,typeSummary:`Summary — grouped with totals`,typeMatrix:`Matrix — pivot rows × columns`,typeJoined:`Joined — multiple blocks`,typeHelp:`Pick the layout that matches what you want to see.`,data:`Data`,objectName:`Data source`,objectNamePlaceholder:`e.g. opportunity`,objectNameHelp:`Which object should this report query?`,limit:`Row limit`,limitPlaceholder:`e.g. 100`,columns:`Columns`,columnsHint:`Pick which fields appear as columns. Add an aggregate (Sum, Count…) on Summary or Matrix reports.`,filters:`Filters`,filtersHint:`Limit the rows that go into this report.`,filtersComplex:`This report uses an advanced filter that cannot be edited here. Save will keep it unchanged.`,groupBy:`Group by`,groupByHint:`Group the data and compute subtotals.`,rows:`Rows`,rowsHint:`Group rows by these fields.`,columnsAxis:`Columns`,columnsAxisHint:`Pivot these fields across the top.`,values:`Values`,valuesHint:`Numbers shown in each cell. Pick one or more fields and add an aggregate (Sum, Count…).`,grouping:`Grouping`,addGrouping:`Add grouping`,dateGranularity:`Date bucket`,dateGranularityNone:`(use raw value)`,day:`Day`,week:`Week`,month:`Month`,quarter:`Quarter`,year:`Year`,sortAsc:`Ascending`,sortDesc:`Descending`,chart:`Chart`,chartHint:`Optional visualization rendered alongside the table.`,chartType:`Chart type`,chartTitle:`Chart title`,chartTitlePlaceholder:`Defaults to the report title`,chartXAxis:`X-axis (category)`,chartYAxis:`Y-axis (value)`,chartShowLegend:`Show legend`,chartShowDataLabels:`Show data labels`,chartNone:`(no chart)`,chartBar:`Bar`,chartLine:`Line`,chartArea:`Area`,chartPie:`Pie`,chartDonut:`Donut`,chartFunnel:`Funnel`,validationNeedsObject:`Pick a data source before adding columns.`,validationMatrixNeedsRowsCols:`Matrix reports need at least one Row and one Column.`,validationSummaryNeedsRows:`Summary reports need at least one grouping field.`,blocks:`Blocks`,blocksHint:`Each block is its own table or chart. Block-level filters are ANDed with the report filter.`,addBlock:`Add block`,removeBlock:`Remove block`,blockName:`Block name`,blockNamePlaceholder:`unique_block_name`,blockLabel:`Display label`,blockLabelPlaceholder:`Shown above the block`,blockDescription:`Description`,blockDescriptionPlaceholder:`Optional context for this block`,validationJoinedNeedsBlocks:`Joined reports need at least one block.`,validationBlockNameRequired:`Every block needs a non-empty name.`,validationBlockNameDuplicate:`Block names must be unique within the report.`,validationBlockNeedsColumns:`Every block needs at least one column.`,noneOption:`(none)`,addCondition:`Add condition`,combineLogic:`Combine with`,opContains:`contains`,opIsEmpty:`is empty`,opIsNotEmpty:`is not empty`,formatAuto:`Auto`,formatCurrency:`Currency`,formatPercent:`Percent`,formatInteger:`Integer`,formatDate:`Date`,formatDatetime:`Date & time`,columnLabelPlaceholder:`Label override`,aggregateColumn:`Aggregate`,formatColumn:`Format`,addColumns:`Add fields`,searchFields:`Search fields…`,noMatchingFields:`No fields match your search.`,noFieldsAvailable:`No fields available.`,columnsCount:`{n} column(s) selected`,columnsEmpty:`No columns selected yet.`,fieldPickerTitle:`Select fields`,fieldPickerDescription:`Pick one or more fields to add. Use the search box to narrow the list.`,fieldPickerChangeTitle:`Change field`,fieldPickerAddGroupingTitle:`Add grouping`,fieldPickerEmpty:`(pick field)`,fieldPickerSelected:`{n} selected`,fieldPickerClear:`Clear selection`,fieldPickerAdd:`Add`,fieldPickerAddN:`Add {n}`}},map:{searchLocations:`Search locations…`,locationDetails:`Location Details`,markersCount:`{{count}} markers`,invalidCoordinates:`{{count}} record with missing or invalid coordinates excluded from the map.`,invalidCoordinatesPlural:`{{count}} records with missing or invalid coordinates excluded from the map.`},workflow:{draft:`Draft`,active:`Active`,paused:`Paused`,completed:`Completed`,cancelled:`Cancelled`,save:`Save`,publish:`Publish`,addNode:`Add Node`,workflowFlow:`Workflow Flow`,properties:`Properties`,connections:`Connections`,quickConnect:`Quick Connect`,fromPlaceholder:`From...`,toPlaceholder:`To...`,connect:`Connect`,label:`Label`,type:`Type`,description:`Description`,assignee:`Assignee`,assigneeType:`Assignee Type`,user:`User`,role:`Role`,group:`Group`,expression:`Expression`,timeoutMinutes:`Timeout (minutes)`,selectNodeToEdit:`Select a node to edit its properties`,workflowTitle:`Workflow Title`,newWorkflow:`New Workflow`,outConnections:`{{count}} out`,start:`Start`,end:`End`,task:`Task`,userTask:`User Task`,serviceTask:`Service Task`,scriptTask:`Script Task`,approval:`Approval`,condition:`Condition`,parallelGateway:`Parallel Gateway`,joinGateway:`Join Gateway`,boundaryEvent:`Boundary Event`,delay:`Delay`,notification:`Notification`,webhook:`Webhook`,allowConcurrency:`Allow (run concurrently)`,forbidConcurrency:`Forbid (skip new)`,replaceConcurrency:`Replace (cancel existing)`,queueConcurrency:`Queue (run after current)`,conditionEvent:`Condition`,manualEvent:`Manual`,webhookEvent:`Webhook`,timerEvent:`Timer`,signalEvent:`Signal`,versionHistory:`Version History`,importBpmn:`Import BPMN`,exportBpmn:`Export BPMN`,undo:`Undo`,redo:`Redo`,resetZoom:`Reset zoom`},dashboard:{addWidget:`Add widget`,removeWidget:`Remove widget`,editLayout:`Edit layout`,saveLayout:`Save layout`,resetLayout:`Reset layout`,total:`Total`,noDataAvailable:`No data available`,noDataSourceFor:`No data source available for`,trend:{vsLastQuarter:`vs last quarter`,vsLastMonth:`vs last month`,vsLastWeek:`vs last week`,vsLastYear:`vs last year`,vsYesterday:`vs yesterday`,vsPreviousPeriod:`vs previous period`}},configPanel:{save:`Save`,discard:`Discard`,close:`Close`,layout:`Layout`,columns:`Columns`,gap:`Gap`,rowHeight:`Row height`,data:`Data`,refreshInterval:`Refresh interval`,appearance:`Appearance`,title:`Title`,showDescription:`Show description`,theme:`Theme`,configuration:`Configuration`,general:`General`,advanced:`Advanced`},appDesigner:{createApp:`Create Application`,editApp:`Edit Application`,basicInfo:`Basic Info`,objects:`Objects`,navigation:`Navigation`,branding:`Branding`,appName:`App Name`,appTitle:`Title`,appDescription:`Description`,appIcon:`Icon`,template:`Template`,layout:`Layout`,layoutSidebar:`Sidebar`,layoutHeader:`Header`,layoutEmpty:`Empty`,selectObjects:`Select Objects`,searchObjects:`Search objects…`,selectAll:`Select All`,deselectAll:`Deselect All`,navBuilder:`Navigation Builder`,addGroup:`Add Group`,addUrl:`Add URL`,addSeparator:`Add Separator`,noNavItems:`No navigation items yet.`,logoUrl:`Logo URL`,primaryColor:`Primary Color`,faviconUrl:`Favicon URL`,preview:`Preview`,complete:`Complete`,snakeCaseHint:`Must be snake_case (e.g. my_app)`,modeEdit:`Edit`,modePreview:`Preview`,modeCode:`Code`,addWidget:`Add Widget`,widgetProperties:`Widget Properties`,dataSource:`Data Source`,valueField:`Value Field`,aggregate:`Aggregate`,colorVariant:`Color Variant`,addComponent:`Add Component`,componentProperties:`Component Properties`,viewType:`View Type`,fields:`Fields`,toolbar:`Toolbar`,showSearch:`Show Search`,showFilters:`Show Filters`,showSort:`Show Sort`,appearance:`Appearance`,rowHeight:`Row Height`,stripedRows:`Striped Rows`,bordered:`Bordered`,livePreview:`Live Preview`,stepBasicDesc:`Name, title, and layout`,stepObjectsDesc:`Select business objects`,stepNavigationDesc:`Build navigation tree`,stepBrandingDesc:`Logo, colors, and favicon`,noObjectsFound:`No objects found.`,noNavItemsHint:`No navigation items yet. Select objects in the previous step or add items manually.`,separator:`Separator`,separatorLabel:`— Separator —`,newGroup:`New Group`,newLink:`New Link`,saveDraft:`Save Draft`,cancelConfirmTitle:`Discard changes?`,cancelConfirmMessage:`You have unsaved changes. Are you sure you want to cancel?`,confirmDiscard:`Discard`,keepEditing:`Keep Editing`,navNoItems:`No navigation items. Click buttons above to add items.`,navNoPreviewItems:`No items`,navLivePreview:`Live Preview`,navCollapseGroup:`Collapse group`,navExpandGroup:`Expand group`,navAddChild:`Add child`,navMoveUp:`Move up`,navMoveDown:`Move down`,navRemove:`Remove`,navObjectPage:`Object Page`,navDashboard:`Dashboard`,navPage:`Page`,navReport:`Report`,navGroup:`Group`,navUrl:`URL`,navSeparator:`Separator`,navTypeObject:`Object`,navTypeDashboard:`Dashboard`,navTypePage:`Page`,navTypeReport:`Report`,navTypeUrl:`URL`,navTypeGroup:`Group`,navTypeSeparator:`Separator`,navTypeAction:`Action`,navEditIcon:`Edit icon`,navToggleVisible:`Toggle visibility`,navHidden:`Hidden`,navExportSchema:`Export JSON`,navImportSchema:`Import JSON`,navExportSuccess:`Navigation schema exported`,navImportSuccess:`Navigation schema imported`,navImportError:`Invalid navigation JSON`,navIconPlaceholder:`Icon name (e.g. Users)`,dashboardEditor:`Dashboard Editor`,noWidgets:`No widgets. Click a button above to add one.`,widgetLayoutSize:`Layout Size`,widgetWidth:`Width`,widgetHeight:`Height`,dashboardPreview:`Dashboard Preview`,noWidgetsPreview:`No widgets to preview`,pageCanvasEditor:`Page Canvas Editor`,emptyPage:`Empty page. Click a button above to add a component.`,pagePreview:`Page Preview`,noComponentsPreview:`No components to preview`,modePage:`Page`,modeDashboard:`Dashboard`,undo:`Undo`,redo:`Redo`,brandingEditor:`Branding Editor`,brandingExport:`Export JSON`,brandingImport:`Import JSON`,brandingPreview:`Preview`,brandingSampleButton:`Sample Button`,brandingSampleText:`This is how your brand theme will look.`,colorPalette:`Color Palette`,fontFamily:`Font Family`,fontDefault:`Default (System)`,modeLight:`Light`,modeDark:`Dark`,mobilePreview:`Mobile Preview`,objectManager:{title:`Object Manager`,addObject:`New Object`,searchPlaceholder:`Search objects…`,noObjects:`No objects found.`,objectName:`API Name`,objectLabel:`Label`,pluralLabel:`Plural Label`,icon:`Icon`,selectIcon:`Select icon…`,group:`Group`,noGroup:`No Group`,sortOrder:`Sort Order`,enabled:`Enabled`,relationships:`Relationships`,systemBadge:`System`,fieldCount:`{{count}} fields`,ungrouped:`Ungrouped`,deleteConfirmTitle:`Delete Object?`,deleteConfirmMessage:`This will permanently delete the object and all its fields. This action cannot be undone.`},fieldDesigner:{title:`Field Designer`,addField:`New Field`,searchPlaceholder:`Search fields…`,allTypes:`All Types`,noFields:`No fields found.`,fieldName:`API Name`,fieldLabel:`Label`,fieldType:`Type`,fieldGroup:`Group`,description:`Description`,required:`Required`,unique:`Unique`,readOnly:`Read Only`,hidden:`Hidden`,indexed:`Indexed`,externalId:`External ID`,trackHistory:`Track History`,defaultValue:`Default Value`,placeholder:`Placeholder`,referenceTo:`Reference To`,formula:`Formula`,options:`Options`,addOption:`Add Option`,validationRules:`Validation Rules`,addRule:`Add Rule`,systemBadge:`System`,ungrouped:`General`,deleteConfirmTitle:`Delete Field?`,deleteConfirmMessage:`This will permanently delete the field. Existing data in this field will be lost.`,basicSection:`Basic`,typeSpecificSection:`Type Settings`,advancedSection:`Advanced`,typeCategory:{text:`Text`,number:`Number`,date:`Date & Time`,choice:`Choice`,relation:`Relation`,advanced:`Advanced`}}},console:{title:`ObjectOS`,initializing:`Initializing application...`,search:`Search…`,breadcrumb:{dashboards:`Dashboards`,pages:`Pages`,reports:`Reports`,system:`System`},nav:{pinItem:`Pin {{name}}`,unpinItem:`Unpin {{name}}`,dragToReorder:`Drag to reorder`,favorites:`Favorites`},loadingSteps:{connecting:`Connecting to data source`,loadingConfig:`Loading configuration`,preparingWorkspace:`Preparing workspace`},error:{connectionFailed:`Cannot connect to server`,serverUnreachable:`The server at {{url}} is unreachable.`,checkServer:`Please check your network connection or that the backend is running.`,timeout:`Connection timed out after 10 seconds.`},actions:{retry:`Retry`,retrying:`Retrying…`},shortcuts:{title:`Keyboard Shortcuts`,description:`Quick reference for all available keyboard shortcuts.`,groups:{general:`General`,navigation:`Navigation`,dataViews:`Data Views`,preferences:`Preferences`},openCommandPalette:`Open command palette`,showShortcuts:`Show keyboard shortcuts`,closeDialog:`Close dialog / panel`,toggleSidebar:`Toggle sidebar`,focusSearch:`Focus search`,createRecord:`Create new record`,refreshData:`Refresh data`,editRecord:`Edit selected record`,toggleDarkMode:`Toggle dark mode`},commandPalette:{placeholder:`Type a command or search...`,noResults:`No results found.`,searching:`Searching…`,records:`Records`,recentRecords:`Recently viewed`,objects:`Objects`,dashboards:`Dashboards`,pages:`Pages`,reports:`Reports`,switchApp:`Switch App`,current:`Current`,preferences:`Preferences`,lightTheme:`Light Theme`,darkTheme:`Dark Theme`,systemTheme:`System Theme`,actions:`Actions`,openFullSearch:`Open Full Search Page`,createApp:`Create New App`},errors:{somethingWentWrong:`Something went wrong`,unexpectedError:`An unexpected error occurred while rendering this view.`,tryAgain:`Try Again`,goHome:`Go Home`,errorDetails:`Error Details (dev only)`},theme:{toggle:`Toggle theme`,light:`Light`,dark:`Dark`,system:`System`},objectView:{objectNotFound:`Object Not Found`,objectNotFoundDescription:`The object "{{objectName}}" does not exist in the current configuration.`,objectNotFoundHint:`Check your app navigation settings or select a different object from the sidebar.`,allRecords:`All Records`,exitDesignMode:`Exit Design Mode`,enterDesignMode:`Enter Design Mode`,metadataInspector:`Metadata Inspector`,editView:`Edit View`,addView:`Add View`,designTools:`Design tools`,new:`New`,import:`Import`,importTitle:`Import from CSV`,importedToast:`Imported {{count}} row(s).`,importedWithSkipped:`Imported {{ok}} row(s); skipped {{skipped}}.`,configureView:`Configure View`,closePanel:`Close panel`,showAdvancedSettings:`Show advanced settings`,showFewerSettings:`Show fewer settings`,page:`Page`,pageConfigHint:`Toolbar, navigation & view shell settings`,listConfigHint:`Data rendering, columns & appearance for this list type`,general:`General`,generalHint:`View title, description, and type`,toolbar:`Toolbar`,toolbarHint:`Search, filter, sort, group, and density toggles`,toolbarEnabledCount:`{{count}} of {{total}} enabled`,navigationSection:`Navigation`,navigationHint:`Row click behavior and detail view settings`,records:`Records`,recordsHint:`Selection mode, add record, and inline editing`,exportPrint:`Export & Print`,exportPrintHint:`Export formats, printing, and record count display`,showAllFields:`Show All`,hideAllFields:`Hide All`,searchFields:`Search fields...`,title:`Title`,description:`Description`,data:`Data`,source:`Source`,columns:`Columns`,filterBy:`Filter by`,sortBy:`Sort by`,appearance:`Appearance`,showDescription:`Show description`,viewType:`View type`,userFilters:`User filters`,enableSearch:`Enable search`,enableFilter:`Enable filter`,enableSort:`Enable sort`,enableHideFields:`Enable hide fields`,enableGroup:`Enable group`,enableColor:`Enable color`,enableDensity:`Enable density`,userActions:`User actions`,addRecordViaForm:`Add records through a form`,advanced:`Advanced`,allowExport:`Allow export`,recordCount:`{{count}} records`,noDescription:`No description`,none:`None`,columnsConfigured:`{{count}} columns`,save:`Save`,discard:`Discard`,createView:`Create View`,createViewDesc:`Pick a view type, then give it a name. You can change every setting afterwards.`,cancel:`Cancel`,create:`Create`,delete:`Delete`,deleteViewTitle:`Delete view`,deleteViewConfirm:`Are you sure you want to delete the view "{{name}}"? This cannot be undone.`,bulkDeleteConfirm:`Delete {{count}} selected records? This cannot be undone.`,duplicateViewName:`A view with this name already exists.`,viewTypeGrid:`Grid`,viewTypeGridDesc:`A spreadsheet-style table of records.`,viewTypeKanban:`Kanban`,viewTypeKanbanDesc:`Cards grouped into columns by a single-select field.`,viewTypeCalendar:`Calendar`,viewTypeCalendarDesc:`Records placed on a monthly calendar by date.`,viewTypeGallery:`Gallery`,viewTypeGalleryDesc:`Large image cards driven by an attachment field.`,viewTypeTimeline:`Timeline`,viewTypeTimelineDesc:`Records along a horizontal time axis.`,viewTypeGantt:`Gantt`,viewTypeGanttDesc:`Project bars with start / end and dependencies.`,viewTypeMap:`Map`,viewTypeMapDesc:`Geographic markers from latitude / longitude fields.`,viewTypeChart:`Chart`,viewTypeChartDesc:`Aggregated bar / line / pie visualisations.`,newView:`New View`,typeOptions:`Type Options`,groupByField:`Group by field`,groupByFieldHelp:`The kanban groups records into columns by this field's values.`,startDateField:`Start date field`,startDateFieldHelp:`The calendar places records on the cell matching this date.`,ganttStartDateFieldHelp:`The left edge of each Gantt bar uses this date.`,ganttEndDateFieldHelp:`The right edge of each Gantt bar uses this date.`,timelineDateFieldHelp:`Records are placed on the timeline by this date.`,titleField:`Title field`,latitudeField:`Latitude field`,latitudeFieldHelp:`Field providing the latitude coordinate (geo fields only).`,longitudeField:`Longitude field`,longitudeFieldHelp:`Field providing the longitude coordinate (geo fields only).`,imageField:`Image field`,imageFieldHelp:`The gallery cover comes from this image or attachment field.`,dateField:`Date field`,selectField:`Select field...`,selectOption:`Select...`,noEligibleFieldForType:`No eligible field of this type. Add one to the object first.`,viewTypeUnavailable:`This object has no field that can serve as "{{field}}".`,viewTypeUnavailableShort:`Not supported by this object.`,chartType:`Chart type`,chartTypeHelp:`Determines how the data is rendered.`,chartTypeBar:`Bar chart`,chartTypeLine:`Line chart`,chartTypePie:`Pie chart`,chartTypeArea:`Area chart`,chartTypeScatter:`Scatter chart`,xAxisField:`X-axis field`,xAxisFieldHelp:`The categorical or time dimension.`,yAxisField:`Y-axis field`,yAxisFieldHelp:`The numeric field to aggregate.`,gridOptionsHint:`Grid view uses the columns configured above.`,groupBy:`Group by`,prefixField:`Prefix field`,fields:`Fields`,fieldsVisible:`{{count}} visible`,sortsCount:`{{count}} sorts`,filtersCount:`{{count}} filters`,endDateField:`End date field`,color:`Color`,fieldTextColor:`Field text color`,rowHeight:`Row height`,wrapHeaders:`Wrap headers`,showFieldDescriptions:`Show field descriptions`,collapseAllByDefault:`Collapse all by default`,striped:`Striped rows`,bordered:`Bordered cells`,inlineEdit:`Edit records inline`,addDeleteRecordsInline:`Add/delete records inline`,clickIntoRecordDetails:`Click into record details`,navigationMode:`Navigation mode`,navigationWidth:`Navigation width`,navigationWidthHint:`Available for drawer, modal, and split navigation modes`,openNewTab:`Open in new tab`,openNewTabHint:`Available for page and new window navigation modes`,selectionMode:`Selection mode`,selectionNone:`None`,selectionSingle:`Single`,selectionMultiple:`Multiple`,pageSize:`Page size`,pageSizeOptions:`Page size options`,exportFormats:`Export formats`,exportMaxRecords:`Max records`,exportIncludeHeaders:`Include headers`,exportFileNamePrefix:`File name prefix`,searchableFields:`Searchable fields`,filterableFields:`Filterable fields`,resizableColumns:`Resizable columns`,densityCompact:`Compact`,densityComfortable:`Comfortable`,densitySpacious:`Spacious`,densityMode:`Density mode`,hiddenFields:`Hidden fields`,rowActions:`Row actions`,bulkActions:`Bulk actions`,sharing:`Sharing`,sharingEnabled:`Enable sharing`,sharingVisibility:`Visibility`,addRecordEnabled:`Enable add record`,addRecordPosition:`Position`,addRecordMode:`Mode`,addRecordFormView:`Form view`,conditionalFormatting:`Conditional formatting`,addRule:`Add rule`,quickFilters:`Quick filters`,addQuickFilter:`Add quick filter`,ufElements:`Elements`,ufDropdown:`Dropdown`,ufTabs:`Tabs`,ufToggle:`Toggle`,ufAddField:`+ Add filter field...`,ufNoFields:`No fields available`,ufAddTab:`+ Add tab`,ufTabLabel:`Label`,ufShowAllRecords:`Show "All records" tab`,ufAllowAddTab:`Allow adding tabs`,showRecordCount:`Show record count`,allowPrinting:`Allow printing`,virtualScroll:`Virtual scroll`,emptyStateTitle:`Empty state title`,emptyStateMessage:`Empty state message`,emptyStateIcon:`Empty state icon`,ariaLabel:`ARIA label`,ariaDescribedBy:`ARIA described by`,ariaLive:`ARIA live`,accessibility:`Accessibility`,viewTabs:`View Tabs`},localeSwitcher:{label:`Language`}},auth:{login:{title:`Sign in to your account`,description:`Enter your email and password to continue`,emailLabel:`Email`,emailPlaceholder:`name@example.com`,passwordLabel:`Password`,passwordPlaceholder:`Enter your password`,forgotPasswordText:`Forgot password?`,submitButton:`Sign In`,submittingButton:`Signing in...`,noAccountText:`Don't have an account?`,signUpText:`Sign up`,errors:{invalidCredentials:`Invalid email or password. Please try again.`,emailNotVerified:`Please verify your email address before signing in.`}},register:{title:`Create an account`,description:`Enter your information to get started`,nameLabel:`Name`,namePlaceholder:`John Doe`,emailLabel:`Email`,emailPlaceholder:`name@example.com`,passwordLabel:`Password`,passwordPlaceholder:`Create a password (min. 8 characters)`,confirmPasswordLabel:`Confirm Password`,confirmPasswordPlaceholder:`Confirm your password`,passwordMismatchError:`Passwords do not match`,passwordTooShortError:`Password must be at least 8 characters`,submitButton:`Create Account`,submittingButton:`Creating account...`,hasAccountText:`Already have an account?`,signInText:`Sign in`,errors:{userExists:`An account with this email already exists. Try signing in instead.`},verifyInbox:{title:`Check your inbox`,description:`We've sent a verification link to {{email}}. Click the link to activate your account.`,resend:`Resend verification email`,resending:`Sending…`,resent:`Verification email sent.`,backToSignIn:`Back to sign in`}},forgotPassword:{title:`Reset your password`,description:`Enter your email address and we'll send you a link to reset your password`,emailLabel:`Email`,emailPlaceholder:`name@example.com`,submitButton:`Send Reset Link`,submittingButton:`Sending...`,successTitle:`Check your email`,successDescription:`We've sent a password reset link to {{email}}. Please check your inbox.`,backToSignInText:`Back to sign in`,rememberPasswordText:`Remember your password?`,signInText:`Sign in`},resetPassword:{title:`Set a new password`,description:`Choose a password you have not used before.`,newPassword:`New password`,confirmPassword:`Confirm password`,submit:`Update password`,submitting:`Updating…`,success:`Password updated`,failed:`Reset failed`,invalidToken:`This reset link is invalid or has expired.`,missingToken:`Reset link is missing or expired`,passwordsMismatch:`Passwords do not match`,requestNewLink:`Request a new link`},verifyEmail:{title:`Verify your email address`,description:`We sent a verification link to your email address. Please click the link to verify your account.`,sentTo:`Sent to:`,verifyingTitle:`Verifying…`,verifyingDescription:`Hang tight while we confirm your email.`,successTitle:`Email verified`,successDescription:`Your email is confirmed. You can now sign in.`,errorTitle:`Verification failed`,errorDescription:`Verification failed. Please request a new link.`,missingToken:`Verification link is missing a token.`,emailMissing:`Email address is missing`,resendButton:`Resend verification email`,resending:`Sending…`,resent:`Email sent! Check your inbox`,resentSuccess:`Verification email sent!`,resentDescription:`Please check your inbox and click the verification link.`,resendFailed:`Cannot resend verification email`,signInLink:`Go to sign in`,backToSignIn:`Back to sign in`,backToLogin:`Back to login`,checkSpam:`Didn't receive the email? Check your spam folder or contact support.`,or:`Or`},setup:{welcomeTitle:`Welcome to ObjectStack`,description:`Create the first owner account to finish setting up this deployment.`,yourName:`Your name`,orgName:`Organization name`,orgNamePlaceholder:`Acme Inc.`,emailLabel:`Email`,emailPlaceholder:`name@example.com`,passwordLabel:`Password`,passwordHint:`Minimum 8 characters`,submit:`Create owner account`,submitting:`Setting up…`,failed:`Setup failed`},device:{title:`Authorize new device`,subtitle:`Approve this device to sign in as {{email}}.`,userCodeLabel:`Device code`,loggedInAs:`Signed in as {{email}}`,approve:`Approve device`,approving:`Approving…`,approvedTitle:`Device authorized`,approvedDescription:`You can return to the device — it should sign in shortly.`,approveSuccess:`Device authorized`,approveSuccessDescription:`You can close this window.`,approveFailed:`Approval failed`,deny:`Deny request`,denying:`Denying…`,deniedTitle:`Access denied`,deniedDescription:`The device will not be granted access.`,denyFailed:`Failed to deny request`,invalidTitle:`Invalid device link`,invalidDescription:`No device code was provided in the URL.`,loading:`Loading…`,cancel:`Cancel`},shell:{tenantHostHint:`You are signing in to this workspace`}},errors:{networkError:`Network error. Please check your connection.`,serverError:`Server error. Please try again later.`,notFound:`Resource not found.`,unauthorized:`You are not authorized to perform this action.`,forbidden:`Access denied.`,timeout:`Request timed out. Please try again.`,unknown:`An unexpected error occurred.`},workspace:{label:`Workspaces`,default:`My Workspace`,switch:`Switch workspace`,create:`Create workspace`,createTitle:`Create a workspace`,createDescription:`A workspace is a shared space for your team to collaborate.`,createButton:`Create workspace`,nameLabel:`Workspace name`,namePlaceholder:`e.g., Acme Inc`,slugLabel:`URL slug`,slugHint:`Used in URLs. Only lowercase letters, numbers, and hyphens.`,invite:`Invite member`,members:`Members`,settings:`Workspace settings`},sidebar:{settings:`Settings`,help:`Help`,helpTooltip:`Help & Documentation`,activityFeed:`Activity feed`,notifications:`Notifications`,approvals:`Approvals`,inbox:`Inbox`,inboxAriaLabel:`Open inbox`,area:`Area`,recent:`Recent`,favorites:`Favorites`,starred:`Starred`,removeFromFavorites:`Remove {{name}} from favorites`},home:{title:`Home`,subtitle:`Your workspace dashboard`,nav:`Home`,allApps:`All Applications`,greetingMorning:`Good morning`,greetingAfternoon:`Good afternoon`,greetingEvening:`Good evening`,greetingNight:`Working late`,heroTagline:`Pick up where you left off, or explore something new.`,open:`Open`,stats:{apps:`Applications`,starred:`Starred`,recent:`Recent items`},loading:`Loading workspace...`,recent:`Recent`,starred:`Starred`,welcome:`Welcome to ObjectUI`,welcomeDescription:`Get started by creating your first application or configure your system settings.`,createFirstApp:`Create Your First App`,systemSettings:`System Settings`,browseMarketplace:`Browse App Marketplace`,quickActions:{title:`Quick Actions`,createApp:`Create App`,createAppDesc:`Start with a new application`,manageObjects:`Manage Objects`,manageObjectsDesc:`Configure data models`,systemSettings:`System Settings`,systemSettingsDesc:`Configure your workspace`},recentApps:{title:`Recently Accessed`,itemType:{object:`Object`,dashboard:`Dashboard`,page:`Page`,record:`Record`}},starredApps:{title:`Starred`},gettingStarted:{title:`Make this home yours`,description:`Star an app to pin it here for one-click access. Anything you open will show up under Recently Accessed automatically.`,cta:`Browse all applications`},appCard:{noDescription:`No description`,default:`Default`}},layout:{appSwitcher:{home:`Home`,addApp:`Add App`,editApp:`Edit App`,manageAllApps:`Manage All Apps`,systemConsole:`System Console`,noAppsConfigured:`No apps configured`},activityFeed:{title:`Recent Activity`,filter:`Filter`,empty:`No recent activity`,viewAll:`View all activity`,ariaLabel:`Activity feed`,typeCreate:`Create`,typeUpdate:`Update`,typeDelete:`Delete`,typeComment:`Comment`,relativeJustNow:`just now`,relativeSecondsAgo:`{{count}}s ago`,relativeMinutesAgo:`{{count}}m ago`,relativeHoursAgo:`{{count}}h ago`,relativeDaysAgo:`{{count}}d ago`},metadata:{label:`Metadata`,toggleTitle:`Toggle Metadata Inspector`,panelTitle:`Metadata Inspector`,jsonBadge:`JSON`,copyJson:`Copy JSON`}},search:{title:`Search`,back:`Back`,placeholder:`Search objects, dashboards, pages, reports...`,inputAriaLabel:`Search objects, dashboards, pages, reports`,resultsCount:`{{count}} result for "{{query}}"`,resultsCountPlural:`{{count}} results for "{{query}}"`,itemsAvailable:`{{count}} items available`,noResults:`No results found`,noResultsHint:`Try adjusting your search terms`,typeObjects:`Objects`,typeDashboards:`Dashboards`,typePages:`Pages`,typeReports:`Reports`,badgeObject:`object`,badgeDashboard:`dashboard`,badgePage:`page`,badgeReport:`report`},empty:{objectNotFound:`Object Not Found`,objectNotFoundDescription:`Object "{{name}}" definition missing. Check your configuration or navigate back to select a valid object.`,recordNotFound:`Record not found`,recordNotFoundDescription:`The record you are looking for does not exist or may have been deleted.`,pageNotFound:`Page Not Found`,pageNotFoundDescription:`The page "{{name}}" could not be found. It may have been removed or renamed.`,dashboardNotFound:`Dashboard Not Found`,dashboardNotFoundDescription:`The dashboard "{{name}}" could not be found. It may have been removed or renamed.`,reportNotFound:`Report Not Found`,reportNotFoundDescription:`The report "{{name}}" could not be found. It may have been removed or renamed.`,noAppsConfigured:`No Apps Configured`,noAppsConfiguredDescription:`No applications have been registered. Create your first app or visit System Settings to configure your environment.`,createFirstApp:`Create Your First App`,systemSettings:`System Settings`,back:`Back`},renderer:{noPageSchema:`No page schema provided`,noFormSchema:`No form schema provided`,noDashboardSchema:`No dashboard schema provided`,pageRendering:`Page rendering: {{name}}`,dashboardRendering:`Dashboard rendering: {{name}}`,formRenderingMode:`Form rendering in {{mode}} mode`,formRenderingFor:`for record {{id}}`,createRecord:`Create Record`,editRecord:`Edit Record`,page:`Page`,dashboard:`Dashboard`,save:`Save`,cancel:`Cancel`},actionDialog:{title:`Action Parameters`,description:`Please provide the required information to continue.`,selectPlaceholder:`Select {{label}}`,requiredError:`{{label}} is required`,lookupPlaceholder:`Paste the {{label}} record id (UUID)`,lookupHelpText:`Enter the record id of the referenced object. A picker is coming soon.`,cancel:`Cancel`,confirm:`Confirm`,defaultActionTitle:`Action`,ok:`OK`},rowAction:{openMenu:`Open menu`,edit:`Edit`,delete:`Delete`},navigationSync:{addedPage:`Navigation updated: added page "{{name}}"`,addedDashboard:`Navigation updated: added dashboard "{{name}}"`,removedPage:`Navigation updated: removed page "{{name}}"`,removedDashboard:`Navigation updated: removed dashboard "{{name}}"`,renamedPage:`Navigation updated: renamed page "{{oldName}}" → "{{newName}}"`,renamedDashboard:`Navigation updated: renamed dashboard "{{oldName}}" → "{{newName}}"`,undoLabel:`Undo`,undone:`Navigation change undone`,undoFailed:`Failed to undo navigation change`,updateFailed:`Failed to update navigation`},objectActions:{deleteSuccess:`{{label}} deleted successfully`,deleteFailed:`Failed to delete {{label}}`,noRecordId:`No record ID provided`,deleteConfirm:`Are you sure you want to delete this record?`,bulkDeleteSuccess:`Deleted {{count}} {{label}} records`,bulkDeletePartial:`{{succeeded}} deleted, {{failed}} failed`},objectViewActions:{renameFailed:`Failed to rename view`,deleteFailed:`Failed to delete view`},dashboardActions:{pdfPreparing:`Preparing PDF export…`,exportFailed:`Export failed: {{message}}`,forecastSoon:`Forecast view coming soon`},recordDetail:{viewersTooltip:`Users viewing this record`},cellRender:{empty:`Empty`,yes:`Yes`,no:`No`,systemFields:`System`},user:{profile:`Profile`,settings:`Settings`,logout:`Log out`,preferences:`Preferences`,theme:`Theme`,language:`Language`},organizations:{mine:`My Organizations`,title:`Organizations`,heading:`Your Organizations`,subtitle:`Select an organization to continue, or create a new one.`,searchPlaceholder:`Search for an organization`,new:`New organization`,current:`Current organization`,manage:`Manage`,emptyTitle:`No organizations yet`,emptyDescription:`Create your first organization to get started.`,noMatches:`No organizations match your search.`},notifications:{empty:`No notifications`,emptyUnread:`You're all caught up`,filterUnread:`Unread`,filterAll:`All`,markAllRead:`Mark all read`,viewAll:`View all notifications`,approvalsPending:`{{count}} pending approvals`,viewApprovals:`View approvals`,noPendingApprovals:`No pending approvals`,openApprovalsInbox:`Open Approvals Inbox`},publicForm:{submit:`Submit`,submitting:`Submitting…`,submitAnother:`Submit another response`,poweredBy:`Powered by ObjectStack`,secureNotice:`Your information is transmitted securely and only used to respond to your request.`,thankYouTitle:`Thank you!`,thankYouMessage:`Your submission has been received successfully.`,redirecting:`Redirecting in {{seconds}} seconds…`,unavailableTitle:`Form unavailable`,unavailableDescription:`No public form is available at this URL. Make sure the underlying view has anonymous sharing enabled and matches this slug.`,tryDemo:`Try the demo`,retry:`Retry`,loading:`Loading form…`,requiredHint:`* Required field`,consentLabelDefault:`I agree to the privacy policy and consent to my data being processed for this request.`,consentLink:`Privacy policy`,consentRequired:`Please accept the privacy policy to continue.`,rateLimited:`Please take a moment to review your answers before submitting.`,redirectBlocked:`Submission accepted, but the redirect URL was blocked for security.`,demo:{contactTitle:`Contact us`,contactDescription:`Tell us about your project and a sales representative will get back to you within one business day.`,supportTitle:`Submit a support request`,supportDescription:`Tell us what is going wrong — our team responds within one business day.`,thankYouSalesTitle:`Thanks — we received your message!`,thankYouSalesMessage:`A sales representative will be in touch within one business day.`,thankYouSupportTitle:`Got it — your request is in the queue.`,thankYouSupportMessage:`A support engineer will follow up shortly. Save this page if you have more screenshots to add.`,field:{firstName:`First name`,lastName:`Last name`,email:`Work email`,phone:`Phone`,jobTitle:`Job title`,company:`Company`,website:`Website`,industry:`Industry`,companySize:`Company size`,howCanWeHelp:`How can we help?`,subject:`Subject`,description:`Description`,issueType:`Issue type`,priority:`Priority`},industry:{technology:`Technology`,software:`Software / SaaS`,finance:`Finance`,healthcare:`Healthcare`,retail:`Retail`,other:`Other`},issueType:{question:`Question`,problem:`Problem`,bug:`Bug`,feature_request:`Feature request`},priority:{low:`Low`,medium:`Medium`,high:`High`,critical:`Critical`}}},marketplace:{title:`App Marketplace`,subtitle:`Browse approved apps published to the ObjectStack catalog. Click an app to view details and install it into one of your environments.`,searchPlaceholder:`Search apps by name or manifest ID…`,searchAria:`Search marketplace apps`,installed:`Installed`,installedCount:`Installed ({{count}})`,refresh:`Refresh`,all:`All`,noApprovedYet:`No apps have been approved for the marketplace yet.`,noMatchFilters:`No apps match your filters.`,noDescription:`No description provided.`,back:`Back to marketplace`,installedTitle:`Installed Apps`,installedSubtitle:`Marketplace packages currently installed into this runtime's kernel. Cached manifests live in <code>.objectstack/installed-packages/</code> and survive restarts.`,installedEmpty:`No marketplace apps installed in this runtime yet.`,browseLink:`Browse the marketplace →`,installedAdditiveNote:`<strong>Note:</strong> The kernel API is additive only — uninstall removes the on-disk manifest so the package won't load on next boot, but the running kernel keeps the app registered until you restart the runtime.`,installedAt:`Installed {{when}}`,installedBy:`by {{user}}`,installedPackageId:`package`,cachedAs:`Cached as <code>{{path}}</code>`,versionBadge:`v{{version}}`,installedBadge:`Installed v{{version}}`,load:{failed:`Failed to load marketplace`,failedHint:`By default this runtime points at the public ObjectStack cloud. Check the runtime is online, or override <code>OS_CLOUD_URL</code> to point at a self-hosted control plane.`,packageFailed:`Failed to load package`,notFound:`Not found.`},detail:{homepage:`Homepage`,installedV:`Installed · v{{version}}`,about:`About`,noReadme:`No readme provided.`,versions:`Versions`,noApprovedVersions:`No approved versions.`,prerelease:`pre`,moreOptions:`More install options`,uninstallFromRuntime:`Uninstall from this runtime`},action:{install:`Install`,reinstall:`Reinstall`,working:`Working…`,installToCloud:`Install to cloud…`,installing:`Installing…`,uninstall:`Uninstall`,uninstalling:`Uninstalling…`,details:`Details`,close:`Close`,dismiss:`Dismiss`,openOnCloud:`Open on cloud`,backHome:`Back to home`},install:{dialogTitle:`Install {{name}}`,dialogDescCurrent:`Install into this environment ({{host}}).`,dialogDescPicker:`Choose an environment to install this app into. You need to be signed into ObjectStack Cloud.`,environment:`Environment`,environmentPlaceholder:`Pick an environment`,includeSampleData:`Include sample data`,noEnvs:`No environments found in your active organization.`,noPermission:`You do not have permission to install apps in any environment. Only organization owners and admins can install — ask your workspace admin.`,signInFirst:`You need to sign into ObjectStack Cloud first. Click "Open on cloud" below.`,success:`Installed successfully. Open the environment to see the new app.`,localSuccess:`Installed v{{version}} to this runtime. "{{name}}" should now appear in the app switcher.`,localManifestConflict:`{{message}}
5
5
  Tip: a local app already owns this manifest_id. Remove it from objectstack.config.ts first.`,localUnauthorized:`Sign in to this runtime first, then try again.`,localMarketplaceUnavailable:`This runtime has no OS_CLOUD_URL configured, so the marketplace catalog is unreachable.`},uninstall:{confirm:`Uninstall {{manifestId}} v{{version}} from this runtime?
6
6
 
7
7
  The cached manifest will be removed. The app will remain loaded in the running kernel until the next restart.`,successInList:`Removed {{manifestId}}. Restart the runtime to fully unload it from the running kernel.`,successInDetail:`Removed cached manifest for {{manifestId}}. Restart the runtime to fully unload the app from the running kernel.`},accessDenied:{title:`App Marketplace is admin-only`,description:`You don't have permission to install apps in this environment. Ask an owner or admin of this organization for access.`},category:{crm:`CRM`,erp:`ERP`,hr:`Human Resources`,finance:`Finance`,project:`Project Management`,collaboration:`Collaboration`,analytics:`Analytics`,integration:`Integration`,automation:`Automation`,ai:`AI`,security:`Security`,"developer-tools":`Developer Tools`,"ui-theme":`UI Theme`,storage:`Storage`,other:`Other`},pricing:{free:`Free`,freemium:`Freemium`,paid:`Paid`,subscription:`Subscription`,"usage-based":`Usage-based`,"contact-sales":`Contact Sales`},relativeTime:{today:`today`,daysAgo:`{{count}}d ago`,monthsAgo:`{{count}}mo ago`,yearsAgo:`{{count}}y ago`}}},zh:{common:{loading:`加载中...`,save:`保存`,cancel:`取消`,delete:`删除`,edit:`编辑`,create:`新建`,search:`搜索`,filter:`筛选`,reset:`重置`,confirm:`确认`,close:`关闭`,back:`返回`,next:`下一步`,previous:`上一步`,submit:`提交`,refresh:`刷新`,export:`导出`,import:`导入`,yes:`是`,no:`否`,ok:`确定`,actions:`操作`,more:`更多`,selectAll:`全选`,clearAll:`清除全部`,addToFavorites:`添加到收藏`,removeFromFavorites:`从收藏中移除`,noData:`暂无数据`,noResults:`未找到结果`,required:`必填`,optional:`选填`,selectOption:`请选择`,select:`选择...`,openChat:`打开聊天`,closeChat:`关闭聊天`,toggleSidebar:`切换侧边栏`},validation:{required:`{{field}}不能为空`,minLength:`{{field}}至少需要{{min}}个字符`,maxLength:`{{field}}最多{{max}}个字符`,min:`{{field}}不能小于{{min}}`,max:`{{field}}不能大于{{max}}`,email:`请输入有效的邮箱地址`,url:`请输入有效的URL`,pattern:`{{field}}格式不正确`,unique:`{{field}}必须唯一`,type:`{{field}}必须是有效的{{type}}`},form:{addItem:`添加项目`,removeItem:`移除项目`,fieldRequired:`此字段为必填项`,invalidFormat:`格式不正确`,saveSuccess:`保存成功`,saveError:`保存失败`,unsavedChanges:`您有未保存的更改,确定要离开吗?`,stepOf:`第{{current}}步,共{{total}}步`,createTitle:`新建{{object}}`,editTitle:`编辑{{object}}`,createDescription:`向数据库添加新的{{object}}。`,editDescription:`更新{{object}}的详情`,saveRecord:`保存`,create:`创建`,update:`更新`,createSuccess:`{{object}}创建成功`,updateSuccess:`{{object}}更新成功`,deleteSuccess:`{{object}}删除成功`},fields:{richText:{format:`格式: {{format}}`,basicEditorHint:`富文本编辑器(基础)`,placeholder:`请输入文字...`}},table:{rowsPerPage:`每页行数`,showing:`显示第{{from}}到{{to}}条,共{{total}}条`,noRows:`暂无数据`,sortAsc:`升序排列`,sortDesc:`降序排列`,filterColumn:`筛选{{column}}`,columns:`列`,exportCSV:`导出CSV`,exportExcel:`导出Excel`,selectRow:`选择行`,selectAllRows:`选择所有行`,expandRow:`展开行`,collapseRow:`折叠行`,hideColumn:`隐藏列`,freezeColumn:`冻结列`,unfreezeColumn:`取消冻结列`,pageInfo:`第 {{current}} 页,共 {{total}} 页`,totalRecords:`共 {{count}} 条`,noResults:`未找到结果`,noResultsHint:`请尝试调整筛选条件或搜索关键词。`,cancelAll:`全部取消`,saveAll:`全部保存 ({{count}})`,addRecord:`添加记录`,open:`打开`,search:`搜索...`,modified:`{{count}} 行已修改`,selected:`已选择 {{count}} 项`,edit:`编辑`,delete:`删除`},grid:{actions:`操作`,edit:`编辑`,delete:`删除`,export:`导出`,exportAs:`导出为 {{format}}`,loading:`加载数据中...`,errorLoading:`数据加载失败`,pullToRefresh:`下拉刷新`,refreshing:`刷新中…`,openRecord:`打开记录`,openMenu:`更多操作`,rowHeight:`行高: {{mode}}`,empty:`空`,yes:`是`,no:`否`,systemFields:`系统字段`,toolbar:{densityMode:`密度`,densityCompact:`紧凑`,densityComfortable:`舒适`,densitySpacious:`宽松`,densityCycleHint:`{{label}}(点击切换)`,densityCycleShortHint:`点击切换`},import:{title:`导入{{object}}`,stepUpload:`上传`,stepMapping:`字段映射`,stepPreview:`预览`,uploadDescription:`上传 CSV 文件以开始导入。`,mappingDescription:`将 CSV 列映射到对象字段。`,previewDescription:`导入前预览数据。`,dragDrop:`拖拽 CSV 文件到此处,或点击选择文件`,browseFiles:`选择文件`,onlyCsv:`仅支持 CSV 文件。`,fileNeedsHeader:`文件必须包含表头行和至少一行数据。`,mappingTemplate:`映射模板:`,chooseTemplate:`选择模板…`,noSavedTemplates:`暂无保存的模板`,noneOption:`— 无 —`,saveCurrent:`保存当前映射`,templateName:`模板名称`,save:`保存`,deleteTemplate:`删除模板`,csvColumn:`CSV 列`,mapsTo:`映射到`,status:`状态`,skipColumn:`跳过此列`,skip:`— 跳过 —`,mapped:`已映射`,skipped:`已跳过`,rowsWithErrors:`{{count}} 行有错误`,rowsCorrected:`已修正 {{count}} 行`,clickToFix:`— 点击高亮单元格可直接修改。`,showingRows:`显示第 {{shown}} 行,共 {{total}} 行`,importing:`导入中… {{progress}}%`,importComplete:`导入完成`,imported:`已导入 {{count}} 条`,skippedCount:`已跳过 {{count}} 条`,moreErrors:`…还有 {{count}} 个错误`,cancel:`取消`,back:`上一步`,next:`下一步`,close:`关闭`,importNRows:`导入 {{count}} 行`,importingProgress:`导入中…`,requiredMark:`*`,required:`必填`,invalidType:`{{type}} 格式无效`}},calendar:{today:`今天`,month:`月`,week:`周`,day:`日`,agenda:`日程`,allDay:`全天`,noEvents:`暂无事件`,newEvent:`新建事件`,moreEvents:`+{{count}} 更多`},list:{recordCount:`{{count}} 条记录`,recordCountOne:`{{count}} 条记录`,addRecord:`添加记录`,tabs:`标签页`,allRecords:`全部记录`,search:`搜索`,filter:`筛选`,filterRecords:`筛选记录`,sort:`排序`,sortRecords:`排序记录`,group:`分组`,groupBy:`分组依据`,export:`导出`,exportAs:`导出为 {{format}}`,color:`颜色`,rowColor:`行颜色`,colorByField:`按字段着色`,clear:`清除`,none:`无`,hideFields:`隐藏字段`,noItems:`暂无数据`,noItemsMessage:`当前没有可显示的记录。请尝试调整筛选条件或新建一条数据。`,showAll:`显示全部`,pullToRefresh:`下拉刷新`,refreshing:`刷新中…`,share:`分享`,print:`打印`,hideFieldsTitle:`隐藏字段`,dataLimitReached:`显示前 {{limit}} 条记录。可能有更多数据。`,viewSettings:`视图设置`,viewSettingsHint:`分组、行颜色、密度与可见字段。`,addGroup:`添加分组字段`,collapsedByDefault:`默认折叠`,removeGroup:`删除`},kanban:{addCard:`添加卡片`,addColumn:`添加列`,moveCard:`移动卡片`,deleteCard:`删除卡片`,deleteColumn:`删除列`,noCards:`暂无卡片`,cardTitlePlaceholder:`输入卡片标题...`},timeline:{bucket:{overdue:`已逾期`,today:`今天`,tomorrow:`明天`,thisWeek:`本周`,nextWeek:`下周`,later:`更晚`,noDate:`无日期`,unassigned:`未分配`}},gantt:{column:{taskName:`任务名称`,start:`开始`,end:`结束`},toolbar:{prevPeriod:`上一周期`,nextPeriod:`下一周期`,zoomIn:`放大`,zoomOut:`缩小`,jumpToToday:`跳到今天`,today:`今天`,showTaskList:`展开任务列表`,hideTaskList:`收起任务列表`}},view:{rename:`重命名`,duplicateView:`复制视图`,shareView:`共享视图`,setAsDefault:`设为默认`,pinView:`固定视图`,unpinView:`取消固定`,changeViewType:`更改视图类型`,deleteView:`删除视图`,addView:`添加视图`,unsavedChanges:`未保存的更改`,saveAsView:`另存为视图`,moreViews:`还有 {{count}} 个`,activeFilters:`筛选条件生效中`,activeSort:`排序生效中`,manageViews:`管理视图`,manageAllViews:`管理所有视图…`,searchViews:`搜索视图`,addNewView:`新建视图`,done:`完成`,noViewsFound:`没有匹配的视图。`,dragToReorder:`拖动排序`,defaultView:`默认视图`,tabActionsFor:`{{name}} 的视图操作`,readonlyAriaLabel:`只读视图`,readonlyTooltip:`系统视图 — 复制后可自定义。`},detail:{back:`返回`,edit:`编辑`,editInline:`编辑`,save:`保存`,saveChanges:`保存更改`,saving:`保存中…`,editFieldsInline:`编辑字段`,lockedByApproval:`审批中已锁定`,lockedTooltip:`该记录有待审批的请求,编辑已被锁定`,cancelApproval:`撤回审批`,cancelApprovalInFlight:`撤回中…`,cancelApprovalTooltip:`撤回当前的待审批请求以解除记录锁定`,cancelApprovalFailed:`撤回审批失败`,cancelApprovalUnavailable:`当前数据源不支持撤回审批`,linkCopied:`链接已复制到剪贴板`,linkCopyFailed:`复制链接失败`,cancel:`取消`,cancelEdit:`放弃更改`,sectionMoreDetails:`更多详情`,concurrentUpdateTitle:`该记录已被他人修改`,concurrentUpdateDescription:`在你编辑期间,另一位用户保存了 {{field}} 的新版本。为避免无声覆盖对方的改动,请选择如何处理该冲突。`,concurrentUpdateYourEdit:`你的修改`,concurrentUpdateCurrentValue:`当前值`,concurrentUpdateUpdatedBy:`由 {{name}} 更新`,concurrentUpdateUpdatedAt:`更新于 {{when}}`,concurrentUpdateReload:`加载最新`,concurrentUpdateOverwrite:`仍然覆盖`,concurrentUpdateCancel:`取消`,openInNewTab:`在新标签页打开`,share:`分享`,duplicate:`复制`,export:`导出`,viewHistory:`查看历史`,delete:`删除`,moreActions:`更多操作`,addToFavorites:`添加到收藏`,removeFromFavorites:`从收藏中移除`,previousRecord:`上一条记录`,nextRecord:`下一条记录`,recordOf:`第 {{current}} 条,共 {{total}} 条`,recordNotFound:`未找到记录`,recordNotFoundDescription:`您查找的记录不存在或已被删除。`,goBack:`返回`,details:`详情`,related:`相关`,relatedRecords:`{{count}} 条记录`,relatedRecordOne:`{{count}} 条记录`,noRelatedRecords:`暂无相关记录`,loading:`加载中...`,copyToClipboard:`复制到剪贴板`,copied:`已复制!`,deleteConfirmation:`确定要删除此记录吗?`,editRecord:`编辑记录`,viewAll:`查看全部`,new:`新建`,emptyValue:`—`,activity:`活动`,history:`历史`,editRow:`编辑`,deleteRow:`删除`,deleteRowConfirmation:`确定要删除此记录吗?`,deleteRowTitle:`删除记录`,actions:`操作`,previousPage:`上一页`,nextPage:`下一页`,pageOf:`第 {{current}} 页,共 {{total}} 页`,sortBy:`排序`,filterPlaceholder:`筛选...`,highlightFields:`关键字段`,comments:`评论`,searchComments:`搜索评论…`,addCommentPlaceholder:`添加评论… (Ctrl+Enter 提交)`,noMatchingComments:`没有匹配的评论`,noCommentsYet:`暂无评论`,pinned:`已置顶`,pin:`置顶`,unpin:`取消置顶`,justNow:`刚刚`,minutesAgo:`{{count}}分钟前`,hoursAgo:`{{count}}小时前`,daysAgo:`{{count}}天前`,createdBy:`创建于`,updatedBy:`更新于`,dropFilesToUpload:`拖拽文件到此处或点击上传`,attachmentCount:`{{count}} 个附件`,attachmentCountPlural:`{{count}} 个附件`,removeAttachment:`移除附件`,unifiedDiff:`统一视图`,sideBySideDiff:`并排视图`,noChanges:`无变更`,previousVersion:`旧版本`,currentVersion:`新版本`,discussion:`讨论`,showDiscussion:`显示讨论 ({{count}})`,hideDiscussion:`隐藏讨论`,bold:`粗体 (Ctrl+B)`,italic:`斜体 (Ctrl+I)`,listFormat:`列表`,inlineCode:`行内代码`,mentionSomeone:`提及某人`,preview:`预览`,submitComment:`提交 (Ctrl+Enter)`,sendComment:`发送`,writeComment:`写评论…`,subscribedTooltip:`已订阅 — 点击取消订阅`,unsubscribedTooltip:`订阅通知`,firstRecord:`第一条记录 (Home)`,previousRecordKey:`上一条记录 (←)`,nextRecordKey:`下一条记录 (→)`,lastRecord:`最后一条记录 (End)`,noRecords:`无记录`,showEmptyRelated_one:`+ {{count}} 个为空`,showEmptyRelated_other:`+ {{count}} 个为空`,searchWhileNavigating:`导航时搜索`,searchRecords:`搜索记录…`,allActivity:`全部动态`,commentsOnly:`仅评论`,fieldChangesFilter:`字段变更`,tasksOnly:`仅任务`,leaveCommentPlaceholder:`留下评论… (Ctrl+Enter 提交)`,noActivity:`暂无活动记录`,loadMore:`加载更多`,edited:`(已编辑)`,via:`通过 {{source}}`,replyCount:`{{count}} 条回复`,replyCountPlural:`{{count}} 条回复`,replyPlaceholder:`回复…`,filterActivity:`筛选活动`,openDiscussion:`打开讨论面板`,closeDiscussion:`关闭讨论面板`,subscribeAriaLabel:`订阅通知`,unsubscribeAriaLabel:`取消订阅通知`,clearSearch:`清除搜索`,copyEmail:`复制邮箱`,copyPhone:`复制电话号码`,copyRecordId:`复制记录 ID`,showEmptyFields:`显示 {{count}} 个空字段`,hideEmptyFields:`隐藏空字段`,noValue:`无`},chart:{noData:`暂无图表数据`,loading:`图表加载中...`},report:{rowTotal:`行合计`,columnTotal:`列合计`,grandTotal:`总计`,totals:`汇总`,rowsLabel:`行`,columnsLabel:`列`,allLabel:`(全部)`,emptyLabel:`(空)`,loading:`加载中…`,failedToLoad:`矩阵报表加载失败:{{message}}`,needsAcross:"矩阵报表至少需要一个 `groupingsAcross` 字段。",aggregate:{count:`计数`,countDistinct:`去重计数`,sum:`求和`,avg:`平均`,min:`最小值`,max:`最大值`,first:`首个`},editor:{breadcrumb:`配置`,basic:`基础`,title:`标题`,titlePlaceholder:`例如:按季度的销售管道`,description:`描述`,descriptionPlaceholder:`此报表展示什么?`,type:`报表类型`,typeTabular:`表格 — 平铺列表`,typeSummary:`汇总 — 分组带合计`,typeMatrix:`矩阵 — 行列透视`,typeJoined:`拼接 — 多块组合`,typeHelp:`选择最贴合需求的布局方式。`,data:`数据`,objectName:`数据源`,objectNamePlaceholder:`例如:opportunity`,objectNameHelp:`此报表应查询哪个对象?`,limit:`行数上限`,limitPlaceholder:`例如:100`,columns:`列`,columnsHint:`选择要展示的字段。汇总或矩阵报表可添加聚合(求和、计数…)。`,filters:`筛选`,filtersHint:`限定参与报表的数据行。`,filtersComplex:`此报表使用了高级筛选条件,此处无法编辑。保存时将原样保留。`,groupBy:`分组`,groupByHint:`按字段分组并计算小计。`,rows:`行`,rowsHint:`按这些字段对行分组。`,columnsAxis:`列`,columnsAxisHint:`将这些字段透视到顶部。`,values:`度量`,valuesHint:`每个单元格里展示的数字。选择一个或多个字段并设置聚合方式(求和、计数…)。`,grouping:`分组`,addGrouping:`添加分组`,dateGranularity:`日期粒度`,dateGranularityNone:`(使用原始值)`,day:`日`,week:`周`,month:`月`,quarter:`季度`,year:`年`,sortAsc:`升序`,sortDesc:`降序`,chart:`图表`,chartHint:`在表格旁可选展示的可视化。`,chartType:`图表类型`,chartTitle:`图表标题`,chartTitlePlaceholder:`默认使用报表标题`,chartXAxis:`X 轴(类别)`,chartYAxis:`Y 轴(数值)`,chartShowLegend:`显示图例`,chartShowDataLabels:`显示数据标签`,chartNone:`(无图表)`,chartBar:`柱状图`,chartLine:`折线图`,chartArea:`面积图`,chartPie:`饼图`,chartDonut:`环形图`,chartFunnel:`漏斗图`,validationNeedsObject:`请先选择数据源,再添加列。`,validationMatrixNeedsRowsCols:`矩阵报表至少需要一个行字段和一个列字段。`,validationSummaryNeedsRows:`汇总报表至少需要一个分组字段。`,blocks:`区块`,blocksHint:`每个区块都是独立的表格或图表。区块筛选会与报表筛选合并(AND)。`,addBlock:`添加区块`,removeBlock:`删除区块`,blockName:`区块名称`,blockNamePlaceholder:`唯一的区块名`,blockLabel:`显示标题`,blockLabelPlaceholder:`显示在区块上方`,blockDescription:`说明`,blockDescriptionPlaceholder:`该区块的可选说明`,validationJoinedNeedsBlocks:`组合报表至少需要一个区块。`,validationBlockNameRequired:`每个区块都必须有非空的名称。`,validationBlockNameDuplicate:`区块名称在报表内必须唯一。`,validationBlockNeedsColumns:`每个区块至少需要一列。`,noneOption:`(无)`,addCondition:`添加条件`,combineLogic:`组合方式`,opContains:`包含`,opIsEmpty:`为空`,opIsNotEmpty:`不为空`,formatAuto:`自动`,formatCurrency:`货币`,formatPercent:`百分比`,formatInteger:`整数`,formatDate:`日期`,formatDatetime:`日期 + 时间`,columnLabelPlaceholder:`自定义标签`,aggregateColumn:`聚合`,formatColumn:`格式`,addColumns:`添加字段`,searchFields:`搜索字段…`,noMatchingFields:`没有匹配的字段。`,noFieldsAvailable:`暂无可用字段。`,columnsCount:`已选择 {n} 个列`,columnsEmpty:`尚未选择任何列。`,fieldPickerTitle:`选择字段`,fieldPickerDescription:`可选择一个或多个字段添加到报表,输入关键字可快速筛选。`,fieldPickerChangeTitle:`更换字段`,fieldPickerAddGroupingTitle:`添加分组`,fieldPickerEmpty:`(请选择字段)`,fieldPickerSelected:`已选 {n} 个`,fieldPickerClear:`清空选择`,fieldPickerAdd:`添加`,fieldPickerAddN:`添加 {n} 个`}},map:{searchLocations:`搜索位置…`,locationDetails:`位置详情`,markersCount:`{{count}} 个标记`,invalidCoordinates:`{{count}} 条记录因坐标缺失或无效已从地图中排除。`,invalidCoordinatesPlural:`{{count}} 条记录因坐标缺失或无效已从地图中排除。`},workflow:{draft:`草稿`,active:`活跃`,paused:`已暂停`,completed:`已完成`,cancelled:`已取消`,save:`保存`,publish:`发布`,addNode:`添加节点`,workflowFlow:`工作流程`,properties:`属性`,connections:`连接`,quickConnect:`快速连接`,fromPlaceholder:`从...`,toPlaceholder:`到...`,connect:`连接`,label:`标签`,type:`类型`,description:`描述`,assignee:`负责人`,assigneeType:`负责人类型`,user:`用户`,role:`角色`,group:`组`,expression:`表达式`,timeoutMinutes:`超时时间(分钟)`,selectNodeToEdit:`选择节点以编辑其属性`,workflowTitle:`工作流标题`,newWorkflow:`新工作流`,outConnections:`{{count}} 个输出`,start:`开始`,end:`结束`,task:`任务`,userTask:`用户任务`,serviceTask:`服务任务`,scriptTask:`脚本任务`,approval:`审批`,condition:`条件`,parallelGateway:`并行网关`,joinGateway:`合并网关`,boundaryEvent:`边界事件`,delay:`延迟`,notification:`通知`,webhook:`Webhook`,allowConcurrency:`允许(并发执行)`,forbidConcurrency:`禁止(跳过新任务)`,replaceConcurrency:`替换(取消现有任务)`,queueConcurrency:`排队(等待当前完成)`,conditionEvent:`条件`,manualEvent:`手动`,webhookEvent:`Webhook`,timerEvent:`定时器`,signalEvent:`信号`,versionHistory:`版本历史`,importBpmn:`导入 BPMN`,exportBpmn:`导出 BPMN`,undo:`撤销`,redo:`重做`,resetZoom:`重置缩放`},dashboard:{addWidget:`添加组件`,removeWidget:`移除组件`,editLayout:`编辑布局`,saveLayout:`保存布局`,resetLayout:`重置布局`,total:`总计`,noDataAvailable:`暂无数据`,noDataSourceFor:`没有可用的数据源:`,trend:{vsLastQuarter:`较上季度`,vsLastMonth:`较上月`,vsLastWeek:`较上周`,vsLastYear:`较去年`,vsYesterday:`较昨日`,vsPreviousPeriod:`较上期`}},configPanel:{save:`保存`,discard:`丢弃`,close:`关闭`,layout:`布局`,columns:`列数`,gap:`间距`,rowHeight:`行高`,data:`数据`,refreshInterval:`刷新间隔`,appearance:`外观`,title:`标题`,showDescription:`显示描述`,theme:`主题`,configuration:`配置`,general:`基本`,advanced:`高级`},appDesigner:{createApp:`创建应用`,editApp:`编辑应用`,basicInfo:`基本信息`,objects:`业务对象`,navigation:`导航`,branding:`品牌`,appName:`应用名称`,appTitle:`标题`,appDescription:`描述`,appIcon:`图标`,template:`模板`,layout:`布局`,layoutSidebar:`侧边栏`,layoutHeader:`顶部导航`,layoutEmpty:`空白`,selectObjects:`选择对象`,searchObjects:`搜索对象…`,selectAll:`全选`,deselectAll:`取消全选`,navBuilder:`导航构建器`,addGroup:`添加分组`,addUrl:`添加链接`,addSeparator:`添加分隔线`,noNavItems:`暂无导航项。`,logoUrl:`Logo 链接`,primaryColor:`主色调`,faviconUrl:`网站图标链接`,preview:`预览`,complete:`完成`,snakeCaseHint:`必须使用 snake_case 格式(如 my_app)`,modeEdit:`编辑`,modePreview:`预览`,modeCode:`代码`,addWidget:`添加组件`,widgetProperties:`组件属性`,dataSource:`数据源`,valueField:`数值字段`,aggregate:`聚合`,colorVariant:`颜色`,addComponent:`添加组件`,componentProperties:`组件属性`,viewType:`视图类型`,fields:`字段`,toolbar:`工具栏`,showSearch:`显示搜索`,showFilters:`显示筛选`,showSort:`显示排序`,appearance:`外观`,rowHeight:`行高`,stripedRows:`斑马纹`,bordered:`边框`,livePreview:`实时预览`,stepBasicDesc:`名称、标题和布局`,stepObjectsDesc:`选择业务对象`,stepNavigationDesc:`构建导航树`,stepBrandingDesc:`Logo、颜色和图标`,noObjectsFound:`未找到对象。`,noNavItemsHint:`暂无导航项。请在上一步选择对象或手动添加项目。`,separator:`分隔线`,separatorLabel:`— 分隔线 —`,newGroup:`新建分组`,newLink:`新建链接`,saveDraft:`保存草稿`,cancelConfirmTitle:`放弃更改?`,cancelConfirmMessage:`您有未保存的更改。确定要取消吗?`,confirmDiscard:`放弃`,keepEditing:`继续编辑`,navNoItems:`暂无导航项。点击上方按钮添加项目。`,navNoPreviewItems:`无项目`,navLivePreview:`实时预览`,navCollapseGroup:`折叠分组`,navExpandGroup:`展开分组`,navAddChild:`添加子项`,navMoveUp:`上移`,navMoveDown:`下移`,navRemove:`移除`,navObjectPage:`对象页面`,navDashboard:`仪表盘`,navPage:`页面`,navReport:`报表`,navGroup:`分组`,navUrl:`链接`,navSeparator:`分隔线`,navTypeObject:`对象`,navTypeDashboard:`仪表盘`,navTypePage:`页面`,navTypeReport:`报表`,navTypeUrl:`链接`,navTypeGroup:`分组`,navTypeSeparator:`分隔线`,navTypeAction:`操作`,navEditIcon:`编辑图标`,navToggleVisible:`切换可见性`,navHidden:`已隐藏`,navExportSchema:`导出 JSON`,navImportSchema:`导入 JSON`,navExportSuccess:`导航结构已导出`,navImportSuccess:`导航结构已导入`,navImportError:`无效的导航 JSON`,navIconPlaceholder:`图标名称(如 Users)`,dashboardEditor:`仪表盘编辑器`,noWidgets:`暂无小组件。点击上方按钮添加。`,widgetLayoutSize:`布局尺寸`,widgetWidth:`宽度`,widgetHeight:`高度`,dashboardPreview:`仪表盘预览`,noWidgetsPreview:`暂无可预览的小组件`,pageCanvasEditor:`页面画布编辑器`,emptyPage:`空白页面。点击上方按钮添加组件。`,pagePreview:`页面预览`,noComponentsPreview:`暂无可预览的组件`,modePage:`页面`,modeDashboard:`仪表盘`,undo:`撤销`,redo:`重做`,brandingEditor:`品牌编辑器`,brandingExport:`导出 JSON`,brandingImport:`导入 JSON`,brandingPreview:`预览`,brandingSampleButton:`示例按钮`,brandingSampleText:`这是您的品牌主题效果预览。`,colorPalette:`颜色面板`,fontFamily:`字体`,fontDefault:`默认(系统)`,modeLight:`浅色`,modeDark:`深色`,mobilePreview:`移动端预览`,objectManager:{title:`对象管理器`,addObject:`新建对象`,searchPlaceholder:`搜索对象…`,noObjects:`未找到对象。`,objectName:`API 名称`,objectLabel:`标签`,pluralLabel:`复数标签`,icon:`图标`,selectIcon:`选择图标…`,group:`分组`,noGroup:`无分组`,sortOrder:`排序`,enabled:`启用`,relationships:`关系`,systemBadge:`系统`,fieldCount:`{{count}} 个字段`,ungrouped:`未分组`,deleteConfirmTitle:`删除对象?`,deleteConfirmMessage:`这将永久删除该对象及其所有字段。此操作无法撤销。`},fieldDesigner:{title:`字段设计器`,addField:`新建字段`,searchPlaceholder:`搜索字段…`,allTypes:`所有类型`,noFields:`未找到字段。`,fieldName:`API 名称`,fieldLabel:`标签`,fieldType:`类型`,fieldGroup:`分组`,description:`描述`,required:`必填`,unique:`唯一`,readOnly:`只读`,hidden:`隐藏`,indexed:`索引`,externalId:`外部 ID`,trackHistory:`追踪历史`,defaultValue:`默认值`,placeholder:`占位文本`,referenceTo:`引用对象`,formula:`公式`,options:`选项`,addOption:`添加选项`,validationRules:`验证规则`,addRule:`添加规则`,systemBadge:`系统`,ungrouped:`通用`,deleteConfirmTitle:`删除字段?`,deleteConfirmMessage:`这将永久删除该字段。此字段中的现有数据将丢失。`,basicSection:`基础`,typeSpecificSection:`类型设置`,advancedSection:`高级`,typeCategory:{text:`文本`,number:`数字`,date:`日期时间`,choice:`选择`,relation:`关联`,advanced:`高级`}}},console:{title:`ObjectStack 控制台`,initializing:`正在初始化应用程序...`,search:`搜索…`,breadcrumb:{dashboards:`仪表盘`,pages:`页面`,reports:`报告`,system:`系统`},nav:{pinItem:`固定 {{name}}`,unpinItem:`取消固定 {{name}}`,dragToReorder:`拖动以重新排序`,favorites:`收藏`},loadingSteps:{connecting:`正在连接数据源`,loadingConfig:`正在加载配置`,preparingWorkspace:`正在准备工作区`},error:{connectionFailed:`无法连接到服务器`,serverUnreachable:`无法访问服务器 {{url}}。`,checkServer:`请检查网络连接,或确认后端服务正在运行。`,timeout:`连接超时(10 秒)。`},actions:{retry:`重试`,retrying:`正在重试…`},shortcuts:{title:`键盘快捷键`,description:`所有可用键盘快捷键的快速参考。`,groups:{general:`通用`,navigation:`导航`,dataViews:`数据视图`,preferences:`偏好设置`},openCommandPalette:`打开命令面板`,showShortcuts:`显示键盘快捷键`,closeDialog:`关闭对话框/面板`,toggleSidebar:`切换侧边栏`,focusSearch:`聚焦搜索`,createRecord:`新建记录`,refreshData:`刷新数据`,editRecord:`编辑选中记录`,toggleDarkMode:`切换深色模式`},commandPalette:{placeholder:`输入命令或搜索...`,noResults:`未找到结果。`,searching:`搜索中…`,records:`记录`,recentRecords:`最近访问`,objects:`对象`,dashboards:`仪表盘`,pages:`页面`,reports:`报表`,switchApp:`切换应用`,current:`当前`,preferences:`偏好设置`,lightTheme:`浅色主题`,darkTheme:`深色主题`,systemTheme:`系统主题`,actions:`操作`,openFullSearch:`打开完整搜索页面`,createApp:`创建新应用`},errors:{somethingWentWrong:`出错了`,unexpectedError:`渲染此视图时发生意外错误。`,tryAgain:`重试`,goHome:`返回首页`,errorDetails:`错误详情(仅开发模式)`},theme:{toggle:`切换主题`,light:`浅色`,dark:`深色`,system:`系统`},objectView:{objectNotFound:`未找到对象`,objectNotFoundDescription:`对象"{{objectName}}"在当前配置中不存在。`,objectNotFoundHint:`请检查您的应用导航设置或从侧边栏选择其他对象。`,allRecords:`所有记录`,exitDesignMode:`退出设计模式`,enterDesignMode:`进入设计模式`,metadataInspector:`元数据检查器`,editView:`编辑视图`,addView:`添加视图`,designTools:`设计工具`,new:`新建`,import:`导入`,importTitle:`从 CSV 文件导入`,importedToast:`成功导入 {{count}} 行。`,importedWithSkipped:`已导入 {{ok}} 行;跳过 {{skipped}} 行。`,configureView:`配置视图`,closePanel:`关闭面板`,showAdvancedSettings:`显示高级设置`,showFewerSettings:`显示精简设置`,page:`页面`,pageConfigHint:`工具栏、导航与视图外壳设置`,listConfigHint:`此列表类型的数据渲染、列与外观`,general:`常规`,generalHint:`视图标题、描述和类型`,toolbar:`工具栏`,toolbarHint:`搜索、筛选、排序、分组和密度切换`,toolbarEnabledCount:`已启用 {{count}}/{{total}} 项`,navigationSection:`导航`,navigationHint:`行点击行为和详情视图设置`,records:`记录`,recordsHint:`选择模式、添加记录和内联编辑`,exportPrint:`导出与打印`,exportPrintHint:`导出格式、打印和记录数显示`,showAllFields:`全部显示`,hideAllFields:`全部隐藏`,searchFields:`搜索字段...`,title:`标题`,description:`描述`,data:`数据`,source:`数据源`,columns:`列`,filterBy:`筛选条件`,sortBy:`排序条件`,appearance:`外观`,showDescription:`显示描述`,viewType:`视图类型`,userFilters:`用户筛选器`,enableSearch:`启用搜索`,enableFilter:`启用筛选`,enableSort:`启用排序`,enableHideFields:`启用隐藏字段`,enableGroup:`启用分组`,enableColor:`启用颜色`,enableDensity:`启用密度`,userActions:`用户操作`,addRecordViaForm:`通过表单添加记录`,advanced:`高级`,allowExport:`允许导出`,recordCount:`{{count}} 条记录`,noDescription:`无描述`,none:`无`,columnsConfigured:`{{count}} 列`,save:`保存`,discard:`丢弃`,createView:`创建视图`,createViewDesc:`先选择视图类型,再为它命名。所有设置之后都可以修改。`,cancel:`取消`,create:`创建`,delete:`删除`,deleteViewTitle:`删除视图`,deleteViewConfirm:`确定要删除视图 "{{name}}" 吗?此操作无法撤销。`,bulkDeleteConfirm:`确定要删除选中的 {{count}} 条记录吗?此操作无法撤销。`,duplicateViewName:`已存在同名视图。`,viewTypeGrid:`表格`,viewTypeGridDesc:`电子表格风格的记录表格。`,viewTypeKanban:`看板`,viewTypeKanbanDesc:`按单选字段分列的卡片视图。`,viewTypeCalendar:`日历`,viewTypeCalendarDesc:`按日期把记录放到月历上。`,viewTypeGallery:`画廊`,viewTypeGalleryDesc:`由附件字段驱动的大图卡片。`,viewTypeTimeline:`时间线`,viewTypeTimelineDesc:`记录按横向时间轴展开。`,viewTypeGantt:`甘特图`,viewTypeGanttDesc:`展示项目起止时间和依赖。`,viewTypeMap:`地图`,viewTypeMapDesc:`根据经纬度字段显示地理标记。`,viewTypeChart:`图表`,viewTypeChartDesc:`聚合的柱状/折线/饼状图。`,newView:`新视图`,typeOptions:`类型选项`,groupByField:`分组字段`,groupByFieldHelp:`看板会按该字段的不同取值分列。`,startDateField:`开始日期字段`,startDateFieldHelp:`日历将按该日期把记录放到对应日期格。`,ganttStartDateFieldHelp:`甘特条形图的左端使用该日期。`,ganttEndDateFieldHelp:`甘特条形图的右端使用该日期。`,timelineDateFieldHelp:`记录在时间轴上按该日期定位。`,titleField:`标题字段`,latitudeField:`纬度字段`,latitudeFieldHelp:`提供纬度坐标的字段(仅地理坐标字段可选)。`,longitudeField:`经度字段`,longitudeFieldHelp:`提供经度坐标的字段(仅地理坐标字段可选)。`,imageField:`图片字段`,imageFieldHelp:`画廊封面来自该图片或附件字段。`,dateField:`日期字段`,selectField:`选择字段...`,selectOption:`选择...`,noEligibleFieldForType:`没有符合条件的字段。请先在对象上添加该类型字段。`,viewTypeUnavailable:`该对象缺少所需的“{{field}}”字段。`,viewTypeUnavailableShort:`当前对象不支持。`,chartType:`图表类型`,chartTypeHelp:`决定数据如何呈现。`,chartTypeBar:`柱状图`,chartTypeLine:`折线图`,chartTypePie:`饼图`,chartTypeArea:`面积图`,chartTypeScatter:`散点图`,xAxisField:`X 轴字段`,xAxisFieldHelp:`用于分类或时间维度的字段。`,yAxisField:`Y 轴字段`,yAxisFieldHelp:`用于数值聚合的字段。`,gridOptionsHint:`网格视图使用上方配置的列。`,groupBy:`分组依据`,prefixField:`前缀字段`,fields:`字段`,fieldsVisible:`{{count}} 个可见`,sortsCount:`{{count}} 个排序`,filtersCount:`{{count}} 个筛选`,endDateField:`结束日期字段`,color:`颜色`,fieldTextColor:`字段文字颜色`,rowHeight:`行高`,wrapHeaders:`自动换行标题`,showFieldDescriptions:`显示字段描述`,collapseAllByDefault:`默认全部折叠`,striped:`斑马纹行`,bordered:`边框单元格`,inlineEdit:`内联编辑记录`,addDeleteRecordsInline:`内联添加/删除记录`,clickIntoRecordDetails:`点击进入记录详情`,navigationMode:`导航模式`,navigationWidth:`导航宽度`,navigationWidthHint:`适用于抽屉、弹窗和分屏导航模式`,openNewTab:`在新标签页打开`,openNewTabHint:`适用于页面和新窗口导航模式`,selectionMode:`选择模式`,selectionNone:`无`,selectionSingle:`单选`,selectionMultiple:`多选`,pageSize:`每页记录数`,pageSizeOptions:`每页选项`,exportFormats:`导出格式`,exportMaxRecords:`最大记录数`,exportIncludeHeaders:`包含表头`,exportFileNamePrefix:`文件名前缀`,searchableFields:`可搜索字段`,filterableFields:`可筛选字段`,resizableColumns:`可调整列宽`,densityCompact:`紧凑`,densityComfortable:`舒适`,densitySpacious:`宽松`,densityMode:`密度模式`,hiddenFields:`隐藏字段`,rowActions:`行操作`,bulkActions:`批量操作`,sharing:`共享`,sharingEnabled:`启用共享`,sharingVisibility:`可见性`,addRecordEnabled:`启用添加记录`,addRecordPosition:`位置`,addRecordMode:`模式`,addRecordFormView:`表单视图`,conditionalFormatting:`条件格式`,addRule:`添加规则`,quickFilters:`快速筛选`,addQuickFilter:`添加快速筛选`,ufElements:`元素类型`,ufDropdown:`下拉菜单`,ufTabs:`标签页`,ufToggle:`开关`,ufAddField:`+ 添加筛选字段...`,ufNoFields:`无可用字段`,ufAddTab:`+ 添加标签页`,ufTabLabel:`标签`,ufShowAllRecords:`显示"全部记录"标签页`,ufAllowAddTab:`允许添加标签页`,showRecordCount:`显示记录计数`,allowPrinting:`允许打印`,virtualScroll:`虚拟滚动`,emptyStateTitle:`空状态标题`,emptyStateMessage:`空状态消息`,emptyStateIcon:`空状态图标`,ariaLabel:`ARIA 标签`,ariaDescribedBy:`ARIA 描述`,ariaLive:`ARIA 实时区域`,accessibility:`无障碍`,viewTabs:`视图标签`},localeSwitcher:{label:`语言`}},auth:{login:{title:`登录您的账户`,description:`输入您的邮箱和密码以继续`,emailLabel:`邮箱`,emailPlaceholder:`name@example.com`,passwordLabel:`密码`,passwordPlaceholder:`输入您的密码`,forgotPasswordText:`忘记密码?`,submitButton:`登录`,submittingButton:`登录中...`,noAccountText:`还没有账户?`,signUpText:`注册`,errors:{invalidCredentials:`邮箱或密码错误,请重试。`,emailNotVerified:`请先验证您的邮箱后再登录。`}},register:{title:`创建账户`,description:`输入您的信息以开始使用`,nameLabel:`姓名`,namePlaceholder:`张三`,emailLabel:`邮箱`,emailPlaceholder:`name@example.com`,passwordLabel:`密码`,passwordPlaceholder:`创建密码(至少8个字符)`,confirmPasswordLabel:`确认密码`,confirmPasswordPlaceholder:`确认您的密码`,passwordMismatchError:`两次输入的密码不一致`,passwordTooShortError:`密码至少需要8个字符`,submitButton:`创建账户`,submittingButton:`创建中...`,hasAccountText:`已有账户?`,signInText:`登录`,errors:{userExists:`该邮箱已被注册,请直接登录或更换邮箱。`},verifyInbox:{title:`请检查您的邮箱`,description:`我们已向 {{email}} 发送了一封验证邮件,请点击邮件中的链接激活账户。`,resend:`重新发送验证邮件`,resending:`发送中…`,resent:`验证邮件已发送。`,backToSignIn:`返回登录`}},forgotPassword:{title:`重置密码`,description:`输入您的邮箱地址,我们将发送重置密码链接`,emailLabel:`邮箱`,emailPlaceholder:`name@example.com`,submitButton:`发送重置链接`,submittingButton:`发送中...`,successTitle:`请查看您的邮箱`,successDescription:`我们已将密码重置链接发送至 {{email}},请检查您的收件箱。`,backToSignInText:`返回登录`,rememberPasswordText:`记住密码了?`,signInText:`登录`},resetPassword:{title:`设置新密码`,description:`请选择一个您未使用过的密码。`,newPassword:`新密码`,confirmPassword:`确认密码`,submit:`更新密码`,submitting:`更新中…`,success:`密码已更新`,failed:`重置失败`,invalidToken:`此重置链接无效或已过期。`,missingToken:`重置链接缺失或已过期`,passwordsMismatch:`两次输入的密码不一致`,requestNewLink:`获取新链接`},verifyEmail:{title:`验证您的邮箱地址`,description:`我们已向您的邮箱发送了一封验证邮件,请点击邮件中的链接以验证您的账户。`,sentTo:`发送至:`,verifyingTitle:`验证中…`,verifyingDescription:`正在确认您的邮箱,请稍候。`,successTitle:`邮箱已验证`,successDescription:`您的邮箱已确认,现在可以登录了。`,errorTitle:`验证失败`,errorDescription:`验证失败,请重新获取验证链接。`,missingToken:`验证链接缺少令牌。`,emailMissing:`缺少邮箱地址`,resendButton:`重新发送验证邮件`,resending:`发送中…`,resent:`邮件已发送!请查看收件箱`,resentSuccess:`验证邮件已发送!`,resentDescription:`请查看收件箱并点击验证链接。`,resendFailed:`无法重新发送验证邮件`,signInLink:`前往登录`,backToSignIn:`返回登录`,backToLogin:`返回登录`,checkSpam:`没有收到邮件?请检查垃圾邮件文件夹或联系支持。`,or:`或`},setup:{welcomeTitle:`欢迎使用 ObjectStack`,description:`创建第一个所有者账户以完成本次部署的初始化。`,yourName:`您的姓名`,orgName:`组织名称`,orgNamePlaceholder:`Acme Inc.`,emailLabel:`邮箱`,emailPlaceholder:`name@example.com`,passwordLabel:`密码`,passwordHint:`至少 8 个字符`,submit:`创建所有者账户`,submitting:`设置中…`,failed:`设置失败`},device:{title:`授权新设备`,subtitle:`批准此设备以 {{email}} 的身份登录。`,userCodeLabel:`设备代码`,loggedInAs:`已以 {{email}} 身份登录`,approve:`批准设备`,approving:`批准中…`,approvedTitle:`设备已授权`,approvedDescription:`您可以返回该设备,它应该很快就会登录。`,approveSuccess:`设备已授权`,approveSuccessDescription:`您可以关闭此窗口。`,approveFailed:`批准失败`,deny:`拒绝请求`,denying:`拒绝中…`,deniedTitle:`访问被拒绝`,deniedDescription:`该设备将不会被授予访问权限。`,denyFailed:`拒绝请求失败`,invalidTitle:`无效的设备链接`,invalidDescription:`URL 中未提供设备代码。`,loading:`加载中…`,cancel:`取消`},shell:{tenantHostHint:`您正在登录此工作区`}},errors:{networkError:`网络错误,请检查网络连接。`,serverError:`服务器错误,请稍后重试。`,notFound:`资源未找到。`,unauthorized:`您没有权限执行此操作。`,forbidden:`访问被拒绝。`,timeout:`请求超时,请重试。`,unknown:`发生未知错误。`},workspace:{label:`工作区`,default:`我的工作区`,switch:`切换工作区`,create:`创建工作区`,createTitle:`创建工作区`,createDescription:`工作区是团队协作的共享空间。`,createButton:`创建工作区`,nameLabel:`工作区名称`,namePlaceholder:`例如:极客科技`,slugLabel:`URL 标识`,slugHint:`用于 URL 中,仅支持小写字母、数字和连字符。`,invite:`邀请成员`,members:`成员`,settings:`工作区设置`},sidebar:{settings:`设置`,help:`帮助`,helpTooltip:`帮助与文档`,activityFeed:`活动动态`,notifications:`通知`,approvals:`审批`,inbox:`消息中心`,inboxAriaLabel:`打开消息中心`,area:`区域`,recent:`最近使用`,favorites:`收藏`,starred:`已收藏`,removeFromFavorites:`从收藏中移除 {{name}}`},home:{title:`首页`,subtitle:`您的工作区仪表盘`,nav:`首页`,allApps:`全部应用`,greetingMorning:`早上好`,greetingAfternoon:`下午好`,greetingEvening:`晚上好`,greetingNight:`夜深了`,heroTagline:`从上次离开的地方继续,或者探索新的内容。`,open:`打开`,stats:{apps:`应用`,starred:`收藏`,recent:`最近访问`},loading:`正在加载工作区...`,recent:`最近使用`,starred:`收藏`,welcome:`欢迎使用 ObjectUI`,welcomeDescription:`从创建您的第一个应用开始,或者先完成系统设置。`,createFirstApp:`创建您的第一个应用`,systemSettings:`系统设置`,browseMarketplace:`浏览应用市场`,quickActions:{title:`快捷操作`,createApp:`创建应用`,createAppDesc:`从新应用开始`,manageObjects:`管理对象`,manageObjectsDesc:`配置数据模型`,systemSettings:`系统设置`,systemSettingsDesc:`配置您的工作区`},recentApps:{title:`最近访问`,itemType:{object:`对象`,dashboard:`仪表盘`,page:`页面`,record:`记录`}},starredApps:{title:`收藏`},gettingStarted:{title:`把首页布置成你喜欢的样子`,description:`收藏一个应用即可固定到此处,一键直达。打开过的内容会自动出现在「最近访问」中。`,cta:`浏览全部应用`},appCard:{noDescription:`暂无描述`,default:`默认`}},layout:{appSwitcher:{home:`首页`,addApp:`新增应用`,editApp:`编辑应用`,manageAllApps:`管理所有应用`,systemConsole:`系统控制台`,noAppsConfigured:`尚未配置任何应用`},activityFeed:{title:`最近动态`,filter:`筛选`,empty:`暂无最近动态`,viewAll:`查看全部动态`,ariaLabel:`动态消息`,typeCreate:`创建`,typeUpdate:`更新`,typeDelete:`删除`,typeComment:`评论`,relativeJustNow:`刚刚`,relativeSecondsAgo:`{{count}} 秒前`,relativeMinutesAgo:`{{count}} 分钟前`,relativeHoursAgo:`{{count}} 小时前`,relativeDaysAgo:`{{count}} 天前`},metadata:{label:`元数据`,toggleTitle:`切换元数据检视器`,panelTitle:`元数据检视器`,jsonBadge:`JSON`,copyJson:`复制 JSON`}},search:{title:`搜索`,back:`返回`,placeholder:`搜索对象、仪表板、页面、报表…`,inputAriaLabel:`搜索对象、仪表板、页面、报表`,resultsCount:`找到 {{count}} 条与“{{query}}”相关的结果`,resultsCountPlural:`找到 {{count}} 条与“{{query}}”相关的结果`,itemsAvailable:`共 {{count}} 项可搜索`,noResults:`未找到结果`,noResultsHint:`请尝试调整搜索关键字`,typeObjects:`对象`,typeDashboards:`仪表板`,typePages:`页面`,typeReports:`报表`,badgeObject:`对象`,badgeDashboard:`仪表板`,badgePage:`页面`,badgeReport:`报表`},empty:{objectNotFound:`未找到对象`,objectNotFoundDescription:`对象 “{{name}}” 的定义不存在。请检查配置或返回选择有效的对象。`,recordNotFound:`未找到记录`,recordNotFoundDescription:`您查找的记录不存在或已被删除。`,pageNotFound:`未找到页面`,pageNotFoundDescription:`未找到页面 “{{name}}”,可能已被删除或重命名。`,dashboardNotFound:`未找到仪表板`,dashboardNotFoundDescription:`未找到仪表板 “{{name}}”,可能已被删除或重命名。`,reportNotFound:`未找到报表`,reportNotFoundDescription:`未找到报表 “{{name}}”,可能已被删除或重命名。`,noAppsConfigured:`尚未配置应用`,noAppsConfiguredDescription:`当前没有任何已注册的应用。请创建您的第一个应用,或前往系统设置进行配置。`,createFirstApp:`创建您的第一个应用`,systemSettings:`系统设置`,back:`返回`},renderer:{noPageSchema:`未提供页面 schema`,noFormSchema:`未提供表单 schema`,noDashboardSchema:`未提供仪表板 schema`,pageRendering:`页面渲染中:{{name}}`,dashboardRendering:`仪表板渲染中:{{name}}`,formRenderingMode:`正在以 {{mode}} 模式渲染表单`,formRenderingFor:`记录 {{id}}`,createRecord:`新建记录`,editRecord:`编辑记录`,page:`页面`,dashboard:`仪表板`,save:`保存`,cancel:`取消`},actionDialog:{title:`操作参数`,description:`请填写以下信息以继续操作。`,selectPlaceholder:`请选择 {{label}}`,requiredError:`{{label}} 为必填项`,lookupPlaceholder:`粘贴 {{label}} 的记录 ID(UUID)`,lookupHelpText:`请输入引用记录的 ID。可视化选择器即将上线。`,cancel:`取消`,confirm:`确认`,defaultActionTitle:`操作`,ok:`确定`},rowAction:{openMenu:`更多操作`,edit:`编辑`,delete:`删除`},navigationSync:{addedPage:`导航已更新:已添加页面 “{{name}}”`,addedDashboard:`导航已更新:已添加仪表板 “{{name}}”`,removedPage:`导航已更新:已移除页面 “{{name}}”`,removedDashboard:`导航已更新:已移除仪表板 “{{name}}”`,renamedPage:`导航已更新:页面 “{{oldName}}” 已重命名为 “{{newName}}”`,renamedDashboard:`导航已更新:仪表板 “{{oldName}}” 已重命名为 “{{newName}}”`,undoLabel:`撤销`,undone:`已撤销导航变更`,undoFailed:`撤销导航变更失败`,updateFailed:`更新导航失败`},objectActions:{deleteSuccess:`{{label}} 删除成功`,deleteFailed:`删除 {{label}} 失败`,noRecordId:`未提供记录 ID`,deleteConfirm:`确定要删除此记录吗?`,bulkDeleteSuccess:`已删除 {{count}} 条 {{label}} 记录`,bulkDeletePartial:`成功 {{succeeded}} 条,失败 {{failed}} 条`},objectViewActions:{renameFailed:`重命名视图失败`,deleteFailed:`删除视图失败`},dashboardActions:{pdfPreparing:`正在准备 PDF 导出…`,exportFailed:`导出失败:{{message}}`,forecastSoon:`预测视图即将上线`},recordDetail:{viewersTooltip:`正在查看此记录的用户`},cellRender:{empty:`空`,yes:`是`,no:`否`,systemFields:`系统字段`},user:{profile:`个人资料`,settings:`设置`,logout:`注销`,preferences:`偏好设置`,theme:`主题`,language:`语言`},organizations:{mine:`我的组织`,title:`组织`,heading:`您的组织`,subtitle:`选择一个组织以继续,或新建一个组织。`,searchPlaceholder:`搜索组织`,new:`新建组织`,current:`当前组织`,manage:`管理`,emptyTitle:`尚无组织`,emptyDescription:`创建您的第一个组织以开始使用。`,noMatches:`没有匹配的组织。`},notifications:{empty:`暂无通知`,emptyUnread:`已读完所有通知`,filterUnread:`未读`,filterAll:`全部`,markAllRead:`全部标记为已读`,viewAll:`查看全部通知`,approvalsPending:`{{count}} 条待审批`,viewApprovals:`查看审批`,noPendingApprovals:`暂无待审批事项`,openApprovalsInbox:`打开审批中心`},publicForm:{submit:`提交`,submitting:`提交中…`,submitAnother:`再填一份`,poweredBy:`由 ObjectStack 提供技术支持`,secureNotice:`您的信息将通过安全通道传输,仅用于回复您本次请求。`,thankYouTitle:`感谢您的提交!`,thankYouMessage:`我们已成功收到您的信息。`,redirecting:`将在 {{seconds}} 秒后跳转…`,unavailableTitle:`表单不可用`,unavailableDescription:`该链接当前没有可用的公开表单。请确认对应视图已启用匿名分享并匹配此 slug。`,tryDemo:`试用演示`,retry:`重试`,loading:`正在加载表单…`,requiredHint:`* 为必填项`,consentLabelDefault:`我已阅读并同意隐私政策,授权对本次请求所提供的信息进行处理。`,consentLink:`隐私政策`,consentRequired:`请先勾选同意隐私政策。`,rateLimited:`请再花点时间核对一下您的填写内容,再点击提交。`,redirectBlocked:`提交成功,但出于安全考虑,跳转链接已被阻止。`,demo:{contactTitle:`联系我们`,contactDescription:`告诉我们您的项目需求,销售代表将在一个工作日内与您联系。`,supportTitle:`提交支持请求`,supportDescription:`描述您遇到的问题,我们的团队会在一个工作日内回复。`,thankYouSalesTitle:`已收到您的信息,感谢联系!`,thankYouSalesMessage:`我们的销售代表将在一个工作日内与您取得联系。`,thankYouSupportTitle:`您的请求已进入处理队列。`,thankYouSupportMessage:`支持工程师将尽快跟进。如需补充截图,请保留此页面。`,field:{firstName:`名字`,lastName:`姓氏`,email:`工作邮箱`,phone:`电话`,jobTitle:`职位`,company:`公司`,website:`官网`,industry:`行业`,companySize:`公司规模`,howCanWeHelp:`我们可以为您做些什么?`,subject:`主题`,description:`问题描述`,issueType:`问题类型`,priority:`优先级`},industry:{technology:`科技`,software:`软件 / SaaS`,finance:`金融`,healthcare:`医疗健康`,retail:`零售`,other:`其他`},issueType:{question:`咨询`,problem:`问题`,bug:`缺陷`,feature_request:`功能建议`},priority:{low:`低`,medium:`中`,high:`高`,critical:`紧急`}}},marketplace:{title:`应用市场`,subtitle:`浏览已通过审核、发布到 ObjectStack 目录中的应用。点击应用查看详情并安装到你的某个环境中。`,searchPlaceholder:`按名称或 manifest ID 搜索应用…`,searchAria:`搜索市场应用`,installed:`已安装`,installedCount:`已安装({{count}})`,refresh:`刷新`,all:`全部`,noApprovedYet:`应用市场暂无已通过审核的应用。`,noMatchFilters:`没有应用匹配当前筛选条件。`,noDescription:`未提供描述。`,back:`返回应用市场`,installedTitle:`已安装的应用`,installedSubtitle:`当前已安装到本运行时内核的应用市场软件包。缓存的清单文件位于 <code>.objectstack/installed-packages/</code>,重启后仍然保留。`,installedEmpty:`本运行时尚未安装任何应用市场应用。`,browseLink:`去应用市场看看 →`,installedAdditiveNote:`<strong>说明:</strong>内核 API 仅支持新增 — 卸载会移除磁盘上的清单,下次启动时不再加载;但运行中的内核仍会保留该应用,直到下次重启运行时才会真正卸载。`,installedAt:`安装于 {{when}}`,installedBy:`由 {{user}}`,installedPackageId:`包`,cachedAs:`缓存为 <code>{{path}}</code>`,versionBadge:`v{{version}}`,installedBadge:`已安装 v{{version}}`,load:{failed:`应用市场加载失败`,failedHint:`本运行时默认指向公共 ObjectStack 云端。请检查运行时是否在线,或通过 <code>OS_CLOUD_URL</code> 指向自托管控制面。`,packageFailed:`应用加载失败`,notFound:`未找到。`},detail:{homepage:`主页`,installedV:`已安装 · v{{version}}`,about:`简介`,noReadme:`未提供 README。`,versions:`版本`,noApprovedVersions:`暂无已审核版本。`,prerelease:`预发布`,moreOptions:`更多安装选项`,uninstallFromRuntime:`从本运行时卸载`},action:{install:`安装`,reinstall:`重新安装`,working:`处理中…`,installToCloud:`安装到云端…`,installing:`安装中…`,uninstall:`卸载`,uninstalling:`卸载中…`,details:`详情`,close:`关闭`,dismiss:`关闭`,openOnCloud:`在云端打开`,backHome:`返回首页`},install:{dialogTitle:`安装 {{name}}`,dialogDescCurrent:`安装到当前环境({{host}})。`,dialogDescPicker:`选择要将此应用安装到的环境。需要先登录 ObjectStack Cloud。`,environment:`环境`,environmentPlaceholder:`选择一个环境`,includeSampleData:`包含示例数据`,noEnvs:`当前组织没有可用的环境。`,noPermission:`你没有权限在任何环境中安装应用。仅组织所有者和管理员可以安装 — 请联系你的工作区管理员。`,signInFirst:`请先登录 ObjectStack Cloud,然后点击下方"在云端打开"。`,success:`安装成功。打开环境即可看到新应用。`,localSuccess:`已将 v{{version}} 安装到本运行时。"{{name}}" 应该已经出现在应用切换器中。`,localManifestConflict:`{{message}}
@@ -31,4 +31,4 @@ O manifesto em cache será removido.`,successInList:`{{manifestId}} removido. Re
31
31
  Кэшированный манифест будет удалён.`,successInList:`{{manifestId}} удалён. Перезапустите рантайм для полной выгрузки.`,successInDetail:`Кэшированный манифест {{manifestId}} удалён.`},accessDenied:{title:`Только для администраторов`,description:`Нет прав на установку приложений.`},category:{crm:`CRM`,erp:`ERP`,hr:`HR`,finance:`Финансы`,project:`Управление проектами`,collaboration:`Совместная работа`,analytics:`Аналитика`,integration:`Интеграция`,automation:`Автоматизация`,ai:`ИИ`,security:`Безопасность`,"developer-tools":`Инструменты разработчика`,"ui-theme":`Тема UI`,storage:`Хранилище`,other:`Другое`},pricing:{free:`Бесплатно`,freemium:`Freemium`,paid:`Платно`,subscription:`Подписка`,"usage-based":`По использованию`,"contact-sales":`Связаться с продажами`},relativeTime:{today:`сегодня`,daysAgo:`{{count}} д назад`,monthsAgo:`{{count}} мес назад`,yearsAgo:`{{count}} лет назад`}}},ar:{common:{addToFavorites:`إضافة إلى المفضلة`,removeFromFavorites:`إزالة من المفضلة`,loading:`جاري التحميل...`,save:`حفظ`,cancel:`إلغاء`,delete:`حذف`,edit:`تعديل`,create:`إنشاء`,search:`بحث`,filter:`تصفية`,reset:`إعادة تعيين`,confirm:`تأكيد`,close:`إغلاق`,back:`رجوع`,next:`التالي`,previous:`السابق`,submit:`إرسال`,refresh:`تحديث`,export:`تصدير`,import:`استيراد`,yes:`نعم`,no:`لا`,ok:`موافق`,actions:`إجراءات`,more:`المزيد`,selectAll:`تحديد الكل`,clearAll:`مسح الكل`,noData:`لا توجد بيانات`,noResults:`لم يتم العثور على نتائج`,required:`مطلوب`,optional:`اختياري`,selectOption:`اختر خياراً`,select:`اختر...`,openChat:`فتح المحادثة`,closeChat:`إغلاق المحادثة`,toggleSidebar:`تبديل الشريط الجانبي`},validation:{required:`{{field}} مطلوب`,minLength:`{{field}} يجب أن يكون {{min}} حرفاً على الأقل`,maxLength:`{{field}} يجب ألا يتجاوز {{max}} حرفاً`,min:`{{field}} يجب أن يكون {{min}} على الأقل`,max:`{{field}} يجب ألا يتجاوز {{max}}`,email:`يرجى إدخال بريد إلكتروني صالح`,url:`يرجى إدخال رابط صالح`,pattern:`صيغة {{field}} غير صالحة`,unique:`{{field}} يجب أن يكون فريداً`,type:`{{field}} يجب أن يكون {{type}} صالحاً`},form:{addItem:`إضافة عنصر`,removeItem:`إزالة عنصر`,fieldRequired:`هذا الحقل مطلوب`,invalidFormat:`صيغة غير صالحة`,saveSuccess:`تم الحفظ بنجاح`,saveError:`فشل في الحفظ`,unsavedChanges:`لديك تغييرات غير محفوظة. هل أنت متأكد أنك تريد المغادرة؟`,stepOf:`الخطوة {{current}} من {{total}}`,createTitle:`إنشاء {{object}}`,editTitle:`تعديل {{object}}`,createDescription:`إضافة {{object}} جديد إلى قاعدة البيانات.`,editDescription:`تحديث تفاصيل {{object}}`,saveRecord:`حفظ السجل`,create:`إنشاء`,update:`تحديث`,createSuccess:`تم إنشاء {{object}}`,updateSuccess:`تم تحديث {{object}}`,deleteSuccess:`تم حذف {{object}}`},fields:{richText:{format:`التنسيق: {{format}}`,basicEditorHint:`محرر النص الغني (أساسي)`,placeholder:`اكتب شيئاً...`}},table:{rowsPerPage:`صفوف في الصفحة`,showing:`عرض {{from}} إلى {{to}} من {{total}}`,noRows:`لا توجد صفوف للعرض`,sortAsc:`ترتيب تصاعدي`,sortDesc:`ترتيب تنازلي`,filterColumn:`تصفية {{column}}`,columns:`الأعمدة`,exportCSV:`تصدير CSV`,exportExcel:`تصدير Excel`,selectRow:`تحديد صف`,selectAllRows:`تحديد جميع الصفوف`,expandRow:`توسيع الصف`,collapseRow:`طي الصف`,hideColumn:`إخفاء العمود`,freezeColumn:`تجميد العمود`,unfreezeColumn:`إلغاء تجميد العمود`,pageInfo:`صفحة {{current}} من {{total}}`,totalRecords:`{{count}} إجمالي`,noResults:`لا نتائج`,noResultsHint:`حاول تعديل الفلاتر أو مصطلحات البحث.`,cancelAll:`إلغاء الكل`,saveAll:`حفظ الكل ({{count}})`,addRecord:`إضافة سجل`,open:`فتح`,search:`بحث...`,modified:`{{count}} صف(صفوف) معدّل(ة)`,selected:`{{count}} محدد(ة)`,edit:`تعديل`,delete:`حذف`},grid:{actions:`إجراءات`,edit:`تعديل`,delete:`حذف`,export:`تصدير`,exportAs:`تصدير كـ {{format}}`,loading:`جاري تحميل الشبكة...`,errorLoading:`خطأ في تحميل الشبكة`,pullToRefresh:`اسحب للتحديث`,refreshing:`جاري التحديث…`,openRecord:`فتح السجل`,rowHeight:`ارتفاع الصف: {{mode}}`,openMenu:`فتح القائمة`,empty:`فارغ`,yes:`نعم`,no:`لا`,systemFields:`النظام`,toolbar:{densityMode:`الكثافة`,densityCompact:`مضغوط`,densityComfortable:`عادي`,densitySpacious:`فسيح`,densityCycleHint:`{{label}} (انقر للتغيير)`,densityCycleShortHint:`انقر للتغيير`},import:{title:`استيراد {{object}}`,stepUpload:`رفع`,stepMapping:`تعيين`,stepPreview:`معاينة`,uploadDescription:`ارفع ملف CSV للبدء.`,mappingDescription:`عيّن أعمدة CSV إلى حقول الكائن.`,previewDescription:`راجع البيانات قبل الاستيراد.`,dragDrop:`اسحب ملف CSV هنا أو انقر للتصفح`,browseFiles:`تصفح الملفات`,onlyCsv:`ملفات CSV فقط مدعومة.`,fileNeedsHeader:`يجب أن يحتوي الملف على صف رأسي وصف بيانات واحد على الأقل.`,mappingTemplate:`قالب التعيين:`,chooseTemplate:`اختر قالباً…`,noSavedTemplates:`لا قوالب محفوظة`,noneOption:`— لا شيء —`,saveCurrent:`حفظ الحالي`,templateName:`اسم القالب`,save:`حفظ`,deleteTemplate:`حذف القالب`,csvColumn:`عمود CSV`,mapsTo:`يُعيَّن إلى`,status:`الحالة`,skipColumn:`تخطي العمود`,skip:`— تخطي —`,mapped:`مُعيَّن`,skipped:`مُتخطَّى`,rowsWithErrors:`{{count}} صف(صفوف) بها أخطاء`,rowsCorrected:`{{count}} صف(صفوف) تم تصحيحها`,clickToFix:`— انقر على خلية مميزة للتعديل.`,showingRows:`عرض {{shown}} من {{total}} صف`,importing:`جارٍ الاستيراد… {{progress}}%`,importComplete:`اكتمل الاستيراد`,imported:`{{count}} مُستورَد(ة)`,skippedCount:`{{count}} مُتخطَّى(ة)`,moreErrors:`…و{{count}} خطأ(أخطاء) أخرى`,cancel:`إلغاء`,back:`رجوع`,next:`التالي`,close:`إغلاق`,importNRows:`استيراد {{count}} صف`,importingProgress:`جارٍ الاستيراد…`,requiredMark:`*`,required:`مطلوب`,invalidType:`{{type}} غير صالح`}},calendar:{today:`اليوم`,month:`شهر`,week:`أسبوع`,day:`يوم`,agenda:`جدول أعمال`,allDay:`طوال اليوم`,noEvents:`لا توجد أحداث`,newEvent:`حدث جديد`,moreEvents:`+{{count}} المزيد`},list:{recordCount:`{{count}} سجلات`,recordCountOne:`{{count}} سجل`,addRecord:`إضافة سجل`,tabs:`علامات التبويب`,allRecords:`جميع السجلات`,search:`بحث`,filter:`تصفية`,filterRecords:`تصفية السجلات`,sort:`ترتيب`,sortRecords:`ترتيب السجلات`,group:`تجميع`,groupBy:`تجميع حسب`,export:`تصدير`,exportAs:`تصدير كـ {{format}}`,color:`لون`,rowColor:`لون الصف`,colorByField:`تلوين حسب الحقل`,clear:`مسح`,none:`لا شيء`,hideFields:`إخفاء الحقول`,noItems:`لم يتم العثور على عناصر`,noItemsMessage:`لا توجد سجلات للعرض. حاول تعديل الفلاتر أو إضافة بيانات جديدة.`,showAll:`عرض الكل`,pullToRefresh:`اسحب للتحديث`,refreshing:`جارٍ التحديث…`,share:`مشاركة`,print:`طباعة`,hideFieldsTitle:`إخفاء الحقول`,dataLimitReached:`يتم عرض أول {{limit}} سجل. قد تتوفر بيانات إضافية.`,viewSettings:`إعدادات العرض`,viewSettingsHint:`التجميع واللون والكثافة والحقول المرئية.`,addGroup:`إضافة حقل مجموعة`,collapsedByDefault:`مطوي افتراضياً`,removeGroup:`إزالة`},kanban:{addCard:`إضافة بطاقة`,addColumn:`إضافة عمود`,moveCard:`نقل بطاقة`,deleteCard:`حذف بطاقة`,deleteColumn:`حذف عمود`,noCards:`لا بطاقات`,cardTitlePlaceholder:`أدخل عنوان البطاقة...`},timeline:{bucket:{overdue:`متأخر`,today:`اليوم`,tomorrow:`غداً`,thisWeek:`هذا الأسبوع`,nextWeek:`الأسبوع القادم`,later:`لاحقاً`,noDate:`بدون تاريخ`,unassigned:`غير معين`}},gantt:{column:{taskName:`اسم المهمة`,start:`البداية`,end:`النهاية`},toolbar:{prevPeriod:`الفترة السابقة`,nextPeriod:`الفترة التالية`,zoomIn:`تكبير`,zoomOut:`تصغير`,jumpToToday:`الانتقال إلى اليوم`,today:`اليوم`,showTaskList:`إظهار قائمة المهام`,hideTaskList:`إخفاء قائمة المهام`}},view:{rename:`إعادة تسمية`,duplicateView:`تكرار العرض`,shareView:`مشاركة العرض`,setAsDefault:`تعيين كافتراضي`,pinView:`تثبيت العرض`,unpinView:`إلغاء تثبيت العرض`,changeViewType:`تغيير نوع العرض`,deleteView:`حذف العرض`,addView:`إضافة عرض`,unsavedChanges:`تغييرات غير محفوظة`,saveAsView:`حفظ كعرض`,moreViews:`{{count}} المزيد`,activeFilters:`الفلاتر نشطة`,activeSort:`الترتيب نشط`,manageViews:`إدارة العروض`,manageAllViews:`إدارة جميع العروض…`,searchViews:`البحث في العروض`,addNewView:`إضافة عرض جديد`,done:`تم`,noViewsFound:`لا توجد عروض تطابق بحثك.`,dragToReorder:`اسحب لإعادة الترتيب`,defaultView:`العرض الافتراضي`,tabActionsFor:`إجراءات العرض لـ {{name}}`,readonlyAriaLabel:`عرض للقراءة فقط`,readonlyTooltip:`عرض النظام — انسخ للتخصيص.`},detail:{back:`رجوع`,edit:`تحرير`,editInline:`تحرير`,save:`حفظ`,saveChanges:`حفظ التغييرات`,editFieldsInline:`تحرير الحقول`,share:`مشاركة`,duplicate:`نسخ`,export:`تصدير`,viewHistory:`عرض السجل`,delete:`حذف`,moreActions:`المزيد من الإجراءات`,addToFavorites:`إضافة إلى المفضلة`,removeFromFavorites:`إزالة من المفضلة`,previousRecord:`السجل السابق`,nextRecord:`السجل التالي`,recordOf:`{{current}} من {{total}}`,recordNotFound:`لم يتم العثور على السجل`,recordNotFoundDescription:`السجل الذي تبحث عنه غير موجود أو ربما تم حذفه.`,goBack:`رجوع`,details:`التفاصيل`,related:`ذات صلة`,relatedRecords:`{{count}} سجلات`,relatedRecordOne:`{{count}} سجل`,noRelatedRecords:`لا توجد سجلات ذات صلة`,loading:`جاري التحميل...`,copyToClipboard:`نسخ إلى الحافظة`,copied:`تم النسخ!`,deleteConfirmation:`هل أنت متأكد أنك تريد حذف هذا السجل؟`,editRecord:`تحرير السجل`,viewAll:`عرض الكل`,new:`جديد`,emptyValue:`—`,comments:`التعليقات`,searchComments:`البحث في التعليقات…`,addCommentPlaceholder:`أضف تعليقاً… (Ctrl+Enter للإرسال)`,noMatchingComments:`لا توجد تعليقات مطابقة`,noCommentsYet:`لا توجد تعليقات بعد`,pinned:`مثبت`,pin:`تثبيت`,unpin:`إلغاء التثبيت`,justNow:`الآن`,minutesAgo:`منذ {{count}} دقيقة`,hoursAgo:`منذ {{count}} ساعة`,daysAgo:`منذ {{count}} يوم`,dropFilesToUpload:`اسحب الملفات هنا أو انقر للرفع`,attachmentCount:`{{count}} مرفق`,attachmentCountPlural:`{{count}} مرفقات`,removeAttachment:`إزالة المرفق`,unifiedDiff:`عرض موحد`,sideBySideDiff:`عرض جنباً إلى جنب`,noChanges:`لا توجد تغييرات`,previousVersion:`السابق`,currentVersion:`الحالي`,discussion:`المناقشة`,showDiscussion:`إظهار المناقشة ({{count}})`,hideDiscussion:`إخفاء المناقشة`,bold:`غامق (Ctrl+B)`,italic:`مائل (Ctrl+I)`,listFormat:`قائمة`,inlineCode:`كود مضمن`,mentionSomeone:`إشارة إلى شخص`,preview:`معاينة`,submitComment:`إرسال (Ctrl+Enter)`,sendComment:`إرسال`,writeComment:`اكتب تعليقاً…`,subscribedTooltip:`مشترك — انقر لإلغاء الاشتراك`,unsubscribedTooltip:`الاشتراك في الإشعارات`,firstRecord:`السجل الأول (Home)`,previousRecordKey:`السجل السابق (←)`,nextRecordKey:`السجل التالي (→)`,lastRecord:`السجل الأخير (End)`,noRecords:`لا توجد سجلات`,searchWhileNavigating:`البحث أثناء التصفح`,searchRecords:`البحث في السجلات…`,allActivity:`كل النشاط`,commentsOnly:`التعليقات فقط`,fieldChangesFilter:`تغييرات الحقول`,tasksOnly:`المهام فقط`,leaveCommentPlaceholder:`اترك تعليقاً… (Ctrl+Enter للإرسال)`,noActivity:`لا يوجد نشاط مسجل`,loadMore:`تحميل المزيد`,edited:`(معدل)`,via:`عبر {{source}}`,replyCount:`{{count}} رد`,replyCountPlural:`{{count}} ردود`,replyPlaceholder:`رد…`,filterActivity:`تصفية النشاط`,openDiscussion:`فتح لوحة المناقشة`,closeDiscussion:`إغلاق لوحة المناقشة`,subscribeAriaLabel:`الاشتراك في الإشعارات`,unsubscribeAriaLabel:`إلغاء الاشتراك من الإشعارات`,clearSearch:`مسح البحث`,saving:`جارٍ الحفظ…`,lockedByApproval:`مقفل للموافقة`,lockedTooltip:`يحتوي هذا السجل على طلب موافقة معلق؛ التعديل مقفل`,cancelApproval:`إلغاء الموافقة`,cancelApprovalInFlight:`جارٍ الإلغاء…`,cancelApprovalTooltip:`إلغاء طلب الموافقة المعلق لفتح قفل السجل`,cancelApprovalFailed:`فشل إلغاء الموافقة`,cancelApprovalUnavailable:`إلغاء الموافقات غير مدعوم من مصدر البيانات هذا`,linkCopied:`تم نسخ الرابط إلى الحافظة`,linkCopyFailed:`فشل نسخ الرابط`,cancel:`إلغاء`,cancelEdit:`تجاهل التغييرات`,sectionMoreDetails:`مزيد من التفاصيل`,concurrentUpdateTitle:`تم تعديل هذا السجل من قِبل شخص آخر`,concurrentUpdateDescription:`قام مستخدم آخر بحفظ نسخة أحدث من {{field}} أثناء تعديلك. اختر كيفية حل التعارض.`,concurrentUpdateYourEdit:`تعديلك`,concurrentUpdateCurrentValue:`القيمة الحالية`,concurrentUpdateUpdatedBy:`حدّثه {{name}}`,concurrentUpdateUpdatedAt:`حُدِّث في {{when}}`,concurrentUpdateReload:`تحميل النسخة الحالية`,concurrentUpdateOverwrite:`الكتابة فوقه على أي حال`,concurrentUpdateCancel:`إلغاء`,openInNewTab:`فتح في علامة تبويب جديدة`,activity:`النشاط`,history:`السجل`,editRow:`تعديل`,deleteRow:`حذف`,deleteRowConfirmation:`حذف هذا السجل؟`,deleteRowTitle:`حذف السجل`,actions:`الإجراءات`,previousPage:`السابق`,nextPage:`التالي`,pageOf:`صفحة {{current}} من {{total}}`,sortBy:`ترتيب حسب`,filterPlaceholder:`تصفية...`,highlightFields:`الحقول الرئيسية`,createdBy:`أنشأه`,updatedBy:`حدّثه`,showEmptyRelated_one:`+ {{count}} فارغ`,showEmptyRelated_other:`+ {{count}} فارغة`,copyEmail:`نسخ البريد الإلكتروني`,copyPhone:`نسخ الهاتف`,copyRecordId:`نسخ معرف السجل`,showEmptyFields:`إظهار {{count}} حقل(حقول) فارغة`,hideEmptyFields:`إخفاء الحقول الفارغة`,noValue:`لا قيمة`},chart:{noData:`لا تتوفر بيانات للرسم البياني`,loading:`جاري تحميل الرسم البياني...`},map:{searchLocations:`البحث عن المواقع…`,locationDetails:`تفاصيل الموقع`,markersCount:`{{count}} علامة`,invalidCoordinates:`{{count}} سجل بإحداثيات مفقودة أو غير صالحة مستبعد من الخريطة.`,invalidCoordinatesPlural:`{{count}} سجلات بإحداثيات مفقودة أو غير صالحة مستبعدة من الخريطة.`},workflow:{draft:`مسودة`,active:`نشط`,paused:`متوقف مؤقتاً`,completed:`مكتمل`,cancelled:`ملغي`,save:`حفظ`,publish:`نشر`,addNode:`إضافة عقدة`,workflowFlow:`سير العمل`,properties:`الخصائص`,connections:`الاتصالات`,quickConnect:`اتصال سريع`,fromPlaceholder:`من...`,toPlaceholder:`إلى...`,connect:`ربط`,label:`التسمية`,type:`النوع`,description:`الوصف`,assignee:`المسؤول`,assigneeType:`نوع المسؤول`,user:`مستخدم`,role:`دور`,group:`مجموعة`,expression:`تعبير`,timeoutMinutes:`المهلة (دقائق)`,selectNodeToEdit:`حدد عقدة لتعديل خصائصها`,workflowTitle:`عنوان سير العمل`,newWorkflow:`سير عمل جديد`,outConnections:`{{count}} مخرج`,start:`بداية`,end:`نهاية`,task:`مهمة`,userTask:`مهمة مستخدم`,serviceTask:`مهمة خدمة`,scriptTask:`مهمة نصية`,approval:`موافقة`,condition:`شرط`,parallelGateway:`بوابة متوازية`,joinGateway:`بوابة دمج`,boundaryEvent:`حدث حدودي`,delay:`تأخير`,notification:`إشعار`,webhook:`Webhook`,allowConcurrency:`السماح (تنفيذ متزامن)`,forbidConcurrency:`منع (تخطي الجديد)`,replaceConcurrency:`استبدال (إلغاء الحالي)`,queueConcurrency:`طابور (تنفيذ بعد الحالي)`,conditionEvent:`شرط`,manualEvent:`يدوي`,webhookEvent:`Webhook`,timerEvent:`مؤقت`,signalEvent:`إشارة`,versionHistory:`تاريخ الإصدارات`,importBpmn:`استيراد BPMN`,exportBpmn:`تصدير BPMN`,undo:`تراجع`,redo:`إعادة`,resetZoom:`إعادة تعيين التكبير`},dashboard:{addWidget:`إضافة أداة`,removeWidget:`إزالة أداة`,editLayout:`تعديل التخطيط`,saveLayout:`حفظ التخطيط`,resetLayout:`إعادة تعيين التخطيط`,total:`الإجمالي`,noDataAvailable:`لا بيانات متاحة`,noDataSourceFor:`لا مصدر بيانات لـ`,trend:{vsLastQuarter:`مقابل الربع الماضي`,vsLastMonth:`مقابل الشهر الماضي`,vsLastWeek:`مقابل الأسبوع الماضي`,vsLastYear:`مقابل العام الماضي`,vsYesterday:`مقابل أمس`,vsPreviousPeriod:`مقابل الفترة السابقة`}},configPanel:{save:`حفظ`,discard:`تجاهل`,close:`إغلاق`,layout:`التخطيط`,columns:`الأعمدة`,gap:`المسافة`,rowHeight:`ارتفاع الصف`,data:`البيانات`,refreshInterval:`فترة التحديث`,appearance:`المظهر`,title:`العنوان`,showDescription:`إظهار الوصف`,theme:`السمة`,configuration:`الإعداد`,general:`عام`,advanced:`متقدم`},appDesigner:{createApp:`إنشاء تطبيق`,editApp:`تعديل التطبيق`,basicInfo:`المعلومات الأساسية`,objects:`الكائنات`,navigation:`التنقل`,branding:`العلامة التجارية`,appName:`اسم التطبيق`,appTitle:`العنوان`,appDescription:`الوصف`,appIcon:`الأيقونة`,template:`القالب`,layout:`التخطيط`,layoutSidebar:`الشريط الجانبي`,layoutHeader:`الرأس`,layoutEmpty:`فارغ`,selectObjects:`تحديد الكائنات`,searchObjects:`البحث في الكائنات…`,selectAll:`تحديد الكل`,deselectAll:`إلغاء تحديد الكل`,navBuilder:`منشئ التنقل`,addGroup:`إضافة مجموعة`,addUrl:`إضافة URL`,addSeparator:`إضافة فاصل`,noNavItems:`لا توجد عناصر تنقل بعد.`,logoUrl:`Logo URL`,primaryColor:`اللون الأساسي`,faviconUrl:`Favicon URL`,preview:`معاينة`,complete:`إكمال`,snakeCaseHint:`Must be snake_case (e.g. my_app)`,modeEdit:`تعديل`,modePreview:`معاينة`,modeCode:`كود`,addWidget:`إضافة عنصر واجهة`,widgetProperties:`خصائص العنصر`,dataSource:`مصدر البيانات`,valueField:`حقل القيمة`,aggregate:`تجميع`,colorVariant:`متغير اللون`,addComponent:`إضافة مكون`,componentProperties:`خصائص المكون`,viewType:`نوع العرض`,fields:`الحقول`,toolbar:`شريط الأدوات`,showSearch:`إظهار البحث`,showFilters:`إظهار الفلاتر`,showSort:`إظهار الترتيب`,appearance:`المظهر`,rowHeight:`ارتفاع الصف`,stripedRows:`صفوف متناوبة`,bordered:`محاط بإطار`,livePreview:`معاينة مباشرة`,stepBasicDesc:`الاسم والعنوان والتخطيط`,stepObjectsDesc:`اختيار كائنات الأعمال`,stepNavigationDesc:`بناء شجرة التنقل`,stepBrandingDesc:`الشعار والألوان والأيقونة`,noObjectsFound:`لم يتم العثور على كائنات.`,noNavItemsHint:`لا توجد عناصر تنقل بعد. حدد كائنات في الخطوة السابقة أو أضف عناصر يدويًا.`,separator:`فاصل`,separatorLabel:`— فاصل —`,newGroup:`مجموعة جديدة`,newLink:`رابط جديد`,saveDraft:`حفظ المسودة`,cancelConfirmTitle:`تجاهل التغييرات؟`,cancelConfirmMessage:`لديك تغييرات غير محفوظة. هل أنت متأكد من الإلغاء؟`,confirmDiscard:`تجاهل`,keepEditing:`متابعة التحرير`,navNoItems:`لا توجد عناصر تنقل. انقر على الأزرار أعلاه لإضافة عناصر.`,navNoPreviewItems:`لا توجد عناصر`,navLivePreview:`معاينة مباشرة`,navCollapseGroup:`طي المجموعة`,navExpandGroup:`توسيع المجموعة`,navAddChild:`إضافة عنصر فرعي`,navMoveUp:`نقل لأعلى`,navMoveDown:`نقل لأسفل`,navRemove:`إزالة`,navObjectPage:`صفحة الكائن`,navDashboard:`لوحة القيادة`,navPage:`صفحة`,navReport:`تقرير`,navGroup:`مجموعة`,navUrl:`رابط`,navSeparator:`فاصل`,navTypeObject:`كائن`,navTypeDashboard:`لوحة تحكم`,navTypePage:`صفحة`,navTypeReport:`تقرير`,navTypeUrl:`رابط`,navTypeGroup:`مجموعة`,navTypeSeparator:`فاصل`,navTypeAction:`إجراء`,navEditIcon:`تعديل الأيقونة`,navToggleVisible:`تبديل الرؤية`,navHidden:`مخفي`,navExportSchema:`تصدير JSON`,navImportSchema:`استيراد JSON`,navExportSuccess:`تم تصدير مخطط التنقل`,navImportSuccess:`تم استيراد مخطط التنقل`,navImportError:`JSON تنقل غير صالح`,navIconPlaceholder:`اسم الأيقونة (مثل Users)`,dashboardEditor:`محرر لوحة التحكم`,noWidgets:`لا عناصر واجهة. انقر فوق زر أعلاه لإضافة واحد.`,widgetLayoutSize:`حجم التخطيط`,widgetWidth:`العرض`,widgetHeight:`الارتفاع`,dashboardPreview:`معاينة لوحة التحكم`,noWidgetsPreview:`لا عناصر واجهة للمعاينة`,pageCanvasEditor:`محرر قماش الصفحة`,emptyPage:`صفحة فارغة. انقر فوق زر أعلاه لإضافة مكون.`,pagePreview:`معاينة الصفحة`,noComponentsPreview:`لا مكونات للمعاينة`,modePage:`صفحة`,modeDashboard:`لوحة تحكم`,undo:`تراجع`,redo:`إعادة`,brandingEditor:`محرر العلامة التجارية`,brandingExport:`تصدير JSON`,brandingImport:`استيراد JSON`,brandingPreview:`معاينة`,brandingSampleButton:`زر نموذجي`,brandingSampleText:`هكذا سيبدو سمة علامتك التجارية.`,colorPalette:`لوحة الألوان`,fontFamily:`عائلة الخطوط`,fontDefault:`افتراضي (النظام)`,modeLight:`فاتح`,modeDark:`داكن`,mobilePreview:`معاينة الجوال`,objectManager:{title:`مدير الكائنات`,addObject:`كائن جديد`,searchPlaceholder:`البحث في الكائنات…`,noObjects:`لم يتم العثور على كائنات.`,objectName:`اسم API`,objectLabel:`التسمية`,pluralLabel:`التسمية الجمعية`,icon:`أيقونة`,selectIcon:`اختر أيقونة…`,group:`مجموعة`,noGroup:`بلا مجموعة`,sortOrder:`ترتيب الفرز`,enabled:`مفعل`,relationships:`العلاقات`,systemBadge:`النظام`,fieldCount:`{{count}} حقل(حقول)`,ungrouped:`غير مجمع`,deleteConfirmTitle:`حذف الكائن؟`,deleteConfirmMessage:`سيؤدي هذا إلى حذف الكائن وجميع حقوله بشكل دائم. لا يمكن التراجع عن هذا الإجراء.`},fieldDesigner:{title:`مصمم الحقول`,addField:`حقل جديد`,searchPlaceholder:`البحث في الحقول…`,allTypes:`جميع الأنواع`,noFields:`لم يتم العثور على حقول.`,fieldName:`اسم API`,fieldLabel:`التسمية`,fieldType:`النوع`,fieldGroup:`المجموعة`,description:`الوصف`,required:`مطلوب`,unique:`فريد`,readOnly:`للقراءة فقط`,hidden:`مخفي`,indexed:`مفهرس`,externalId:`معرف خارجي`,trackHistory:`تتبع السجل`,defaultValue:`القيمة الافتراضية`,placeholder:`نص تلميحي`,referenceTo:`مرجع إلى`,formula:`صيغة`,options:`خيارات`,addOption:`إضافة خيار`,validationRules:`قواعد التحقق`,addRule:`إضافة قاعدة`,systemBadge:`النظام`,ungrouped:`عام`,deleteConfirmTitle:`حذف الحقل؟`,deleteConfirmMessage:`سيتم حذف الحقل بشكل دائم. ستُفقد البيانات الموجودة في هذا الحقل.`,basicSection:`أساسي`,typeSpecificSection:`إعدادات النوع`,advancedSection:`متقدم`,typeCategory:{text:`نص`,number:`رقم`,date:`التاريخ والوقت`,choice:`اختيار`,relation:`علاقة`,advanced:`متقدم`}}},console:{title:`وحدة تحكم ObjectStack`,initializing:`جاري تهيئة التطبيق...`,breadcrumb:{dashboards:`لوحات المعلومات`,pages:`الصفحات`,reports:`التقارير`,system:`النظام`},loadingSteps:{connecting:`جاري الاتصال بمصدر البيانات`,loadingConfig:`جاري تحميل الإعدادات`,preparingWorkspace:`جاري تجهيز مساحة العمل`},error:{connectionFailed:`تعذّر الاتصال بالخادم`,serverUnreachable:`الخادم {{url}} غير قابل للوصول.`,checkServer:`يرجى التحقق من اتصال الشبكة أو من تشغيل الواجهة الخلفية.`,timeout:`انتهت مهلة الاتصال بعد 10 ثوانٍ.`},actions:{retry:`إعادة المحاولة`,retrying:`جاري إعادة المحاولة…`},shortcuts:{title:`اختصارات لوحة المفاتيح`,description:`مرجع سريع لجميع اختصارات لوحة المفاتيح المتاحة.`,groups:{general:`عام`,navigation:`التنقل`,dataViews:`عروض البيانات`,preferences:`التفضيلات`},openCommandPalette:`فتح لوحة الأوامر`,showShortcuts:`عرض اختصارات لوحة المفاتيح`,closeDialog:`إغلاق النافذة / اللوحة`,toggleSidebar:`تبديل الشريط الجانبي`,focusSearch:`التركيز على البحث`,createRecord:`إنشاء سجل جديد`,refreshData:`تحديث البيانات`,editRecord:`تعديل السجل المحدد`,toggleDarkMode:`تبديل الوضع الداكن`},commandPalette:{placeholder:`اكتب أمراً أو ابحث...`,noResults:`لم يتم العثور على نتائج.`,objects:`الكائنات`,dashboards:`لوحات المعلومات`,pages:`الصفحات`,reports:`التقارير`,switchApp:`تبديل التطبيق`,current:`الحالي`,preferences:`التفضيلات`,lightTheme:`المظهر الفاتح`,darkTheme:`المظهر الداكن`,systemTheme:`مظهر النظام`,actions:`الإجراءات`,openFullSearch:`فتح صفحة البحث الكاملة`,createApp:`إنشاء تطبيق جديد`,searching:`جارٍ البحث…`,records:`السجلات`,recentRecords:`شوهد مؤخراً`},errors:{somethingWentWrong:`حدث خطأ ما`,unexpectedError:`حدث خطأ غير متوقع أثناء عرض هذا المحتوى.`,tryAgain:`إعادة المحاولة`,goHome:`العودة للرئيسية`,errorDetails:`تفاصيل الخطأ (وضع التطوير فقط)`},theme:{toggle:`تبديل المظهر`,light:`فاتح`,dark:`داكن`,system:`النظام`},objectView:{objectNotFound:`الكائن غير موجود`,objectNotFoundDescription:`الكائن "{{objectName}}" غير موجود في الإعدادات الحالية.`,objectNotFoundHint:`تحقق من إعدادات التنقل في تطبيقك أو اختر كائنًا آخر من الشريط الجانبي.`,allRecords:`جميع السجلات`,exitDesignMode:`الخروج من وضع التصميم`,enterDesignMode:`الدخول إلى وضع التصميم`,metadataInspector:`مفتش البيانات الوصفية`,editView:`تعديل العرض`,addView:`إضافة عرض`,designTools:`أدوات التصميم`,new:`جديد`,configureView:`تكوين العرض`,closePanel:`إغلاق اللوحة`,page:`الصفحة`,pageConfigHint:`شريط الأدوات والتنقل وإعدادات غلاف العرض`,listConfigHint:`عرض البيانات والأعمدة والمظهر لهذا النوع من القائمة`,general:`عام`,generalHint:`عنوان العرض والوصف والنوع`,toolbar:`شريط الأدوات`,toolbarHint:`البحث والتصفية والفرز والتجميع ومفاتيح الكثافة`,toolbarEnabledCount:`{{count}} من {{total}} مفعّل`,navigationSection:`التنقل`,navigationHint:`سلوك النقر على الصف وإعدادات العرض التفصيلي`,records:`السجلات`,recordsHint:`وضع التحديد وإضافة سجل والتحرير المباشر`,exportPrint:`التصدير والطباعة`,exportPrintHint:`صيغ التصدير والطباعة وعرض عدد السجلات`,showAllFields:`إظهار الكل`,hideAllFields:`إخفاء الكل`,searchFields:`البحث في الحقول...`,title:`العنوان`,description:`الوصف`,data:`البيانات`,source:`المصدر`,columns:`الأعمدة`,filterBy:`تصفية حسب`,sortBy:`ترتيب حسب`,appearance:`المظهر`,showDescription:`عرض الوصف`,viewType:`نوع العرض`,userFilters:`مرشحات المستخدم`,enableSearch:`تفعيل البحث`,enableFilter:`تفعيل التصفية`,enableSort:`تفعيل الترتيب`,enableHideFields:`تفعيل إخفاء الحقول`,enableGroup:`تفعيل التجميع`,enableColor:`تفعيل اللون`,enableDensity:`تفعيل الكثافة`,userActions:`إجراءات المستخدم`,addRecordViaForm:`إضافة سجلات عبر النموذج`,advanced:`متقدم`,allowExport:`السماح بالتصدير`,recordCount:`{{count}} سجل`,noDescription:`لا يوجد وصف`,none:`لا شيء`,columnsConfigured:`{{count}} أعمدة`,save:`حفظ`,discard:`تجاهل`,createView:`إنشاء عرض`,newView:`عرض جديد`,typeOptions:`خيارات النوع`,groupByField:`حقل التجميع`,startDateField:`حقل تاريخ البدء`,titleField:`حقل العنوان`,latitudeField:`حقل خط العرض`,longitudeField:`حقل خط الطول`,imageField:`حقل الصورة`,dateField:`حقل التاريخ`,selectField:`اختر حقلاً...`,gridOptionsHint:`يستخدم عرض الشبكة الأعمدة المكونة أعلاه.`,groupBy:`تجميع حسب`,prefixField:`حقل البادئة`,fields:`الحقول`,fieldsVisible:`{{count}} مرئي`,sortsCount:`{{count}} ترتيبات`,filtersCount:`{{count}} مرشحات`,endDateField:`حقل تاريخ الانتهاء`,color:`اللون`,fieldTextColor:`لون نص الحقل`,rowHeight:`ارتفاع الصف`,wrapHeaders:`التفاف العناوين`,showFieldDescriptions:`إظهار أوصاف الحقول`,collapseAllByDefault:`طي الكل افتراضياً`,striped:`صفوف مخططة`,bordered:`خلايا محاطة بحدود`,inlineEdit:`تحرير السجلات مباشرة`,addDeleteRecordsInline:`إضافة/حذف السجلات مباشرة`,clickIntoRecordDetails:`انقر لعرض تفاصيل السجل`,navigationMode:`وضع التنقل`,navigationWidth:`عرض التنقل`,navigationWidthHint:`متاح لأوضاع التنقل: الدرج والنافذة المنبثقة والعرض المقسم`,openNewTab:`فتح في علامة تبويب جديدة`,openNewTabHint:`متاح لأوضاع التنقل: الصفحة والنافذة الجديدة`,import:`استيراد`,importTitle:`استيراد من CSV`,importedToast:`تم استيراد {{count}} صف(صفوف).`,importedWithSkipped:`تم استيراد {{ok}} صف(صفوف)؛ تم تخطي {{skipped}}.`,showAdvancedSettings:`إظهار الإعدادات المتقدمة`,showFewerSettings:`إظهار إعدادات أقل`,createViewDesc:`اختر نوع العرض وأعطه اسماً. يمكن تغيير جميع الإعدادات لاحقاً.`,cancel:`إلغاء`,create:`إنشاء`,delete:`حذف`,deleteViewTitle:`حذف العرض`,deleteViewConfirm:`حذف العرض "{{name}}"؟ لا يمكن التراجع عن ذلك.`,bulkDeleteConfirm:`حذف {{count}} سجل(ات) محدد(ة)؟ لا يمكن التراجع عن ذلك.`,duplicateViewName:`يوجد عرض بهذا الاسم بالفعل.`,viewTypeGrid:`شبكة`,viewTypeGridDesc:`جدول سجلات بأسلوب جدول البيانات.`,viewTypeKanban:`كانبان`,viewTypeKanbanDesc:`بطاقات مجمعة في أعمدة بحقل تحديد واحد.`,viewTypeCalendar:`تقويم`,viewTypeCalendarDesc:`سجلات موضوعة حسب التاريخ في تقويم شهري.`,viewTypeGallery:`معرض`,viewTypeGalleryDesc:`بطاقات صور كبيرة من حقل المرفقات.`,viewTypeTimeline:`الجدول الزمني`,viewTypeTimelineDesc:`سجلات على محور زمني أفقي.`,viewTypeGantt:`غانت`,viewTypeGanttDesc:`أشرطة مشروع مع البداية/النهاية والتبعيات.`,viewTypeMap:`خريطة`,viewTypeMapDesc:`علامات جغرافية من حقول خط العرض/الطول.`,viewTypeChart:`مخطط`,viewTypeChartDesc:`مخططات شريطية/خطية/دائرية مجمعة.`,groupByFieldHelp:`تُجمّع لوحة كانبان السجلات في أعمدة حسب قيم الحقل.`,startDateFieldHelp:`يضع التقويم السجلات في الخلية المقابلة لهذا التاريخ.`,ganttStartDateFieldHelp:`يستخدم الحد الأيسر لكل شريط غانت هذا التاريخ.`,ganttEndDateFieldHelp:`يستخدم الحد الأيمن لكل شريط غانت هذا التاريخ.`,timelineDateFieldHelp:`تُوضع السجلات على الجدول الزمني بناءً على هذا التاريخ.`,latitudeFieldHelp:`حقل يحتوي على خط العرض (حقول جغرافية فقط).`,longitudeFieldHelp:`حقل يحتوي على خط الطول (حقول جغرافية فقط).`,imageFieldHelp:`تأتي غلاف المعرض من هذا الحقل للصورة أو المرفق.`,selectOption:`تحديد...`,noEligibleFieldForType:`لا يوجد حقل مؤهل من هذا النوع. أضف حقلاً إلى الكائن أولاً.`,viewTypeUnavailable:`لا يحتوي هذا الكائن على حقل يمكن أن يعمل كـ "{{field}}".`,viewTypeUnavailableShort:`غير مدعوم من هذا الكائن.`,chartType:`نوع المخطط`,chartTypeHelp:`يحدد كيفية عرض البيانات.`,chartTypeBar:`مخطط شريطي`,chartTypeLine:`مخطط خطي`,chartTypePie:`مخطط دائري`,chartTypeArea:`مخطط مساحة`,chartTypeScatter:`مخطط نقطي`,xAxisField:`حقل المحور X`,xAxisFieldHelp:`البُعد الفئوي أو الزمني.`,yAxisField:`حقل المحور Y`,yAxisFieldHelp:`الحقل الرقمي للتجميع.`,selectionMode:`وضع التحديد`,selectionNone:`لا شيء`,selectionSingle:`فردي`,selectionMultiple:`متعدد`,pageSize:`حجم الصفحة`,pageSizeOptions:`خيارات حجم الصفحة`,exportFormats:`تنسيقات التصدير`,exportMaxRecords:`الحد الأقصى للسجلات`,exportIncludeHeaders:`تضمين الرؤوس`,exportFileNamePrefix:`بادئة اسم الملف`,searchableFields:`الحقول القابلة للبحث`,filterableFields:`الحقول القابلة للتصفية`,resizableColumns:`أعمدة قابلة لتغيير الحجم`,densityCompact:`مضغوط`,densityComfortable:`عادي`,densitySpacious:`فسيح`,densityMode:`وضع الكثافة`,hiddenFields:`الحقول المخفية`,rowActions:`إجراءات الصف`,bulkActions:`إجراءات جماعية`,sharing:`مشاركة`,sharingEnabled:`المشاركة مفعلة`,sharingVisibility:`الرؤية`,addRecordEnabled:`إضافة سجل مفعلة`,addRecordPosition:`الموضع`,addRecordMode:`الوضع`,addRecordFormView:`عرض النموذج`,conditionalFormatting:`التنسيق الشرطي`,addRule:`إضافة قاعدة`,quickFilters:`فلاتر سريعة`,addQuickFilter:`إضافة فلتر سريع`,ufElements:`العناصر`,ufDropdown:`قائمة منسدلة`,ufTabs:`علامات تبويب`,ufToggle:`تبديل`,ufAddField:`+ إضافة حقل فلتر...`,ufNoFields:`لا حقول متاحة`,ufAddTab:`+ إضافة علامة تبويب`,ufTabLabel:`التسمية`,ufShowAllRecords:`إظهار علامة "جميع السجلات"`,ufAllowAddTab:`السماح بإضافة علامات تبويب`,showRecordCount:`إظهار عدد السجلات`,allowPrinting:`السماح بالطباعة`,virtualScroll:`التمرير الافتراضي`,emptyStateTitle:`عنوان الحالة الفارغة`,emptyStateMessage:`رسالة الحالة الفارغة`,emptyStateIcon:`رمز الحالة الفارغة`,ariaLabel:`تسمية ARIA`,ariaDescribedBy:`موصوف بـ ARIA`,ariaLive:`ARIA Live`,accessibility:`إمكانية الوصول`,viewTabs:`علامات تبويب العرض`},localeSwitcher:{label:`اللغة`},search:`بحث…`,nav:{pinItem:`تثبيت {{name}}`,unpinItem:`إلغاء تثبيت {{name}}`,dragToReorder:`اسحب لإعادة الترتيب`,favorites:`المفضلة`}},auth:{login:{title:`تسجيل الدخول إلى حسابك`,description:`أدخل بريدك الإلكتروني وكلمة المرور للمتابعة`,emailLabel:`البريد الإلكتروني`,emailPlaceholder:`name@example.com`,passwordLabel:`كلمة المرور`,passwordPlaceholder:`أدخل كلمة المرور`,forgotPasswordText:`نسيت كلمة المرور؟`,submitButton:`تسجيل الدخول`,submittingButton:`جارٍ تسجيل الدخول...`,noAccountText:`ليس لديك حساب؟`,signUpText:`إنشاء حساب`,errors:{invalidCredentials:`بريد إلكتروني أو كلمة مرور غير صحيحة. يرجى المحاولة مرة أخرى.`,emailNotVerified:`يرجى التحقق من بريدك الإلكتروني قبل تسجيل الدخول.`}},register:{title:`إنشاء حساب`,description:`أدخل معلوماتك للبدء`,nameLabel:`الاسم`,namePlaceholder:`محمد أحمد`,emailLabel:`البريد الإلكتروني`,emailPlaceholder:`name@example.com`,passwordLabel:`كلمة المرور`,passwordPlaceholder:`إنشاء كلمة مرور (8 أحرف على الأقل)`,confirmPasswordLabel:`تأكيد كلمة المرور`,confirmPasswordPlaceholder:`أكّد كلمة المرور`,passwordMismatchError:`كلمتا المرور غير متطابقتين`,passwordTooShortError:`يجب أن تتكون كلمة المرور من 8 أحرف على الأقل`,submitButton:`إنشاء حساب`,submittingButton:`جارٍ إنشاء الحساب...`,hasAccountText:`لديك حساب بالفعل؟`,signInText:`تسجيل الدخول`,errors:{userExists:`يوجد حساب بهذا البريد الإلكتروني بالفعل. حاول تسجيل الدخول.`},verifyInbox:{title:`تحقق من صندوق الوارد`,description:`أرسلنا رابط التحقق إلى {{email}}. انقر على الرابط لتفعيل حسابك.`,resend:`إعادة إرسال بريد التحقق`,resending:`جارٍ الإرسال…`,resent:`تم إرسال بريد التحقق.`,backToSignIn:`العودة إلى تسجيل الدخول`}},forgotPassword:{title:`إعادة تعيين كلمة المرور`,description:`أدخل عنوان بريدك الإلكتروني وسنرسل لك رابطًا لإعادة تعيين كلمة المرور`,emailLabel:`البريد الإلكتروني`,emailPlaceholder:`name@example.com`,submitButton:`إرسال رابط إعادة التعيين`,submittingButton:`جارٍ الإرسال...`,successTitle:`تحقق من بريدك الإلكتروني`,successDescription:`لقد أرسلنا رابط إعادة تعيين كلمة المرور إلى {{email}}. يرجى التحقق من بريدك الوارد.`,backToSignInText:`العودة إلى تسجيل الدخول`,rememberPasswordText:`تتذكر كلمة المرور؟`,signInText:`تسجيل الدخول`},resetPassword:{title:`تعيين كلمة مرور جديدة`,description:`اختر كلمة مرور لم تستخدمها من قبل.`,newPassword:`كلمة المرور الجديدة`,confirmPassword:`تأكيد كلمة المرور`,submit:`تحديث كلمة المرور`,submitting:`جارٍ التحديث…`,success:`تم تحديث كلمة المرور`,failed:`فشل إعادة التعيين`,invalidToken:`رابط إعادة التعيين هذا غير صالح أو منتهي الصلاحية.`,missingToken:`رابط إعادة التعيين مفقود أو منتهي الصلاحية`,passwordsMismatch:`كلمتا المرور غير متطابقتين`,requestNewLink:`طلب رابط جديد`},verifyEmail:{title:`التحقق من عنوان البريد الإلكتروني`,description:`أرسلنا رابط التحقق إلى بريدك الإلكتروني. انقر على الرابط للتحقق من حسابك.`,sentTo:`أُرسل إلى:`,verifyingTitle:`جارٍ التحقق…`,verifyingDescription:`نقوم بالتحقق من بريدك الإلكتروني. يرجى الانتظار.`,successTitle:`تم التحقق من البريد الإلكتروني`,successDescription:`تم التحقق من بريدك الإلكتروني. يمكنك الآن تسجيل الدخول.`,errorTitle:`فشل التحقق`,errorDescription:`فشل التحقق. يرجى طلب رابط جديد.`,missingToken:`رابط التحقق لا يحتوي على رمز.`,emailMissing:`عنوان البريد الإلكتروني مفقود`,resendButton:`إعادة إرسال بريد التحقق`,resending:`جارٍ الإرسال…`,resent:`تم إرسال البريد! تحقق من صندوق الوارد`,resentSuccess:`تم إرسال بريد التحقق!`,resentDescription:`يرجى التحقق من صندوق الوارد والنقر على رابط التحقق.`,resendFailed:`تعذر إعادة إرسال بريد التحقق`,signInLink:`الانتقال إلى تسجيل الدخول`,backToSignIn:`العودة إلى تسجيل الدخول`,backToLogin:`العودة إلى تسجيل الدخول`,checkSpam:`لم تستلم البريد؟ تحقق من مجلد البريد غير المرغوب أو تواصل مع الدعم.`,or:`أو`},setup:{welcomeTitle:`مرحباً بك في ObjectStack`,description:`أنشئ أول حساب مالك لإتمام الإعداد.`,yourName:`اسمك`,orgName:`اسم المنظمة`,orgNamePlaceholder:`شركة مثال`,emailLabel:`البريد الإلكتروني`,emailPlaceholder:`name@example.com`,passwordLabel:`كلمة المرور`,passwordHint:`8 أحرف على الأقل`,submit:`إنشاء حساب المالك`,submitting:`جارٍ الإعداد…`,failed:`فشل الإعداد`},device:{title:`تفويض جهاز جديد`,subtitle:`وافق على هذا الجهاز لتسجيل الدخول بوصفك {{email}}.`,userCodeLabel:`رمز الجهاز`,loggedInAs:`مسجل الدخول بوصفك {{email}}`,approve:`الموافقة على الجهاز`,approving:`جارٍ الموافقة…`,approvedTitle:`تم تفويض الجهاز`,approvedDescription:`يمكنك العودة إلى الجهاز — يجب أن يسجل الدخول قريباً.`,approveSuccess:`تم تفويض الجهاز`,approveSuccessDescription:`يمكنك إغلاق هذه النافذة.`,approveFailed:`فشلت الموافقة`,deny:`رفض الطلب`,denying:`جارٍ الرفض…`,deniedTitle:`تم رفض الوصول`,deniedDescription:`لن يُمنح الجهاز وصولاً.`,denyFailed:`تعذر رفض الطلب`,invalidTitle:`رابط جهاز غير صالح`,invalidDescription:`لم يتم تقديم رمز جهاز في URL.`,loading:`جارٍ التحميل…`,cancel:`إلغاء`},shell:{tenantHostHint:`تسجل الدخول إلى مساحة العمل هذه`}},errors:{networkError:`خطأ في الشبكة. يرجى التحقق من اتصالك.`,serverError:`خطأ في الخادم. يرجى المحاولة مرة أخرى لاحقاً.`,notFound:`المورد غير موجود.`,unauthorized:`ليس لديك صلاحية لتنفيذ هذا الإجراء.`,forbidden:`تم رفض الوصول.`,timeout:`انتهت مهلة الطلب. يرجى المحاولة مرة أخرى.`,unknown:`حدث خطأ غير متوقع.`},workspace:{label:`مساحات العمل`,default:`مساحة العمل الخاصة بي`,switch:`تبديل مساحة العمل`,create:`إنشاء مساحة عمل`,createTitle:`إنشاء مساحة عمل`,createDescription:`مساحة العمل هي مساحة مشتركة لفريقك للتعاون.`,createButton:`إنشاء مساحة عمل`,nameLabel:`اسم مساحة العمل`,namePlaceholder:`مثلاً، Acme Inc`,slugLabel:`معرف URL`,slugHint:`يستخدم في عناوين URL. أحرف صغيرة وأرقام وشرطات فقط.`,invite:`دعوة عضو`,members:`الأعضاء`,settings:`إعدادات مساحة العمل`},sidebar:{settings:`الإعدادات`,help:`المساعدة`,helpTooltip:`المساعدة والوثائق`,activityFeed:`موجز النشاط`,notifications:`الإشعارات`,approvals:`الموافقات`,inbox:`صندوق الوارد`,inboxAriaLabel:`فتح صندوق الوارد`,area:`المنطقة`,recent:`الأخيرة`,favorites:`المفضلة`,starred:`المميزة`,removeFromFavorites:`إزالة {{name}} من المفضلة`},home:{title:`الرئيسية`,subtitle:`لوحة تحكم مساحة العمل`,nav:`الرئيسية`,allApps:`جميع التطبيقات`,loading:`جارٍ تحميل مساحة العمل...`,recent:`الأخيرة`,starred:`المميزة بنجمة`,welcome:`مرحباً بك في ObjectUI`,welcomeDescription:`ابدأ بإنشاء تطبيقك الأول أو تكوين إعدادات النظام.`,createFirstApp:`أنشئ أول تطبيق لك`,systemSettings:`إعدادات النظام`,browseMarketplace:`تصفح متجر التطبيقات`,quickActions:{title:`إجراءات سريعة`,createApp:`إنشاء تطبيق`,createAppDesc:`ابدأ بتطبيق جديد`,manageObjects:`إدارة الكائنات`,manageObjectsDesc:`تكوين نماذج البيانات`,systemSettings:`إعدادات النظام`,systemSettingsDesc:`تكوين مساحة العمل الخاصة بك`},appCard:{noDescription:`لا يوجد وصف`,default:`افتراضي`},greetingMorning:`صباح الخير`,greetingAfternoon:`مساء الخير`,greetingEvening:`مساء النور`,greetingNight:`وردية الليل`,heroTagline:`استمر من حيث توقفت أو اكتشف شيئاً جديداً.`,open:`فتح`,stats:{apps:`التطبيقات`,starred:`المميزة`,recent:`الأخيرة`},recentApps:{title:`فُتح مؤخراً`,itemType:{object:`كائن`,dashboard:`لوحة تحكم`,page:`صفحة`,record:`سجل`}},starredApps:{title:`المميزة`},gettingStarted:{title:`تخصيص الصفحة الرئيسية`,description:`ضع علامة مميزة على تطبيق لتثبيته هنا والوصول إليه بنقرة واحدة. سيظهر كل ما تفتحه تلقائياً في "فُتح مؤخراً".`,cta:`استعراض جميع التطبيقات`}},layout:{appSwitcher:{home:`الرئيسية`,addApp:`إضافة تطبيق`,editApp:`تعديل التطبيق`,manageAllApps:`إدارة جميع التطبيقات`,systemConsole:`وحدة تحكم النظام`,noAppsConfigured:`لا تطبيقات مُهيأة`},activityFeed:{title:`النشاط الأخير`,filter:`تصفية`,empty:`لا نشاط أخير`,ariaLabel:`تغذية النشاط`,typeCreate:`إنشاء`,typeUpdate:`تحديث`,typeDelete:`حذف`,typeComment:`تعليق`,relativeJustNow:`الآن`,relativeSecondsAgo:`منذ {{count}} ث`,relativeMinutesAgo:`منذ {{count}} د`,relativeHoursAgo:`منذ {{count}} س`,relativeDaysAgo:`منذ {{count}} ي`,viewAll:`عرض كل النشاط`},metadata:{label:`البيانات الوصفية`,toggleTitle:`تبديل مفتش البيانات الوصفية`,panelTitle:`مفتش البيانات الوصفية`,jsonBadge:`JSON`,copyJson:`نسخ JSON`}},search:{title:`بحث`,back:`رجوع`,placeholder:`ابحث في الكائنات، لوحات التحكم، الصفحات، التقارير...`,inputAriaLabel:`ابحث في الكائنات، لوحات التحكم، الصفحات، التقارير`,resultsCount:`{{count}} نتيجة لـ "{{query}}"`,resultsCountPlural:`{{count}} نتيجة لـ "{{query}}"`,itemsAvailable:`{{count}} عنصر(عناصر) متاح(ة)`,noResults:`لم يتم العثور على نتائج`,noResultsHint:`جرب تعديل مصطلحات البحث`,typeObjects:`الكائنات`,typeDashboards:`لوحات التحكم`,typePages:`الصفحات`,typeReports:`التقارير`,badgeObject:`كائن`,badgeDashboard:`لوحة تحكم`,badgePage:`صفحة`,badgeReport:`تقرير`},empty:{objectNotFound:`الكائن غير موجود`,objectNotFoundDescription:`تعريف الكائن "{{name}}" مفقود. تحقق من الإعداد أو ارجع للخلف.`,pageNotFound:`الصفحة غير موجودة`,pageNotFoundDescription:`الصفحة "{{name}}" غير موجودة. ربما تم إزالتها أو إعادة تسميتها.`,dashboardNotFound:`لوحة التحكم غير موجودة`,dashboardNotFoundDescription:`لوحة التحكم "{{name}}" غير موجودة. ربما تم إزالتها أو إعادة تسميتها.`,reportNotFound:`التقرير غير موجود`,reportNotFoundDescription:`التقرير "{{name}}" غير موجود. ربما تم إزالته أو إعادة تسميته.`,noAppsConfigured:`لا تطبيقات مُهيأة`,noAppsConfiguredDescription:`لا تطبيقات مسجلة. أنشئ تطبيقك الأول أو زر إعدادات النظام.`,createFirstApp:`إنشاء أول تطبيق`,systemSettings:`إعدادات النظام`,back:`رجوع`,recordNotFound:`السجل غير موجود`,recordNotFoundDescription:`السجل الذي تبحث عنه غير موجود أو ربما تم حذفه.`},renderer:{noPageSchema:`لم يتم توفير مخطط الصفحة`,noFormSchema:`لم يتم توفير مخطط النموذج`,noDashboardSchema:`لم يتم توفير مخطط لوحة التحكم`,pageRendering:`تصيير الصفحة: {{name}}`,dashboardRendering:`تصيير لوحة التحكم: {{name}}`,formRenderingMode:`تصيير النموذج في وضع {{mode}}`,formRenderingFor:`للسجل {{id}}`,createRecord:`إنشاء سجل`,editRecord:`تعديل السجل`,page:`صفحة`,dashboard:`لوحة تحكم`,save:`حفظ`,cancel:`إلغاء`},actionDialog:{title:`معامِلات الإجراء`,description:`يرجى إدخال المعلومات المطلوبة للمتابعة.`,selectPlaceholder:`تحديد {{label}}`,requiredError:`{{label}} مطلوب`,cancel:`إلغاء`,confirm:`تأكيد`,defaultActionTitle:`إجراء`,ok:`موافق`,lookupPlaceholder:`لصق معرف السجل (UUID) لـ {{label}}`,lookupHelpText:`أدخل معرف سجل الكائن المرجع. سيتم إضافة أداة اختيار قريباً.`},rowAction:{openMenu:`فتح القائمة`,edit:`تعديل`,delete:`حذف`},navigationSync:{addedPage:`تم تحديث التنقل: تمت إضافة الصفحة "{{name}}"`,addedDashboard:`تم تحديث التنقل: تمت إضافة لوحة التحكم "{{name}}"`,removedPage:`تم تحديث التنقل: تمت إزالة الصفحة "{{name}}"`,removedDashboard:`تم تحديث التنقل: تمت إزالة لوحة التحكم "{{name}}"`,renamedPage:`تم تحديث التنقل: تمت إعادة تسمية الصفحة "{{oldName}}" إلى "{{newName}}"`,renamedDashboard:`تم تحديث التنقل: تمت إعادة تسمية لوحة التحكم "{{oldName}}" إلى "{{newName}}"`,undoLabel:`تراجع`,undone:`تم التراجع عن تغيير التنقل`,undoFailed:`تعذر التراجع عن تغيير التنقل`,updateFailed:`تعذر تحديث التنقل`},objectActions:{deleteSuccess:`تم حذف {{label}} بنجاح`,deleteFailed:`تعذر حذف {{label}}`,noRecordId:`لم يتم توفير معرف سجل`,deleteConfirm:`حذف هذا السجل؟`,bulkDeleteSuccess:`تم حذف {{count}} سجل(ات) {{label}}`,bulkDeletePartial:`تم حذف {{succeeded}}، فشل {{failed}}`},objectViewActions:{renameFailed:`تعذر إعادة تسمية العرض`,deleteFailed:`تعذر حذف العرض`},dashboardActions:{pdfPreparing:`جارٍ تحضير تصدير PDF…`,exportFailed:`فشل التصدير: {{message}}`,forecastSoon:`عرض التوقعات قادم قريباً`},recordDetail:{viewersTooltip:`المستخدمون يشاهدون هذا السجل الآن`},cellRender:{empty:`فارغ`,yes:`نعم`,no:`لا`,systemFields:`النظام`},user:{profile:`الملف الشخصي`,settings:`الإعدادات`,logout:`تسجيل الخروج`,preferences:`التفضيلات`,theme:`السمة`,language:`اللغة`},report:{rowTotal:`إجمالي الصف`,columnTotal:`إجمالي العمود`,grandTotal:`الإجمالي الكلي`,totals:`الإجماليات`,rowsLabel:`صف`,columnsLabel:`عمود`,allLabel:`(الكل)`,emptyLabel:`(فارغ)`,loading:`جارٍ التحميل…`,failedToLoad:`فشل تحميل المصفوفة: {{message}}`,needsAcross:"يتطلب تقرير المصفوفة حقل `groupingsAcross` واحداً على الأقل.",aggregate:{count:`عدد`,countDistinct:`عدد الفريد`,sum:`مجموع`,avg:`متوسط`,min:`الحد الأدنى`,max:`الحد الأقصى`,first:`الأول`},editor:{breadcrumb:`الإعدادات`,basic:`أساسي`,title:`العنوان`,titlePlaceholder:`مثال: المسار حسب الربع`,description:`الوصف`,descriptionPlaceholder:`ماذا يعرض هذا التقرير؟`,type:`نوع التقرير`,typeTabular:`جدولي — قائمة مسطّحة`,typeSummary:`ملخص — مجمّع مع المجاميع`,typeMatrix:`مصفوفة — محور صفوف × أعمدة`,typeJoined:`مدمج — كتل متعددة`,typeHelp:`اختر التخطيط الذي يطابق ما تريد رؤيته.`,data:`البيانات`,objectName:`مصدر البيانات`,objectNamePlaceholder:`مثال: opportunity`,objectNameHelp:`أي كائن يجب أن يستعلم عنه هذا التقرير؟`,limit:`حد عدد الصفوف`,limitPlaceholder:`مثال: 100`,columns:`الأعمدة`,columnsHint:`اختر الحقول التي ستظهر كأعمدة. أضف تجميعًا (مجموع، عدد…) في تقارير الملخص أو المصفوفة.`,filters:`عوامل التصفية`,filtersHint:`قيّد الصفوف التي تدخل في هذا التقرير.`,filtersComplex:`يستخدم هذا التقرير عامل تصفية متقدّمًا لا يمكن تحريره هنا. سيُحتفظ به كما هو عند الحفظ.`,groupBy:`التجميع حسب`,groupByHint:`جمّع البيانات واحسب المجاميع الفرعية.`,rows:`الصفوف`,rowsHint:`جمّع الصفوف حسب هذه الحقول.`,columnsAxis:`الأعمدة`,columnsAxisHint:`اعرض هذه الحقول كمحور في الأعلى.`,values:`القيم`,valuesHint:`الأرقام التي تظهر في كل خلية. اختر حقلاً واحدًا أو أكثر وأضف تجميعًا (مجموع، عدد…).`,grouping:`تجميع`,addGrouping:`إضافة تجميع`,dateGranularity:`دقة التاريخ`,dateGranularityNone:`(استخدام القيمة الأصلية)`,day:`يوم`,week:`أسبوع`,month:`شهر`,quarter:`ربع`,year:`سنة`,sortAsc:`تصاعدي`,sortDesc:`تنازلي`,chart:`الرسم البياني`,chartHint:`عرض مرئي اختياري بجانب الجدول.`,chartType:`نوع الرسم`,chartTitle:`عنوان الرسم`,chartTitlePlaceholder:`افتراضيًا يستخدم عنوان التقرير`,chartXAxis:`المحور السيني (الفئة)`,chartYAxis:`المحور الصادي (القيمة)`,chartShowLegend:`إظهار وسيلة الإيضاح`,chartShowDataLabels:`إظهار تسميات البيانات`,chartNone:`(بدون رسم)`,chartBar:`أعمدة`,chartLine:`خطي`,chartArea:`منطقة`,chartPie:`دائري`,chartDonut:`حلقي`,chartFunnel:`قمعي`,validationNeedsObject:`اختر مصدر بيانات قبل إضافة الأعمدة.`,validationMatrixNeedsRowsCols:`تتطلب تقارير المصفوفة صفًا وعمودًا واحدًا على الأقل.`,validationSummaryNeedsRows:`تتطلب تقارير الملخص حقل تجميع واحدًا على الأقل.`,blocks:`الكتل`,blocksHint:`كل كتلة هي جدولها أو رسمها البياني الخاص. عوامل تصفية الكتلة تُدمج مع عامل تصفية التقرير بمنطق AND.`,addBlock:`إضافة كتلة`,removeBlock:`إزالة الكتلة`,blockName:`اسم الكتلة`,blockNamePlaceholder:`اسم_فريد_للكتلة`,blockLabel:`التسمية المعروضة`,blockLabelPlaceholder:`تُعرض فوق الكتلة`,blockDescription:`الوصف`,blockDescriptionPlaceholder:`سياق اختياري لهذه الكتلة`,validationJoinedNeedsBlocks:`تتطلب التقارير المدمجة كتلة واحدة على الأقل.`,validationBlockNameRequired:`يجب أن يكون لكل كتلة اسم غير فارغ.`,validationBlockNameDuplicate:`يجب أن تكون أسماء الكتل فريدة داخل التقرير.`,validationBlockNeedsColumns:`تحتاج كل كتلة إلى عمود واحد على الأقل.`,noneOption:`(بلا)`,addCondition:`إضافة شرط`,combineLogic:`الدمج مع`,opContains:`يحتوي على`,opIsEmpty:`فارغ`,opIsNotEmpty:`ليس فارغًا`,formatAuto:`تلقائي`,formatCurrency:`عملة`,formatPercent:`نسبة مئوية`,formatInteger:`عدد صحيح`,formatDate:`تاريخ`,formatDatetime:`تاريخ ووقت`,columnLabelPlaceholder:`تجاوز التسمية`,aggregateColumn:`تجميع`,formatColumn:`تنسيق`,addColumns:`إضافة أعمدة`,searchFields:`البحث في الحقول…`,noMatchingFields:`لا توجد حقول تطابق بحثك.`,noFieldsAvailable:`لا توجد حقول متاحة.`,columnsCount:`{n} عمود(أعمدة) محدد(ة)`,columnsEmpty:`لم يتم تحديد أعمدة بعد.`,fieldPickerTitle:`تحديد الحقول`,fieldPickerDescription:`اختر حقلاً أو أكثر للإضافة. استخدم مربع البحث لتصفية القائمة.`,fieldPickerChangeTitle:`تغيير الحقل`,fieldPickerAddGroupingTitle:`إضافة تجميع`,fieldPickerEmpty:`(تحديد حقل)`,fieldPickerSelected:`{n} محدد(ة)`,fieldPickerClear:`مسح التحديد`,fieldPickerAdd:`إضافة`,fieldPickerAddN:`إضافة {n}`}},organizations:{mine:`مؤسساتي`,title:`المؤسسات`,heading:`مؤسساتك`,subtitle:`اختر مؤسسة للمتابعة، أو أنشئ مؤسسة جديدة.`,searchPlaceholder:`ابحث عن مؤسسة`,new:`مؤسسة جديدة`,current:`المؤسسة الحالية`,manage:`إدارة`,emptyTitle:`لا توجد مؤسسات بعد`,emptyDescription:`أنشئ مؤسستك الأولى للبدء.`,noMatches:`لا توجد مؤسسات تطابق بحثك.`},notifications:{empty:`لا توجد إشعارات`,markAllRead:`تعليم الكل كمقروء`,viewAll:`عرض جميع الإشعارات`,approvalsPending:`{{count}} موافقات معلقة`,viewApprovals:`عرض الموافقات`,noPendingApprovals:`لا توجد موافقات معلقة`,openApprovalsInbox:`فتح صندوق الموافقات`,emptyUnread:`كل شيء مقروء`,filterUnread:`غير مقروء`,filterAll:`الكل`},publicForm:{submit:`إرسال`,submitting:`جارٍ الإرسال…`,submitAnother:`إرسال رد آخر`,poweredBy:`مدعوم بـ ObjectStack`,secureNotice:`يتم نقل معلوماتك بأمان وتستخدم فقط لمعالجة طلبك.`,thankYouTitle:`شكراً!`,thankYouMessage:`تم استلام إرسالك بنجاح.`,redirecting:`إعادة توجيه خلال {{seconds}} ثانية(ثوانٍ)…`,unavailableTitle:`النموذج غير متاح`,unavailableDescription:`لا يوجد نموذج عام متاح على هذا الرابط. تأكد من تمكين المشاركة المجهولة للعرض الأساسي.`,tryDemo:`تجربة العرض التوضيحي`,retry:`إعادة المحاولة`,loading:`جارٍ تحميل النموذج…`,requiredHint:`* حقل مطلوب`,consentLabelDefault:`أوافق على سياسة الخصوصية وأعطي موافقتي على معالجة بياناتي لهذا الطلب.`,consentLink:`سياسة الخصوصية`,consentRequired:`يرجى قبول سياسة الخصوصية للمتابعة.`,rateLimited:`خذ لحظة لمراجعة إجاباتك قبل الإرسال.`,redirectBlocked:`تم قبول الإرسال، لكن رابط إعادة التوجيه تم حظره لأسباب أمنية.`,demo:{contactTitle:`تواصل معنا`,contactDescription:`أخبرنا عن مشروعك وسيتواصل معك أحد ممثلي المبيعات خلال يوم عمل.`,supportTitle:`إرسال طلب دعم`,supportDescription:`صف لنا المشكلة وسيرد فريقنا خلال يوم عمل.`,thankYouSalesTitle:`شكراً — لقد استلمنا رسالتك!`,thankYouSalesMessage:`سيتواصل معك أحد ممثلي المبيعات خلال يوم عمل.`,thankYouSupportTitle:`تم — طلبك في قائمة الانتظار.`,thankYouSupportMessage:`سيتابع معك مهندس الدعم قريباً. احفظ هذه الصفحة إذا كان لديك لقطات شاشة إضافية.`,field:{firstName:`الاسم الأول`,lastName:`اسم العائلة`,email:`البريد الإلكتروني للعمل`,phone:`الهاتف`,jobTitle:`المسمى الوظيفي`,company:`الشركة`,website:`الموقع الإلكتروني`,industry:`القطاع`,companySize:`حجم الشركة`,howCanWeHelp:`كيف يمكننا مساعدتك؟`,subject:`الموضوع`,description:`الوصف`,issueType:`نوع المشكلة`,priority:`الأولوية`},industry:{technology:`التكنولوجيا`,software:`البرمجيات / SaaS`,finance:`المالية`,healthcare:`الرعاية الصحية`,retail:`التجزئة`,other:`أخرى`},issueType:{question:`سؤال`,problem:`مشكلة`,bug:`خطأ برمجي`,feature_request:`طلب ميزة`},priority:{low:`منخفضة`,medium:`متوسطة`,high:`عالية`,critical:`حرجة`}}},marketplace:{title:`سوق التطبيقات`,subtitle:`استعرض التطبيقات المعتمدة المنشورة في كتالوج ObjectStack. انقر على تطبيق لرؤية التفاصيل وتثبيته في أحد بيئاتك.`,searchPlaceholder:`ابحث عن التطبيقات بالاسم أو معرف المانيفست…`,searchAria:`البحث في تطبيقات السوق`,installed:`مثبت`,installedCount:`مثبت ({{count}})`,refresh:`تحديث`,all:`الكل`,noApprovedYet:`لا توجد تطبيقات معتمدة للسوق بعد.`,noMatchFilters:`لا توجد تطبيقات تطابق الفلاتر.`,noDescription:`لا وصف متاح.`,back:`العودة إلى السوق`,installedTitle:`التطبيقات المثبتة`,installedSubtitle:`حزم السوق المثبتة حالياً في نواة هذا الوقت التشغيل.`,installedEmpty:`لا توجد تطبيقات سوق مثبتة في هذا الوقت التشغيل بعد.`,browseLink:`استعراض السوق →`,installedAdditiveNote:`<strong>ملاحظة:</strong> واجهة برمجة النواة إضافية فقط — إلغاء التثبيت يزيل المانيفست من القرص لكي لا يتم تحميل الحزمة عند التشغيل التالي، لكن النواة الجارية تبقي التطبيق مسجلاً حتى إعادة التشغيل.`,installedAt:`تم التثبيت {{when}}`,installedBy:`بواسطة {{user}}`,installedPackageId:`الحزمة`,cachedAs:`مخزن مؤقتاً كـ <code>{{path}}</code>`,versionBadge:`v{{version}}`,installedBadge:`مثبت v{{version}}`,load:{failed:`تعذر تحميل السوق`,failedHint:`بشكل افتراضي، يشير هذا الوقت التشغيل إلى سحابة ObjectStack العامة. تأكد من أن الوقت التشغيل متصل بالإنترنت.`,packageFailed:`تعذر تحميل الحزمة`,notFound:`غير موجود.`},detail:{homepage:`الصفحة الرئيسية`,installedV:`مثبت · v{{version}}`,about:`حول`,noReadme:`لا يوجد readme متاح.`,versions:`الإصدارات`,noApprovedVersions:`لا توجد إصدارات معتمدة.`,prerelease:`ما قبل الإصدار`,moreOptions:`مزيد من خيارات التثبيت`,uninstallFromRuntime:`إلغاء التثبيت من هذا الوقت التشغيل`},action:{install:`تثبيت`,reinstall:`إعادة التثبيت`,working:`جارٍ المعالجة…`,installToCloud:`تثبيت في السحابة…`,installing:`جارٍ التثبيت…`,uninstall:`إلغاء التثبيت`,uninstalling:`جارٍ إلغاء التثبيت…`,details:`التفاصيل`,close:`إغلاق`,dismiss:`رفض`,openOnCloud:`فتح في السحابة`,backHome:`العودة إلى الرئيسية`},install:{dialogTitle:`تثبيت {{name}}`,dialogDescCurrent:`تثبيت في هذه البيئة ({{host}}).`,dialogDescPicker:`اختر بيئة لتثبيت هذا التطبيق. يجب أن تكون مسجلاً في ObjectStack Cloud.`,environment:`البيئة`,environmentPlaceholder:`تحديد بيئة`,includeSampleData:`تضمين بيانات نموذجية`,noEnvs:`لم يتم العثور على بيئات في مؤسستك النشطة.`,noPermission:`ليس لديك إذن لتثبيت التطبيقات. فقط مالكو المؤسسة والمشرفون يمكنهم التثبيت.`,signInFirst:`يجب عليك أولاً تسجيل الدخول إلى ObjectStack Cloud.`,success:`تم التثبيت بنجاح. افتح البيئة لرؤية التطبيق الجديد.`,localSuccess:`تم تثبيت v{{version}} في هذا الوقت التشغيل. يجب أن يظهر "{{name}}" الآن في مبدّل التطبيقات.`,localManifestConflict:`{{message}}
32
32
  ملاحظة: تطبيق محلي يمتلك بالفعل هذا المعرف. أزله أولاً من objectstack.config.ts.`,localUnauthorized:`سجل الدخول إلى هذا الوقت التشغيل أولاً.`,localMarketplaceUnavailable:`هذا الوقت التشغيل لا يحتوي على OS_CLOUD_URL مُهيأ.`},uninstall:{confirm:`إلغاء تثبيت {{manifestId}} v{{version}} من هذا الوقت التشغيل؟
33
33
 
34
- سيتم إزالة المانيفست المخزن مؤقتاً.`,successInList:`تم إزالة {{manifestId}}. أعد تشغيل الوقت التشغيل لتفريغه بالكامل.`,successInDetail:`تم إزالة المانيفست المخزن مؤقتاً لـ {{manifestId}}.`},accessDenied:{title:`سوق التطبيقات للمشرفين فقط`,description:`ليس لديك إذن لتثبيت التطبيقات في هذه البيئة.`},category:{crm:`CRM`,erp:`ERP`,hr:`الموارد البشرية`,finance:`المالية`,project:`إدارة المشاريع`,collaboration:`التعاون`,analytics:`التحليلات`,integration:`التكامل`,automation:`الأتمتة`,ai:`الذكاء الاصطناعي`,security:`الأمان`,"developer-tools":`أدوات المطور`,"ui-theme":`سمة واجهة المستخدم`,storage:`التخزين`,other:`أخرى`},pricing:{free:`مجاني`,freemium:`مجاني جزئياً`,paid:`مدفوع`,subscription:`اشتراك`,"usage-based":`حسب الاستخدام`,"contact-sales":`تواصل مع المبيعات`},relativeTime:{today:`اليوم`,daysAgo:`منذ {{count}} ي`,monthsAgo:`منذ {{count}} شهر(أشهر)`,yearsAgo:`منذ {{count}} سنة(سنوات)`}}}},kr=[`ar`,`he`,`fa`,`ur`];function Ar(e){return kr.includes(e)}var jr=`__ouiLabelProbe`;function Mr(){return typeof process>`u`||!1}function Nr(){let e=new Set;return(t,n,r,i,a,o)=>{if(o&&o.__ouiLabelProbe)return;let s=Array.isArray(t)?t[0]:String(t??``),c=`${s}:${r}`;if(e.has(c))return;e.add(c);let l=i?`"${i}"`:`the key itself`;console.warn(`[object-ui i18n] Missing translation for "${r}" (language "${s}") — falling back to ${l}.`)}}function Pr(e={}){let{defaultLanguage:t=`en`,fallbackLanguage:n=`en`,resources:r={},detectBrowserLanguage:a=!0,interpolation:s,warnMissingKeys:c=Mr()}=e,l={};for(let[e,t]of Object.entries(Or))l[e]={translation:{...t,...r[e]||{}}};for(let[e,t]of Object.entries(r))l[e]||(l[e]={translation:t});let u=t;if(a&&typeof navigator<`u`){let e=navigator.language?.split(`-`)[0];e&&l[e]&&(u=e)}let d=i.createInstance();return d.use(o).init({lng:u,fallbackLng:n,resources:l,interpolation:{escapeValue:!1,...s},returnNull:!1,saveMissing:c,missingKeyHandler:c?Nr():void 0,react:{useSuspense:!1}}),d}function Fr(e){return Ar(e)?`rtl`:`ltr`}var Ir=(0,I.createContext)(null);function Lr({config:e,instance:t,loadLanguage:n,children:r}){let i=(0,I.useMemo)(()=>t||Pr(e),[t,e]),[a,o]=(0,I.useState)(i.language||`en`),c=Fr(a),l=(0,I.useRef)(new Set);(0,I.useEffect)(()=>{let e=e=>{o(e),typeof document<`u`&&(document.documentElement.dir=Fr(e),document.documentElement.lang=e)},t=i.language||a;return typeof document<`u`&&t&&(document.documentElement.dir=Fr(t),document.documentElement.lang=t),i.on(`languageChanged`,e),()=>{i.off(`languageChanged`,e)}},[i]),(0,I.useEffect)(()=>{if(!n)return;let e=i.language||`en`;l.current.has(e)||(l.current.add(e),n(e).then(t=>{t&&Object.keys(t).length>0&&(i.addResourceBundle(e,`translation`,t,!0,!0),o(e))}).catch(t=>{l.current.delete(e),console.warn(`[i18n] Failed to load app translations for '${e}':`,t)}))},[i,n]);let u=(0,I.useMemo)(()=>({language:a,changeLanguage:async e=>{if(n&&!l.current.has(e)){l.current.add(e);try{let t=await n(e);i.addResourceBundle(e,`translation`,t,!0,!0)}catch(t){l.current.delete(e),console.warn(`[i18n] Failed to load app translations for '${e}':`,t)}}await i.changeLanguage(e)},direction:c,i18n:i}),[a,c,i,n]);return I.createElement(Ir.Provider,{value:u},I.createElement(s,{i18n:i},r))}function Rr(e){let t=(0,I.useContext)(Ir),{t:n,i18n:r}=a(e);return{t:n,language:t?.language||r.language||`en`,changeLanguage:t?.changeLanguage||(async e=>{await r.changeLanguage(e)}),direction:t?.direction||`ltr`,i18n:r}}function zr(e,t){return function(){try{let n=Rr();return n.t(t)===t?{t:(t,n)=>{let r=e[t]||t;if(n)for(let[e,t]of Object.entries(n))r=r.replace(`{{${e}}}`,String(t));return r}}:{t:n.t}}catch{return{t:(t,n)=>{let r=e[t]||t;if(n)for(let[e,t]of Object.entries(n))r=r.replace(`{{${e}}}`,String(t));return r}}}}}var Br=zr({"common.selectOption":`Select an option`},`common.selectOption`),Vr=({field:e,methods:t,disabled:n=!1})=>{let{register:r,formState:{errors:i}}=t,{t:a}=Br(),o=e,s=e.widget||`text`,c=e.field,l=i[c],u=Ge(e.label),d=Ge(e.placeholder),f=Ge(e.helpText),p=e=>o.multiple&&e instanceof HTMLCollection?Array.from(e).map(e=>e.value):e;if(e.hidden)return null;let m=t=>(0,L.jsxs)(`div`,{className:`space-y-2`,children:[u&&(0,L.jsxs)(`label`,{htmlFor:c,className:`block text-sm font-medium text-gray-700`,children:[u,e.required&&(0,L.jsx)(`span`,{className:`text-red-500 ml-1`,children:`*`})]}),t,f&&(0,L.jsx)(`p`,{className:`text-sm text-gray-500`,children:f}),l&&(0,L.jsx)(`p`,{className:`text-sm text-red-600`,children:l.message})]});switch(s.toLowerCase()){case`text`:case`string`:case`email`:case`password`:case`url`:case`tel`:return m((0,L.jsx)(`input`,{id:c,type:s===`string`?`text`:s,placeholder:d,disabled:n,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`number`:case`integer`:case`float`:return m((0,L.jsx)(`input`,{id:c,type:`number`,placeholder:d,disabled:n,step:s===`integer`?`1`:`any`,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1,valueAsNumber:!0})}));case`checkbox`:case`boolean`:return(0,L.jsxs)(`div`,{className:`flex items-start space-x-2`,children:[(0,L.jsx)(`input`,{id:c,type:`checkbox`,disabled:n,className:`mt-1 h-4 w-4 text-blue-600 border-gray-300 rounded focus:ring-2 focus:ring-blue-500 disabled:opacity-50`,...r(c)}),(0,L.jsxs)(`div`,{className:`flex-1`,children:[u&&(0,L.jsxs)(`label`,{htmlFor:c,className:`text-sm font-medium text-gray-700`,children:[u,e.required&&(0,L.jsx)(`span`,{className:`text-red-500 ml-1`,children:`*`})]}),f&&(0,L.jsx)(`p`,{className:`text-sm text-gray-500 mt-1`,children:f}),l&&(0,L.jsx)(`p`,{className:`text-sm text-red-600 mt-1`,children:l.message})]})]});case`textarea`:return m((0,L.jsx)(`textarea`,{id:c,placeholder:d,disabled:n,rows:4,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`select`:case`dropdown`:return m((0,L.jsxs)(`select`,{id:c,disabled:n,multiple:o.multiple,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1,setValueAs:p}),children:[!o.multiple&&(0,L.jsx)(`option`,{value:``,children:d||a(`common.selectOption`)}),o.options?.map(e=>(0,L.jsx)(`option`,{value:e.value,disabled:e.disabled,children:e.label},e.value))]}));case`date`:return m((0,L.jsx)(`input`,{id:c,type:`date`,placeholder:d,disabled:n,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`datetime`:case`datetime-local`:return m((0,L.jsx)(`input`,{id:c,type:`datetime-local`,placeholder:d,disabled:n,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`time`:return m((0,L.jsx)(`input`,{id:c,type:`time`,placeholder:d,disabled:n,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`currency`:return m((0,L.jsxs)(`div`,{className:`relative`,children:[(0,L.jsx)(`span`,{className:`absolute left-3 top-2 text-gray-500`,children:`$`}),(0,L.jsx)(`input`,{id:c,type:`number`,placeholder:d,disabled:n,step:`0.01`,className:`w-full pl-8 pr-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1,valueAsNumber:!0})})]}));case`percent`:return m((0,L.jsxs)(`div`,{className:`relative`,children:[(0,L.jsx)(`input`,{id:c,type:`number`,placeholder:d,disabled:n,step:`0.01`,min:`0`,max:`100`,className:`w-full pr-8 pl-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1,valueAsNumber:!0})}),(0,L.jsx)(`span`,{className:`absolute right-3 top-2 text-gray-500`,children:`%`})]}));case`phone`:return m((0,L.jsx)(`input`,{id:c,type:`tel`,placeholder:d||`+1 (555) 000-0000`,disabled:n,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`markdown`:return m((0,L.jsx)(`textarea`,{id:c,placeholder:d||`Enter markdown text...`,disabled:n,rows:8,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed font-mono`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`html`:return m((0,L.jsx)(`textarea`,{id:c,placeholder:d||`Enter HTML...`,disabled:n,rows:8,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed font-mono`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`file`:return m((0,L.jsx)(`input`,{id:c,type:`file`,disabled:n,multiple:o.multiple,accept:o.accept?.join(`,`),className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed file:mr-4 file:py-2 file:px-4 file:rounded-md file:border-0 file:text-sm file:font-semibold file:bg-blue-50 file:text-blue-700 hover:file:bg-blue-100`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`image`:return m((0,L.jsx)(`input`,{id:c,type:`file`,disabled:n,multiple:o.multiple,accept:o.accept?.join(`,`)||`image/*`,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed file:mr-4 file:py-2 file:px-4 file:rounded-md file:border-0 file:text-sm file:font-semibold file:bg-blue-50 file:text-blue-700 hover:file:bg-blue-100`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`location`:return m((0,L.jsxs)(`div`,{className:`space-y-2`,children:[(0,L.jsx)(`input`,{id:`${c}-lat`,type:`number`,placeholder:`Latitude`,disabled:n,step:`any`,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(`${c}.lat`,{required:e.required?`Latitude is required`:!1,valueAsNumber:!0})}),(0,L.jsx)(`input`,{id:`${c}-lng`,type:`number`,placeholder:`Longitude`,disabled:n,step:`any`,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(`${c}.lng`,{required:e.required?`Longitude is required`:!1,valueAsNumber:!0})})]}));case`lookup`:case`master_detail`:return m((0,L.jsxs)(`select`,{id:c,disabled:n,multiple:o.multiple,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1,setValueAs:p}),children:[!o.multiple&&(0,L.jsx)(`option`,{value:``,children:d||a(`common.selectOption`)}),o.options?.map(e=>(0,L.jsx)(`option`,{value:e.value,disabled:e.disabled,children:e.label},e.value))]}));case`user`:case`owner`:return m((0,L.jsxs)(`select`,{id:c,disabled:n,multiple:o.multiple,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1,setValueAs:p}),children:[!o.multiple&&(0,L.jsx)(`option`,{value:``,children:d||`Select user`}),o.options?.map(e=>(0,L.jsx)(`option`,{value:e.value,disabled:e.disabled,children:e.label},e.value))]}));case`formula`:case`summary`:case`auto_number`:return m((0,L.jsx)(`input`,{id:c,type:`text`,disabled:!0,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm bg-gray-50 cursor-not-allowed text-gray-600`,...r(c)}));case`object`:return m((0,L.jsx)(`textarea`,{id:c,placeholder:d||`Enter JSON object...`,disabled:n,rows:6,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed font-mono text-sm`,...r(c,{required:e.required?`${u||c} is required`:!1,validate:e=>{if(!e)return!0;try{return JSON.parse(e),!0}catch{return`Invalid JSON format`}}})}));case`vector`:return m((0,L.jsx)(`input`,{id:c,type:`text`,placeholder:d||`Vector data (read-only)`,disabled:!0,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm bg-gray-50 cursor-not-allowed text-gray-600`,...r(c)}));case`grid`:return m((0,L.jsx)(`div`,{className:`w-full px-3 py-2 border border-gray-300 rounded-md bg-gray-50 text-gray-600`,children:(0,L.jsx)(`p`,{className:`text-sm`,children:`Grid editor not yet implemented`})}));default:return m((0,L.jsx)(`input`,{id:c,type:`text`,placeholder:d,disabled:n,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1})}))}};Vr.displayName=`FieldFactory`;var Hr=({schema:e,data:t={},onSubmit:n,onChange:r,className:i=``,disabled:a=!1})=>{let o=Dr({defaultValues:t,mode:`onChange`}),{handleSubmit:s,watch:c}=o;I.useEffect(()=>{if(r){let e=c(e=>{r(e)});return()=>e.unsubscribe()}},[c,r]);let l=s(async e=>{n&&await n(e)}),u=()=>!e.sections||e.sections.length===0?null:(0,L.jsx)(`div`,{className:`space-y-6`,children:e.sections.map((e,t)=>(0,L.jsx)(Kr,{section:e,methods:o,disabled:a},t))});return(0,L.jsx)(Fn,{...o,children:(0,L.jsxs)(`form`,{onSubmit:l,className:`space-y-6 ${i}`,children:[u(),(0,L.jsx)(`div`,{className:`flex justify-end gap-2`,children:(0,L.jsx)(`button`,{type:`submit`,disabled:a,className:`px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed`,children:`Submit`})})]})})},Ur={1:`grid-cols-1`,2:`grid-cols-1 md:grid-cols-2`,3:`grid-cols-1 md:grid-cols-3`,4:`grid-cols-1 md:grid-cols-2 lg:grid-cols-4`},Wr={1:`col-span-1`,2:`col-span-2`,3:`col-span-3`,4:`col-span-4`};function Gr(e,t){if(e.hidden)return!1;if(e.visibleOn)try{return new O({data:t,form:t}).evaluateCondition(e.visibleOn)}catch{return!0}if(e.dependsOn){let n=t[e.dependsOn];return n!=null&&n!==``}return!0}var Kr=({section:e,methods:t,disabled:n=!1})=>{let[r,i]=I.useState(e.collapsed||!1),a=Ur[e.columns||1],o=I.useMemo(()=>e.fields.some(e=>typeof e==`string`?!1:!!e.dependsOn||!!e.visibleOn),[e.fields]),s=t.watch(),c=o?s:void 0;return(0,L.jsxs)(`div`,{className:`border rounded-lg p-4`,children:[e.label&&(0,L.jsxs)(`div`,{className:`flex items-center justify-between mb-4 ${e.collapsible?`cursor-pointer`:``}`,onClick:()=>{e.collapsible&&i(!r)},children:[(0,L.jsx)(`h3`,{className:`text-lg font-semibold`,children:Ge(e.label)}),e.collapsible&&(0,L.jsx)(`span`,{className:`text-sm text-gray-500`,children:r?`▶`:`▼`})]}),!r&&(0,L.jsx)(`div`,{className:`grid ${a} gap-4`,children:e.fields.map((r,i)=>{let a=typeof r==`string`?r:r.field,o=typeof r==`string`?{field:a}:r;if(!Gr(o,c||{}))return null;let s=o.colSpan||1,l=Wr[Math.min(s,e.columns||1)];return(0,L.jsx)(`div`,{className:l,children:(0,L.jsx)(Vr,{field:o,methods:t,disabled:n||o.readonly})},`${a}-${i}`)})})]})};Hr.displayName=`FormRenderer`;export{ce as $,mt as A,Ve as B,Vt as C,It as D,Ft as E,et as F,ze as G,We as H,nt as I,Pe as J,Fe as K,rt as L,ct as M,at as N,Nt as O,it as P,fe as Q,Qe as R,zt as S,Lt as T,Ue as U,He as V,Be as W,xe as X,Ne as Y,_e as Z,Zt as _,Mn as a,ne as at,Rt as b,Pn as c,v as ct,$t as d,c as dt,se as et,sn as f,Xt as g,tn as h,jr as i,O as it,lt as j,Dt as k,un as l,y as lt,cn as m,Lr as n,ie as nt,Fn as o,x as ot,en as p,Me as q,Rr as r,ae as rt,Dr as s,b as st,zr as t,oe as tt,dn as u,g as ut,qt as v,Ht as w,Bt as x,Wt as y,Ge as z};
34
+ سيتم إزالة المانيفست المخزن مؤقتاً.`,successInList:`تم إزالة {{manifestId}}. أعد تشغيل الوقت التشغيل لتفريغه بالكامل.`,successInDetail:`تم إزالة المانيفست المخزن مؤقتاً لـ {{manifestId}}.`},accessDenied:{title:`سوق التطبيقات للمشرفين فقط`,description:`ليس لديك إذن لتثبيت التطبيقات في هذه البيئة.`},category:{crm:`CRM`,erp:`ERP`,hr:`الموارد البشرية`,finance:`المالية`,project:`إدارة المشاريع`,collaboration:`التعاون`,analytics:`التحليلات`,integration:`التكامل`,automation:`الأتمتة`,ai:`الذكاء الاصطناعي`,security:`الأمان`,"developer-tools":`أدوات المطور`,"ui-theme":`سمة واجهة المستخدم`,storage:`التخزين`,other:`أخرى`},pricing:{free:`مجاني`,freemium:`مجاني جزئياً`,paid:`مدفوع`,subscription:`اشتراك`,"usage-based":`حسب الاستخدام`,"contact-sales":`تواصل مع المبيعات`},relativeTime:{today:`اليوم`,daysAgo:`منذ {{count}} ي`,monthsAgo:`منذ {{count}} شهر(أشهر)`,yearsAgo:`منذ {{count}} سنة(سنوات)`}}}},Ar=[`ar`,`he`,`fa`,`ur`];function jr(e){return Ar.includes(e)}var Mr=`__ouiLabelProbe`;function Nr(){return typeof process>`u`||!1}function Pr(){let e=new Set;return(t,n,r,i,a,o)=>{if(o&&o.__ouiLabelProbe)return;let s=Array.isArray(t)?t[0]:String(t??``),c=`${s}:${r}`;if(e.has(c))return;e.add(c);let l=i?`"${i}"`:`the key itself`;console.warn(`[object-ui i18n] Missing translation for "${r}" (language "${s}") — falling back to ${l}.`)}}function Fr(e={}){let{defaultLanguage:t=`en`,fallbackLanguage:n=`en`,resources:r={},detectBrowserLanguage:a=!0,interpolation:s,warnMissingKeys:c=Nr()}=e,l={};for(let[e,t]of Object.entries(kr))l[e]={translation:{...t,...r[e]||{}}};for(let[e,t]of Object.entries(r))l[e]||(l[e]={translation:t});let u=t;if(a&&typeof navigator<`u`){let e=navigator.language?.split(`-`)[0];e&&l[e]&&(u=e)}let d=i.createInstance();return d.use(o).init({lng:u,fallbackLng:n,resources:l,interpolation:{escapeValue:!1,...s},returnNull:!1,saveMissing:c,missingKeyHandler:c?Pr():void 0,react:{useSuspense:!1}}),d}function Ir(e){return jr(e)?`rtl`:`ltr`}var Lr=(0,I.createContext)(null);function Rr({config:e,instance:t,loadLanguage:n,children:r}){let i=(0,I.useMemo)(()=>t||Fr(e),[t,e]),[a,o]=(0,I.useState)(i.language||`en`),c=Ir(a),l=(0,I.useRef)(new Set);(0,I.useEffect)(()=>{let e=e=>{o(e),typeof document<`u`&&(document.documentElement.dir=Ir(e),document.documentElement.lang=e)},t=i.language||a;return typeof document<`u`&&t&&(document.documentElement.dir=Ir(t),document.documentElement.lang=t),i.on(`languageChanged`,e),()=>{i.off(`languageChanged`,e)}},[i]),(0,I.useEffect)(()=>{if(!n)return;let e=i.language||`en`;l.current.has(e)||(l.current.add(e),n(e).then(t=>{t&&Object.keys(t).length>0&&(i.addResourceBundle(e,`translation`,t,!0,!0),o(e))}).catch(t=>{l.current.delete(e),console.warn(`[i18n] Failed to load app translations for '${e}':`,t)}))},[i,n]);let u=(0,I.useMemo)(()=>({language:a,changeLanguage:async e=>{if(n&&!l.current.has(e)){l.current.add(e);try{let t=await n(e);i.addResourceBundle(e,`translation`,t,!0,!0)}catch(t){l.current.delete(e),console.warn(`[i18n] Failed to load app translations for '${e}':`,t)}}await i.changeLanguage(e)},direction:c,i18n:i}),[a,c,i,n]);return I.createElement(Lr.Provider,{value:u},I.createElement(s,{i18n:i},r))}function zr(e){let t=(0,I.useContext)(Lr),{t:n,i18n:r}=a(e);return{t:n,language:t?.language||r.language||`en`,changeLanguage:t?.changeLanguage||(async e=>{await r.changeLanguage(e)}),direction:t?.direction||`ltr`,i18n:r}}function Br(e,t){return function(){try{let n=zr();return n.t(t)===t?{t:(t,n)=>{let r=e[t]||t;if(n)for(let[e,t]of Object.entries(n))r=r.replace(`{{${e}}}`,String(t));return r}}:{t:n.t}}catch{return{t:(t,n)=>{let r=e[t]||t;if(n)for(let[e,t]of Object.entries(n))r=r.replace(`{{${e}}}`,String(t));return r}}}}}var Vr=Br({"common.selectOption":`Select an option`},`common.selectOption`),Hr=({field:e,methods:t,disabled:n=!1})=>{let{register:r,formState:{errors:i}}=t,{t:a}=Vr(),o=e,s=e.widget||`text`,c=e.field,l=i[c],u=Ge(e.label),d=Ge(e.placeholder),f=Ge(e.helpText),p=e=>o.multiple&&e instanceof HTMLCollection?Array.from(e).map(e=>e.value):e;if(e.hidden)return null;let m=t=>(0,L.jsxs)(`div`,{className:`space-y-2`,children:[u&&(0,L.jsxs)(`label`,{htmlFor:c,className:`block text-sm font-medium text-gray-700`,children:[u,e.required&&(0,L.jsx)(`span`,{className:`text-red-500 ml-1`,children:`*`})]}),t,f&&(0,L.jsx)(`p`,{className:`text-sm text-gray-500`,children:f}),l&&(0,L.jsx)(`p`,{className:`text-sm text-red-600`,children:l.message})]});switch(s.toLowerCase()){case`text`:case`string`:case`email`:case`password`:case`url`:case`tel`:return m((0,L.jsx)(`input`,{id:c,type:s===`string`?`text`:s,placeholder:d,disabled:n,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`number`:case`integer`:case`float`:return m((0,L.jsx)(`input`,{id:c,type:`number`,placeholder:d,disabled:n,step:s===`integer`?`1`:`any`,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1,valueAsNumber:!0})}));case`checkbox`:case`boolean`:return(0,L.jsxs)(`div`,{className:`flex items-start space-x-2`,children:[(0,L.jsx)(`input`,{id:c,type:`checkbox`,disabled:n,className:`mt-1 h-4 w-4 text-blue-600 border-gray-300 rounded focus:ring-2 focus:ring-blue-500 disabled:opacity-50`,...r(c)}),(0,L.jsxs)(`div`,{className:`flex-1`,children:[u&&(0,L.jsxs)(`label`,{htmlFor:c,className:`text-sm font-medium text-gray-700`,children:[u,e.required&&(0,L.jsx)(`span`,{className:`text-red-500 ml-1`,children:`*`})]}),f&&(0,L.jsx)(`p`,{className:`text-sm text-gray-500 mt-1`,children:f}),l&&(0,L.jsx)(`p`,{className:`text-sm text-red-600 mt-1`,children:l.message})]})]});case`textarea`:return m((0,L.jsx)(`textarea`,{id:c,placeholder:d,disabled:n,rows:4,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`select`:case`dropdown`:return m((0,L.jsxs)(`select`,{id:c,disabled:n,multiple:o.multiple,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1,setValueAs:p}),children:[!o.multiple&&(0,L.jsx)(`option`,{value:``,children:d||a(`common.selectOption`)}),o.options?.map(e=>(0,L.jsx)(`option`,{value:e.value,disabled:e.disabled,children:e.label},e.value))]}));case`date`:return m((0,L.jsx)(`input`,{id:c,type:`date`,placeholder:d,disabled:n,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`datetime`:case`datetime-local`:return m((0,L.jsx)(`input`,{id:c,type:`datetime-local`,placeholder:d,disabled:n,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`time`:return m((0,L.jsx)(`input`,{id:c,type:`time`,placeholder:d,disabled:n,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`currency`:return m((0,L.jsxs)(`div`,{className:`relative`,children:[(0,L.jsx)(`span`,{className:`absolute left-3 top-2 text-gray-500`,children:`$`}),(0,L.jsx)(`input`,{id:c,type:`number`,placeholder:d,disabled:n,step:`0.01`,className:`w-full pl-8 pr-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1,valueAsNumber:!0})})]}));case`percent`:return m((0,L.jsxs)(`div`,{className:`relative`,children:[(0,L.jsx)(`input`,{id:c,type:`number`,placeholder:d,disabled:n,step:`0.01`,min:`0`,max:`100`,className:`w-full pr-8 pl-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1,valueAsNumber:!0})}),(0,L.jsx)(`span`,{className:`absolute right-3 top-2 text-gray-500`,children:`%`})]}));case`phone`:return m((0,L.jsx)(`input`,{id:c,type:`tel`,placeholder:d||`+1 (555) 000-0000`,disabled:n,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`markdown`:return m((0,L.jsx)(`textarea`,{id:c,placeholder:d||`Enter markdown text...`,disabled:n,rows:8,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed font-mono`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`html`:return m((0,L.jsx)(`textarea`,{id:c,placeholder:d||`Enter HTML...`,disabled:n,rows:8,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed font-mono`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`file`:return m((0,L.jsx)(`input`,{id:c,type:`file`,disabled:n,multiple:o.multiple,accept:o.accept?.join(`,`),className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed file:mr-4 file:py-2 file:px-4 file:rounded-md file:border-0 file:text-sm file:font-semibold file:bg-blue-50 file:text-blue-700 hover:file:bg-blue-100`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`image`:return m((0,L.jsx)(`input`,{id:c,type:`file`,disabled:n,multiple:o.multiple,accept:o.accept?.join(`,`)||`image/*`,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed file:mr-4 file:py-2 file:px-4 file:rounded-md file:border-0 file:text-sm file:font-semibold file:bg-blue-50 file:text-blue-700 hover:file:bg-blue-100`,...r(c,{required:e.required?`${u||c} is required`:!1})}));case`location`:return m((0,L.jsxs)(`div`,{className:`space-y-2`,children:[(0,L.jsx)(`input`,{id:`${c}-lat`,type:`number`,placeholder:`Latitude`,disabled:n,step:`any`,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(`${c}.lat`,{required:e.required?`Latitude is required`:!1,valueAsNumber:!0})}),(0,L.jsx)(`input`,{id:`${c}-lng`,type:`number`,placeholder:`Longitude`,disabled:n,step:`any`,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(`${c}.lng`,{required:e.required?`Longitude is required`:!1,valueAsNumber:!0})})]}));case`lookup`:case`master_detail`:return m((0,L.jsxs)(`select`,{id:c,disabled:n,multiple:o.multiple,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1,setValueAs:p}),children:[!o.multiple&&(0,L.jsx)(`option`,{value:``,children:d||a(`common.selectOption`)}),o.options?.map(e=>(0,L.jsx)(`option`,{value:e.value,disabled:e.disabled,children:e.label},e.value))]}));case`user`:case`owner`:return m((0,L.jsxs)(`select`,{id:c,disabled:n,multiple:o.multiple,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1,setValueAs:p}),children:[!o.multiple&&(0,L.jsx)(`option`,{value:``,children:d||`Select user`}),o.options?.map(e=>(0,L.jsx)(`option`,{value:e.value,disabled:e.disabled,children:e.label},e.value))]}));case`formula`:case`summary`:case`auto_number`:return m((0,L.jsx)(`input`,{id:c,type:`text`,disabled:!0,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm bg-gray-50 cursor-not-allowed text-gray-600`,...r(c)}));case`object`:return m((0,L.jsx)(`textarea`,{id:c,placeholder:d||`Enter JSON object...`,disabled:n,rows:6,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed font-mono text-sm`,...r(c,{required:e.required?`${u||c} is required`:!1,validate:e=>{if(!e)return!0;try{return JSON.parse(e),!0}catch{return`Invalid JSON format`}}})}));case`vector`:return m((0,L.jsx)(`input`,{id:c,type:`text`,placeholder:d||`Vector data (read-only)`,disabled:!0,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm bg-gray-50 cursor-not-allowed text-gray-600`,...r(c)}));case`grid`:return m((0,L.jsx)(`div`,{className:`w-full px-3 py-2 border border-gray-300 rounded-md bg-gray-50 text-gray-600`,children:(0,L.jsx)(`p`,{className:`text-sm`,children:`Grid editor not yet implemented`})}));default:return m((0,L.jsx)(`input`,{id:c,type:`text`,placeholder:d,disabled:n,className:`w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed`,...r(c,{required:e.required?`${u||c} is required`:!1})}))}};Hr.displayName=`FieldFactory`;var Ur=({schema:e,data:t={},onSubmit:n,onChange:r,className:i=``,disabled:a=!1})=>{let o=Or({defaultValues:t,mode:`onChange`}),{handleSubmit:s,watch:c}=o;I.useEffect(()=>{if(r){let e=c(e=>{r(e)});return()=>e.unsubscribe()}},[c,r]);let l=s(async e=>{n&&await n(e)}),u=()=>!e.sections||e.sections.length===0?null:(0,L.jsx)(`div`,{className:`space-y-6`,children:e.sections.map((e,t)=>(0,L.jsx)(qr,{section:e,methods:o,disabled:a},t))});return(0,L.jsx)(Fn,{...o,children:(0,L.jsxs)(`form`,{onSubmit:l,className:`space-y-6 ${i}`,children:[u(),(0,L.jsx)(`div`,{className:`flex justify-end gap-2`,children:(0,L.jsx)(`button`,{type:`submit`,disabled:a,className:`px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed`,children:`Submit`})})]})})},Wr={1:`grid-cols-1`,2:`grid-cols-1 md:grid-cols-2`,3:`grid-cols-1 md:grid-cols-3`,4:`grid-cols-1 md:grid-cols-2 lg:grid-cols-4`},Gr={1:`col-span-1`,2:`col-span-2`,3:`col-span-3`,4:`col-span-4`};function Kr(e,t){if(e.hidden)return!1;if(e.visibleOn)try{return new k({data:t,form:t}).evaluateCondition(e.visibleOn)}catch{return!0}if(e.dependsOn){let n=t[e.dependsOn];return n!=null&&n!==``}return!0}var qr=({section:e,methods:t,disabled:n=!1})=>{let[r,i]=I.useState(e.collapsed||!1),a=Wr[e.columns||1],o=I.useMemo(()=>e.fields.some(e=>typeof e==`string`?!1:!!e.dependsOn||!!e.visibleOn),[e.fields]),s=t.watch(),c=o?s:void 0;return(0,L.jsxs)(`div`,{className:`border rounded-lg p-4`,children:[e.label&&(0,L.jsxs)(`div`,{className:`flex items-center justify-between mb-4 ${e.collapsible?`cursor-pointer`:``}`,onClick:()=>{e.collapsible&&i(!r)},children:[(0,L.jsx)(`h3`,{className:`text-lg font-semibold`,children:Ge(e.label)}),e.collapsible&&(0,L.jsx)(`span`,{className:`text-sm text-gray-500`,children:r?`▶`:`▼`})]}),!r&&(0,L.jsx)(`div`,{className:`grid ${a} gap-4`,children:e.fields.map((r,i)=>{let a=typeof r==`string`?r:r.field,o=typeof r==`string`?{field:a}:r;if(!Kr(o,c||{}))return null;let s=o.colSpan||1,l=Gr[Math.min(s,e.columns||1)];return(0,L.jsx)(`div`,{className:l,children:(0,L.jsx)(Hr,{field:o,methods:t,disabled:n||o.readonly})},`${a}-${i}`)})})]})};Ur.displayName=`FormRenderer`;export{se as $,mt as A,Ve as B,Vt as C,It as D,Ft as E,et as F,ze as G,We as H,nt as I,Pe as J,Fe as K,rt as L,ct as M,at as N,Nt as O,it as P,de as Q,Qe as R,zt as S,Lt as T,Ue as U,He as V,Be as W,xe as X,Ne as Y,_e as Z,Zt as _,Mn as a,te as at,Rt as b,Pn as c,v as ct,$t as d,c as dt,oe as et,sn as f,Xt as g,tn as h,Mr as i,k as it,lt as j,Dt as k,un as l,y as lt,cn as m,Rr as n,re as nt,Fn as o,x as ot,en as p,Me as q,zr as r,ie as rt,Or as s,b as st,Br as t,ae as tt,dn as u,g as ut,qt as v,Ht as w,Bt as x,Wt as y,Ge as z};