@object-ui/console 3.1.3 → 3.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/AddressField-BLYuFwUv.js +1 -0
- package/dist/assets/AdvancedChartImpl-Dvg6YIfN.js +7 -0
- package/dist/assets/AppManagementPage-C5q5QBar.js +1 -0
- package/dist/assets/AuditLogPage-BpLFTD-b.js +1 -0
- package/dist/assets/AuthPageLayout-DDjJTsQ6.js +1 -0
- package/dist/assets/AutoNumberField-DLmi_0fk.js +1 -0
- package/dist/assets/AvatarField-BfoEDA_D.js +1 -0
- package/dist/assets/BooleanField-W3_x7RAZ.js +1 -0
- package/dist/assets/ChartImpl-Cwo6IWnY.js +1 -0
- package/dist/assets/CodeField-BWFqblAU.js +1 -0
- package/dist/assets/ColorField-Y8WM1wXE.js +1 -0
- package/dist/assets/CreateAppPage-A-VfItcx.js +1 -0
- package/dist/assets/CurrencyField-BeuE1bRa.js +1 -0
- package/dist/assets/DashboardDesignPage-N8NL-jkM.js +1 -0
- package/dist/assets/DashboardView-Dy0d2kFj.js +1 -0
- package/dist/assets/DateField-2Lf9jstN.js +1 -0
- package/dist/assets/DateTimeField-BkMuhOZJ.js +1 -0
- package/dist/assets/EditAppPage-B6HL4COW.js +1 -0
- package/dist/assets/EmailField-CP_O7tmo.js +1 -0
- package/dist/assets/FileField-CcczwlRk.js +1 -0
- package/dist/assets/ForgotPasswordPage-Slo6CHvD.js +1 -0
- package/dist/assets/FormulaField-DLdg1ImO.js +1 -0
- package/dist/assets/GeolocationField-DqeMjnyo.js +1 -0
- package/dist/assets/GridField-DaWMYyuc.js +1 -0
- package/dist/assets/ImageField-DAn05d1y.js +1 -0
- package/dist/assets/KanbanEnhanced-Dj7Qccu2.js +1 -0
- package/dist/assets/KanbanImpl-D9BbG_RT.js +1 -0
- package/dist/assets/LocationField-DYHVF_gq.js +1 -0
- package/dist/assets/LoginPage-D2CqpSi0.js +1 -0
- package/dist/assets/LookupField-BF9vCmht.js +1 -0
- package/dist/assets/MarkdownImpl-B0Iew7iJ.js +29 -0
- package/dist/assets/MasterDetailField-Dw4RRQ5W.js +1 -0
- package/dist/assets/NumberField-BKuVHBrN.js +1 -0
- package/dist/assets/ObjectField-z00gmFEc.js +1 -0
- package/dist/assets/OrgManagementPage-BqtqRi_6.js +1 -0
- package/dist/assets/PageDesignPage-BzIL8o0u.js +1 -0
- package/dist/assets/PageView-eCi7zkJr.js +2 -0
- package/dist/assets/PasswordField-B_rXL4g9.js +1 -0
- package/dist/assets/PercentField-Bn_SIbNe.js +1 -0
- package/dist/assets/PermissionManagementPage-BmI-0QXt.js +1 -0
- package/dist/assets/PhoneField-DuheMaUR.js +1 -0
- package/dist/assets/ProfilePage-CUo-xIgl.js +1 -0
- package/dist/assets/QRCodeField-IPS2Rpmi.js +1 -0
- package/dist/assets/RatingField-M6qZlpA4.js +1 -0
- package/dist/assets/RecordDetailView-CFVPmfrM.js +1 -0
- package/dist/assets/RegisterPage-D7PJIabW.js +1 -0
- package/dist/assets/ReportView-DNOPIpWM.js +1 -0
- package/dist/assets/RichTextField-CDGy9V9x.js +1 -0
- package/dist/assets/RoleManagementPage-DwtqyfDW.js +1 -0
- package/dist/assets/SearchResultsPage-BxzOkRnL.js +1 -0
- package/dist/assets/SelectField-F6UDlyvf.js +1 -0
- package/dist/assets/SignatureField-CHN7xBII.js +1 -0
- package/dist/assets/SliderField-BOfEMQyU.js +1 -0
- package/dist/assets/SummaryField-CZ8KzmBZ.js +1 -0
- package/dist/assets/SystemHubPage-RFiJSMgW.js +1 -0
- package/dist/assets/TextAreaField-1E39zZ_x.js +1 -0
- package/dist/assets/TextField-CwuU0Crc.js +1 -0
- package/dist/assets/TimeField-CEWXxhLE.js +1 -0
- package/dist/assets/UrlField-BtUImn9B.js +1 -0
- package/dist/assets/UserField-DSSEoy5L.js +1 -0
- package/dist/assets/UserManagementPage-BBS1vYGa.js +1 -0
- package/dist/assets/VectorField-BjfQeTZT.js +1 -0
- package/dist/assets/data-adapter-wZ81OFjZ.js +39 -0
- package/dist/assets/framework-DJlDX9E6.js +1 -0
- package/dist/assets/index-D9-L0QBO.css +2 -0
- package/dist/assets/index-DDpLaQOV.js +8 -0
- package/dist/assets/infrastructure-C6Ph6Ug0.js +3 -0
- package/dist/assets/maplibre-gl-DsUGuDud.js +756 -0
- package/dist/assets/plugins-core-Cfhp_BXE.css +2 -0
- package/dist/assets/plugins-core-PiAAytWV.js +136 -0
- package/dist/assets/plugins-views-CE0VP3vl.js +62 -0
- package/dist/assets/plugins-views-DnNKJB60.css +1 -0
- package/dist/assets/rolldown-runtime-Dw2cE7zH.js +1 -0
- package/dist/assets/skeletons-DcGqw3b1.js +1 -0
- package/dist/assets/src-oeWLmiqa.js +1 -0
- package/dist/assets/systemObjects-5--4zaiX.js +1 -0
- package/dist/assets/ui-layout-DdDX0gzI.js +3 -0
- package/dist/assets/vendor-charts-Bl5l0H2K.js +3 -0
- package/dist/assets/vendor-objectstack-BtztJIHv.js +1 -0
- package/dist/assets/vendor-react-BwtAzZZ3.js +9 -0
- package/dist/index.html +15 -24
- package/dist/mockServiceWorker.js +1 -1
- package/package.json +44 -44
- package/dist/assets/AdvancedChartImpl-BvIFxlPf.js +0 -7
- package/dist/assets/AppManagementPage-6bzxYNlP.js +0 -1
- package/dist/assets/AuditLogPage-qCzdxaNq.js +0 -1
- package/dist/assets/AuthPageLayout-DkrxSZOE.js +0 -1
- package/dist/assets/ChartImpl-DYQ9eXJz.js +0 -1
- package/dist/assets/CreateAppPage-DNKskVHK.js +0 -1
- package/dist/assets/DashboardDesignPage-T9tEAHAx.js +0 -1
- package/dist/assets/DashboardView-jCJCERzJ.js +0 -1
- package/dist/assets/EditAppPage-UGT9V29B.js +0 -1
- package/dist/assets/ForgotPasswordPage-Ca0lLZwY.js +0 -1
- package/dist/assets/KanbanEnhanced-CyIdmKhW.js +0 -1
- package/dist/assets/KanbanImpl-PGPpv-gu.js +0 -1
- package/dist/assets/LoginPage-BR2RpoGG.js +0 -1
- package/dist/assets/MarkdownImpl-eDhoPCJp.js +0 -29
- package/dist/assets/OrgManagementPage-DjT2mZ2x.js +0 -1
- package/dist/assets/PageDesignPage-DTEQcEuR.js +0 -1
- package/dist/assets/PageView-CFJhE0CN.js +0 -2
- package/dist/assets/PermissionManagementPage-C_FPnvGW.js +0 -1
- package/dist/assets/ProfilePage-CQkgvEEi.js +0 -1
- package/dist/assets/RecordDetailView-ClpxNRz2.js +0 -1
- package/dist/assets/RegisterPage-6IYU4bdp.js +0 -1
- package/dist/assets/ReportView-DecAJ58u.js +0 -1
- package/dist/assets/RoleManagementPage-v0ia3MGn.js +0 -1
- package/dist/assets/SearchResultsPage-CaSb54ho.js +0 -1
- package/dist/assets/SystemHubPage-PNaxZEht.js +0 -1
- package/dist/assets/UserManagementPage-KAZy5fgy.js +0 -1
- package/dist/assets/data-adapter-DCM4pdG4.js +0 -1
- package/dist/assets/framework-jBjO8CT3.js +0 -10
- package/dist/assets/index-BwkHrw9s.js +0 -1
- package/dist/assets/index-DXak0mZe.css +0 -1
- package/dist/assets/index-tta28Q_N.js +0 -9
- package/dist/assets/infrastructure-CWeiQ12V.js +0 -1
- package/dist/assets/maplibre-gl-CENyyZ0G.js +0 -811
- package/dist/assets/plugins-core-BV7ym-7D.js +0 -8
- package/dist/assets/plugins-views-P3eB-els.css +0 -1
- package/dist/assets/plugins-views-gxDbTdkX.js +0 -62
- package/dist/assets/systemObjects-DSpePIIy.js +0 -1
- package/dist/assets/ui-components-BCiSmwiC.css +0 -1
- package/dist/assets/ui-components-BRpbeVr1.js +0 -36
- package/dist/assets/ui-layout-VeUu0ZVf.js +0 -1
- package/dist/assets/vendor-charts-DthMRf4E.js +0 -60
- package/dist/assets/vendor-dndkit-_-PfuStg.js +0 -5
- package/dist/assets/vendor-i18n-B3GHNV0X.js +0 -9
- package/dist/assets/vendor-icons-CnLeuN7Z.js +0 -8566
- package/dist/assets/vendor-objectstack-BkRCrdfn.js +0 -34
- package/dist/assets/vendor-radix-BPVlBHPl.js +0 -56
- package/dist/assets/vendor-react-Dvo_9NuO.js +0 -60
- package/dist/assets/vendor-ui-utils-CU11aiRA.js +0 -1
- package/dist/assets/vendor-zod-CZmssJWz.js +0 -39
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{r as e,t}from"./rolldown-runtime-Dw2cE7zH.js";import{N as n,w as r}from"./framework-DJlDX9E6.js";var i=e=>typeof e==`string`,a=()=>{let e,t,n=new Promise((n,r)=>{e=n,t=r});return n.resolve=e,n.reject=t,n},o=e=>e==null?``:``+e,s=(e,t,n)=>{e.forEach(e=>{t[e]&&(n[e]=t[e])})},c=/###/g,l=e=>e&&e.indexOf(`###`)>-1?e.replace(c,`.`):e,u=e=>!e||i(e),d=(e,t,n)=>{let r=i(t)?t.split(`.`):t,a=0;for(;a<r.length-1;){if(u(e))return{};let t=l(r[a]);!e[t]&&n&&(e[t]=new n),e=Object.prototype.hasOwnProperty.call(e,t)?e[t]:{},++a}return u(e)?{}:{obj:e,k:l(r[a])}},f=(e,t,n)=>{let{obj:r,k:i}=d(e,t,Object);if(r!==void 0||t.length===1){r[i]=n;return}let a=t[t.length-1],o=t.slice(0,t.length-1),s=d(e,o,Object);for(;s.obj===void 0&&o.length;)a=`${o[o.length-1]}.${a}`,o=o.slice(0,o.length-1),s=d(e,o,Object),s?.obj&&s.obj[`${s.k}.${a}`]!==void 0&&(s.obj=void 0);s.obj[`${s.k}.${a}`]=n},p=(e,t,n,r)=>{let{obj:i,k:a}=d(e,t,Object);i[a]=i[a]||[],i[a].push(n)},m=(e,t)=>{let{obj:n,k:r}=d(e,t);if(n&&Object.prototype.hasOwnProperty.call(n,r))return n[r]},h=(e,t,n)=>{let r=m(e,n);return r===void 0?m(t,n):r},g=(e,t,n)=>{for(let r in t)r!==`__proto__`&&r!==`constructor`&&(r in e?i(e[r])||e[r]instanceof String||i(t[r])||t[r]instanceof String?n&&(e[r]=t[r]):g(e[r],t[r],n):e[r]=t[r]);return e},_=e=>e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,`\\$&`),v={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`,"/":`/`},y=e=>i(e)?e.replace(/[&<>"'\/]/g,e=>v[e]):e,b=class{constructor(e){this.capacity=e,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(e){let t=this.regExpMap.get(e);if(t!==void 0)return t;let n=new RegExp(e);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(e,n),this.regExpQueue.push(e),n}},x=[` `,`,`,`?`,`!`,`;`],S=new b(20),C=(e,t,n)=>{t||=``,n||=``;let r=x.filter(e=>t.indexOf(e)<0&&n.indexOf(e)<0);if(r.length===0)return!0;let i=S.getRegExp(`(${r.map(e=>e===`?`?`\\?`:e).join(`|`)})`),a=!i.test(e);if(!a){let t=e.indexOf(n);t>0&&!i.test(e.substring(0,t))&&(a=!0)}return a},w=(e,t,n=`.`)=>{if(!e)return;if(e[t])return Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0;let r=t.split(n),i=e;for(let e=0;e<r.length;){if(!i||typeof i!=`object`)return;let t,a=``;for(let o=e;o<r.length;++o)if(o!==e&&(a+=n),a+=r[o],t=i[a],t!==void 0){if([`string`,`number`,`boolean`].indexOf(typeof t)>-1&&o<r.length-1)continue;e+=o-e+1;break}i=t}return i},T=e=>e?.replace(/_/g,`-`),E={type:`logger`,log(e){this.output(`log`,e)},warn(e){this.output(`warn`,e)},error(e){this.output(`error`,e)},output(e,t){console?.[e]?.apply?.(console,t)}},D=new class e{constructor(e,t={}){this.init(e,t)}init(e,t={}){this.prefix=t.prefix||`i18next:`,this.logger=e||E,this.options=t,this.debug=t.debug}log(...e){return this.forward(e,`log`,``,!0)}warn(...e){return this.forward(e,`warn`,``,!0)}error(...e){return this.forward(e,`error`,``)}deprecate(...e){return this.forward(e,`warn`,`WARNING DEPRECATED: `,!0)}forward(e,t,n,r){return r&&!this.debug?null:(i(e[0])&&(e[0]=`${n}${this.prefix} ${e[0]}`),this.logger[t](e))}create(t){return new e(this.logger,{prefix:`${this.prefix}:${t}:`,...this.options})}clone(t){return t||=this.options,t.prefix=t.prefix||this.prefix,new e(this.logger,t)}},O=class{constructor(){this.observers={}}on(e,t){return e.split(` `).forEach(e=>{this.observers[e]||(this.observers[e]=new Map);let n=this.observers[e].get(t)||0;this.observers[e].set(t,n+1)}),this}off(e,t){if(this.observers[e]){if(!t){delete this.observers[e];return}this.observers[e].delete(t)}}emit(e,...t){this.observers[e]&&Array.from(this.observers[e].entries()).forEach(([e,n])=>{for(let r=0;r<n;r++)e(...t)}),this.observers[`*`]&&Array.from(this.observers[`*`].entries()).forEach(([n,r])=>{for(let i=0;i<r;i++)n.apply(n,[e,...t])})}},ee=class extends O{constructor(e,t={ns:[`translation`],defaultNS:`translation`}){super(),this.data=e||{},this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator=`.`),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(e){this.options.ns.indexOf(e)<0&&this.options.ns.push(e)}removeNamespaces(e){let t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}getResource(e,t,n,r={}){let a=r.keySeparator===void 0?this.options.keySeparator:r.keySeparator,o=r.ignoreJSONStructure===void 0?this.options.ignoreJSONStructure:r.ignoreJSONStructure,s;e.indexOf(`.`)>-1?s=e.split(`.`):(s=[e,t],n&&(Array.isArray(n)?s.push(...n):i(n)&&a?s.push(...n.split(a)):s.push(n)));let c=m(this.data,s);return!c&&!t&&!n&&e.indexOf(`.`)>-1&&(e=s[0],t=s[1],n=s.slice(2).join(`.`)),c||!o||!i(n)?c:w(this.data?.[e]?.[t],n,a)}addResource(e,t,n,r,i={silent:!1}){let a=i.keySeparator===void 0?this.options.keySeparator:i.keySeparator,o=[e,t];n&&(o=o.concat(a?n.split(a):n)),e.indexOf(`.`)>-1&&(o=e.split(`.`),r=t,t=o[1]),this.addNamespaces(t),f(this.data,o,r),i.silent||this.emit(`added`,e,t,n,r)}addResources(e,t,n,r={silent:!1}){for(let r in n)(i(n[r])||Array.isArray(n[r]))&&this.addResource(e,t,r,n[r],{silent:!0});r.silent||this.emit(`added`,e,t,n)}addResourceBundle(e,t,n,r,i,a={silent:!1,skipCopy:!1}){let o=[e,t];e.indexOf(`.`)>-1&&(o=e.split(`.`),r=n,n=t,t=o[1]),this.addNamespaces(t);let s=m(this.data,o)||{};a.skipCopy||(n=JSON.parse(JSON.stringify(n))),r?g(s,n,i):s={...s,...n},f(this.data,o,s),a.silent||this.emit(`added`,e,t,n)}removeResourceBundle(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit(`removed`,e,t)}hasResourceBundle(e,t){return this.getResource(e,t)!==void 0}getResourceBundle(e,t){return t||=this.options.defaultNS,this.getResource(e,t)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){let t=this.getDataByLanguage(e);return!!(t&&Object.keys(t)||[]).find(e=>t[e]&&Object.keys(t[e]).length>0)}toJSON(){return this.data}},te={processors:{},addPostProcessor(e){this.processors[e.name]=e},handle(e,t,n,r,i){return e.forEach(e=>{t=this.processors[e]?.process(t,n,r,i)??t}),t}},ne=Symbol(`i18next/PATH_KEY`);function re(){let e=[],t=Object.create(null),n;return t.get=(r,i)=>(n?.revoke?.(),i===ne?e:(e.push(i),n=Proxy.revocable(r,t),n.proxy)),Proxy.revocable(Object.create(null),t).proxy}function k(e,t){let{[ne]:n}=e(re()),r=t?.keySeparator??`.`,i=t?.nsSeparator??`:`;if(n.length>1&&i){let e=t?.ns,a=Array.isArray(e)?e:null;if(a&&a.length>1&&a.slice(1).includes(n[0]))return`${n[0]}${i}${n.slice(1).join(r)}`}return n.join(r)}var ie={},ae=e=>!i(e)&&typeof e!=`boolean`&&typeof e!=`number`,oe=class e extends O{constructor(e,t={}){super(),s([`resourceStore`,`languageUtils`,`pluralResolver`,`interpolator`,`backendConnector`,`i18nFormat`,`utils`],e,this),this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator=`.`),this.logger=D.create(`translator`)}changeLanguage(e){e&&(this.language=e)}exists(e,t={interpolation:{}}){let n={...t};if(e==null)return!1;let r=this.resolve(e,n);if(r?.res===void 0)return!1;let i=ae(r.res);return!(n.returnObjects===!1&&i)}extractFromKey(e,t){let n=t.nsSeparator===void 0?this.options.nsSeparator:t.nsSeparator;n===void 0&&(n=`:`);let r=t.keySeparator===void 0?this.options.keySeparator:t.keySeparator,a=t.ns||this.options.defaultNS||[],o=n&&e.indexOf(n)>-1,s=!this.options.userDefinedKeySeparator&&!t.keySeparator&&!this.options.userDefinedNsSeparator&&!t.nsSeparator&&!C(e,n,r);if(o&&!s){let t=e.match(this.interpolator.nestingRegexp);if(t&&t.length>0)return{key:e,namespaces:i(a)?[a]:a};let o=e.split(n);(n!==r||n===r&&this.options.ns.indexOf(o[0])>-1)&&(a=o.shift()),e=o.join(r)}return{key:e,namespaces:i(a)?[a]:a}}translate(t,n,r){let a=typeof n==`object`?{...n}:n;if(typeof a!=`object`&&this.options.overloadTranslationOptionHandler&&(a=this.options.overloadTranslationOptionHandler(arguments)),typeof a==`object`&&(a={...a}),a||={},t==null)return``;typeof t==`function`&&(t=k(t,{...this.options,...a})),Array.isArray(t)||(t=[String(t)]),t=t.map(e=>typeof e==`function`?k(e,{...this.options,...a}):String(e));let o=a.returnDetails===void 0?this.options.returnDetails:a.returnDetails,s=a.keySeparator===void 0?this.options.keySeparator:a.keySeparator,{key:c,namespaces:l}=this.extractFromKey(t[t.length-1],a),u=l[l.length-1],d=a.nsSeparator===void 0?this.options.nsSeparator:a.nsSeparator;d===void 0&&(d=`:`);let f=a.lng||this.language,p=a.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(f?.toLowerCase()===`cimode`)return p?o?{res:`${u}${d}${c}`,usedKey:c,exactUsedKey:c,usedLng:f,usedNS:u,usedParams:this.getUsedParamsDetails(a)}:`${u}${d}${c}`:o?{res:c,usedKey:c,exactUsedKey:c,usedLng:f,usedNS:u,usedParams:this.getUsedParamsDetails(a)}:c;let m=this.resolve(t,a),h=m?.res,g=m?.usedKey||c,_=m?.exactUsedKey||c,v=[`[object Number]`,`[object Function]`,`[object RegExp]`],y=a.joinArrays===void 0?this.options.joinArrays:a.joinArrays,b=!this.i18nFormat||this.i18nFormat.handleAsObject,x=a.count!==void 0&&!i(a.count),S=e.hasDefaultValue(a),C=x?this.pluralResolver.getSuffix(f,a.count,a):``,w=a.ordinal&&x?this.pluralResolver.getSuffix(f,a.count,{ordinal:!1}):``,T=x&&!a.ordinal&&a.count===0,E=T&&a[`defaultValue${this.options.pluralSeparator}zero`]||a[`defaultValue${C}`]||a[`defaultValue${w}`]||a.defaultValue,D=h;b&&!h&&S&&(D=E);let O=ae(D),ee=Object.prototype.toString.apply(D);if(b&&D&&O&&v.indexOf(ee)<0&&!(i(y)&&Array.isArray(D))){if(!a.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn(`accessing an object - but returnObjects options is not enabled!`);let e=this.options.returnedObjectHandler?this.options.returnedObjectHandler(g,D,{...a,ns:l}):`key '${c} (${this.language})' returned an object instead of string.`;return o?(m.res=e,m.usedParams=this.getUsedParamsDetails(a),m):e}if(s){let e=Array.isArray(D),t=e?[]:{},n=e?_:g;for(let e in D)if(Object.prototype.hasOwnProperty.call(D,e)){let r=`${n}${s}${e}`;S&&!h?t[e]=this.translate(r,{...a,defaultValue:ae(E)?E[e]:void 0,joinArrays:!1,ns:l}):t[e]=this.translate(r,{...a,joinArrays:!1,ns:l}),t[e]===r&&(t[e]=D[e])}h=t}}else if(b&&i(y)&&Array.isArray(h))h=h.join(y),h&&=this.extendTranslation(h,t,a,r);else{let e=!1,n=!1;!this.isValidLookup(h)&&S&&(e=!0,h=E),this.isValidLookup(h)||(n=!0,h=c);let i=(a.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&n?void 0:h,o=S&&E!==h&&this.options.updateMissing;if(n||e||o){if(this.logger.log(o?`updateKey`:`missingKey`,f,u,c,o?E:h),s){let e=this.resolve(c,{...a,keySeparator:!1});e&&e.res&&this.logger.warn(`Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.`)}let e=[],t=this.languageUtils.getFallbackCodes(this.options.fallbackLng,a.lng||this.language);if(this.options.saveMissingTo===`fallback`&&t&&t[0])for(let n=0;n<t.length;n++)e.push(t[n]);else this.options.saveMissingTo===`all`?e=this.languageUtils.toResolveHierarchy(a.lng||this.language):e.push(a.lng||this.language);let n=(e,t,n)=>{let r=S&&n!==h?n:i;this.options.missingKeyHandler?this.options.missingKeyHandler(e,u,t,r,o,a):this.backendConnector?.saveMissing&&this.backendConnector.saveMissing(e,u,t,r,o,a),this.emit(`missingKey`,e,u,t,h)};this.options.saveMissing&&(this.options.saveMissingPlurals&&x?e.forEach(e=>{let t=this.pluralResolver.getSuffixes(e,a);T&&a[`defaultValue${this.options.pluralSeparator}zero`]&&t.indexOf(`${this.options.pluralSeparator}zero`)<0&&t.push(`${this.options.pluralSeparator}zero`),t.forEach(t=>{n([e],c+t,a[`defaultValue${t}`]||E)})}):n(e,c,E))}h=this.extendTranslation(h,t,a,m,r),n&&h===c&&this.options.appendNamespaceToMissingKey&&(h=`${u}${d}${c}`),(n||e)&&this.options.parseMissingKeyHandler&&(h=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${u}${d}${c}`:c,e?h:void 0,a))}return o?(m.res=h,m.usedParams=this.getUsedParamsDetails(a),m):h}extendTranslation(e,t,n,r,a){if(this.i18nFormat?.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...n},n.lng||this.language||r.usedLng,r.usedNS,r.usedKey,{resolved:r});else if(!n.skipInterpolation){n.interpolation&&this.interpolator.init({...n,interpolation:{...this.options.interpolation,...n.interpolation}});let o=i(e)&&(n?.interpolation?.skipOnVariables===void 0?this.options.interpolation.skipOnVariables:n.interpolation.skipOnVariables),s;if(o){let t=e.match(this.interpolator.nestingRegexp);s=t&&t.length}let c=n.replace&&!i(n.replace)?n.replace:n;if(this.options.interpolation.defaultVariables&&(c={...this.options.interpolation.defaultVariables,...c}),e=this.interpolator.interpolate(e,c,n.lng||this.language||r.usedLng,n),o){let t=e.match(this.interpolator.nestingRegexp),r=t&&t.length;s<r&&(n.nest=!1)}!n.lng&&r&&r.res&&(n.lng=this.language||r.usedLng),n.nest!==!1&&(e=this.interpolator.nest(e,(...e)=>a?.[0]===e[0]&&!n.context?(this.logger.warn(`It seems you are nesting recursively key: ${e[0]} in key: ${t[0]}`),null):this.translate(...e,t),n)),n.interpolation&&this.interpolator.reset()}let o=n.postProcess||this.options.postProcess,s=i(o)?[o]:o;return e!=null&&s?.length&&n.applyPostProcessor!==!1&&(e=te.handle(s,e,t,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...r,usedParams:this.getUsedParamsDetails(n)},...n}:n,this)),e}resolve(e,t={}){let n,r,a,o,s;return i(e)&&(e=[e]),Array.isArray(e)&&(e=e.map(e=>typeof e==`function`?k(e,{...this.options,...t}):e)),e.forEach(e=>{if(this.isValidLookup(n))return;let c=this.extractFromKey(e,t),l=c.key;r=l;let u=c.namespaces;this.options.fallbackNS&&(u=u.concat(this.options.fallbackNS));let d=t.count!==void 0&&!i(t.count),f=d&&!t.ordinal&&t.count===0,p=t.context!==void 0&&(i(t.context)||typeof t.context==`number`)&&t.context!==``,m=t.lngs?t.lngs:this.languageUtils.toResolveHierarchy(t.lng||this.language,t.fallbackLng);u.forEach(e=>{this.isValidLookup(n)||(s=e,!ie[`${m[0]}-${e}`]&&this.utils?.hasLoadedNamespace&&!this.utils?.hasLoadedNamespace(s)&&(ie[`${m[0]}-${e}`]=!0,this.logger.warn(`key "${r}" for languages "${m.join(`, `)}" won't get resolved as namespace "${s}" was not yet loaded`,`This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!`)),m.forEach(r=>{if(this.isValidLookup(n))return;o=r;let i=[l];if(this.i18nFormat?.addLookupKeys)this.i18nFormat.addLookupKeys(i,l,r,e,t);else{let e;d&&(e=this.pluralResolver.getSuffix(r,t.count,t));let n=`${this.options.pluralSeparator}zero`,a=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(d&&(t.ordinal&&e.indexOf(a)===0&&i.push(l+e.replace(a,this.options.pluralSeparator)),i.push(l+e),f&&i.push(l+n)),p){let r=`${l}${this.options.contextSeparator||`_`}${t.context}`;i.push(r),d&&(t.ordinal&&e.indexOf(a)===0&&i.push(r+e.replace(a,this.options.pluralSeparator)),i.push(r+e),f&&i.push(r+n))}}let s;for(;s=i.pop();)this.isValidLookup(n)||(a=s,n=this.getResource(r,e,s,t))}))})}),{res:n,usedKey:r,exactUsedKey:a,usedLng:o,usedNS:s}}isValidLookup(e){return e!==void 0&&!(!this.options.returnNull&&e===null)&&!(!this.options.returnEmptyString&&e===``)}getResource(e,t,n,r={}){return this.i18nFormat?.getResource?this.i18nFormat.getResource(e,t,n,r):this.resourceStore.getResource(e,t,n,r)}getUsedParamsDetails(e={}){let t=[`defaultValue`,`ordinal`,`context`,`replace`,`lng`,`lngs`,`fallbackLng`,`ns`,`keySeparator`,`nsSeparator`,`returnObjects`,`returnDetails`,`joinArrays`,`postProcess`,`interpolation`],n=e.replace&&!i(e.replace),r=n?e.replace:e;if(n&&e.count!==void 0&&(r.count=e.count),this.options.interpolation.defaultVariables&&(r={...this.options.interpolation.defaultVariables,...r}),!n){r={...r};for(let e of t)delete r[e]}return r}static hasDefaultValue(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&t.substring(0,12)===`defaultValue`&&e[t]!==void 0)return!0;return!1}},se=class{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=D.create(`languageUtils`)}getScriptPartFromCode(e){if(e=T(e),!e||e.indexOf(`-`)<0)return null;let t=e.split(`-`);return t.length===2||(t.pop(),t[t.length-1].toLowerCase()===`x`)?null:this.formatLanguageCode(t.join(`-`))}getLanguagePartFromCode(e){if(e=T(e),!e||e.indexOf(`-`)<0)return e;let t=e.split(`-`);return this.formatLanguageCode(t[0])}formatLanguageCode(e){if(i(e)&&e.indexOf(`-`)>-1){let t;try{t=Intl.getCanonicalLocales(e)[0]}catch{}return t&&this.options.lowerCaseLng&&(t=t.toLowerCase()),t||(this.options.lowerCaseLng?e.toLowerCase():e)}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}isSupportedCode(e){return(this.options.load===`languageOnly`||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(e)>-1}getBestMatchFromCodes(e){if(!e)return null;let t;return e.forEach(e=>{if(t)return;let n=this.formatLanguageCode(e);(!this.options.supportedLngs||this.isSupportedCode(n))&&(t=n)}),!t&&this.options.supportedLngs&&e.forEach(e=>{if(t)return;let n=this.getScriptPartFromCode(e);if(this.isSupportedCode(n))return t=n;let r=this.getLanguagePartFromCode(e);if(this.isSupportedCode(r))return t=r;t=this.options.supportedLngs.find(e=>{if(e===r||!(e.indexOf(`-`)<0&&r.indexOf(`-`)<0)&&(e.indexOf(`-`)>0&&r.indexOf(`-`)<0&&e.substring(0,e.indexOf(`-`))===r||e.indexOf(r)===0&&r.length>1))return e})}),t||=this.getFallbackCodes(this.options.fallbackLng)[0],t}getFallbackCodes(e,t){if(!e)return[];if(typeof e==`function`&&(e=e(t)),i(e)&&(e=[e]),Array.isArray(e))return e;if(!t)return e.default||[];let n=e[t];return n||=e[this.getScriptPartFromCode(t)],n||=e[this.formatLanguageCode(t)],n||=e[this.getLanguagePartFromCode(t)],n||=e.default,n||[]}toResolveHierarchy(e,t){let n=this.getFallbackCodes((t===!1?[]:t)||this.options.fallbackLng||[],e),r=[],a=e=>{e&&(this.isSupportedCode(e)?r.push(e):this.logger.warn(`rejecting language code not found in supportedLngs: ${e}`))};return i(e)&&(e.indexOf(`-`)>-1||e.indexOf(`_`)>-1)?(this.options.load!==`languageOnly`&&a(this.formatLanguageCode(e)),this.options.load!==`languageOnly`&&this.options.load!==`currentOnly`&&a(this.getScriptPartFromCode(e)),this.options.load!==`currentOnly`&&a(this.getLanguagePartFromCode(e))):i(e)&&a(this.formatLanguageCode(e)),n.forEach(e=>{r.indexOf(e)<0&&a(this.formatLanguageCode(e))}),r}},ce={zero:0,one:1,two:2,few:3,many:4,other:5},le={select:e=>e===1?`one`:`other`,resolvedOptions:()=>({pluralCategories:[`one`,`other`]})},ue=class{constructor(e,t={}){this.languageUtils=e,this.options=t,this.logger=D.create(`pluralResolver`),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(e,t={}){let n=T(e===`dev`?`en`:e),r=t.ordinal?`ordinal`:`cardinal`,i=JSON.stringify({cleanedCode:n,type:r});if(i in this.pluralRulesCache)return this.pluralRulesCache[i];let a;try{a=new Intl.PluralRules(n,{type:r})}catch{if(typeof Intl>`u`)return this.logger.error(`No Intl support, please use an Intl polyfill!`),le;if(!e.match(/-|_/))return le;let n=this.languageUtils.getLanguagePartFromCode(e);a=this.getRule(n,t)}return this.pluralRulesCache[i]=a,a}needsPlural(e,t={}){let n=this.getRule(e,t);return n||=this.getRule(`dev`,t),n?.resolvedOptions().pluralCategories.length>1}getPluralFormsOfKey(e,t,n={}){return this.getSuffixes(e,n).map(e=>`${t}${e}`)}getSuffixes(e,t={}){let n=this.getRule(e,t);return n||=this.getRule(`dev`,t),n?n.resolvedOptions().pluralCategories.sort((e,t)=>ce[e]-ce[t]).map(e=>`${this.options.prepend}${t.ordinal?`ordinal${this.options.prepend}`:``}${e}`):[]}getSuffix(e,t,n={}){let r=this.getRule(e,n);return r?`${this.options.prepend}${n.ordinal?`ordinal${this.options.prepend}`:``}${r.select(t)}`:(this.logger.warn(`no plural rule found for: ${e}`),this.getSuffix(`dev`,t,n))}},de=(e,t,n,r=`.`,a=!0)=>{let o=h(e,t,n);return!o&&a&&i(n)&&(o=w(e,n,r),o===void 0&&(o=w(t,n,r))),o},fe=e=>e.replace(/\$/g,`$$$$`),pe=class{constructor(e={}){this.logger=D.create(`interpolator`),this.options=e,this.format=e?.interpolation?.format||(e=>e),this.init(e)}init(e={}){e.interpolation||={escapeValue:!0};let{escape:t,escapeValue:n,useRawValueToEscape:r,prefix:i,prefixEscaped:a,suffix:o,suffixEscaped:s,formatSeparator:c,unescapeSuffix:l,unescapePrefix:u,nestingPrefix:d,nestingPrefixEscaped:f,nestingSuffix:p,nestingSuffixEscaped:m,nestingOptionsSeparator:h,maxReplaces:g,alwaysFormat:v}=e.interpolation;this.escape=t===void 0?y:t,this.escapeValue=n===void 0?!0:n,this.useRawValueToEscape=r===void 0?!1:r,this.prefix=i?_(i):a||`{{`,this.suffix=o?_(o):s||`}}`,this.formatSeparator=c||`,`,this.unescapePrefix=l?``:u||`-`,this.unescapeSuffix=this.unescapePrefix?``:l||``,this.nestingPrefix=d?_(d):f||_(`$t(`),this.nestingSuffix=p?_(p):m||_(`)`),this.nestingOptionsSeparator=h||`,`,this.maxReplaces=g||1e3,this.alwaysFormat=v===void 0?!1:v,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){let e=(e,t)=>e?.source===t?(e.lastIndex=0,e):new RegExp(t,`g`);this.regexp=e(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=e(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=e(this.nestingRegexp,`${this.nestingPrefix}((?:[^()"']+|"[^"]*"|'[^']*'|\\((?:[^()]|"[^"]*"|'[^']*')*\\))*?)${this.nestingSuffix}`)}interpolate(e,t,n,r){let a,s,c,l=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},u=e=>{if(e.indexOf(this.formatSeparator)<0){let i=de(t,l,e,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(i,void 0,n,{...r,...t,interpolationkey:e}):i}let i=e.split(this.formatSeparator),a=i.shift().trim(),o=i.join(this.formatSeparator).trim();return this.format(de(t,l,a,this.options.keySeparator,this.options.ignoreJSONStructure),o,n,{...r,...t,interpolationkey:a})};this.resetRegExp();let d=r?.missingInterpolationHandler||this.options.missingInterpolationHandler,f=r?.interpolation?.skipOnVariables===void 0?this.options.interpolation.skipOnVariables:r.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:e=>fe(e)},{regex:this.regexp,safeValue:e=>this.escapeValue?fe(this.escape(e)):fe(e)}].forEach(t=>{for(c=0;a=t.regex.exec(e);){let n=a[1].trim();if(s=u(n),s===void 0)if(typeof d==`function`){let t=d(e,a,r);s=i(t)?t:``}else if(r&&Object.prototype.hasOwnProperty.call(r,n))s=``;else if(f){s=a[0];continue}else this.logger.warn(`missed to pass in variable ${n} for interpolating ${e}`),s=``;else !i(s)&&!this.useRawValueToEscape&&(s=o(s));let l=t.safeValue(s);if(e=e.replace(a[0],l),f?(t.regex.lastIndex+=s.length,t.regex.lastIndex-=a[0].length):t.regex.lastIndex=0,c++,c>=this.maxReplaces)break}}),e}nest(e,t,n={}){let r,a,s,c=(e,t)=>{let n=this.nestingOptionsSeparator;if(e.indexOf(n)<0)return e;let r=e.split(RegExp(`${_(n)}[ ]*{`)),i=`{${r[1]}`;e=r[0],i=this.interpolate(i,s);let a=i.match(/'/g),o=i.match(/"/g);((a?.length??0)%2==0&&!o||(o?.length??0)%2!=0)&&(i=i.replace(/'/g,`"`));try{s=JSON.parse(i),t&&(s={...t,...s})}catch(t){return this.logger.warn(`failed parsing options string in nesting for key ${e}`,t),`${e}${n}${i}`}return s.defaultValue&&s.defaultValue.indexOf(this.prefix)>-1&&delete s.defaultValue,e};for(;r=this.nestingRegexp.exec(e);){let l=[];s={...n},s=s.replace&&!i(s.replace)?s.replace:s,s.applyPostProcessor=!1,delete s.defaultValue;let u=/{.*}/.test(r[1])?r[1].lastIndexOf(`}`)+1:r[1].indexOf(this.formatSeparator);if(u!==-1&&(l=r[1].slice(u).split(this.formatSeparator).map(e=>e.trim()).filter(Boolean),r[1]=r[1].slice(0,u)),a=t(c.call(this,r[1].trim(),s),s),a&&r[0]===e&&!i(a))return a;i(a)||(a=o(a)),a||=(this.logger.warn(`missed to resolve ${r[1]} for nesting ${e}`),``),l.length&&(a=l.reduce((e,t)=>this.format(e,t,n.lng,{...n,interpolationkey:r[1].trim()}),a.trim())),e=e.replace(r[0],a),this.regexp.lastIndex=0}return e}},me=e=>{let t=e.toLowerCase().trim(),n={};if(e.indexOf(`(`)>-1){let r=e.split(`(`);t=r[0].toLowerCase().trim();let i=r[1].substring(0,r[1].length-1);t===`currency`&&i.indexOf(`:`)<0?n.currency||=i.trim():t===`relativetime`&&i.indexOf(`:`)<0?n.range||=i.trim():i.split(`;`).forEach(e=>{if(e){let[t,...r]=e.split(`:`),i=r.join(`:`).trim().replace(/^'+|'+$/g,``),a=t.trim();n[a]||(n[a]=i),i===`false`&&(n[a]=!1),i===`true`&&(n[a]=!0),isNaN(i)||(n[a]=parseInt(i,10))}})}return{formatName:t,formatOptions:n}},he=e=>{let t={};return(n,r,i)=>{let a=i;i&&i.interpolationkey&&i.formatParams&&i.formatParams[i.interpolationkey]&&i[i.interpolationkey]&&(a={...a,[i.interpolationkey]:void 0});let o=r+JSON.stringify(a),s=t[o];return s||(s=e(T(r),i),t[o]=s),s(n)}},ge=e=>(t,n,r)=>e(T(n),r)(t),_e=class{constructor(e={}){this.logger=D.create(`formatter`),this.options=e,this.init(e)}init(e,t={interpolation:{}}){this.formatSeparator=t.interpolation.formatSeparator||`,`;let n=t.cacheInBuiltFormats?he:ge;this.formats={number:n((e,t)=>{let n=new Intl.NumberFormat(e,{...t});return e=>n.format(e)}),currency:n((e,t)=>{let n=new Intl.NumberFormat(e,{...t,style:`currency`});return e=>n.format(e)}),datetime:n((e,t)=>{let n=new Intl.DateTimeFormat(e,{...t});return e=>n.format(e)}),relativetime:n((e,t)=>{let n=new Intl.RelativeTimeFormat(e,{...t});return e=>n.format(e,t.range||`day`)}),list:n((e,t)=>{let n=new Intl.ListFormat(e,{...t});return e=>n.format(e)})}}add(e,t){this.formats[e.toLowerCase().trim()]=t}addCached(e,t){this.formats[e.toLowerCase().trim()]=he(t)}format(e,t,n,r={}){let i=t.split(this.formatSeparator);if(i.length>1&&i[0].indexOf(`(`)>1&&i[0].indexOf(`)`)<0&&i.find(e=>e.indexOf(`)`)>-1)){let e=i.findIndex(e=>e.indexOf(`)`)>-1);i[0]=[i[0],...i.splice(1,e)].join(this.formatSeparator)}return i.reduce((e,t)=>{let{formatName:i,formatOptions:a}=me(t);if(this.formats[i]){let t=e;try{let o=r?.formatParams?.[r.interpolationkey]||{},s=o.locale||o.lng||r.locale||r.lng||n;t=this.formats[i](e,s,{...a,...r,...o})}catch(e){this.logger.warn(e)}return t}else this.logger.warn(`there was no format function for ${i}`);return e},e)}},ve=(e,t)=>{e.pending[t]!==void 0&&(delete e.pending[t],e.pendingCount--)},ye=class extends O{constructor(e,t,n,r={}){super(),this.backend=e,this.store=t,this.services=n,this.languageUtils=n.languageUtils,this.options=r,this.logger=D.create(`backendConnector`),this.waitingReads=[],this.maxParallelReads=r.maxParallelReads||10,this.readingCalls=0,this.maxRetries=r.maxRetries>=0?r.maxRetries:5,this.retryTimeout=r.retryTimeout>=1?r.retryTimeout:350,this.state={},this.queue=[],this.backend?.init?.(n,r.backend,r)}queueLoad(e,t,n,r){let i={},a={},o={},s={};return e.forEach(e=>{let r=!0;t.forEach(t=>{let o=`${e}|${t}`;!n.reload&&this.store.hasResourceBundle(e,t)?this.state[o]=2:this.state[o]<0||(this.state[o]===1?a[o]===void 0&&(a[o]=!0):(this.state[o]=1,r=!1,a[o]===void 0&&(a[o]=!0),i[o]===void 0&&(i[o]=!0),s[t]===void 0&&(s[t]=!0)))}),r||(o[e]=!0)}),(Object.keys(i).length||Object.keys(a).length)&&this.queue.push({pending:a,pendingCount:Object.keys(a).length,loaded:{},errors:[],callback:r}),{toLoad:Object.keys(i),pending:Object.keys(a),toLoadLanguages:Object.keys(o),toLoadNamespaces:Object.keys(s)}}loaded(e,t,n){let r=e.split(`|`),i=r[0],a=r[1];t&&this.emit(`failedLoading`,i,a,t),!t&&n&&this.store.addResourceBundle(i,a,n,void 0,void 0,{skipCopy:!0}),this.state[e]=t?-1:2,t&&n&&(this.state[e]=0);let o={};this.queue.forEach(n=>{p(n.loaded,[i],a),ve(n,e),t&&n.errors.push(t),n.pendingCount===0&&!n.done&&(Object.keys(n.loaded).forEach(e=>{o[e]||(o[e]={});let t=n.loaded[e];t.length&&t.forEach(t=>{o[e][t]===void 0&&(o[e][t]=!0)})}),n.done=!0,n.errors.length?n.callback(n.errors):n.callback())}),this.emit(`loaded`,o),this.queue=this.queue.filter(e=>!e.done)}read(e,t,n,r=0,i=this.retryTimeout,a){if(!e.length)return a(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:e,ns:t,fcName:n,tried:r,wait:i,callback:a});return}this.readingCalls++;let o=(o,s)=>{if(this.readingCalls--,this.waitingReads.length>0){let e=this.waitingReads.shift();this.read(e.lng,e.ns,e.fcName,e.tried,e.wait,e.callback)}if(o&&s&&r<this.maxRetries){setTimeout(()=>{this.read.call(this,e,t,n,r+1,i*2,a)},i);return}a(o,s)},s=this.backend[n].bind(this.backend);if(s.length===2){try{let n=s(e,t);n&&typeof n.then==`function`?n.then(e=>o(null,e)).catch(o):o(null,n)}catch(e){o(e)}return}return s(e,t,o)}prepareLoading(e,t,n={},r){if(!this.backend)return this.logger.warn(`No backend was added via i18next.use. Will not load resources.`),r&&r();i(e)&&(e=this.languageUtils.toResolveHierarchy(e)),i(t)&&(t=[t]);let a=this.queueLoad(e,t,n,r);if(!a.toLoad.length)return a.pending.length||r(),null;a.toLoad.forEach(e=>{this.loadOne(e)})}load(e,t,n){this.prepareLoading(e,t,{},n)}reload(e,t,n){this.prepareLoading(e,t,{reload:!0},n)}loadOne(e,t=``){let n=e.split(`|`),r=n[0],i=n[1];this.read(r,i,`read`,void 0,void 0,(n,a)=>{n&&this.logger.warn(`${t}loading namespace ${i} for language ${r} failed`,n),!n&&a&&this.logger.log(`${t}loaded namespace ${i} for language ${r}`,a),this.loaded(e,n,a)})}saveMissing(e,t,n,r,i,a={},o=()=>{}){if(this.services?.utils?.hasLoadedNamespace&&!this.services?.utils?.hasLoadedNamespace(t)){this.logger.warn(`did not save key "${n}" as the namespace "${t}" was not yet loaded`,`This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!`);return}if(!(n==null||n===``)){if(this.backend?.create){let s={...a,isUpdate:i},c=this.backend.create.bind(this.backend);if(c.length<6)try{let i;i=c.length===5?c(e,t,n,r,s):c(e,t,n,r),i&&typeof i.then==`function`?i.then(e=>o(null,e)).catch(o):o(null,i)}catch(e){o(e)}else c(e,t,n,r,o,s)}!e||!e[0]||this.store.addResource(e[0],t,n,r)}}},be=()=>({debug:!1,initAsync:!0,ns:[`translation`],defaultNS:[`translation`],fallbackLng:[`dev`],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:`all`,preload:!1,simplifyPluralSuffix:!0,keySeparator:`.`,nsSeparator:`:`,pluralSeparator:`_`,contextSeparator:`_`,partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:`fallback`,saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:e=>{let t={};if(typeof e[1]==`object`&&(t=e[1]),i(e[1])&&(t.defaultValue=e[1]),i(e[2])&&(t.tDescription=e[2]),typeof e[2]==`object`||typeof e[3]==`object`){let n=e[3]||e[2];Object.keys(n).forEach(e=>{t[e]=n[e]})}return t},interpolation:{escapeValue:!0,format:e=>e,prefix:`{{`,suffix:`}}`,formatSeparator:`,`,unescapePrefix:`-`,nestingPrefix:`$t(`,nestingSuffix:`)`,nestingOptionsSeparator:`,`,maxReplaces:1e3,skipOnVariables:!0},cacheInBuiltFormats:!0}),xe=e=>(i(e.ns)&&(e.ns=[e.ns]),i(e.fallbackLng)&&(e.fallbackLng=[e.fallbackLng]),i(e.fallbackNS)&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs?.indexOf?.(`cimode`)<0&&(e.supportedLngs=e.supportedLngs.concat([`cimode`])),typeof e.initImmediate==`boolean`&&(e.initAsync=e.initImmediate),e),A=()=>{},Se=e=>{Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach(t=>{typeof e[t]==`function`&&(e[t]=e[t].bind(e))})},Ce=`__i18next_supportNoticeShown`,we=()=>!!(typeof globalThis<`u`&&globalThis[Ce]||typeof process<`u`&&{}.I18NEXT_NO_SUPPORT_NOTICE),Te=()=>{typeof globalThis<`u`&&(globalThis[Ce]=!0)},Ee=e=>!!(e?.modules?.backend?.name?.indexOf(`Locize`)>0||e?.modules?.backend?.constructor?.name?.indexOf(`Locize`)>0||e?.options?.backend?.backends&&e.options.backend.backends.some(e=>e?.name?.indexOf(`Locize`)>0||e?.constructor?.name?.indexOf(`Locize`)>0)||e?.options?.backend?.projectId||e?.options?.backend?.backendOptions&&e.options.backend.backendOptions.some(e=>e?.projectId)),j=class e extends O{constructor(e={},t){if(super(),this.options=xe(e),this.services={},this.logger=D,this.modules={external:[]},Se(this),t&&!this.isInitialized&&!e.isClone){if(!this.options.initAsync)return this.init(e,t),this;setTimeout(()=>{this.init(e,t)},0)}}init(e={},t){this.isInitializing=!0,typeof e==`function`&&(t=e,e={}),e.defaultNS==null&&e.ns&&(i(e.ns)?e.defaultNS=e.ns:e.ns.indexOf(`translation`)<0&&(e.defaultNS=e.ns[0]));let n=be();this.options={...n,...this.options,...xe(e)},this.options.interpolation={...n.interpolation,...this.options.interpolation},e.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=e.keySeparator),e.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=e.nsSeparator),typeof this.options.overloadTranslationOptionHandler!=`function`&&(this.options.overloadTranslationOptionHandler=n.overloadTranslationOptionHandler),this.options.showSupportNotice!==!1&&!Ee(this)&&!we()&&(typeof console<`u`&&console.info!==void 0&&console.info(`🌐 i18next is made possible by our own product, Locize — consider powering your project with managed localization (AI, CDN, integrations): https://locize.com 💙`),Te());let r=e=>e?typeof e==`function`?new e:e:null;if(!this.options.isClone){this.modules.logger?D.init(r(this.modules.logger),this.options):D.init(null,this.options);let e;e=this.modules.formatter?this.modules.formatter:_e;let t=new se(this.options);this.store=new ee(this.options.resources,this.options);let i=this.services;i.logger=D,i.resourceStore=this.store,i.languageUtils=t,i.pluralResolver=new ue(t,{prepend:this.options.pluralSeparator,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),this.options.interpolation.format&&this.options.interpolation.format!==n.interpolation.format&&this.logger.deprecate(`init: you are still using the legacy format function, please use the new approach: https://www.i18next.com/translation-function/formatting`),e&&(!this.options.interpolation.format||this.options.interpolation.format===n.interpolation.format)&&(i.formatter=r(e),i.formatter.init&&i.formatter.init(i,this.options),this.options.interpolation.format=i.formatter.format.bind(i.formatter)),i.interpolator=new pe(this.options),i.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},i.backendConnector=new ye(r(this.modules.backend),i.resourceStore,i,this.options),i.backendConnector.on(`*`,(e,...t)=>{this.emit(e,...t)}),this.modules.languageDetector&&(i.languageDetector=r(this.modules.languageDetector),i.languageDetector.init&&i.languageDetector.init(i,this.options.detection,this.options)),this.modules.i18nFormat&&(i.i18nFormat=r(this.modules.i18nFormat),i.i18nFormat.init&&i.i18nFormat.init(this)),this.translator=new oe(this.services,this.options),this.translator.on(`*`,(e,...t)=>{this.emit(e,...t)}),this.modules.external.forEach(e=>{e.init&&e.init(this)})}if(this.format=this.options.interpolation.format,t||=A,this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){let e=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);e.length>0&&e[0]!==`dev`&&(this.options.lng=e[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn(`init: no languageDetector is used and no lng is defined`),[`getResource`,`hasResourceBundle`,`getResourceBundle`,`getDataByLanguage`].forEach(e=>{this[e]=(...t)=>this.store[e](...t)}),[`addResource`,`addResources`,`addResourceBundle`,`removeResourceBundle`].forEach(e=>{this[e]=(...t)=>(this.store[e](...t),this)});let o=a(),s=()=>{let e=(e,n)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn(`init: i18next is already initialized. You should call init just once!`),this.isInitialized=!0,this.options.isClone||this.logger.log(`initialized`,this.options),this.emit(`initialized`,this.options),o.resolve(n),t(e,n)};if(this.languages&&!this.isInitialized)return e(null,this.t.bind(this));this.changeLanguage(this.options.lng,e)};return this.options.resources||!this.options.initAsync?s():setTimeout(s,0),o}loadResources(e,t=A){let n=t,r=i(e)?e:this.language;if(typeof e==`function`&&(n=e),!this.options.resources||this.options.partialBundledLanguages){if(r?.toLowerCase()===`cimode`&&(!this.options.preload||this.options.preload.length===0))return n();let e=[],t=t=>{t&&t!==`cimode`&&this.services.languageUtils.toResolveHierarchy(t).forEach(t=>{t!==`cimode`&&e.indexOf(t)<0&&e.push(t)})};r?t(r):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(e=>t(e)),this.options.preload?.forEach?.(e=>t(e)),this.services.backendConnector.load(e,this.options.ns,e=>{!e&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),n(e)})}else n(null)}reloadResources(e,t,n){let r=a();return typeof e==`function`&&(n=e,e=void 0),typeof t==`function`&&(n=t,t=void 0),e||=this.languages,t||=this.options.ns,n||=A,this.services.backendConnector.reload(e,t,e=>{r.resolve(),n(e)}),r}use(e){if(!e)throw Error(`You are passing an undefined module! Please check the object you are passing to i18next.use()`);if(!e.type)throw Error(`You are passing a wrong module! Please check the object you are passing to i18next.use()`);return e.type===`backend`&&(this.modules.backend=e),(e.type===`logger`||e.log&&e.warn&&e.error)&&(this.modules.logger=e),e.type===`languageDetector`&&(this.modules.languageDetector=e),e.type===`i18nFormat`&&(this.modules.i18nFormat=e),e.type===`postProcessor`&&te.addPostProcessor(e),e.type===`formatter`&&(this.modules.formatter=e),e.type===`3rdParty`&&this.modules.external.push(e),this}setResolvedLanguage(e){if(!(!e||!this.languages)&&!([`cimode`,`dev`].indexOf(e)>-1)){for(let e=0;e<this.languages.length;e++){let t=this.languages[e];if(!([`cimode`,`dev`].indexOf(t)>-1)&&this.store.hasLanguageSomeTranslations(t)){this.resolvedLanguage=t;break}}!this.resolvedLanguage&&this.languages.indexOf(e)<0&&this.store.hasLanguageSomeTranslations(e)&&(this.resolvedLanguage=e,this.languages.unshift(e))}}changeLanguage(e,t){this.isLanguageChangingTo=e;let n=a();this.emit(`languageChanging`,e);let r=e=>{this.language=e,this.languages=this.services.languageUtils.toResolveHierarchy(e),this.resolvedLanguage=void 0,this.setResolvedLanguage(e)},o=(i,a)=>{a?this.isLanguageChangingTo===e&&(r(a),this.translator.changeLanguage(a),this.isLanguageChangingTo=void 0,this.emit(`languageChanged`,a),this.logger.log(`languageChanged`,a)):this.isLanguageChangingTo=void 0,n.resolve((...e)=>this.t(...e)),t&&t(i,(...e)=>this.t(...e))},s=t=>{!e&&!t&&this.services.languageDetector&&(t=[]);let n=i(t)?t:t&&t[0],a=this.store.hasLanguageSomeTranslations(n)?n:this.services.languageUtils.getBestMatchFromCodes(i(t)?[t]:t);a&&(this.language||r(a),this.translator.language||this.translator.changeLanguage(a),this.services.languageDetector?.cacheUserLanguage?.(a)),this.loadResources(a,e=>{o(e,a)})};return!e&&this.services.languageDetector&&!this.services.languageDetector.async?s(this.services.languageDetector.detect()):!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(s):this.services.languageDetector.detect(s):s(e),n}getFixedT(e,t,n){let r=(e,t,...i)=>{let a;a=typeof t==`object`?{...t}:this.options.overloadTranslationOptionHandler([e,t].concat(i)),a.lng=a.lng||r.lng,a.lngs=a.lngs||r.lngs,a.ns=a.ns||r.ns,a.keyPrefix!==``&&(a.keyPrefix=a.keyPrefix||n||r.keyPrefix);let o={...this.options,...a};typeof a.keyPrefix==`function`&&(a.keyPrefix=k(a.keyPrefix,o));let s=this.options.keySeparator||`.`,c;return a.keyPrefix&&Array.isArray(e)?c=e.map(e=>(typeof e==`function`&&(e=k(e,o)),`${a.keyPrefix}${s}${e}`)):(typeof e==`function`&&(e=k(e,o)),c=a.keyPrefix?`${a.keyPrefix}${s}${e}`:e),this.t(c,a)};return i(e)?r.lng=e:r.lngs=e,r.ns=t,r.keyPrefix=n,r}t(...e){return this.translator?.translate(...e)}exists(...e){return this.translator?.exists(...e)}setDefaultNamespace(e){this.options.defaultNS=e}hasLoadedNamespace(e,t={}){if(!this.isInitialized)return this.logger.warn(`hasLoadedNamespace: i18next was not initialized`,this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn(`hasLoadedNamespace: i18n.languages were undefined or empty`,this.languages),!1;let n=t.lng||this.resolvedLanguage||this.languages[0],r=this.options?this.options.fallbackLng:!1,i=this.languages[this.languages.length-1];if(n.toLowerCase()===`cimode`)return!0;let a=(e,t)=>{let n=this.services.backendConnector.state[`${e}|${t}`];return n===-1||n===0||n===2};if(t.precheck){let e=t.precheck(this,a);if(e!==void 0)return e}return!!(this.hasResourceBundle(n,e)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||a(n,e)&&(!r||a(i,e)))}loadNamespaces(e,t){let n=a();return this.options.ns?(i(e)&&(e=[e]),e.forEach(e=>{this.options.ns.indexOf(e)<0&&this.options.ns.push(e)}),this.loadResources(e=>{n.resolve(),t&&t(e)}),n):(t&&t(),Promise.resolve())}loadLanguages(e,t){let n=a();i(e)&&(e=[e]);let r=this.options.preload||[],o=e.filter(e=>r.indexOf(e)<0&&this.services.languageUtils.isSupportedCode(e));return o.length?(this.options.preload=r.concat(o),this.loadResources(e=>{n.resolve(),t&&t(e)}),n):(t&&t(),Promise.resolve())}dir(e){if(e||=this.resolvedLanguage||(this.languages?.length>0?this.languages[0]:this.language),!e)return`rtl`;try{let t=new Intl.Locale(e);if(t&&t.getTextInfo){let e=t.getTextInfo();if(e&&e.direction)return e.direction}}catch{}let t=`ar.shu.sqr.ssh.xaa.yhd.yud.aao.abh.abv.acm.acq.acw.acx.acy.adf.ads.aeb.aec.afb.ajp.apc.apd.arb.arq.ars.ary.arz.auz.avl.ayh.ayl.ayn.ayp.bbz.pga.he.iw.ps.pbt.pbu.pst.prp.prd.ug.ur.ydd.yds.yih.ji.yi.hbo.men.xmn.fa.jpr.peo.pes.prs.dv.sam.ckb`.split(`.`),n=this.services?.languageUtils||new se(be());return e.toLowerCase().indexOf(`-latn`)>1?`ltr`:t.indexOf(n.getLanguagePartFromCode(e))>-1||e.toLowerCase().indexOf(`-arab`)>1?`rtl`:`ltr`}static createInstance(t={},n){let r=new e(t,n);return r.createInstance=e.createInstance,r}cloneInstance(t={},n=A){let r=t.forkResourceStore;r&&delete t.forkResourceStore;let i={...this.options,...t,isClone:!0},a=new e(i);if((t.debug!==void 0||t.prefix!==void 0)&&(a.logger=a.logger.clone(t)),[`store`,`services`,`language`].forEach(e=>{a[e]=this[e]}),a.services={...this.services},a.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},r&&(a.store=new ee(Object.keys(this.store.data).reduce((e,t)=>(e[t]={...this.store.data[t]},e[t]=Object.keys(e[t]).reduce((n,r)=>(n[r]={...e[t][r]},n),e[t]),e),{}),i),a.services.resourceStore=a.store),t.interpolation){let e={...be().interpolation,...this.options.interpolation,...t.interpolation},n={...i,interpolation:e};a.services.interpolator=new pe(n)}return a.translator=new oe(a.services,i),a.translator.on(`*`,(e,...t)=>{a.emit(e,...t)}),a.init(i,n),a.translator.options=i,a.translator.backendConnector.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},a}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}.createInstance();j.createInstance,j.dir,j.init,j.loadResources,j.reloadResources,j.use,j.changeLanguage,j.getFixedT,j.t,j.exists,j.setDefaultNamespace,j.hasLoadedNamespace,j.loadNamespaces,j.loadLanguages;var De={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`,noData:`No data`,noResults:`No results found`,required:`Required`,optional:`Optional`},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}}`},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`},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`,rowHeight:`Row height: {{mode}}`},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.`},kanban:{addCard:`Add card`,addColumn:`Add column`,moveCard:`Move card`,deleteCard:`Delete card`,deleteColumn:`Delete column`},detail:{back:`Back`,edit:`Edit`,editInline:`Edit inline`,save:`Save`,saveChanges:`Save changes`,editFieldsInline:`Edit fields inline`,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`,editRow:`Edit`,deleteRow:`Delete`,deleteRowConfirmation:`Are you sure you want to delete this record?`,actions:`Actions`,previousPage:`Previous`,nextPage:`Next`,pageOf:`Page {{current}} of {{total}}`,sortBy:`Sort by`,filterPlaceholder:`Filter...`,highlightFields:`Key Fields`},chart:{noData:`No chart data available`,loading:`Loading chart...`},dashboard:{addWidget:`Add widget`,removeWidget:`Remove widget`,editLayout:`Edit layout`,saveLayout:`Save layout`,resetLayout:`Reset layout`},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`},console:{title:`ObjectStack Console`,initializing:`Initializing application...`,breadcrumb:{dashboards:`Dashboards`,pages:`Pages`,reports:`Reports`,system:`System`},loadingSteps:{connecting:`Connecting to data source`,loadingConfig:`Loading configuration`,preparingWorkspace:`Preparing workspace`},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.`,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`,configureView:`Configure View`,closePanel:`Close panel`,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`,newView:`New View`,typeOptions:`Type Options`,groupByField:`Group by field`,startDateField:`Start date field`,titleField:`Title field`,latitudeField:`Latitude field`,longitudeField:`Longitude field`,imageField:`Image field`,dateField:`Date field`,selectField:`Select field...`,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`},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`},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`}},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.`}},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:`清除全部`,noData:`暂无数据`,noResults:`未找到结果`,required:`必填`,optional:`选填`},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}}步`},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}} 项`},grid:{actions:`操作`,edit:`编辑`,delete:`删除`,export:`导出`,exportAs:`导出为 {{format}}`,loading:`加载数据中...`,errorLoading:`数据加载失败`,pullToRefresh:`下拉刷新`,refreshing:`刷新中…`,openRecord:`打开记录`,rowHeight:`行高: {{mode}}`},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}} 条记录。可能有更多数据。`},kanban:{addCard:`添加卡片`,addColumn:`添加列`,moveCard:`移动卡片`,deleteCard:`删除卡片`,deleteColumn:`删除列`},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:`—`,activity:`活动`,editRow:`编辑`,deleteRow:`删除`,deleteRowConfirmation:`确定要删除此记录吗?`,actions:`操作`,previousPage:`上一页`,nextPage:`下一页`,pageOf:`第 {{current}} 页,共 {{total}} 页`,sortBy:`排序`,filterPlaceholder:`筛选...`,highlightFields:`关键字段`},chart:{noData:`暂无图表数据`,loading:`图表加载中...`},dashboard:{addWidget:`添加组件`,removeWidget:`移除组件`,editLayout:`编辑布局`,saveLayout:`保存布局`,resetLayout:`重置布局`},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:`移动端预览`},console:{title:`ObjectStack 控制台`,initializing:`正在初始化应用程序...`,breadcrumb:{dashboards:`仪表盘`,pages:`页面`,reports:`报告`,system:`系统`},loadingSteps:{connecting:`正在连接数据源`,loadingConfig:`正在加载配置`,preparingWorkspace:`正在准备工作区`},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:`创建新应用`},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}} of {{total}} enabled`,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:`适用于页面和新窗口导航模式`,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:`注册`},register:{title:`创建账户`,description:`输入您的信息以开始使用`,nameLabel:`姓名`,namePlaceholder:`张三`,emailLabel:`邮箱`,emailPlaceholder:`name@example.com`,passwordLabel:`密码`,passwordPlaceholder:`创建密码(至少8个字符)`,confirmPasswordLabel:`确认密码`,confirmPasswordPlaceholder:`确认您的密码`,passwordMismatchError:`两次输入的密码不一致`,passwordTooShortError:`密码至少需要8个字符`,submitButton:`创建账户`,submittingButton:`创建中...`,hasAccountText:`已有账户?`,signInText:`登录`},forgotPassword:{title:`重置密码`,description:`输入您的邮箱地址,我们将发送重置密码链接`,emailLabel:`邮箱`,emailPlaceholder:`name@example.com`,submitButton:`发送重置链接`,submittingButton:`发送中...`,successTitle:`请查看您的邮箱`,successDescription:`我们已将密码重置链接发送至 {{email}},请检查您的收件箱。`,backToSignInText:`返回登录`,rememberPasswordText:`记住密码了?`,signInText:`登录`}},errors:{networkError:`网络错误,请检查网络连接。`,serverError:`服务器错误,请稍后重试。`,notFound:`资源未找到。`,unauthorized:`您没有权限执行此操作。`,forbidden:`访问被拒绝。`,timeout:`请求超时,请重试。`,unknown:`发生未知错误。`}},ja:{common:{loading:`読み込み中...`,save:`保存`,cancel:`キャンセル`,delete:`削除`,edit:`編集`,create:`作成`,search:`検索`,filter:`フィルター`,reset:`リセット`,confirm:`確認`,close:`閉じる`,back:`戻る`,next:`次へ`,previous:`前へ`,submit:`送信`,refresh:`更新`,export:`エクスポート`,import:`インポート`,yes:`はい`,no:`いいえ`,ok:`OK`,actions:`操作`,more:`もっと見る`,selectAll:`すべて選択`,clearAll:`すべてクリア`,noData:`データがありません`,noResults:`結果が見つかりません`,required:`必須`,optional:`任意`},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}}`},table:{rowsPerPage:`1ページの行数`,showing:`{{total}}件中{{from}}〜{{to}}件を表示`,noRows:`表示するデータがありません`,sortAsc:`昇順`,sortDesc:`降順`,filterColumn:`{{column}}でフィルター`,columns:`列`,exportCSV:`CSVエクスポート`,exportExcel:`Excelエクスポート`,selectRow:`行を選択`,selectAllRows:`すべての行を選択`,expandRow:`行を展開`,collapseRow:`行を折りたたむ`,hideColumn:`列を非表示`,freezeColumn:`列を固定`,unfreezeColumn:`列の固定を解除`,pageInfo:`{{total}}ページ中{{current}}ページ`,totalRecords:`合計{{count}}件`},grid:{actions:`アクション`,edit:`編集`,delete:`削除`,export:`エクスポート`,exportAs:`{{format}}でエクスポート`,loading:`グリッドを読み込み中...`,errorLoading:`グリッドの読み込みエラー`,pullToRefresh:`引っ張って更新`,refreshing:`更新中…`,openRecord:`レコードを開く`,rowHeight:`行の高さ: {{mode}}`},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:`表示するレコードがありません。フィルターを調整するか、新しいデータを追加してください。`},kanban:{addCard:`カードを追加`,addColumn:`カラムを追加`,moveCard:`カードを移動`,deleteCard:`カードを削除`,deleteColumn:`カラムを削除`},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:`—`},chart:{noData:`チャートデータがありません`,loading:`チャート読み込み中...`},dashboard:{addWidget:`ウィジェットを追加`,removeWidget:`ウィジェットを削除`,editLayout:`レイアウトを編集`,saveLayout:`レイアウトを保存`,resetLayout:`レイアウトをリセット`},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:`ロゴURL`,primaryColor:`プライマリカラー`,faviconUrl:`ファビコンURL`,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:`ロゴ、色、ファビコン`,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:`URL`,navSeparator:`セパレーター`,navTypeObject:`オブジェクト`,navTypeDashboard:`ダッシュボード`,navTypePage:`ページ`,navTypeReport:`レポート`,navTypeUrl:`URL`,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:`モバイルプレビュー`},console:{title:`ObjectStack コンソール`,initializing:`アプリケーションを初期化中...`,breadcrumb:{dashboards:`ダッシュボード`,pages:`ページ`,reports:`レポート`,system:`システム`},loadingSteps:{connecting:`データソースに接続中`,loadingConfig:`設定を読み込み中`,preparingWorkspace:`ワークスペースを準備中`},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:`新しいアプリを作成`},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}} of {{total}} enabled`,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:`ページおよび新しいウィンドウナビゲーションモードで使用可能`},localeSwitcher:{label:`言語`}},auth:{login:{title:`アカウントにサインイン`,description:`メールアドレスとパスワードを入力してください`,emailLabel:`メールアドレス`,emailPlaceholder:`name@example.com`,passwordLabel:`パスワード`,passwordPlaceholder:`パスワードを入力`,forgotPasswordText:`パスワードをお忘れですか?`,submitButton:`サインイン`,submittingButton:`サインイン中...`,noAccountText:`アカウントをお持ちでないですか?`,signUpText:`新規登録`},register:{title:`アカウントを作成`,description:`情報を入力して始めましょう`,nameLabel:`名前`,namePlaceholder:`田中太郎`,emailLabel:`メールアドレス`,emailPlaceholder:`name@example.com`,passwordLabel:`パスワード`,passwordPlaceholder:`パスワードを作成(8文字以上)`,confirmPasswordLabel:`パスワード確認`,confirmPasswordPlaceholder:`パスワードを再入力`,passwordMismatchError:`パスワードが一致しません`,passwordTooShortError:`パスワードは8文字以上必要です`,submitButton:`アカウント作成`,submittingButton:`アカウント作成中...`,hasAccountText:`すでにアカウントをお持ちですか?`,signInText:`サインイン`},forgotPassword:{title:`パスワードをリセット`,description:`メールアドレスを入力してください。パスワードリセットリンクをお送りします`,emailLabel:`メールアドレス`,emailPlaceholder:`name@example.com`,submitButton:`リセットリンクを送信`,submittingButton:`送信中...`,successTitle:`メールをご確認ください`,successDescription:`{{email}} にパスワードリセットリンクを送信しました。受信箱をご確認ください。`,backToSignInText:`サインインに戻る`,rememberPasswordText:`パスワードを覚えていますか?`,signInText:`サインイン`}},errors:{networkError:`ネットワークエラーです。接続を確認してください。`,serverError:`サーバーエラーです。後でもう一度お試しください。`,notFound:`リソースが見つかりません。`,unauthorized:`この操作を実行する権限がありません。`,forbidden:`アクセスが拒否されました。`,timeout:`リクエストがタイムアウトしました。もう一度お試しください。`,unknown:`予期しないエラーが発生しました。`}},ko:{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:`모두 지우기`,noData:`데이터 없음`,noResults:`결과를 찾을 수 없습니다`,required:`필수`,optional:`선택`},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:`{{total}}단계 중 {{current}}단계`},table:{rowsPerPage:`페이지당 행 수`,showing:`{{total}}개 중 {{from}}~{{to}} 표시`,noRows:`표시할 데이터가 없습니다`,sortAsc:`오름차순 정렬`,sortDesc:`내림차순 정렬`,filterColumn:`{{column}} 필터`,columns:`열`,exportCSV:`CSV 내보내기`,exportExcel:`Excel 내보내기`,selectRow:`행 선택`,selectAllRows:`모든 행 선택`,expandRow:`행 펼치기`,collapseRow:`행 접기`,hideColumn:`열 숨기기`,freezeColumn:`열 고정`,unfreezeColumn:`열 고정 해제`,pageInfo:`{{total}} 페이지 중 {{current}} 페이지`,totalRecords:`총 {{count}}개`},grid:{actions:`작업`,edit:`편집`,delete:`삭제`,export:`내보내기`,exportAs:`{{format}}으로 내보내기`,loading:`그리드 로딩 중...`,errorLoading:`그리드 로딩 오류`,pullToRefresh:`당겨서 새로고침`,refreshing:`새로고침 중…`,openRecord:`레코드 열기`,rowHeight:`행 높이: {{mode}}`},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:`표시할 레코드가 없습니다. 필터를 조정하거나 새 데이터를 추가해 보세요.`},kanban:{addCard:`카드 추가`,addColumn:`열 추가`,moveCard:`카드 이동`,deleteCard:`카드 삭제`,deleteColumn:`열 삭제`},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:`—`},chart:{noData:`차트 데이터가 없습니다`,loading:`차트 로딩 중...`},dashboard:{addWidget:`위젯 추가`,removeWidget:`위젯 제거`,editLayout:`레이아웃 편집`,saveLayout:`레이아웃 저장`,resetLayout:`레이아웃 초기화`},configPanel:{save:`저장`,discard:`취소`,close:`닫기`,layout:`레이아웃`,columns:`열`,gap:`간격`,rowHeight:`행 높이`,data:`데이터`,refreshInterval:`새로고침 간격`,appearance:`모양`,title:`제목`,showDescription:`설명 표시`,theme:`테마`,configuration:`구성`,general:`일반`,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:`이름, 제목 및 레이아웃`,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:`URL`,navSeparator:`구분선`,navTypeObject:`객체`,navTypeDashboard:`대시보드`,navTypePage:`페이지`,navTypeReport:`리포트`,navTypeUrl:`URL`,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:`모바일 미리보기`},console:{title:`ObjectStack 콘솔`,initializing:`애플리케이션 초기화 중...`,breadcrumb:{dashboards:`대시보드`,pages:`페이지`,reports:`보고서`,system:`시스템`},loadingSteps:{connecting:`데이터 소스에 연결 중`,loadingConfig:`설정 로드 중`,preparingWorkspace:`워크스페이스 준비 중`},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:`새 앱 만들기`},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}} of {{total}} enabled`,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:`페이지 및 새 창 탐색 모드에서 사용 가능`},localeSwitcher:{label:`언어`}},auth:{login:{title:`계정에 로그인`,description:`이메일과 비밀번호를 입력하세요`,emailLabel:`이메일`,emailPlaceholder:`name@example.com`,passwordLabel:`비밀번호`,passwordPlaceholder:`비밀번호를 입력하세요`,forgotPasswordText:`비밀번호를 잊으셨나요?`,submitButton:`로그인`,submittingButton:`로그인 중...`,noAccountText:`계정이 없으신가요?`,signUpText:`회원가입`},register:{title:`계정 만들기`,description:`정보를 입력하여 시작하세요`,nameLabel:`이름`,namePlaceholder:`홍길동`,emailLabel:`이메일`,emailPlaceholder:`name@example.com`,passwordLabel:`비밀번호`,passwordPlaceholder:`비밀번호 생성 (최소 8자)`,confirmPasswordLabel:`비밀번호 확인`,confirmPasswordPlaceholder:`비밀번호를 다시 입력하세요`,passwordMismatchError:`비밀번호가 일치하지 않습니다`,passwordTooShortError:`비밀번호는 최소 8자 이상이어야 합니다`,submitButton:`계정 만들기`,submittingButton:`계정 생성 중...`,hasAccountText:`이미 계정이 있으신가요?`,signInText:`로그인`},forgotPassword:{title:`비밀번호 재설정`,description:`이메일 주소를 입력하시면 비밀번호 재설정 링크를 보내드립니다`,emailLabel:`이메일`,emailPlaceholder:`name@example.com`,submitButton:`재설정 링크 보내기`,submittingButton:`전송 중...`,successTitle:`이메일을 확인하세요`,successDescription:`{{email}}(으)로 비밀번호 재설정 링크를 전송했습니다. 수신함을 확인해주세요.`,backToSignInText:`로그인으로 돌아가기`,rememberPasswordText:`비밀번호가 기억나시나요?`,signInText:`로그인`}},errors:{networkError:`네트워크 오류입니다. 연결을 확인해주세요.`,serverError:`서버 오류입니다. 나중에 다시 시도해주세요.`,notFound:`리소스를 찾을 수 없습니다.`,unauthorized:`이 작업을 수행할 권한이 없습니다.`,forbidden:`접근이 거부되었습니다.`,timeout:`요청 시간이 초과되었습니다. 다시 시도해주세요.`,unknown:`예기치 않은 오류가 발생했습니다.`}},de:{common:{loading:`Wird geladen...`,save:`Speichern`,cancel:`Abbrechen`,delete:`Löschen`,edit:`Bearbeiten`,create:`Erstellen`,search:`Suchen`,filter:`Filtern`,reset:`Zurücksetzen`,confirm:`Bestätigen`,close:`Schließen`,back:`Zurück`,next:`Weiter`,previous:`Zurück`,submit:`Absenden`,refresh:`Aktualisieren`,export:`Exportieren`,import:`Importieren`,yes:`Ja`,no:`Nein`,ok:`OK`,actions:`Aktionen`,more:`Mehr`,selectAll:`Alle auswählen`,clearAll:`Alle löschen`,noData:`Keine Daten`,noResults:`Keine Ergebnisse gefunden`,required:`Erforderlich`,optional:`Optional`},validation:{required:`{{field}} ist erforderlich`,minLength:`{{field}} muss mindestens {{min}} Zeichen lang sein`,maxLength:`{{field}} darf höchstens {{max}} Zeichen lang sein`,min:`{{field}} muss mindestens {{min}} sein`,max:`{{field}} darf höchstens {{max}} sein`,email:`Bitte geben Sie eine gültige E-Mail-Adresse ein`,url:`Bitte geben Sie eine gültige URL ein`,pattern:`{{field}} hat ein ungültiges Format`,unique:`{{field}} muss eindeutig sein`,type:`{{field}} muss ein gültiger {{type}} sein`},form:{addItem:`Element hinzufügen`,removeItem:`Element entfernen`,fieldRequired:`Dieses Feld ist erforderlich`,invalidFormat:`Ungültiges Format`,saveSuccess:`Erfolgreich gespeichert`,saveError:`Speichern fehlgeschlagen`,unsavedChanges:`Sie haben nicht gespeicherte Änderungen. Möchten Sie die Seite wirklich verlassen?`,stepOf:`Schritt {{current}} von {{total}}`},table:{rowsPerPage:`Zeilen pro Seite`,showing:`{{from}} bis {{to}} von {{total}} angezeigt`,noRows:`Keine Zeilen vorhanden`,sortAsc:`Aufsteigend sortieren`,sortDesc:`Absteigend sortieren`,filterColumn:`{{column}} filtern`,columns:`Spalten`,exportCSV:`CSV exportieren`,exportExcel:`Excel exportieren`,selectRow:`Zeile auswählen`,selectAllRows:`Alle Zeilen auswählen`,expandRow:`Zeile erweitern`,collapseRow:`Zeile reduzieren`,hideColumn:`Spalte ausblenden`,freezeColumn:`Spalte fixieren`,unfreezeColumn:`Spalte lösen`,pageInfo:`Seite {{current}} von {{total}}`,totalRecords:`{{count}} gesamt`},grid:{actions:`Aktionen`,edit:`Bearbeiten`,delete:`Löschen`,export:`Exportieren`,exportAs:`Exportieren als {{format}}`,loading:`Raster wird geladen...`,errorLoading:`Fehler beim Laden des Rasters`,pullToRefresh:`Zum Aktualisieren ziehen`,refreshing:`Wird aktualisiert…`,openRecord:`Datensatz öffnen`,rowHeight:`Zeilenhöhe: {{mode}}`},calendar:{today:`Heute`,month:`Monat`,week:`Woche`,day:`Tag`,agenda:`Agenda`,allDay:`Ganztägig`,noEvents:`Keine Termine`,newEvent:`Neuer Termin`,moreEvents:`+{{count}} weitere`},list:{recordCount:`{{count}} Datensätze`,recordCountOne:`{{count}} Datensatz`,addRecord:`Datensatz hinzufügen`,tabs:`Tabs`,allRecords:`Alle Datensätze`,search:`Suche`,filter:`Filtern`,filterRecords:`Datensätze filtern`,sort:`Sortieren`,sortRecords:`Datensätze sortieren`,group:`Gruppieren`,groupBy:`Gruppieren nach`,export:`Exportieren`,exportAs:`Exportieren als {{format}}`,color:`Farbe`,rowColor:`Zeilenfarbe`,colorByField:`Nach Feld einfärben`,clear:`Löschen`,none:`Keine`,hideFields:`Felder ausblenden`,noItems:`Keine Einträge gefunden`,noItemsMessage:`Es gibt keine Datensätze. Versuchen Sie, die Filter anzupassen oder neue Daten hinzuzufügen.`},kanban:{addCard:`Karte hinzufügen`,addColumn:`Spalte hinzufügen`,moveCard:`Karte verschieben`,deleteCard:`Karte löschen`,deleteColumn:`Spalte löschen`},detail:{back:`Zurück`,edit:`Bearbeiten`,editInline:`Inline bearbeiten`,save:`Speichern`,saveChanges:`Änderungen speichern`,editFieldsInline:`Felder inline bearbeiten`,share:`Teilen`,duplicate:`Duplizieren`,export:`Exportieren`,viewHistory:`Verlauf anzeigen`,delete:`Löschen`,moreActions:`Weitere Aktionen`,addToFavorites:`Zu Favoriten hinzufügen`,removeFromFavorites:`Aus Favoriten entfernen`,previousRecord:`Vorheriger Datensatz`,nextRecord:`Nächster Datensatz`,recordOf:`{{current}} von {{total}}`,recordNotFound:`Datensatz nicht gefunden`,recordNotFoundDescription:`Der gesuchte Datensatz existiert nicht oder wurde möglicherweise gelöscht.`,goBack:`Zurück`,details:`Details`,related:`Verknüpft`,relatedRecords:`{{count}} Datensätze`,relatedRecordOne:`{{count}} Datensatz`,noRelatedRecords:`Keine verknüpften Datensätze gefunden`,loading:`Laden...`,copyToClipboard:`In Zwischenablage kopieren`,copied:`Kopiert!`,deleteConfirmation:`Sind Sie sicher, dass Sie diesen Datensatz löschen möchten?`,editRecord:`Datensatz bearbeiten`,viewAll:`Alle anzeigen`,new:`Neu`,emptyValue:`—`},chart:{noData:`Keine Diagrammdaten verfügbar`,loading:`Diagramm wird geladen...`},dashboard:{addWidget:`Widget hinzufügen`,removeWidget:`Widget entfernen`,editLayout:`Layout bearbeiten`,saveLayout:`Layout speichern`,resetLayout:`Layout zurücksetzen`},configPanel:{save:`Speichern`,discard:`Verwerfen`,close:`Schließen`,layout:`Layout`,columns:`Spalten`,gap:`Abstand`,rowHeight:`Zeilenhöhe`,data:`Daten`,refreshInterval:`Aktualisierungsintervall`,appearance:`Darstellung`,title:`Titel`,showDescription:`Beschreibung anzeigen`,theme:`Design`,configuration:`Konfiguration`,general:`Allgemein`,advanced:`Erweitert`},appDesigner:{createApp:`App erstellen`,editApp:`App bearbeiten`,basicInfo:`Grundinformationen`,objects:`Objekte`,navigation:`Navigation`,branding:`Branding`,appName:`App-Name`,appTitle:`Titel`,appDescription:`Beschreibung`,appIcon:`Symbol`,template:`Vorlage`,layout:`Layout`,layoutSidebar:`Seitenleiste`,layoutHeader:`Kopfzeile`,layoutEmpty:`Leer`,selectObjects:`Objekte auswählen`,searchObjects:`Objekte suchen…`,selectAll:`Alle auswählen`,deselectAll:`Alle abwählen`,navBuilder:`Navigations-Builder`,addGroup:`Gruppe hinzufügen`,addUrl:`URL hinzufügen`,addSeparator:`Trenner hinzufügen`,noNavItems:`Noch keine Navigationselemente.`,logoUrl:`Logo-URL`,primaryColor:`Primärfarbe`,faviconUrl:`Favicon-URL`,preview:`Vorschau`,complete:`Fertigstellen`,snakeCaseHint:`Muss snake_case sein (z.B. my_app)`,modeEdit:`Bearbeiten`,modePreview:`Vorschau`,modeCode:`Code`,addWidget:`Widget hinzufügen`,widgetProperties:`Widget-Eigenschaften`,dataSource:`Datenquelle`,valueField:`Wertfeld`,aggregate:`Aggregat`,colorVariant:`Farbvariante`,addComponent:`Komponente hinzufügen`,componentProperties:`Komponenteneigenschaften`,viewType:`Ansichtstyp`,fields:`Felder`,toolbar:`Symbolleiste`,showSearch:`Suche anzeigen`,showFilters:`Filter anzeigen`,showSort:`Sortierung anzeigen`,appearance:`Erscheinung`,rowHeight:`Zeilenhöhe`,stripedRows:`Gestreifte Zeilen`,bordered:`Umrandet`,livePreview:`Live-Vorschau`,stepBasicDesc:`Name, Titel und Layout`,stepObjectsDesc:`Geschäftsobjekte auswählen`,stepNavigationDesc:`Navigationsbaum erstellen`,stepBrandingDesc:`Logo, Farben und Favicon`,noObjectsFound:`Keine Objekte gefunden.`,noNavItemsHint:`Noch keine Navigationselemente. Wählen Sie Objekte im vorherigen Schritt aus oder fügen Sie manuell hinzu.`,separator:`Trennlinie`,separatorLabel:`— Trennlinie —`,newGroup:`Neue Gruppe`,newLink:`Neuer Link`,saveDraft:`Entwurf speichern`,cancelConfirmTitle:`Änderungen verwerfen?`,cancelConfirmMessage:`Sie haben ungespeicherte Änderungen. Möchten Sie wirklich abbrechen?`,confirmDiscard:`Verwerfen`,keepEditing:`Weiter bearbeiten`,navNoItems:`Keine Navigationselemente. Klicken Sie auf die Schaltflächen oben, um Elemente hinzuzufügen.`,navNoPreviewItems:`Keine Elemente`,navLivePreview:`Live-Vorschau`,navCollapseGroup:`Gruppe einklappen`,navExpandGroup:`Gruppe ausklappen`,navAddChild:`Unterelement hinzufügen`,navMoveUp:`Nach oben`,navMoveDown:`Nach unten`,navRemove:`Entfernen`,navObjectPage:`Objektseite`,navDashboard:`Dashboard`,navPage:`Seite`,navReport:`Bericht`,navGroup:`Gruppe`,navUrl:`URL`,navSeparator:`Trennlinie`,navTypeObject:`Objekt`,navTypeDashboard:`Dashboard`,navTypePage:`Seite`,navTypeReport:`Bericht`,navTypeUrl:`URL`,navTypeGroup:`Gruppe`,navTypeSeparator:`Trennlinie`,navTypeAction:`Aktion`,navEditIcon:`Symbol bearbeiten`,navToggleVisible:`Sichtbarkeit umschalten`,navHidden:`Ausgeblendet`,navExportSchema:`JSON exportieren`,navImportSchema:`JSON importieren`,navExportSuccess:`Navigationsstruktur exportiert`,navImportSuccess:`Navigationsstruktur importiert`,navImportError:`Ungültiges Navigations-JSON`,navIconPlaceholder:`Symbolname (z.B. Users)`,dashboardEditor:`Dashboard-Editor`,noWidgets:`Keine Widgets. Klicken Sie oben auf eine Schaltfläche, um eines hinzuzufügen.`,widgetLayoutSize:`Layoutgröße`,widgetWidth:`Breite`,widgetHeight:`Höhe`,dashboardPreview:`Dashboard-Vorschau`,noWidgetsPreview:`Keine Widgets zur Vorschau`,pageCanvasEditor:`Seiten-Canvas-Editor`,emptyPage:`Leere Seite. Klicken Sie oben auf eine Schaltfläche, um eine Komponente hinzuzufügen.`,pagePreview:`Seitenvorschau`,noComponentsPreview:`Keine Komponenten zur Vorschau`,modePage:`Seite`,modeDashboard:`Dashboard`,undo:`Rückgängig`,redo:`Wiederholen`,brandingEditor:`Branding-Editor`,brandingExport:`JSON exportieren`,brandingImport:`JSON importieren`,brandingPreview:`Vorschau`,brandingSampleButton:`Beispiel-Schaltfläche`,brandingSampleText:`So wird Ihr Markenthema aussehen.`,colorPalette:`Farbpalette`,fontFamily:`Schriftart`,fontDefault:`Standard (System)`,modeLight:`Hell`,modeDark:`Dunkel`,mobilePreview:`Mobile Vorschau`},console:{title:`ObjectStack Konsole`,initializing:`Anwendung wird initialisiert...`,breadcrumb:{dashboards:`Dashboards`,pages:`Seiten`,reports:`Berichte`,system:`System`},loadingSteps:{connecting:`Verbindung zur Datenquelle herstellen`,loadingConfig:`Konfiguration laden`,preparingWorkspace:`Arbeitsbereich vorbereiten`},shortcuts:{title:`Tastenkürzel`,description:`Kurzreferenz für alle verfügbaren Tastenkürzel.`,groups:{general:`Allgemein`,navigation:`Navigation`,dataViews:`Datenansichten`,preferences:`Einstellungen`},openCommandPalette:`Befehlspalette öffnen`,showShortcuts:`Tastenkürzel anzeigen`,closeDialog:`Dialog / Panel schließen`,toggleSidebar:`Seitenleiste umschalten`,focusSearch:`Suche fokussieren`,createRecord:`Neuen Datensatz erstellen`,refreshData:`Daten aktualisieren`,editRecord:`Ausgewählten Datensatz bearbeiten`,toggleDarkMode:`Dunkelmodus umschalten`},commandPalette:{placeholder:`Befehl eingeben oder suchen...`,noResults:`Keine Ergebnisse gefunden.`,objects:`Objekte`,dashboards:`Dashboards`,pages:`Seiten`,reports:`Berichte`,switchApp:`App wechseln`,current:`Aktuell`,preferences:`Einstellungen`,lightTheme:`Helles Design`,darkTheme:`Dunkles Design`,systemTheme:`Systemdesign`,actions:`Aktionen`,openFullSearch:`Vollständige Suchseite öffnen`,createApp:`Neue App erstellen`},errors:{somethingWentWrong:`Etwas ist schiefgelaufen`,unexpectedError:`Beim Rendern dieser Ansicht ist ein unerwarteter Fehler aufgetreten.`,tryAgain:`Erneut versuchen`,goHome:`Zur Startseite`,errorDetails:`Fehlerdetails (nur Entwicklung)`},theme:{toggle:`Design umschalten`,light:`Hell`,dark:`Dunkel`,system:`System`},objectView:{objectNotFound:`Objekt nicht gefunden`,objectNotFoundDescription:`Das Objekt „{{objectName}}" existiert in der aktuellen Konfiguration nicht.`,objectNotFoundHint:`Überprüfen Sie Ihre App-Navigationseinstellungen oder wählen Sie ein anderes Objekt aus der Seitenleiste.`,allRecords:`Alle Datensätze`,exitDesignMode:`Designmodus beenden`,enterDesignMode:`Designmodus starten`,metadataInspector:`Metadaten-Inspektor`,editView:`Ansicht bearbeiten`,addView:`Ansicht hinzufügen`,designTools:`Design-Werkzeuge`,new:`Neu`,configureView:`Ansicht konfigurieren`,closePanel:`Panel schließen`,page:`Seite`,pageConfigHint:`Symbolleiste, Navigation & Ansichts-Shell-Einstellungen`,listConfigHint:`Daten-Rendering, Spalten & Erscheinungsbild für diesen Listentyp`,general:`Allgemein`,generalHint:`Ansichtstitel, Beschreibung und Typ`,toolbar:`Symbolleiste`,toolbarHint:`Suche, Filter, Sortierung, Gruppierung und Dichteumschaltung`,toolbarEnabledCount:`{{count}} of {{total}} enabled`,navigationSection:`Navigation`,navigationHint:`Zeilenklickverhalten und Detailansichtseinstellungen`,records:`Datensätze`,recordsHint:`Auswahlmodus, Datensatz hinzufügen und Inline-Bearbeitung`,exportPrint:`Export & Drucken`,exportPrintHint:`Exportformate, Drucken und Anzeige der Datensatzanzahl`,showAllFields:`Alle anzeigen`,hideAllFields:`Alle ausblenden`,searchFields:`Felder suchen...`,title:`Titel`,description:`Beschreibung`,data:`Daten`,source:`Quelle`,columns:`Spalten`,filterBy:`Filtern nach`,sortBy:`Sortieren nach`,appearance:`Darstellung`,showDescription:`Beschreibung anzeigen`,viewType:`Ansichtstyp`,userFilters:`Benutzerfilter`,enableSearch:`Suche aktivieren`,enableFilter:`Filter aktivieren`,enableSort:`Sortierung aktivieren`,enableHideFields:`Felder ausblenden aktivieren`,enableGroup:`Gruppierung aktivieren`,enableColor:`Farbe aktivieren`,enableDensity:`Dichte aktivieren`,userActions:`Benutzeraktionen`,addRecordViaForm:`Datensätze über Formular hinzufügen`,advanced:`Erweitert`,allowExport:`Export erlauben`,recordCount:`{{count}} Datensätze`,noDescription:`Keine Beschreibung`,none:`Keine`,columnsConfigured:`{{count}} Spalten`,save:`Speichern`,discard:`Verwerfen`,createView:`Ansicht erstellen`,newView:`Neue Ansicht`,typeOptions:`Typoptionen`,groupByField:`Gruppierungsfeld`,startDateField:`Startdatumsfeld`,titleField:`Titelfeld`,latitudeField:`Breitengradfeld`,longitudeField:`Längengradfeld`,imageField:`Bildfeld`,dateField:`Datumsfeld`,selectField:`Feld auswählen...`,gridOptionsHint:`Die Tabellenansicht verwendet die oben konfigurierten Spalten.`,groupBy:`Gruppieren nach`,prefixField:`Präfixfeld`,fields:`Felder`,fieldsVisible:`{{count}} sichtbar`,sortsCount:`{{count}} Sortierungen`,filtersCount:`{{count}} Filter`,endDateField:`Enddatumsfeld`,color:`Farbe`,fieldTextColor:`Feldtextfarbe`,rowHeight:`Zeilenhöhe`,wrapHeaders:`Kopfzeilen umbrechen`,showFieldDescriptions:`Feldbeschreibungen anzeigen`,collapseAllByDefault:`Standardmäßig alle einklappen`,striped:`Gestreifte Zeilen`,bordered:`Umrandete Zellen`,inlineEdit:`Datensätze inline bearbeiten`,addDeleteRecordsInline:`Datensätze inline hinzufügen/löschen`,clickIntoRecordDetails:`Klicken für Datensatzdetails`,navigationMode:`Navigationsmodus`,navigationWidth:`Navigationsbreite`,navigationWidthHint:`Verfügbar für Schublade-, Modal- und Split-Navigationsmodi`,openNewTab:`In neuem Tab öffnen`,openNewTabHint:`Verfügbar für Seiten- und Neues-Fenster-Navigationsmodi`},localeSwitcher:{label:`Sprache`}},auth:{login:{title:`In Ihr Konto einloggen`,description:`Geben Sie Ihre E-Mail-Adresse und Ihr Passwort ein, um fortzufahren`,emailLabel:`E-Mail`,emailPlaceholder:`name@example.com`,passwordLabel:`Passwort`,passwordPlaceholder:`Passwort eingeben`,forgotPasswordText:`Passwort vergessen?`,submitButton:`Anmelden`,submittingButton:`Anmeldung läuft...`,noAccountText:`Noch kein Konto?`,signUpText:`Registrieren`},register:{title:`Konto erstellen`,description:`Geben Sie Ihre Daten ein, um loszulegen`,nameLabel:`Name`,namePlaceholder:`Max Mustermann`,emailLabel:`E-Mail`,emailPlaceholder:`name@example.com`,passwordLabel:`Passwort`,passwordPlaceholder:`Passwort erstellen (mind. 8 Zeichen)`,confirmPasswordLabel:`Passwort bestätigen`,confirmPasswordPlaceholder:`Passwort bestätigen`,passwordMismatchError:`Passwörter stimmen nicht überein`,passwordTooShortError:`Das Passwort muss mindestens 8 Zeichen lang sein`,submitButton:`Konto erstellen`,submittingButton:`Konto wird erstellt...`,hasAccountText:`Bereits ein Konto?`,signInText:`Anmelden`},forgotPassword:{title:`Passwort zurücksetzen`,description:`Geben Sie Ihre E-Mail-Adresse ein und wir senden Ihnen einen Link zum Zurücksetzen Ihres Passworts`,emailLabel:`E-Mail`,emailPlaceholder:`name@example.com`,submitButton:`Link zum Zurücksetzen senden`,submittingButton:`Wird gesendet...`,successTitle:`Überprüfen Sie Ihre E-Mails`,successDescription:`Wir haben einen Link zum Zurücksetzen des Passworts an {{email}} gesendet. Bitte überprüfen Sie Ihren Posteingang.`,backToSignInText:`Zurück zur Anmeldung`,rememberPasswordText:`Passwort doch bekannt?`,signInText:`Anmelden`}},errors:{networkError:`Netzwerkfehler. Bitte überprüfen Sie Ihre Verbindung.`,serverError:`Serverfehler. Bitte versuchen Sie es später erneut.`,notFound:`Ressource nicht gefunden.`,unauthorized:`Sie sind nicht berechtigt, diese Aktion auszuführen.`,forbidden:`Zugriff verweigert.`,timeout:`Zeitüberschreitung. Bitte versuchen Sie es erneut.`,unknown:`Ein unerwarteter Fehler ist aufgetreten.`}},fr:{common:{loading:`Chargement...`,save:`Enregistrer`,cancel:`Annuler`,delete:`Supprimer`,edit:`Modifier`,create:`Créer`,search:`Rechercher`,filter:`Filtrer`,reset:`Réinitialiser`,confirm:`Confirmer`,close:`Fermer`,back:`Retour`,next:`Suivant`,previous:`Précédent`,submit:`Soumettre`,refresh:`Actualiser`,export:`Exporter`,import:`Importer`,yes:`Oui`,no:`Non`,ok:`OK`,actions:`Actions`,more:`Plus`,selectAll:`Tout sélectionner`,clearAll:`Tout effacer`,noData:`Aucune donnée`,noResults:`Aucun résultat trouvé`,required:`Obligatoire`,optional:`Facultatif`},validation:{required:`{{field}} est obligatoire`,minLength:`{{field}} doit contenir au moins {{min}} caractères`,maxLength:`{{field}} doit contenir au plus {{max}} caractères`,min:`{{field}} doit être au moins {{min}}`,max:`{{field}} doit être au plus {{max}}`,email:`Veuillez saisir une adresse e-mail valide`,url:`Veuillez saisir une URL valide`,pattern:`Le format de {{field}} est invalide`,unique:`{{field}} doit être unique`,type:`{{field}} doit être un {{type}} valide`},form:{addItem:`Ajouter un élément`,removeItem:`Supprimer un élément`,fieldRequired:`Ce champ est obligatoire`,invalidFormat:`Format invalide`,saveSuccess:`Enregistré avec succès`,saveError:`Échec de l'enregistrement`,unsavedChanges:`Vous avez des modifications non enregistrées. Voulez-vous vraiment quitter ?`,stepOf:`Étape {{current}} sur {{total}}`},table:{rowsPerPage:`Lignes par page`,showing:`Affichage de {{from}} à {{to}} sur {{total}}`,noRows:`Aucune ligne à afficher`,sortAsc:`Tri croissant`,sortDesc:`Tri décroissant`,filterColumn:`Filtrer {{column}}`,columns:`Colonnes`,exportCSV:`Exporter en CSV`,exportExcel:`Exporter en Excel`,selectRow:`Sélectionner la ligne`,selectAllRows:`Sélectionner toutes les lignes`,expandRow:`Développer la ligne`,collapseRow:`Réduire la ligne`,hideColumn:`Masquer la colonne`,freezeColumn:`Figer la colonne`,unfreezeColumn:`Libérer la colonne`,pageInfo:`Page {{current}} sur {{total}}`,totalRecords:`{{count}} au total`},grid:{actions:`Actions`,edit:`Modifier`,delete:`Supprimer`,export:`Exporter`,exportAs:`Exporter en {{format}}`,loading:`Chargement de la grille...`,errorLoading:`Erreur de chargement de la grille`,pullToRefresh:`Tirer pour actualiser`,refreshing:`Actualisation…`,openRecord:`Ouvrir l'enregistrement`,rowHeight:`Hauteur de ligne : {{mode}}`},calendar:{today:`Aujourd'hui`,month:`Mois`,week:`Semaine`,day:`Jour`,agenda:`Agenda`,allDay:`Toute la journée`,noEvents:`Aucun événement`,newEvent:`Nouvel événement`,moreEvents:`+{{count}} de plus`},list:{recordCount:`{{count}} enregistrements`,recordCountOne:`{{count}} enregistrement`,addRecord:`Ajouter un enregistrement`,tabs:`Onglets`,allRecords:`Tous les enregistrements`,search:`Rechercher`,filter:`Filtrer`,filterRecords:`Filtrer les enregistrements`,sort:`Trier`,sortRecords:`Trier les enregistrements`,group:`Grouper`,groupBy:`Grouper par`,export:`Exporter`,exportAs:`Exporter en {{format}}`,color:`Couleur`,rowColor:`Couleur de ligne`,colorByField:`Colorer par champ`,clear:`Effacer`,none:`Aucun`,hideFields:`Masquer les champs`,noItems:`Aucun élément trouvé`,noItemsMessage:`Il n'y a aucun enregistrement à afficher. Essayez d'ajuster les filtres ou d'ajouter de nouvelles données.`},kanban:{addCard:`Ajouter une carte`,addColumn:`Ajouter une colonne`,moveCard:`Déplacer la carte`,deleteCard:`Supprimer la carte`,deleteColumn:`Supprimer la colonne`},detail:{back:`Retour`,edit:`Modifier`,editInline:`Modifier en ligne`,save:`Enregistrer`,saveChanges:`Enregistrer les modifications`,editFieldsInline:`Modifier les champs en ligne`,share:`Partager`,duplicate:`Dupliquer`,export:`Exporter`,viewHistory:`Voir l'historique`,delete:`Supprimer`,moreActions:`Plus d'actions`,addToFavorites:`Ajouter aux favoris`,removeFromFavorites:`Retirer des favoris`,previousRecord:`Enregistrement précédent`,nextRecord:`Enregistrement suivant`,recordOf:`{{current}} sur {{total}}`,recordNotFound:`Enregistrement introuvable`,recordNotFoundDescription:`L'enregistrement que vous recherchez n'existe pas ou a peut-être été supprimé.`,goBack:`Retour`,details:`Détails`,related:`Associés`,relatedRecords:`{{count}} enregistrements`,relatedRecordOne:`{{count}} enregistrement`,noRelatedRecords:`Aucun enregistrement associé trouvé`,loading:`Chargement...`,copyToClipboard:`Copier dans le presse-papiers`,copied:`Copié !`,deleteConfirmation:`Êtes-vous sûr de vouloir supprimer cet enregistrement ?`,editRecord:`Modifier l'enregistrement`,viewAll:`Tout afficher`,new:`Nouveau`,emptyValue:`—`},chart:{noData:`Aucune donnée de graphique disponible`,loading:`Chargement du graphique...`},dashboard:{addWidget:`Ajouter un widget`,removeWidget:`Supprimer un widget`,editLayout:`Modifier la mise en page`,saveLayout:`Enregistrer la mise en page`,resetLayout:`Réinitialiser la mise en page`},configPanel:{save:`Enregistrer`,discard:`Annuler`,close:`Fermer`,layout:`Disposition`,columns:`Colonnes`,gap:`Espacement`,rowHeight:`Hauteur de ligne`,data:`Données`,refreshInterval:`Intervalle de rafraîchissement`,appearance:`Apparence`,title:`Titre`,showDescription:`Afficher la description`,theme:`Thème`,configuration:`Configuration`,general:`Général`,advanced:`Avancé`},appDesigner:{createApp:`Créer une application`,editApp:`Modifier l'application`,basicInfo:`Informations de base`,objects:`Objets`,navigation:`Navigation`,branding:`Marque`,appName:`Nom de l'application`,appTitle:`Titre`,appDescription:`Description`,appIcon:`Icône`,template:`Modèle`,layout:`Disposition`,layoutSidebar:`Barre latérale`,layoutHeader:`En-tête`,layoutEmpty:`Vide`,selectObjects:`Sélectionner les objets`,searchObjects:`Rechercher des objets…`,selectAll:`Tout sélectionner`,deselectAll:`Tout désélectionner`,navBuilder:`Constructeur de navigation`,addGroup:`Ajouter un groupe`,addUrl:`Ajouter un URL`,addSeparator:`Ajouter un séparateur`,noNavItems:`Aucun élément de navigation.`,logoUrl:`URL du logo`,primaryColor:`Couleur principale`,faviconUrl:`URL du favicon`,preview:`Aperçu`,complete:`Terminer`,snakeCaseHint:`Doit être en snake_case (ex. my_app)`,modeEdit:`Éditer`,modePreview:`Aperçu`,modeCode:`Code`,addWidget:`Ajouter un widget`,widgetProperties:`Propriétés du widget`,dataSource:`Source de données`,valueField:`Champ de valeur`,aggregate:`Agrégat`,colorVariant:`Variante de couleur`,addComponent:`Ajouter un composant`,componentProperties:`Propriétés du composant`,viewType:`Type de vue`,fields:`Champs`,toolbar:`Barre d'outils`,showSearch:`Afficher la recherche`,showFilters:`Afficher les filtres`,showSort:`Afficher le tri`,appearance:`Apparence`,rowHeight:`Hauteur de ligne`,stripedRows:`Lignes rayées`,bordered:`Bordé`,livePreview:`Aperçu en direct`,stepBasicDesc:`Nom, titre et mise en page`,stepObjectsDesc:`Sélectionner les objets métier`,stepNavigationDesc:`Construire l'arbre de navigation`,stepBrandingDesc:`Logo, couleurs et favicon`,noObjectsFound:`Aucun objet trouvé.`,noNavItemsHint:`Pas encore d'éléments de navigation. Sélectionnez des objets à l'étape précédente ou ajoutez-en manuellement.`,separator:`Séparateur`,separatorLabel:`— Séparateur —`,newGroup:`Nouveau groupe`,newLink:`Nouveau lien`,saveDraft:`Enregistrer le brouillon`,cancelConfirmTitle:`Abandonner les modifications ?`,cancelConfirmMessage:`Vous avez des modifications non enregistrées. Êtes-vous sûr de vouloir annuler ?`,confirmDiscard:`Abandonner`,keepEditing:`Continuer à éditer`,navNoItems:`Aucun élément de navigation. Cliquez sur les boutons ci-dessus pour ajouter des éléments.`,navNoPreviewItems:`Aucun élément`,navLivePreview:`Aperçu en direct`,navCollapseGroup:`Réduire le groupe`,navExpandGroup:`Développer le groupe`,navAddChild:`Ajouter un enfant`,navMoveUp:`Monter`,navMoveDown:`Descendre`,navRemove:`Supprimer`,navObjectPage:`Page d'objet`,navDashboard:`Tableau de bord`,navPage:`Page`,navReport:`Rapport`,navGroup:`Groupe`,navUrl:`URL`,navSeparator:`Séparateur`,navTypeObject:`Objet`,navTypeDashboard:`Tableau de bord`,navTypePage:`Page`,navTypeReport:`Rapport`,navTypeUrl:`URL`,navTypeGroup:`Groupe`,navTypeSeparator:`Séparateur`,navTypeAction:`Action`,navEditIcon:`Modifier l'icône`,navToggleVisible:`Basculer la visibilité`,navHidden:`Masqué`,navExportSchema:`Exporter JSON`,navImportSchema:`Importer JSON`,navExportSuccess:`Structure de navigation exportée`,navImportSuccess:`Structure de navigation importée`,navImportError:`JSON de navigation invalide`,navIconPlaceholder:`Nom d'icône (ex: Users)`,dashboardEditor:`Éditeur de tableau de bord`,noWidgets:`Aucun widget. Cliquez sur un bouton ci-dessus pour en ajouter un.`,widgetLayoutSize:`Taille de mise en page`,widgetWidth:`Largeur`,widgetHeight:`Hauteur`,dashboardPreview:`Aperçu du tableau de bord`,noWidgetsPreview:`Aucun widget à prévisualiser`,pageCanvasEditor:`Éditeur de canevas de page`,emptyPage:`Page vide. Cliquez sur un bouton ci-dessus pour ajouter un composant.`,pagePreview:`Aperçu de la page`,noComponentsPreview:`Aucun composant à prévisualiser`,modePage:`Page`,modeDashboard:`Tableau de bord`,undo:`Annuler`,redo:`Rétablir`,brandingEditor:`Éditeur de marque`,brandingExport:`Exporter JSON`,brandingImport:`Importer JSON`,brandingPreview:`Aperçu`,brandingSampleButton:`Bouton exemple`,brandingSampleText:`Voici à quoi ressemblera votre thème de marque.`,colorPalette:`Palette de couleurs`,fontFamily:`Police`,fontDefault:`Par défaut (Système)`,modeLight:`Clair`,modeDark:`Sombre`,mobilePreview:`Aperçu mobile`},console:{title:`Console ObjectStack`,initializing:`Initialisation de l'application...`,breadcrumb:{dashboards:`Tableaux de bord`,pages:`Pages`,reports:`Rapports`,system:`Système`},loadingSteps:{connecting:`Connexion à la source de données`,loadingConfig:`Chargement de la configuration`,preparingWorkspace:`Préparation de l'espace de travail`},shortcuts:{title:`Raccourcis clavier`,description:`Référence rapide de tous les raccourcis clavier disponibles.`,groups:{general:`Général`,navigation:`Navigation`,dataViews:`Vues de données`,preferences:`Préférences`},openCommandPalette:`Ouvrir la palette de commandes`,showShortcuts:`Afficher les raccourcis clavier`,closeDialog:`Fermer le dialogue / panneau`,toggleSidebar:`Basculer la barre latérale`,focusSearch:`Focus sur la recherche`,createRecord:`Créer un nouvel enregistrement`,refreshData:`Actualiser les données`,editRecord:`Modifier l'enregistrement sélectionné`,toggleDarkMode:`Basculer le mode sombre`},commandPalette:{placeholder:`Tapez une commande ou recherchez...`,noResults:`Aucun résultat trouvé.`,objects:`Objets`,dashboards:`Tableaux de bord`,pages:`Pages`,reports:`Rapports`,switchApp:`Changer d'application`,current:`Actuel`,preferences:`Préférences`,lightTheme:`Thème clair`,darkTheme:`Thème sombre`,systemTheme:`Thème système`,actions:`Actions`,openFullSearch:`Ouvrir la page de recherche complète`,createApp:`Créer une nouvelle application`},errors:{somethingWentWrong:`Quelque chose s'est mal passé`,unexpectedError:`Une erreur inattendue est survenue lors du rendu de cette vue.`,tryAgain:`Réessayer`,goHome:`Retour à l'accueil`,errorDetails:`Détails de l'erreur (développement uniquement)`},theme:{toggle:`Changer de thème`,light:`Clair`,dark:`Sombre`,system:`Système`},objectView:{objectNotFound:`Objet introuvable`,objectNotFoundDescription:`L'objet « {{objectName}} » n'existe pas dans la configuration actuelle.`,objectNotFoundHint:`Vérifiez les paramètres de navigation de votre application ou sélectionnez un autre objet dans la barre latérale.`,allRecords:`Tous les enregistrements`,exitDesignMode:`Quitter le mode conception`,enterDesignMode:`Entrer en mode conception`,metadataInspector:`Inspecteur de métadonnées`,editView:`Modifier la vue`,addView:`Ajouter une vue`,designTools:`Outils de conception`,new:`Nouveau`,configureView:`Configurer la vue`,closePanel:`Fermer le panneau`,page:`Page`,pageConfigHint:`Barre d'outils, navigation et paramètres du shell de vue`,listConfigHint:`Rendu des données, colonnes et apparence pour ce type de liste`,general:`Général`,generalHint:`Titre, description et type de la vue`,toolbar:`Barre d'outils`,toolbarHint:`Recherche, filtre, tri, regroupement et bascule de densité`,toolbarEnabledCount:`{{count}} of {{total}} enabled`,navigationSection:`Navigation`,navigationHint:`Comportement au clic sur la ligne et paramètres de la vue détaillée`,records:`Enregistrements`,recordsHint:`Mode de sélection, ajout d'enregistrement et édition en ligne`,exportPrint:`Export et impression`,exportPrintHint:`Formats d'export, impression et affichage du nombre d'enregistrements`,showAllFields:`Tout afficher`,hideAllFields:`Tout masquer`,searchFields:`Rechercher des champs...`,title:`Titre`,description:`Description`,data:`Données`,source:`Source`,columns:`Colonnes`,filterBy:`Filtrer par`,sortBy:`Trier par`,appearance:`Apparence`,showDescription:`Afficher la description`,viewType:`Type de vue`,userFilters:`Filtres utilisateur`,enableSearch:`Activer la recherche`,enableFilter:`Activer le filtre`,enableSort:`Activer le tri`,enableHideFields:`Activer masquer les champs`,enableGroup:`Activer le regroupement`,enableColor:`Activer la couleur`,enableDensity:`Activer la densité`,userActions:`Actions utilisateur`,addRecordViaForm:`Ajouter des enregistrements via un formulaire`,advanced:`Avancé`,allowExport:`Autoriser l'exportation`,recordCount:`{{count}} enregistrements`,noDescription:`Aucune description`,none:`Aucun`,columnsConfigured:`{{count}} colonnes`,save:`Enregistrer`,discard:`Annuler`,createView:`Créer une vue`,newView:`Nouvelle vue`,typeOptions:`Options de type`,groupByField:`Champ de regroupement`,startDateField:`Champ de date de début`,titleField:`Champ de titre`,latitudeField:`Champ de latitude`,longitudeField:`Champ de longitude`,imageField:`Champ d'image`,dateField:`Champ de date`,selectField:`Sélectionner un champ...`,gridOptionsHint:`La vue grille utilise les colonnes configurées ci-dessus.`,groupBy:`Regrouper par`,prefixField:`Champ de préfixe`,fields:`Champs`,fieldsVisible:`{{count}} visibles`,sortsCount:`{{count}} tris`,filtersCount:`{{count}} filtres`,endDateField:`Champ de date de fin`,color:`Couleur`,fieldTextColor:`Couleur du texte du champ`,rowHeight:`Hauteur de ligne`,wrapHeaders:`Retour à la ligne des en-têtes`,showFieldDescriptions:`Afficher les descriptions des champs`,collapseAllByDefault:`Tout réduire par défaut`,striped:`Lignes rayées`,bordered:`Cellules bordées`,inlineEdit:`Modifier les enregistrements en ligne`,addDeleteRecordsInline:`Ajouter/supprimer des enregistrements en ligne`,clickIntoRecordDetails:`Cliquer pour les détails de l'enregistrement`,navigationMode:`Mode de navigation`,navigationWidth:`Largeur de navigation`,navigationWidthHint:`Disponible pour les modes de navigation tiroir, modale et partagée`,openNewTab:`Ouvrir dans un nouvel onglet`,openNewTabHint:`Disponible pour les modes de navigation page et nouvelle fenêtre`},localeSwitcher:{label:`Langue`}},auth:{login:{title:`Connectez-vous à votre compte`,description:`Entrez votre e-mail et votre mot de passe pour continuer`,emailLabel:`E-mail`,emailPlaceholder:`name@example.com`,passwordLabel:`Mot de passe`,passwordPlaceholder:`Entrez votre mot de passe`,forgotPasswordText:`Mot de passe oublié ?`,submitButton:`Se connecter`,submittingButton:`Connexion en cours...`,noAccountText:`Vous n'avez pas de compte ?`,signUpText:`S'inscrire`},register:{title:`Créer un compte`,description:`Entrez vos informations pour commencer`,nameLabel:`Nom`,namePlaceholder:`Jean Dupont`,emailLabel:`E-mail`,emailPlaceholder:`name@example.com`,passwordLabel:`Mot de passe`,passwordPlaceholder:`Créer un mot de passe (min. 8 caractères)`,confirmPasswordLabel:`Confirmer le mot de passe`,confirmPasswordPlaceholder:`Confirmez votre mot de passe`,passwordMismatchError:`Les mots de passe ne correspondent pas`,passwordTooShortError:`Le mot de passe doit contenir au moins 8 caractères`,submitButton:`Créer un compte`,submittingButton:`Création du compte...`,hasAccountText:`Vous avez déjà un compte ?`,signInText:`Se connecter`},forgotPassword:{title:`Réinitialiser votre mot de passe`,description:`Entrez votre adresse e-mail et nous vous enverrons un lien pour réinitialiser votre mot de passe`,emailLabel:`E-mail`,emailPlaceholder:`name@example.com`,submitButton:`Envoyer le lien de réinitialisation`,submittingButton:`Envoi en cours...`,successTitle:`Vérifiez vos e-mails`,successDescription:`Nous avons envoyé un lien de réinitialisation du mot de passe à {{email}}. Veuillez vérifier votre boîte de réception.`,backToSignInText:`Retour à la connexion`,rememberPasswordText:`Vous vous souvenez de votre mot de passe ?`,signInText:`Se connecter`}},errors:{networkError:`Erreur réseau. Veuillez vérifier votre connexion.`,serverError:`Erreur serveur. Veuillez réessayer plus tard.`,notFound:`Ressource introuvable.`,unauthorized:`Vous n'êtes pas autorisé à effectuer cette action.`,forbidden:`Accès refusé.`,timeout:`Délai d'attente dépassé. Veuillez réessayer.`,unknown:`Une erreur inattendue s'est produite.`}},es:{common:{loading:`Cargando...`,save:`Guardar`,cancel:`Cancelar`,delete:`Eliminar`,edit:`Editar`,create:`Crear`,search:`Buscar`,filter:`Filtrar`,reset:`Restablecer`,confirm:`Confirmar`,close:`Cerrar`,back:`Atrás`,next:`Siguiente`,previous:`Anterior`,submit:`Enviar`,refresh:`Actualizar`,export:`Exportar`,import:`Importar`,yes:`Sí`,no:`No`,ok:`Aceptar`,actions:`Acciones`,more:`Más`,selectAll:`Seleccionar todo`,clearAll:`Borrar todo`,noData:`Sin datos`,noResults:`No se encontraron resultados`,required:`Obligatorio`,optional:`Opcional`},validation:{required:`{{field}} es obligatorio`,minLength:`{{field}} debe tener al menos {{min}} caracteres`,maxLength:`{{field}} debe tener como máximo {{max}} caracteres`,min:`{{field}} debe ser al menos {{min}}`,max:`{{field}} debe ser como máximo {{max}}`,email:`Por favor, introduzca un correo electrónico válido`,url:`Por favor, introduzca una URL válida`,pattern:`El formato de {{field}} no es válido`,unique:`{{field}} debe ser único`,type:`{{field}} debe ser un {{type}} válido`},form:{addItem:`Añadir elemento`,removeItem:`Eliminar elemento`,fieldRequired:`Este campo es obligatorio`,invalidFormat:`Formato no válido`,saveSuccess:`Guardado correctamente`,saveError:`Error al guardar`,unsavedChanges:`Tiene cambios sin guardar. ¿Está seguro de que desea salir?`,stepOf:`Paso {{current}} de {{total}}`},table:{rowsPerPage:`Filas por página`,showing:`Mostrando {{from}} a {{to}} de {{total}}`,noRows:`No hay filas para mostrar`,sortAsc:`Ordenar ascendente`,sortDesc:`Ordenar descendente`,filterColumn:`Filtrar {{column}}`,columns:`Columnas`,exportCSV:`Exportar CSV`,exportExcel:`Exportar Excel`,selectRow:`Seleccionar fila`,selectAllRows:`Seleccionar todas las filas`,expandRow:`Expandir fila`,collapseRow:`Contraer fila`,hideColumn:`Ocultar columna`,freezeColumn:`Fijar columna`,unfreezeColumn:`Desfijar columna`,pageInfo:`Página {{current}} de {{total}}`,totalRecords:`{{count}} en total`},grid:{actions:`Acciones`,edit:`Editar`,delete:`Eliminar`,export:`Exportar`,exportAs:`Exportar como {{format}}`,loading:`Cargando cuadrícula...`,errorLoading:`Error al cargar la cuadrícula`,pullToRefresh:`Desliza para actualizar`,refreshing:`Actualizando…`,openRecord:`Abrir registro`,rowHeight:`Altura de fila: {{mode}}`},calendar:{today:`Hoy`,month:`Mes`,week:`Semana`,day:`Día`,agenda:`Agenda`,allDay:`Todo el día`,noEvents:`Sin eventos`,newEvent:`Nuevo evento`,moreEvents:`+{{count}} más`},list:{recordCount:`{{count}} registros`,recordCountOne:`{{count}} registro`,addRecord:`Agregar registro`,tabs:`Pestañas`,allRecords:`Todos los registros`,search:`Buscar`,filter:`Filtrar`,filterRecords:`Filtrar registros`,sort:`Ordenar`,sortRecords:`Ordenar registros`,group:`Agrupar`,groupBy:`Agrupar por`,export:`Exportar`,exportAs:`Exportar como {{format}}`,color:`Color`,rowColor:`Color de fila`,colorByField:`Colorear por campo`,clear:`Borrar`,none:`Ninguno`,hideFields:`Ocultar campos`,noItems:`No se encontraron elementos`,noItemsMessage:`No hay registros para mostrar. Intente ajustar los filtros o agregar nuevos datos.`},kanban:{addCard:`Añadir tarjeta`,addColumn:`Añadir columna`,moveCard:`Mover tarjeta`,deleteCard:`Eliminar tarjeta`,deleteColumn:`Eliminar columna`},detail:{back:`Volver`,edit:`Editar`,editInline:`Editar en línea`,save:`Guardar`,saveChanges:`Guardar cambios`,editFieldsInline:`Editar campos en línea`,share:`Compartir`,duplicate:`Duplicar`,export:`Exportar`,viewHistory:`Ver historial`,delete:`Eliminar`,moreActions:`Más acciones`,addToFavorites:`Añadir a favoritos`,removeFromFavorites:`Quitar de favoritos`,previousRecord:`Registro anterior`,nextRecord:`Siguiente registro`,recordOf:`{{current}} de {{total}}`,recordNotFound:`Registro no encontrado`,recordNotFoundDescription:`El registro que busca no existe o puede haber sido eliminado.`,goBack:`Volver`,details:`Detalles`,related:`Relacionados`,relatedRecords:`{{count}} registros`,relatedRecordOne:`{{count}} registro`,noRelatedRecords:`No se encontraron registros relacionados`,loading:`Cargando...`,copyToClipboard:`Copiar al portapapeles`,copied:`¡Copiado!`,deleteConfirmation:`¿Está seguro de que desea eliminar este registro?`,editRecord:`Editar registro`,viewAll:`Ver todo`,new:`Nuevo`,emptyValue:`—`},chart:{noData:`No hay datos de gráfico disponibles`,loading:`Cargando gráfico...`},dashboard:{addWidget:`Añadir widget`,removeWidget:`Eliminar widget`,editLayout:`Editar diseño`,saveLayout:`Guardar diseño`,resetLayout:`Restablecer diseño`},configPanel:{save:`Guardar`,discard:`Descartar`,close:`Cerrar`,layout:`Diseño`,columns:`Columnas`,gap:`Espaciado`,rowHeight:`Altura de fila`,data:`Datos`,refreshInterval:`Intervalo de actualización`,appearance:`Apariencia`,title:`Título`,showDescription:`Mostrar descripción`,theme:`Tema`,configuration:`Configuración`,general:`General`,advanced:`Avanzado`},appDesigner:{createApp:`Crear aplicación`,editApp:`Editar aplicación`,basicInfo:`Información básica`,objects:`Objetos`,navigation:`Navegación`,branding:`Marca`,appName:`Nombre de la app`,appTitle:`Título`,appDescription:`Descripción`,appIcon:`Ícono`,template:`Plantilla`,layout:`Diseño`,layoutSidebar:`Barra lateral`,layoutHeader:`Encabezado`,layoutEmpty:`Vacío`,selectObjects:`Seleccionar objetos`,searchObjects:`Buscar objetos…`,selectAll:`Seleccionar todo`,deselectAll:`Deseleccionar todo`,navBuilder:`Constructor de navegación`,addGroup:`Agregar grupo`,addUrl:`Agregar URL`,addSeparator:`Agregar separador`,noNavItems:`Sin elementos de navegación.`,logoUrl:`URL del logo`,primaryColor:`Color principal`,faviconUrl:`URL del favicon`,preview:`Vista previa`,complete:`Completar`,snakeCaseHint:`Debe ser snake_case (ej. my_app)`,modeEdit:`Editar`,modePreview:`Vista previa`,modeCode:`Código`,addWidget:`Agregar widget`,widgetProperties:`Propiedades del widget`,dataSource:`Fuente de datos`,valueField:`Campo de valor`,aggregate:`Agregado`,colorVariant:`Variante de color`,addComponent:`Agregar componente`,componentProperties:`Propiedades del componente`,viewType:`Tipo de vista`,fields:`Campos`,toolbar:`Barra de herramientas`,showSearch:`Mostrar búsqueda`,showFilters:`Mostrar filtros`,showSort:`Mostrar orden`,appearance:`Apariencia`,rowHeight:`Altura de fila`,stripedRows:`Filas rayadas`,bordered:`Con borde`,livePreview:`Vista previa en vivo`,stepBasicDesc:`Nombre, título y diseño`,stepObjectsDesc:`Seleccionar objetos de negocio`,stepNavigationDesc:`Construir árbol de navegación`,stepBrandingDesc:`Logo, colores y favicon`,noObjectsFound:`No se encontraron objetos.`,noNavItemsHint:`Aún no hay elementos de navegación. Seleccione objetos en el paso anterior o agregue elementos manualmente.`,separator:`Separador`,separatorLabel:`— Separador —`,newGroup:`Nuevo grupo`,newLink:`Nuevo enlace`,saveDraft:`Guardar borrador`,cancelConfirmTitle:`¿Descartar cambios?`,cancelConfirmMessage:`Tiene cambios sin guardar. ¿Está seguro de que desea cancelar?`,confirmDiscard:`Descartar`,keepEditing:`Seguir editando`,navNoItems:`Sin elementos de navegación. Haga clic en los botones de arriba para agregar elementos.`,navNoPreviewItems:`Sin elementos`,navLivePreview:`Vista previa en vivo`,navCollapseGroup:`Contraer grupo`,navExpandGroup:`Expandir grupo`,navAddChild:`Agregar hijo`,navMoveUp:`Mover arriba`,navMoveDown:`Mover abajo`,navRemove:`Eliminar`,navObjectPage:`Página de objeto`,navDashboard:`Panel de control`,navPage:`Página`,navReport:`Informe`,navGroup:`Grupo`,navUrl:`URL`,navSeparator:`Separador`,navTypeObject:`Objeto`,navTypeDashboard:`Panel de control`,navTypePage:`Página`,navTypeReport:`Informe`,navTypeUrl:`URL`,navTypeGroup:`Grupo`,navTypeSeparator:`Separador`,navTypeAction:`Acción`,navEditIcon:`Editar icono`,navToggleVisible:`Alternar visibilidad`,navHidden:`Oculto`,navExportSchema:`Exportar JSON`,navImportSchema:`Importar JSON`,navExportSuccess:`Estructura de navegación exportada`,navImportSuccess:`Estructura de navegación importada`,navImportError:`JSON de navegación inválido`,navIconPlaceholder:`Nombre del icono (ej: Users)`,dashboardEditor:`Editor de panel`,noWidgets:`Sin widgets. Haz clic en un botón arriba para agregar uno.`,widgetLayoutSize:`Tamaño de diseño`,widgetWidth:`Ancho`,widgetHeight:`Alto`,dashboardPreview:`Vista previa del panel`,noWidgetsPreview:`Sin widgets para previsualizar`,pageCanvasEditor:`Editor de lienzo de página`,emptyPage:`Página vacía. Haz clic en un botón arriba para agregar un componente.`,pagePreview:`Vista previa de página`,noComponentsPreview:`Sin componentes para previsualizar`,modePage:`Página`,modeDashboard:`Panel`,undo:`Deshacer`,redo:`Rehacer`,brandingEditor:`Editor de marca`,brandingExport:`Exportar JSON`,brandingImport:`Importar JSON`,brandingPreview:`Vista previa`,brandingSampleButton:`Botón de ejemplo`,brandingSampleText:`Así se verá el tema de su marca.`,colorPalette:`Paleta de colores`,fontFamily:`Fuente`,fontDefault:`Predeterminada (Sistema)`,modeLight:`Claro`,modeDark:`Oscuro`,mobilePreview:`Vista previa móvil`},console:{title:`Consola ObjectStack`,initializing:`Inicializando aplicación...`,breadcrumb:{dashboards:`Paneles`,pages:`Páginas`,reports:`Informes`,system:`Sistema`},loadingSteps:{connecting:`Conectando a la fuente de datos`,loadingConfig:`Cargando configuración`,preparingWorkspace:`Preparando espacio de trabajo`},shortcuts:{title:`Atajos de teclado`,description:`Referencia rápida de todos los atajos de teclado disponibles.`,groups:{general:`General`,navigation:`Navegación`,dataViews:`Vistas de datos`,preferences:`Preferencias`},openCommandPalette:`Abrir paleta de comandos`,showShortcuts:`Mostrar atajos de teclado`,closeDialog:`Cerrar diálogo / panel`,toggleSidebar:`Alternar barra lateral`,focusSearch:`Enfocar búsqueda`,createRecord:`Crear nuevo registro`,refreshData:`Actualizar datos`,editRecord:`Editar registro seleccionado`,toggleDarkMode:`Alternar modo oscuro`},commandPalette:{placeholder:`Escriba un comando o busque...`,noResults:`No se encontraron resultados.`,objects:`Objetos`,dashboards:`Paneles`,pages:`Páginas`,reports:`Informes`,switchApp:`Cambiar aplicación`,current:`Actual`,preferences:`Preferencias`,lightTheme:`Tema claro`,darkTheme:`Tema oscuro`,systemTheme:`Tema del sistema`,actions:`Acciones`,openFullSearch:`Abrir página de búsqueda completa`,createApp:`Crear nueva aplicación`},errors:{somethingWentWrong:`Algo salió mal`,unexpectedError:`Ocurrió un error inesperado al renderizar esta vista.`,tryAgain:`Intentar de nuevo`,goHome:`Ir al inicio`,errorDetails:`Detalles del error (solo desarrollo)`},theme:{toggle:`Cambiar tema`,light:`Claro`,dark:`Oscuro`,system:`Sistema`},objectView:{objectNotFound:`Objeto no encontrado`,objectNotFoundDescription:`El objeto "{{objectName}}" no existe en la configuración actual.`,objectNotFoundHint:`Verifique la configuración de navegación de su aplicación o seleccione un objeto diferente en la barra lateral.`,allRecords:`Todos los registros`,exitDesignMode:`Salir del modo de diseño`,enterDesignMode:`Entrar en modo de diseño`,metadataInspector:`Inspector de metadatos`,editView:`Editar vista`,addView:`Agregar vista`,designTools:`Herramientas de diseño`,new:`Nuevo`,configureView:`Configurar vista`,closePanel:`Cerrar panel`,page:`Página`,pageConfigHint:`Barra de herramientas, navegación y configuración del shell de vista`,listConfigHint:`Renderizado de datos, columnas y apariencia para este tipo de lista`,general:`General`,generalHint:`Título, descripción y tipo de la vista`,toolbar:`Barra de herramientas`,toolbarHint:`Búsqueda, filtro, orden, agrupación y alternancia de densidad`,toolbarEnabledCount:`{{count}} of {{total}} enabled`,navigationSection:`Navegación`,navigationHint:`Comportamiento al hacer clic en la fila y configuración de la vista detallada`,records:`Registros`,recordsHint:`Modo de selección, agregar registro y edición en línea`,exportPrint:`Exportar e imprimir`,exportPrintHint:`Formatos de exportación, impresión y visualización del recuento de registros`,showAllFields:`Mostrar todo`,hideAllFields:`Ocultar todo`,searchFields:`Buscar campos...`,title:`Título`,description:`Descripción`,data:`Datos`,source:`Fuente`,columns:`Columnas`,filterBy:`Filtrar por`,sortBy:`Ordenar por`,appearance:`Apariencia`,showDescription:`Mostrar descripción`,viewType:`Tipo de vista`,userFilters:`Filtros de usuario`,enableSearch:`Habilitar búsqueda`,enableFilter:`Habilitar filtro`,enableSort:`Habilitar ordenamiento`,enableHideFields:`Habilitar ocultar campos`,enableGroup:`Habilitar agrupación`,enableColor:`Habilitar color`,enableDensity:`Habilitar densidad`,userActions:`Acciones de usuario`,addRecordViaForm:`Agregar registros mediante formulario`,advanced:`Avanzado`,allowExport:`Permitir exportación`,recordCount:`{{count}} registros`,noDescription:`Sin descripción`,none:`Ninguno`,columnsConfigured:`{{count}} columnas`,save:`Guardar`,discard:`Descartar`,createView:`Crear vista`,newView:`Nueva vista`,typeOptions:`Opciones de tipo`,groupByField:`Campo de agrupación`,startDateField:`Campo de fecha de inicio`,titleField:`Campo de título`,latitudeField:`Campo de latitud`,longitudeField:`Campo de longitud`,imageField:`Campo de imagen`,dateField:`Campo de fecha`,selectField:`Seleccionar campo...`,gridOptionsHint:`La vista de cuadrícula usa las columnas configuradas arriba.`,groupBy:`Agrupar por`,prefixField:`Campo de prefijo`,fields:`Campos`,fieldsVisible:`{{count}} visibles`,sortsCount:`{{count}} ordenamientos`,filtersCount:`{{count}} filtros`,endDateField:`Campo de fecha de fin`,color:`Color`,fieldTextColor:`Color del texto del campo`,rowHeight:`Altura de fila`,wrapHeaders:`Ajustar encabezados`,showFieldDescriptions:`Mostrar descripciones de campos`,collapseAllByDefault:`Contraer todo por defecto`,striped:`Filas alternadas`,bordered:`Celdas con borde`,inlineEdit:`Editar registros en línea`,addDeleteRecordsInline:`Agregar/eliminar registros en línea`,clickIntoRecordDetails:`Clic para detalles del registro`,navigationMode:`Modo de navegación`,navigationWidth:`Ancho de navegación`,navigationWidthHint:`Disponible para los modos de navegación cajón, modal y dividido`,openNewTab:`Abrir en nueva pestaña`,openNewTabHint:`Disponible para los modos de navegación página y nueva ventana`},localeSwitcher:{label:`Idioma`}},auth:{login:{title:`Inicia sesión en tu cuenta`,description:`Ingresa tu correo electrónico y contraseña para continuar`,emailLabel:`Correo electrónico`,emailPlaceholder:`name@example.com`,passwordLabel:`Contraseña`,passwordPlaceholder:`Ingresa tu contraseña`,forgotPasswordText:`¿Olvidaste tu contraseña?`,submitButton:`Iniciar sesión`,submittingButton:`Iniciando sesión...`,noAccountText:`¿No tienes una cuenta?`,signUpText:`Regístrate`},register:{title:`Crear una cuenta`,description:`Ingresa tu información para comenzar`,nameLabel:`Nombre`,namePlaceholder:`Juan Pérez`,emailLabel:`Correo electrónico`,emailPlaceholder:`name@example.com`,passwordLabel:`Contraseña`,passwordPlaceholder:`Crear una contraseña (mín. 8 caracteres)`,confirmPasswordLabel:`Confirmar contraseña`,confirmPasswordPlaceholder:`Confirma tu contraseña`,passwordMismatchError:`Las contraseñas no coinciden`,passwordTooShortError:`La contraseña debe tener al menos 8 caracteres`,submitButton:`Crear cuenta`,submittingButton:`Creando cuenta...`,hasAccountText:`¿Ya tienes una cuenta?`,signInText:`Iniciar sesión`},forgotPassword:{title:`Restablecer tu contraseña`,description:`Ingresa tu dirección de correo electrónico y te enviaremos un enlace para restablecer tu contraseña`,emailLabel:`Correo electrónico`,emailPlaceholder:`name@example.com`,submitButton:`Enviar enlace de restablecimiento`,submittingButton:`Enviando...`,successTitle:`Revisa tu correo electrónico`,successDescription:`Hemos enviado un enlace para restablecer la contraseña a {{email}}. Por favor revisa tu bandeja de entrada.`,backToSignInText:`Volver a iniciar sesión`,rememberPasswordText:`¿Recuerdas tu contraseña?`,signInText:`Iniciar sesión`}},errors:{networkError:`Error de red. Por favor, compruebe su conexión.`,serverError:`Error del servidor. Por favor, inténtelo de nuevo más tarde.`,notFound:`Recurso no encontrado.`,unauthorized:`No está autorizado para realizar esta acción.`,forbidden:`Acceso denegado.`,timeout:`Tiempo de espera agotado. Por favor, inténtelo de nuevo.`,unknown:`Ha ocurrido un error inesperado.`}},pt:{common:{loading:`Carregando...`,save:`Salvar`,cancel:`Cancelar`,delete:`Excluir`,edit:`Editar`,create:`Criar`,search:`Pesquisar`,filter:`Filtrar`,reset:`Redefinir`,confirm:`Confirmar`,close:`Fechar`,back:`Voltar`,next:`Próximo`,previous:`Anterior`,submit:`Enviar`,refresh:`Atualizar`,export:`Exportar`,import:`Importar`,yes:`Sim`,no:`Não`,ok:`OK`,actions:`Ações`,more:`Mais`,selectAll:`Selecionar tudo`,clearAll:`Limpar tudo`,noData:`Sem dados`,noResults:`Nenhum resultado encontrado`,required:`Obrigatório`,optional:`Opcional`},validation:{required:`{{field}} é obrigatório`,minLength:`{{field}} deve ter pelo menos {{min}} caracteres`,maxLength:`{{field}} deve ter no máximo {{max}} caracteres`,min:`{{field}} deve ser pelo menos {{min}}`,max:`{{field}} deve ser no máximo {{max}}`,email:`Por favor, insira um endereço de e-mail válido`,url:`Por favor, insira uma URL válida`,pattern:`O formato de {{field}} é inválido`,unique:`{{field}} deve ser único`,type:`{{field}} deve ser um {{type}} válido`},form:{addItem:`Adicionar item`,removeItem:`Remover item`,fieldRequired:`Este campo é obrigatório`,invalidFormat:`Formato inválido`,saveSuccess:`Salvo com sucesso`,saveError:`Falha ao salvar`,unsavedChanges:`Você tem alterações não salvas. Tem certeza de que deseja sair?`,stepOf:`Etapa {{current}} de {{total}}`},table:{rowsPerPage:`Linhas por página`,showing:`Mostrando {{from}} a {{to}} de {{total}}`,noRows:`Nenhuma linha para exibir`,sortAsc:`Ordenar crescente`,sortDesc:`Ordenar decrescente`,filterColumn:`Filtrar {{column}}`,columns:`Colunas`,exportCSV:`Exportar CSV`,exportExcel:`Exportar Excel`,selectRow:`Selecionar linha`,selectAllRows:`Selecionar todas as linhas`,expandRow:`Expandir linha`,collapseRow:`Recolher linha`,hideColumn:`Ocultar coluna`,freezeColumn:`Fixar coluna`,unfreezeColumn:`Soltar coluna`,pageInfo:`Página {{current}} de {{total}}`,totalRecords:`{{count}} no total`},grid:{actions:`Ações`,edit:`Editar`,delete:`Excluir`,export:`Exportar`,exportAs:`Exportar como {{format}}`,loading:`Carregando grade...`,errorLoading:`Erro ao carregar grade`,pullToRefresh:`Puxe para atualizar`,refreshing:`Atualizando…`,openRecord:`Abrir registro`,rowHeight:`Altura da linha: {{mode}}`},calendar:{today:`Hoje`,month:`Mês`,week:`Semana`,day:`Dia`,agenda:`Agenda`,allDay:`Dia inteiro`,noEvents:`Sem eventos`,newEvent:`Novo evento`,moreEvents:`+{{count}} mais`},list:{recordCount:`{{count}} registros`,recordCountOne:`{{count}} registro`,addRecord:`Adicionar registro`,tabs:`Abas`,allRecords:`Todos os registros`,search:`Pesquisar`,filter:`Filtrar`,filterRecords:`Filtrar registros`,sort:`Ordenar`,sortRecords:`Ordenar registros`,group:`Agrupar`,groupBy:`Agrupar por`,export:`Exportar`,exportAs:`Exportar como {{format}}`,color:`Cor`,rowColor:`Cor da linha`,colorByField:`Colorir por campo`,clear:`Limpar`,none:`Nenhum`,hideFields:`Ocultar campos`,noItems:`Nenhum item encontrado`,noItemsMessage:`Não há registros para exibir. Tente ajustar os filtros ou adicionar novos dados.`},kanban:{addCard:`Adicionar cartão`,addColumn:`Adicionar coluna`,moveCard:`Mover cartão`,deleteCard:`Excluir cartão`,deleteColumn:`Excluir coluna`},detail:{back:`Voltar`,edit:`Editar`,editInline:`Editar inline`,save:`Salvar`,saveChanges:`Salvar alterações`,editFieldsInline:`Editar campos inline`,share:`Compartilhar`,duplicate:`Duplicar`,export:`Exportar`,viewHistory:`Ver histórico`,delete:`Excluir`,moreActions:`Mais ações`,addToFavorites:`Adicionar aos favoritos`,removeFromFavorites:`Remover dos favoritos`,previousRecord:`Registro anterior`,nextRecord:`Próximo registro`,recordOf:`{{current}} de {{total}}`,recordNotFound:`Registro não encontrado`,recordNotFoundDescription:`O registro que você está procurando não existe ou pode ter sido excluído.`,goBack:`Voltar`,details:`Detalhes`,related:`Relacionados`,relatedRecords:`{{count}} registros`,relatedRecordOne:`{{count}} registro`,noRelatedRecords:`Nenhum registro relacionado encontrado`,loading:`Carregando...`,copyToClipboard:`Copiar para área de transferência`,copied:`Copiado!`,deleteConfirmation:`Tem certeza de que deseja excluir este registro?`,editRecord:`Editar registro`,viewAll:`Ver tudo`,new:`Novo`,emptyValue:`—`},chart:{noData:`Nenhum dado de gráfico disponível`,loading:`Carregando gráfico...`},dashboard:{addWidget:`Adicionar widget`,removeWidget:`Remover widget`,editLayout:`Editar layout`,saveLayout:`Salvar layout`,resetLayout:`Redefinir layout`},configPanel:{save:`Salvar`,discard:`Descartar`,close:`Fechar`,layout:`Layout`,columns:`Colunas`,gap:`Espaçamento`,rowHeight:`Altura da linha`,data:`Dados`,refreshInterval:`Intervalo de atualização`,appearance:`Aparência`,title:`Título`,showDescription:`Mostrar descrição`,theme:`Tema`,configuration:`Configuração`,general:`Geral`,advanced:`Avançado`},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:`Nome, título e layout`,stepObjectsDesc:`Selecionar objetos de negócio`,stepNavigationDesc:`Construir árvore de navegação`,stepBrandingDesc:`Logo, cores e favicon`,noObjectsFound:`Nenhum objeto encontrado.`,noNavItemsHint:`Sem itens de navegação. Selecione objetos na etapa anterior ou adicione manualmente.`,separator:`Separador`,separatorLabel:`— Separador —`,newGroup:`Novo grupo`,newLink:`Novo link`,saveDraft:`Salvar rascunho`,cancelConfirmTitle:`Descartar alterações?`,cancelConfirmMessage:`Você tem alterações não salvas. Tem certeza de que deseja cancelar?`,confirmDiscard:`Descartar`,keepEditing:`Continuar editando`,navNoItems:`Sem itens de navegação. Clique nos botões acima para adicionar itens.`,navNoPreviewItems:`Sem itens`,navLivePreview:`Pré-visualização ao vivo`,navCollapseGroup:`Recolher grupo`,navExpandGroup:`Expandir grupo`,navAddChild:`Adicionar filho`,navMoveUp:`Mover para cima`,navMoveDown:`Mover para baixo`,navRemove:`Remover`,navObjectPage:`Página de objeto`,navDashboard:`Painel`,navPage:`Página`,navReport:`Relatório`,navGroup:`Grupo`,navUrl:`URL`,navSeparator:`Separador`,navTypeObject:`Objeto`,navTypeDashboard:`Painel`,navTypePage:`Página`,navTypeReport:`Relatório`,navTypeUrl:`URL`,navTypeGroup:`Grupo`,navTypeSeparator:`Separador`,navTypeAction:`Ação`,navEditIcon:`Editar ícone`,navToggleVisible:`Alternar visibilidade`,navHidden:`Oculto`,navExportSchema:`Exportar JSON`,navImportSchema:`Importar JSON`,navExportSuccess:`Estrutura de navegação exportada`,navImportSuccess:`Estrutura de navegação importada`,navImportError:`JSON de navegação inválido`,navIconPlaceholder:`Nome do ícone (ex: Users)`,dashboardEditor:`Editor de painel`,noWidgets:`Sem widgets. Clique em um botão acima para adicionar.`,widgetLayoutSize:`Tamanho do layout`,widgetWidth:`Largura`,widgetHeight:`Altura`,dashboardPreview:`Pré-visualização do painel`,noWidgetsPreview:`Sem widgets para pré-visualizar`,pageCanvasEditor:`Editor de tela de página`,emptyPage:`Página vazia. Clique em um botão acima para adicionar um componente.`,pagePreview:`Pré-visualização da página`,noComponentsPreview:`Sem componentes para pré-visualizar`,modePage:`Página`,modeDashboard:`Painel`,undo:`Desfazer`,redo:`Refazer`,brandingEditor:`Editor de marca`,brandingExport:`Exportar JSON`,brandingImport:`Importar JSON`,brandingPreview:`Pré-visualização`,brandingSampleButton:`Botão de exemplo`,brandingSampleText:`É assim que o tema da sua marca vai ficar.`,colorPalette:`Paleta de cores`,fontFamily:`Fonte`,fontDefault:`Padrão (Sistema)`,modeLight:`Claro`,modeDark:`Escuro`,mobilePreview:`Pré-visualização móvel`},console:{title:`Console ObjectStack`,initializing:`Inicializando aplicação...`,breadcrumb:{dashboards:`Painéis`,pages:`Páginas`,reports:`Relatórios`,system:`Sistema`},loadingSteps:{connecting:`Conectando à fonte de dados`,loadingConfig:`Carregando configuração`,preparingWorkspace:`Preparando espaço de trabalho`},shortcuts:{title:`Atalhos de teclado`,description:`Referência rápida de todos os atalhos de teclado disponíveis.`,groups:{general:`Geral`,navigation:`Navegação`,dataViews:`Visualizações de dados`,preferences:`Preferências`},openCommandPalette:`Abrir paleta de comandos`,showShortcuts:`Mostrar atalhos de teclado`,closeDialog:`Fechar diálogo / painel`,toggleSidebar:`Alternar barra lateral`,focusSearch:`Focar na pesquisa`,createRecord:`Criar novo registro`,refreshData:`Atualizar dados`,editRecord:`Editar registro selecionado`,toggleDarkMode:`Alternar modo escuro`},commandPalette:{placeholder:`Digite um comando ou pesquise...`,noResults:`Nenhum resultado encontrado.`,objects:`Objetos`,dashboards:`Painéis`,pages:`Páginas`,reports:`Relatórios`,switchApp:`Trocar aplicativo`,current:`Atual`,preferences:`Preferências`,lightTheme:`Tema claro`,darkTheme:`Tema escuro`,systemTheme:`Tema do sistema`,actions:`Ações`,openFullSearch:`Abrir página de pesquisa completa`,createApp:`Criar novo aplicativo`},errors:{somethingWentWrong:`Algo deu errado`,unexpectedError:`Ocorreu um erro inesperado ao renderizar esta visualização.`,tryAgain:`Tentar novamente`,goHome:`Ir para início`,errorDetails:`Detalhes do erro (somente desenvolvimento)`},theme:{toggle:`Alternar tema`,light:`Claro`,dark:`Escuro`,system:`Sistema`},objectView:{objectNotFound:`Objeto não encontrado`,objectNotFoundDescription:`O objeto "{{objectName}}" não existe na configuração atual.`,objectNotFoundHint:`Verifique as configurações de navegação do seu aplicativo ou selecione um objeto diferente na barra lateral.`,allRecords:`Todos os registros`,exitDesignMode:`Sair do modo de design`,enterDesignMode:`Entrar no modo de design`,metadataInspector:`Inspetor de metadados`,editView:`Editar visualização`,addView:`Adicionar visualização`,designTools:`Ferramentas de design`,new:`Novo`,configureView:`Configurar visualização`,closePanel:`Fechar painel`,page:`Página`,pageConfigHint:`Barra de ferramentas, navegação e configurações do shell de visualização`,listConfigHint:`Renderização de dados, colunas e aparência para este tipo de lista`,general:`Geral`,generalHint:`Título, descrição e tipo da visualização`,toolbar:`Barra de ferramentas`,toolbarHint:`Pesquisa, filtro, ordenação, agrupamento e alternância de densidade`,toolbarEnabledCount:`{{count}} of {{total}} enabled`,navigationSection:`Navegação`,navigationHint:`Comportamento ao clicar na linha e configurações da visualização detalhada`,records:`Registros`,recordsHint:`Modo de seleção, adicionar registro e edição em linha`,exportPrint:`Exportar e imprimir`,exportPrintHint:`Formatos de exportação, impressão e exibição da contagem de registros`,showAllFields:`Mostrar tudo`,hideAllFields:`Ocultar tudo`,searchFields:`Pesquisar campos...`,title:`Título`,description:`Descrição`,data:`Dados`,source:`Fonte`,columns:`Colunas`,filterBy:`Filtrar por`,sortBy:`Ordenar por`,appearance:`Aparência`,showDescription:`Mostrar descrição`,viewType:`Tipo de visualização`,userFilters:`Filtros do usuário`,enableSearch:`Habilitar pesquisa`,enableFilter:`Habilitar filtro`,enableSort:`Habilitar ordenação`,enableHideFields:`Ativar ocultar campos`,enableGroup:`Ativar agrupamento`,enableColor:`Ativar cor`,enableDensity:`Ativar densidade`,userActions:`Ações do usuário`,addRecordViaForm:`Adicionar registros via formulário`,advanced:`Avançado`,allowExport:`Permitir exportação`,recordCount:`{{count}} registros`,noDescription:`Sem descrição`,none:`Nenhum`,columnsConfigured:`{{count}} colunas`,save:`Salvar`,discard:`Descartar`,createView:`Criar visualização`,newView:`Nova visualização`,typeOptions:`Opções de tipo`,groupByField:`Campo de agrupamento`,startDateField:`Campo de data de início`,titleField:`Campo de título`,latitudeField:`Campo de latitude`,longitudeField:`Campo de longitude`,imageField:`Campo de imagem`,dateField:`Campo de data`,selectField:`Selecionar campo...`,gridOptionsHint:`A visualização de grade usa as colunas configuradas acima.`,groupBy:`Agrupar por`,prefixField:`Campo de prefixo`,fields:`Campos`,fieldsVisible:`{{count}} visíveis`,sortsCount:`{{count}} ordenações`,filtersCount:`{{count}} filtros`,endDateField:`Campo de data de término`,color:`Cor`,fieldTextColor:`Cor do texto do campo`,rowHeight:`Altura da linha`,wrapHeaders:`Quebrar cabeçalhos`,showFieldDescriptions:`Mostrar descrições dos campos`,collapseAllByDefault:`Recolher tudo por padrão`,striped:`Linhas listradas`,bordered:`Células com borda`,inlineEdit:`Editar registros em linha`,addDeleteRecordsInline:`Adicionar/excluir registros em linha`,clickIntoRecordDetails:`Clique para detalhes do registro`,navigationMode:`Modo de navegação`,navigationWidth:`Largura de navegação`,navigationWidthHint:`Disponível para os modos de navegação gaveta, modal e dividido`,openNewTab:`Abrir em nova aba`,openNewTabHint:`Disponível para os modos de navegação página e nova janela`},localeSwitcher:{label:`Idioma`}},auth:{login:{title:`Entre na sua conta`,description:`Digite seu e-mail e senha para continuar`,emailLabel:`E-mail`,emailPlaceholder:`name@example.com`,passwordLabel:`Senha`,passwordPlaceholder:`Digite sua senha`,forgotPasswordText:`Esqueceu a senha?`,submitButton:`Entrar`,submittingButton:`Entrando...`,noAccountText:`Não tem uma conta?`,signUpText:`Cadastre-se`},register:{title:`Criar uma conta`,description:`Digite suas informações para começar`,nameLabel:`Nome`,namePlaceholder:`João Silva`,emailLabel:`E-mail`,emailPlaceholder:`name@example.com`,passwordLabel:`Senha`,passwordPlaceholder:`Criar uma senha (mín. 8 caracteres)`,confirmPasswordLabel:`Confirmar senha`,confirmPasswordPlaceholder:`Confirme sua senha`,passwordMismatchError:`As senhas não coincidem`,passwordTooShortError:`A senha deve ter pelo menos 8 caracteres`,submitButton:`Criar conta`,submittingButton:`Criando conta...`,hasAccountText:`Já tem uma conta?`,signInText:`Entrar`},forgotPassword:{title:`Redefinir sua senha`,description:`Digite seu endereço de e-mail e enviaremos um link para redefinir sua senha`,emailLabel:`E-mail`,emailPlaceholder:`name@example.com`,submitButton:`Enviar link de redefinição`,submittingButton:`Enviando...`,successTitle:`Verifique seu e-mail`,successDescription:`Enviamos um link para redefinição de senha para {{email}}. Por favor verifique sua caixa de entrada.`,backToSignInText:`Voltar para o login`,rememberPasswordText:`Lembra da sua senha?`,signInText:`Entrar`}},errors:{networkError:`Erro de rede. Por favor, verifique sua conexão.`,serverError:`Erro no servidor. Por favor, tente novamente mais tarde.`,notFound:`Recurso não encontrado.`,unauthorized:`Você não tem permissão para realizar esta ação.`,forbidden:`Acesso negado.`,timeout:`Tempo limite excedido. Por favor, tente novamente.`,unknown:`Ocorreu um erro inesperado.`}},ru:{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:`Очистить все`,noData:`Нет данных`,noResults:`Результаты не найдены`,required:`Обязательно`,optional:`Необязательно`},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}}`},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}}`},grid:{actions:`Действия`,edit:`Редактировать`,delete:`Удалить`,export:`Экспорт`,exportAs:`Экспорт в {{format}}`,loading:`Загрузка таблицы...`,errorLoading:`Ошибка загрузки таблицы`,pullToRefresh:`Потяните для обновления`,refreshing:`Обновление…`,openRecord:`Открыть запись`,rowHeight:`Высота строки: {{mode}}`},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:`Нет записей для отображения. Попробуйте изменить фильтры или добавить новые данные.`},kanban:{addCard:`Добавить карточку`,addColumn:`Добавить колонку`,moveCard:`Переместить карточку`,deleteCard:`Удалить карточку`,deleteColumn:`Удалить колонку`},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:`—`},chart:{noData:`Нет данных для графика`,loading:`Загрузка графика...`},dashboard:{addWidget:`Добавить виджет`,removeWidget:`Удалить виджет`,editLayout:`Редактировать макет`,saveLayout:`Сохранить макет`,resetLayout:`Сбросить макет`},configPanel:{save:`Сохранить`,discard:`Отменить`,close:`Закрыть`,layout:`Макет`,columns:`Столбцы`,gap:`Отступ`,rowHeight:`Высота строки`,data:`Данные`,refreshInterval:`Интервал обновления`,appearance:`Внешний вид`,title:`Заголовок`,showDescription:`Показать описание`,theme:`Тема`,configuration:`Конфигурация`,general:`Основные`,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:`Имя, заголовок и макет`,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:`URL`,navSeparator:`Разделитель`,navTypeObject:`Объект`,navTypeDashboard:`Дашборд`,navTypePage:`Страница`,navTypeReport:`Отчёт`,navTypeUrl:`URL`,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:`Мобильный предпросмотр`},console:{title:`Консоль ObjectStack`,initializing:`Инициализация приложения...`,breadcrumb:{dashboards:`Панели`,pages:`Страницы`,reports:`Отчёты`,system:`Система`},loadingSteps:{connecting:`Подключение к источнику данных`,loadingConfig:`Загрузка конфигурации`,preparingWorkspace:`Подготовка рабочего пространства`},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:`Создать новое приложение`},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}} of {{total}} enabled`,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:`Доступно для режимов навигации: страница и новое окно`},localeSwitcher:{label:`Язык`}},auth:{login:{title:`Войдите в свой аккаунт`,description:`Введите электронную почту и пароль для продолжения`,emailLabel:`Электронная почта`,emailPlaceholder:`name@example.com`,passwordLabel:`Пароль`,passwordPlaceholder:`Введите пароль`,forgotPasswordText:`Забыли пароль?`,submitButton:`Войти`,submittingButton:`Вход...`,noAccountText:`Нет аккаунта?`,signUpText:`Зарегистрироваться`},register:{title:`Создать аккаунт`,description:`Введите свои данные, чтобы начать`,nameLabel:`Имя`,namePlaceholder:`Иван Иванов`,emailLabel:`Электронная почта`,emailPlaceholder:`name@example.com`,passwordLabel:`Пароль`,passwordPlaceholder:`Создайте пароль (мин. 8 символов)`,confirmPasswordLabel:`Подтвердите пароль`,confirmPasswordPlaceholder:`Подтвердите свой пароль`,passwordMismatchError:`Пароли не совпадают`,passwordTooShortError:`Пароль должен содержать не менее 8 символов`,submitButton:`Создать аккаунт`,submittingButton:`Создание аккаунта...`,hasAccountText:`Уже есть аккаунт?`,signInText:`Войти`},forgotPassword:{title:`Сбросить пароль`,description:`Введите адрес электронной почты, и мы отправим вам ссылку для сброса пароля`,emailLabel:`Электронная почта`,emailPlaceholder:`name@example.com`,submitButton:`Отправить ссылку для сброса`,submittingButton:`Отправка...`,successTitle:`Проверьте почту`,successDescription:`Мы отправили ссылку для сброса пароля на {{email}}. Пожалуйста, проверьте свою почту.`,backToSignInText:`Вернуться к входу`,rememberPasswordText:`Помните свой пароль?`,signInText:`Войти`}},errors:{networkError:`Ошибка сети. Проверьте подключение к интернету.`,serverError:`Ошибка сервера. Попробуйте позже.`,notFound:`Ресурс не найден.`,unauthorized:`У вас нет прав для выполнения этого действия.`,forbidden:`Доступ запрещён.`,timeout:`Время ожидания истекло. Попробуйте снова.`,unknown:`Произошла непредвиденная ошибка.`}},ar:{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:`مسح الكل`,noData:`لا توجد بيانات`,noResults:`لم يتم العثور على نتائج`,required:`مطلوب`,optional:`اختياري`},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}}`},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}} إجمالي`},grid:{actions:`إجراءات`,edit:`تعديل`,delete:`حذف`,export:`تصدير`,exportAs:`تصدير كـ {{format}}`,loading:`جاري تحميل الشبكة...`,errorLoading:`خطأ في تحميل الشبكة`,pullToRefresh:`اسحب للتحديث`,refreshing:`جاري التحديث…`,openRecord:`فتح السجل`,rowHeight:`ارتفاع الصف: {{mode}}`},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:`لا توجد سجلات للعرض. حاول تعديل الفلاتر أو إضافة بيانات جديدة.`},kanban:{addCard:`إضافة بطاقة`,addColumn:`إضافة عمود`,moveCard:`نقل بطاقة`,deleteCard:`حذف بطاقة`,deleteColumn:`حذف عمود`},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:`—`},chart:{noData:`لا تتوفر بيانات للرسم البياني`,loading:`جاري تحميل الرسم البياني...`},dashboard:{addWidget:`إضافة أداة`,removeWidget:`إزالة أداة`,editLayout:`تعديل التخطيط`,saveLayout:`حفظ التخطيط`,resetLayout:`إعادة تعيين التخطيط`},configPanel:{save:`حفظ`,discard:`تجاهل`,close:`إغلاق`,layout:`التخطيط`,columns:`الأعمدة`,gap:`المسافة`,rowHeight:`ارتفاع الصف`,data:`البيانات`,refreshInterval:`فترة التحديث`,appearance:`المظهر`,title:`العنوان`,showDescription:`إظهار الوصف`,theme:`السمة`,configuration:`الإعداد`,general:`عام`,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:`الاسم والعنوان والتخطيط`,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:`معاينة الجوال`},console:{title:`وحدة تحكم ObjectStack`,initializing:`جاري تهيئة التطبيق...`,breadcrumb:{dashboards:`لوحات المعلومات`,pages:`الصفحات`,reports:`التقارير`,system:`النظام`},loadingSteps:{connecting:`جاري الاتصال بمصدر البيانات`,loadingConfig:`جاري تحميل الإعدادات`,preparingWorkspace:`جاري تجهيز مساحة العمل`},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:`إنشاء تطبيق جديد`},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}} of {{total}} enabled`,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:`متاح لأوضاع التنقل: الصفحة والنافذة الجديدة`},localeSwitcher:{label:`اللغة`}},auth:{login:{title:`تسجيل الدخول إلى حسابك`,description:`أدخل بريدك الإلكتروني وكلمة المرور للمتابعة`,emailLabel:`البريد الإلكتروني`,emailPlaceholder:`name@example.com`,passwordLabel:`كلمة المرور`,passwordPlaceholder:`أدخل كلمة المرور`,forgotPasswordText:`نسيت كلمة المرور؟`,submitButton:`تسجيل الدخول`,submittingButton:`جارٍ تسجيل الدخول...`,noAccountText:`ليس لديك حساب؟`,signUpText:`إنشاء حساب`},register:{title:`إنشاء حساب`,description:`أدخل معلوماتك للبدء`,nameLabel:`الاسم`,namePlaceholder:`محمد أحمد`,emailLabel:`البريد الإلكتروني`,emailPlaceholder:`name@example.com`,passwordLabel:`كلمة المرور`,passwordPlaceholder:`إنشاء كلمة مرور (8 أحرف على الأقل)`,confirmPasswordLabel:`تأكيد كلمة المرور`,confirmPasswordPlaceholder:`أكّد كلمة المرور`,passwordMismatchError:`كلمتا المرور غير متطابقتين`,passwordTooShortError:`يجب أن تتكون كلمة المرور من 8 أحرف على الأقل`,submitButton:`إنشاء حساب`,submittingButton:`جارٍ إنشاء الحساب...`,hasAccountText:`لديك حساب بالفعل؟`,signInText:`تسجيل الدخول`},forgotPassword:{title:`إعادة تعيين كلمة المرور`,description:`أدخل عنوان بريدك الإلكتروني وسنرسل لك رابطًا لإعادة تعيين كلمة المرور`,emailLabel:`البريد الإلكتروني`,emailPlaceholder:`name@example.com`,submitButton:`إرسال رابط إعادة التعيين`,submittingButton:`جارٍ الإرسال...`,successTitle:`تحقق من بريدك الإلكتروني`,successDescription:`لقد أرسلنا رابط إعادة تعيين كلمة المرور إلى {{email}}. يرجى التحقق من بريدك الوارد.`,backToSignInText:`العودة إلى تسجيل الدخول`,rememberPasswordText:`تتذكر كلمة المرور؟`,signInText:`تسجيل الدخول`}},errors:{networkError:`خطأ في الشبكة. يرجى التحقق من اتصالك.`,serverError:`خطأ في الخادم. يرجى المحاولة مرة أخرى لاحقاً.`,notFound:`المورد غير موجود.`,unauthorized:`ليس لديك صلاحية لتنفيذ هذا الإجراء.`,forbidden:`تم رفض الوصول.`,timeout:`انتهت مهلة الطلب. يرجى المحاولة مرة أخرى.`,unknown:`حدث خطأ غير متوقع.`}}},Oe=[`ar`,`he`,`fa`,`ur`];function ke(e){return Oe.includes(e)}function Ae(e={}){let{defaultLanguage:t=`en`,fallbackLanguage:n=`en`,resources:r={},detectBrowserLanguage:i=!0,interpolation:a}=e,o={};for(let[e,t]of Object.entries(De))o[e]={translation:{...t,...r[e]||{}}};for(let[e,t]of Object.entries(r))o[e]||(o[e]={translation:t});let s=t;if(i&&typeof navigator<`u`){let e=navigator.language?.split(`-`)[0];e&&o[e]&&(s=e)}let c=j.createInstance();return c.init({lng:s,fallbackLng:n,resources:o,interpolation:{escapeValue:!1,...a},returnNull:!1}),c}function je(e){return ke(e)?`rtl`:`ltr`}var Me=(e,t,n,r)=>{let i=[n,{code:t,...r||{}}];if(e?.services?.logger?.forward)return e.services.logger.forward(i,`warn`,`react-i18next::`,!0);M(i[0])&&(i[0]=`react-i18next:: ${i[0]}`),e?.services?.logger?.warn?e.services.logger.warn(...i):console?.warn&&console.warn(...i)},Ne={},Pe=(e,t,n,r)=>{M(n)&&Ne[n]||(M(n)&&(Ne[n]=new Date),Me(e,t,n,r))},Fe=(e,t)=>()=>{if(e.isInitialized)t();else{let n=()=>{setTimeout(()=>{e.off(`initialized`,n)},0),t()};e.on(`initialized`,n)}},Ie=(e,t,n)=>{e.loadNamespaces(t,Fe(e,n))},Le=(e,t,n,r)=>{if(M(n)&&(n=[n]),e.options.preload&&e.options.preload.indexOf(t)>-1)return Ie(e,n,r);n.forEach(t=>{e.options.ns.indexOf(t)<0&&e.options.ns.push(t)}),e.loadLanguages(t,Fe(e,r))},Re=(e,t,n={})=>!t.languages||!t.languages.length?(Pe(t,`NO_LANGUAGES`,`i18n.languages were undefined or empty`,{languages:t.languages}),!0):t.hasLoadedNamespace(e,{lng:n.lng,precheck:(t,r)=>{if(n.bindI18n&&n.bindI18n.indexOf(`languageChanging`)>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!r(t.isLanguageChangingTo,e))return!1}}),M=e=>typeof e==`string`,ze=e=>typeof e==`object`&&!!e,Be=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,Ve={"&":`&`,"&":`&`,"<":`<`,"<":`<`,">":`>`,">":`>`,"'":`'`,"'":`'`,""":`"`,""":`"`," ":` `," ":` `,"©":`©`,"©":`©`,"®":`®`,"®":`®`,"…":`…`,"…":`…`,"/":`/`,"/":`/`},He=e=>Ve[e],Ue={bindI18n:`languageChanged`,bindI18nStore:``,transEmptyNodeValue:``,transSupportBasicHtmlNodes:!0,transWrapTextNodes:``,transKeepBasicHtmlNodesFor:[`br`,`strong`,`i`,`p`],useSuspense:!0,unescape:e=>e.replace(Be,He),transDefaultProps:void 0},We=()=>Ue,Ge,Ke=()=>Ge,N=e(n()),qe=(0,N.createContext)(),Je=class{constructor(){this.usedNamespaces={}}addUsedNamespaces(e){e.forEach(e=>{this.usedNamespaces[e]||(this.usedNamespaces[e]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}},Ye=t((e=>{var t=n();function r(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var i=typeof Object.is==`function`?Object.is:r,a=t.useState,o=t.useEffect,s=t.useLayoutEffect,c=t.useDebugValue;function l(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),i=r[0].inst,l=r[1];return s(function(){i.value=n,i.getSnapshot=t,u(i)&&l({inst:i})},[e,n,t]),o(function(){return u(i)&&l({inst:i}),e(function(){u(i)&&l({inst:i})})},[e]),c(n),n}function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!i(e,n)}catch{return!0}}function d(e,t){return t()}var f=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?d:l;e.useSyncExternalStore=t.useSyncExternalStore===void 0?f:t.useSyncExternalStore})),Xe=t(((e,t)=>{t.exports=Ye()})),Ze=Xe(),Qe={t:(e,t)=>{if(M(t))return t;if(ze(t)&&M(t.defaultValue))return t.defaultValue;if(typeof e==`function`)return``;if(Array.isArray(e)){let t=e[e.length-1];return typeof t==`function`?``:t}return e},ready:!1},$e=()=>()=>{},et=(e,t={})=>{let{i18n:n}=t,{i18n:r,defaultNS:i}=(0,N.useContext)(qe)||{},a=n||r||Ke();a&&!a.reportNamespaces&&(a.reportNamespaces=new Je),a||Pe(a,`NO_I18NEXT_INSTANCE`,`useTranslation: You will need to pass in an i18next instance by using initReactI18next`);let o=(0,N.useMemo)(()=>({...We(),...a?.options?.react,...t}),[a,t]),{useSuspense:s,keyPrefix:c}=o,l=e||i||a?.options?.defaultNS,u=M(l)?[l]:l||[`translation`],d=(0,N.useMemo)(()=>u,u);a?.reportNamespaces?.addUsedNamespaces?.(d);let f=(0,N.useRef)(0),p=(0,N.useCallback)(e=>{if(!a)return $e;let{bindI18n:t,bindI18nStore:n}=o,r=()=>{f.current+=1,e()};return t&&a.on(t,r),n&&a.store.on(n,r),()=>{t&&t.split(` `).forEach(e=>a.off(e,r)),n&&n.split(` `).forEach(e=>a.store.off(e,r))}},[a,o]),m=(0,N.useRef)(),h=(0,N.useCallback)(()=>{if(!a)return Qe;let e=!!(a.isInitialized||a.initializedStoreOnce)&&d.every(e=>Re(e,a,o)),n=t.lng||a.language,r=f.current,i=m.current;if(i&&i.ready===e&&i.lng===n&&i.keyPrefix===c&&i.revision===r)return i;let s={t:a.getFixedT(n,o.nsMode===`fallback`?d:d[0],c),ready:e,lng:n,keyPrefix:c,revision:r};return m.current=s,s},[a,d,c,o,t.lng]),[g,_]=(0,N.useState)(0),{t:v,ready:y}=(0,Ze.useSyncExternalStore)(p,h,h);(0,N.useEffect)(()=>{if(a&&!y&&!s){let e=()=>_(e=>e+1);t.lng?Le(a,t.lng,d,e):Ie(a,d,e)}},[a,t.lng,d,y,s,g]);let b=a||{},x=(0,N.useRef)(null),S=(0,N.useRef)(),C=e=>{let t=Object.getOwnPropertyDescriptors(e);t.__original&&delete t.__original;let n=Object.create(Object.getPrototypeOf(e),t);if(!Object.prototype.hasOwnProperty.call(n,`__original`))try{Object.defineProperty(n,`__original`,{value:e,writable:!1,enumerable:!1,configurable:!1})}catch{}return n},w=(0,N.useMemo)(()=>{let e=b,t=e?.language,n=e;e&&(x.current&&x.current.__original===e&&S.current===t?n=x.current:(n=C(e),x.current=n,S.current=t));let r=!y&&!s?(...e)=>(Pe(a,`USE_T_BEFORE_READY`,`useTranslation: t was called before ready. When using useSuspense: false, make sure to check the ready flag before using t.`),v(...e)):v,i=[r,n,y];return i.t=r,i.i18n=n,i.ready=y,i},[v,b,y,b.resolvedLanguage,b.language,b.languages]);if(a&&s&&!y)throw new Promise(e=>{let n=()=>e();t.lng?Le(a,t.lng,d,n):Ie(a,d,n)});return w};function tt({i18n:e,defaultNS:t,children:n}){let r=(0,N.useMemo)(()=>({i18n:e,defaultNS:t}),[e,t]);return(0,N.createElement)(qe.Provider,{value:r},n)}var nt=(0,N.createContext)(null);function rt({config:e,instance:t,loadLanguage:n,children:r}){let i=(0,N.useMemo)(()=>t||Ae(e),[t,e]),[a,o]=(0,N.useState)(i.language||`en`),s=je(a),c=(0,N.useRef)(new Set);(0,N.useEffect)(()=>{let e=e=>{o(e),typeof document<`u`&&(document.documentElement.dir=je(e),document.documentElement.lang=e)};return i.on(`languageChanged`,e),()=>{i.off(`languageChanged`,e)}},[i]),(0,N.useEffect)(()=>{if(!n)return;let e=i.language||`en`;c.current.has(e)||(c.current.add(e),n(e).then(t=>{t&&Object.keys(t).length>0&&(i.addResourceBundle(e,`translation`,t,!0,!0),o(e))}).catch(t=>{c.current.delete(e),console.warn(`[i18n] Failed to load app translations for '${e}':`,t)}))},[i,n]);let l=(0,N.useMemo)(()=>({language:a,changeLanguage:async e=>{if(n&&!c.current.has(e)){c.current.add(e);try{let t=await n(e);i.addResourceBundle(e,`translation`,t,!0,!0)}catch(t){c.current.delete(e),console.warn(`[i18n] Failed to load app translations for '${e}':`,t)}}await i.changeLanguage(e)},direction:s,i18n:i}),[a,s,i,n]);return N.createElement(nt.Provider,{value:l},N.createElement(tt,{i18n:i},r))}function it(e){let t=(0,N.useContext)(nt),{t:n,i18n:r}=et(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}}var at=new Set([`common`,`validation`,`form`,`table`,`grid`,`calendar`,`list`,`kanban`,`chart`,`dashboard`,`configPanel`,`appDesigner`,`console`,`errors`,`detail`]);function ot(){let{t:e,i18n:t}=it(),n=()=>{if(!t||typeof t.getResourceBundle!=`function`)return[];let e=t.language||`en`,n=t.getResourceBundle(e,`translation`);return n?Object.keys(n).filter(e=>!at.has(e)&&n[e]&&typeof n[e]==`object`&&(n[e].objects||n[e].fields)):[]},r=(t,r)=>{try{let r=n();for(let n of r){let r=`${n}.${t}`,i=e(r,{defaultValue:``});if(i&&i!==r&&i!==``)return i}}catch{}return r};return{objectLabel:e=>r(`objects.${e.name}.label`,e.label),objectDescription:e=>{if(e.description)return r(`objects.${e.name}.description`,e.description)},fieldLabel:(e,t,n)=>r(`fields.${e}.${t}`,n)}}function st(){try{let{fieldLabel:e}=ot();return{fieldLabel:e}}catch{return{fieldLabel:(e,t,n)=>n}}}var ct=(0,N.createContext)(null);ct.displayName=`AuthContext`;var lt=Symbol.for(`better-auth:broadcast-channel`),ut=()=>Math.floor(Date.now()/1e3),dt=class{listeners=new Set;name;constructor(e=`better-auth.message`){this.name=e}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}post(e){if(!(typeof window>`u`))try{localStorage.setItem(this.name,JSON.stringify({...e,timestamp:ut()}))}catch{}}setup(){if(typeof window>`u`||window.addEventListener===void 0)return()=>{};let e=e=>{if(e.key!==this.name)return;let t=JSON.parse(e.newValue??`{}`);t?.event!==`session`||!t?.data||this.listeners.forEach(e=>e(t))};return window.addEventListener(`storage`,e),()=>{window.removeEventListener(`storage`,e)}}};function ft(e=`better-auth.message`){return globalThis[lt]||(globalThis[lt]=new dt(e)),globalThis[lt]}var pt=Symbol.for(`better-auth:focus-manager`),mt=class{listeners=new Set;subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}setFocused(e){this.listeners.forEach(t=>t(e))}setup(){if(typeof window>`u`||typeof document>`u`||window.addEventListener===void 0)return()=>{};let e=()=>{document.visibilityState===`visible`&&this.setFocused(!0)};return document.addEventListener(`visibilitychange`,e,!1),()=>{document.removeEventListener(`visibilitychange`,e,!1)}}};function ht(){return globalThis[pt]||(globalThis[pt]=new mt),globalThis[pt]}var gt=Symbol.for(`better-auth:online-manager`),_t=class{listeners=new Set;isOnline=typeof navigator<`u`?navigator.onLine:!0;subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}setOnline(e){this.isOnline=e,this.listeners.forEach(t=>t(e))}setup(){if(typeof window>`u`||window.addEventListener===void 0)return()=>{};let e=()=>this.setOnline(!0),t=()=>this.setOnline(!1);return window.addEventListener(`online`,e,!1),window.addEventListener(`offline`,t,!1),()=>{window.removeEventListener(`online`,e,!1),window.removeEventListener(`offline`,t,!1)}}};function vt(){return globalThis[gt]||(globalThis[gt]=new _t),globalThis[gt]}var yt={proto:/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,constructor:/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,protoShort:/"__proto__"\s*:/,constructorShort:/"constructor"\s*:/},bt=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/,xt={true:!0,false:!1,null:null,undefined:void 0,nan:NaN,infinity:1/0,"-infinity":-1/0},St=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,7}))?(?:Z|([+-])(\d{2}):(\d{2}))$/;function Ct(e){return e instanceof Date&&!isNaN(e.getTime())}function wt(e){let t=St.exec(e);if(!t)return null;let[,n,r,i,a,o,s,c,l,u,d]=t,f=new Date(Date.UTC(parseInt(n,10),parseInt(r,10)-1,parseInt(i,10),parseInt(a,10),parseInt(o,10),parseInt(s,10),c?parseInt(c.padEnd(3,`0`),10):0));if(l){let e=(parseInt(u,10)*60+parseInt(d,10))*(l===`+`?-1:1);f.setUTCMinutes(f.getUTCMinutes()+e)}return Ct(f)?f:null}function Tt(e,t={}){let{strict:n=!1,warnings:r=!1,reviver:i,parseDates:a=!0}=t;if(typeof e!=`string`)return e;let o=e.trim();if(o.length>0&&o[0]===`"`&&o.endsWith(`"`)&&!o.slice(1,-1).includes(`"`))return o.slice(1,-1);let s=o.toLowerCase();if(s.length<=9&&s in xt)return xt[s];if(!bt.test(o)){if(n)throw SyntaxError(`[better-json] Invalid JSON`);return e}if(Object.entries(yt).some(([e,t])=>{let n=t.test(o);return n&&r&&console.warn(`[better-json] Detected potential prototype pollution attempt using ${e} pattern`),n})&&n)throw Error(`[better-json] Potential prototype pollution attempt detected`);try{return JSON.parse(o,(e,t)=>{if(e===`__proto__`||e===`constructor`&&t&&typeof t==`object`&&`prototype`in t){r&&console.warn(`[better-json] Dropping "${e}" key to prevent prototype pollution`);return}if(a&&typeof t==`string`){let e=wt(t);if(e)return e}return i?i(e,t):t})}catch(t){if(n)throw t;return e}}function Et(e,t={strict:!0}){return Tt(e,t)}var P=[],F=0,I=4,Dt=0,Ot=e=>{let t=[],n={get(){return n.lc||n.listen(()=>{})(),n.value},init:e,lc:0,listen(e){return n.lc=t.push(e),()=>{for(let t=F+I;t<P.length;)P[t]===e?P.splice(t,I):t+=I;let r=t.indexOf(e);~r&&(t.splice(r,1),--n.lc||n.off())}},notify(e,r){Dt++;let i=!P.length;for(let i of t)P.push(i,n.value,e,r);if(i){for(F=0;F<P.length;F+=I)P[F](P[F+1],P[F+2],P[F+3]);P.length=0}},off(){},set(e){let t=n.value;t!==e&&(n.value=e,n.notify(t))},subscribe(e){let t=n.listen(e);return e(n.value),t},value:e};return n},kt=5,L=6,R=10,At=(e,t,n,r)=>(e.events=e.events||{},e.events[n+R]||(e.events[n+R]=r(t=>{e.events[n].reduceRight((e,t)=>(t(e),e),{shared:{},...t})})),e.events[n]=e.events[n]||[],e.events[n].push(t),()=>{let r=e.events[n],i=r.indexOf(t);r.splice(i,1),r.length||(delete e.events[n],e.events[n+R](),delete e.events[n+R])}),jt=1e3,Mt=(e,t)=>At(e,n=>{let r=t(n);r&&e.events[L].push(r)},kt,t=>{let n=e.listen;e.listen=(...r)=>(!e.lc&&!e.active&&(e.active=!0,t()),n(...r));let r=e.off;return e.events[L]=[],e.off=()=>{r(),setTimeout(()=>{if(e.active&&!e.lc){e.active=!1;for(let t of e.events[L])t();e.events[L]=[]}},jt)},()=>{e.listen=n,e.off=r}}),Nt=()=>typeof window>`u`,Pt=(e,t,n,r)=>{let i=Ot({data:null,error:null,isPending:!0,isRefetching:!1,refetch:e=>a(e)}),a=async e=>new Promise(a=>{let o=typeof r==`function`?r({data:i.get().data,error:i.get().error,isPending:i.get().isPending}):r;n(t,{...o,query:{...o?.query,...e?.query},async onSuccess(e){i.set({data:e.data,error:null,isPending:!1,isRefetching:!1,refetch:i.value.refetch}),await o?.onSuccess?.(e)},async onError(e){let{request:t}=e,n=typeof t.retry==`number`?t.retry:t.retry?.attempts,r=t.retryAttempt||0;if(n&&r<n)return;let a=e.error.status===401;i.set({error:e.error,data:a?null:i.get().data,isPending:!1,isRefetching:!1,refetch:i.value.refetch}),await o?.onError?.(e)},async onRequest(e){let t=i.get();i.set({isPending:t.data===null,data:t.data,error:null,isRefetching:!0,refetch:i.value.refetch}),await o?.onRequest?.(e)}}).catch(e=>{i.set({error:e,data:i.get().data,isPending:!1,isRefetching:!1,refetch:i.value.refetch})}).finally(()=>{a(void 0)})});e=Array.isArray(e)?e:[e];let o=!1;for(let t of e)t.subscribe(async()=>{Nt()||(o?await a():Mt(i,()=>{let e=setTimeout(async()=>{o||=(await a(),!0)},0);return()=>{i.off(),t.off(),clearTimeout(e)}}))});return i},z=()=>Math.floor(Date.now()/1e3);function Ft(e){return typeof e==`object`&&e&&`data`in e&&`error`in e?e:{data:e,error:null}}var It=5;function Lt(e){let{sessionAtom:t,sessionSignal:n,$fetch:r,options:i={}}=e,a=i.sessionOptions?.refetchInterval??0,o=i.sessionOptions?.refetchOnWindowFocus??!0,s=i.sessionOptions?.refetchWhenOffline??!1,c={lastSync:0,lastSessionRequest:0,cachedSession:void 0},l=()=>s||vt().isOnline,u=e=>{if(!l())return;if(e?.event===`storage`){c.lastSync=z(),n.set(!n.get());return}let i=t.get(),a=()=>{c.lastSessionRequest=z(),r(`/get-session`).then(async e=>{let{data:a,error:o}=Ft(e);if(a?.needsRefresh)try{let e=await r(`/get-session`,{method:`POST`});({data:a,error:o}=Ft(e))}catch{}let s=a?.session&&a?.user?a:null;t.set({...i,data:s,error:o}),c.lastSync=z(),n.set(!n.get())}).catch(()=>{})};if(e?.event===`poll`){a();return}if(e?.event===`visibilitychange`){if(z()-c.lastSessionRequest<It)return;c.lastSessionRequest=z()}if(e?.event===`visibilitychange`){a();return}(i?.data===null||i?.data===void 0)&&(c.lastSync=z(),n.set(!n.get()))},d=e=>{ft().post({event:`session`,data:{trigger:e},clientId:Math.random().toString(36).substring(7)})},f=()=>{a&&a>0&&(c.pollInterval=setInterval(()=>{t.get()?.data&&u({event:`poll`})},a*1e3))},p=()=>{c.unsubscribeBroadcast=ft().subscribe(()=>{u({event:`storage`})})},m=()=>{o&&(c.unsubscribeFocus=ht().subscribe(()=>{u({event:`visibilitychange`})}))},h=()=>{c.unsubscribeOnline=vt().subscribe(e=>{e&&u({event:`visibilitychange`})})};return{init:()=>{f(),p(),m(),h(),ft().setup(),ht().setup(),vt().setup()},cleanup:()=>{c.pollInterval&&=(clearInterval(c.pollInterval),void 0),c.unsubscribeBroadcast&&=(c.unsubscribeBroadcast(),void 0),c.unsubscribeFocus&&=(c.unsubscribeFocus(),void 0),c.unsubscribeOnline&&=(c.unsubscribeOnline(),void 0),c.lastSync=0,c.lastSessionRequest=0,c.cachedSession=void 0},triggerRefetch:u,broadcastSessionUpdate:d}}var Rt=Object.create(null),B=e=>({}),V=new Proxy(Rt,{get(e,t){return B()[t]??Rt[t]},has(e,t){return t in B()||t in Rt},set(e,t,n){let r=B(!0);return r[t]=n,!0},deleteProperty(e,t){if(!t)return!1;let n=B(!0);return delete n[t],!0},ownKeys(){let e=B(!0);return Object.keys(e)}});function H(e,t){return typeof process<`u`?{}[e]??t:typeof Deno<`u`?Deno.env.get(e)??t:typeof Bun<`u`?Bun.env[e]??t:t}Object.freeze({get BETTER_AUTH_SECRET(){return H(`BETTER_AUTH_SECRET`)},get AUTH_SECRET(){return H(`AUTH_SECRET`)},get BETTER_AUTH_TELEMETRY(){return H(`BETTER_AUTH_TELEMETRY`)},get BETTER_AUTH_TELEMETRY_ID(){return H(`BETTER_AUTH_TELEMETRY_ID`)},get NODE_ENV(){return H(`NODE_ENV`,`development`)},get PACKAGE_VERSION(){return H(`PACKAGE_VERSION`,`0.0.0`)},get BETTER_AUTH_TELEMETRY_ENDPOINT(){return H(`BETTER_AUTH_TELEMETRY_ENDPOINT`,``)}});var U=1,W=4,G=8,K=24,zt={eterm:W,cons25:W,console:W,cygwin:W,dtterm:W,gnome:W,hurd:W,jfbterm:W,konsole:W,kterm:W,mlterm:W,mosh:K,putty:W,st:W,"rxvt-unicode-24bit":K,terminator:K,"xterm-kitty":K},Bt=new Map(Object.entries({APPVEYOR:G,BUILDKITE:G,CIRCLECI:K,DRONE:G,GITEA_ACTIONS:K,GITHUB_ACTIONS:K,GITLAB_CI:G,TRAVIS:G})),Vt=[/ansi/,/color/,/linux/,/direct/,/^con[0-9]*x[0-9]/,/^rxvt/,/^screen/,/^xterm/,/^vt100/,/^vt220/];function Ht(){if(H(`FORCE_COLOR`)!==void 0)switch(H(`FORCE_COLOR`)){case``:case`1`:case`true`:return W;case`2`:return G;case`3`:return K;default:return U}if(H(`NODE_DISABLE_COLORS`)!==void 0&&H(`NODE_DISABLE_COLORS`)!==``||H(`NO_COLOR`)!==void 0&&H(`NO_COLOR`)!==``||H(`TERM`)===`dumb`)return U;if(H(`TMUX`))return K;if(`TF_BUILD`in V&&`AGENT_NAME`in V)return W;if(`CI`in V){for(let{0:e,1:t}of Bt)if(e in V)return t;return H(`CI_NAME`)===`codeship`?G:U}if(`TEAMCITY_VERSION`in V)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.exec(H(`TEAMCITY_VERSION`))===null?U:W;switch(H(`TERM_PROGRAM`)){case`iTerm.app`:return!H(`TERM_PROGRAM_VERSION`)||/^[0-2]\./.exec(H(`TERM_PROGRAM_VERSION`))!==null?G:K;case`HyperTerm`:case`MacTerm`:return K;case`Apple_Terminal`:return G}if(H(`COLORTERM`)===`truecolor`||H(`COLORTERM`)===`24bit`)return K;if(H(`TERM`)){if(/truecolor/.exec(H(`TERM`))!==null)return K;if(/^xterm-256/.exec(H(`TERM`))!==null)return G;let e=H(`TERM`).toLowerCase();if(zt[e])return zt[e];if(Vt.some(t=>t.exec(e)!==null))return W}return H(`COLORTERM`)?W:U}var q={reset:`\x1B[0m`,bright:`\x1B[1m`,dim:`\x1B[2m`,undim:`\x1B[22m`,underscore:`\x1B[4m`,blink:`\x1B[5m`,reverse:`\x1B[7m`,hidden:`\x1B[8m`,fg:{black:`\x1B[30m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,magenta:`\x1B[35m`,cyan:`\x1B[36m`,white:`\x1B[37m`},bg:{black:`\x1B[40m`,red:`\x1B[41m`,green:`\x1B[42m`,yellow:`\x1B[43m`,blue:`\x1B[44m`,magenta:`\x1B[45m`,cyan:`\x1B[46m`,white:`\x1B[47m`}},Ut=[`debug`,`info`,`success`,`warn`,`error`];function Wt(e,t){return Ut.indexOf(t)>=Ut.indexOf(e)}var Gt={info:q.fg.blue,success:q.fg.green,warn:q.fg.yellow,error:q.fg.red,debug:q.fg.magenta},Kt=(e,t,n)=>{let r=new Date().toISOString();return n?`${q.dim}${r}${q.reset} ${Gt[e]}${e.toUpperCase()}${q.reset} ${q.bright}[Better Auth]:${q.reset} ${t}`:`${r} ${e.toUpperCase()} [Better Auth]: ${t}`};(e=>{let t=e?.disabled!==!0,n=e?.level??`warn`,r=e?.disableColors===void 0?Ht()!==1:!e.disableColors,i=(i,a,o=[])=>{if(!t||!Wt(n,i))return;let s=Kt(i,a,r);if(!e||typeof e.log!=`function`){i===`error`?console.error(s,...o):i===`warn`?console.warn(s,...o):console.log(s,...o);return}e.log(i===`success`?`info`:i,a,...o)};return{...Object.fromEntries(Ut.map(e=>[e,(...[t,...n])=>i(e,t,n)])),get level(){return n}}})();function qt(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,{code:e,message:t,toString:()=>e}]))}qt({USER_NOT_FOUND:`User not found`,FAILED_TO_CREATE_USER:`Failed to create user`,FAILED_TO_CREATE_SESSION:`Failed to create session`,FAILED_TO_UPDATE_USER:`Failed to update user`,FAILED_TO_GET_SESSION:`Failed to get session`,INVALID_PASSWORD:`Invalid password`,INVALID_EMAIL:`Invalid email`,INVALID_EMAIL_OR_PASSWORD:`Invalid email or password`,INVALID_USER:`Invalid user`,SOCIAL_ACCOUNT_ALREADY_LINKED:`Social account already linked`,PROVIDER_NOT_FOUND:`Provider not found`,INVALID_TOKEN:`Invalid token`,TOKEN_EXPIRED:`Token expired`,ID_TOKEN_NOT_SUPPORTED:`id_token not supported`,FAILED_TO_GET_USER_INFO:`Failed to get user info`,USER_EMAIL_NOT_FOUND:`User email not found`,EMAIL_NOT_VERIFIED:`Email not verified`,PASSWORD_TOO_SHORT:`Password too short`,PASSWORD_TOO_LONG:`Password too long`,USER_ALREADY_EXISTS:`User already exists.`,USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL:`User already exists. Use another email.`,EMAIL_CAN_NOT_BE_UPDATED:`Email can not be updated`,CREDENTIAL_ACCOUNT_NOT_FOUND:`Credential account not found`,SESSION_EXPIRED:`Session expired. Re-authenticate to perform this action.`,FAILED_TO_UNLINK_LAST_ACCOUNT:`You can't unlink your last account`,ACCOUNT_NOT_FOUND:`Account not found`,USER_ALREADY_HAS_PASSWORD:`User already has a password. Provide that to delete the account.`,CROSS_SITE_NAVIGATION_LOGIN_BLOCKED:`Cross-site navigation login blocked. This request appears to be a CSRF attack.`,VERIFICATION_EMAIL_NOT_ENABLED:`Verification email isn't enabled`,EMAIL_ALREADY_VERIFIED:`Email is already verified`,EMAIL_MISMATCH:`Email mismatch`,SESSION_NOT_FRESH:`Session is not fresh`,LINKED_ACCOUNT_ALREADY_EXISTS:`Linked account already exists`,INVALID_ORIGIN:`Invalid origin`,INVALID_CALLBACK_URL:`Invalid callbackURL`,INVALID_REDIRECT_URL:`Invalid redirectURL`,INVALID_ERROR_CALLBACK_URL:`Invalid errorCallbackURL`,INVALID_NEW_USER_CALLBACK_URL:`Invalid newUserCallbackURL`,MISSING_OR_NULL_ORIGIN:`Missing or null Origin`,CALLBACK_URL_REQUIRED:`callbackURL is required`,FAILED_TO_CREATE_VERIFICATION:`Unable to create verification`,FIELD_NOT_ALLOWED:`Field not allowed to be set`,ASYNC_VALIDATION_NOT_SUPPORTED:`Async validation is not supported`,VALIDATION_ERROR:`Validation Error`,MISSING_FIELD:`Field is required`,METHOD_NOT_ALLOWED_DEFER_SESSION_REQUIRED:`POST method requires deferSessionRefresh to be enabled in session config`,BODY_MUST_BE_AN_OBJECT:`Body must be an object`,PASSWORD_ALREADY_SET:`User already has a password set`});function Jt(){let e=Object.getOwnPropertyDescriptor(Error,`stackTraceLimit`);return e===void 0?Object.isExtensible(Error):Object.prototype.hasOwnProperty.call(e,`writable`)?e.writable:e.set!==void 0}function Yt(e){let t=e.split(`
|
|
2
|
+
at `);return t.length<=1?e:(t.splice(1,1),t.join(`
|
|
3
|
+
at `))}function Xt(e,t){class n extends e{#e;constructor(...e){if(Jt()){let t=Error.stackTraceLimit;Error.stackTraceLimit=0,super(...e),Error.stackTraceLimit=t}else super(...e);let t=Error().stack;t&&(this.#e=Yt(t.replace(/^Error/,this.name)))}get errorStack(){return this.#e}}return Object.defineProperty(n.prototype,`constructor`,{get(){return t},enumerable:!1,configurable:!0}),n}var Zt={OK:200,CREATED:201,ACCEPTED:202,NO_CONTENT:204,MULTIPLE_CHOICES:300,MOVED_PERMANENTLY:301,FOUND:302,SEE_OTHER:303,NOT_MODIFIED:304,TEMPORARY_REDIRECT:307,BAD_REQUEST:400,UNAUTHORIZED:401,PAYMENT_REQUIRED:402,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,NOT_ACCEPTABLE:406,PROXY_AUTHENTICATION_REQUIRED:407,REQUEST_TIMEOUT:408,CONFLICT:409,GONE:410,LENGTH_REQUIRED:411,PRECONDITION_FAILED:412,PAYLOAD_TOO_LARGE:413,URI_TOO_LONG:414,UNSUPPORTED_MEDIA_TYPE:415,RANGE_NOT_SATISFIABLE:416,EXPECTATION_FAILED:417,"I'M_A_TEAPOT":418,MISDIRECTED_REQUEST:421,UNPROCESSABLE_ENTITY:422,LOCKED:423,FAILED_DEPENDENCY:424,TOO_EARLY:425,UPGRADE_REQUIRED:426,PRECONDITION_REQUIRED:428,TOO_MANY_REQUESTS:429,REQUEST_HEADER_FIELDS_TOO_LARGE:431,UNAVAILABLE_FOR_LEGAL_REASONS:451,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,VARIANT_ALSO_NEGOTIATES:506,INSUFFICIENT_STORAGE:507,LOOP_DETECTED:508,NOT_EXTENDED:510,NETWORK_AUTHENTICATION_REQUIRED:511};Xt(class extends Error{constructor(e=`INTERNAL_SERVER_ERROR`,t=void 0,n={},r=typeof e==`number`?e:Zt[e]){super(t?.message,t?.cause?{cause:t.cause}:void 0),this.status=e,this.body=t,this.headers=n,this.statusCode=r,this.name=`APIError`,this.status=e,this.headers=n,this.statusCode=r,this.body=t}},Error);var J=class extends Error{constructor(e,t){super(e,t),this.name=`BetterAuthError`,this.message=e,this.stack=``}};function Qt(e){try{return(new URL(e).pathname.replace(/\/+$/,``)||`/`)!==`/`}catch{throw new J(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function $t(e){try{let t=new URL(e);if(t.protocol!==`http:`&&t.protocol!==`https:`)throw new J(`Invalid base URL: ${e}. URL must include 'http://' or 'https://'`)}catch(t){throw t instanceof J?t:new J(`Invalid base URL: ${e}. Please provide a valid base URL.`,{cause:t})}}function Y(e,t=`/api/auth`){if($t(e),Qt(e))return e;let n=e.replace(/\/+$/,``);return!t||t===`/`?n:(t=t.startsWith(`/`)?t:`/${t}`,`${n}${t}`)}function en(e,t){return!e||e.trim()===``?!1:t===`proto`?e===`http`||e===`https`:t===`host`?[/\.\./,/\0/,/[\s]/,/^[.]/,/[<>'"]/,/javascript:/i,/file:/i,/data:/i].some(t=>t.test(e))?!1:/^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*(:[0-9]{1,5})?$/.test(e)||/^(\d{1,3}\.){3}\d{1,3}(:[0-9]{1,5})?$/.test(e)||/^\[[0-9a-fA-F:]+\](:[0-9]{1,5})?$/.test(e)||/^localhost(:[0-9]{1,5})?$/i.test(e):!1}function tn(e,t,n,r,i){if(e)return Y(e,t);if(r!==!1){let e=V.BETTER_AUTH_URL||V.NEXT_PUBLIC_BETTER_AUTH_URL||V.PUBLIC_BETTER_AUTH_URL||V.NUXT_PUBLIC_BETTER_AUTH_URL||V.NUXT_PUBLIC_AUTH_URL||(V.BASE_URL===`/`?void 0:V.BASE_URL);if(e)return Y(e,t)}let a=n?.headers.get(`x-forwarded-host`),o=n?.headers.get(`x-forwarded-proto`);if(a&&o&&i&&en(o,`proto`)&&en(a,`host`))try{return Y(`${o}://${a}`,t)}catch{}if(n){let e=nn(n.url);if(!e)throw new J(`Could not get origin from request. Please provide a valid base URL.`);return Y(e,t)}if(typeof window<`u`&&window.location)return Y(window.location.origin,t)}function nn(e){try{let t=new URL(e);return t.origin===`null`?null:t.origin}catch{return null}}var rn={id:`redirect`,name:`Redirect`,hooks:{onSuccess(e){if(e.data?.url&&e.data?.redirect&&typeof window<`u`&&window.location&&window.location)try{window.location.href=e.data.url}catch{}}}};function an(e,t){let n=Ot(!1),r=Pt(n,`/get-session`,e,{method:`GET`}),i=()=>{};return Mt(r,()=>{let a=Lt({sessionAtom:r,sessionSignal:n,$fetch:e,options:t});return a.init(),i=a.broadcastSessionUpdate,()=>{a.cleanup()}}),{session:r,$sessionSignal:n,broadcastSessionUpdate:e=>i(e)}}function on(e){if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null||Symbol.iterator in e?!1:Symbol.toStringTag in e?Object.prototype.toString.call(e)===`[object Module]`:!0}function sn(e,t,n=`.`,r){if(!on(t))return sn(e,{},n,r);let i=Object.assign({},t);for(let t in e){if(t===`__proto__`||t===`constructor`)continue;let a=e[t];a!=null&&(r&&r(i,t,a,n)||(Array.isArray(a)&&Array.isArray(i[t])?i[t]=[...a,...i[t]]:on(a)&&on(i[t])?i[t]=sn(a,i[t],(n?`${n}.`:``)+t.toString(),r):i[t]=a))}return i}function cn(e){return(...t)=>t.reduce((t,n)=>sn(t,n,``,e),{})}var ln=cn(),un=Object.defineProperty,dn=Object.defineProperties,fn=Object.getOwnPropertyDescriptors,pn=Object.getOwnPropertySymbols,mn=Object.prototype.hasOwnProperty,hn=Object.prototype.propertyIsEnumerable,gn=(e,t,n)=>t in e?un(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,X=(e,t)=>{for(var n in t||={})mn.call(t,n)&&gn(e,n,t[n]);if(pn)for(var n of pn(t))hn.call(t,n)&&gn(e,n,t[n]);return e},Z=(e,t)=>dn(e,fn(t)),_n=class extends Error{constructor(e,t,n){super(t||e.toString(),{cause:n}),this.status=e,this.statusText=t,this.error=n,Error.captureStackTrace(this,this.constructor)}},vn=async(e,t)=>{let n=t||{},r={onRequest:[t?.onRequest],onResponse:[t?.onResponse],onSuccess:[t?.onSuccess],onError:[t?.onError],onRetry:[t?.onRetry]};if(!t||!t?.plugins)return{url:e,options:n,hooks:r};for(let i of t?.plugins||[]){if(i.init){let r=await i.init?.call(i,e.toString(),t);n=r.options||n,e=r.url}r.onRequest.push(i.hooks?.onRequest),r.onResponse.push(i.hooks?.onResponse),r.onSuccess.push(i.hooks?.onSuccess),r.onError.push(i.hooks?.onError),r.onRetry.push(i.hooks?.onRetry)}return{url:e,options:n,hooks:r}},yn=class{constructor(e){this.options=e}shouldAttemptRetry(e,t){return this.options.shouldRetry?Promise.resolve(e<this.options.attempts&&this.options.shouldRetry(t)):Promise.resolve(e<this.options.attempts)}getDelay(){return this.options.delay}},bn=class{constructor(e){this.options=e}shouldAttemptRetry(e,t){return this.options.shouldRetry?Promise.resolve(e<this.options.attempts&&this.options.shouldRetry(t)):Promise.resolve(e<this.options.attempts)}getDelay(e){return Math.min(this.options.maxDelay,this.options.baseDelay*2**e)}};function xn(e){if(typeof e==`number`)return new yn({type:`linear`,attempts:e,delay:1e3});switch(e.type){case`linear`:return new yn(e);case`exponential`:return new bn(e);default:throw Error(`Invalid retry strategy`)}}var Sn=async e=>{let t={},n=async e=>typeof e==`function`?await e():e;if(e?.auth){if(e.auth.type===`Bearer`){let r=await n(e.auth.token);if(!r)return t;t.authorization=`Bearer ${r}`}else if(e.auth.type===`Basic`){let[r,i]=await Promise.all([n(e.auth.username),n(e.auth.password)]);if(!r||!i)return t;t.authorization=`Basic ${btoa(`${r}:${i}`)}`}else if(e.auth.type===`Custom`){let[r,i]=await Promise.all([n(e.auth.prefix),n(e.auth.value)]);if(!i)return t;t.authorization=`${r??``} ${i}`}}return t},Cn=/^application\/(?:[\w!#$%&*.^`~-]*\+)?json(;.+)?$/i;function wn(e){let t=e.headers.get(`content-type`),n=new Set([`image/svg`,`application/xml`,`application/xhtml`,`application/html`]);if(!t)return`json`;let r=t.split(`;`).shift()||``;return Cn.test(r)?`json`:n.has(r)||r.startsWith(`text/`)?`text`:`blob`}function Tn(e){try{return JSON.parse(e),!0}catch{return!1}}function En(e){if(e===void 0)return!1;let t=typeof e;return t===`string`||t===`number`||t===`boolean`||t===null?!0:t===`object`?Array.isArray(e)?!0:e.buffer?!1:e.constructor&&e.constructor.name===`Object`||typeof e.toJSON==`function`:!1}function Dn(e){try{return JSON.parse(e)}catch{return e}}function On(e){return typeof e==`function`}function kn(e){if(e?.customFetchImpl)return e.customFetchImpl;if(typeof globalThis<`u`&&On(globalThis.fetch))return globalThis.fetch;if(typeof window<`u`&&On(window.fetch))return window.fetch;throw Error(`No fetch implementation found`)}async function An(e){let t=new Headers(e?.headers),n=await Sn(e);for(let[e,r]of Object.entries(n||{}))t.set(e,r);if(!t.has(`content-type`)){let n=jn(e?.body);n&&t.set(`content-type`,n)}return t}function jn(e){return En(e)?`application/json`:null}function Mn(e){if(!e?.body)return null;let t=new Headers(e?.headers);if(En(e.body)&&!t.has(`content-type`)){for(let[t,n]of Object.entries(e?.body))n instanceof Date&&(e.body[t]=n.toISOString());return JSON.stringify(e.body)}return t.has(`content-type`)&&t.get(`content-type`)===`application/x-www-form-urlencoded`&&En(e.body)?new URLSearchParams(e.body).toString():e.body}function Nn(e,t){if(t?.method)return t.method.toUpperCase();if(e.startsWith(`@`)){let n=e.split(`@`)[1]?.split(`/`)[0];return Ln.includes(n)?n.toUpperCase():t?.body?`POST`:`GET`}return t?.body?`POST`:`GET`}function Pn(e,t){let n;return!e?.signal&&e?.timeout&&(n=setTimeout(()=>t?.abort(),e?.timeout)),{abortTimeout:n,clearTimeout:()=>{n&&clearTimeout(n)}}}var Fn=class e extends Error{constructor(t,n){super(n||JSON.stringify(t,null,2)),this.issues=t,Object.setPrototypeOf(this,e.prototype)}};async function In(e,t){let n=await e[`~standard`].validate(t);if(n.issues)throw new Fn(n.issues);return n.value}var Ln=[`get`,`post`,`put`,`patch`,`delete`],Rn=e=>({id:`apply-schema`,name:`Apply Schema`,version:`1.0.0`,async init(t,n){let r=e.plugins?.find(e=>e.schema?.config?t.startsWith(e.schema.config.baseURL||``)||t.startsWith(e.schema.config.prefix||``):!1)?.schema||e.schema;if(r){let e=t;r.config?.prefix&&e.startsWith(r.config.prefix)&&(e=e.replace(r.config.prefix,``),r.config.baseURL&&(t=t.replace(r.config.prefix,r.config.baseURL))),r.config?.baseURL&&e.startsWith(r.config.baseURL)&&(e=e.replace(r.config.baseURL,``));let i=r.schema[e];if(i){let e=Z(X({},n),{method:i.method,output:i.output});return n?.disableValidation||(e=Z(X({},e),{body:i.input?await In(i.input,n?.body):n?.body,params:i.params?await In(i.params,n?.params):n?.params,query:i.query?await In(i.query,n?.query):n?.query})),{url:t,options:e}}}return{url:t,options:n}}}),zn=e=>{async function t(t,n){let r=Z(X(X({},e),n),{plugins:[...e?.plugins||[],Rn(e||{}),...n?.plugins||[]]});if(e?.catchAllError)try{return await Vn(t,r)}catch(e){return{data:null,error:{status:500,statusText:`Fetch Error`,message:`Fetch related error. Captured by catchAllError option. See error property for more details.`,error:e}}}return await Vn(t,r)}return t};function Bn(e,t){let{baseURL:n,params:r,query:i}=t||{query:{},params:{},baseURL:``},a=e.startsWith(`http`)?e.split(`/`).slice(0,3).join(`/`):n||``;if(e.startsWith(`@`)){let t=e.toString().split(`@`)[1].split(`/`)[0];Ln.includes(t)&&(e=e.replace(`@${t}/`,`/`))}a.endsWith(`/`)||(a+=`/`);let[o,s]=e.replace(a,``).split(`?`),c=new URLSearchParams(s);for(let[e,t]of Object.entries(i||{})){if(t==null)continue;let n;if(typeof t==`string`)n=t;else if(Array.isArray(t)){for(let n of t)c.append(e,n);continue}else n=JSON.stringify(t);c.set(e,n)}if(r)if(Array.isArray(r)){let e=o.split(`/`).filter(e=>e.startsWith(`:`));for(let[t,n]of e.entries()){let e=r[t];o=o.replace(n,e)}}else for(let[e,t]of Object.entries(r))o=o.replace(`:${e}`,String(t));o=o.split(`/`).map(encodeURIComponent).join(`/`),o.startsWith(`/`)&&(o=o.slice(1));let l=c.toString();return l=l.length>0?`?${l}`.replace(/\+/g,`%20`):``,a.startsWith(`http`)?new URL(`${o}${l}`,a):`${a}${o}${l}`}var Vn=async(e,t)=>{let{hooks:n,url:r,options:i}=await vn(e,t),a=kn(i),o=new AbortController,s=i.signal??o.signal,c=Bn(r,i),l=Mn(i),u=await An(i),d=Nn(r,i),f=Z(X({},i),{url:c,headers:u,body:l,method:d,signal:s});for(let e of n.onRequest)if(e){let t=await e(f);typeof t==`object`&&t&&(f=t)}(`pipeTo`in f&&typeof f.pipeTo==`function`||typeof t?.body?.pipe==`function`)&&(`duplex`in f||(f.duplex=`half`));let{clearTimeout:p}=Pn(i,o),m=await a(f.url,f);p();let h={response:m,request:f};for(let e of n.onResponse)if(e){let n=await e(Z(X({},h),{response:t?.hookOptions?.cloneResponse?m.clone():m}));n instanceof Response?m=n:typeof n==`object`&&n&&(m=n.response)}if(m.ok){if(f.method===`HEAD`)return{data:``,error:null};let e=wn(m),r={data:null,response:m,request:f};if(e===`json`||e===`text`){let e=await m.text();r.data=await(f.jsonParser??Dn)(e)}else r.data=await m[e]();f?.output&&f.output&&!f.disableValidation&&(r.data=await In(f.output,r.data));for(let e of n.onSuccess)e&&await e(Z(X({},r),{response:t?.hookOptions?.cloneResponse?m.clone():m}));return t?.throw?r.data:{data:r.data,error:null}}let g=t?.jsonParser??Dn,_=await m.text(),v=Tn(_),y=v?await g(_):null,b={response:m,responseText:_,request:f,error:Z(X({},y),{status:m.status,statusText:m.statusText})};for(let e of n.onError)e&&await e(Z(X({},b),{response:t?.hookOptions?.cloneResponse?m.clone():m}));if(t?.retry){let r=xn(t.retry),i=t.retryAttempt??0;if(await r.shouldAttemptRetry(i,m)){for(let e of n.onRetry)e&&await e(h);let a=r.getDelay(i);return await new Promise(e=>setTimeout(e,a)),await Vn(e,Z(X({},t),{retryAttempt:i+1}))}}if(t?.throw)throw new _n(m.status,m.statusText,v?y:_);return{data:null,error:Z(X({},y),{status:m.status,statusText:m.statusText})}},Hn=e=>{if(typeof process>`u`)return;let t=e??`/api/auth`;if({}.NEXT_PUBLIC_AUTH_URL)return{}.NEXT_PUBLIC_AUTH_URL;if(typeof window>`u`){if({}.NEXTAUTH_URL)try{return{}.NEXTAUTH_URL}catch{}if({}.VERCEL_URL)try{let e={}.VERCEL_URL.startsWith(`http`)?``:`https://`;return`${new URL(`${e}${{}.VERCEL_URL}`).origin}${t}`}catch{}}},Un=(e,t)=>{let n=`credentials`in Request.prototype,r=tn(e?.baseURL,e?.basePath,void 0,t)??Hn(e?.basePath)??`/api/auth`,i=e?.plugins?.flatMap(e=>e.fetchPlugins).filter(e=>e!==void 0)||[],a={id:`lifecycle-hooks`,name:`lifecycle-hooks`,hooks:{onSuccess:e?.fetchOptions?.onSuccess,onError:e?.fetchOptions?.onError,onRequest:e?.fetchOptions?.onRequest,onResponse:e?.fetchOptions?.onResponse}},{onSuccess:o,onError:s,onRequest:c,onResponse:l,...u}=e?.fetchOptions||{},d=zn({baseURL:r,...n?{credentials:`include`}:{},method:`GET`,jsonParser(e){return e?Et(e,{strict:!1}):null},customFetchImpl:fetch,...u,plugins:[a,...u.plugins||[],...e?.disableDefaultFetchPlugins?[]:[rn],...i]}),{$sessionSignal:f,session:p,broadcastSessionUpdate:m}=an(d,e),h=e?.plugins||[],g={},_={$sessionSignal:f,session:p},v={"/sign-out":`POST`,"/revoke-sessions":`POST`,"/revoke-other-sessions":`POST`,"/delete-user":`POST`},y=[{signal:`$sessionSignal`,matcher(e){return e===`/sign-out`||e===`/update-user`||e===`/update-session`||e===`/sign-up/email`||e===`/sign-in/email`||e===`/delete-user`||e===`/verify-email`||e===`/revoke-sessions`||e===`/revoke-session`||e===`/change-email`},callback(e){e===`/sign-out`?m(`signout`):(e===`/update-user`||e===`/update-session`)&&m(`updateUser`)}}];for(let e of h)e.getAtoms&&Object.assign(_,e.getAtoms?.(d)),e.pathMethods&&Object.assign(v,e.pathMethods),e.atomListeners&&y.push(...e.atomListeners);let b={notify:e=>{_[e].set(!_[e].get())},listen:(e,t)=>{_[e].subscribe(t)},atoms:_};for(let t of h)t.getActions&&(g=ln(t.getActions?.(d,b,e)??{},g));return{get baseURL(){return r},pluginsActions:g,pluginsAtoms:_,pluginPathMethods:v,atomListeners:y,$fetch:d,$store:b}};function Wn(e){return typeof e==`object`&&!!e&&`get`in e&&typeof e.get==`function`&&`lc`in e&&typeof e.lc==`number`}function Gn(e,t,n){let r=t[e],{fetchOptions:i,query:a,...o}=n||{};return r||(i?.method?i.method:o&&Object.keys(o).length>0?`POST`:`GET`)}function Kn(e,t,n,r,i){function a(o=[]){return new Proxy(function(){},{get(t,n){if(typeof n!=`string`||n===`then`||n===`catch`||n===`finally`)return;let r=[...o,n],i=e;for(let e of r)if(i&&typeof i==`object`&&e in i)i=i[e];else{i=void 0;break}return typeof i==`function`||Wn(i)?i:a(r)},apply:async(e,a,s)=>{let c=`/`+o.map(e=>e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)).join(`/`),l=s[0]||{},u=s[1]||{},{query:d,fetchOptions:f,...p}=l,m={...u,...f},h=Gn(c,n,l);return await t(c,{...m,body:h===`GET`?void 0:{...p,...m?.body||{}},query:d||m?.query,method:h,async onSuccess(e){if(await m?.onSuccess?.(e),!i||m.disableSignal)return;let t=i.filter(e=>e.matcher(c));if(!t.length)return;let n=new Set;for(let e of t){let t=r[e.signal];if(!t)return;if(n.has(e.signal))continue;n.add(e.signal);let i=t.get();setTimeout(()=>{t.set(!i)},10),e.callback?.(c)}}})}})}return a()}function qn(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Jn(e){let{pluginPathMethods:t,pluginsActions:n,pluginsAtoms:r,$fetch:i,atomListeners:a,$store:o}=Un(e),s={};for(let[e,t]of Object.entries(r))s[`use${qn(e)}`]=t;return Kn({...n,...s,$fetch:i,$store:o},i,t,r,a)}function Yn(e){try{let t=new URL(e);return{origin:t.origin,basePath:t.pathname.replace(/\/$/,``)}}catch{return{origin:Xn()??`http://localhost`,basePath:e.replace(/\/$/,``)}}}function Xn(){try{if(typeof window<`u`&&window.location?.origin)return window.location.origin}catch{}}function Zn(e){let{baseURL:t,fetchFn:n}=e,{origin:r,basePath:i}=Yn(t),a=Jn({baseURL:r,basePath:i,disableDefaultFetchPlugins:!0,fetchOptions:n?{customFetchImpl:n}:void 0});return{async signIn(e){let{data:t,error:n}=await a.signIn.email({email:e.email,password:e.password});if(n)throw Error(n.message??`Auth request failed with status ${n.status}`);let r=t;return{user:r.user,session:r.session}},async signUp(e){let{data:t,error:n}=await a.signUp.email({email:e.email,password:e.password,name:e.name});if(n)throw Error(n.message??`Auth request failed with status ${n.status}`);let r=t;return{user:r.user,session:r.session}},async signOut(){let{error:e}=await a.signOut();if(e)throw Error(e.message??`Auth request failed with status ${e.status}`)},async getSession(){let{data:e,error:t}=await a.getSession();if(t||!e)return null;let n=e;return{user:n.user,session:n.session}},async forgotPassword(e){let t=a.forgetPassword,{error:n}=await t({email:e,redirectTo:`/`});if(n)throw Error(n.message??`Auth request failed with status ${n.status}`)},async resetPassword(e,t){let{error:n}=await a.resetPassword({token:e,newPassword:t});if(n)throw Error(n.message??`Auth request failed with status ${n.status}`)},async updateUser(e){let{data:t,error:n}=await a.updateUser(e);if(n)throw Error(n.message??`Auth request failed with status ${n.status}`);if(!t)throw Error(`Update user returned no data`);let r=t;return r&&typeof r==`object`&&`user`in r?r.user:r}}}var Q=r();function Qn({authUrl:e,client:t,onAuthStateChange:n,enabled:r=!0,previewMode:i,children:a}){let o=(0,N.useMemo)(()=>t??Zn({baseURL:e}),[t,e]),[s,c]=(0,N.useState)(null),[l,u]=(0,N.useState)(null),[d,f]=(0,N.useState)(!0),[p,m]=(0,N.useState)(null),h=i!=null,g=r&&!h?s!==null&&l!==null:!0;(0,N.useEffect)(()=>{if(h){let e=i.simulatedRole??`admin`,t=i.simulatedUserName??`Preview User`,n=i.expiresInSeconds??0;c({id:`preview-user`,email:`preview@preview.local`,name:t,role:e,roles:[e]}),u({token:`preview-token`,expiresAt:n>0?new Date(Date.now()+n*1e3):new Date(Date.now()+365*24*60*60*1e3)}),f(!1);return}if(!r){c({id:`guest`,email:`guest@local`,name:`Guest User`,role:`admin`}),u({token:`guest-token`,expiresAt:new Date(Date.now()+365*24*60*60*1e3)}),f(!1);return}let e=!1;async function t(){try{let t=await o.getSession();if(e)return;t&&(c(t.user),u(t.session))}catch(t){if(e)return;m(t instanceof Error?t:Error(String(t)))}finally{e||f(!1)}}return t(),()=>{e=!0}},[o,r,h,i]),(0,N.useEffect)(()=>{n?.({user:s,session:l,isAuthenticated:g,isLoading:d,error:p})},[s,l,g,d,p,n]);let _=(0,N.useCallback)(async(e,t)=>{f(!0),m(null);try{let n=await o.signIn({email:e,password:t});c(n.user),u(n.session)}catch(e){let t=e instanceof Error?e:Error(String(e));throw m(t),t}finally{f(!1)}},[o]),v=(0,N.useCallback)(async(e,t,n)=>{f(!0),m(null);try{let r=await o.signUp({name:e,email:t,password:n});c(r.user),u(r.session)}catch(e){let t=e instanceof Error?e:Error(String(e));throw m(t),t}finally{f(!1)}},[o]),y=(0,N.useCallback)(async()=>{f(!0);try{await o.signOut(),c(null),u(null),m(null)}catch(e){m(e instanceof Error?e:Error(String(e)))}finally{f(!1)}},[o]),b=(0,N.useCallback)(async e=>{m(null);try{c(await o.updateUser(e))}catch(e){let t=e instanceof Error?e:Error(String(e));throw m(t),t}},[o]),x=(0,N.useCallback)(async e=>{m(null);try{await o.forgotPassword(e)}catch(e){let t=e instanceof Error?e:Error(String(e));throw m(t),t}},[o]),S=(0,N.useCallback)(async(e,t)=>{m(null);try{await o.resetPassword(e,t)}catch(e){let t=e instanceof Error?e:Error(String(e));throw m(t),t}},[o]),C=(0,N.useMemo)(()=>({user:s,session:l,isAuthenticated:g,isLoading:d,error:p,isPreviewMode:h,previewMode:h?i:null,signIn:_,signUp:v,signOut:y,updateUser:b,forgotPassword:x,resetPassword:S}),[s,l,g,d,p,h,i,_,v,y,b,x,S]);return(0,Q.jsx)(ct.Provider,{value:C,children:a})}function $(){return(0,N.useContext)(ct)||{user:null,session:null,isAuthenticated:!1,isLoading:!1,error:null,isPreviewMode:!1,previewMode:null,signIn:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},signUp:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},signOut:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},updateUser:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},forgotPassword:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},resetPassword:async()=>{throw Error(`useAuth must be used within an AuthProvider`)}}}function $n({fallback:e=null,requiredRoles:t,loadingFallback:n,children:r}){let{isAuthenticated:i,isLoading:a,user:o}=$();if(a)return(0,Q.jsx)(Q.Fragment,{children:n??null});if(!i)return(0,Q.jsx)(Q.Fragment,{children:e});if(t&&t.length>0&&o){let n=o.roles??(o.role?[o.role]:[]);if(!t.some(e=>n.includes(e)))return(0,Q.jsx)(Q.Fragment,{children:e})}return(0,Q.jsx)(Q.Fragment,{children:r})}var er=({href:e,className:t,children:n})=>(0,Q.jsx)(`a`,{href:e,className:t,children:n});function tr({onSuccess:e,onError:t,registerUrl:n=`/register`,forgotPasswordUrl:r=`/forgot-password`,title:i=`Sign in to your account`,description:a=`Enter your email and password to continue`,linkComponent:o=er,labels:s={}}){let{signIn:c,isLoading:l}=$(),[u,d]=(0,N.useState)(``),[f,p]=(0,N.useState)(``),[m,h]=(0,N.useState)(null),g={emailLabel:s.emailLabel??`Email`,emailPlaceholder:s.emailPlaceholder??`name@example.com`,passwordLabel:s.passwordLabel??`Password`,passwordPlaceholder:s.passwordPlaceholder??`Enter your password`,forgotPasswordText:s.forgotPasswordText??`Forgot password?`,submitButton:s.submitButton??`Sign In`,submittingButton:s.submittingButton??`Signing in...`,noAccountText:s.noAccountText??`Don't have an account?`,signUpText:s.signUpText??`Sign up`};return(0,Q.jsxs)(`div`,{className:`mx-auto flex w-full flex-col justify-center space-y-6 sm:w-[380px]`,children:[(0,Q.jsxs)(`div`,{className:`flex flex-col space-y-2 text-center`,children:[(0,Q.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:i}),(0,Q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:a})]}),(0,Q.jsxs)(`form`,{onSubmit:async n=>{n.preventDefault(),h(null);try{await c(u,f),e?.()}catch(e){let n=e instanceof Error?e:Error(String(e));h(n.message),t?.(n)}},className:`space-y-4`,children:[m&&(0,Q.jsx)(`div`,{className:`rounded-md bg-destructive/15 p-3 text-sm text-destructive`,role:`alert`,children:m}),(0,Q.jsxs)(`div`,{className:`space-y-2`,children:[(0,Q.jsx)(`label`,{htmlFor:`login-email`,className:`text-sm font-medium leading-none`,children:g.emailLabel}),(0,Q.jsx)(`input`,{id:`login-email`,type:`email`,placeholder:g.emailPlaceholder,value:u,onChange:e=>d(e.target.value),required:!0,autoComplete:`email`,disabled:l,className:`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50`})]}),(0,Q.jsxs)(`div`,{className:`space-y-2`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Q.jsx)(`label`,{htmlFor:`login-password`,className:`text-sm font-medium leading-none`,children:g.passwordLabel}),r&&(0,Q.jsx)(o,{href:r,className:`text-sm text-primary underline-offset-4 hover:underline`,children:g.forgotPasswordText})]}),(0,Q.jsx)(`input`,{id:`login-password`,type:`password`,placeholder:g.passwordPlaceholder,value:f,onChange:e=>p(e.target.value),required:!0,autoComplete:`current-password`,disabled:l,className:`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50`})]}),(0,Q.jsx)(`button`,{type:`submit`,disabled:l,className:`inline-flex h-10 w-full items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground ring-offset-background transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50`,children:l?g.submittingButton:g.submitButton})]}),n&&(0,Q.jsxs)(`p`,{className:`px-8 text-center text-sm text-muted-foreground`,children:[g.noAccountText,` `,(0,Q.jsx)(o,{href:n,className:`text-primary underline-offset-4 hover:underline`,children:g.signUpText})]})]})}var nr=({href:e,className:t,children:n})=>(0,Q.jsx)(`a`,{href:e,className:t,children:n});function rr({onSuccess:e,onError:t,loginUrl:n=`/login`,title:r=`Create an account`,description:i=`Enter your information to get started`,linkComponent:a=nr,labels:o={}}){let{signUp:s,isLoading:c}=$(),[l,u]=(0,N.useState)(``),[d,f]=(0,N.useState)(``),[p,m]=(0,N.useState)(``),[h,g]=(0,N.useState)(``),[_,v]=(0,N.useState)(null),y={nameLabel:o.nameLabel??`Name`,namePlaceholder:o.namePlaceholder??`John Doe`,emailLabel:o.emailLabel??`Email`,emailPlaceholder:o.emailPlaceholder??`name@example.com`,passwordLabel:o.passwordLabel??`Password`,passwordPlaceholder:o.passwordPlaceholder??`Create a password (min. 8 characters)`,confirmPasswordLabel:o.confirmPasswordLabel??`Confirm Password`,confirmPasswordPlaceholder:o.confirmPasswordPlaceholder??`Confirm your password`,passwordMismatchError:o.passwordMismatchError??`Passwords do not match`,passwordTooShortError:o.passwordTooShortError??`Password must be at least 8 characters`,submitButton:o.submitButton??`Create Account`,submittingButton:o.submittingButton??`Creating account...`,hasAccountText:o.hasAccountText??`Already have an account?`,signInText:o.signInText??`Sign in`};return(0,Q.jsxs)(`div`,{className:`mx-auto flex w-full flex-col justify-center space-y-6 sm:w-[380px]`,children:[(0,Q.jsxs)(`div`,{className:`flex flex-col space-y-2 text-center`,children:[(0,Q.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:r}),(0,Q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:i})]}),(0,Q.jsxs)(`form`,{onSubmit:async n=>{if(n.preventDefault(),v(null),p!==h){v(y.passwordMismatchError);return}if(p.length<8){v(y.passwordTooShortError);return}try{await s(l,d,p),e?.()}catch(e){let n=e instanceof Error?e:Error(String(e));v(n.message),t?.(n)}},className:`space-y-4`,children:[_&&(0,Q.jsx)(`div`,{className:`rounded-md bg-destructive/15 p-3 text-sm text-destructive`,role:`alert`,children:_}),(0,Q.jsxs)(`div`,{className:`space-y-2`,children:[(0,Q.jsx)(`label`,{htmlFor:`register-name`,className:`text-sm font-medium leading-none`,children:y.nameLabel}),(0,Q.jsx)(`input`,{id:`register-name`,type:`text`,placeholder:y.namePlaceholder,value:l,onChange:e=>u(e.target.value),required:!0,autoComplete:`name`,disabled:c,className:`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50`})]}),(0,Q.jsxs)(`div`,{className:`space-y-2`,children:[(0,Q.jsx)(`label`,{htmlFor:`register-email`,className:`text-sm font-medium leading-none`,children:y.emailLabel}),(0,Q.jsx)(`input`,{id:`register-email`,type:`email`,placeholder:y.emailPlaceholder,value:d,onChange:e=>f(e.target.value),required:!0,autoComplete:`email`,disabled:c,className:`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50`})]}),(0,Q.jsxs)(`div`,{className:`space-y-2`,children:[(0,Q.jsx)(`label`,{htmlFor:`register-password`,className:`text-sm font-medium leading-none`,children:y.passwordLabel}),(0,Q.jsx)(`input`,{id:`register-password`,type:`password`,placeholder:y.passwordPlaceholder,value:p,onChange:e=>m(e.target.value),required:!0,minLength:8,autoComplete:`new-password`,disabled:c,className:`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50`})]}),(0,Q.jsxs)(`div`,{className:`space-y-2`,children:[(0,Q.jsx)(`label`,{htmlFor:`register-confirm-password`,className:`text-sm font-medium leading-none`,children:y.confirmPasswordLabel}),(0,Q.jsx)(`input`,{id:`register-confirm-password`,type:`password`,placeholder:y.confirmPasswordPlaceholder,value:h,onChange:e=>g(e.target.value),required:!0,minLength:8,autoComplete:`new-password`,disabled:c,className:`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50`})]}),(0,Q.jsx)(`button`,{type:`submit`,disabled:c,className:`inline-flex h-10 w-full items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground ring-offset-background transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50`,children:c?y.submittingButton:y.submitButton})]}),n&&(0,Q.jsxs)(`p`,{className:`px-8 text-center text-sm text-muted-foreground`,children:[y.hasAccountText,` `,(0,Q.jsx)(a,{href:n,className:`text-primary underline-offset-4 hover:underline`,children:y.signInText})]})]})}var ir=({href:e,className:t,children:n})=>(0,Q.jsx)(`a`,{href:e,className:t,children:n});function ar({onSuccess:e,onError:t,loginUrl:n=`/login`,title:r=`Reset your password`,description:i=`Enter your email address and we'll send you a link to reset your password`,linkComponent:a=ir,labels:o={}}){let{forgotPassword:s,isLoading:c}=$(),[l,u]=(0,N.useState)(``),[d,f]=(0,N.useState)(null),[p,m]=(0,N.useState)(!1),h={emailLabel:o.emailLabel??`Email`,emailPlaceholder:o.emailPlaceholder??`name@example.com`,submitButton:o.submitButton??`Send Reset Link`,submittingButton:o.submittingButton??`Sending...`,successTitle:o.successTitle??`Check your email`,successDescription:o.successDescription??`We've sent a password reset link to {{email}}. Please check your inbox.`,backToSignInText:o.backToSignInText??`Back to sign in`,rememberPasswordText:o.rememberPasswordText??`Remember your password?`,signInText:o.signInText??`Sign in`},g=async n=>{n.preventDefault(),f(null);try{await s(l),m(!0),e?.()}catch(e){let n=e instanceof Error?e:Error(String(e));f(n.message),t?.(n)}};if(p){let e=h.successDescription.includes(`{{email}}`)?h.successDescription.replace(`{{email}}`,l):`${h.successDescription} ${l}`;return(0,Q.jsxs)(`div`,{className:`mx-auto flex w-full flex-col justify-center space-y-6 sm:w-[380px]`,children:[(0,Q.jsxs)(`div`,{className:`flex flex-col space-y-2 text-center`,children:[(0,Q.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:h.successTitle}),(0,Q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e})]}),n&&(0,Q.jsx)(`p`,{className:`px-8 text-center text-sm text-muted-foreground`,children:(0,Q.jsx)(a,{href:n,className:`text-primary underline-offset-4 hover:underline`,children:h.backToSignInText})})]})}return(0,Q.jsxs)(`div`,{className:`mx-auto flex w-full flex-col justify-center space-y-6 sm:w-[380px]`,children:[(0,Q.jsxs)(`div`,{className:`flex flex-col space-y-2 text-center`,children:[(0,Q.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:r}),(0,Q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:i})]}),(0,Q.jsxs)(`form`,{onSubmit:g,className:`space-y-4`,children:[d&&(0,Q.jsx)(`div`,{className:`rounded-md bg-destructive/15 p-3 text-sm text-destructive`,role:`alert`,children:d}),(0,Q.jsxs)(`div`,{className:`space-y-2`,children:[(0,Q.jsx)(`label`,{htmlFor:`forgot-email`,className:`text-sm font-medium leading-none`,children:h.emailLabel}),(0,Q.jsx)(`input`,{id:`forgot-email`,type:`email`,placeholder:h.emailPlaceholder,value:l,onChange:e=>u(e.target.value),required:!0,autoComplete:`email`,disabled:c,className:`flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50`})]}),(0,Q.jsx)(`button`,{type:`submit`,disabled:c,className:`inline-flex h-10 w-full items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground ring-offset-background transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50`,children:c?h.submittingButton:h.submitButton})]}),n&&(0,Q.jsxs)(`p`,{className:`px-8 text-center text-sm text-muted-foreground`,children:[h.rememberPasswordText,` `,(0,Q.jsx)(a,{href:n,className:`text-primary underline-offset-4 hover:underline`,children:h.signInText})]})]})}function or(e){return e?e.name?e.name.split(` `).map(e=>e[0]).join(``).toUpperCase().slice(0,2):e.email?.[0]?.toUpperCase()??`?`:`?`}function sr({className:e}){let{isPreviewMode:t,previewMode:n}=$();return t?(0,Q.jsx)(`div`,{role:`status`,className:e,style:{padding:`8px 16px`,backgroundColor:`#fef3c7`,color:`#92400e`,textAlign:`center`,fontSize:`14px`,borderBottom:`1px solid #fcd34d`},children:n?.bannerMessage??`You are in preview mode.`}):null}var cr=(0,N.createContext)(null);cr.displayName=`PermissionContext`;function lr(){let e=(0,N.useContext)(cr);return e?{...e,can:(t,n)=>e.check(t,n).allowed,cannot:(t,n)=>!e.check(t,n).allowed}:{check:()=>({allowed:!0}),checkField:()=>!0,getFieldPermissions:()=>[],getRowFilter:()=>void 0,roles:[],isLoaded:!1,can:()=>!0,cannot:()=>!1}}export{rr as a,$ as c,st as d,rt as f,ar as i,Qn as l,Xe as m,sr as n,tr as o,it as p,or as r,$n as s,lr as t,ot as u};
|