@objectstack/console 9.3.0 → 9.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/AdapterProvider-BNNEwHx0.js +1 -0
- package/dist/assets/{AiPendingActionsPage-Y9r83gqj.js → AiPendingActionsPage-DOSHy962.js} +1 -1
- package/dist/assets/ApiConsolePage-CruwU0Up.js +1 -0
- package/dist/assets/{AppManagementPage-0JEALVYK.js → AppManagementPage-BohnYqad.js} +1 -1
- package/dist/assets/ApprovalsInboxPage-BGmv2uNL.js +1 -0
- package/dist/assets/{AuditLogPage-CXhNSVOU.js → AuditLogPage-KrpMMNiw.js} +1 -1
- package/dist/assets/{ComponentNavView-BI4O_zkC.js → ComponentNavView-JMyYlvFq.js} +1 -1
- package/dist/assets/ConsoleFloatingChatbot-C7wdj16w.js +1 -0
- package/dist/assets/DashboardView-DUqOAEyx.js +1 -0
- package/dist/assets/DashboardWidgetInspector-Dhe9hv9A.js +1 -0
- package/dist/assets/{DeveloperHubPage-D-UigRUA.js → DeveloperHubPage-D4ErhCeD.js} +1 -1
- package/dist/assets/ExpressionProvider-Cj6XEnZF.js +1 -0
- package/dist/assets/FlowRunsPage-CJsr4xgF.js +1 -0
- package/dist/assets/{IntegrationsPage-DsWyxKR6.js → IntegrationsPage-zbcGFqxM.js} +2 -2
- package/dist/assets/InterfaceListPage-BJRTel_h.js +1 -0
- package/dist/assets/ManagedByBadge-DOMbPlbf.js +1 -0
- package/dist/assets/MarketplaceInstalledPage-CSgqJuot.js +1 -0
- package/dist/assets/MarketplacePackagePage-0TU_eJIx.js +4 -0
- package/dist/assets/MarketplacePage-YO75QMEO.js +1 -0
- package/dist/assets/MetadataInspector-CamKLf7x.js +1 -0
- package/dist/assets/MetadataProvider-Bxendsnd.js +1 -0
- package/dist/assets/PageView-z1PfFaQS.js +1 -0
- package/dist/assets/ProfilePage-5QuBSV4z.js +1 -0
- package/dist/assets/PublicFormsPage-CMTz6MfD.js +1 -0
- package/dist/assets/{RecentItemsProvider-DiJIrHwK.js → RecentItemsProvider-gLV-GFpQ.js} +1 -1
- package/dist/assets/RecordDetailView-DOcGflPY.js +1 -0
- package/dist/assets/RecordFormPage-C1M3jdnG.js +1 -0
- package/dist/assets/ReportDefaultInspector-DDBJTAYx.js +1 -0
- package/dist/assets/ReportView-CItKDFSn.js +2 -0
- package/dist/assets/RuntimeDraftBar-QF3pF8K2.js +1 -0
- package/dist/assets/SearchResultsPage-Mdphx8Ca.js +1 -0
- package/dist/assets/{SettingsHub-B4oSx4ed.js → SettingsHub-CtfOIqOJ.js} +1 -1
- package/dist/assets/SettingsView-One2JiPG.js +1 -0
- package/dist/assets/{SystemHubPage-Di6eqozE.js → SystemHubPage-Dzi5_s3T.js} +1 -1
- package/dist/assets/appRoute-D5vwtoc_.js +1 -0
- package/dist/assets/data-adapter-Dl2IvbPC.js +1 -0
- package/dist/assets/{framework-crD8qZlm.js → framework-D7UWfRl4.js} +10 -10
- package/dist/assets/{highlighted-body-OFNGDK62-B3OlR_Nx.js → highlighted-body-OFNGDK62-Dgcl8-h_.js} +1 -1
- package/dist/assets/index-BjfDho4T.js +4 -0
- package/dist/assets/index-CJFqfWpW.css +2 -0
- package/dist/assets/infrastructure-ckitl7Ev.js +3 -0
- package/dist/assets/marketplaceApi-Do90JxGv.js +1 -0
- package/dist/assets/mergeServerFields-Co1NIO7_.js +7 -0
- package/dist/assets/mermaid-GHXKKRXX-BY4z2Mh6.js +1 -0
- package/dist/assets/metadata-admin-B-99o4dC.js +19 -0
- package/dist/assets/plugin-calendar-DSvXqOQV.js +1 -0
- package/dist/assets/plugin-charts-EoSn84Ag.js +7 -0
- package/dist/assets/plugin-chatbot-D6s22V14.js +120 -0
- package/dist/assets/plugin-dashboard-PEMuLOVn.js +5 -0
- package/dist/assets/plugin-form-MXrWd_1Z.js +1 -0
- package/dist/assets/plugin-gantt-CB1bbY8J.js +23 -0
- package/dist/assets/plugin-grid-D9HjQh3d.js +6 -0
- package/dist/assets/plugin-kanban-BxxI6fit.js +1 -0
- package/dist/assets/{plugin-map-C8Jxhxs1.js → plugin-map-B-TiJAz8.js} +1 -1
- package/dist/assets/plugin-markdown-BUIHw2kZ.js +113 -0
- package/dist/assets/plugin-report-jQPIUbaf.js +59 -0
- package/dist/assets/plugin-timeline-BNRp2sKQ.js +1 -0
- package/dist/assets/plugin-view-BeiRMGis.js +1 -0
- package/dist/assets/plugins-views-D0zS0yz2.js +4 -0
- package/dist/assets/resolveActionParams-eRBdMG9b.js +9 -0
- package/dist/assets/skeletons-DNzeXHI1.js +1 -0
- package/dist/assets/{src-Tw2eleSi.js → src-LBsSMdO2.js} +1 -1
- package/dist/assets/{types-BkFEpiv3.js → types-D2P-aXxM.js} +1 -1
- package/dist/assets/ui-components-Clv7N77v.js +42 -0
- package/dist/assets/{ui-layout-KICrO2Oe.js → ui-layout-DYMEUX5t.js} +1 -1
- package/dist/assets/useActionModal-VGsmP3uO.js +1 -0
- package/dist/assets/usePackageL10n-shLsxEAx.js +1 -0
- package/dist/assets/utils-bipVuqQL.js +1 -0
- package/dist/assets/vendor-markdown-BXE1apAC.js +46 -0
- package/dist/index.html +4 -4
- package/package.json +1 -1
- package/dist/assets/ApiConsolePage-Dwbms0Zh.js +0 -1
- package/dist/assets/ApprovalsInboxPage-B-drSsxQ.js +0 -1
- package/dist/assets/ConsoleFloatingChatbot-CiODZIcp.js +0 -1
- package/dist/assets/FlowRunsPage-_UeeNdBc.js +0 -1
- package/dist/assets/ProfilePage-T27zVrMO.js +0 -1
- package/dist/assets/PublicFormsPage-Pd453sW6.js +0 -1
- package/dist/assets/SettingsView-CkQEI5DW.js +0 -1
- package/dist/assets/assistantBus-B-xBT6j1.js +0 -1
- package/dist/assets/data-adapter-3AJO7A2o.js +0 -1
- package/dist/assets/index-Cf7NsvAk.css +0 -2
- package/dist/assets/index-CiI7zDDo.js +0 -32
- package/dist/assets/infrastructure-CxityHZF.js +0 -3
- package/dist/assets/mergeServerFields-DUkbynPg.js +0 -7
- package/dist/assets/mermaid-GHXKKRXX-CBocchJ2.js +0 -1
- package/dist/assets/plugin-calendar-ed7RoEFF.js +0 -1
- package/dist/assets/plugin-charts-QabQJ_NJ.js +0 -7
- package/dist/assets/plugin-chatbot-Cy3tiXkg.js +0 -120
- package/dist/assets/plugin-dashboard-PA0xf59v.js +0 -5
- package/dist/assets/plugin-form-BABEMaum.js +0 -1
- package/dist/assets/plugin-gantt-BNjfLkTR.js +0 -1
- package/dist/assets/plugin-grid-BxyuFeJP.js +0 -6
- package/dist/assets/plugin-kanban-D4yCkUn_.js +0 -1
- package/dist/assets/plugin-markdown-CR5TpghH.js +0 -7
- package/dist/assets/plugin-report-rz8HUIsi.js +0 -59
- package/dist/assets/plugin-timeline-DQHQwtdw.js +0 -1
- package/dist/assets/plugin-view-BykLknWa.js +0 -1
- package/dist/assets/plugins-views-CBO5qxO-.js +0 -4
- package/dist/assets/ui-components-BrY5joKQ.js +0 -42
- package/dist/assets/vendor-markdown-C9mPywRm.js +0 -38
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{_ as t,t as n}from"./vendor-react-DR370ovB.js";var r=e(t(),1),i=(0,r.createContext)(null);i.displayName=`AuthContext`;var a=`1.6.15`,o=Symbol.for(`better-auth:broadcast-channel`),s=()=>Math.floor(Date.now()/1e3),c=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:s()}))}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 l(e=`better-auth.message`){return globalThis[o]||(globalThis[o]=new c(e)),globalThis[o]}var u=Symbol.for(`better-auth:focus-manager`),d=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 f(){return globalThis[u]||(globalThis[u]=new d),globalThis[u]}var p=Symbol.for(`better-auth:online-manager`),m=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 h(){return globalThis[p]||(globalThis[p]=new m),globalThis[p]}var g={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*:/},_=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/,v={true:!0,false:!1,null:null,undefined:void 0,nan:NaN,infinity:1/0,"-infinity":-1/0},y=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,7}))?(?:Z|([+-])(\d{2}):(\d{2}))$/;function b(e){return e instanceof Date&&!isNaN(e.getTime())}function x(e){let t=y.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 b(f)?f:null}function S(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(),s=o.toLowerCase();if(s.length<=9&&s in v)return v[s];if(!_.test(o)){if(n)throw SyntaxError(`[better-json] Invalid JSON`);return e}if(Object.entries(g).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=x(t);if(e)return e}return i?i(e,t):t})}catch(t){if(n)throw t;return e}}function C(e,t={strict:!0}){return S(e,t)}var w=[],T=0,E=4,ee=globalThis.nanostoresGlobal||={epoch:0},D=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=T+E;t<w.length;)w[t]===e?w.splice(t,E):t+=E;let r=t.indexOf(e);~r&&(t.splice(r,1),--n.lc||n.off())}},notify(e,r){ee.epoch++;let i=!w.length;for(let i of t)w.push(i,n.value,e,r);if(i){for(T=0;T<w.length;T+=E)w[T](w[T+1],w[T+2],w[T+3]);w.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},te=5,O=6,k=10,ne=(e,t,n,r)=>(e.events=e.events||{},e.events[n+k]||(e.events[n+k]=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+k](),delete e.events[n+k])}),re=1e3,A=(e,t)=>ne(e,n=>{let r=t(n);r&&e.events[O].push(r)},te,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[O]=[],e.off=()=>{r(),setTimeout(()=>{if(e.active&&!e.lc){e.active=!1;for(let t of e.events[O])t();e.events[O]=[]}},re)},()=>{e.listen=n,e.off=r}}),ie=()=>typeof window>`u`,j=(e,t,n,r)=>{let i=D({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()=>{ie()||(o?await a():A(i,()=>{let e=setTimeout(async()=>{o||(o=!0,await a())},0);return()=>{i.off(),t.off(),clearTimeout(e)}}))});return i},M=()=>Math.floor(Date.now()/1e3);function N(e){return typeof e==`object`&&e&&`data`in e&&`error`in e?e:{data:e,error:null}}var P=5;function ae(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},u=()=>s||h().isOnline,d=e=>{if(!u())return;if(e?.event===`storage`){c.lastSync=M(),n.set(!n.get());return}let i=t.get(),a=()=>{c.lastSessionRequest=M(),r(`/get-session`).then(async e=>{let{data:a,error:o}=N(e);if(a?.needsRefresh)try{let e=await r(`/get-session`,{method:`POST`});({data:a,error:o}=N(e))}catch{}let s=a?.session&&a?.user?a:null;t.set({...i,data:s,error:o}),c.lastSync=M(),n.set(!n.get())}).catch(()=>{})};if(e?.event===`poll`){a();return}if(e?.event===`visibilitychange`){if(M()-c.lastSessionRequest<P)return;c.lastSessionRequest=M()}if(e?.event===`visibilitychange`){a();return}(i?.data===null||i?.data===void 0)&&(c.lastSync=M(),n.set(!n.get()))},p=e=>{l().post({event:`session`,data:{trigger:e},clientId:Math.random().toString(36).substring(7)})},m=()=>{a&&a>0&&(c.pollInterval=setInterval(()=>{t.get()?.data&&d({event:`poll`})},a*1e3))},g=()=>{c.unsubscribeBroadcast=l().subscribe(()=>{d({event:`storage`})})},_=()=>{o&&(c.unsubscribeFocus=f().subscribe(()=>{d({event:`visibilitychange`})}))},v=()=>{c.unsubscribeOnline=h().subscribe(e=>{e&&d({event:`visibilitychange`})})};return{init:()=>{m(),g(),_(),v(),l().setup(),f().setup(),h().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:d,broadcastSessionUpdate:p}}var F=Object.create(null),I=e=>({}),L=new Proxy(F,{get(e,t){return I()[t]??F[t]},has(e,t){return t in I()||t in F},set(e,t,n){let r=I(!0);return r[t]=n,!0},deleteProperty(e,t){if(!t)return!1;let n=I(!0);return delete n[t],!0},ownKeys(){let e=I(!0);return Object.keys(e)}});function R(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 R(`BETTER_AUTH_SECRET`)},get AUTH_SECRET(){return R(`AUTH_SECRET`)},get BETTER_AUTH_TELEMETRY(){return R(`BETTER_AUTH_TELEMETRY`)},get BETTER_AUTH_TELEMETRY_ID(){return R(`BETTER_AUTH_TELEMETRY_ID`)},get NODE_ENV(){return R(`NODE_ENV`,`development`)},get PACKAGE_VERSION(){return R(`PACKAGE_VERSION`,`0.0.0`)},get BETTER_AUTH_TELEMETRY_ENDPOINT(){return R(`BETTER_AUTH_TELEMETRY_ENDPOINT`,``)}});function oe(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,{code:e,message:t,toString:()=>e}]))}function se(){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 ce(e){let t=e.split(`
|
|
2
|
-
at `);return t.length<=1?e:(t.splice(1,1),t.join(`
|
|
3
|
-
at `))}function le(e,t){class n extends e{#e;constructor(...e){if(se()){let t=Error.stackTraceLimit;Error.stackTraceLimit=0,super(...e),Error.stackTraceLimit=t}else super(...e);let t=Error().stack;t&&(this.#e=ce(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 ue={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};le(class extends Error{constructor(e=`INTERNAL_SERVER_ERROR`,t=void 0,n={},r=typeof e==`number`?e:ue[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 z=class extends Error{constructor(e,t){super(e,t),this.name=`BetterAuthError`,this.message=e,this.stack=``}},de=47;function B(e){let t=e.length;for(;t>0&&e.charCodeAt(t-1)===de;)t--;return t===e.length?e:e.slice(0,t)}function fe(e){try{return(B(new URL(e).pathname)||`/`)!==`/`}catch{throw new z(`Invalid base URL: ${e}. Please provide a valid base URL.`)}}function pe(e){try{let t=new URL(e);if(t.protocol!==`http:`&&t.protocol!==`https:`)throw new z(`Invalid base URL: ${e}. URL must include 'http://' or 'https://'`)}catch(t){throw t instanceof z?t:new z(`Invalid base URL: ${e}. Please provide a valid base URL.`,{cause:t})}}function V(e,t=`/api/auth`){if(pe(e),fe(e))return e;let n=B(e);return!t||t===`/`?n:(t=t.startsWith(`/`)?t:`/${t}`,`${n}${t}`)}function H(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 me(e,t,n,r,i){if(e)return V(e,t);if(r!==!1){let e=L.BETTER_AUTH_URL||L.NEXT_PUBLIC_BETTER_AUTH_URL||L.PUBLIC_BETTER_AUTH_URL||L.NUXT_PUBLIC_BETTER_AUTH_URL||L.NUXT_PUBLIC_AUTH_URL||(L.BASE_URL===`/`?void 0:L.BASE_URL);if(e)return V(e,t)}let a=n?.headers.get(`x-forwarded-host`),o=n?.headers.get(`x-forwarded-proto`);if(a&&o&&i&&H(o,`proto`)&&H(a,`host`))try{return V(`${o}://${a}`,t)}catch{}if(n){let e=he(n.url);if(!e)throw new z(`Could not get origin from request. Please provide a valid base URL.`);return V(e,t)}if(typeof window<`u`&&window.location)return V(window.location.origin,t)}function he(e){try{let t=new URL(e);return t.origin===`null`?null:t.origin}catch{return null}}var ge=[`javascript:`,`data:`,`vbscript:`];function _e(e){let t;try{t=new URL(e)}catch{return!0}return!ge.includes(t.protocol)}var ve={id:`redirect`,name:`Redirect`,hooks:{onSuccess(e){if(e.data?.url&&e.data?.redirect&&_e(e.data.url)&&typeof window<`u`&&window.location&&window.location)try{window.location.href=e.data.url}catch{}}}};function ye(e,t){let n=D(!1),r=j(n,`/get-session`,e,{method:`GET`}),i=()=>{};return A(r,()=>{let a=ae({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 be(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 xe(e,t,n=`.`,r){if(!be(t))return xe(e,{},n,r);let i={...t};for(let t of Object.keys(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]]:be(a)&&be(i[t])?i[t]=xe(a,i[t],(n?`${n}.`:``)+t.toString(),r):i[t]=a))}return i}function Se(e){return(...t)=>t.reduce((t,n)=>xe(t,n,``,e),{})}var Ce=Se(),we=Object.defineProperty,Te=Object.defineProperties,Ee=Object.getOwnPropertyDescriptors,De=Object.getOwnPropertySymbols,Oe=Object.prototype.hasOwnProperty,ke=Object.prototype.propertyIsEnumerable,Ae=(e,t,n)=>t in e?we(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,U=(e,t)=>{for(var n in t||={})Oe.call(t,n)&&Ae(e,n,t[n]);if(De)for(var n of De(t))ke.call(t,n)&&Ae(e,n,t[n]);return e},W=(e,t)=>Te(e,Ee(t)),je=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)}},Me=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}},Ne=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}},Pe=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 Fe(e){if(typeof e==`number`)return new Ne({type:`linear`,attempts:e,delay:1e3});switch(e.type){case`linear`:return new Ne(e);case`exponential`:return new Pe(e);default:throw Error(`Invalid retry strategy`)}}var Ie=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},Le=/^application\/(?:[\w!#$%&*.^`~-]*\+)?json(;.+)?$/i;function Re(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 Le.test(r)?`json`:n.has(r)||r.startsWith(`text/`)?`text`:`blob`}function ze(e){try{return JSON.parse(e),!0}catch{return!1}}function Be(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 Ve(e){try{return JSON.parse(e)}catch{return e}}function He(e){return typeof e==`function`}function Ue(e){if(e?.customFetchImpl)return e.customFetchImpl;if(typeof globalThis<`u`&&He(globalThis.fetch))return globalThis.fetch;if(typeof window<`u`&&He(window.fetch))return window.fetch;throw Error(`No fetch implementation found`)}async function We(e){let t=new Headers(e?.headers),n=await Ie(e);for(let[e,r]of Object.entries(n||{}))t.set(e,r);if(!t.has(`content-type`)){let n=Ge(e?.body);n&&t.set(`content-type`,n)}return t}function Ge(e){return Be(e)?`application/json`:null}function Ke(e){if(!e?.body)return null;let t=new Headers(e?.headers);if(Be(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`&&Be(e.body)?new URLSearchParams(e.body).toString():e.body}function qe(e,t){if(t?.method)return t.method.toUpperCase();if(e.startsWith(`@`)){let n=e.split(`@`)[1]?.split(`/`)[0];return Xe.includes(n)?n.toUpperCase():t?.body?`POST`:`GET`}return t?.body?`POST`:`GET`}function Je(e,t){let n;return!e?.signal&&e?.timeout&&(n=setTimeout(()=>t?.abort(),e?.timeout)),{abortTimeout:n,clearTimeout:()=>{n&&clearTimeout(n)}}}var Ye=class e extends Error{constructor(t,n){super(n||JSON.stringify(t,null,2)),this.issues=t,Object.setPrototypeOf(this,e.prototype)}};async function G(e,t){let n=await e[`~standard`].validate(t);if(n.issues)throw new Ye(n.issues);return n.value}var Xe=[`get`,`post`,`put`,`patch`,`delete`],Ze=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=W(U({},n),{method:i.method,output:i.output});return n?.disableValidation||(e=W(U({},e),{body:i.input?await G(i.input,n?.body):n?.body,params:i.params?await G(i.params,n?.params):n?.params,query:i.query?await G(i.query,n?.query):n?.query})),{url:t,options:e}}}return{url:t,options:n}}}),Qe=e=>{async function t(t,n){let r=W(U(U({},e),n),{plugins:[...e?.plugins||[],Ze(e||{}),...n?.plugins||[]]});if(e?.catchAllError)try{return await et(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 et(t,r)}return t};function $e(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];Xe.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 et=async(e,t)=>{let{hooks:n,url:r,options:i}=await Me(e,t),a=Ue(i),o=new AbortController,s=i.signal??o.signal,c=$e(r,i),l=Ke(i),u=await We(i),d=qe(r,i),f=W(U({},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}=Je(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(W(U({},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=Re(m),r={data:null,response:m,request:f};if(e===`json`||e===`text`){let e=await m.text();r.data=await(f.jsonParser??Ve)(e)}else r.data=await m[e]();f?.output&&f.output&&!f.disableValidation&&(r.data=await G(f.output,r.data));for(let e of n.onSuccess)e&&await e(W(U({},r),{response:t?.hookOptions?.cloneResponse?m.clone():m}));return t?.throw?r.data:{data:r.data,error:null}}let g=t?.jsonParser??Ve,_=await m.text(),v=ze(_),y=v?await g(_):null,b={response:m,responseText:_,request:f,error:W(U({},y),{status:m.status,statusText:m.statusText})};for(let e of n.onError)e&&await e(W(U({},b),{response:t?.hookOptions?.cloneResponse?m.clone():m}));if(t?.retry){let r=Fe(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 et(e,W(U({},t),{retryAttempt:i+1}))}}if(t?.throw)throw new je(m.status,m.statusText,v?y:_);return{data:null,error:W(U({},y),{status:m.status,statusText:m.statusText})}},tt=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{}}},nt=(e,t)=>{let n=`credentials`in Request.prototype,r=me(e?.baseURL,e?.basePath,void 0,t)??tt(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=Qe({baseURL:r,...n?{credentials:`include`}:{},method:`GET`,jsonParser(e){return e?C(e,{strict:!1}):null},customFetchImpl:fetch,...u,plugins:[a,...u.plugins||[],...e?.disableDefaultFetchPlugins?[]:[ve],...i]}),{$sessionSignal:f,session:p,broadcastSessionUpdate:m}=ye(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===`/revoke-other-sessions`||e===`/change-email`||e===`/change-password`},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=Ce(t.getActions?.(d,b,e)??{},g));return{get baseURL(){return r},pluginsActions:g,pluginsAtoms:_,pluginPathMethods:v,atomListeners:y,$fetch:d,$store:b}};function rt(e){return typeof e==`object`&&!!e&&`get`in e&&typeof e.get==`function`&&`lc`in e&&typeof e.lc==`number`}function it(e){return e.charAt(0).toUpperCase()+e.slice(1)}var at=/[\p{Ll}\d]+|\p{Lu}+(?!\p{Ll})|\p{Lu}[\p{Ll}\d]+|\p{Lo}+/gu,ot=/['\u2019]/g;function st(e){return e.replace(ot,``).match(at)??[]}function ct(e){return st(e).map(e=>e.toLowerCase()).join(`-`)}function lt(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 ut(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`||rt(i)?i:a(r)},apply:async(e,a,s)=>{let c=`/`+o.map(ct).join(`/`),l=s[0]||{},u=s[1]||{},{query:d,fetchOptions:f,...p}=l,m={...u,...f},h=lt(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 dt(e){let{pluginPathMethods:t,pluginsActions:n,pluginsAtoms:r,$fetch:i,atomListeners:a,$store:o}=nt(e),s={};for(let[e,t]of Object.entries(r))s[`use${it(e)}`]=t;return ut({...n,...s,$fetch:i,$store:o},i,t,r,a)}function ft(e){return{authorize(t,n=`AND`){let r=!1;for(let[i,a]of Object.entries(t)){let t=e[i];if(!t){if(n===`AND`)return{success:!1,error:`You are not allowed to access resource: ${i}`};r=!1;continue}if(Array.isArray(a))r=a.length>0&&a.every(e=>t.includes(e));else if(typeof a==`object`){let e=a;r=!Array.isArray(e.actions)||e.actions.length===0?!1:e.connector===`OR`?e.actions.some(e=>t.includes(e)):e.actions.every(e=>t.includes(e))}else throw new z(`Invalid access control request`);if(r&&n===`OR`)return{success:r};if(!r&&n===`AND`)return{success:!1,error:`unauthorized to access resource "${i}"`}}return r?{success:r}:{success:!1,error:`Not authorized`}},statements:e}}function pt(e){return{newRole(e){return ft(e)},statements:e}}var mt=oe({YOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_ORGANIZATION:`You are not allowed to create a new organization`,YOU_HAVE_REACHED_THE_MAXIMUM_NUMBER_OF_ORGANIZATIONS:`You have reached the maximum number of organizations`,ORGANIZATION_ALREADY_EXISTS:`Organization already exists`,ORGANIZATION_SLUG_ALREADY_TAKEN:`Organization slug already taken`,ORGANIZATION_NOT_FOUND:`Organization not found`,USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION:`User is not a member of the organization`,YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_ORGANIZATION:`You are not allowed to update this organization`,YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_ORGANIZATION:`You are not allowed to delete this organization`,NO_ACTIVE_ORGANIZATION:`No active organization`,USER_IS_ALREADY_A_MEMBER_OF_THIS_ORGANIZATION:`User is already a member of this organization`,MEMBER_NOT_FOUND:`Member not found`,ROLE_NOT_FOUND:`Role not found`,YOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_TEAM:`You are not allowed to create a new team`,TEAM_ALREADY_EXISTS:`Team already exists`,TEAM_NOT_FOUND:`Team not found`,YOU_CANNOT_LEAVE_THE_ORGANIZATION_AS_THE_ONLY_OWNER:`You cannot leave the organization as the only owner`,YOU_CANNOT_LEAVE_THE_ORGANIZATION_WITHOUT_AN_OWNER:`You cannot leave the organization without an owner`,YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_MEMBER:`You are not allowed to delete this member`,YOU_ARE_NOT_ALLOWED_TO_INVITE_USERS_TO_THIS_ORGANIZATION:`You are not allowed to invite users to this organization`,USER_IS_ALREADY_INVITED_TO_THIS_ORGANIZATION:`User is already invited to this organization`,INVITATION_NOT_FOUND:`Invitation not found`,YOU_ARE_NOT_THE_RECIPIENT_OF_THE_INVITATION:`You are not the recipient of the invitation`,EMAIL_VERIFICATION_REQUIRED_BEFORE_ACCEPTING_OR_REJECTING_INVITATION:`Email verification required before accepting or rejecting invitation`,EMAIL_VERIFICATION_REQUIRED_FOR_INVITATION:`Email verification required to view or list invitations for the session email`,YOU_ARE_NOT_ALLOWED_TO_CANCEL_THIS_INVITATION:`You are not allowed to cancel this invitation`,INVITER_IS_NO_LONGER_A_MEMBER_OF_THE_ORGANIZATION:`Inviter is no longer a member of the organization`,YOU_ARE_NOT_ALLOWED_TO_INVITE_USER_WITH_THIS_ROLE:`You are not allowed to invite a user with this role`,FAILED_TO_RETRIEVE_INVITATION:`Failed to retrieve invitation`,YOU_HAVE_REACHED_THE_MAXIMUM_NUMBER_OF_TEAMS:`You have reached the maximum number of teams`,UNABLE_TO_REMOVE_LAST_TEAM:`Unable to remove last team`,YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_MEMBER:`You are not allowed to update this member`,ORGANIZATION_MEMBERSHIP_LIMIT_REACHED:`Organization membership limit reached`,YOU_ARE_NOT_ALLOWED_TO_CREATE_TEAMS_IN_THIS_ORGANIZATION:`You are not allowed to create teams in this organization`,YOU_ARE_NOT_ALLOWED_TO_DELETE_TEAMS_IN_THIS_ORGANIZATION:`You are not allowed to delete teams in this organization`,YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_TEAM:`You are not allowed to update this team`,YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_TEAM:`You are not allowed to delete this team`,INVITATION_LIMIT_REACHED:`Invitation limit reached`,TEAM_MEMBER_LIMIT_REACHED:`Team member limit reached`,USER_IS_NOT_A_MEMBER_OF_THE_TEAM:`User is not a member of the team`,YOU_CAN_NOT_ACCESS_THE_MEMBERS_OF_THIS_TEAM:`You are not allowed to list the members of this team`,YOU_DO_NOT_HAVE_AN_ACTIVE_TEAM:`You do not have an active team`,YOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_TEAM_MEMBER:`You are not allowed to create a new member`,YOU_ARE_NOT_ALLOWED_TO_REMOVE_A_TEAM_MEMBER:`You are not allowed to remove a team member`,YOU_ARE_NOT_ALLOWED_TO_ACCESS_THIS_ORGANIZATION:`You are not allowed to access this organization as an owner`,YOU_ARE_NOT_A_MEMBER_OF_THIS_ORGANIZATION:`You are not a member of this organization`,MISSING_AC_INSTANCE:`Dynamic Access Control requires a pre-defined ac instance on the server auth plugin. Read server logs for more information`,YOU_MUST_BE_IN_AN_ORGANIZATION_TO_CREATE_A_ROLE:`You must be in an organization to create a role`,YOU_ARE_NOT_ALLOWED_TO_CREATE_A_ROLE:`You are not allowed to create a role`,YOU_ARE_NOT_ALLOWED_TO_UPDATE_A_ROLE:`You are not allowed to update a role`,YOU_ARE_NOT_ALLOWED_TO_DELETE_A_ROLE:`You are not allowed to delete a role`,YOU_ARE_NOT_ALLOWED_TO_READ_A_ROLE:`You are not allowed to read a role`,YOU_ARE_NOT_ALLOWED_TO_LIST_A_ROLE:`You are not allowed to list a role`,YOU_ARE_NOT_ALLOWED_TO_GET_A_ROLE:`You are not allowed to get a role`,TOO_MANY_ROLES:`This organization has too many roles`,INVALID_RESOURCE:`The provided permission includes an invalid resource`,ROLE_NAME_IS_ALREADY_TAKEN:`That role name is already taken`,CANNOT_DELETE_A_PRE_DEFINED_ROLE:`Cannot delete a pre-defined role`,ROLE_IS_ASSIGNED_TO_MEMBERS:`Cannot delete a role that is assigned to members. Please reassign the members to a different role first`,INVALID_TEAM_ID:`Team id contains a reserved character`}),ht=pt({organization:[`update`,`delete`],member:[`create`,`update`,`delete`],invitation:[`create`,`cancel`],team:[`create`,`update`,`delete`],ac:[`create`,`read`,`update`,`delete`]}),gt=ht.newRole({organization:[`update`],invitation:[`create`,`cancel`],member:[`create`,`update`,`delete`],team:[`create`,`update`,`delete`],ac:[`create`,`read`,`update`,`delete`]}),_t=ht.newRole({organization:[`update`,`delete`],member:[`create`,`update`,`delete`],invitation:[`create`,`cancel`],team:[`create`,`update`,`delete`],ac:[`create`,`read`,`update`,`delete`]}),vt=ht.newRole({organization:[],member:[],invitation:[],team:[],ac:[`read`]}),yt={admin:gt,owner:_t,member:vt},bt=(e,t)=>{if(!e.permissions)return!1;let n=e.role.split(`,`),r=e.options.creatorRole||`owner`,i=n.includes(r),a=e.allowCreatorAllPermissions||!1;if(i&&a)return!0;for(let r of n)if(t[r]?.authorize(e.permissions)?.success)return!0;return!1},xt=e=>bt(e,e.options.roles||yt),St=e=>{let t=D(!1),n=D(!1),r=D(!1),i=D(!1),o={admin:gt,member:vt,owner:_t,...e?.roles};return{id:`organization`,version:a,$InferServerPlugin:{},getActions:(t,n,r)=>({$Infer:{ActiveOrganization:{},Organization:{},Invitation:{},Member:{},Team:{}},organization:{checkRolePermission:t=>xt({role:t.role,options:{ac:e?.ac,roles:o},permissions:t.permissions})}}),getAtoms:e=>{let a=j(t,`/organization/list`,e,{method:`GET`});return{$listOrg:t,$activeOrgSignal:n,$activeMemberSignal:r,$activeMemberRoleSignal:i,activeOrganization:j([n],`/organization/get-full-organization`,e,()=>({method:`GET`})),listOrganizations:a,activeMember:j([n,r],`/organization/get-active-member`,e,{method:`GET`}),activeMemberRole:j([n,i],`/organization/get-active-member-role`,e,{method:`GET`})}},pathMethods:{"/organization/get-full-organization":`GET`,"/organization/list-user-teams":`GET`},atomListeners:[{matcher(e){return e===`/organization/create`||e===`/organization/delete`||e===`/organization/update`},signal:`$listOrg`},{matcher(e){return e===`/sign-out`||e.startsWith(`/organization`)},signal:`$activeOrgSignal`},{matcher(e){return e.startsWith(`/organization/set-active`)||e===`/organization/create`||e===`/organization/delete`||e===`/organization/remove-member`||e===`/organization/leave`||e===`/organization/accept-invitation`},signal:`$sessionSignal`},{matcher(e){return e.includes(`/organization/update-member-role`)||e.startsWith(`/organization/set-active`)},signal:`$activeMemberSignal`},{matcher(e){return e.includes(`/organization/update-member-role`)||e.startsWith(`/organization/set-active`)},signal:`$activeMemberRoleSignal`}],$ERROR_CODES:mt}},Ct=`auth-session-token`,K={_memoryToken:null,get(){try{if(typeof localStorage<`u`)return localStorage.getItem(Ct)}catch{}return this._memoryToken},set(e){this._memoryToken=e;try{typeof localStorage<`u`&&localStorage.setItem(Ct,e)}catch{}},clear(){this._memoryToken=null;try{typeof localStorage<`u`&&localStorage.removeItem(Ct)}catch{}}};function wt(e){let t=Error(e.message??`Auth request failed with status ${e.status}`);return e.code&&(t.code=e.code),t}function Tt(e){try{let t=new URL(e);return{origin:t.origin,basePath:t.pathname.replace(/\/$/,``)}}catch{return{origin:Et()??`http://localhost`,basePath:e.replace(/\/$/,``)}}}function Et(){try{if(typeof window<`u`&&window.location?.origin)return window.location.origin}catch{}}function Dt(){try{if(typeof document<`u`){let e=document.querySelector(`base`)?.getAttribute(`href`);if(e)return`${new URL(e,Et()??`http://localhost`).pathname.replace(/\/$/,``)}/reset-password`}}catch{}return`/reset-password`}function Ot(e){let t=e||globalThis.fetch.bind(globalThis);return async(e,n)=>{let r=new Headers(n?.headers),i=K.get();if(i){let t=typeof e==`string`?e:e instanceof URL?e.href:e.url;/\/api\//i.test(t)&&r.set(`Authorization`,`Bearer ${i}`)}let a=await t(e,{...n,headers:r}),o=a.headers.get(`set-auth-token`);return o&&K.set(o),a}}function kt(e){let{baseURL:t,fetchFn:n}=e,{origin:r,basePath:i}=Tt(t),a=Ot(n),o=dt({baseURL:r,basePath:i,disableDefaultFetchPlugins:!0,fetchOptions:{customFetchImpl:a},plugins:[St()]});return{async signIn(e){let{data:t,error:n}=await o.signIn.email({email:e.email,password:e.password});if(n)throw wt(n);let r=t;return r.session?.token&&K.set(r.session.token),{user:r.user,session:r.session}},async signUp(e){let{data:t,error:n}=await o.signUp.email({email:e.email,password:e.password,name:e.name});if(n)throw wt(n);let r=t,i=r.token??r.session?.token??null;i&&K.set(i);let a=r.session??null;return!a&&i&&(a={token:i}),{user:r.user,session:a,requiresVerification:i===null}},async sendVerificationEmail(e,t){let{error:n}=await o.sendVerificationEmail({email:e,callbackURL:t});if(n)throw Error(n.message??`Auth request failed with status ${n.status}`)},async signOut(){let{error:e}=await o.signOut();if(K.clear(),e)throw Error(e.message??`Auth request failed with status ${e.status}`)},async getSession(){let{data:e,error:t}=await o.getSession();if(t||!e)return null;let n=e;return n.session?.token&&K.set(n.session.token),{user:n.user,session:n.session}},async forgotPassword(e){let t=o,n=t.requestPasswordReset??t.forgetPassword;if(typeof n!=`function`)throw Error(`password reset is not available on this auth backend`);let{error:r}=await n({email:e,redirectTo:Dt()});if(r)throw Error(r.message??`Auth request failed with status ${r.status}`)},async resetPassword(e,t){let{error:n}=await o.resetPassword({token:e,newPassword:t});if(n)throw Error(n.message??`Auth request failed with status ${n.status}`)},async changePassword(e,t,n){let r=o.changePassword;if(typeof r!=`function`)throw Error(`change-password is not available on this auth backend`);let{error:i}=await r({currentPassword:e,newPassword:t,...n?.revokeOtherSessions==null?{}:{revokeOtherSessions:n.revokeOtherSessions}});if(i)throw Error(i.message??`Auth request failed with status ${i.status}`)},async setInitialPassword(e){let t=await a(`${r}${i}/set-initial-password`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({newPassword:e})});if(!t.ok){let e=`Set password failed with status ${t.status}`;try{let n=await t.json();n?.error?.message&&(e=n.error.message)}catch{}throw Error(e)}},async hasLocalPassword(){let e=`${r}${i}/list-accounts`;try{let t=await a(e,{method:`GET`,headers:{"Content-Type":`application/json`}});if(!t.ok)return!1;let n=await t.json();return(Array.isArray(n)?n:n&&`data`in n&&Array.isArray(n.data)?n.data:[]).some(e=>e?.providerId===`credential`)}catch{return!1}},async updateUser(e){let{data:t,error:n}=await o.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},async getConfig(){let e=await a(`${r}${i}/config`,{method:`GET`,headers:{"Content-Type":`application/json`}});if(!e.ok)throw Error(`Failed to load auth config (status ${e.status})`);let t=await e.json();return t&&typeof t==`object`&&`data`in t&&t.data?t.data:t},async signInWithProvider(e,t={}){let{type:n=`social`,callbackURL:r,errorCallbackURL:i}=t;if(n===`oidc`){let t=o.signIn.oauth2;if(!t)throw Error(`OIDC sign-in is not supported by this auth client build`);let{data:n,error:a}=await t({providerId:e,callbackURL:r,errorCallbackURL:i});if(a)throw Error(a.message??`Auth request failed with status ${a.status}`);n?.url&&typeof window<`u`&&(window.location.href=n.url);return}let{data:a,error:s}=await o.signIn.social({provider:e,callbackURL:r,errorCallbackURL:i});if(s)throw Error(s.message??`Auth request failed with status ${s.status}`);let c=a?.url;c&&typeof window<`u`&&(window.location.href=c)},async listOrganizations(){let{data:e,error:t}=await o.organization.list();if(t)throw Error(t.message??`Failed to list organizations`);return e??[]},async createOrganization(e){let{data:t,error:n}=await o.organization.create({name:e.name,slug:e.slug,logo:e.logo});if(n)throw Error(n.message??`Failed to create organization`);return t},async setActiveOrganization(e){let{data:t,error:n}=await o.organization.setActive({organizationId:e});if(n)throw Error(n.message??`Failed to set active organization`);return t??null},async getActiveOrganization(){let{data:e,error:t}=await o.organization.getFullOrganization();return t||!e?null:e},async getActiveMember(){let e=o.organization?.getActiveMember;if(typeof e!=`function`)return null;let{data:t,error:n}=await e();return n||!t?null:t},async getMembers(e){let{data:t,error:n}=await o.organization.listMembers({query:{organizationId:e}});if(n)throw Error(n.message??`Failed to get members`);let r=t;return Array.isArray(r)?r:r?.members??[]},async inviteMember(e){let{data:t,error:n}=await o.organization.inviteMember({organizationId:e.organizationId,email:e.email,role:e.role});if(n)throw Error(n.message??`Failed to invite member`);return t},async removeMember(e){let{error:t}=await o.organization.removeMember({organizationId:e.organizationId,memberIdOrUserId:e.memberIdOrUserId});if(t)throw Error(t.message??`Failed to remove member`)},async updateMemberRole(e){let{error:t}=await o.organization.updateMemberRole({organizationId:e.organizationId,memberId:e.memberId,role:e.role});if(t)throw Error(t.message??`Failed to update member role`)},async updateOrganization(e,t){let{data:n,error:r}=await o.organization.update({organizationId:e,data:t});if(r)throw Error(r.message??`Failed to update organization`);return n},async deleteOrganization(e){let{error:t}=await o.organization.delete({organizationId:e});if(t)throw Error(t.message??`Failed to delete organization`)},async leaveOrganization(e){let{error:t}=await o.organization.leave({organizationId:e});if(t)throw Error(t.message??`Failed to leave organization`)},async listInvitations(e){let{data:t,error:n}=await o.organization.listInvitations({query:{organizationId:e}});if(n)throw Error(n.message??`Failed to list invitations`);return t??[]},async cancelInvitation(e){let{error:t}=await o.organization.cancelInvitation({invitationId:e});if(t)throw Error(t.message??`Failed to cancel invitation`)},async getInvitation(e){let{data:t,error:n}=await o.organization.getInvitation({query:{id:e}});if(n)throw Error(n.message??`Failed to load invitation`);return t},async acceptInvitation(e){let{error:t}=await o.organization.acceptInvitation({invitationId:e});if(t)throw Error(t.message??`Failed to accept invitation`)},async rejectInvitation(e){let{error:t}=await o.organization.rejectInvitation({invitationId:e});if(t)throw Error(t.message??`Failed to reject invitation`)},async listUserInvitations(){let{data:e,error:t}=await o.organization.listUserInvitations();if(t)throw Error(t.message??`Failed to list invitations`);return e??[]}}}var At=`auth-active-organization-id`,q={_memoryValue:null,get(){try{if(typeof localStorage<`u`)return localStorage.getItem(At)}catch{}return this._memoryValue},set(e){this._memoryValue=e;try{typeof localStorage<`u`&&localStorage.setItem(At,e)}catch{}},clear(){this._memoryValue=null;try{typeof localStorage<`u`&&localStorage.removeItem(At)}catch{}}};function jt(){return async(e,t)=>{let n=new Headers(t?.headers),r=typeof e==`string`?e:e instanceof URL?e.href:e.url,i=/\/api\//i.test(r),a=K.get();a&&i&&n.set(`Authorization`,`Bearer ${a}`);let o=q.get();if(o&&n.set(`X-Tenant-ID`,o),i&&!n.has(`Accept-Language`)&&typeof document<`u`){let e=document.documentElement.lang;e&&n.set(`Accept-Language`,e)}return fetch(e,{...t,headers:n})}}var J=n();function Mt({authUrl:e,client:t,onAuthStateChange:n,enabled:a=!0,previewMode:o,children:s}){let c=(0,r.useMemo)(()=>t??kt({baseURL:e}),[t,e]),[l,u]=(0,r.useState)(null),[d,f]=(0,r.useState)(null),[p,m]=(0,r.useState)(!0),[h,g]=(0,r.useState)(null),[_,v]=(0,r.useState)([]),[y,b]=(0,r.useState)(null),[x,S]=(0,r.useState)(null),[C,w]=(0,r.useState)(!1),T=o!=null,E=a&&!T?l!==null&&d!==null:!0;(0,r.useEffect)(()=>{if(T){let e=o.simulatedRole??`admin`,t=o.simulatedUserName??`Preview User`,n=o.expiresInSeconds??0;u({id:`preview-user`,email:`preview@preview.local`,name:t,role:e,roles:[e]}),f({token:`preview-token`,expiresAt:n>0?new Date(Date.now()+n*1e3):new Date(Date.now()+365*24*60*60*1e3)}),m(!1);return}if(!a){u({id:`guest`,email:`guest@local`,name:`Guest User`,role:`admin`}),f({token:`guest-token`,expiresAt:new Date(Date.now()+365*24*60*60*1e3)}),m(!1);return}let e=!1;async function t(){try{let t=await c.getSession();if(e)return;t&&(u(t.user),f(t.session))}catch(t){if(e)return;g(t instanceof Error?t:Error(String(t)))}finally{e||m(!1)}}return t(),()=>{e=!0}},[c,a,T,o]),(0,r.useEffect)(()=>{n?.({user:l,session:d,isAuthenticated:E,isLoading:p,error:h})},[l,d,E,p,h,n]);let ee=(0,r.useCallback)(async(e,t)=>{m(!0),g(null);try{let n=await c.signIn({email:e,password:t});u(n.user),f(n.session)}catch(e){let t=e instanceof Error?e:Error(String(e));throw g(t),t}finally{m(!1)}},[c]),D=(0,r.useCallback)(async(e,t,n)=>{m(!0),g(null);try{let r=await c.signUp({name:e,email:t,password:n});return r.requiresVerification?{requiresVerification:!0}:(u(r.user),f(r.session),{requiresVerification:!1})}catch(e){let t=e instanceof Error?e:Error(String(e));throw g(t),t}finally{m(!1)}},[c]),te=(0,r.useCallback)(async()=>{m(!0);try{await c.signOut(),u(null),f(null),g(null)}catch(e){g(e instanceof Error?e:Error(String(e)))}finally{m(!1)}},[c]),O=(0,r.useCallback)(async e=>{g(null);try{u(await c.updateUser(e))}catch(e){let t=e instanceof Error?e:Error(String(e));throw g(t),t}},[c]),k=(0,r.useCallback)(async e=>{g(null);try{await c.forgotPassword(e)}catch(e){let t=e instanceof Error?e:Error(String(e));throw g(t),t}},[c]),ne=(0,r.useCallback)(async(e,t)=>{g(null);try{await c.sendVerificationEmail(e,t)}catch(e){let t=e instanceof Error?e:Error(String(e));throw g(t),t}},[c]),re=(0,r.useCallback)(async(e,t)=>{g(null);try{await c.resetPassword(e,t)}catch(e){let t=e instanceof Error?e:Error(String(e));throw g(t),t}},[c]),A=(0,r.useCallback)(async(e,t,n)=>{g(null);try{await c.changePassword(e,t,n)}catch(e){let t=e instanceof Error?e:Error(String(e));throw g(t),t}},[c]),ie=(0,r.useCallback)(async e=>{g(null);try{await c.setInitialPassword(e)}catch(e){let t=e instanceof Error?e:Error(String(e));throw g(t),t}},[c]),j=(0,r.useCallback)(()=>c.hasLocalPassword(),[c]),M=(0,r.useCallback)(()=>c.getConfig(),[c]),N=(0,r.useCallback)(async(e,t)=>{g(null);try{await c.signInWithProvider(e,t)}catch(e){let t=e instanceof Error?e:Error(String(e));throw g(t),t}},[c]),P=(0,r.useCallback)(async()=>{if(!(!a||T)){w(!0);try{let e=await c.listOrganizations();if(v(e),e.length>0&&!y)try{let e=await c.getActiveOrganization();e&&(b(e),q.set(e.id))}catch{}}catch(e){console.warn(`[AuthProvider] Failed to load organizations:`,e)}finally{w(!1)}}},[c,a,T,y]),ae=(0,r.useCallback)(async()=>{if(!a||T){let e=T?o?.simulatedRole??`admin`:`admin`;S({id:`preview-member`,organizationId:y?.id??`preview-org`,userId:`preview-user`,role:e});return}if(!y){S(null);return}try{S(await c.getActiveMember())}catch(e){console.warn(`[AuthProvider] Failed to load active member:`,e),S(null)}},[c,a,T,o,y]);(0,r.useEffect)(()=>{ae()},[ae]),(0,r.useEffect)(()=>{l&&a&&!T&&P()},[l,a,T]);let F=(0,r.useCallback)(async e=>{g(null);try{let t=await c.setActiveOrganization(e);b(t),t?q.set(t.id):q.clear()}catch(e){let t=e instanceof Error?e:Error(String(e));throw g(t),t}},[c]),I=(0,r.useCallback)(async e=>{g(null);try{let t=await c.createOrganization(e);return await P(),await F(t.id),t}catch(e){let t=e instanceof Error?e:Error(String(e));throw g(t),t}},[c,P,F]),L=(0,r.useCallback)(async(e,t)=>{let n=await c.updateOrganization(e,t);return await P(),y?.id===e&&b(n),n},[c,P,y]),R=(0,r.useCallback)(async e=>{await c.deleteOrganization(e),y?.id===e&&(b(null),q.clear()),await P()},[c,y,P]),oe=(0,r.useCallback)(async e=>{await c.leaveOrganization(e),y?.id===e&&(b(null),q.clear()),await P()},[c,y,P]),se=(0,r.useCallback)(e=>c.getMembers(e),[c]),ce=(0,r.useCallback)(e=>c.inviteMember(e),[c]),le=(0,r.useCallback)(e=>c.removeMember(e),[c]),ue=(0,r.useCallback)(e=>c.updateMemberRole(e),[c]),z=(0,r.useCallback)(e=>c.listInvitations(e),[c]),de=(0,r.useCallback)(e=>c.cancelInvitation(e),[c]),B=(0,r.useCallback)(e=>c.getInvitation(e),[c]),fe=(0,r.useCallback)(async e=>{await c.acceptInvitation(e),await P()},[c,P]),pe=(0,r.useCallback)(e=>c.rejectInvitation(e),[c]),V=(0,r.useCallback)(()=>c.listUserInvitations(),[c]),H=a&&!T,me=(0,r.useMemo)(()=>({user:l,session:d,isAuthenticated:E,isAuthEnabled:H,isLoading:p,error:h,isPreviewMode:T,previewMode:T?o:null,signIn:ee,signUp:D,signOut:te,updateUser:O,forgotPassword:k,sendVerificationEmail:ne,resetPassword:re,changePassword:A,setInitialPassword:ie,hasLocalPassword:j,getAuthConfig:M,signInWithProvider:N,organizations:_,activeOrganization:y,activeMember:x,isOrganizationsLoading:C,switchOrganization:F,createOrganization:I,refreshOrganizations:P,updateOrganization:L,deleteOrganization:R,leaveOrganization:oe,getMembers:se,inviteMember:ce,removeMember:le,updateMemberRole:ue,listInvitations:z,cancelInvitation:de,getInvitation:B,acceptInvitation:fe,rejectInvitation:pe,listUserInvitations:V}),[l,d,E,H,p,h,T,o,ee,D,te,O,k,ne,re,A,ie,j,M,N,_,y,x,C,F,I,P,L,R,oe,se,ce,le,ue,z,de,B,fe,pe,V]);return(0,J.jsx)(i.Provider,{value:me,children:s})}function Y(){return(0,r.useContext)(i)||{user:null,session:null,isAuthenticated:!1,isAuthEnabled:!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`)},sendVerificationEmail:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},resetPassword:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},changePassword:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},setInitialPassword:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},hasLocalPassword:async()=>!1,getAuthConfig:async()=>({}),signInWithProvider:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},organizations:[],activeOrganization:null,activeMember:null,isOrganizationsLoading:!1,switchOrganization:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},createOrganization:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},refreshOrganizations:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},updateOrganization:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},deleteOrganization:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},leaveOrganization:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},getMembers:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},inviteMember:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},removeMember:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},updateMemberRole:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},listInvitations:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},cancelInvitation:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},getInvitation:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},acceptInvitation:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},rejectInvitation:async()=>{throw Error(`useAuth must be used within an AuthProvider`)},listUserInvitations:async()=>{throw Error(`useAuth must be used within an AuthProvider`)}}}var Nt=new Set([`owner`,`admin`,`super_admin`,`superadmin`,`platform_admin`,`system_admin`]);function Pt(e){return typeof e==`string`&&Nt.has(e.toLowerCase())}function Ft(){let{activeMember:e,user:t}=Y();return!!(Pt(e?.role)||Pt(t?.role)||Array.isArray(t?.roles)&&t.roles.some(Pt))}function It({fallback:e=null,requiredRoles:t,loadingFallback:n,children:r}){let{isAuthenticated:i,isLoading:a,user:o}=Y();if(a)return(0,J.jsx)(J.Fragment,{children:n??null});if(!i)return(0,J.jsx)(J.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,J.jsx)(J.Fragment,{children:e})}return(0,J.jsx)(J.Fragment,{children:r})}var Lt={google:`Google`,github:`GitHub`,microsoft:`Microsoft`,apple:`Apple`,facebook:`Facebook`,twitter:`Twitter`,discord:`Discord`,gitlab:`GitLab`,linkedin:`LinkedIn`},Rt={google:(0,J.jsx)(`svg`,{viewBox:`0 0 24 24`,className:`h-4 w-4`,"aria-hidden":`true`,children:(0,J.jsx)(`path`,{fill:`#EA4335`,d:`M12 10.2v3.9h5.5c-.24 1.4-1.7 4.1-5.5 4.1-3.3 0-6-2.74-6-6.1s2.7-6.1 6-6.1c1.88 0 3.14.8 3.86 1.5l2.64-2.55C16.84 3.36 14.66 2.4 12 2.4 6.92 2.4 2.8 6.52 2.8 11.6S6.92 20.8 12 20.8c6.92 0 9.2-4.86 9.2-7.4 0-.5-.06-.88-.14-1.2H12z`})}),github:(0,J.jsx)(`svg`,{viewBox:`0 0 24 24`,className:`h-4 w-4 fill-current`,"aria-hidden":`true`,children:(0,J.jsx)(`path`,{d:`M12 .5C5.65.5.5 5.65.5 12c0 5.08 3.29 9.39 7.86 10.91.58.11.79-.25.79-.56v-2.07c-3.2.7-3.87-1.37-3.87-1.37-.52-1.33-1.27-1.69-1.27-1.69-1.04-.71.08-.7.08-.7 1.15.08 1.76 1.18 1.76 1.18 1.02 1.75 2.68 1.25 3.34.96.1-.74.4-1.25.73-1.54-2.55-.29-5.24-1.28-5.24-5.69 0-1.26.45-2.29 1.18-3.1-.12-.29-.51-1.46.11-3.04 0 0 .97-.31 3.18 1.18a11.04 11.04 0 015.79 0c2.21-1.49 3.18-1.18 3.18-1.18.62 1.58.23 2.75.11 3.04.74.81 1.18 1.84 1.18 3.1 0 4.42-2.7 5.39-5.27 5.68.41.36.78 1.06.78 2.13v3.16c0 .31.21.68.8.56C20.21 21.39 23.5 17.08 23.5 12 23.5 5.65 18.35.5 12 .5z`})}),microsoft:(0,J.jsxs)(`svg`,{viewBox:`0 0 24 24`,className:`h-4 w-4`,"aria-hidden":`true`,children:[(0,J.jsx)(`path`,{fill:`#F25022`,d:`M2 2h9.5v9.5H2z`}),(0,J.jsx)(`path`,{fill:`#7FBA00`,d:`M12.5 2H22v9.5h-9.5z`}),(0,J.jsx)(`path`,{fill:`#00A4EF`,d:`M2 12.5h9.5V22H2z`}),(0,J.jsx)(`path`,{fill:`#FFB900`,d:`M12.5 12.5H22V22h-9.5z`})]}),apple:(0,J.jsx)(`svg`,{viewBox:`0 0 24 24`,className:`h-4 w-4 fill-current`,"aria-hidden":`true`,children:(0,J.jsx)(`path`,{d:`M16.37 12.55c-.02-2.27 1.85-3.36 1.94-3.42-1.06-1.55-2.71-1.76-3.3-1.79-1.4-.14-2.74.83-3.45.83-.71 0-1.81-.81-2.98-.79-1.53.02-2.95.89-3.74 2.27-1.6 2.77-.41 6.86 1.14 9.11.76 1.1 1.66 2.34 2.83 2.3 1.14-.05 1.57-.74 2.94-.74 1.37 0 1.76.74 2.96.71 1.22-.02 2-1.12 2.75-2.23.87-1.28 1.22-2.52 1.24-2.59-.03-.01-2.38-.91-2.4-3.66zM14.1 5.31c.62-.76 1.05-1.81.93-2.86-.9.04-2 .6-2.65 1.35-.58.66-1.1 1.74-.96 2.76 1.01.08 2.04-.51 2.68-1.25z`})}),facebook:(0,J.jsx)(`svg`,{viewBox:`0 0 24 24`,className:`h-4 w-4`,"aria-hidden":`true`,children:(0,J.jsx)(`path`,{fill:`#1877F2`,d:`M24 12C24 5.37 18.63 0 12 0S0 5.37 0 12c0 5.99 4.39 10.95 10.13 11.85V15.47H7.08V12h3.05V9.36c0-3.01 1.79-4.67 4.53-4.67 1.31 0 2.69.23 2.69.23v2.96h-1.51c-1.49 0-1.96.93-1.96 1.88V12h3.33l-.53 3.47h-2.8v8.38C19.61 22.95 24 17.99 24 12z`})}),twitter:(0,J.jsx)(`svg`,{viewBox:`0 0 24 24`,className:`h-4 w-4 fill-current`,"aria-hidden":`true`,children:(0,J.jsx)(`path`,{d:`M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z`})}),discord:(0,J.jsx)(`svg`,{viewBox:`0 0 24 24`,className:`h-4 w-4`,"aria-hidden":`true`,children:(0,J.jsx)(`path`,{fill:`#5865F2`,d:`M20.32 4.37A19.79 19.79 0 0016.56 3l-.18.36a18.27 18.27 0 00-8.76 0L7.44 3a19.79 19.79 0 00-3.76 1.37C.99 8.4.27 12.34.63 16.22a19.94 19.94 0 006.07 3.07l.49-.7a13.2 13.2 0 01-2.07-.99c.17-.13.34-.27.5-.41a14.13 14.13 0 0012.76 0c.16.14.33.28.5.41-.66.4-1.36.73-2.07.99l.49.7a19.92 19.92 0 006.07-3.07c.43-4.5-.66-8.41-2.95-11.85zM8.52 14.12c-1.18 0-2.15-1.08-2.15-2.41 0-1.33.95-2.42 2.15-2.42 1.2 0 2.17 1.09 2.15 2.42 0 1.33-.96 2.41-2.15 2.41zm6.96 0c-1.18 0-2.15-1.08-2.15-2.41 0-1.33.95-2.42 2.15-2.42 1.2 0 2.17 1.09 2.15 2.42 0 1.33-.95 2.41-2.15 2.41z`})}),gitlab:(0,J.jsx)(`svg`,{viewBox:`0 0 24 24`,className:`h-4 w-4`,"aria-hidden":`true`,children:(0,J.jsx)(`path`,{fill:`#FC6D26`,d:`M23.6 9.6L23.57 9.5 20.3.81a.84.84 0 00-1.6.05L16.5 7.6H7.5L5.3.86a.84.84 0 00-1.6-.05L.43 9.5l-.03.1a5.84 5.84 0 001.94 6.74l.01.01.03.02 4.8 3.6 2.38 1.8 1.45 1.1a1 1 0 001.2 0l1.45-1.1 2.38-1.8 4.83-3.62.01-.01a5.84 5.84 0 001.93-6.74z`})}),linkedin:(0,J.jsx)(`svg`,{viewBox:`0 0 24 24`,className:`h-4 w-4`,"aria-hidden":`true`,children:(0,J.jsx)(`path`,{fill:`#0A66C2`,d:`M20.45 20.45h-3.55v-5.57c0-1.33-.02-3.04-1.85-3.04-1.85 0-2.13 1.45-2.13 2.94v5.67H9.36V9h3.41v1.56h.05c.48-.9 1.64-1.85 3.37-1.85 3.6 0 4.27 2.37 4.27 5.45v6.29zM5.34 7.43a2.06 2.06 0 11.01-4.13 2.06 2.06 0 010 4.13zM7.12 20.45H3.56V9h3.56v11.45zM22.22 0H1.77C.79 0 0 .77 0 1.72v20.56C0 23.23.79 24 1.77 24h20.45c.98 0 1.78-.77 1.78-1.72V1.72C24 .77 23.2 0 22.22 0z`})})};function zt({id:e}){let t=Rt[e];return t?(0,J.jsx)(`span`,{className:`mr-2 flex h-4 w-4 items-center justify-center`,children:t}):(0,J.jsx)(`span`,{className:`mr-2 flex h-4 w-4 items-center justify-center rounded-sm bg-muted text-[10px] font-bold uppercase`,children:e[0]})}function Bt({mode:e=`sign-in`,callbackURL:t,errorCallbackURL:n,dividerText:i=`or continue with email`,onProvidersResolved:a}){let{getAuthConfig:o,signInWithProvider:s}=Y(),[c,l]=(0,r.useState)([]),[u,d]=(0,r.useState)(!0),[f,p]=(0,r.useState)(null);if((0,r.useEffect)(()=>{let e=!1;return Promise.resolve().then(()=>o()).then(t=>{if(e)return;let n=(t?.socialProviders??[]).filter(e=>e.enabled);l(n),a?.(n.length>0)}).catch(t=>{e||(console.warn(`[SocialSignInButtons] failed to load auth config`,t),a?.(!1))}).finally(()=>{e||d(!1)}),()=>{e=!0}},[o]),u||c.length===0)return null;let m=e===`sign-in`?`Continue with`:`Sign up with`,h=typeof window<`u`?window.location.href:void 0,g=async e=>{p(null);try{await s(e.id,{callbackURL:t??h,errorCallbackURL:n??t??h,type:e.type??`social`})}catch(e){p(e instanceof Error?e.message:String(e))}};return(0,J.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[f&&(0,J.jsx)(`div`,{className:`rounded-md bg-destructive/15 p-3 text-sm text-destructive`,role:`alert`,children:f}),c.map(e=>(0,J.jsxs)(`button`,{type:`button`,onClick:()=>g(e),className:`inline-flex h-10 w-full items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium ring-offset-background transition-colors hover:bg-accent hover:text-accent-foreground 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:[(0,J.jsx)(zt,{id:e.id}),m,` `,Lt[e.id]??e.name]},e.id)),(0,J.jsxs)(`div`,{className:`relative my-1`,children:[(0,J.jsx)(`div`,{className:`absolute inset-0 flex items-center`,children:(0,J.jsx)(`span`,{className:`w-full border-t`})}),(0,J.jsx)(`div`,{className:`relative flex justify-center text-xs uppercase`,children:(0,J.jsx)(`span`,{className:`bg-background px-2 text-muted-foreground`,children:i})})]})]})}var X=`flex h-11 w-full rounded-lg border border-input bg-background px-3.5 py-2 text-sm shadow-sm ring-offset-background transition-colors placeholder:text-muted-foreground hover:border-primary/40 focus-visible:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/30 focus-visible:ring-offset-1 disabled:cursor-not-allowed disabled:opacity-50`,Z=`inline-flex h-11 w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-primary to-primary/85 px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm ring-offset-background transition-[box-shadow,background-color,transform] hover:shadow-md hover:from-primary hover:to-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2 active:scale-[0.99] disabled:pointer-events-none disabled:opacity-60 motion-reduce:transition-none motion-reduce:active:transform-none`,Q=`text-sm font-medium leading-none text-foreground`;function Vt(){return(0,J.jsxs)(`svg`,{className:`h-4 w-4 animate-spin`,viewBox:`0 0 24 24`,fill:`none`,"aria-hidden":`true`,children:[(0,J.jsx)(`circle`,{className:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,strokeWidth:`4`}),(0,J.jsx)(`path`,{className:`opacity-90`,d:`M4 12a8 8 0 018-8`,stroke:`currentColor`,strokeWidth:`4`,strokeLinecap:`round`})]})}function Ht({className:e}){return(0,J.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,className:e??`h-4 w-4 shrink-0`,"aria-hidden":`true`,children:[(0,J.jsx)(`circle`,{cx:`12`,cy:`12`,r:`10`}),(0,J.jsx)(`line`,{x1:`12`,y1:`8`,x2:`12`,y2:`12`}),(0,J.jsx)(`line`,{x1:`12`,y1:`16`,x2:`12.01`,y2:`16`})]})}function Ut({className:e}){return(0,J.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`,strokeLinejoin:`round`,className:e??`h-7 w-7`,"aria-hidden":`true`,children:[(0,J.jsx)(`rect`,{x:`2`,y:`4`,width:`20`,height:`16`,rx:`2`}),(0,J.jsx)(`path`,{d:`m22 6-10 7L2 6`})]})}function $({icon:e,title:t,description:n}){return(0,J.jsxs)(`div`,{className:`flex flex-col items-center space-y-3 text-center`,children:[e&&(0,J.jsx)(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-2xl bg-primary/10 text-primary ring-1 ring-primary/15`,children:e}),(0,J.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight text-foreground sm:text-[1.6rem]`,children:t}),n&&(0,J.jsx)(`p`,{className:`text-sm leading-relaxed text-muted-foreground`,children:n})]})}function Wt({message:e}){return(0,J.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-destructive/30 bg-destructive/10 p-3 text-sm text-destructive`,role:`alert`,children:[(0,J.jsx)(Ht,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,J.jsx)(`span`,{className:`leading-snug`,children:e})]})}function Gt({label:e=`or`}){return(0,J.jsxs)(`div`,{className:`relative my-1`,children:[(0,J.jsx)(`div`,{className:`absolute inset-0 flex items-center`,"aria-hidden":`true`,children:(0,J.jsx)(`span`,{className:`w-full border-t border-border`})}),(0,J.jsx)(`div`,{className:`relative flex justify-center text-xs uppercase tracking-wider`,children:(0,J.jsx)(`span`,{className:`bg-background px-3 text-muted-foreground`,children:e})})]})}var Kt=({href:e,className:t,children:n})=>(0,J.jsx)(`a`,{href:e,className:t,children:n}),qt=()=>(0,J.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`,strokeLinejoin:`round`,className:`h-6 w-6`,"aria-hidden":`true`,children:[(0,J.jsx)(`rect`,{x:`3`,y:`11`,width:`18`,height:`11`,rx:`2`}),(0,J.jsx)(`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`})]});function Jt({onSuccess:e,onError:t,registerUrl:n=`/register`,forgotPasswordUrl:i=`/forgot-password`,title:a=`Sign in to your account`,description:o=`Enter your email and password to continue`,icon:s,hideIcon:c=!1,linkComponent:l=Kt,labels:u={},errorMessages:d}){let{signIn:f,isLoading:p}=Y(),[m,h]=(0,r.useState)(``),[g,_]=(0,r.useState)(``),[v,y]=(0,r.useState)(null),[b,x]=(0,r.useState)(!1),S={emailLabel:u.emailLabel??`Email`,emailPlaceholder:u.emailPlaceholder??`name@example.com`,passwordLabel:u.passwordLabel??`Password`,passwordPlaceholder:u.passwordPlaceholder??`Enter your password`,forgotPasswordText:u.forgotPasswordText??`Forgot password?`,submitButton:u.submitButton??`Sign In`,submittingButton:u.submittingButton??`Signing in…`,noAccountText:u.noAccountText??`Don't have an account?`,signUpText:u.signUpText??`Sign up`,orText:u.orText??`or`};return(0,J.jsxs)(`div`,{className:`mx-auto flex w-full flex-col justify-center space-y-7 sm:w-[400px]`,children:[(0,J.jsx)($,{icon:c?void 0:s??(0,J.jsx)(qt,{}),title:a,description:o}),(0,J.jsxs)(`div`,{className:`space-y-5`,children:[(0,J.jsx)(Bt,{mode:`sign-in`,onProvidersResolved:e=>x(e)}),(0,J.jsxs)(`form`,{onSubmit:async n=>{n.preventDefault(),y(null);try{await f(m,g),e?.()}catch(e){let n=e instanceof Error?e:Error(String(e)),r=n.code;y(r&&d?.[r]||n.message),t?.(n)}},className:`space-y-4`,children:[b&&(0,J.jsx)(Gt,{label:S.orText}),v&&(0,J.jsx)(Wt,{message:v}),(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(`label`,{htmlFor:`login-email`,className:Q,children:S.emailLabel}),(0,J.jsx)(`input`,{id:`login-email`,type:`email`,placeholder:S.emailPlaceholder,value:m,onChange:e=>h(e.target.value),required:!0,autoComplete:`email`,disabled:p,className:X})]}),(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,J.jsx)(`label`,{htmlFor:`login-password`,className:Q,children:S.passwordLabel}),i&&(0,J.jsx)(l,{href:i,className:`text-xs text-muted-foreground underline-offset-4 transition-colors hover:text-primary hover:underline`,children:S.forgotPasswordText})]}),(0,J.jsx)(`input`,{id:`login-password`,type:`password`,placeholder:S.passwordPlaceholder,value:g,onChange:e=>_(e.target.value),required:!0,autoComplete:`current-password`,disabled:p,className:X})]}),(0,J.jsxs)(`button`,{type:`submit`,disabled:p,className:Z,children:[p&&(0,J.jsx)(Vt,{}),p?S.submittingButton:S.submitButton]})]})]}),n&&(0,J.jsxs)(`p`,{className:`px-8 text-center text-sm text-muted-foreground`,children:[S.noAccountText,` `,(0,J.jsx)(l,{href:n,className:`font-medium text-primary underline-offset-4 hover:underline focus-visible:outline-none focus-visible:underline`,children:S.signUpText})]})]})}var Yt=({href:e,className:t,children:n})=>(0,J.jsx)(`a`,{href:e,className:t,children:n}),Xt=()=>(0,J.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`,strokeLinejoin:`round`,className:`h-6 w-6`,"aria-hidden":`true`,children:[(0,J.jsx)(`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`}),(0,J.jsx)(`circle`,{cx:`9`,cy:`7`,r:`4`}),(0,J.jsx)(`line`,{x1:`19`,y1:`8`,x2:`19`,y2:`14`}),(0,J.jsx)(`line`,{x1:`22`,y1:`11`,x2:`16`,y2:`11`})]});function Zt({onSuccess:e,onVerificationRequired:t,onError:n,loginUrl:i=`/login`,title:a=`Create an account`,description:o=`Enter your information to get started`,icon:s,hideIcon:c=!1,linkComponent:l=Yt,labels:u={},errorMessages:d}){let{signUp:f,isLoading:p}=Y(),[m,h]=(0,r.useState)(``),[g,_]=(0,r.useState)(``),[v,y]=(0,r.useState)(``),[b,x]=(0,r.useState)(``),[S,C]=(0,r.useState)(null),[w,T]=(0,r.useState)(!1),E={nameLabel:u.nameLabel??`Name`,namePlaceholder:u.namePlaceholder??`John Doe`,emailLabel:u.emailLabel??`Email`,emailPlaceholder:u.emailPlaceholder??`name@example.com`,passwordLabel:u.passwordLabel??`Password`,passwordPlaceholder:u.passwordPlaceholder??`Create a password (min. 8 characters)`,confirmPasswordLabel:u.confirmPasswordLabel??`Confirm Password`,confirmPasswordPlaceholder:u.confirmPasswordPlaceholder??`Confirm your password`,passwordMismatchError:u.passwordMismatchError??`Passwords do not match`,passwordTooShortError:u.passwordTooShortError??`Password must be at least 8 characters`,submitButton:u.submitButton??`Create Account`,submittingButton:u.submittingButton??`Creating account…`,hasAccountText:u.hasAccountText??`Already have an account?`,signInText:u.signInText??`Sign in`,orText:u.orText??`or`};return(0,J.jsxs)(`div`,{className:`mx-auto flex w-full flex-col justify-center space-y-7 sm:w-[400px]`,children:[(0,J.jsx)($,{icon:c?void 0:s??(0,J.jsx)(Xt,{}),title:a,description:o}),(0,J.jsxs)(`div`,{className:`space-y-5`,children:[(0,J.jsx)(Bt,{mode:`sign-up`,onProvidersResolved:e=>T(e)}),(0,J.jsxs)(`form`,{onSubmit:async r=>{if(r.preventDefault(),C(null),v!==b){C(E.passwordMismatchError);return}if(v.length<8){C(E.passwordTooShortError);return}try{if((await f(m,g,v))?.requiresVerification){t?.(g);return}e?.()}catch(e){let t=e instanceof Error?e:Error(String(e)),r=t.code;C(r&&d?.[r]||t.message),n?.(t)}},className:`space-y-4`,children:[w&&(0,J.jsx)(Gt,{label:E.orText}),S&&(0,J.jsx)(Wt,{message:S}),(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(`label`,{htmlFor:`register-name`,className:Q,children:E.nameLabel}),(0,J.jsx)(`input`,{id:`register-name`,type:`text`,placeholder:E.namePlaceholder,value:m,onChange:e=>h(e.target.value),required:!0,autoComplete:`name`,disabled:p,className:X})]}),(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(`label`,{htmlFor:`register-email`,className:Q,children:E.emailLabel}),(0,J.jsx)(`input`,{id:`register-email`,type:`email`,placeholder:E.emailPlaceholder,value:g,onChange:e=>_(e.target.value),required:!0,autoComplete:`email`,disabled:p,className:X})]}),(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(`label`,{htmlFor:`register-password`,className:Q,children:E.passwordLabel}),(0,J.jsx)(`input`,{id:`register-password`,type:`password`,placeholder:E.passwordPlaceholder,value:v,onChange:e=>y(e.target.value),required:!0,minLength:8,autoComplete:`new-password`,disabled:p,className:X})]}),(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(`label`,{htmlFor:`register-confirm-password`,className:Q,children:E.confirmPasswordLabel}),(0,J.jsx)(`input`,{id:`register-confirm-password`,type:`password`,placeholder:E.confirmPasswordPlaceholder,value:b,onChange:e=>x(e.target.value),required:!0,minLength:8,autoComplete:`new-password`,disabled:p,className:X})]}),(0,J.jsxs)(`button`,{type:`submit`,disabled:p,className:Z,children:[p&&(0,J.jsx)(Vt,{}),p?E.submittingButton:E.submitButton]})]})]}),i&&(0,J.jsxs)(`p`,{className:`px-8 text-center text-sm text-muted-foreground`,children:[E.hasAccountText,` `,(0,J.jsx)(l,{href:i,className:`font-medium text-primary underline-offset-4 hover:underline focus-visible:outline-none focus-visible:underline`,children:E.signInText})]})]})}var Qt=({href:e,className:t,children:n})=>(0,J.jsx)(`a`,{href:e,className:t,children:n}),$t=()=>(0,J.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.75`,strokeLinecap:`round`,strokeLinejoin:`round`,className:`h-6 w-6`,"aria-hidden":`true`,children:(0,J.jsx)(`path`,{d:`M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4`})});function en({onSuccess:e,onError:t,loginUrl:n=`/login`,title:i=`Reset your password`,description:a=`Enter your email address and we'll send you a link to reset your password`,icon:o,hideIcon:s=!1,linkComponent:c=Qt,labels:l={}}){let{forgotPassword:u,isLoading:d}=Y(),[f,p]=(0,r.useState)(``),[m,h]=(0,r.useState)(null),[g,_]=(0,r.useState)(!1),v={emailLabel:l.emailLabel??`Email`,emailPlaceholder:l.emailPlaceholder??`name@example.com`,submitButton:l.submitButton??`Send Reset Link`,submittingButton:l.submittingButton??`Sending…`,successTitle:l.successTitle??`Check your email`,successDescription:l.successDescription??`We've sent a password reset link to {{email}}. Please check your inbox.`,backToSignInText:l.backToSignInText??`Back to sign in`,rememberPasswordText:l.rememberPasswordText??`Remember your password?`,signInText:l.signInText??`Sign in`},y=async n=>{n.preventDefault(),h(null);try{await u(f),_(!0),e?.()}catch(e){let n=e instanceof Error?e:Error(String(e));h(n.message),t?.(n)}};if(g){let e=v.successDescription.includes(`{{email}}`)?v.successDescription.replace(`{{email}}`,f):`${v.successDescription} ${f}`;return(0,J.jsxs)(`div`,{className:`mx-auto flex w-full flex-col justify-center space-y-7 sm:w-[400px]`,children:[(0,J.jsx)($,{icon:(0,J.jsx)(`span`,{className:`flex h-12 w-12 items-center justify-center rounded-2xl bg-emerald-500/10 text-emerald-600 ring-1 ring-emerald-500/15 dark:text-emerald-400`,children:(0,J.jsx)(Ut,{})}),title:v.successTitle,description:e}),n&&(0,J.jsx)(`p`,{className:`text-center text-sm text-muted-foreground`,children:(0,J.jsxs)(c,{href:n,className:`font-medium text-primary underline-offset-4 hover:underline focus-visible:outline-none focus-visible:underline`,children:[`← `,v.backToSignInText]})})]})}return(0,J.jsxs)(`div`,{className:`mx-auto flex w-full flex-col justify-center space-y-7 sm:w-[400px]`,children:[(0,J.jsx)($,{icon:s?void 0:o??(0,J.jsx)($t,{}),title:i,description:a}),(0,J.jsxs)(`form`,{onSubmit:y,className:`space-y-4`,children:[m&&(0,J.jsx)(Wt,{message:m}),(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(`label`,{htmlFor:`forgot-email`,className:Q,children:v.emailLabel}),(0,J.jsx)(`input`,{id:`forgot-email`,type:`email`,placeholder:v.emailPlaceholder,value:f,onChange:e=>p(e.target.value),required:!0,autoComplete:`email`,disabled:d,className:X})]}),(0,J.jsxs)(`button`,{type:`submit`,disabled:d,className:Z,children:[d&&(0,J.jsx)(Vt,{}),d?v.submittingButton:v.submitButton]})]}),n&&(0,J.jsxs)(`p`,{className:`px-8 text-center text-sm text-muted-foreground`,children:[v.rememberPasswordText,` `,(0,J.jsx)(c,{href:n,className:`font-medium text-primary underline-offset-4 hover:underline focus-visible:outline-none focus-visible:underline`,children:v.signInText})]})]})}function tn(e){return e?e.name?e.name.split(` `).map(e=>e[0]).join(``).toUpperCase().slice(0,2):e.email?.[0]?.toUpperCase()??`?`:`?`}function nn(e){if(!e)return!1;let t=e.objects;if(!t||typeof t!=`object`||Array.isArray(t))return!1;for(let e of Object.values(t))if(e&&typeof e==`object`&&!Array.isArray(e)&&`fields`in e)return!0;return!1}var rn=[`apps`,`messages`,`validationMessages`,`dashboards`,`globalActions`];function an(e){let t={},n={},r={},i=e.objects;if(i)for(let[e,a]of Object.entries(i)){if(!a||typeof a!=`object`)continue;let i={};a.label&&(i.label=a.label),a.pluralLabel&&(i.pluralLabel=a.pluralLabel),a.description&&(i.description=a.description);for(let[e,t]of Object.entries(a))e.startsWith(`_`)&&(i[e]=t);if(t[e]=i,a.fields&&typeof a.fields==`object`){let t=Object.entries(a.fields);for(let[i,a]of t)a?.label&&(n[e]||(n[e]={}),n[e][i]=a.label),a?.options&&typeof a.options==`object`&&Object.keys(a.options).length>0&&(r[e]||(r[e]={}),r[e][i]=a.options)}}let a={};Object.keys(t).length>0&&(a.objects=t),Object.keys(n).length>0&&(a.fields=n),Object.keys(r).length>0&&(a.fieldOptions=r);for(let t of rn)e[t]!==void 0&&(a[t]=e[t]);let o=new Set([`objects`,...rn]);for(let[t,n]of Object.entries(e))o.has(t)||(a[t]=n);return{app:a}}var on=(0,r.createContext)(null);on.displayName=`PermissionContext`;var sn=`/api/v1/auth/me/permissions`;function cn({endpoint:e=sn,initialPermissions:t,loadingFallback:n=null,errorFallback:i,children:a}){let[o,s]=(0,r.useState)(t??null),[c,l]=(0,r.useState)(null),[u,d]=(0,r.useState)(!t),f=(0,r.useCallback)(async()=>{d(!0),l(null);try{let t=await fetch(e,{credentials:`include`,headers:{Accept:`application/json`}});if(!t.ok)throw Error(`Permissions endpoint returned ${t.status}`);s(await t.json())}catch(e){l(e instanceof Error?e:Error(String(e)))}finally{d(!1)}},[e]);(0,r.useEffect)(()=>{t||f()},[f,t]);let p=(0,r.useCallback)((e,t,n)=>{if(!o)return!1;let r=(e??``).toLowerCase(),i=`${r}.${t}`,a=o.fields?.[i]??o.fields?.[`${e}.${t}`];if(a)return n===`read`?a.readable!==!1:a.editable!==!1;let s=o.objects?.[r]??o.objects?.[e]??o.objects?.[`*`];return s?n===`read`?s.allowRead!==!1:s.allowEdit!==!1:!0},[o]),m=(0,r.useCallback)((e,t)=>{if(!o)return{allowed:!1,reason:`permissions-loading`};let n=o.objects?.[e]??o.objects?.[`*`],r={read:`allowRead`,view:`allowRead`,create:`allowCreate`,update:`allowEdit`,edit:`allowEdit`,delete:`allowDelete`}[t]??`allowRead`,i=n?n[r]!==!1:!0;return{allowed:i,reason:i?void 0:`denied-by-permission-set`}},[o]),h=(0,r.useCallback)(e=>{if(!o)return[];let t=`${e}.`,n=[];for(let[e,r]of Object.entries(o.fields??{})){if(!e.startsWith(t))continue;let i=e.slice(t.length);n.push({field:i,read:r.readable!==!1,write:r.editable!==!1})}return n},[o]),g=(0,r.useCallback)(()=>void 0,[]),_=(0,r.useMemo)(()=>({check:m,checkField:p,getFieldPermissions:h,getRowFilter:g,roles:o?.roles??[],isLoaded:!u&&!c&&o!==null}),[m,p,h,g,o,u,c]);return u&&!o?(0,J.jsx)(J.Fragment,{children:n}):c&&!o?i?(0,J.jsx)(J.Fragment,{children:i(c,f)}):(0,J.jsx)(J.Fragment,{children:n}):(0,J.jsx)(on.Provider,{value:_,children:a})}function ln(){let e=(0,r.useContext)(on);return(0,r.useMemo)(()=>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},[e])}function un(e){let{checkField:t,getFieldPermissions:n}=ln(),i=(0,r.useMemo)(()=>n(e),[n,e]);return(0,r.useMemo)(()=>({permissions:i,canRead:n=>t(e,n,`read`),canWrite:n=>t(e,n,`write`),readableFields:n=>n.filter(n=>t(e,n,`read`)),writableFields:n=>n.filter(n=>t(e,n,`write`))}),[i,t,e])}export{an as a,Zt as c,Ft as d,Y as f,K as h,nn as i,Jt as l,jt as m,ln as n,tn as o,Mt as p,cn as r,en as s,un as t,It as u};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ui-components-BL3SEdAz.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{_ as t,m as n,t as r}from"./vendor-react-DR370ovB.js";import{$ as i,$a as a,Bt as o,Ht as s,Ks as c,Qs as l,Rr as u,Rt as d,Vt as f,Zn as p,_s as m,br as h,en as g,et as _,hs as v,in as y,nt as b,pr as x,rc as S,rt as ee,tt as C,ut as w,zi as T,zt as E}from"./ui-components-BrY5joKQ.js";import{n as D}from"./data-adapter-3AJO7A2o.js";import{u as O}from"./assistantBus-B-xBT6j1.js";var k=e(t(),1);function A(e){let t=O();return(0,k.useMemo)(()=>{let n=new D({baseUrl:``,previewDrafts:t});return e?n.withEnvironment(e):n},[e,t])}function te(e){let t=new Set(e.map(e=>e.type));return e.filter(e=>{if(!/[A-Z]/.test(e.type))return!0;let n=e.type.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`);return!(n!==e.type&&t.has(n))})}function ne(e){let[t,n]=(0,k.useState)(!0),[r,i]=(0,k.useState)(null),[a,o]=(0,k.useState)([]);return(0,k.useEffect)(()=>{let t=!1;return n(!0),i(null),(async()=>{try{let r=await e.listTypes(),i;if(Array.isArray(r))i=r.map(e=>typeof e==`string`?{type:e}:e);else{let e=r?.entries;i=Array.isArray(e)&&e.length>0?e:(r?.types??[]).map(e=>({type:e}))}t||(o(te(i)),n(!1))}catch(e){t||(i(e?.message??String(e)),n(!1))}})(),()=>{t=!0}},[e]),{loading:t,error:r,entries:a}}function re(e,t,n=[`name`,`label`,`description`]){if(!t)return!0;let r=t.toLowerCase();for(let t of n){let n=e[t];if(typeof n==`string`&&n.toLowerCase().includes(r))return!0}return!1}function j(e,t=`error`,n){let[r,i]=(0,k.useState)(!0),[a,o]=(0,k.useState)(null),[s,c]=(0,k.useState)({entries:[],total:0,scannedTypes:0,scannedItems:0,stats:{}}),[l,u]=(0,k.useState)(0);return(0,k.useEffect)(()=>{let r=!1;return i(!0),o(null),(async()=>{try{let a=await e.diagnostics(n?{severity:t,packageId:n}:{severity:t});if(r)return;c(a),i(!1)}catch(e){if(r)return;o(e?.message??String(e)),c({entries:[],total:0,scannedTypes:0,scannedItems:0,stats:{}}),i(!1)}})(),()=>{r=!0}},[e,t,n,l]),{loading:r,error:a,summary:s,byType:(0,k.useMemo)(()=>{let e={};for(let t of s.entries)(t.diagnostics?.errors?.length??0)>0&&(e[t.type]=(e[t.type]??0)+1);return e},[s]),warnByType:(0,k.useMemo)(()=>{let e={};for(let t of s.entries){let n=t.diagnostics?.errors?.length??0,r=t.diagnostics?.warnings?.length??0;n===0&&r>0&&(e[t.type]=(e[t.type]??0)+1)}return e},[s]),countsByType:(0,k.useMemo)(()=>{let e={};for(let[t,n]of Object.entries(s.stats??{}))e[t]=n.count;return e},[s]),lockedByType:(0,k.useMemo)(()=>{let e={};for(let[t,n]of Object.entries(s.stats??{}))typeof n.locked==`number`&&n.locked>0&&(e[t]=n.locked);return e},[s]),packagesByType:(0,k.useMemo)(()=>{let e={};for(let[t,n]of Object.entries(s.stats??{}))e[t]=n.packages??[];return e},[s]),allPackages:(0,k.useMemo)(()=>{let e=new Set;for(let t of Object.values(s.stats??{}))for(let n of t.packages??[])e.add(n);return[...e].sort()},[s]),reload:()=>u(e=>e+1)}}var M=r();function N({kindLabel:e,title:t,onClose:n,closeLabel:r=`Close`,children:i,footer:a,headerActions:o,hideClose:s}){return(0,M.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,M.jsxs)(`div`,{className:`flex items-start justify-between gap-2 border-b px-4 py-2.5`,children:[(0,M.jsxs)(`div`,{className:`min-w-0`,children:[(0,M.jsx)(p,{variant:`secondary`,className:`text-[10px] uppercase tracking-wider`,children:e}),(0,M.jsx)(`div`,{className:`mt-1 truncate text-sm font-medium`,title:t,children:t})]}),(0,M.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[o,!s&&(0,M.jsx)(x,{variant:`ghost`,size:`sm`,onClick:n,"aria-label":r,className:`h-7 w-7 p-0`,children:(0,M.jsx)(h,{className:`h-4 w-4`})})]})]}),(0,M.jsx)(`div`,{className:`flex-1 overflow-auto px-4 py-3 space-y-3`,children:i}),a&&(0,M.jsx)(`div`,{className:`border-t px-4 py-2.5`,children:a})]})}function P({index:e,total:t,onMove:n,upLabel:r=`Move up`,downLabel:i=`Move down`,disabled:a}){if(t<=1||e<0)return null;let o=!a&&e>0,s=!a&&e<t-1;return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(x,{type:`button`,variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0`,onClick:()=>o&&n(e-1),disabled:!o,"aria-label":r,title:r,children:(0,M.jsx)(c,{className:`h-4 w-4`})}),(0,M.jsx)(x,{type:`button`,variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0`,onClick:()=>s&&n(e+1),disabled:!s,"aria-label":i,title:i,children:(0,M.jsx)(l,{className:`h-4 w-4`})})]})}function F({label:e,value:t,onCommit:n,placeholder:r,disabled:i,mono:a}){return(0,M.jsxs)(`div`,{className:`space-y-1`,children:[(0,M.jsx)(y,{className:`text-xs text-muted-foreground`,children:e}),(0,M.jsx)(g,{value:t,onChange:e=>n(e.target.value),placeholder:r,disabled:i,className:S(`h-8 text-sm`,a&&`font-mono`)})]})}function I({label:e,value:t,onCommit:n,placeholder:r,disabled:i}){return(0,M.jsxs)(`div`,{className:`space-y-1`,children:[(0,M.jsx)(y,{className:`text-xs text-muted-foreground`,children:e}),(0,M.jsx)(g,{type:`number`,value:t??``,onChange:e=>{let t=e.target.value;n(t===``?void 0:Number(t))},placeholder:r,disabled:i,className:`h-8 text-sm`})]})}function ie({label:e,value:t,options:n,onCommit:r,placeholder:i=`—`,disabled:a}){let c=e=>e===``?ae:e,l=e=>e===ae?``:e;return(0,M.jsxs)(`div`,{className:`space-y-1`,children:[(0,M.jsx)(y,{className:`text-xs text-muted-foreground`,children:e}),(0,M.jsxs)(d,{value:c(t??``),onValueChange:e=>r(l(e)),disabled:a,children:[(0,M.jsx)(f,{className:`h-8 text-sm`,children:(0,M.jsx)(s,{placeholder:i})}),(0,M.jsx)(E,{children:n.map(e=>(0,M.jsx)(o,{value:c(e.value),children:e.label},e.value))})]})]})}var ae=`__inspector_select_none__`;function oe({label:e,value:t,onCommit:n,disabled:r}){return(0,M.jsxs)(`label`,{className:`flex items-center gap-2 text-xs cursor-pointer select-none`,children:[(0,M.jsx)(`input`,{type:`checkbox`,checked:t,disabled:r,onChange:e=>n(e.target.checked),className:`h-3.5 w-3.5`}),(0,M.jsx)(`span`,{children:e})]})}function se({label:e,onClick:t,disabled:n}){return(0,M.jsx)(x,{variant:`destructive`,size:`sm`,onClick:t,disabled:n,className:`w-full`,children:e})}function ce({message:e}){return(0,M.jsx)(`div`,{className:`text-xs italic text-muted-foreground p-4 text-center`,children:e})}function le(e,t,n){let r=Array.isArray(e)?[...e]:[];return n===null?r.splice(t,1):r[t]=n,r}function ue(e,t){let n=Array.isArray(e)?[...e]:[];return n.push(t),n}function de(e,t,n){let r=Array.isArray(e)?[...e]:[];if(t<0||t>=r.length)return r;let i=Math.max(0,Math.min(r.length-1,n));if(i===t)return r;let[a]=r.splice(t,1);return r.splice(i,0,a),r}function fe(e,t){let n=new Set(t.filter(e=>typeof e==`string`));for(let t=1;t<1e4;t++){let r=`${e}_${t}`;if(!n.has(r))return r}return`${e}_${Date.now()}`}function L(e,t){if(e==null)return!0;let n=typeof e==`string`?e:e.source;if(!n)return!0;try{return R(n.trim(),t)}catch{return!0}}function R(e,t){let n=pe(e,`||`);if(n.length>1)return n.some(e=>R(e.trim(),t));let r=pe(e,`&&`);if(r.length>1)return r.every(e=>R(e.trim(),t));if(e.startsWith(`!`))return!R(e.slice(1).trim(),t);let i=e.match(/^(.+?)\s+in\s+(\[.*\])$/);if(i){let e=me(i[1].trim(),t),n=he(i[2]);return Array.isArray(n)&&n.includes(e)}let a=e.match(/^(.+?)\s*(==|!=)\s*(.+)$/);if(a){let e=me(a[1].trim(),t),n=he(a[3].trim()),r=e=>e==null,i=r(e)&&r(n)?!0:e===n;return a[2]===`==`?i:!i}return!!me(e,t)}function pe(e,t){let n=[],r=0,i=null,a=``;for(let o=0;o<e.length;o++){let s=e[o];if(i){a+=s,s===i&&e[o-1]!==`\\`&&(i=null);continue}if(s===`'`||s===`"`){i=s,a+=s;continue}if(s===`(`||s===`[`?r++:(s===`)`||s===`]`)&&r--,r===0&&e.slice(o,o+t.length)===t&&e[o+t.length]!==`=`){n.push(a),a=``,o+=t.length-1;continue}a+=s}return a&&n.push(a),n}function me(e,t){if(/^['"]/.test(e)||/^-?\d/.test(e)||e===`true`||e===`false`||e===`null`)return he(e);let n=e.split(`.`),r=t;for(let e of n){if(r==null)return;r=r[e]}return r}function he(e){let t=e.trim();if(t===`true`)return!0;if(t===`false`)return!1;if(t===`null`)return null;if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);if(t.startsWith(`'`)&&t.endsWith(`'`)||t.startsWith(`"`)&&t.endsWith(`"`))return t.slice(1,-1);if(t.startsWith(`[`)&&t.endsWith(`]`))try{let e=t.replace(/'([^']*)'/g,(e,t)=>JSON.stringify(t));return JSON.parse(e)}catch{return[]}return t}var ge={object:`Object`,field:`Field`,trigger:`Trigger`,validation:`Validation Rule`,hook:`Hook`,view:`View`,page:`Page`,dashboard:`Dashboard`,app:`Application`,action:`Action`,report:`Report`,flow:`Flow`,approval:`Approval Process`,datasource:`Datasource`,translation:`Translation`,router:`Router`,function:`Function`,service:`Service`,email_template:`Email Template`,permission:`Permission Set`,profile:`Profile`,role:`Role`,agent:`AI Agent`,tool:`AI Tool`,skill:`AI Skill`,package:`Package`,data:`Dataset`,job:`Background Job`,api:`API Endpoint`,connector:`Connector`,mapping:`Field Mapping`,policy:`Policy`,webhook:`Webhook`,theme:`Theme`,sharing_rule:`Sharing Rule`,analytics_cube:`Analytics Cube`},_e={object:`对象`,field:`字段`,trigger:`触发器`,validation:`校验规则`,hook:`钩子`,view:`视图`,page:`页面`,dashboard:`仪表板`,app:`应用`,action:`操作`,report:`报表`,flow:`流程`,approval:`审批流程`,datasource:`数据源`,translation:`翻译`,router:`路由`,function:`函数`,service:`服务`,email_template:`邮件模板`,permission:`权限集`,profile:`配置文件`,role:`角色`,agent:`AI 智能体`,tool:`AI 工具`,skill:`AI 技能`,package:`包`,data:`数据集`,job:`后台任务`,api:`API 端点`,connector:`连接器`,mapping:`字段映射`,policy:`策略`,webhook:`Webhook 回调`,theme:`主题`,sharing_rule:`共享规则`,analytics_cube:`分析立方体`},ve={data:`Data`,ui:`UI`,automation:`Automation`,ai:`AI`,system:`System`,platform:`Platform`,identity:`Identity`,security:`Security`,other:`Other`},ye={data:`数据`,ui:`界面`,automation:`自动化`,ai:`AI`,system:`系统`,platform:`平台`,identity:`身份`,security:`安全`,other:`其他`},be={"engine.directory.title":`All Metadata Types`,"engine.directory.description":`The platform protocol exposes {count} metadata types ({writable} writable at runtime). Click any tile to browse, override, or create instances.`,"engine.directory.search":`Search metadata types…`,"engine.directory.writableOnly":`Writable only`,"engine.directory.quickFind":`Quick Find`,"engine.directory.noMatches":`No matches`,"engine.directory.noMatchesHint":`Adjust your search or filters to see more metadata types.`,"engine.directory.loading":`Loading metadata types…`,"engine.directory.loadFailed":`Failed to load metadata types`,"engine.directory.all":`All`,"engine.directory.diagnosticsLink":`View all issues ({count})`,"engine.directory.invalidTooltip":`{count} invalid item(s) — click to fix`,"engine.directory.warnTooltip":`{count} item(s) with warnings`,"engine.directory.itemCountTooltip":`{count} item(s) of this type`,"engine.directory.allPackages":`All packages`,"engine.directory.packageFilter":`Package`,"engine.home.greetingMorning":`Good morning`,"engine.home.greetingAfternoon":`Good afternoon`,"engine.home.greetingEvening":`Good evening`,"engine.home.subtitle":`Your control center for modeling data, designing experiences, and automating the platform.`,"engine.home.statTypes":`Metadata types`,"engine.home.statWritable":`Runtime-writable`,"engine.home.statPackages":`Packages`,"engine.home.statIssues":`Open issues`,"engine.home.allHealthy":`All healthy`,"engine.home.allHealthyHint":`No validation issues across your metadata.`,"engine.home.issuesHint":`{count} item(s) need attention.`,"engine.home.explore":`Explore`,"engine.home.exploreHint":`Jump into any domain of the platform.`,"engine.home.quickActions":`Quick actions`,"engine.home.quickActionsHint":`Create new metadata in one click.`,"engine.home.newItem":`New {label}`,"engine.home.recent":`Recently viewed`,"engine.home.recentEmpty":`Nothing here yet — items you open will appear for quick access.`,"engine.home.browseAll":`Browse all metadata`,"engine.home.openDiagnostics":`Review diagnostics`,"engine.home.viewDomain":`View`,"engine.home.typesLower":`types`,"engine.home.loading":`Loading your workspace…`,"engine.diagnostics.title":`Metadata Diagnostics`,"engine.diagnostics.description":`Every metadata item that failed load-time validation, grouped by type. Errors block features that depend on the item; warnings are advisory.`,"engine.diagnostics.back":`Back to metadata`,"engine.diagnostics.refresh":`Refresh`,"engine.diagnostics.loading":`Scanning metadata…`,"engine.diagnostics.loadFailed":`Failed to load diagnostics: {error}`,"engine.diagnostics.summary":`{count} issue(s) across {items} items in {types} types`,"engine.diagnostics.cleanTitle":`All clear`,"engine.diagnostics.cleanHint":`Scanned {items} item(s) across {types} type(s) — no issues found.`,"engine.diagnostics.severity.error":`Errors`,"engine.diagnostics.severity.warning":`Errors + Warnings`,"engine.diagnostics.col.name":`Item`,"engine.diagnostics.col.issues":`Issues`,"engine.diagnostics.errorN":`{count} error(s)`,"engine.diagnostics.warnN":`{count} warning(s)`,"engine.diagnostics.more":`+{count} more…`,"engine.list.create":`New`,"engine.list.refresh":`Refresh`,"engine.list.search":`Search name, label, description…`,"engine.list.empty":`No items yet.`,"engine.list.items":`Items`,"engine.list.filtered":`Filtered`,"engine.list.invalid":`Invalid`,"engine.list.warnings":`Warnings`,"engine.list.invalidTitle":`Invalid metadata`,"engine.list.invalidCount":`{count} validation error(s):`,"engine.list.warnTitle":`Metadata warnings`,"engine.list.warnCount":`{count} warning(s):`,"engine.list.allSources":`All sources`,"engine.list.allPackages":`All packages`,"engine.list.packageFilter":`Package`,"engine.list.source.artifact":`Artifact`,"engine.list.source.runtime":`Runtime`,"engine.list.source.artifactDesc":`Shipped by code package`,"engine.list.source.runtimeDesc":`Authored at runtime`,"engine.list.col.name":`Name`,"engine.list.col.label":`Label`,"engine.list.col.source":`Source`,"engine.list.col.object":`Object`,"engine.list.col.type":`Type`,"engine.list.col.description":`Description`,"engine.list.emptyType":`No {type} items registered`,"engine.list.emptyQuery":`No matches for "{query}"`,"engine.list.createHint":`Click "New" above to create the first {type}.`,"engine.list.readOnlyHint":`This type is read-only — instances are defined by code artifacts in packages.`,"engine.edit.save":`Save`,"engine.edit.publish":`Publish`,"engine.edit.publishBlockedDirty":`Save first, then publish.`,"engine.edit.discardDraft":`Discard draft`,"engine.edit.discardDraftConfirm":`Discard the pending draft for {type}/{name}?`,"engine.edit.draftPending":`Pending changes — save lives in a draft. Click Publish to release.`,"engine.edit.rollback":`Rollback to this version`,"engine.edit.rollbackConfirm":`Restore version {version}? This writes the historical body back as the current published overlay.`,"engine.edit.reset":`Reset overlay`,"engine.edit.resetConfirm":`Reset overlay for {type}/{name}?`,"engine.edit.delete":`Delete`,"engine.edit.deleteConfirm":`Delete {type}/{name}? This cannot be undone.`,"engine.edit.lockFull":`This item is locked and cannot be edited or deleted.`,"engine.edit.lockNoOverlay":`This item is locked and cannot be edited.`,"engine.edit.lockNoDelete":`This item is locked and cannot be deleted.`,"engine.edit.history":`History`,"engine.edit.auditTab":`Audit log`,"engine.edit.auditCount":`events`,"engine.edit.auditEmptyTitle":`No audit events yet`,"engine.edit.auditEmptyDescription":`No save, publish, rollback, delete or reset attempts have been recorded for this item. Once someone tries to change it (allowed or denied), the attempt will appear here.`,"engine.edit.auditColTime":`Time`,"engine.edit.auditColActor":`Actor`,"engine.edit.auditColOperation":`Operation`,"engine.edit.auditColOutcome":`Outcome`,"engine.edit.auditColLock":`Lock`,"engine.edit.auditColNote":`Note`,"engine.edit.refresh":`Refresh`,"engine.edit.layers":`Layers`,"engine.layers.code":`Code`,"engine.layers.overlay":`Overlay`,"engine.layers.effective":`Effective`,"engine.layers.diff":`Diff`,"engine.layers.diff.field":`Field`,"engine.layers.diff.code":`Code (artifact)`,"engine.layers.diff.effective":`Effective`,"engine.layers.diff.status":`Status`,"engine.layers.diff.unchanged":`unchanged`,"engine.layers.diff.modified":`modified`,"engine.layers.diff.added":`added`,"engine.layers.diff.removed":`removed`,"engine.layers.diff.showUnchanged":`Show unchanged`,"engine.layers.diff.noChanges":`Overlay matches the code value — no field-level differences.`,"engine.layers.diff.noBaseline":`No code-level artifact to compare against. All fields are runtime-authored.`,"engine.layers.diff.summary":`{modified} modified · {added} added · {removed} removed`,"engine.edit.overlaidCount":`{count} overlaid`,"engine.edit.noOverlay":`no overlay`,"engine.edit.references":`References`,"engine.edit.form":`Form`,"engine.edit.edit":`Edit`,"engine.edit.editOverlay":`Edit overlay`,"engine.edit.createNew":`Create new`,"engine.edit.detail":`Detail`,"engine.edit.preview":`Preview`,"engine.edit.designer":`Designer`,"engine.edit.related":`Related`,"engine.edit.hideInspector":`Hide inspector`,"engine.edit.showInspector":`Show inspector`,"engine.edit.noChanges":`No changes to save`,"engine.edit.inspector":`Inspector`,"engine.edit.inspector.properties":`Properties`,"engine.edit.inspector.source":`Source`,"engine.edit.fullscreen":`Fullscreen`,"engine.edit.exitFullscreen":`Exit fullscreen`,"engine.edit.designMode":`Design`,"engine.edit.previewMode":`Preview`,"engine.inspector.widget.kind":`Widget`,"engine.inspector.widget.close":`Close widget`,"engine.inspector.widget.title":`Title`,"engine.inspector.widget.type":`Type`,"engine.inspector.widget.object":`Data Source (Object)`,"engine.inspector.widget.valueField":`Value Field`,"engine.inspector.widget.categoryField":`Category Field`,"engine.inspector.widget.aggregate":`Aggregate`,"engine.inspector.widget.color":`Color Variant`,"engine.inspector.widget.width":`Width`,"engine.inspector.widget.height":`Height`,"engine.inspector.widget.remove":`Remove widget`,"engine.inspector.widget.datasetSection":`Dataset binding`,"engine.inspector.widget.dataset":`Dataset`,"engine.inspector.widget.datasetPlaceholder":`e.g. sales_pipeline`,"engine.inspector.widget.datasetHint":`Bind a governed dataset. When set, it takes precedence over the inline object query above and the widget renders via the dataset (consistent, cross-object, RLS-enforced).`,"engine.inspector.widget.dimensions":`Dimensions`,"engine.inspector.widget.dimensionsPlaceholder":`e.g. stage, region (comma-separated)`,"engine.inspector.widget.dimensionsHint":`Dataset dimension names to group by. Leave empty for a single-value KPI metric.`,"engine.inspector.widget.values":`Values (measures)`,"engine.inspector.widget.valuesPlaceholder":`e.g. revenue, deal_count (comma-separated)`,"engine.inspector.widget.valuesHint":`Dataset measure names to show.`,"engine.inspector.flowNode.kind":`Node`,"engine.inspector.flowNode.close":`Close node`,"engine.inspector.flowNode.id":`ID`,"engine.inspector.flowNode.label":`Label`,"engine.inspector.flowNode.type":`Node Type`,"engine.inspector.flowNode.description":`Description`,"engine.inspector.flowNode.configuration":`Configuration`,"engine.inspector.flowNode.config":`Config (JSON)`,"engine.inspector.flowNode.advanced":`Advanced (JSON)`,"engine.inspector.flowNode.advancedHint":`Optional custom keys not covered by the form above — most flows don’t need this.`,"engine.inspector.flowNode.noConfig":`No configuration needed for this node type.`,"engine.inspector.flowNode.kv.add":`Add entry`,"engine.inspector.flowNode.kv.key":`Key`,"engine.inspector.flowNode.kv.value":`Value`,"engine.inspector.flowNode.kv.remove":`Remove entry`,"engine.inspector.flowNode.kv.empty":`No entries yet.`,"engine.inspector.flowNode.list.add":`Add item`,"engine.inspector.flowNode.list.item":`Value`,"engine.inspector.flowNode.list.remove":`Remove item`,"engine.inspector.flowNode.list.empty":`No items yet.`,"engine.inspector.flowNode.remove":`Remove node`,"engine.inspector.flowEdge.kind":`Connection`,"engine.inspector.flowEdge.close":`Close connection`,"engine.inspector.flowEdge.missing":`This connection no longer exists.`,"engine.inspector.flowEdge.source":`From`,"engine.inspector.flowEdge.target":`To`,"engine.inspector.flowEdge.routing":`Routing`,"engine.inspector.flowEdge.label":`Branch label`,"engine.inspector.flowEdge.labelHint":`e.g. approve / reject`,"engine.inspector.flowEdge.condition":`Condition`,"engine.inspector.flowEdge.conditionHint":`CEL expression — taken when it evaluates true`,"engine.inspector.flowEdge.isDefault":`Default branch (else)`,"engine.inspector.flowEdge.hint":`The engine follows this connection when its branch label is selected or its condition is met. The default branch is taken when no other matches.`,"engine.inspector.flowEdge.remove":`Remove connection`,"engine.inspector.workflowAction.kind":`Action`,"engine.inspector.workflowAction.close":`Close action`,"engine.inspector.workflowAction.type":`Action Type`,"engine.inspector.workflowAction.name":`Name`,"engine.inspector.workflowAction.config":`Config (JSON)`,"engine.inspector.workflowAction.remove":`Remove action`,"engine.inspector.appNav.kind":`Nav Item`,"engine.inspector.appNav.close":`Close nav item`,"engine.inspector.appNav.label":`Label`,"engine.inspector.appNav.path":`Path / Route`,"engine.inspector.appNav.icon":`Icon`,"engine.inspector.appNav.kindField":`Kind`,"engine.inspector.appNav.remove":`Remove nav item`,"engine.inspector.viewColumn.kind":`Column`,"engine.inspector.viewColumn.close":`Close column`,"engine.inspector.viewColumn.header":`Header`,"engine.inspector.viewColumn.accessorKey":`Field key`,"engine.inspector.viewColumn.width":`Width`,"engine.inspector.viewColumn.align":`Align`,"engine.inspector.viewColumn.sortable":`Sortable`,"engine.inspector.viewColumn.filterable":`Filterable`,"engine.inspector.viewColumn.remove":`Remove column`,"engine.inspector.viewColumn.outlineLabel":`Columns`,"engine.inspector.view.kind":`View`,"engine.inspector.view.close":`Close`,"engine.inspector.view.label":`Label`,"engine.inspector.view.labelPlaceholder":`e.g. All Leads`,"engine.inspector.view.type":`View type`,"engine.inspector.view.object":`Object`,"engine.inspector.view.objectPlaceholder":`e.g. crm_lead`,"engine.inspector.view.noSchema":`Spec schema unavailable — basic properties only.`,"engine.inspector.view.type.grid":`Table / List`,"engine.inspector.view.type.kanban":`Kanban`,"engine.inspector.view.type.calendar":`Calendar`,"engine.inspector.view.type.gallery":`Gallery`,"engine.inspector.view.type.gantt":`Gantt`,"engine.inspector.view.type.timeline":`Timeline`,"engine.inspector.view.type.map":`Map`,"engine.inspector.view.type.chart":`Chart`,"engine.inspector.pageBlock.kind":`Block`,"engine.inspector.pageBlock.close":`Close block`,"engine.inspector.pageBlock.type":`Type`,"engine.inspector.pageBlock.id":`ID`,"engine.inspector.pageBlock.className":`Class names`,"engine.inspector.pageBlock.hidden":`Hidden (CEL)`,"engine.inspector.pageBlock.properties":`Properties`,"engine.inspector.pageBlock.remove":`Remove block`,"engine.inspector.pageBlock.outlineLabel":`Blocks`,"engine.inspector.report.kind":`Report`,"engine.inspector.report.close":`Close report`,"engine.inspector.report.label":`Label`,"engine.inspector.report.labelPlaceholder":`e.g. Pipeline by Stage`,"engine.inspector.report.type":`Report type`,"engine.inspector.report.type.tabular":`Tabular`,"engine.inspector.report.type.summary":`Summary`,"engine.inspector.report.type.matrix":`Matrix`,"engine.inspector.report.type.joined":`Joined`,"engine.inspector.report.dataset":`Dataset`,"engine.inspector.report.datasetPlaceholder":`e.g. sales_metrics`,"engine.inspector.report.values":`Values (measures)`,"engine.inspector.report.valuesEmpty":`No measures yet. Add one from the dataset below.`,"engine.inspector.report.rows":`Rows (dimensions)`,"engine.inspector.report.rowsEmpty":`No dimensions yet. Add one from the dataset below.`,"engine.inspector.report.columnsAcross":`Columns (across dimensions)`,"engine.inspector.report.columnsAcrossEmpty":`No across dimensions yet — the matrix pivots rows × columns.`,"engine.inspector.report.noSchema":`Spec schema unavailable — basic properties only.`,"engine.inspector.moreFields":`More fields`,"engine.inspector.dashboard.kind":`Dashboard`,"engine.inspector.dashboard.close":`Close dashboard`,"engine.inspector.dashboard.label":`Label`,"engine.inspector.dashboard.labelPlaceholder":`e.g. Sales Overview`,"engine.inspector.dashboard.description":`Description`,"engine.inspector.dashboard.descriptionPlaceholder":`Optional summary shown in the header`,"engine.inspector.dashboard.widgets":`Widgets`,"engine.inspector.dashboard.widgetsEmpty":`No widgets yet. Add one below.`,"engine.inspector.dashboard.removeWidget":`Remove widget`,"engine.inspector.dashboard.noSchema":`Spec schema unavailable — basic properties only.`,"engine.inspector.add.widget":`Add widget`,"engine.inspector.add.block":`Add block`,"engine.inspector.add.node":`Add node`,"engine.inspector.add.step":`Add step`,"engine.inspector.add.action":`Add action`,"engine.inspector.add.nav":`Add nav item`,"engine.inspector.reorder.up":`Move up`,"engine.inspector.reorder.down":`Move down`,"engine.edit.overlay":`overlay`,"engine.edit.readOnlyBanner":`Viewing in read-only mode. Click {edit} to make changes.`,"engine.edit.readOnlyTypeBanner":`This metadata type is read-only for safety: it ships executable code or sensitive configuration and cannot be overlaid at runtime. Edit the source in your package and redeploy. To override this lock (use with caution), set {flag} to include {type}, or flip {override} in the registry.`,"engine.edit.artifactLockedBanner":`This item is shipped by a code package and cannot be modified at runtime. You can still create your own {type} from scratch and freely edit or delete it.`,"engine.badge.createOnly":`create-only`,"engine.repeater.empty":`No items. Click + to add.`,"engine.badge.writable":`writable`,"engine.badge.readOnly":`read-only`,"engine.edit.readOnly":`Read-only (runtime overrides disabled).`,"engine.edit.loading":`Loading`,"engine.edit.bespokeDesigner":`Designer`,"engine.edit.readOnlyHint":`Read-only — this metadata type does not allow runtime overrides. Edit the source in the package and redeploy.`,"engine.edit.unsaved":`Unsaved`,"engine.edit.unsavedHint":`You have unsaved changes.`,"engine.edit.diagnostics.title":`This metadata does not match the spec — {count} validation error(s).`,"engine.edit.diagnostics.warnTitle":`{count} warning(s) — review recommended.`,"engine.edit.diagnostics.more":`+{count} more…`,"engine.edit.unsavedLeaveConfirm":`You have unsaved changes. Leave this page anyway?`,"engine.edit.saving":`Saving…`,"engine.edit.savedAt":`Saved {time}`,"engine.edit.autoSaveOn":`Auto-save is on — click to disable`,"engine.edit.autoSaveOff":`Auto-save is off — click to enable`,"engine.edit.autoSavingShortly":`Auto-saving…`,"engine.edit.destructive":`Destructive change`,"engine.edit.destructiveHint":`The change would break existing references. Review the issues and confirm to force-save.`,"engine.edit.forceSave":`Force save`,"engine.cancel":`Cancel`,"engine.form.select":`Select...`,"engine.form.selectEllipsis":`Select…`,"engine.form.add":`Add`,"engine.form.addItem":`Add item`,"engine.form.addRow":`Add row`,"engine.form.remove":`Remove`,"engine.form.removeRow":`Remove row`,"engine.form.dragToReorder":`Drag to reorder`,"engine.form.arrayPlaceholder":`comma, separated, values`,"engine.form.loadingObjects":`Loading objects…`,"engine.form.noObjects":`object_name (no objects detected)`,"engine.form.selectObject":`Select object…`,"engine.form.selectObjectDots":`Select object...`,"engine.form.addObjects":`Add objects...`,"engine.form.loadingFields":`Loading fields…`,"engine.form.selectObjectFirst":`(Select an object first)`,"engine.form.selectField":`Select field…`,"engine.form.selectFieldDots":`Select field...`,"engine.form.addFields":`Add fields...`,"engine.form.noObjectBound":`No object bound`,"engine.form.none":`— None —`,"engine.form.notInObject":`(not in object)`,"engine.form.addField":`Add field…`,"engine.form.addFieldPlain":`Add field`,"engine.form.searchFields":`Search fields…`,"engine.form.allFieldsAdded":`All fields added`,"engine.form.noObjectFields":`No object fields ({error}).`,"engine.form.noMatchingFields":`No matching fields.`,"engine.form.noFieldsOnObject":`No fields on this object.`,"engine.form.added":`Added`,"engine.form.tagsPlaceholder":`Type and press Enter…`,"engine.form.noRows":`No rows. Click + to add.`,"engine.form.masterDetailSchemaError":`master-detail widget requires items.properties on the JSON schema (or an anyOf branch that has them).`,"engine.form.missingField":`Field {field} declared in form layout but missing from schema. Skipping.`,"engine.form.fallbackJson":`widget {widget} — falling back to JSON until a custom renderer is registered.`,"engine.form.keyRequired":`Key is required`,"engine.form.keyExists":`Key "{key}" already exists`,"engine.form.keyPattern":`Key must match {pattern}`,"engine.form.invalidJson":`Invalid JSON`,"engine.form.rootJsonObject":`Root must be a JSON object`,"engine.validation.invalid":`Invalid input`,"engine.validation.pattern":`Invalid string: must match pattern {pattern}`,"engine.validation.expectedStringUndefined":`Required text value`,"engine.validation.expectedType":`Invalid type: expected {expected}, received {received}`,"engine.validation.invalidOption":`Invalid option: expected one of {options}`,"engine.validation.failed":`Validation failed ({count} issues).`,"engine.validation.failedOne":`Validation failed (1 issue).`,"engine.validation.nameRequired":`A name is required.`,"engine.embedded.saved":`Saved.`,"engine.embedded.readOnlyParent":`The parent type is read-only — saving will still attempt a PUT and may be refused by the server.`,"engine.embedded.saveIntoParent":`Save into {parentType}`,"engine.embedded.saveNoPath":`Cannot save: this item has no embeddedPath registered.`,"engine.embedded.noSchema":`No form schema is registered for {type}. Edit the raw JSON below; saving will splice it back into {target}.`,"engine.embedded.readOnly":`Read-only`,"engine.embedded.noPathHint":`No embedded path registered — cannot determine where to write this item back.`,"engine.packages.title":`Packages`,"engine.packages.description":`Author, publish, and manage the packages installed in this environment.`,"engine.packages.refresh":`Refresh`,"engine.packages.import":`Import`,"engine.packages.importing":`Importing…`,"engine.packages.new":`New Package`,"engine.packages.search":`Search packages…`,"engine.packages.showPlatform":`Show platform packages ({count})`,"engine.packages.empty":`No packages`,"engine.packages.emptyCreate":`Create your first package to start authoring metadata.`,"engine.packages.emptyFiltered":`No packages match your filters.`,"engine.packages.loadFailed":`Failed to load packages`,"engine.packages.col.name":`Name`,"engine.packages.col.version":`Version`,"engine.packages.col.scope":`Scope`,"engine.packages.col.status":`Status`,"engine.packages.scope.project":`Project`,"engine.packages.scope.system":`System`,"engine.packages.scope.cloud":`Cloud`,"engine.packages.status.enabled":`Enabled`,"engine.packages.status.disabled":`Disabled`,"engine.packages.import.invalidJson":`Selected file is not valid JSON.`,"engine.packages.import.invalidPackage":`Invalid package file: missing "id" or "name".`,"engine.packages.import.success":`Imported "{id}". Refresh the app switcher to use it.`,"engine.packages.import.failed":`Import failed`,"engine.packages.create.title":`New Package`,"engine.packages.create.description":`Create a project-scoped package to author and publish your own metadata. The id should be reverse-domain (e.g. {example}).`,"engine.packages.create.id":`Package ID`,"engine.packages.create.idInvalid":`Use letters, numbers, dot, dash or underscore (2–255 chars).`,"engine.packages.create.name":`Display name`,"engine.packages.create.version":`Version`,"engine.packages.create.versionInvalid":`Use semantic version, e.g. 0.1.0`,"engine.packages.create.creating":`Creating…`,"engine.packages.create.submit":`Create package`,"engine.packages.create.failed":`Failed to create package`,"engine.packages.detail.type":`Type`,"engine.packages.detail.description":`Description`,"engine.packages.detail.browseMetadata":`Browse this package's metadata`,"engine.packages.detail.pendingChanges":`Pending changes`,"engine.packages.detail.pendingHint":`Drafted, not yet published. Publish the whole app, or review each below.`,"engine.packages.detail.publishApp":`Publish app ({count})`,"engine.packages.detail.discardChanges":`Discard changes ({count})`,"engine.packages.detail.kernelReadOnly":`This is a platform kernel package. Authoring actions are disabled.`,"engine.packages.detail.actions":`Actions`,"engine.packages.detail.publish":`Publish`,"engine.packages.detail.publishing":`Publishing…`,"engine.packages.detail.revert":`Revert`,"engine.packages.detail.enable":`Enable`,"engine.packages.detail.disable":`Disable`,"engine.packages.detail.export":`Export`,"engine.packages.detail.exporting":`Exporting…`,"engine.packages.detail.deleteApp":`Delete app`,"engine.packages.detail.deleting":`Deleting…`,"engine.packages.detail.discarding":`Discarding…`,"engine.packages.detail.actionFailed":`Action failed`,"engine.packages.detail.publishBlocked":`Publish blocked by {count} validation error(s).`,"engine.packages.detail.nothingToPublish":`Nothing to publish.`,"engine.packages.detail.published":`Package published.`,"engine.packages.detail.publishDraftsPartial":`Published {published}; {failed} failed.`,"engine.packages.detail.publishDraftsOk":`App published — all drafts are now live.`,"engine.packages.detail.reverted":`Reverted to last published state.`,"engine.packages.detail.discardDraftsPartial":`Discarded {discarded}; {failed} failed.`,"engine.packages.detail.discardDraftsOk":`All pending changes discarded — back to the published version.`,"engine.packages.detail.deleteConfirm":`Delete "{name}" and all its data?
|
|
3
|
-
|
|
4
|
-
This removes every object, view, dashboard and app in the package AND drops the database tables those objects created. This cannot be undone.`,"engine.packages.detail.deleteFailed":`Delete failed`,"engine.packages.detail.disabled":`Package disabled.`,"engine.packages.detail.enabled":`Package enabled.`,"engine.packages.detail.exported":`Package exported.`,"engine.quickfind.placeholder":`Find metadata types or items… (try 'view', 'account')`,"engine.quickfind.empty":`Type to search across all metadata types.`,"engine.quickfind.title":`Quick Find`,"engine.quickfind.indexing":`Indexing items across`,"engine.quickfind.noMatches":`No matches.`,"engine.breadcrumb.allTypes":`All Metadata Types`,"perm.action.create":`Create`,"perm.action.read":`Read`,"perm.action.edit":`Edit`,"perm.action.delete":`Delete`,"perm.action.transfer":`Transfer ownership`,"perm.action.restore":`Restore from trash`,"perm.action.purge":`Hard delete (purge)`,"perm.action.viewAll":`View All Records (bypass sharing)`,"perm.action.modifyAll":`Modify All Records (bypass sharing)`,"perm.col.object":`Object`,"perm.col.bulk":`Bulk`,"perm.bulk.read":`R`,"perm.bulk.crud":`CRUD`,"perm.bulk.all":`All`,"perm.bulk.none":`None`,"perm.filter.placeholder":`Filter objects…`,"perm.filter.onlyGranted":`Only granted`,"perm.filter.empty":`No objects match the filter.`,"perm.field.name":`Name`,"perm.field.label":`Label`,"perm.field.isProfile":`Is profile`,"perm.field.loading":`Loading fields…`,"perm.field.empty":`No fields registered for this object.`,"perm.field.col.name":`Field`,"perm.field.read":`Read`,"perm.field.edit":`Edit`,"perm.stat.objects":`Objects granted`,"perm.stat.fields":`Fields granted`,"perm.stat.objectsGranted":`Objects granted`,"perm.stat.fieldOverrides":`Field overrides`,"perm.stat.objectsSuffix":`objects`,"perm.subtitle.profile":`Profile`,"perm.subtitle.set":`Permission set`,"perm.loading":`Loading permission set {name}…`,"perm.readOnly":`Read-only (OS_METADATA_WRITABLE not enabled)`,"designer.unsavedChanges":`Unsaved changes`,"designer.editingOverlay":`Editing overlay`,"designer.codeBaseline":`Code baseline`,"designer.canvas.nameToStart":`Name the object in the Properties panel to start designing fields.`,"designer.canvas.noFields":`No fields yet`,"designer.canvas.noFieldsHint":`Add a field to start designing the form. Click any field to edit its properties on the right.`,"designer.canvas.addField":`Add field`,"designer.canvas.addSection":`Add section`,"designer.canvas.addFieldToSection":`Add field to this section`,"designer.canvas.searchFieldType":`Search field type…`,"designer.canvas.noMatchingTypes":`No matching types.`,"designer.canvas.ungrouped":`Ungrouped`,"designer.canvas.emptySection":`Empty section`,"designer.canvas.dropHint":`Drag fields here, or add one below`,"designer.canvas.dropToAssign":`drop to assign`,"designer.canvas.collapseAll":`Collapse all`,"designer.canvas.expandAll":`Expand all`,"designer.canvas.fields":`fields`,"designer.canvas.required":`required`,"designer.canvas.sections":`sections`,"designer.canvas.collapseSection":`Collapse section`,"designer.canvas.expandSection":`Expand section`,"designer.canvas.moveSectionUp":`Move section up`,"designer.canvas.moveSectionDown":`Move section down`,"designer.canvas.removeSection":`Remove section`,"designer.canvas.removeSectionHint":`Remove section (fields move to Ungrouped)`,"designer.canvas.renameHint":`Double-click to rename`,"designer.canvas.sectionN":`Section {n}`,"designer.stub.pickDate":`Pick a date…`,"designer.stub.off":`Off`,"designer.stub.select":`Select…`,"designer.stub.pickMulti":`Pick one or more…`,"designer.stub.uploadImage":`Upload image`,"designer.stub.uploadAvatar":`Upload avatar`,"designer.stub.upload":`Upload {type}`,"designer.stub.qrcode":`QR code`,"designer.stub.computed":`Computed value`,"designer.stub.composite":`Composite — nested sub-fields edit in the inspector.`,"designer.stub.repeater":`Repeater — repeating row group.`,"designer.stub.searchRef":`Search {ref}…`,"designer.stub.chooseRelated":`Choose related object…`,"designer.stub.latLng":`Lat, lng`,"designer.field.kind":`Field`,"designer.field.close":`Close`,"designer.field.missing":`This field no longer exists in the draft.`,"designer.field.remove":`Remove “{label}”`,"designer.field.section.basic":`Basic`,"designer.field.section.advanced":`Advanced`,"designer.field.section.options":`{type} options`,"designer.field.apiName":`API name`,"designer.field.label":`Label`,"designer.field.type":`Type`,"designer.field.required":`Required`,"designer.field.unique":`Unique`,"designer.field.description":`Description`,"designer.field.readonly":`Read-only`,"designer.field.hidden":`Hidden`,"designer.field.indexed":`Indexed`,"designer.field.externalId":`External ID`,"designer.field.trackHistory":`Track history`,"designer.field.placeholder":`Placeholder`,"designer.field.group":`Group`,"designer.field.noGroup":`— No group —`,"designer.field.picklistValues":`Picklist values`,"designer.field.noValues":`No values yet.`,"designer.field.addValue":`Add value`,"designer.field.optValue":`value`,"designer.field.optLabel":`Label`,"designer.field.optColor":`Color`,"designer.field.moveUp":`Move up`,"designer.field.moveDown":`Move down`,"designer.field.removeValue":`Remove`,"designer.field.relatedObject":`Related object`,"designer.field.relationshipName":`Relationship name`,"designer.field.relationshipNameHint":`Inverse collection key on the parent`,"designer.field.objectNamePlaceholder":`object_name`,"designer.field.formula":`Formula (CEL)`,"designer.field.precision":`Precision`,"designer.field.scale":`Scale`,"designer.field.min":`Min`,"designer.field.max":`Max`,"designer.field.maxLength":`Max length`,"designer.object.kind":`Object`,"designer.object.section.basic":`Basic info`,"designer.object.section.basicHint":`Identity, display names & classification`,"designer.object.name":`Name`,"designer.object.nameHint":`snake_case unique identifier (cannot change after create)`,"designer.object.namePlaceholder":`account`,"designer.object.label":`Label`,"designer.object.labelPlaceholder":`e.g. Account`,"designer.object.pluralLabel":`Plural label`,"designer.object.pluralPlaceholder":`e.g. Accounts`,"designer.object.icon":`Icon`,"designer.object.iconHint":`Lucide icon name (e.g. “building”, “users”)`,"designer.object.description":`Description`,"designer.object.descriptionPlaceholder":`What this object represents`,"designer.field.defaultValue":`Default value`,"designer.field.defaultNone":`— None —`,"designer.field.true":`True`,"designer.field.false":`False`,"designer.field.duplicate":`Duplicate field`,"designer.field.copySuffix":` copy`,"designer.field.helpText":`Help text`,"designer.field.helpTextPlaceholder":`Shown below the field on the form`,"designer.field.minLength":`Min length`,"designer.field.conditionalRequired":`Required when (CEL)`,"designer.field.conditionalRequiredHint":`Field becomes required when this predicate is true.`,"designer.canvas.bulkSelected":`{n} selected`,"designer.canvas.bulkMoveTo":`Move to section`,"designer.canvas.bulkDelete":`Delete`,"designer.canvas.bulkClear":`Clear`,"designer.canvas.bulkHint":`Ctrl/⌘-click or Shift-click to select multiple fields.`,"designer.canvas.reviewChanges":`Review changes`,"designer.canvas.reviewExit":`Exit review`,"designer.canvas.reviewVsPublished":`vs last published`,"designer.canvas.diffAdded":`Added`,"designer.canvas.diffChanged":`Changed`,"designer.canvas.diffRemoved":`Removed`,"designer.canvas.diffChangedKeys":`Changed: {keys}`,"designer.draftReview.title":`Review changes`,"designer.draftReview.badge":`{n} pending`,"designer.draftReview.empty":`No changes vs the published version.`,"designer.canvas.askAi":`Ask AI`,"designer.canvas.askAiGenerate":`Generate fields with AI`},xe={"engine.directory.title":`元数据`,"engine.directory.description":`平台协议共暴露 {count} 个元数据类型(其中 {writable} 个支持运行时覆盖)。点击任意卡片即可浏览、覆盖或创建实例。`,"engine.directory.search":`搜索元数据类型…`,"engine.directory.writableOnly":`仅显示可写`,"engine.directory.quickFind":`快速查找`,"engine.directory.noMatches":`没有匹配项`,"engine.directory.noMatchesHint":`调整搜索或筛选条件以查看更多元数据类型。`,"engine.directory.loading":`正在加载元数据类型…`,"engine.directory.loadFailed":`加载元数据类型失败`,"engine.directory.all":`全部`,"engine.directory.diagnosticsLink":`查看全部问题({count})`,"engine.directory.invalidTooltip":`{count} 个无效项 — 点击修复`,"engine.directory.warnTooltip":`{count} 个条目带有警告`,"engine.directory.itemCountTooltip":`此类型共 {count} 项`,"engine.directory.allPackages":`全部软件包`,"engine.directory.packageFilter":`软件包`,"engine.home.greetingMorning":`早上好`,"engine.home.greetingAfternoon":`下午好`,"engine.home.greetingEvening":`晚上好`,"engine.home.subtitle":`建模数据、设计体验、编排自动化的控制中心。`,"engine.home.statTypes":`元数据类型`,"engine.home.statWritable":`可运行时覆盖`,"engine.home.statPackages":`软件包`,"engine.home.statIssues":`待处理问题`,"engine.home.allHealthy":`一切正常`,"engine.home.allHealthyHint":`所有元数据均无校验问题。`,"engine.home.issuesHint":`{count} 项需要关注。`,"engine.home.explore":`探索`,"engine.home.exploreHint":`快速进入平台的各个领域。`,"engine.home.quickActions":`快捷操作`,"engine.home.quickActionsHint":`一键创建新的元数据。`,"engine.home.newItem":`新建{label}`,"engine.home.recent":`最近访问`,"engine.home.recentEmpty":`暂无记录 — 你打开过的项目会显示在这里,方便快速访问。`,"engine.home.browseAll":`浏览全部元数据`,"engine.home.openDiagnostics":`查看诊断`,"engine.home.viewDomain":`查看`,"engine.home.typesLower":`个类型`,"engine.home.loading":`正在加载工作区…`,"engine.diagnostics.title":`元数据诊断`,"engine.diagnostics.description":`所有加载时校验失败的元数据条目,按类型分组。错误会阻塞依赖该条目的功能;警告仅提示。`,"engine.diagnostics.back":`返回元数据`,"engine.diagnostics.refresh":`刷新`,"engine.diagnostics.loading":`正在扫描元数据…`,"engine.diagnostics.loadFailed":`加载诊断失败:{error}`,"engine.diagnostics.summary":`{items} 个条目({types} 个类型)中共发现 {count} 个问题`,"engine.diagnostics.cleanTitle":`一切正常`,"engine.diagnostics.cleanHint":`已扫描 {items} 个条目({types} 个类型),未发现问题。`,"engine.diagnostics.severity.error":`错误`,"engine.diagnostics.severity.warning":`错误 + 警告`,"engine.diagnostics.col.name":`条目`,"engine.diagnostics.col.issues":`问题`,"engine.diagnostics.errorN":`{count} 个错误`,"engine.diagnostics.warnN":`{count} 个警告`,"engine.diagnostics.more":`另有 {count} 个…`,"engine.list.create":`新建`,"engine.list.refresh":`刷新`,"engine.list.search":`搜索名称、标签或描述…`,"engine.list.empty":`暂无数据。`,"engine.list.items":`条目`,"engine.list.filtered":`已筛选`,"engine.list.invalid":`无效`,"engine.list.warnings":`警告`,"engine.list.invalidTitle":`元数据无效`,"engine.list.invalidCount":`{count} 个校验错误:`,"engine.list.warnTitle":`元数据警告`,"engine.list.warnCount":`{count} 个警告:`,"engine.list.allSources":`全部来源`,"engine.list.allPackages":`全部软件包`,"engine.list.packageFilter":`软件包`,"engine.list.source.artifact":`代码包`,"engine.list.source.runtime":`运行时`,"engine.list.source.artifactDesc":`由代码包提供`,"engine.list.source.runtimeDesc":`运行时创建`,"engine.list.col.name":`名称`,"engine.list.col.label":`标签`,"engine.list.col.source":`来源`,"engine.list.col.object":`对象`,"engine.list.col.type":`类型`,"engine.list.col.description":`描述`,"engine.list.emptyType":`暂无 {type} 条目`,"engine.list.emptyQuery":`没有匹配 "{query}" 的结果`,"engine.list.createHint":`点击上方"新建"创建第一个 {type}。`,"engine.list.readOnlyHint":`此类型为只读 — 实例由包内的代码工件定义。`,"engine.edit.save":`保存`,"engine.edit.publish":`发布`,"engine.edit.publishBlockedDirty":`请先保存再发布。`,"engine.edit.discardDraft":`丢弃草稿`,"engine.edit.discardDraftConfirm":`丢弃 {type}/{name} 的待发布草稿?`,"engine.edit.draftPending":`存在未发布的草稿 — 保存仅写入草稿,点击"发布"使其生效。`,"engine.edit.rollback":`回滚到此版本`,"engine.edit.rollbackConfirm":`恢复版本 {version}?该历史内容将被写回作为当前已发布的覆盖层。`,"engine.edit.reset":`重置覆盖`,"engine.edit.resetConfirm":`重置 {type}/{name} 的覆盖层?`,"engine.edit.delete":`删除`,"engine.edit.deleteConfirm":`删除 {type}/{name}?此操作不可撤销。`,"engine.edit.lockFull":`该元数据已锁定,不可编辑或删除。`,"engine.edit.lockNoOverlay":`该元数据已锁定,不可编辑。`,"engine.edit.lockNoDelete":`该元数据已锁定,不可删除。`,"engine.edit.history":`历史`,"engine.edit.auditTab":`审计日志`,"engine.edit.auditCount":`条记录`,"engine.edit.auditEmptyTitle":`暂无审计记录`,"engine.edit.auditEmptyDescription":`该元数据尚未发生任何保存、发布、回滚、删除或重置操作。一旦有人尝试修改(无论允许或拒绝),都会在此显示。`,"engine.edit.auditColTime":`时间`,"engine.edit.auditColActor":`操作人`,"engine.edit.auditColOperation":`操作`,"engine.edit.auditColOutcome":`结果`,"engine.edit.auditColLock":`锁状态`,"engine.edit.auditColNote":`备注`,"engine.edit.refresh":`刷新`,"engine.edit.layers":`层次`,"engine.layers.code":`代码`,"engine.layers.overlay":`覆盖`,"engine.layers.effective":`生效`,"engine.layers.diff":`差异`,"engine.layers.diff.field":`字段`,"engine.layers.diff.code":`代码(工件)`,"engine.layers.diff.effective":`生效值`,"engine.layers.diff.status":`状态`,"engine.layers.diff.unchanged":`未变更`,"engine.layers.diff.modified":`已修改`,"engine.layers.diff.added":`新增`,"engine.layers.diff.removed":`删除`,"engine.layers.diff.showUnchanged":`显示未变更字段`,"engine.layers.diff.noChanges":`覆盖层与代码值一致——没有字段级差异。`,"engine.layers.diff.noBaseline":`没有代码级工件可比对——所有字段均为运行时创建。`,"engine.layers.diff.summary":`{modified} 修改 · {added} 新增 · {removed} 删除`,"engine.edit.overlaidCount":`{count} 处覆盖`,"engine.edit.noOverlay":`无覆盖`,"engine.edit.references":`引用关系`,"engine.edit.form":`表单`,"engine.edit.edit":`编辑`,"engine.edit.editOverlay":`编辑覆盖层`,"engine.edit.createNew":`新建`,"engine.edit.detail":`详情`,"engine.edit.preview":`预览`,"engine.edit.designer":`可视化编辑器`,"engine.edit.related":`关联`,"engine.edit.hideInspector":`隐藏属性面板`,"engine.edit.showInspector":`显示属性面板`,"engine.edit.noChanges":`没有需要保存的更改`,"engine.edit.inspector":`属性`,"engine.edit.inspector.properties":`属性`,"engine.edit.inspector.source":`源码`,"engine.edit.fullscreen":`全屏`,"engine.edit.exitFullscreen":`退出全屏`,"engine.edit.designMode":`设计`,"engine.edit.previewMode":`预览`,"engine.inspector.widget.kind":`组件`,"engine.inspector.widget.close":`关闭组件`,"engine.inspector.widget.title":`标题`,"engine.inspector.widget.type":`类型`,"engine.inspector.widget.object":`数据源(对象)`,"engine.inspector.widget.valueField":`取值字段`,"engine.inspector.widget.categoryField":`分组字段`,"engine.inspector.widget.aggregate":`聚合方式`,"engine.inspector.widget.color":`颜色`,"engine.inspector.widget.width":`宽度`,"engine.inspector.widget.height":`高度`,"engine.inspector.widget.remove":`删除组件`,"engine.inspector.widget.datasetSection":`数据集绑定`,"engine.inspector.widget.dataset":`数据集`,"engine.inspector.widget.datasetPlaceholder":`例如:sales_pipeline`,"engine.inspector.widget.datasetHint":`绑定一个受治理的数据集。设置后优先于上方的内联对象查询,组件改为按数据集渲染(口径一致、可跨对象、强制 RLS)。`,"engine.inspector.widget.dimensions":`维度`,"engine.inspector.widget.dimensionsPlaceholder":`例如:stage, region(逗号分隔)`,"engine.inspector.widget.dimensionsHint":`用于分组的数据集维度名。留空则渲染为单值 KPI。`,"engine.inspector.widget.values":`值(度量)`,"engine.inspector.widget.valuesPlaceholder":`例如:revenue, deal_count(逗号分隔)`,"engine.inspector.widget.valuesHint":`要展示的数据集度量名。`,"engine.inspector.flowNode.kind":`节点`,"engine.inspector.flowNode.close":`关闭节点`,"engine.inspector.flowNode.id":`ID`,"engine.inspector.flowNode.label":`标签`,"engine.inspector.flowNode.type":`节点类型`,"engine.inspector.flowNode.description":`描述`,"engine.inspector.flowNode.configuration":`配置`,"engine.inspector.flowNode.config":`配置(JSON)`,"engine.inspector.flowNode.advanced":`高级(JSON)`,"engine.inspector.flowNode.advancedHint":`上方表单未覆盖的可选自定义键 —— 大多数流程无需填写。`,"engine.inspector.flowNode.noConfig":`此节点类型无需配置。`,"engine.inspector.flowNode.kv.add":`添加条目`,"engine.inspector.flowNode.kv.key":`键`,"engine.inspector.flowNode.kv.value":`值`,"engine.inspector.flowNode.kv.remove":`删除条目`,"engine.inspector.flowNode.kv.empty":`暂无条目。`,"engine.inspector.flowNode.list.add":`添加项`,"engine.inspector.flowNode.list.item":`值`,"engine.inspector.flowNode.list.remove":`删除项`,"engine.inspector.flowNode.list.empty":`暂无项。`,"engine.inspector.flowNode.remove":`删除节点`,"engine.inspector.flowEdge.kind":`连线`,"engine.inspector.flowEdge.close":`关闭连线`,"engine.inspector.flowEdge.missing":`该连线已不存在。`,"engine.inspector.flowEdge.source":`起点`,"engine.inspector.flowEdge.target":`终点`,"engine.inspector.flowEdge.routing":`路由`,"engine.inspector.flowEdge.label":`分支标签`,"engine.inspector.flowEdge.labelHint":`例如 approve / reject`,"engine.inspector.flowEdge.condition":`条件`,"engine.inspector.flowEdge.conditionHint":`CEL 表达式 —— 为真时走此连线`,"engine.inspector.flowEdge.isDefault":`默认分支(else)`,"engine.inspector.flowEdge.hint":`当此连线的分支标签被选中、或其条件成立时,引擎会走这条连线。其余都不匹配时走默认分支。`,"engine.inspector.flowEdge.remove":`删除连线`,"engine.inspector.workflowAction.kind":`动作`,"engine.inspector.workflowAction.close":`关闭动作`,"engine.inspector.workflowAction.type":`动作类型`,"engine.inspector.workflowAction.name":`名称`,"engine.inspector.workflowAction.config":`配置(JSON)`,"engine.inspector.workflowAction.remove":`删除动作`,"engine.inspector.appNav.kind":`导航项`,"engine.inspector.appNav.close":`关闭导航项`,"engine.inspector.appNav.label":`名称`,"engine.inspector.appNav.path":`路径 / 路由`,"engine.inspector.appNav.icon":`图标`,"engine.inspector.appNav.kindField":`类型`,"engine.inspector.appNav.remove":`删除导航项`,"engine.inspector.viewColumn.kind":`列`,"engine.inspector.viewColumn.close":`关闭列`,"engine.inspector.viewColumn.header":`表头`,"engine.inspector.viewColumn.accessorKey":`字段键`,"engine.inspector.viewColumn.width":`宽度`,"engine.inspector.viewColumn.align":`对齐`,"engine.inspector.viewColumn.sortable":`可排序`,"engine.inspector.viewColumn.filterable":`可过滤`,"engine.inspector.viewColumn.remove":`删除列`,"engine.inspector.viewColumn.outlineLabel":`列`,"engine.inspector.view.kind":`视图`,"engine.inspector.view.close":`关闭`,"engine.inspector.view.label":`名称`,"engine.inspector.view.labelPlaceholder":`例如:全部线索`,"engine.inspector.view.type":`视图类型`,"engine.inspector.view.object":`对象`,"engine.inspector.view.objectPlaceholder":`例如:crm_lead`,"engine.inspector.view.noSchema":`spec 模式不可用 —— 仅显示基础属性。`,"engine.inspector.view.type.grid":`表格 / 列表`,"engine.inspector.view.type.kanban":`看板`,"engine.inspector.view.type.calendar":`日历`,"engine.inspector.view.type.gallery":`画廊`,"engine.inspector.view.type.gantt":`甘特图`,"engine.inspector.view.type.timeline":`时间线`,"engine.inspector.view.type.map":`地图`,"engine.inspector.view.type.chart":`图表`,"engine.inspector.pageBlock.kind":`区块`,"engine.inspector.pageBlock.close":`关闭区块`,"engine.inspector.pageBlock.type":`类型`,"engine.inspector.pageBlock.id":`ID`,"engine.inspector.pageBlock.className":`类名`,"engine.inspector.pageBlock.hidden":`隐藏条件(CEL)`,"engine.inspector.pageBlock.properties":`属性`,"engine.inspector.pageBlock.remove":`删除区块`,"engine.inspector.pageBlock.outlineLabel":`区块`,"engine.inspector.report.kind":`报表`,"engine.inspector.report.close":`关闭报表`,"engine.inspector.report.label":`显示名`,"engine.inspector.report.labelPlaceholder":`例如:按阶段统计的销售管道`,"engine.inspector.report.type":`报表类型`,"engine.inspector.report.type.tabular":`表格`,"engine.inspector.report.type.summary":`汇总`,"engine.inspector.report.type.matrix":`矩阵`,"engine.inspector.report.type.joined":`联合`,"engine.inspector.report.dataset":`数据集`,"engine.inspector.report.datasetPlaceholder":`例如:sales_metrics`,"engine.inspector.report.values":`值(度量)`,"engine.inspector.report.valuesEmpty":`还没有度量。从下方数据集中添加。`,"engine.inspector.report.rows":`行(维度)`,"engine.inspector.report.rowsEmpty":`还没有维度。从下方数据集中添加。`,"engine.inspector.report.columnsAcross":`列(横向维度)`,"engine.inspector.report.columnsAcrossEmpty":`还没有横向维度——矩阵按 行 × 列 透视。`,"engine.inspector.report.noSchema":`规格 schema 不可用 —— 仅显示基础属性。`,"engine.inspector.moreFields":`更多字段`,"engine.inspector.dashboard.kind":`仪表盘`,"engine.inspector.dashboard.close":`关闭仪表盘`,"engine.inspector.dashboard.label":`显示名`,"engine.inspector.dashboard.labelPlaceholder":`例如:销售总览`,"engine.inspector.dashboard.description":`描述`,"engine.inspector.dashboard.descriptionPlaceholder":`可选,显示在头部的摘要`,"engine.inspector.dashboard.widgets":`组件`,"engine.inspector.dashboard.widgetsEmpty":`还没有组件。在下方添加。`,"engine.inspector.dashboard.removeWidget":`删除组件`,"engine.inspector.dashboard.noSchema":`规格 schema 不可用 —— 仅显示基础属性。`,"engine.inspector.add.widget":`添加组件`,"engine.inspector.add.block":`添加区块`,"engine.inspector.add.node":`添加节点`,"engine.inspector.add.step":`添加步骤`,"engine.inspector.add.action":`添加动作`,"engine.inspector.add.nav":`添加导航项`,"engine.inspector.reorder.up":`上移`,"engine.inspector.reorder.down":`下移`,"engine.edit.overlay":`覆盖`,"engine.edit.readOnlyBanner":`当前为只读模式。点击 {edit} 进行修改。`,"engine.edit.readOnlyTypeBanner":`出于安全考虑,此元数据类型为只读:它包含可执行代码或敏感配置,不允许在运行时通过覆盖层修改。请编辑包内源代码后重新部署。如需临时解除限制(请谨慎使用),可将 {flag} 设置为包含 {type},或在注册表中开启 {override}。`,"engine.edit.artifactLockedBanner":`此条目由代码包提供,无法在运行时修改。但您可以新建自己的 {type},并自由地编辑或删除。`,"engine.badge.createOnly":`仅可新建`,"engine.repeater.empty":`暂无条目。点击 + 添加。`,"engine.badge.writable":`可写`,"engine.badge.readOnly":`只读`,"engine.edit.readOnly":`只读(运行时覆盖未启用)。`,"engine.edit.loading":`加载中`,"engine.edit.bespokeDesigner":`可视化编辑器`,"engine.edit.readOnlyHint":`只读 — 该元数据类型不支持运行时覆盖。请修改包内源代码并重新部署。`,"engine.edit.unsaved":`未保存`,"engine.edit.diagnostics.title":`元数据不符合规范 — 共 {count} 个校验错误。`,"engine.edit.diagnostics.warnTitle":`{count} 个警告 — 建议复查。`,"engine.edit.diagnostics.more":`还有 {count} 个…`,"engine.edit.unsavedHint":`当前存在未保存的修改。`,"engine.edit.unsavedLeaveConfirm":`当前存在未保存的修改,确定离开此页面吗?`,"engine.edit.saving":`保存中…`,"engine.edit.savedAt":`已保存 {time}`,"engine.edit.autoSaveOn":`自动保存已开启,点击关闭`,"engine.edit.autoSaveOff":`自动保存已关闭,点击开启`,"engine.edit.autoSavingShortly":`即将自动保存…`,"engine.edit.destructive":`破坏性变更`,"engine.edit.destructiveHint":`该修改会破坏现有引用关系。请检查问题清单后确认强制保存。`,"engine.edit.forceSave":`强制保存`,"engine.cancel":`取消`,"engine.form.select":`请选择...`,"engine.form.selectEllipsis":`请选择…`,"engine.form.add":`添加`,"engine.form.addItem":`添加项`,"engine.form.addRow":`添加行`,"engine.form.remove":`删除`,"engine.form.removeRow":`删除行`,"engine.form.dragToReorder":`拖动排序`,"engine.form.arrayPlaceholder":`用逗号分隔多个值`,"engine.form.loadingObjects":`正在加载对象…`,"engine.form.noObjects":`object_name(未检测到对象)`,"engine.form.selectObject":`选择对象…`,"engine.form.selectObjectDots":`选择对象...`,"engine.form.addObjects":`添加对象...`,"engine.form.loadingFields":`正在加载字段…`,"engine.form.selectObjectFirst":`(请先选择对象)`,"engine.form.selectField":`选择字段…`,"engine.form.selectFieldDots":`选择字段...`,"engine.form.addFields":`添加字段...`,"engine.form.noObjectBound":`未绑定对象`,"engine.form.none":`— 无 —`,"engine.form.notInObject":`(不在对象中)`,"engine.form.addField":`添加字段…`,"engine.form.addFieldPlain":`添加字段`,"engine.form.searchFields":`搜索字段…`,"engine.form.allFieldsAdded":`已添加全部字段`,"engine.form.noObjectFields":`没有对象字段({error})。`,"engine.form.noMatchingFields":`没有匹配字段。`,"engine.form.noFieldsOnObject":`此对象暂无字段。`,"engine.form.added":`已添加`,"engine.form.tagsPlaceholder":`输入后按 Enter…`,"engine.form.noRows":`暂无行。点击 + 添加。`,"engine.form.masterDetailSchemaError":`master-detail 组件要求 JSON Schema 上存在 items.properties(或 anyOf 分支包含该结构)。`,"engine.form.missingField":`表单布局中声明了字段 {field},但 schema 中不存在,已跳过。`,"engine.form.fallbackJson":`组件 {widget} 尚未注册自定义渲染器,暂时使用 JSON 编辑。`,"engine.form.keyRequired":`键名必填`,"engine.form.keyExists":`键名 "{key}" 已存在`,"engine.form.keyPattern":`键名必须匹配 {pattern}`,"engine.form.invalidJson":`JSON 无效`,"engine.form.rootJsonObject":`根节点必须是 JSON 对象`,"engine.validation.invalid":`输入无效`,"engine.validation.pattern":`格式无效:必须匹配 {pattern}`,"engine.validation.expectedStringUndefined":`必填,需输入文本`,"engine.validation.expectedType":`类型无效:应为 {expected},当前为 {received}`,"engine.validation.invalidOption":`选项无效:必须是 {options} 之一`,"engine.validation.failed":`校验失败({count} 个问题)。`,"engine.validation.failedOne":`校验失败(1 个问题)。`,"engine.validation.nameRequired":`名称必填。`,"engine.embedded.saved":`已保存。`,"engine.embedded.readOnlyParent":`父类型为只读;仍会尝试 PUT 保存,但服务器可能拒绝。`,"engine.embedded.saveIntoParent":`保存到 {parentType}`,"engine.embedded.saveNoPath":`无法保存:此条目没有注册 embeddedPath。`,"engine.embedded.noSchema":`{type} 未注册表单 schema。请在下方编辑原始 JSON;保存时会写回 {target}。`,"engine.embedded.readOnly":`只读`,"engine.embedded.noPathHint":`未注册 embeddedPath,无法判断该条目应写回哪里。`,"engine.packages.title":`软件包`,"engine.packages.description":`创建、发布和管理此环境中安装的软件包。`,"engine.packages.refresh":`刷新`,"engine.packages.import":`导入`,"engine.packages.importing":`导入中…`,"engine.packages.new":`新建软件包`,"engine.packages.search":`搜索软件包…`,"engine.packages.showPlatform":`显示平台软件包({count})`,"engine.packages.empty":`暂无软件包`,"engine.packages.emptyCreate":`创建第一个软件包以开始编写元数据。`,"engine.packages.emptyFiltered":`没有匹配筛选条件的软件包。`,"engine.packages.loadFailed":`加载软件包失败`,"engine.packages.col.name":`名称`,"engine.packages.col.version":`版本`,"engine.packages.col.scope":`范围`,"engine.packages.col.status":`状态`,"engine.packages.scope.project":`项目`,"engine.packages.scope.system":`系统`,"engine.packages.scope.cloud":`云端`,"engine.packages.status.enabled":`已启用`,"engine.packages.status.disabled":`已禁用`,"engine.packages.import.invalidJson":`所选文件不是有效 JSON。`,"engine.packages.import.invalidPackage":`无效的软件包文件:缺少 "id" 或 "name"。`,"engine.packages.import.success":`已导入 "{id}"。刷新应用切换器后即可使用。`,"engine.packages.import.failed":`导入失败`,"engine.packages.create.title":`新建软件包`,"engine.packages.create.description":`创建项目范围的软件包,用来编写并发布自己的元数据。ID 建议使用反向域名格式(例如 {example})。`,"engine.packages.create.id":`软件包 ID`,"engine.packages.create.idInvalid":`只能使用字母、数字、点、短横线或下划线(2–255 个字符)。`,"engine.packages.create.name":`显示名称`,"engine.packages.create.version":`版本`,"engine.packages.create.versionInvalid":`请使用语义化版本号,例如 0.1.0`,"engine.packages.create.creating":`创建中…`,"engine.packages.create.submit":`创建软件包`,"engine.packages.create.failed":`创建软件包失败`,"engine.packages.detail.type":`类型`,"engine.packages.detail.description":`描述`,"engine.packages.detail.browseMetadata":`浏览此软件包的元数据`,"engine.packages.detail.pendingChanges":`待发布更改`,"engine.packages.detail.pendingHint":`草稿尚未发布。可以发布整个应用,也可以逐项查看。`,"engine.packages.detail.publishApp":`发布应用({count})`,"engine.packages.detail.discardChanges":`丢弃更改({count})`,"engine.packages.detail.kernelReadOnly":`这是平台内核软件包,已禁用编写操作。`,"engine.packages.detail.actions":`操作`,"engine.packages.detail.publish":`发布`,"engine.packages.detail.publishing":`发布中…`,"engine.packages.detail.revert":`还原`,"engine.packages.detail.enable":`启用`,"engine.packages.detail.disable":`禁用`,"engine.packages.detail.export":`导出`,"engine.packages.detail.exporting":`导出中…`,"engine.packages.detail.deleteApp":`删除应用`,"engine.packages.detail.deleting":`删除中…`,"engine.packages.detail.discarding":`丢弃中…`,"engine.packages.detail.actionFailed":`操作失败`,"engine.packages.detail.publishBlocked":`发布被 {count} 个校验错误阻止。`,"engine.packages.detail.nothingToPublish":`没有可发布的内容。`,"engine.packages.detail.published":`软件包已发布。`,"engine.packages.detail.publishDraftsPartial":`已发布 {published} 项;{failed} 项失败。`,"engine.packages.detail.publishDraftsOk":`应用已发布,所有草稿均已生效。`,"engine.packages.detail.reverted":`已还原到上次发布状态。`,"engine.packages.detail.discardDraftsPartial":`已丢弃 {discarded} 项;{failed} 项失败。`,"engine.packages.detail.discardDraftsOk":`所有待发布更改已丢弃,已回到发布版本。`,"engine.packages.detail.deleteConfirm":`删除 "{name}" 及其所有数据?
|
|
5
|
-
|
|
6
|
-
这会移除此软件包中的所有对象、视图、仪表板和应用,并删除这些对象创建的数据库表。此操作不可撤销。`,"engine.packages.detail.deleteFailed":`删除失败`,"engine.packages.detail.disabled":`软件包已禁用。`,"engine.packages.detail.enabled":`软件包已启用。`,"engine.packages.detail.exported":`软件包已导出。`,"engine.quickfind.placeholder":`搜索元数据类型或条目…(如:view、account)`,"engine.quickfind.empty":`输入关键字以搜索所有元数据类型。`,"engine.quickfind.title":`快速查找`,"engine.quickfind.indexing":`正在索引所有类型,共`,"engine.quickfind.noMatches":`没有匹配项。`,"engine.breadcrumb.allTypes":`元数据`,"perm.action.create":`创建`,"perm.action.read":`读取`,"perm.action.edit":`编辑`,"perm.action.delete":`删除`,"perm.action.transfer":`转移所有者`,"perm.action.restore":`从回收站恢复`,"perm.action.purge":`彻底删除`,"perm.action.viewAll":`查看所有记录(绕过共享规则)`,"perm.action.modifyAll":`修改所有记录(绕过共享规则)`,"perm.col.object":`对象`,"perm.col.bulk":`批量`,"perm.bulk.read":`读`,"perm.bulk.crud":`增改删`,"perm.bulk.all":`全选`,"perm.bulk.none":`清空`,"perm.filter.placeholder":`筛选对象…`,"perm.filter.onlyGranted":`只看已授权`,"perm.filter.empty":`没有匹配的对象。`,"perm.field.name":`名称`,"perm.field.label":`标签`,"perm.field.isProfile":`作为 Profile`,"perm.field.loading":`加载字段中…`,"perm.field.empty":`该对象未注册字段。`,"perm.field.col.name":`字段`,"perm.field.read":`读`,"perm.field.edit":`改`,"perm.stat.objects":`已授权对象`,"perm.stat.fields":`已授权字段`,"perm.stat.objectsGranted":`已授权对象`,"perm.stat.fieldOverrides":`字段覆盖`,"perm.stat.objectsSuffix":`个对象`,"perm.subtitle.profile":`Profile`,"perm.subtitle.set":`权限集`,"perm.loading":`加载权限集 {name}…`,"perm.readOnly":`只读(OS_METADATA_WRITABLE 未启用)`,"designer.unsavedChanges":`未保存的修改`,"designer.editingOverlay":`编辑覆盖层`,"designer.codeBaseline":`代码基线`,"designer.canvas.nameToStart":`在右侧属性面板中为对象命名,即可开始设计字段。`,"designer.canvas.noFields":`尚无字段`,"designer.canvas.noFieldsHint":`添加字段以开始设计表单。点击任意字段可在右侧编辑其属性。`,"designer.canvas.addField":`添加字段`,"designer.canvas.addSection":`添加分组`,"designer.canvas.addFieldToSection":`向此分组添加字段`,"designer.canvas.searchFieldType":`搜索字段类型…`,"designer.canvas.noMatchingTypes":`没有匹配的类型。`,"designer.canvas.ungrouped":`未分组`,"designer.canvas.emptySection":`空分组`,"designer.canvas.dropHint":`将字段拖到此处,或在下方添加`,"designer.canvas.dropToAssign":`拖放以归入此分组`,"designer.canvas.collapseAll":`全部折叠`,"designer.canvas.expandAll":`全部展开`,"designer.canvas.fields":`个字段`,"designer.canvas.required":`个必填`,"designer.canvas.sections":`个分组`,"designer.canvas.collapseSection":`折叠分组`,"designer.canvas.expandSection":`展开分组`,"designer.canvas.moveSectionUp":`上移分组`,"designer.canvas.moveSectionDown":`下移分组`,"designer.canvas.removeSection":`删除分组`,"designer.canvas.removeSectionHint":`删除分组(字段移至未分组)`,"designer.canvas.renameHint":`双击重命名`,"designer.canvas.sectionN":`分组 {n}`,"designer.stub.pickDate":`选择日期…`,"designer.stub.off":`关闭`,"designer.stub.select":`请选择…`,"designer.stub.pickMulti":`选择一项或多项…`,"designer.stub.uploadImage":`上传图片`,"designer.stub.uploadAvatar":`上传头像`,"designer.stub.upload":`上传{type}`,"designer.stub.qrcode":`二维码`,"designer.stub.computed":`计算值`,"designer.stub.composite":`复合字段 — 子字段在右侧属性面板中编辑。`,"designer.stub.repeater":`重复字段 — 可重复的行分组。`,"designer.stub.searchRef":`搜索 {ref}…`,"designer.stub.chooseRelated":`选择关联对象…`,"designer.stub.latLng":`经纬度`,"designer.field.kind":`字段`,"designer.field.close":`关闭`,"designer.field.missing":`该字段已不在草稿中。`,"designer.field.remove":`删除“{label}”`,"designer.field.section.basic":`基础`,"designer.field.section.advanced":`高级`,"designer.field.section.options":`{type} 选项`,"designer.field.apiName":`API 名称`,"designer.field.label":`显示名`,"designer.field.type":`类型`,"designer.field.required":`必填`,"designer.field.unique":`唯一`,"designer.field.description":`描述`,"designer.field.readonly":`只读`,"designer.field.hidden":`隐藏`,"designer.field.indexed":`索引`,"designer.field.externalId":`外部 ID`,"designer.field.trackHistory":`记录历史`,"designer.field.placeholder":`占位符`,"designer.field.group":`分组`,"designer.field.noGroup":`— 无分组 —`,"designer.field.picklistValues":`选项值`,"designer.field.noValues":`暂无选项值。`,"designer.field.addValue":`添加选项`,"designer.field.optValue":`值`,"designer.field.optLabel":`显示名`,"designer.field.optColor":`颜色`,"designer.field.moveUp":`上移`,"designer.field.moveDown":`下移`,"designer.field.removeValue":`删除`,"designer.field.relatedObject":`关联对象`,"designer.field.relationshipName":`关系名称`,"designer.field.relationshipNameHint":`父对象上的反向集合键`,"designer.field.objectNamePlaceholder":`object_name`,"designer.field.formula":`公式 (CEL)`,"designer.field.precision":`精度`,"designer.field.scale":`小数位`,"designer.field.min":`最小值`,"designer.field.max":`最大值`,"designer.field.maxLength":`最大长度`,"designer.object.kind":`对象`,"designer.object.section.basic":`基础信息`,"designer.object.section.basicHint":`标识、显示名与分类`,"designer.object.name":`名称`,"designer.object.nameHint":`snake_case 唯一标识符(创建后不可修改)`,"designer.object.namePlaceholder":`account`,"designer.object.label":`显示名`,"designer.object.labelPlaceholder":`如:客户`,"designer.object.pluralLabel":`复数显示名`,"designer.object.pluralPlaceholder":`如:客户列表`,"designer.object.icon":`图标`,"designer.object.iconHint":`Lucide 图标名称(如 “building”、“users”)`,"designer.object.description":`描述`,"designer.object.descriptionPlaceholder":`该对象代表什么`,"designer.field.defaultValue":`默认值`,"designer.field.defaultNone":`— 无 —`,"designer.field.true":`是`,"designer.field.false":`否`,"designer.field.duplicate":`复制字段`,"designer.field.copySuffix":` 副本`,"designer.field.helpText":`帮助文本`,"designer.field.helpTextPlaceholder":`显示在表单字段下方`,"designer.field.minLength":`最小长度`,"designer.field.conditionalRequired":`条件必填 (CEL)`,"designer.field.conditionalRequiredHint":`当此表达式为真时,该字段变为必填。`,"designer.canvas.bulkSelected":`已选 {n} 项`,"designer.canvas.bulkMoveTo":`移至分组`,"designer.canvas.bulkDelete":`删除`,"designer.canvas.bulkClear":`取消选择`,"designer.canvas.bulkHint":`按住 Ctrl/⌘ 单击或 Shift 单击可多选字段。`,"designer.canvas.reviewChanges":`查看变更`,"designer.canvas.reviewExit":`退出查看`,"designer.canvas.reviewVsPublished":`对比已发布版本`,"designer.canvas.diffAdded":`新增`,"designer.canvas.diffChanged":`修改`,"designer.canvas.diffRemoved":`删除`,"designer.canvas.diffChangedKeys":`变更:{keys}`,"designer.draftReview.title":`查看变更`,"designer.draftReview.badge":`{n} 项待审`,"designer.draftReview.empty":`与已发布版本相比没有变更。`,"designer.canvas.askAi":`问 AI`,"designer.canvas.askAiGenerate":`用 AI 生成字段`};function z(e){return(e??``).toLowerCase().startsWith(`zh`)?{types:_e,domains:ye,strings:xe}:{types:ge,domains:ve,strings:be}}function Se(e,t,n){return z(t).types[e]||(n??e)}function Ce(e,t){return z(t).domains[e]??e}function B(e,t){return z(t).strings[e]??e}function V(e,t,n){return B(e,t).replace(/\{(\w+)\}/g,(e,t)=>t in n?String(n[t]):`{${t}}`)}function we(e,t){let n=String(e??``).trim(),r=n.toLowerCase();if(!n||r===`invalid`||r===`invalid input`)return B(`engine.validation.invalid`,t);let i=n.match(/^Invalid string: must match pattern (.+)$/);if(i)return V(`engine.validation.pattern`,t,{pattern:i[1]});let a=n.match(/^Invalid input: expected (.+), received (.+)$/);if(a){let e=a[1],n=a[2];return e===`string`&&n===`undefined`?B(`engine.validation.expectedStringUndefined`,t):V(`engine.validation.expectedType`,t,{expected:e,received:n})}let o=n.match(/^Invalid option: expected one of (.+)$/);return o?V(`engine.validation.invalidOption`,t,{options:o[1]}):r===`required`||r===`is required`?B(`engine.validation.nameRequired`,t):r===`invalid json`?B(`engine.form.invalidJson`,t):n}function H(){return typeof navigator<`u`&&/^zh/i.test(navigator.language)?`zh-CN`:`en-US`}function Te({id:e,value:t,onChange:n,readOnly:r,context:i}){let a=H(),c=i?.objectNames??[],l=t==null?``:String(t);return i?.objectsLoading?(0,M.jsx)(g,{id:e,value:l,disabled:!0,placeholder:B(`engine.form.loadingObjects`,a)}):c.length===0?(0,M.jsx)(g,{id:e,value:l,disabled:r,onChange:e=>n(e.target.value||void 0),placeholder:B(`engine.form.noObjects`,a)}):(0,M.jsxs)(d,{value:l,onValueChange:e=>n(e||void 0),disabled:r,children:[(0,M.jsx)(f,{id:e,children:(0,M.jsx)(s,{placeholder:B(`engine.form.selectObject`,a)})}),(0,M.jsx)(E,{children:c.map(e=>(0,M.jsx)(o,{value:e,children:e},e))})]})}function Ee({id:e,value:t,onChange:n,readOnly:r,context:i,fieldSpec:a}){let c=H(),l=i?.objectNames??[],u=a?.multiple??!1,p=k.useMemo(()=>t?Array.isArray(t)?t.map(String):String(t).split(`,`).map(e=>e.trim()).filter(Boolean):[],[t]),m=e=>{if(!r){if(!u){n(e);return}n(p.includes(e)?p.filter(t=>t!==e):[...p,e])}},h=e=>{if(r)return;let t=p.filter(t=>t!==e);n(u?t:``)};return i?.objectsLoading?(0,M.jsx)(g,{id:e,value:B(`engine.form.loadingObjects`,c),readOnly:!0,disabled:!0}):(0,M.jsxs)(`div`,{className:`space-y-2`,children:[p.length>0&&(0,M.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:p.map(e=>(0,M.jsxs)(`div`,{className:`inline-flex items-center gap-1 rounded bg-secondary px-2 py-1 text-sm`,children:[(0,M.jsx)(`span`,{children:e}),!r&&(0,M.jsx)(`button`,{type:`button`,onClick:()=>h(e),className:`text-muted-foreground hover:text-foreground`,children:`×`})]},e))}),(0,M.jsxs)(d,{value:``,onValueChange:m,disabled:r||l.length===0,children:[(0,M.jsx)(f,{id:e,children:(0,M.jsx)(s,{placeholder:B(u?`engine.form.addObjects`:`engine.form.selectObjectDots`,c)})}),(0,M.jsx)(E,{children:l.map(e=>(0,M.jsxs)(o,{value:e,disabled:!u&&p.includes(e),children:[e,p.includes(e)&&` ✓`]},e))})]})]})}function De({id:e,value:t,onChange:n,readOnly:r,fieldSpec:i,formData:a}){let c=H(),[l,u]=k.useState([]),[p,m]=k.useState(!1),h=i?.dependsOn||i?.reference||`objectName`,_=Array.isArray(h)?h[0]:h,v=a?.[_];k.useEffect(()=>{if(!v){u([]);return}m(!0),fetch(`/api/v1/objects/${v}/fields`).then(e=>e.json()).then(e=>{u(e.fields||[]),m(!1)}).catch(e=>{console.error(`Failed to load fields:`,e),u([]),m(!1)})},[v]);let y=i?.multiple??!1,b=k.useMemo(()=>t?Array.isArray(t)?t.map(String):String(t).split(`,`).map(e=>e.trim()).filter(Boolean):[],[t]),x=e=>{if(!r){if(!y){n(e);return}n(b.includes(e)?b.filter(t=>t!==e):[...b,e])}},S=e=>{if(r)return;let t=b.filter(t=>t!==e);n(y?t:``)};return v?p?(0,M.jsx)(g,{id:e,value:B(`engine.form.loadingFields`,c),readOnly:!0,disabled:!0}):(0,M.jsxs)(`div`,{className:`space-y-2`,children:[b.length>0&&(0,M.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:b.map(e=>{let t=l.find(t=>t.name===e);return(0,M.jsxs)(`div`,{className:`inline-flex items-center gap-1 rounded bg-secondary px-2 py-1 text-sm`,children:[(0,M.jsx)(`span`,{children:t?.label||e}),(0,M.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:t?.type}),!r&&(0,M.jsx)(`button`,{type:`button`,onClick:()=>S(e),className:`text-muted-foreground hover:text-foreground`,children:`×`})]},e)})}),(0,M.jsxs)(d,{value:``,onValueChange:x,disabled:r||l.length===0,children:[(0,M.jsx)(f,{id:e,children:(0,M.jsx)(s,{placeholder:B(y?`engine.form.addFields`:`engine.form.selectFieldDots`,c)})}),(0,M.jsx)(E,{children:l.map(e=>(0,M.jsx)(o,{value:e.name,disabled:!y&&b.includes(e.name),children:(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{children:e.label||e.name}),(0,M.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.type}),b.includes(e.name)&&` ✓`]})},e.name))})]})]}):(0,M.jsx)(g,{id:e,value:B(`engine.form.selectObjectFirst`,c),readOnly:!0,disabled:!0})}function Oe({schema:e,value:t,onChange:n,readOnly:r,context:i}){let a=H(),o=e;if(o?.anyOf||o?.oneOf){let e=(o.anyOf??o.oneOf).find(e=>e?.type===`array`&&e?.items?.type===`object`);e&&(o={...o,...e})}let s=o?.items??{},c=s.properties??{},l=new Set(Array.isArray(s.required)?s.required:[]),d=Array.isArray(t)?t:[],f=Object.keys(c);if(f.length===0)return(0,M.jsx)(`div`,{className:`rounded border border-dashed border-amber-500/40 bg-amber-500/5 p-2 text-xs text-amber-700 dark:text-amber-300`,children:B(`engine.form.masterDetailSchemaError`,a)});function p(e,t){let r=d.slice();r[e]={...r[e]??{},...t},n(r)}function m(){n([...d,{}])}function h(e){let t=d.slice();t.splice(e,1),n(t)}return(0,M.jsxs)(`div`,{className:`space-y-2`,children:[(0,M.jsx)(`div`,{className:`overflow-x-auto rounded border border-border/40`,children:(0,M.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,M.jsx)(`thead`,{className:`bg-muted/40`,children:(0,M.jsxs)(`tr`,{children:[f.map(e=>(0,M.jsxs)(`th`,{className:`px-2 py-1.5 text-left text-xs font-medium text-muted-foreground`,children:[c[e]?.title??e,l.has(e)&&(0,M.jsx)(`span`,{className:`text-destructive ml-0.5`,children:`*`})]},e)),(0,M.jsx)(`th`,{className:`w-8`})]})}),(0,M.jsxs)(`tbody`,{children:[d.length===0&&(0,M.jsx)(`tr`,{children:(0,M.jsx)(`td`,{colSpan:f.length+1,className:`px-2 py-3 text-center text-xs text-muted-foreground`,children:B(`engine.form.noRows`,a)})}),d.map((e,t)=>(0,M.jsxs)(`tr`,{className:`border-t border-border/30`,children:[f.map(n=>(0,M.jsx)(`td`,{className:`p-1`,children:(0,M.jsx)(ke,{schema:c[n],value:(e??{})[n],readOnly:r,context:i,onChange:e=>p(t,{[n]:e})})},n)),(0,M.jsx)(`td`,{className:`p-1 text-right`,children:(0,M.jsx)(x,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>h(t),disabled:r,className:`h-7 w-7 p-0`,"aria-label":B(`engine.form.removeRow`,a),children:(0,M.jsx)(u,{className:`h-3.5 w-3.5`})})})]},t))]})]})}),(0,M.jsxs)(x,{type:`button`,variant:`outline`,size:`sm`,onClick:m,disabled:r,children:[(0,M.jsx)(T,{className:`h-3.5 w-3.5 mr-1`}),` `,B(`engine.form.addRow`,a)]})]})}function ke({schema:e,value:t,readOnly:n,context:r,onChange:i}){if(e?.widget===`ref:object`)return(0,M.jsx)(Te,{schema:e,value:t,onChange:i,readOnly:n,context:r});let a=e?.enum;return Array.isArray(a)&&a.length>0?(0,M.jsxs)(d,{value:t==null?``:String(t),onValueChange:e=>i(e||void 0),disabled:n,children:[(0,M.jsx)(f,{className:`h-8 text-xs`,children:(0,M.jsx)(s,{placeholder:`—`})}),(0,M.jsx)(E,{children:a.map(e=>(0,M.jsx)(o,{value:String(e),children:String(e)},String(e)))})]}):e?.type===`boolean`?(0,M.jsx)(`input`,{type:`checkbox`,checked:!!t,disabled:n,onChange:e=>i(e.target.checked),className:`h-4 w-4`}):e?.type===`number`||e?.type===`integer`?(0,M.jsx)(g,{type:`number`,value:t==null?``:String(t),disabled:n,onChange:e=>{let t=e.target.valueAsNumber;i(Number.isFinite(t)?t:void 0)},className:`h-8 text-xs`}):(0,M.jsx)(g,{value:t==null?``:String(t),disabled:n,onChange:e=>i(e.target.value||void 0),className:`h-8 text-xs`})}function Ae({id:e,value:t,onChange:n,readOnly:r}){let i=H(),a=Array.isArray(t)?t:[],[o,s]=k.useState(``);function c(e){let t=e.split(/[,\n]/).map(e=>e.trim()).filter(Boolean);if(t.length===0)return;let r=[...a];for(let e of t)r.includes(e)||r.push(e);n(r),s(``)}function l(e){let t=a.slice();t.splice(e,1),n(t)}return(0,M.jsx)(`div`,{className:`rounded border border-input bg-background p-1.5`,children:(0,M.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1`,children:[a.map((e,t)=>(0,M.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-muted px-1.5 py-0.5 text-xs`,children:[(0,M.jsx)(`span`,{className:`font-mono`,children:e}),!r&&(0,M.jsx)(`button`,{type:`button`,"aria-label":`Remove ${e}`,onClick:()=>l(t),className:`text-muted-foreground hover:text-destructive`,children:`×`})]},t)),(0,M.jsx)(`input`,{id:e,type:`text`,value:o,disabled:r,placeholder:a.length===0?B(`engine.form.tagsPlaceholder`,i):``,onChange:e=>s(e.target.value),onKeyDown:e=>{e.key===`Enter`||e.key===`,`?(e.preventDefault(),c(o)):e.key===`Backspace`&&!o&&a.length>0&&l(a.length-1)},onBlur:()=>o&&c(o),className:`min-w-[8rem] flex-1 bg-transparent text-sm outline-none`})]})})}var U=`__none__`;function je({id:e,value:t,onChange:n,readOnly:r,context:i}){let a=H(),c=i?.objectFields??[],l=t==null?``:String(t),u=!l||c.some(e=>e.name===l);return(0,M.jsxs)(d,{value:l||U,onValueChange:e=>n(e===U?``:e),disabled:r,children:[(0,M.jsx)(f,{id:e,children:(0,M.jsx)(s,{placeholder:c.length?B(`engine.form.selectField`,a):B(`engine.form.noObjectBound`,a)})}),(0,M.jsxs)(E,{children:[(0,M.jsx)(o,{value:U,children:(0,M.jsx)(`span`,{className:`text-muted-foreground`,children:B(`engine.form.none`,a)})}),!u&&l&&(0,M.jsxs)(o,{value:l,children:[(0,M.jsx)(`span`,{className:`font-mono`,children:l}),(0,M.jsx)(`span`,{className:`ml-2 text-xs text-muted-foreground`,children:B(`engine.form.notInObject`,a)})]}),c.map(e=>(0,M.jsx)(o,{value:e.name,children:(0,M.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{children:e.label||e.name}),(0,M.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.name})]})},e.name))]})]})}function Me({id:e,value:t,onChange:n,readOnly:r,context:i}){let a=H(),c=i?.objectFields??[],l=Array.isArray(t)?t.map(String):typeof t==`string`&&t?t.split(`,`).map(e=>e.trim()).filter(Boolean):[],u=e=>c.find(t=>t.name===e)?.label||e,p=c.filter(e=>!l.includes(e.name)),m=e=>{l.includes(e)||n([...l,e])},h=e=>{let t=l.slice();t.splice(e,1),n(t)},g=(e,t)=>{let r=e+t;if(r<0||r>=l.length)return;let i=l.slice();[i[e],i[r]]=[i[r],i[e]],n(i)};return(0,M.jsxs)(`div`,{className:`space-y-2`,children:[l.length>0&&(0,M.jsx)(`div`,{className:`space-y-1`,children:l.map((e,t)=>(0,M.jsxs)(`div`,{className:`flex items-center gap-1 rounded border border-input bg-background px-2 py-1 text-sm`,children:[(0,M.jsxs)(`span`,{className:`flex-1 truncate`,children:[u(e),(0,M.jsx)(`code`,{className:`ml-2 text-xs text-muted-foreground`,children:e})]}),!r&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`button`,{type:`button`,"aria-label":`Move up`,disabled:t===0,onClick:()=>g(t,-1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:`↑`}),(0,M.jsx)(`button`,{type:`button`,"aria-label":`Move down`,disabled:t===l.length-1,onClick:()=>g(t,1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:`↓`}),(0,M.jsx)(`button`,{type:`button`,"aria-label":`Remove ${e}`,onClick:()=>h(t),className:`px-1 text-muted-foreground hover:text-destructive`,children:`×`})]})]},e))}),!r&&(0,M.jsxs)(d,{value:``,onValueChange:m,disabled:p.length===0,children:[(0,M.jsx)(f,{id:e,children:(0,M.jsx)(s,{placeholder:c.length?p.length?B(`engine.form.addField`,a):B(`engine.form.allFieldsAdded`,a):B(`engine.form.noObjectBound`,a)})}),(0,M.jsx)(E,{children:p.map(e=>(0,M.jsx)(o,{value:e.name,children:(0,M.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(`span`,{children:e.label||e.name}),(0,M.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.name})]})},e.name))})]})]})}var Ne={"ref:object":Te,"object-selector":Ee,"field-selector":De,"field-ref":je,"field-multi":Me,"master-detail":Oe,"string-tags":Ae,code:Ie,"filter-builder":Oe};function Pe(e,t){if(e?.language)return e.language;if(typeof t?.format==`string`){let e=t.format.toLowerCase();if(e===`sql`||e===`javascript`||e===`typescript`||e===`json`||e===`yaml`||e===`html`||e===`css`||e===`python`)return e}let n=e?.field?.toLowerCase()??``;return n.includes(`sql`)||n===`query`?`sql`:`javascript`}var Fe=k.lazy(()=>n(()=>import(`./src-Tw2eleSi.js`).then(e=>({default:e.CodeEditorRenderer})),__vite__mapDeps([0]),import.meta.url));function Ie({schema:e,value:t,onChange:n,readOnly:r,fieldSpec:i}){let a=Pe(i,e),o=typeof t==`string`?t:t==null?``:String(t);return(0,M.jsxs)(`div`,{className:`rounded-md border border-border/50 overflow-hidden`,children:[(0,M.jsxs)(`div`,{className:`flex items-center justify-between px-2 py-1 bg-muted/40 border-b border-border/30 text-[10px] font-mono text-muted-foreground`,children:[(0,M.jsx)(`span`,{children:a}),r&&(0,M.jsx)(`span`,{children:`read-only`})]}),(0,M.jsx)(k.Suspense,{fallback:(0,M.jsx)(`div`,{className:`h-[280px] flex items-center justify-center text-xs text-muted-foreground`,children:`Loading editor…`}),children:(0,M.jsx)(Fe,{schema:{type:`code`,language:a,theme:`vs-dark`,height:`280px`,readOnly:r},value:o,onChange:e=>n(e??``)})})]})}var Le=new Set([`text`,`textarea`,`number`,`switch`,`select`,`json`]);function W(e,t){if(!e)return e;let n=e.oneOf??e.anyOf;if(!Array.isArray(n)||n.length===0)return e;let r=typeof t==`object`&&!!t&&!Array.isArray(t),i=Array.isArray(t),a=r?new Set(Object.keys(t)):null,o=null,s=i&&t.length?t[0]:void 0,c=typeof s==`object`&&!!s&&!Array.isArray(s);for(let e of n){let n=0;if(e.type===`array`&&i){n+=5;let t=e.items?.type;(t===`object`&&c||t===`string`&&typeof s==`string`||t===`number`&&typeof s==`number`||t===`integer`&&typeof s==`number`)&&(n+=3)}if(e.type===`object`&&r&&(n+=5),e.type===`string`&&typeof t==`string`&&(n+=5),e.type===`number`&&typeof t==`number`&&(n+=5),e.type===`boolean`&&typeof t==`boolean`&&(n+=5),a&&Array.isArray(e.required))for(let t of e.required)a.has(t)&&(n+=1);(!o||n>o.score)&&(o={branch:e,score:n})}let l=o?.branch??n[0];return{...e,...l,oneOf:void 0,anyOf:void 0}}function Re(e,t){if(e?.widget)return e.widget;if(e?.type){let t=e.type;if(t===`text`||t===`email`||t===`url`||t===`phone`||t===`password`)return`text`;if(t===`textarea`||t===`markdown`||t===`html`||t===`richtext`)return`textarea`;if(t===`number`||t===`currency`||t===`percent`)return`number`;if(t===`date`||t===`datetime`||t===`time`)return`date-picker`;if(t===`boolean`||t===`toggle`)return`switch`;if(t===`select`||t===`radio`)return e.multiple?`multiselect`:`select`;if(t===`multiselect`||t===`checkboxes`||t===`tags`)return`string-tags`;if(t===`composite`)return`composite`;if(t===`repeater`)return`repeater`;if(t===`record`)return`record`;if(t===`lookup`||t===`master_detail`||t===`tree`)return`ref-object`;if(t===`image`||t===`file`||t===`avatar`||t===`video`||t===`audio`)return`file-upload`;if(t===`code`)return`code`;if(t===`json`||t===`location`||t===`address`)return`json`;if(t===`color`)return`color-picker`;if(t===`rating`)return`number`;if(t===`slider`)return`slider`;if(t===`signature`)return`signature`;if(t===`qrcode`)return`qrcode`;if(t===`progress`)return`number`;if(t===`formula`||t===`summary`||t===`autonumber`)return`text`;if(t===`vector`)return`json`}if(t){let e=t.type;if(e===`array`&&t.items?.type===`string`)return`string-tags`;if(e===`array`&&t.items?.type===`object`)return`master-detail`;if(e===`object`)return`object-fields`;if(e===`boolean`)return`switch`;if(e===`number`||e===`integer`)return`number`;if(Array.isArray(t.enum))return`select`;if(e===`string`){if(t.format===`date`||t.format===`date-time`)return`date-picker`;if(t.format===`email`||t.format===`uri`||t.format===`uri-reference`)return`text`;if(t.format===`multiline`)return`textarea`}}}function ze(e,t,n){if(n?.objectFields&&!Array.isArray(t?.enum)){if(t?.type===`array`&&t.items?.type===`string`&&(/Fields$/.test(e)||e===`columns`||e===`fieldOrder`))return`field-multi`;if((t?.type===`string`||Array.isArray(t?.anyOf)&&t.anyOf.some(e=>e?.type===`string`))&&(/.Field$/.test(e)||e===`field`))return`field-ref`}}function G({schema:e,form:t,value:n,onChange:r,issues:i=[],hiddenFields:a=[],fieldOrder:o=[],readOnly:s=!1,createMode:c=!1,widgetContext:l}){let u=e;if(!u||typeof u!=`object`)if(n&&typeof n==`object`)u=Ue(n);else return(0,M.jsx)(Z,{value:n,onChange:r,readOnly:s});let d=u.properties??{},f=Array.isArray(u.required)?u.required:[],p=Ge(Object.keys(d),o).filter(e=>!a.includes(e)),m=k.useMemo(()=>{let e={},t=H();for(let n of i)(e[n.path]??=[]).push(we(n.message,t));return e},[i]),h=n??{};function g(e,t){let n={...h,[e]:t};(t===void 0||t===``)&&delete n[e],r(n)}if(t?.sections?.length){let e=[];for(let n of t.sections)for(let t of n.fields)e.push(typeof t==`string`?t:t.field);let n=e.filter(e=>d[e]).length;if(e.length===0||n>0)return(0,M.jsx)(Be,{form:t,props:d,required:f,hiddenFields:a,issuesByPath:m,value:h,readOnly:s,createMode:c,widgetContext:l,onChange:g});typeof console<`u`&&console.warn(`[SchemaForm] form layout declares no fields that exist in the schema; falling back to flat schema-driven rendering. Declared:`,e,`Available:`,Object.keys(d))}return(0,M.jsx)(`div`,{className:`space-y-4`,children:p.map(e=>(0,M.jsx)(q,{name:e,schema:d[e],value:h[e],required:f.includes(e),issues:m[e],readOnly:s,widgetContext:l,formData:h,onChange:t=>g(e,t)},e))})}function K(e){return typeof e==`string`?{field:e}:e}function Be({form:e,props:t,required:n,hiddenFields:r,issuesByPath:i,value:a,readOnly:o,createMode:s,widgetContext:c,onChange:l}){let u=(e.sections??[]).filter(e=>!e.visibleOn||L(e.visibleOn,{data:a})),d=e.type===`tabbed`&&u.length>1,f=(e,u)=>{let d=e.fields.map(K).filter(e=>!(e.hidden||r.includes(e.field)||e.visibleOn&&!L(e.visibleOn,{data:a})));if(d.length===0)return null;let f=e.columns??1;return(0,M.jsxs)(`section`,{className:`space-y-3 rounded-md border border-border/40 bg-card/30 p-4`,children:[e.label&&(0,M.jsxs)(`header`,{children:[(0,M.jsx)(`h3`,{className:`text-sm font-semibold text-foreground/90`,children:e.label}),e.description&&(0,M.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.description})]}),(0,M.jsx)(`div`,{className:`grid gap-4`,style:{gridTemplateColumns:`repeat(${f}, minmax(0, 1fr))`},children:d.map(e=>{let r=t[e.field];return r?(0,M.jsx)(`div`,{style:{gridColumn:`span ${e.colSpan??1}`},children:(0,M.jsx)(q,{name:e.field,schema:{...r,...e.label?{title:e.label}:{},...e.helpText?{description:e.helpText}:{},...e.placeholder?{placeholder:e.placeholder}:{}},value:a[e.field],required:e.required??n.includes(e.field),issues:i[e.field],readOnly:o||e.readonly||e.immutable&&!s,fieldSpec:e,widgetContext:c,formData:a,onChange:t=>l(e.field,t)})},e.field):(0,M.jsx)(`div`,{className:`rounded border border-dashed border-amber-500/40 bg-amber-500/5 p-2 text-xs text-amber-700 dark:text-amber-300`,style:{gridColumn:`span ${e.colSpan??1}`},children:V(`engine.form.missingField`,H(),{field:e.field})},e.field)})})]},u)};if(d){let e=u.filter(e=>e.fields.map(K).some(e=>!e.hidden&&!r.includes(e.field)&&(!e.visibleOn||L(e.visibleOn,{data:a}))));return e.length===0?null:(0,M.jsxs)(_,{defaultValue:(e[0].label??`section-0`).toLowerCase(),className:`w-full`,children:[(0,M.jsx)(b,{className:`flex flex-wrap gap-1`,children:e.map((e,t)=>(0,M.jsx)(ee,{value:(e.label??`section-${t}`).toLowerCase(),children:e.label??`Section ${t+1}`},t))}),e.map((e,t)=>(0,M.jsx)(C,{value:(e.label??`section-${t}`).toLowerCase(),className:`mt-4`,children:f(e,t)},t))]})}return(0,M.jsx)(`div`,{className:`space-y-4`,children:u.map(f)})}function q({name:e,schema:t,value:n,required:r,issues:i,readOnly:a,fieldSpec:o,widgetContext:s,formData:c,onChange:l}){let u=o?.label||t?.title||Q(e),d=o?.helpText||t?.description,f=`mdf-${e}`,p=Re(o,t);if(!o?.widget){let n=ze(e,t,s);n&&(p=n)}let m=t?.type===`boolean`||p===`switch`,h=t?.default!==void 0,g=r&&!(m&&h),_=Q(e).toLowerCase()===u.toLowerCase();return m?(0,M.jsxs)(`div`,{className:`flex items-start justify-between gap-3 py-1.5`,children:[(0,M.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,M.jsxs)(y,{htmlFor:f,className:`text-sm font-medium cursor-pointer`,children:[u,g&&(0,M.jsx)(`span`,{className:`text-destructive ml-0.5`,children:`*`})]}),d&&(0,M.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:d}),i?.map((e,t)=>(0,M.jsx)(`div`,{className:`text-xs text-destructive mt-0.5`,children:e},t))]}),(0,M.jsx)(J,{id:f,schema:t,value:n,onChange:l,readOnly:a,widget:p,fieldSpec:o,widgetContext:s,formData:c})]}):(0,M.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,M.jsx)(`div`,{className:`flex items-center justify-between gap-2`,children:(0,M.jsxs)(y,{htmlFor:f,className:`text-sm font-medium`,children:[u,g&&(0,M.jsx)(`span`,{className:`text-destructive ml-0.5`,children:`*`}),!_&&(0,M.jsx)(`code`,{className:`ml-2 text-[10px] font-mono text-muted-foreground/70`,title:`Machine name`,children:e})]})}),(0,M.jsx)(J,{id:f,schema:t,value:n,onChange:l,readOnly:a,widget:p,fieldSpec:o,widgetContext:s,formData:c}),d&&(0,M.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:d}),i?.map((e,t)=>(0,M.jsx)(`div`,{className:`text-xs text-destructive`,children:e},t))]})}function J({id:e,schema:t,value:n,onChange:r,readOnly:a,widget:c,fieldSpec:l,widgetContext:u,formData:p}){let m=H();if(l?.type===`composite`)return(0,M.jsx)(Ve,{value:n,fields:l.fields?.length?l.fields:$(t),schema:t,readOnly:a,widgetContext:u,onChange:r});if(l?.type===`repeater`){let e=t?.items??{};return(0,M.jsx)(X,{value:n,fields:l.fields?.length?l.fields:$(e),schema:t,readOnly:a,widgetContext:u,widget:l.widget,onChange:r})}if(l?.type===`record`){let e=t?.additionalProperties??{};return(0,M.jsx)(He,{value:n,fields:l.fields?.length?l.fields:$(e),schema:t,readOnly:a,widgetContext:u,widget:l.widget,keyField:l.keyField,formData:p,onChange:r})}if(c){let i=Ne[c];if(i)return(0,M.jsx)(i,{id:e,schema:t,value:n,onChange:r,readOnly:a,context:u,fieldSpec:l,formData:p});let o=W(t,n);if(o?.type===`object`&&o.properties&&typeof o.properties==`object`)return(0,M.jsx)(`div`,{className:`rounded-md border border-border/40 bg-card/30 p-3`,children:(0,M.jsx)(G,{schema:o,value:n??{},onChange:e=>r(e),readOnly:a,widgetContext:u})});if(o?.type===`array`&&o.items&&typeof o.items==`object`){let e=W(o.items,Array.isArray(n)&&n.length?n[0]:void 0);if(e?.type===`object`&&e.properties&&typeof e.properties==`object`)return(0,M.jsx)(X,{value:n,fields:$(e),schema:{...o,items:e},readOnly:a,widgetContext:u,widget:l?.widget,onChange:r})}if(!Le.has(c))return(0,M.jsxs)(`div`,{className:`space-y-1`,children:[(0,M.jsx)(Z,{value:n,onChange:e=>r(e),readOnly:a}),(0,M.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,children:V(`engine.form.fallbackJson`,m,{widget:c})})]})}let h=W(t,n)??t,_=h?.type,v=l?.options,y=h?.enum??void 0;if(Array.isArray(v)&&v.length>0)return(0,M.jsxs)(d,{value:n==null?``:String(n),onValueChange:e=>r(e),disabled:a,children:[(0,M.jsx)(f,{id:e,children:(0,M.jsx)(s,{placeholder:B(`engine.form.selectEllipsis`,m)})}),(0,M.jsx)(E,{children:v.map(e=>(0,M.jsxs)(o,{value:e.value,children:[e.label,e.color&&(0,M.jsx)(`span`,{className:`ml-2 inline-block h-3 w-3 rounded`,style:{backgroundColor:e.color}})]},e.value))})]});if(Array.isArray(y)&&y.length>0)return(0,M.jsxs)(d,{value:n==null?``:String(n),onValueChange:e=>r(e),disabled:a,children:[(0,M.jsx)(f,{id:e,children:(0,M.jsx)(s,{placeholder:B(`engine.form.selectEllipsis`,m)})}),(0,M.jsx)(E,{children:y.map(e=>(0,M.jsx)(o,{value:String(e),children:String(e)},String(e)))})]});if(_===`boolean`||c===`switch`||l?.type===`boolean`||l?.type===`toggle`)return(0,M.jsx)(w,{id:e,checked:!!n,onCheckedChange:e=>r(e),disabled:a});if(_===`number`||_===`integer`){let t=l?.min,i=l?.max;return(0,M.jsx)(g,{id:e,type:`number`,value:n==null?``:String(n),min:t,max:i,onChange:e=>{let t=e.target.value;if(t===``)return r(void 0);let n=_===`integer`?parseInt(t,10):Number(t);r(Number.isFinite(n)?n:void 0)},readOnly:a})}if(_===`string`){let t=l?.maxLength;return h?.format===`multiline`||h?.contentMediaType===`text/markdown`||typeof n==`string`&&n.length>80?(0,M.jsx)(i,{id:e,rows:4,value:n??``,maxLength:t,onChange:e=>r(e.target.value||void 0),readOnly:a}):(0,M.jsx)(g,{id:e,value:n??``,maxLength:t,onChange:e=>r(e.target.value||void 0),readOnly:a})}if(_===`array`){let t=h?.items??{};if(t.type===`string`||t.type===`number`||t.type===`integer`)return(0,M.jsx)(g,{id:e,value:(Array.isArray(n)?n:[]).map(String).join(`, `),placeholder:B(`engine.form.arrayPlaceholder`,m),onChange:e=>{let n=e.target.value.split(`,`).map(e=>e.trim()).filter(Boolean);t.type===`number`||t.type===`integer`?r(n.map(e=>Number(e)).filter(e=>Number.isFinite(e))):r(n)},readOnly:a})}if(h?.type===`object`&&h.properties&&typeof h.properties==`object`)return(0,M.jsx)(`div`,{className:`rounded-md border border-border/40 bg-card/30 p-3`,children:(0,M.jsx)(G,{schema:h,value:n??{},onChange:e=>r(e),readOnly:a,widgetContext:u})});if(h?.type===`array`&&h.items&&typeof h.items==`object`){let e=W(h.items,Array.isArray(n)&&n.length?n[0]:void 0);if(e?.type===`object`&&e.properties&&typeof e.properties==`object`)return(0,M.jsx)(X,{value:n,fields:$(e),schema:{...h,items:e},readOnly:a,widgetContext:u,widget:l?.widget,onChange:r})}return(0,M.jsx)(Z,{value:n,onChange:r,readOnly:a,small:!0})}function Y(e,t,n){if(!e)return{};let r;return r=t===`composite`?e.properties:t===`repeater`?e.items?.properties:e.additionalProperties?.properties,r?.[n]??{}}function Ve({value:e,fields:t,schema:n,readOnly:r,widgetContext:i,onChange:a}){let o=e&&typeof e==`object`&&!Array.isArray(e)?e:{};return(0,M.jsx)(`div`,{className:`rounded-md border border-border/50 bg-muted/20 p-3 space-y-3`,children:t.map(K).map(e=>{let t=Y(n,`composite`,e.field);return(0,M.jsx)(q,{name:e.field,schema:t,value:o[e.field],required:!!e.required,readOnly:r||e.readonly,fieldSpec:e,widgetContext:i,formData:o,onChange:t=>a({...o,[e.field]:t})},e.field)})})}function X({value:e,fields:t,schema:n,readOnly:r,widgetContext:i,widget:a,onChange:o}){let s=Array.isArray(e)?e:[],c=t.map(K),[l,d]=k.useState(null),f=a===`grid`||a===`table`,p=(e,t)=>{o(s.map((n,r)=>r===e?{...n,...t}:n))},h=e=>o(s.filter((t,n)=>n!==e)),g=()=>{let e={};c.forEach(t=>{e[t.field]=void 0}),o([...s,e]),d(s.length)};return f?(0,M.jsxs)(`div`,{className:`space-y-2`,children:[(0,M.jsx)(`div`,{className:`overflow-x-auto rounded-md border border-border/50`,children:(0,M.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,M.jsx)(`thead`,{className:`bg-muted/40`,children:(0,M.jsxs)(`tr`,{children:[c.map(e=>(0,M.jsxs)(`th`,{className:`px-2 py-1.5 text-left text-xs font-medium`,children:[e.label||Q(e.field),e.required&&(0,M.jsx)(`span`,{className:`text-destructive ml-0.5`,children:`*`})]},e.field)),!r&&(0,M.jsx)(`th`,{className:`w-8`})]})}),(0,M.jsxs)(`tbody`,{children:[s.length===0&&(0,M.jsx)(`tr`,{children:(0,M.jsx)(`td`,{colSpan:c.length+1,className:`px-2 py-3 text-center text-xs text-muted-foreground`,children:B(`engine.repeater.empty`,H())})}),s.map((e,t)=>(0,M.jsxs)(`tr`,{className:`border-t border-border/30 align-top`,children:[c.map(a=>{let o=Y(n,`repeater`,a.field);return(0,M.jsx)(`td`,{className:`p-1.5`,children:(0,M.jsx)(J,{id:`rep-${t}-${a.field}`,schema:o,value:e?.[a.field],readOnly:r||a.readonly,widget:Re(a,o),fieldSpec:a,widgetContext:i,formData:e,onChange:e=>p(t,{[a.field]:e})})},a.field)}),!r&&(0,M.jsx)(`td`,{className:`p-1.5 text-right`,children:(0,M.jsx)(x,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>h(t),className:`h-7 w-7 p-0`,"aria-label":B(`engine.form.remove`,H()),children:(0,M.jsx)(u,{className:`h-3.5 w-3.5`})})})]},t))]})]})}),!r&&(0,M.jsxs)(x,{type:`button`,variant:`outline`,size:`sm`,onClick:g,children:[(0,M.jsx)(T,{className:`h-3.5 w-3.5 mr-1`}),` `,B(`engine.form.add`,H())]})]}):(0,M.jsxs)(`div`,{className:`space-y-2`,children:[s.length===0&&(0,M.jsx)(`div`,{className:`rounded-md border border-dashed border-border/50 px-3 py-4 text-center text-xs text-muted-foreground`,children:B(`engine.list.empty`,H())}),s.map((e,t)=>{let a=l===t,o=c.map(t=>e?.[t.field]).find(e=>e!=null&&e!==``);return(0,M.jsxs)(`div`,{className:`rounded-md border border-border/50 bg-muted/10`,children:[(0,M.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-2 py-1.5 border-b border-border/30`,children:[(0,M.jsxs)(`button`,{type:`button`,onClick:()=>d(a?null:t),className:`flex items-center gap-1.5 text-sm font-medium text-left flex-1 min-w-0`,children:[a?(0,M.jsx)(m,{className:`h-3.5 w-3.5`}):(0,M.jsx)(v,{className:`h-3.5 w-3.5`}),(0,M.jsxs)(`span`,{className:`truncate`,children:[`#`,t+1,o==null?``:` — ${String(o)}`]})]}),!r&&(0,M.jsx)(x,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>h(t),className:`h-7 w-7 p-0`,"aria-label":B(`engine.form.remove`,H()),children:(0,M.jsx)(u,{className:`h-3.5 w-3.5`})})]}),a&&(0,M.jsx)(`div`,{className:`p-3 space-y-3`,children:c.map(a=>{let o=Y(n,`repeater`,a.field);return(0,M.jsx)(q,{name:a.field,schema:o,value:e?.[a.field],required:!!a.required,readOnly:r||a.readonly,fieldSpec:a,widgetContext:i,formData:e,onChange:e=>p(t,{[a.field]:e})},a.field)})})]},t)}),!r&&(0,M.jsxs)(x,{type:`button`,variant:`outline`,size:`sm`,onClick:g,children:[(0,M.jsx)(T,{className:`h-3.5 w-3.5 mr-1`}),` `,B(`engine.form.addItem`,H())]})]})}function He({value:e,fields:t,schema:n,readOnly:r,widgetContext:i,widget:o,keyField:s,formData:c,onChange:l}){let d=H();if(o){let a=Ne[o];if(a)return(0,M.jsx)(a,{schema:n,value:e,onChange:l,readOnly:r,context:i,fieldSpec:{field:``,type:`record`,fields:t,widget:o},formData:c})}let f=s?.field??`name`,p=s?.label??Q(f),h=s?.regex?new RegExp(s.regex):null,_=s?.immutable!==!1,y=e&&typeof e==`object`&&!Array.isArray(e)?e:{},b=Object.entries(y),S=t.map(K).filter(e=>e.field!==f),[ee,C]=k.useState(null),[w,E]=k.useState(``),[D,O]=k.useState(null),A=e=>l(e),te=(e,t)=>{let n={};for(let[r,i]of b)n[r]=r===e?{...i,...t}:i;A(n)},ne=e=>{let t={};for(let[n,r]of b)n!==e&&(t[n]=r);A(t)},re=(e,t)=>{if(t===e)return;if(y[t]){O(V(`engine.form.keyExists`,d,{key:t}));return}if(h&&!h.test(t)){O(V(`engine.form.keyPattern`,d,{pattern:String(h)}));return}let n={};for(let[r,i]of b)r===e?n[t]={...i,[f]:t}:n[r]=i;O(null),A(n)},j=()=>{let e=w.trim();if(!e){O(B(`engine.form.keyRequired`,d));return}if(y[e]){O(V(`engine.form.keyExists`,d,{key:e}));return}if(h&&!h.test(e)){O(V(`engine.form.keyPattern`,d,{pattern:String(h)}));return}let t={[f]:e};S.forEach(e=>{t[e.field]=void 0}),A({...y,[e]:t}),E(``),O(null),C(e)},[N,P]=k.useState(null),[F,I]=k.useState(null),ie=(e,t)=>{if(e===t)return;let n=b.map(([e])=>e),r=n.indexOf(e),i=n.indexOf(t);if(r<0||i<0)return;n.splice(r,1),n.splice(i,0,e);let a={};for(let e of n)a[e]=y[e];A(a)};return(0,M.jsxs)(`div`,{className:`space-y-2`,children:[b.length===0&&(0,M.jsx)(`div`,{className:`rounded-md border border-dashed border-border/50 px-3 py-4 text-center text-xs text-muted-foreground`,children:B(`engine.list.empty`,d)}),b.map(([e,t])=>{let o=ee===e,c=S.map(e=>t?.[e.field]).find(e=>e!=null&&e!==``);return(0,M.jsxs)(`div`,{className:`rounded-md border bg-muted/10 ${F===e&&N&&N!==e?`border-primary border-2`:`border-border/50`}`,onDragOver:t=>{!N||r||(t.preventDefault(),F!==e&&I(e))},onDragLeave:()=>{F===e&&I(null)},onDrop:t=>{!N||r||(t.preventDefault(),ie(N,e),P(null),I(null))},children:[(0,M.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-2 py-1.5 border-b border-border/30`,children:[!r&&(0,M.jsx)(`span`,{draggable:!0,onDragStart:t=>{P(e),t.dataTransfer.effectAllowed=`move`,t.dataTransfer.setData(`text/plain`,e)},onDragEnd:()=>{P(null),I(null)},className:`cursor-grab active:cursor-grabbing text-muted-foreground hover:text-foreground`,"aria-label":B(`engine.form.dragToReorder`,d),title:B(`engine.form.dragToReorder`,d),children:(0,M.jsx)(a,{className:`h-3.5 w-3.5`})}),(0,M.jsxs)(`button`,{type:`button`,onClick:()=>C(o?null:e),className:`flex items-center gap-1.5 text-sm font-medium text-left flex-1 min-w-0`,children:[o?(0,M.jsx)(m,{className:`h-3.5 w-3.5`}):(0,M.jsx)(v,{className:`h-3.5 w-3.5`}),(0,M.jsx)(`span`,{className:`font-mono text-xs px-1.5 py-0.5 rounded bg-muted/60`,children:e}),c!=null&&(0,M.jsxs)(`span`,{className:`truncate text-muted-foreground`,children:[`— `,String(c)]})]}),!r&&(0,M.jsx)(x,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>ne(e),className:`h-7 w-7 p-0`,"aria-label":B(`engine.form.remove`,d),children:(0,M.jsx)(u,{className:`h-3.5 w-3.5`})})]}),o&&(0,M.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,M.jsx)(q,{name:f,schema:{type:`string`},value:e,required:!0,readOnly:r||_,fieldSpec:{field:f,type:`text`,label:p,helpText:s?.helpText},widgetContext:i,formData:t,onChange:t=>re(e,String(t??``).trim())}),S.map(a=>{if(a.visibleOn&&!L(a.visibleOn,{data:t}))return null;let o=Y(n,`record`,a.field);return(0,M.jsx)(q,{name:a.field,schema:o,value:t?.[a.field],required:!!a.required,readOnly:r||a.readonly,fieldSpec:a,widgetContext:i,formData:t,onChange:t=>te(e,{[a.field]:t})},a.field)})]})]},e)}),!r&&(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(g,{value:w,onChange:e=>{E(e.target.value),D&&O(null)},placeholder:s?.placeholder??p,className:`h-8 text-xs font-mono max-w-[220px]`,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),j())}}),(0,M.jsxs)(x,{type:`button`,variant:`outline`,size:`sm`,onClick:j,children:[(0,M.jsx)(T,{className:`h-3.5 w-3.5 mr-1`}),` `,B(`engine.form.add`,d)]}),D&&(0,M.jsx)(`span`,{className:`text-xs text-destructive`,children:D})]})]})}function Z({value:e,onChange:t,readOnly:n,small:r}){let a=H(),[o,s]=k.useState(()=>We(e)),[c,l]=k.useState(null);return k.useEffect(()=>{s(We(e)),l(null)},[JSON.stringify(e)]),(0,M.jsxs)(`div`,{className:`space-y-1`,children:[(0,M.jsx)(i,{rows:r?4:12,className:`font-mono text-xs`,value:o,readOnly:n,onChange:e=>{let n=e.target.value;if(s(n),!n.trim()){l(null),t(void 0);return}try{let e=JSON.parse(n);l(null),t(e)}catch(e){l(e?.message??B(`engine.form.invalidJson`,a))}}}),c&&(0,M.jsx)(`div`,{className:`text-xs text-destructive`,children:c})]})}function Ue(e){let t={};for(let[n,r]of Object.entries(e))if(!n.startsWith(`_`))if(r==null)t[n]={type:`string`};else if(typeof r==`string`)t[n]=r.length>80||r.includes(`
|
|
7
|
-
`)?{type:`string`,format:`multiline`}:{type:`string`};else if(typeof r==`number`)t[n]={type:Number.isInteger(r)?`integer`:`number`};else if(typeof r==`boolean`)t[n]={type:`boolean`};else if(Array.isArray(r))if(r.length>0&&typeof r[0]==`string`)t[n]={type:`array`,items:{type:`string`}};else if(r.length>0&&typeof r[0]==`object`&&r[0]!==null){let e=r[0],i={};for(let t of Object.keys(e))i[t]={type:`string`};t[n]={type:`array`,items:{type:`object`,properties:i}}}else t[n]={type:`array`,items:{type:`string`}};else typeof r==`object`?t[n]={type:`object`,additionalProperties:!0}:t[n]={type:`string`};return{type:`object`,properties:t,additionalProperties:!0}}function We(e){if(e===void 0)return``;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Q(e){return e.replace(/[_-]+/g,` `).replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/\b\w/g,e=>e.toUpperCase())}function Ge(e,t){if(!t.length)return e;let n=new Set(e),r=t.filter(e=>n.has(e)),i=e.filter(e=>!t.includes(e));return[...r,...i]}function $(e){let t=e?.properties??{};return Object.keys(t)}function Ke(e){let t=new Set;for(let n of e?.sections??[])for(let e of n.fields??[])t.add(typeof e==`string`?e:e?.field);return t}function qe({bundledSchema:e,bundledForm:t,serverSchema:n,excludeFields:r,sectionTitle:i}){if(!e)return{schema:e,form:t};let a=n?.properties;if(!a||typeof a!=`object`)return{schema:e,form:t};let o=e.properties??{},s=Ke(t),c=Object.keys(a).filter(e=>!(e in o)&&!r.has(e)&&!s.has(e));if(c.length===0)return{schema:e,form:t};let l={...e,properties:{...o}};for(let e of c)e in l.properties||(l.properties[e]=a[e]);let u=t;if(t&&typeof t==`object`){let e=JSON.parse(JSON.stringify(t));e.sections=[...e.sections??[],{label:i,fields:c.map(e=>({field:e}))}],u=e}return{schema:l,form:u}}export{A as C,j as S,ue as _,V as a,fe as b,we as c,I as d,se as f,F as g,N as h,B as i,oe as l,ie as m,G as n,Ce as o,P as p,H as r,Se as s,qe as t,ce as u,de as v,ne as w,re as x,le as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{l as e}from"./plugin-chatbot-Cy3tiXkg.js";export{e as Mermaid};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e,r as t}from"./rolldown-runtime-CMxvf4Kt.js";import{_ as n,t as r}from"./vendor-react-DR370ovB.js";import{F as i,G as a,lt as o,mt as s,r as c,ut as l}from"./framework-crD8qZlm.js";import{$t as u,Bn as d,Bt as f,Ds as p,Fn as m,Ht as h,In as g,Ln as _,Qt as v,Rn as y,Rt as b,Vt as x,Xn as S,Zt as C,en as w,gs as T,hs as E,in as D,jt as O,pr as k,rc as A,zi as j,zn as ee,zt as te}from"./ui-components-BrY5joKQ.js";import{a as M,i as N}from"./plugins-views-CBO5qxO-.js";import{a as ne}from"./plugin-grid-BxyuFeJP.js";var P=e(n(),1),F=r(),re=`bg-blue-100 text-blue-900 border border-blue-200`,ie=new Date,I=[`bg-blue-100 text-blue-900 border border-blue-200`,`bg-emerald-100 text-emerald-900 border border-emerald-200`,`bg-amber-100 text-amber-900 border border-amber-200`,`bg-rose-100 text-rose-900 border border-rose-200`,`bg-violet-100 text-violet-900 border border-violet-200`,`bg-cyan-100 text-cyan-900 border border-cyan-200`,`bg-orange-100 text-orange-900 border border-orange-200`,`bg-fuchsia-100 text-fuchsia-900 border border-fuchsia-200`],L=/^#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i,R=/(^|\s)(bg|text|from|to|via)-/;function z(e){if(!e)return{className:re};if(L.test(e))return{className:`text-white`,inlineColor:e};if(R.test(e))return{className:e};let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return{className:I[Math.abs(t)%I.length]}}var ae={"calendar.today":`Today`,"calendar.month":`Month`,"calendar.week":`Week`,"calendar.day":`Day`,"calendar.newEvent":`New event`,"calendar.moreEvents":`+{{count}} more`,"calendar.allDay":`all-day`};function B(){try{let e=c();return e.t(`calendar.today`)===`calendar.today`?{t:(e,t)=>{let n=ae[e]||e;if(t)for(let[e,r]of Object.entries(t))n=n.replace(`{{${e}}}`,String(r));return n},language:`en`}:{t:e.t,language:e.language}}catch{return{t:(e,t)=>{let n=ae[e]||e;if(t)for(let[e,r]of Object.entries(t))n=n.replace(`{{${e}}}`,String(r));return n},language:`en`}}}function V({events:e=[],view:t=`month`,currentDate:n=ie,locale:r=`default`,onEventClick:i,onDateClick:a,onViewChange:o,onNavigate:s,onAddClick:c,onEventDrop:l,onTimeRangeSelect:d,slotMinutes:m=30,className:g}){let[_,y]=P.useState(t),[w,D]=P.useState(n),{t:O,language:ee}=B(),M=r==="default"?ee:r;P.useEffect(()=>{D(n)},[n]),P.useEffect(()=>{y(t)},[t]);let N=P.useRef(o);N.current=o,P.useEffect(()=>{let e=window.matchMedia(`(max-width: 639px)`),t=e=>{e.matches&&(y(`day`),N.current?.(`day`))};return t(e),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let ne=()=>{let e=new Date(w);_===`month`?e.setMonth(e.getMonth()-1):_===`week`?e.setDate(e.getDate()-7):e.setDate(e.getDate()-1),D(e),s?.(e)},re=()=>{let e=new Date(w);_===`month`?e.setMonth(e.getMonth()+1):_===`week`?e.setDate(e.getDate()+7):e.setDate(e.getDate()+1),D(e),s?.(e)},I=()=>{let e=new Date;D(e),s?.(e)},L=e=>{y(e),o?.(e)},R=()=>{if(_===`month`)return w.toLocaleDateString(M,{month:`long`,year:`numeric`});if(_===`week`){let e=H(w),t=new Date(e);return t.setDate(t.getDate()+6),`${e.toLocaleDateString(M,{month:`short`,day:`numeric`})} - ${t.toLocaleDateString(M,{month:`short`,day:`numeric`,year:`numeric`})}`}else return w.toLocaleDateString(M,{weekday:`long`,month:`long`,day:`numeric`,year:`numeric`})},z=P.useRef(0);return(0,F.jsxs)(`div`,{role:`region`,"aria-label":`Calendar`,className:A(`flex flex-col h-full bg-background min-w-0 overflow-hidden`,g),children:[(0,F.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2 p-2 sm:p-4 border-b min-w-0`,children:[(0,F.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,F.jsxs)(`div`,{className:`flex items-center bg-muted/50 rounded-lg p-1 gap-1`,children:[(0,F.jsx)(k,{variant:`ghost`,size:`sm`,onClick:I,className:`h-8`,"aria-label":`Go to today`,children:O(`calendar.today`)}),(0,F.jsx)(`div`,{className:`h-4 w-px bg-border mx-1`}),(0,F.jsx)(k,{variant:`ghost`,size:`icon`,"aria-label":`Previous period`,onClick:ne,className:`h-8 w-8`,children:(0,F.jsx)(T,{className:`h-4 w-4`})}),(0,F.jsx)(k,{variant:`ghost`,size:`icon`,"aria-label":`Next period`,onClick:re,className:`h-8 w-8`,children:(0,F.jsx)(E,{className:`h-4 w-4`})})]}),(0,F.jsxs)(C,{children:[(0,F.jsx)(u,{asChild:!0,children:(0,F.jsxs)(k,{variant:`ghost`,"aria-label":`Current date: ${R()}`,className:A(`text-base sm:text-xl font-semibold h-auto px-2 sm:px-3 py-1 hover:bg-muted/50 transition-colors`,`flex items-center gap-2`),children:[(0,F.jsx)(p,{className:`h-5 w-5 text-muted-foreground`}),(0,F.jsx)(`span`,{children:R()})]})}),(0,F.jsx)(v,{className:`w-auto p-0`,align:`start`,children:(0,F.jsx)(S,{mode:`single`,selected:w,onSelect:e=>{e&&(D(e),s?.(e))},autoFocus:!0,startMonth:new Date(2e3,0),endMonth:new Date(2050,11)})})]})]}),(0,F.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,F.jsxs)(b,{value:_,onValueChange:L,children:[(0,F.jsx)(x,{className:`w-32 bg-background`,children:(0,F.jsx)(h,{})}),(0,F.jsxs)(te,{children:[(0,F.jsx)(f,{value:`day`,children:O(`calendar.day`)}),(0,F.jsx)(f,{value:`week`,children:O(`calendar.week`)}),(0,F.jsx)(f,{value:`month`,children:O(`calendar.month`)})]})]}),c&&(0,F.jsxs)(k,{onClick:c,size:`sm`,className:`gap-1`,children:[(0,F.jsx)(j,{className:`h-4 w-4`}),O(`calendar.newEvent`)]})]})]}),(0,F.jsxs)(`div`,{className:`flex-1 overflow-auto`,onTouchStart:e=>{z.current=e.touches[0].clientX},onTouchEnd:e=>{let t=z.current-e.changedTouches[0].clientX;if(Math.abs(t)>50){let e=new Date(w);_===`day`?e.setDate(e.getDate()+(t>0?1:-1)):_===`week`?e.setDate(e.getDate()+(t>0?7:-7)):e.setMonth(e.getMonth()+(t>0?1:-1)),D(e),s?.(e)}},children:[_===`month`&&(0,F.jsx)(W,{date:w,events:e,locale:M,onEventClick:i,onDateClick:a,onEventDrop:l}),_===`week`&&(0,F.jsx)(Y,{mode:`week`,date:w,events:e,locale:M,slotMinutes:m,onEventClick:i,onEventDrop:l,onTimeRangeSelect:d}),_===`day`&&(0,F.jsx)(Y,{mode:`day`,date:w,events:e,locale:M,slotMinutes:m,onEventClick:i,onEventDrop:l,onTimeRangeSelect:d})]})]})}function H(e){let t=new Date(e),n=t.getDay(),r=t.getDate()-n;return t.setDate(r),t}function oe(e){let t=e.getFullYear(),n=e.getMonth(),r=new Date(t,n,1),i=new Date(t,n+1,0),a=r.getDay(),o=[];for(let e=a-1;e>=0;e--){let t=new Date(r.getTime());t.setDate(t.getDate()-(e+1)),o.push(t)}for(let e=1;e<=i.getDate();e++)o.push(new Date(t,n,e));let s=42-o.length;for(let e=1;e<=s;e++){let t=new Date(i.getTime());t.setDate(t.getDate()+e),o.push(t)}return o}function U(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function W({date:e,events:t,locale:n=`default`,onEventClick:r,onDateClick:i,onEventDrop:a}){let o=P.useMemo(()=>oe(e),[e.getFullYear(),e.getMonth()]),s=P.useMemo(()=>new Date,[]),{t:c}=B(),l=P.useMemo(()=>{let e=new Date(2024,0,7);return Array.from({length:7},(t,r)=>{let i=new Date(e);return i.setDate(i.getDate()+r),i.toLocaleDateString(n,{weekday:`short`})})},[n]),[u,d]=P.useState(null),[f,p]=P.useState(null),m=P.useMemo(()=>{let e=new Map;for(let n of t){let t=new Date(n.start),r=n.end?new Date(n.end):new Date(t);t.setHours(0,0,0,0),r.setHours(0,0,0,0);let i=new Date(t);for(;i<=r;){let a=`${i.getFullYear()}-${i.getMonth()}-${i.getDate()}`,o=i.getTime()===t.getTime(),s=i.getTime()===r.getTime(),c=o||s||i.getDay()===0,l=e.get(a),u={event:n,isTitleDay:c,isSpanStart:o,isSpanEnd:s};l?l.push(u):e.set(a,[u]),i.setDate(i.getDate()+1)}}return e},[t]),h=(e,t,n=`move`,r)=>{d(t.id),e.dataTransfer.effectAllowed=`move`;let i={id:t.id,mode:n,...r?{sourceDay:`${r.getFullYear()}-${r.getMonth()}-${r.getDate()}`}:{}};e.dataTransfer.setData(`text/plain`,JSON.stringify(i)),n===`resize-end`&&e.stopPropagation()},g=()=>{d(null),p(null)},_=(e,t)=>{e.preventDefault(),e.dataTransfer.dropEffect=`move`,p(t)},v=e=>{e.currentTarget.contains(e.relatedTarget)||p(null)},y=(e,n)=>{if(e.preventDefault(),p(null),d(null),!a)return;let r=e.dataTransfer.getData(`text/plain`),i;try{i=JSON.parse(r)}catch{i={id:r,mode:`move`}}let o=t.find(e=>String(e.id)===String(i.id));if(!o)return;let s=new Date(n);if(s.setHours(0,0,0,0),i.mode===`resize-end`){let e=o.end?new Date(o.end):new Date(o.start),t=new Date(e);if(t.setHours(0,0,0,0),s.getTime()===t.getTime())return;let n=new Date(o.start);if(n.setHours(0,0,0,0),s.getTime()<n.getTime())return;let r=new Date(s);r.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),0),a(o,new Date(o.start),r);return}let c=new Date(o.start),l;if(i.sourceDay){let[e,t,n]=i.sourceDay.split(`-`).map(e=>parseInt(e,10));l=new Date(e,t,n)}else l=new Date(c);l.setHours(0,0,0,0);let u=s.getTime()-l.getTime();if(u===0)return;let f=new Date(c.getTime()+u),m;o.end&&(m=new Date(new Date(o.end).getTime()+u)),a(o,f,m)};return(0,F.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,F.jsx)(`div`,{role:`row`,className:`grid grid-cols-7 border-b`,children:l.map(e=>(0,F.jsx)(`div`,{role:`columnheader`,className:`p-2 text-center text-sm font-medium text-muted-foreground border-r last:border-r-0`,children:e},e))}),(0,F.jsx)(`div`,{role:`grid`,"aria-label":`Calendar grid`,className:`grid grid-cols-7 flex-1 auto-rows-fr`,children:o.map((t,n)=>{let o=`${t.getFullYear()}-${t.getMonth()}-${t.getDate()}`,l=m.get(o)||[],d=t.getMonth()===e.getMonth(),p=U(t,s);return(0,F.jsxs)(`div`,{role:`gridcell`,"aria-label":`${t.toLocaleDateString(`default`,{weekday:`long`,month:`long`,day:`numeric`,year:`numeric`})}${l.length>0?`, ${l.length} event${l.length>1?`s`:``}`:``}`,className:A(`border-b border-r last:border-r-0 p-2 min-h-[100px] cursor-pointer hover:bg-accent/50`,!d&&`bg-muted/50 text-muted-foreground opacity-50`,f===n&&`ring-2 ring-primary`),onClick:()=>i?.(t),onDragOver:e=>_(e,n),onDragLeave:v,onDrop:e=>y(e,t),children:[(0,F.jsx)(`div`,{className:A(`text-sm font-medium mb-2`,p&&`inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground h-6 w-6`),...p?{"aria-current":`date`}:{},children:t.getDate()}),(0,F.jsxs)(`div`,{className:`space-y-0.5`,children:[l.slice(0,4).map(({event:e,isTitleDay:n,isSpanStart:i,isSpanEnd:o},s)=>{let c=!n,{className:l,inlineColor:d}=z(e.color),f=!!a&&o;return(0,F.jsxs)(`div`,{role:`button`,title:e.title,"aria-label":e.title,draggable:!!a,onDragStart:n=>h(n,e,`move`,t),onDragEnd:g,className:A(`relative text-xs hover:opacity-80 truncate`,a?`cursor-move`:`cursor-pointer`,c?`h-1.5`:`px-2 py-0.5`,i?`rounded-l`:`rounded-l-none`,o?`rounded-r`:`rounded-r-none`,!o&&`-mr-2`,l,u===e.id&&`opacity-50`),style:d?{backgroundColor:d}:void 0,onClick:t=>{t.stopPropagation(),r?.(e)},children:[c?``:e.title,f&&(0,F.jsx)(`span`,{role:`separator`,"aria-label":`Resize event end`,title:`Drag to change end date`,draggable:!0,onDragStart:n=>h(n,e,`resize-end`,t),onDragEnd:g,onClick:e=>e.stopPropagation(),className:`absolute inset-y-0 right-0 w-2 cursor-ew-resize bg-black/25 hover:bg-black/50 rounded-r`})]},`${e.id}-${s}`)}),l.length>4&&(0,F.jsx)(`div`,{className:`text-xs text-muted-foreground px-2`,children:c(`calendar.moreEvents`,{count:l.length-4})})]})]},n)})})]})}var G=48;function K(e){let t=new Date(e);return t.setHours(0,0,0,0),t}function q(e){return e.getHours()*60+e.getMinutes()}function J(e){return`${e.getFullYear()}-${e.getMonth()}-${e.getDate()}`}function Y({mode:e,date:t,events:n,locale:r=`default`,slotMinutes:i=30,onEventClick:a,onEventDrop:o,onTimeRangeSelect:s}){let{t:c}=B(),l=G*i/60,u=G*24,d=P.useMemo(()=>{if(e===`day`)return[K(t)];let n=H(t);return Array.from({length:7},(e,t)=>{let r=new Date(n);return r.setDate(n.getDate()+t),K(r)})},[e,t.getFullYear(),t.getMonth(),t.getDate()]),f=P.useMemo(()=>new Date,[]),p=P.useCallback(e=>{if(e.allDay)return!0;let t=new Date(e.start),n=e.end?new Date(e.end):new Date(t),r=t.getHours()===0&&t.getMinutes()===0&&t.getSeconds()===0,i=n.getHours()===0&&n.getMinutes()===0&&n.getSeconds()===0,a=n.getTime()-t.getTime();return!!(r&&i||a>=1440*60*1e3)},[]),{allDayEvents:m,timedEvents:h}=P.useMemo(()=>{let e=[],t=[];for(let r of n)p(r)?e.push(r):t.push(r);return{allDayEvents:e,timedEvents:t}},[n,p]),g=P.useMemo(()=>{let e=new Map;for(let t of d)e.set(J(t),[]);for(let t of m){let n=K(new Date(t.start)),r=t.end?new Date(t.end):new Date(t.start),i=K(r);r.getHours()===0&&r.getMinutes()===0&&r.getSeconds()===0&&r.getTime()>n.getTime()&&(i=new Date(i),i.setDate(i.getDate()-1));for(let r of d){let a=K(r);a<n||a>i||e.get(J(r)).push({event:t,isStart:a.getTime()===n.getTime(),isEnd:a.getTime()===i.getTime()})}}return e},[d,m]),_=P.useMemo(()=>{let e=new Map;for(let t of d)e.set(J(t),[]);for(let t of h){let n=new Date(t.start),r=t.end?new Date(t.end):new Date(n.getTime()+3600*1e3);for(let i of d){let a=K(i),o=new Date(a);if(o.setDate(o.getDate()+1),r<=a||n>=o)continue;let s=n<a?a:n,c=r>o?o:r,l=q(s),u=c.getTime()===o.getTime()?1440:q(c);e.get(J(i)).push({event:t,startMin:l,endMin:Math.max(u,l+15),isStart:s.getTime()===n.getTime(),isEnd:c.getTime()===r.getTime()})}}return e},[d,h]),v=P.useMemo(()=>{let e=new Map;for(let[t,n]of _){let r=[...n].sort((e,t)=>e.startMin-t.startMin||e.endMin-t.endMin),i=[],a=[],o=[];for(let e of r){let t=0;for(;i[t]&&i[t].endMin>e.startMin;)t++;i[t]={endMin:e.endMin},a.push({entry:e,col:t})}for(let e=0;e<a.length;e++){let t=a[e],n=t.col;for(let r=0;r<a.length;r++){if(r===e)continue;let i=a[r];i.entry.startMin<t.entry.endMin&&i.entry.endMin>t.entry.startMin&&i.col>n&&(n=i.col)}o.push({...t.entry,col:t.col,cols:n+1})}e.set(t,o)}return e},[_]),y=P.useRef(null),b=P.useRef([]),[x,S]=P.useState(null),C=P.useRef(null);C.current=x;let w=P.useRef(!1),T=P.useCallback((e,t)=>{let n=b.current[t];if(!n)return 0;let r=(e-n.getBoundingClientRect().top+n.scrollTop)/G*60,a=Math.round(r/i)*i;return Math.max(0,Math.min(1440,a))},[i]),E=P.useCallback(e=>{for(let t=0;t<b.current.length;t++){let n=b.current[t];if(!n)continue;let r=n.getBoundingClientRect();if(e>=r.left&&e<=r.right)return t}return-1},[]);P.useEffect(()=>{if(!x)return;let e=e=>{let t=x.kind===`select`||x.kind===`move`?E(e.clientX):x.dayIndex,n=t<0?x.dayIndex??0:t,r=T(e.clientY,n);S(e=>e&&(e.kind===`select`?{...e,dayIndex:n>=0?n:e.dayIndex,headMinutes:r}:e.kind===`move`?{...e,dayIndex:n,minutes:r}:{...e,minutes:r}))},t=e=>{let t=C.current;if(!t){S(null);return}try{if(t.kind===`select`&&s){let e=Math.min(t.anchorMinutes,t.headMinutes),n=Math.max(t.anchorMinutes,t.headMinutes),r=e,a=n===e?Math.min(1440,e+i):n,o=d[t.dayIndex]??d[0],c=new Date(o);c.setHours(0,Math.round(r),0,0);let l=new Date(o);l.setHours(0,Math.round(a),0,0),w.current=!0,s(c,l)}else if(t.kind===`move`&&o){let e=n.find(e=>String(e.id)===String(t.eventId));if(e){let n=t.dayIndex<0?0:t.dayIndex,r=t.minutes-t.grabMinuteOffset,a=Math.max(0,Math.min(1440-t.durationMin,Math.round(r/i)*i)),s=d[n]??d[0],c=new Date(s);c.setHours(0,a,0,0);let l=new Date(c.getTime()+t.durationMin*60*1e3);w.current=!0,o(e,c,l)}}else if(t.kind===`resize-top`&&o){let e=n.find(e=>String(e.id)===String(t.eventId));if(e){let n=d[t.dayIndex]??d[0],r=Math.min(t.anchorEndMin-i,Math.max(0,t.minutes)),a=new Date(n);a.setHours(0,r,0,0);let s=new Date(n);s.setHours(0,t.anchorEndMin,0,0),w.current=!0,o(e,a,s)}}else if(t.kind===`resize-bottom`&&o){let e=n.find(e=>String(e.id)===String(t.eventId));if(e){let n=d[t.dayIndex]??d[0],r=Math.max(t.anchorStartMin+i,Math.min(1440,t.minutes)),a=new Date(n);a.setHours(0,t.anchorStartMin,0,0);let s=new Date(n);s.setHours(0,r,0,0),w.current=!0,o(e,a,s)}}}finally{S(null),setTimeout(()=>{w.current=!1},50)}};return window.addEventListener(`pointermove`,e),window.addEventListener(`pointerup`,t),()=>{window.removeEventListener(`pointermove`,e),window.removeEventListener(`pointerup`,t)}},[x,d,n,i,o,s,E,T]);let D=P.useMemo(()=>d.map(e=>({weekday:e.toLocaleDateString(r,{weekday:`short`}),day:e.getDate(),month:e.toLocaleDateString(r,{month:`short`}),isToday:U(e,f)})),[d,r,f]),O=P.useMemo(()=>Array.from({length:24},(e,t)=>new Date(2024,0,1,t,0).toLocaleTimeString(r,{hour:`numeric`})),[r]),k=(e,t,n,r)=>{if(!o||e.button!==0)return;e.stopPropagation(),e.preventDefault();let i=T(e.clientY,n);S(r===`body`?{kind:`move`,eventId:t.event.id,grabMinuteOffset:Math.max(0,i-t.startMin),durationMin:t.endMin-t.startMin,dayIndex:n,minutes:i}:r===`top`?{kind:`resize-top`,eventId:t.event.id,anchorEndMin:t.endMin,dayIndex:n,minutes:i}:{kind:`resize-bottom`,eventId:t.event.id,anchorStartMin:t.startMin,dayIndex:n,minutes:i})},j=(e,t)=>{if(!s||e.button!==0)return;e.preventDefault();let n=T(e.clientY,t);S({kind:`select`,dayIndex:t,anchorMinutes:n,headMinutes:n})},ee=e=>{if(!x)return null;if(x.kind===`select`&&x.dayIndex===e){let t=Math.min(x.anchorMinutes,x.headMinutes),n=Math.max(x.anchorMinutes,x.headMinutes);return(0,F.jsx)(`div`,{className:`absolute left-1 right-1 rounded bg-primary/30 border border-primary pointer-events-none z-10`,style:{top:t/60*G,height:Math.max(l,(n-t)/60*G)},"aria-hidden":!0,children:(0,F.jsx)(`div`,{className:`px-2 py-0.5 text-xs font-medium text-primary`,children:X(d[e],t,n,r)})})}if(x.kind===`move`&&x.dayIndex===e){let t=x.minutes-x.grabMinuteOffset,n=Math.max(0,Math.min(1440-x.durationMin,Math.round(t/i)*i));return(0,F.jsx)(`div`,{className:`absolute left-1 right-1 rounded border-2 border-dashed border-primary bg-primary/10 pointer-events-none z-10`,style:{top:n/60*G,height:x.durationMin/60*G},"aria-hidden":!0,children:(0,F.jsx)(`div`,{className:`px-2 py-0.5 text-xs font-medium text-primary`,children:X(d[e],n,n+x.durationMin,r)})})}if((x.kind===`resize-top`||x.kind===`resize-bottom`)&&x.dayIndex===e){let t,n;return x.kind===`resize-top`?(t=Math.min(x.anchorEndMin-i,Math.max(0,x.minutes)),n=x.anchorEndMin):(t=x.anchorStartMin,n=Math.max(x.anchorStartMin+i,Math.min(1440,x.minutes))),(0,F.jsx)(`div`,{className:`absolute left-1 right-1 rounded border-2 border-dashed border-primary bg-primary/10 pointer-events-none z-10`,style:{top:t/60*G,height:(n-t)/60*G},"aria-hidden":!0,children:(0,F.jsx)(`div`,{className:`px-2 py-0.5 text-xs font-medium text-primary`,children:X(d[e],t,n,r)})})}return null};return(0,F.jsxs)(`div`,{className:`flex flex-col h-full`,ref:y,children:[(0,F.jsxs)(`div`,{className:`flex border-b sticky top-0 bg-background z-20`,children:[(0,F.jsx)(`div`,{className:`w-14 shrink-0 border-r`,"aria-hidden":!0}),D.map((e,t)=>(0,F.jsxs)(`div`,{role:`columnheader`,className:A(`flex-1 p-2 text-center text-sm border-r last:border-r-0`,e.isToday&&`bg-primary/5`),children:[(0,F.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e.weekday}),(0,F.jsx)(`div`,{className:A(`font-medium`,e.isToday&&`inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground h-6 w-6 mx-auto`),children:e.day})]},t))]}),m.length>0&&(0,F.jsxs)(`div`,{className:`flex border-b bg-muted/20 max-h-[140px] overflow-y-auto`,children:[(0,F.jsx)(`div`,{className:`w-14 shrink-0 border-r flex items-start justify-end pr-1 pt-1 text-[10px] text-muted-foreground sticky left-0 bg-muted/20`,children:c(`calendar.allDay`)===`calendar.allDay`?`all-day`:c(`calendar.allDay`)}),d.map(e=>{let t=J(e);return(0,F.jsx)(`div`,{className:`flex-1 border-r last:border-r-0 min-h-[28px] p-0.5 space-y-0.5`,children:(g.get(t)??[]).map(({event:e,isStart:t,isEnd:n},r)=>{let{className:i,inlineColor:o}=z(e.color);return(0,F.jsx)(`div`,{role:`button`,title:e.title,onClick:t=>{t.stopPropagation(),a?.(e)},className:A(`text-[11px] px-2 py-0.5 truncate cursor-pointer hover:opacity-80`,t?`rounded-l`:`rounded-l-none -ml-0.5`,n?`rounded-r`:`rounded-r-none -mr-0.5`,i),style:o?{backgroundColor:o}:void 0,children:t?e.title:`\xA0`},`${e.id}-${r}`)})},t)})]}),(0,F.jsx)(`div`,{className:`flex-1 overflow-auto`,children:(0,F.jsxs)(`div`,{className:`flex`,style:{height:u},children:[(0,F.jsx)(`div`,{className:`w-14 shrink-0 border-r relative`,children:O.map((e,t)=>(0,F.jsx)(`div`,{className:`absolute right-1 text-[10px] text-muted-foreground -translate-y-1/2`,style:{top:t*G},children:t===0?``:e},t))}),d.map((e,t)=>{let n=J(e),s=v.get(n)??[];return(0,F.jsxs)(`div`,{ref:e=>{b.current[t]=e},className:`flex-1 border-r last:border-r-0 relative select-none`,style:{height:u},onPointerDown:e=>j(e,t),"aria-label":e.toLocaleDateString(r,{weekday:`long`,month:`long`,day:`numeric`,year:`numeric`}),children:[Array.from({length:24},(e,t)=>(0,F.jsx)(`div`,{className:`absolute left-0 right-0 border-t border-muted/60 pointer-events-none`,style:{top:t*G}},t)),i<60&&Array.from({length:Math.floor(1440/i)},(e,t)=>{let n=t*i;return n%60==0?null:(0,F.jsx)(`div`,{className:`absolute left-0 right-0 border-t border-dashed border-muted/30 pointer-events-none`,style:{top:n/60*G}},t)}),s.map(n=>{let i=n.startMin/60*G,s=Math.max(l,(n.endMin-n.startMin)/60*G),c=100/n.cols,u=n.col*c,{className:d,inlineColor:f}=z(n.event.color),p=x&&x.eventId===n.event.id;return(0,F.jsxs)(`div`,{role:`button`,tabIndex:0,title:n.event.title,"aria-label":n.event.title,onPointerDown:e=>k(e,n,t,`body`),onClick:e=>{if(w.current){e.stopPropagation();return}e.stopPropagation(),a?.(n.event)},className:A(`absolute rounded text-xs px-2 py-1 overflow-hidden shadow-sm`,o?`cursor-move`:`cursor-pointer`,d,p&&`opacity-40`),style:{top:i,height:s,left:`calc(${u}% + 2px)`,width:`calc(${c}% - 4px)`,...f?{backgroundColor:f}:{}},children:[(0,F.jsx)(`div`,{className:`font-medium truncate`,children:n.event.title}),(0,F.jsx)(`div`,{className:`text-[10px] opacity-80 truncate`,children:X(e,n.startMin,n.endMin,r)}),o&&n.isStart&&(0,F.jsx)(`div`,{onPointerDown:e=>k(e,n,t,`top`),className:`absolute top-0 left-0 right-0 h-1.5 cursor-ns-resize`,"aria-label":`Resize start`}),o&&n.isEnd&&(0,F.jsx)(`div`,{onPointerDown:e=>k(e,n,t,`bottom`),className:`absolute bottom-0 left-0 right-0 h-1.5 cursor-ns-resize`,"aria-label":`Resize end`})]},`${n.event.id}-${n.startMin}`)}),ee(t)]},n)})]})})]})}function X(e,t,n,r){let i=new Date(e);i.setHours(0,Math.round(t),0,0);let a=new Date(e);a.setHours(0,Math.round(n),0,0);let o=e=>e.toLocaleTimeString(r,{hour:`numeric`,minute:`2-digit`});return`${o(i)} – ${o(a)}`}function se(e){return`data`in e&&e.data?e.data:`staticData`in e&&e.staticData?{provider:`value`,items:e.staticData}:e.objectName?{provider:`object`,object:e.objectName}:null}function ce(e){if(e){if(typeof e==`string`){let t=e.split(` `),n=t[0],r=t[1]?.toLowerCase()===`desc`?`desc`:`asc`;return{[n]:r}}if(Array.isArray(e))return e.reduce((e,t)=>(t.field&&t.order&&(e[t.field]=t.order),e),{})}}function le(e){return`filter`in e&&e.filter&&typeof e.filter==`object`&&`calendar`in e.filter?e.filter.calendar:e.calendar?e.calendar:e.startDateField||e.dateField?{startDateField:e.startDateField||e.dateField,endDateField:e.endDateField||e.endField,titleField:e.titleField,colorField:e.colorField,allDayField:e.allDayField}:null}var Z=({schema:e,dataSource:t,className:n,data:r,loading:a,onEventClick:s,onRowClick:c,onDateClick:u,onNavigate:f,onViewChange:p,onEventDrop:h,locale:v})=>{let b=Array.isArray(r),[x,S]=(0,P.useState)(b?r:[]),[C,T]=(0,P.useState)(b?a??!1:!0),[E,A]=(0,P.useState)(null),[j,te]=(0,P.useState)(null),[re,ie]=(0,P.useState)(new Date),I=O(),L=e.defaultView,[R,z]=(0,P.useState)(()=>{let e=L===`day`||!L;return typeof window<`u`&&window.innerWidth<768&&e?`month`:L||`month`});(0,P.useEffect)(()=>{I&&R===`day`&&(L===`day`||!L)&&z(`month`)},[I]);let[ae,B]=(0,P.useState)(0);(0,P.useEffect)(()=>{if(!b&&!(!t?.onMutation||!e.objectName))return t.onMutation(t=>{t.resource===e.objectName&&B(e=>e+1)})},[t,e.objectName,b]);let{ref:H,isRefreshing:oe,pullDistance:U}=ne({onRefresh:(0,P.useCallback)(async()=>{B(e=>e+1)},[]),enabled:!!t&&!!e.objectName}),W=(0,P.useMemo)(()=>se(e),[e.data,e.staticData,e.objectName]),G=(0,P.useMemo)(()=>le(e),[e.filter,e.calendar,e.dateField,e.endField,e.titleField,e.colorField]),K=W?.provider===`value`,q=(0,P.useRef)(null);q.current=j,(0,P.useEffect)(()=>{b&&S(r)},[r,b]),(0,P.useEffect)(()=>{b&&a!==void 0&&T(a)},[a,b]),(0,P.useEffect)(()=>{if(b)return;let n=!0;return(async()=>{try{if(!n)return;if(T(!0),K&&W?.provider===`value`){n&&(S(W.items),T(!1));return}if(!t||typeof t.find!=`function`)throw Error(`DataSource required for object/api providers`);if(W?.provider===`object`){let r=W.object,i=o(q.current?.fields),a=l(await t.find(r,{$filter:e.filter,$orderby:ce(e.sort),...i.length>0?{$expand:i}:{}}));n&&S(a)}else W?.provider===`api`&&(console.warn(`API provider not yet implemented for ObjectCalendar`),n&&S([]));n&&T(!1)}catch(e){console.error(`[ObjectCalendar] Error fetching data:`,e),n&&(A(e),T(!1))}})(),()=>{n=!1}},[b,W,t,K,e.filter,e.sort,ae]),(0,P.useEffect)(()=>{!K&&t&&(async()=>{try{if(!t)return;let n=W?.provider===`object`?W.object:e.objectName;if(!n)return;te(await t.getObjectSchema(n))}catch(e){console.error(`Failed to fetch object schema:`,e)}})()},[e.objectName,t,K,W]);let J=(0,P.useMemo)(()=>{if(!G||!x.length)return[];let{startDateField:e,endDateField:t,titleField:n,colorField:r}=G,i=j?.titleFormat,a=typeof i==`string`?i:i&&typeof i==`object`&&typeof i.source==`string`?i.source:void 0,o=j?.NAME_FIELD_KEY,s=[`name`,`full_name`,`fullName`,`title`,`subject`,`label`,`display_name`,`displayName`],c=(e,t)=>{let n=`[-\\u2013\\u2014|/·,:]`,r=!1,i=e.replace(/\{([^{}]+)\}/g,(e,n)=>{let i=t[n.trim()];return i!=null&&i!==``?(r=!0,String(i)):`\0`});return r?i.replace(RegExp(`\\s*${n}\\s*`,`g`),``).replace(RegExp(`\\s*${n}\\s*`,`g`),``).replace(RegExp(`\0`,`g`),``).replace(/\s+/g,` `).trim():``},l=e=>{let t;if(n&&(t=e[n],typeof t==`string`&&(t=t.trim())),!t&&a){let n=c(a,e);n&&(t=n)}if(!t&&o){let n=e[o];typeof n==`string`?t=n.trim():n&&(t=n)}if(!t)for(let n of s){let r=e[n],i=typeof r==`string`?r.trim():r;if(i){t=i;break}}return t||`Untitled`};return x.map((n,i)=>{let a=n[e],o=t?n[t]:null,s=l(n),c=r?n[r]:void 0;return{id:n.id||n._id||`event-${i}`,title:s,start:a?new Date(a):new Date,end:o?new Date(o):void 0,color:c,allDay:!o,data:n}}).filter(e=>!isNaN(e.start.getTime()))},[x,G,j]);(0,P.useCallback)(()=>{u?.(new Date)},[u]);let Y=e.navigation??{mode:`drawer`,width:`min(960px, 60vw)`},X=Y.mode===`drawer`||Y.mode===`modal`||Y.mode===`split`||Y.mode===`popover`,Z=i({navigation:Y,objectName:e.objectName,onRowClick:X?void 0:c}),ue=(0,P.useCallback)(async(n,r,i)=>{if(!G)return;let{startDateField:a,endDateField:o}=G,s=n?.id??n?._id;if(!s||!e.objectName||!t?.update)return;let c={[a]:r.toISOString()};o&&i&&(c[o]=i.toISOString());let l=x;S(e=>e.map(e=>(e?.id??e?._id)===s?{...e,...c}:e));try{await t.update(e.objectName,s,c)}catch(e){S(l),console.error(`[ObjectCalendar] Failed to persist drag-and-drop reschedule:`,e)}},[G,e.objectName,t,x]),[Q,$]=(0,P.useState)(null),de=(0,P.useCallback)(n=>{!G||!e.objectName||!t?.create||$({start:n,title:``,submitting:!1})},[G,e.objectName,t]),fe=(0,P.useCallback)((n,r)=>{!G||!e.objectName||!t?.create||$({start:n,end:r,title:``,submitting:!1})},[G,e.objectName,t]),pe=(0,P.useCallback)(async()=>{if(!Q||!G)return;let n=Q.title.trim();if(!n){$(e=>e&&{...e,error:`Title is required`});return}if(!e.objectName||!t?.create)return;$(e=>e&&{...e,submitting:!0,error:void 0});let{startDateField:r,endDateField:i,titleField:a}=G,o={[a||`name`]:n,[r]:Q.start.toISOString()};i&&(o[i]=(Q.end??Q.start).toISOString());let s=j?.fields;if(s&&typeof s==`object`){let e=Array.isArray(s)?s.map(e=>[e.name??e.apiName,e]):Object.entries(s);for(let[t,n]of e){if(!t||t in o||!n?.required)continue;if(n.defaultValue!==void 0&&n.defaultValue!==null){o[t]=n.defaultValue;continue}let e=n.type;if(e===`select`||e===`picklist`||e===`status`){let e=(n.options||n.choices||[])[0];e!==void 0&&(o[t]=typeof e==`object`?e.value??e.id:e)}else e===`boolean`||e===`checkbox`?o[t]=!1:(e===`number`||e===`integer`||e===`decimal`||e===`currency`||e===`percent`)&&(o[t]=0)}}try{let n=await t.create(e.objectName,o),r=(n&&(n.record||n.data||n))??null;r&&(r.id!==void 0||r._id!==void 0)&&S(e=>[...e,r]),$(null)}catch(e){let t=e?.message||String(e);$(e=>e&&{...e,submitting:!1,error:t}),console.error(`[ObjectCalendar] Quick-create failed:`,e)}},[Q,G,e.objectName,t,j]);return C?(0,F.jsx)(`div`,{className:n,children:(0,F.jsx)(`div`,{className:`flex items-center justify-center h-96`,children:(0,F.jsx)(`div`,{className:`text-muted-foreground`,children:`Loading calendar...`})})}):E?(0,F.jsx)(`div`,{className:n,children:(0,F.jsx)(`div`,{className:`flex items-center justify-center h-96`,children:(0,F.jsxs)(`div`,{className:`text-destructive`,children:[`Error: `,E.message]})})}):G?(0,F.jsxs)(`div`,{ref:H,className:n,children:[U>0&&(0,F.jsx)(`div`,{className:`flex items-center justify-center text-xs text-muted-foreground`,style:{height:U},children:oe?`Refreshing…`:`Pull to refresh`}),(0,F.jsx)(`div`,{className:`bg-background h-[calc(100vh-120px)] sm:h-[calc(100vh-160px)] md:h-[calc(100vh-200px)] min-h-[400px] sm:min-h-[600px]`,children:(0,F.jsx)(V,{events:J,currentDate:re,view:R,locale:v,onEventClick:e=>{Z.handleClick(e.data),X||s?.(e.data)},onDateClick:e=>{u?u(e):de(e)},onNavigate:e=>{ie(e),f?.(e)},onViewChange:e=>{z(e),p?.(e)},onAddClick:void 0,onEventDrop:(e,t,n)=>{h?h(e.data,t,n):ue(e.data,t,n)},onTimeRangeSelect:fe})}),(0,F.jsx)(m,{open:!!Q,onOpenChange:e=>{e||$(null)},children:(0,F.jsxs)(g,{className:`sm:max-w-md`,children:[(0,F.jsxs)(ee,{children:[(0,F.jsx)(d,{children:`New event`}),(0,F.jsx)(_,{children:Q&&(()=>{let e=Q.end&&Q.end.getTime()!==Q.start.getTime(),t=Q.start.toLocaleDateString(v,{year:`numeric`,month:`long`,day:`numeric`});if(e){let e=e=>e.toLocaleTimeString(v,{hour:`numeric`,minute:`2-digit`});return(0,F.jsxs)(F.Fragment,{children:[t,` · `,e(Q.start),` – `,e(Q.end)]})}return(0,F.jsxs)(F.Fragment,{children:[`On `,t]})})()})]}),(0,F.jsxs)(`div`,{className:`space-y-2`,children:[(0,F.jsx)(D,{htmlFor:`quick-create-title`,children:`Title`}),(0,F.jsx)(w,{id:`quick-create-title`,autoFocus:!0,value:Q?.title??``,onChange:e=>$(t=>t&&{...t,title:e.target.value,error:void 0}),onKeyDown:e=>{e.key===`Enter`&&!Q?.submitting&&(e.preventDefault(),pe())},placeholder:`What's this event about?`,disabled:Q?.submitting}),Q?.error&&(0,F.jsx)(`p`,{className:`text-sm text-destructive`,children:Q.error})]}),(0,F.jsxs)(y,{children:[(0,F.jsx)(k,{variant:`outline`,onClick:()=>$(null),disabled:Q?.submitting,children:`Cancel`}),(0,F.jsx)(k,{onClick:()=>void pe(),disabled:Q?.submitting||!Q?.title.trim(),children:Q?.submitting?`Creating…`:`Create`})]})]})}),Z.isOverlay&&Z.isOpen&&Z.selectedRecord&&(()=>{let n=W?.provider===`object`?W.object:e.objectName,r=Z.selectedRecord,i=r.id??r._id;if(!n||i==null)return null;let a=G?.titleField?String(r[G.titleField]??`Event Details`):`Event Details`;return(0,F.jsx)(N,{open:!0,onClose:Z.close,title:a,record:r,objectName:n,recordId:i,dataSource:t,objectSchema:j,width:Z.width??`min(960px, 60vw)`,fullPageHref:M(n,i)??void 0,onFieldSave:async(e,r)=>{t?.update&&(await t.update(n,String(i),{[e]:r}),S(t=>t.map(t=>String(t.id??t._id)===String(i)?{...t,[e]:r}:t)))},onDelete:async()=>{t?.delete&&(await t.delete(n,String(i)),S(e=>e.filter(e=>String(e.id??e._id)!==String(i))))}})})()]}):(0,F.jsx)(`div`,{className:n,children:(0,F.jsx)(`div`,{className:`flex items-center justify-center h-96`,children:(0,F.jsx)(`div`,{className:`text-muted-foreground`,children:`Calendar configuration required. Please specify startDateField and titleField.`})})})};s.register(`calendar-view`,({schema:e,className:t,onAction:n,...r})=>{let i=P.useMemo(()=>!e.data||!Array.isArray(e.data)?[]:e.data.map((t,n)=>{let r=e.titleField||`title`,i=e.startDateField||`start`,a=e.endDateField||`end`,o=e.colorField||`color`,s=e.allDayField||`allDay`;return{id:t.id||t._id||n,title:t[r]||`Untitled Event`,start:new Date(t[i]),end:t[a]?new Date(t[a]):void 0,allDay:t[s],color:t[o],data:t}}),[e.data,e.titleField,e.startDateField,e.endDateField,e.colorField,e.allDayField]);return(0,F.jsx)(V,{className:t,events:i,onEventClick:e=>{n?.({type:`event-click`,payload:e})},...r})},{namespace:`plugin-calendar`,label:`Calendar View`,inputs:[{name:`data`,type:`array`,label:`Data`,description:`Array of record objects to display as events`},{name:`titleField`,type:`string`,label:`Title Field`,defaultValue:`title`,description:`Field name to use for event title`},{name:`startDateField`,type:`string`,label:`Start Date Field`,defaultValue:`start`,description:`Field name for event start date`},{name:`endDateField`,type:`string`,label:`End Date Field`,defaultValue:`end`,description:`Field name for event end date (optional)`},{name:`allDayField`,type:`string`,label:`All Day Field`,defaultValue:`allDay`,description:`Field name for all-day flag`},{name:`colorField`,type:`string`,label:`Color Field`,defaultValue:`color`,description:`Field name for event color`},{name:`colorMapping`,type:`object`,label:`Color Mapping`,description:`Map field values to colors (e.g., {meeting: "blue", deadline: "red"})`},{name:`view`,type:`enum`,enum:[`month`,`week`,`day`],defaultValue:`month`,label:`View Mode`,description:`Calendar view mode (month, week, or day)`},{name:`currentDate`,type:`string`,label:`Current Date`,description:`ISO date string for initial calendar date`},{name:`allowCreate`,type:`boolean`,label:`Allow Create`,defaultValue:!1,description:`Allow creating events by clicking on dates`},{name:`className`,type:`string`,label:`CSS Class`}],defaultProps:{view:`month`,titleField:`title`,startDateField:`start`,endDateField:`end`,allDayField:`allDay`,colorField:`color`,allowCreate:!1,data:[{id:1,title:`Team Meeting`,start:new Date(new Date().setHours(10,0,0,0)).toISOString(),end:new Date(new Date().setHours(11,0,0,0)).toISOString(),color:`#3b82f6`,allDay:!1},{id:2,title:`Project Deadline`,start:new Date(new Date().setDate(new Date().getDate()+3)).toISOString(),color:`#ef4444`,allDay:!0},{id:3,title:`Conference`,start:new Date(new Date().setDate(new Date().getDate()+7)).toISOString(),end:new Date(new Date().setDate(new Date().getDate()+9)).toISOString(),color:`#10b981`,allDay:!0}],className:`h-[600px] border rounded-lg`}});var ue=t({CalendarView:()=>V,ObjectCalendar:()=>Z,ObjectCalendarRenderer:()=>Q}),Q=({schema:e,...t})=>{let{dataSource:n}=a()||{};return(0,F.jsx)(Z,{schema:e,dataSource:n,...t})};s.register(`object-calendar`,Q,{namespace:`plugin-calendar`,label:`Object Calendar`,category:`view`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`calendar`,type:`object`,label:`Calendar Config`,description:`startDateField, endDateField, titleField, colorField`}]}),s.register(`calendar`,Q,{namespace:`view`,label:`Calendar View`,category:`view`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`calendar`,type:`object`,label:`Calendar Config`,description:`startDateField, endDateField, titleField, colorField`}]});export{ue as t};
|