@baseplate-dev/project-builder-web 0.2.6 → 0.3.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/-constants-C0cnDlAn.js +4 -0
- package/dist/assets/-constants-C0cnDlAn.js.map +1 -0
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/web-BCejYgPM.js +2 -0
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/{web-CEscUEnR.js.map → web-BCejYgPM.js.map} +1 -1
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-BxDAWgq7.js +2 -0
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-BxDAWgq7.js.map +1 -0
- package/dist/assets/__federation_shared_@baseplate-dev/ui-components-D6OnTPTN.js +46 -0
- package/dist/assets/__federation_shared_@baseplate-dev/ui-components-D6OnTPTN.js.map +1 -0
- package/dist/assets/__federation_shared_@baseplate-dev/utils-DvvrgoSE.js +5 -0
- package/dist/assets/__federation_shared_@baseplate-dev/utils-DvvrgoSE.js.map +1 -0
- package/dist/assets/__federation_shared_@tanstack/react-router-B5c6YNeC.js +19 -0
- package/dist/assets/__federation_shared_@tanstack/react-router-B5c6YNeC.js.map +1 -0
- package/dist/assets/__federation_shared_react-WURrSs1p.js +2 -0
- package/dist/assets/{__federation_shared_react-CTQ9xfiH.js.map → __federation_shared_react-WURrSs1p.js.map} +1 -1
- package/dist/assets/__federation_shared_react-dom-CWagDEjd.js +2 -0
- package/dist/assets/{__federation_shared_react-dom-DPv53nVg.js.map → __federation_shared_react-dom-CWagDEjd.js.map} +1 -1
- package/dist/assets/_commonjsHelpers-CqkleIqs.js +2 -0
- package/dist/assets/_commonjsHelpers-CqkleIqs.js.map +1 -0
- package/dist/assets/_virtual___federation_fn_import-DXu2m-ZE.js +2 -0
- package/dist/assets/{_virtual___federation_fn_import-BLYgPlMt.js.map → _virtual___federation_fn_import-DXu2m-ZE.js.map} +1 -1
- package/dist/assets/admin-Bw70Pql0.js +2 -0
- package/dist/assets/admin-Bw70Pql0.js.map +1 -0
- package/dist/assets/backend-CoqSwiCt.js +2 -0
- package/dist/assets/{backend-hJNcdERv.js.map → backend-CoqSwiCt.js.map} +1 -1
- package/dist/assets/badge-with-type-label-BXoSRTRE.js +2 -0
- package/dist/assets/{badge-with-type-label-CezAtjFy.js.map → badge-with-type-label-BXoSRTRE.js.map} +1 -1
- package/dist/assets/edit._key-CtMMGDWu.js +2 -0
- package/dist/assets/edit._key-CtMMGDWu.js.map +1 -0
- package/dist/assets/edit._sectionKey-CTX9L0j4.js +3 -0
- package/dist/assets/edit._sectionKey-CTX9L0j4.js.map +1 -0
- package/dist/assets/enum-info-form-D5bAsvPH.js +2 -0
- package/dist/assets/{enum-info-form-xlZ2HO8I.js.map → enum-info-form-D5bAsvPH.js.map} +1 -1
- package/dist/assets/graphql-BmA-sAqU.js +2 -0
- package/dist/assets/{graphql-D3J4ZWXL.js.map → graphql-BmA-sAqU.js.map} +1 -1
- package/dist/assets/hierarchy-CZorhmS7.js +2 -0
- package/dist/assets/{hierarchy-DF9lzUjz.js.map → hierarchy-CZorhmS7.js.map} +1 -1
- package/dist/assets/immer-B7fdkLVi.js +2 -0
- package/dist/assets/immer-B7fdkLVi.js.map +1 -0
- package/dist/assets/index-BABen-rU.js +2 -0
- package/dist/assets/index-BABen-rU.js.map +1 -0
- package/dist/assets/index-BGLRovL6.js +2 -0
- package/dist/assets/index-BGLRovL6.js.map +1 -0
- package/dist/assets/index-BPzqpd9P.js +2 -0
- package/dist/assets/{index-DJsZccoO.js.map → index-BPzqpd9P.js.map} +1 -1
- package/dist/assets/index-BUYA3Tes.js +40 -0
- package/dist/assets/index-BUYA3Tes.js.map +1 -0
- package/dist/assets/index-Bl_iRlKL.js +2 -0
- package/dist/assets/index-Bl_iRlKL.js.map +1 -0
- package/dist/assets/index-BpDkQSTy.js +2 -0
- package/dist/assets/{index-BdmJimiZ.js.map → index-BpDkQSTy.js.map} +1 -1
- package/dist/assets/index-CaiaVpxa.js +2 -0
- package/dist/assets/index-CaiaVpxa.js.map +1 -0
- package/dist/assets/index-CsGKSjOd.js +2 -0
- package/dist/assets/index-CsGKSjOd.js.map +1 -0
- package/dist/assets/index-D-dbw3Qx.js +2 -0
- package/dist/assets/{index-1ErFJbDw.js.map → index-D-dbw3Qx.js.map} +1 -1
- package/dist/assets/index-DCiH936w.js +2 -0
- package/dist/assets/{index-Bv8hyN9u.js.map → index-DCiH936w.js.map} +1 -1
- package/dist/assets/index-DDivWD4R.js +2 -0
- package/dist/assets/index-DDivWD4R.js.map +1 -0
- package/dist/assets/index-DpJKJe06.js +2 -0
- package/dist/assets/index-DpJKJe06.js.map +1 -0
- package/dist/assets/{index-B0D_rfGi.js → index-DqHVrEeL.js} +2 -2
- package/dist/assets/{index-B0D_rfGi.js.map → index-DqHVrEeL.js.map} +1 -1
- package/dist/assets/index-PlVWOW99.css +1 -0
- package/dist/assets/index-_mf2naQd.js +2 -0
- package/dist/assets/index-_mf2naQd.js.map +1 -0
- package/dist/assets/{index-9Ra4Lmds.js → index-c0qeY2gs.js} +3 -3
- package/dist/assets/{index-9Ra4Lmds.js.map → index-c0qeY2gs.js.map} +1 -1
- package/dist/assets/index-p--SDqro.js +2 -0
- package/dist/assets/{index-B5-Qczd9.js.map → index-p--SDqro.js.map} +1 -1
- package/dist/assets/index.esm-CTDJ8Wko.js +2 -0
- package/dist/assets/index.esm-CTDJ8Wko.js.map +1 -0
- package/dist/assets/jsx-runtime-D_zvdyIk.js +10 -0
- package/dist/assets/jsx-runtime-D_zvdyIk.js.map +1 -0
- package/dist/assets/model-info-form-pKQBCJu4.js +2 -0
- package/dist/assets/{model-info-form-VtbYsjrH.js.map → model-info-form-pKQBCJu4.js.map} +1 -1
- package/dist/assets/model-merger-vEOkdVdS.js +2 -0
- package/dist/assets/model-merger-vEOkdVdS.js.map +1 -0
- package/dist/assets/new-admin-section-dialog-F58HZ0yO.js +2 -0
- package/dist/assets/new-admin-section-dialog-F58HZ0yO.js.map +1 -0
- package/dist/assets/new-app-dialog-DPQv-mvi.js +2 -0
- package/dist/assets/new-app-dialog-DPQv-mvi.js.map +1 -0
- package/dist/assets/new-enum-dialog-xVvneRQN.js +2 -0
- package/dist/assets/{new-enum-dialog-B0QcIWdY.js.map → new-enum-dialog-xVvneRQN.js.map} +1 -1
- package/dist/assets/new-model-dialog-ApenxGWq.js +2 -0
- package/dist/assets/{new-model-dialog-CM2dJ8Iv.js.map → new-model-dialog-ApenxGWq.js.map} +1 -1
- package/dist/assets/route-1RLqcpwJ.js +2 -0
- package/dist/assets/{route-DmdFbZkw.js.map → route-1RLqcpwJ.js.map} +1 -1
- package/dist/assets/route-9nRSk82v.js +2 -0
- package/dist/assets/route-9nRSk82v.js.map +1 -0
- package/dist/assets/route-B5_zLW88.js +2 -0
- package/dist/assets/{route-CAp89B2q.js.map → route-B5_zLW88.js.map} +1 -1
- package/dist/assets/route-BPsno3Cl.js +2 -0
- package/dist/assets/route-BPsno3Cl.js.map +1 -0
- package/dist/assets/route-BW0F_EH4.js +2 -0
- package/dist/assets/{route-DcsVxxui.js.map → route-BW0F_EH4.js.map} +1 -1
- package/dist/assets/route-C1hyfOXp.js +2 -0
- package/dist/assets/route-C1hyfOXp.js.map +1 -0
- package/dist/assets/route-CH7VQVwb.js +2 -0
- package/dist/assets/route-CH7VQVwb.js.map +1 -0
- package/dist/assets/route-CpoiDvOD.js +2 -0
- package/dist/assets/route-CpoiDvOD.js.map +1 -0
- package/dist/assets/route-Dq2UgkxS.js +2 -0
- package/dist/assets/{route-BsIUCKz1.js.map → route-Dq2UgkxS.js.map} +1 -1
- package/dist/assets/route-z54yq2nP.js +2 -0
- package/dist/assets/route-z54yq2nP.js.map +1 -0
- package/dist/assets/service-Cv-U7NUv.js +2 -0
- package/dist/assets/service-Cv-U7NUv.js.map +1 -0
- package/dist/assets/sortBy-C9bvycg5.js +2 -0
- package/dist/assets/sortBy-C9bvycg5.js.map +1 -0
- package/dist/assets/template-extractor-ElrbBsVj.js +2 -0
- package/dist/assets/{template-extractor-DEU0CX0Y.js.map → template-extractor-ElrbBsVj.js.map} +1 -1
- package/dist/assets/{theme-builder-La1nKR0K.js → theme-builder-Butjmy7L.js} +6 -6
- package/dist/assets/{theme-builder-La1nKR0K.js.map → theme-builder-Butjmy7L.js.map} +1 -1
- package/dist/assets/{use-definition-schema-CuFFJIzk.js → use-definition-schema-e7us6WfR.js} +2 -2
- package/dist/assets/{use-definition-schema-CuFFJIzk.js.map → use-definition-schema-e7us6WfR.js.map} +1 -1
- package/dist/assets/use-enum-form-CEyTBPQn.js +2 -0
- package/dist/assets/{use-enum-form-DKD2EDHZ.js.map → use-enum-form-CEyTBPQn.js.map} +1 -1
- package/dist/assets/use-model-form-Ch_tz0Rd.js +2 -0
- package/dist/assets/{use-model-form-BQa-PiE_.js.map → use-model-form-Ch_tz0Rd.js.map} +1 -1
- package/dist/assets/words-Cs2RBKRm.js +2 -0
- package/dist/assets/words-Cs2RBKRm.js.map +1 -0
- package/dist/index.html +11 -8
- package/package.json +11 -11
- package/dist/assets/-constants-CqYT9Sad.js +0 -4
- package/dist/assets/-constants-CqYT9Sad.js.map +0 -1
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/web-CEscUEnR.js +0 -2
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-CzpSl25Z.js +0 -5
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-CzpSl25Z.js.map +0 -1
- package/dist/assets/__federation_shared_@baseplate-dev/ui-components-Bpztr-cx.js +0 -46
- package/dist/assets/__federation_shared_@baseplate-dev/ui-components-Bpztr-cx.js.map +0 -1
- package/dist/assets/__federation_shared_react-CTQ9xfiH.js +0 -2
- package/dist/assets/__federation_shared_react-dom-DPv53nVg.js +0 -2
- package/dist/assets/_virtual___federation_fn_import-BLYgPlMt.js +0 -2
- package/dist/assets/backend-hJNcdERv.js +0 -2
- package/dist/assets/badge-with-type-label-CezAtjFy.js +0 -2
- package/dist/assets/edit._id-bMpe6S3O.js +0 -2
- package/dist/assets/edit._id-bMpe6S3O.js.map +0 -1
- package/dist/assets/enum-info-form-xlZ2HO8I.js +0 -2
- package/dist/assets/graphql-D3J4ZWXL.js +0 -2
- package/dist/assets/hierarchy-DF9lzUjz.js +0 -2
- package/dist/assets/immer-BOh2djD_.js +0 -2
- package/dist/assets/immer-BOh2djD_.js.map +0 -1
- package/dist/assets/index-1ErFJbDw.js +0 -2
- package/dist/assets/index-37eYMUXo.js +0 -2
- package/dist/assets/index-37eYMUXo.js.map +0 -1
- package/dist/assets/index-B5-Qczd9.js +0 -2
- package/dist/assets/index-BLuLGksP.js +0 -2
- package/dist/assets/index-BLuLGksP.js.map +0 -1
- package/dist/assets/index-BPK2SbiO.js +0 -2
- package/dist/assets/index-BPK2SbiO.js.map +0 -1
- package/dist/assets/index-BdmJimiZ.js +0 -2
- package/dist/assets/index-Bv8hyN9u.js +0 -2
- package/dist/assets/index-C15I7WFi.js +0 -2
- package/dist/assets/index-C15I7WFi.js.map +0 -1
- package/dist/assets/index-C_wN4CIq.js +0 -58
- package/dist/assets/index-C_wN4CIq.js.map +0 -1
- package/dist/assets/index-DBOJRz5n.css +0 -1
- package/dist/assets/index-DJsZccoO.js +0 -2
- package/dist/assets/index-DwyYddxl.js +0 -2
- package/dist/assets/index-DwyYddxl.js.map +0 -1
- package/dist/assets/index-P-wtG1LL.js +0 -2
- package/dist/assets/index-P-wtG1LL.js.map +0 -1
- package/dist/assets/index.esm-DcyGeCKA.js +0 -10
- package/dist/assets/index.esm-DcyGeCKA.js.map +0 -1
- package/dist/assets/model-info-form-VtbYsjrH.js +0 -2
- package/dist/assets/model-merger-qJqD9I2_.js +0 -2
- package/dist/assets/model-merger-qJqD9I2_.js.map +0 -1
- package/dist/assets/new-app-dialog-CTtQ52jO.js +0 -2
- package/dist/assets/new-app-dialog-CTtQ52jO.js.map +0 -1
- package/dist/assets/new-enum-dialog-B0QcIWdY.js +0 -2
- package/dist/assets/new-model-dialog-CM2dJ8Iv.js +0 -2
- package/dist/assets/route-B34jnFQF.js +0 -2
- package/dist/assets/route-B34jnFQF.js.map +0 -1
- package/dist/assets/route-BRBmSLMi.js +0 -2
- package/dist/assets/route-BRBmSLMi.js.map +0 -1
- package/dist/assets/route-BsIUCKz1.js +0 -2
- package/dist/assets/route-CAp89B2q.js +0 -2
- package/dist/assets/route-DcsVxxui.js +0 -2
- package/dist/assets/route-DmdFbZkw.js +0 -2
- package/dist/assets/route-Dpmx4lrA.js +0 -2
- package/dist/assets/route-Dpmx4lrA.js.map +0 -1
- package/dist/assets/route-T4J_Uk-9.js +0 -2
- package/dist/assets/route-T4J_Uk-9.js.map +0 -1
- package/dist/assets/route-w8_2x1VY.js +0 -2
- package/dist/assets/route-w8_2x1VY.js.map +0 -1
- package/dist/assets/service-Bgm1ICPI.js +0 -2
- package/dist/assets/service-Bgm1ICPI.js.map +0 -1
- package/dist/assets/template-extractor-DEU0CX0Y.js +0 -2
- package/dist/assets/use-enum-form-DKD2EDHZ.js +0 -2
- package/dist/assets/use-model-form-BQa-PiE_.js +0 -2
- package/dist/assets/utils-BYjOwi1b.js +0 -2
- package/dist/assets/utils-BYjOwi1b.js.map +0 -1
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{i as l}from"./_virtual___federation_fn_import-DXu2m-ZE.js";import{j as m}from"./jsx-runtime-D_zvdyIk.js";import{h as S,i as I,e as M}from"./index.esm-CTDJ8Wko.js";import{q as j}from"./index-BUYA3Tes.js";import{i as F}from"./isEqual-C420KeG-.js";const{useRef:D}=await l("react");function P(r){const o=D(void 0);return e=>{const n=r(e);return F(o.current,n)?o.current:(o.current=n,n)}}const{jsonDeepClone:O}=await l("@baseplate-dev/utils"),{createContext:U,useContext:$,useEffect:_,useMemo:W}=await l("react"),w=U(void 0);function ee({originalModel:r,children:o,watch:e,getValues:n}){const a=W(()=>S(i=>({model:{...r,...n()},setModel:s=>{i({model:{...r,...s}})},getValues:n})),[r,n]);return _(()=>{const{unsubscribe:i}=e(s=>{a.getState().setModel(O(s))});return i},[e,a]),m.jsx(w.Provider,{value:a,children:o})}function A(r){const o=$(w);if(!o)throw new Error("useEditedModelConfig must be used within a EditedModelContextProvider");return I(o,P(e=>r(e.model)))}const{modelTransformerEntityType:B,ModelTransformerUtils:L,ModelUtils:E}=await l("@baseplate-dev/project-builder-lib"),{useProjectDefinition:q}=await l("@baseplate-dev/project-builder-lib/web"),{MultiComboboxFieldController:T,SelectFieldController:H}=await l("@baseplate-dev/ui-components"),{useEffect:J}=await l("react");function K({formProps:r,name:o}){const e=o,n=r,{control:a,setValue:i}=n,{definition:s,definitionContainer:N,pluginContainer:y}=q(),u=M({control:a,name:e}),p=A(t=>{const R=E.getRelationsToModel(s,t.id),x=t.service?.transformers?.filter(f=>f.type==="embeddedRelation"&&f.id!==u.id);return R.filter(({relation:f})=>!x?.some(C=>C.foreignRelationRef===f.foreignId))}),h=p.map(t=>({label:`${t.relation.foreignRelationName} (${t.model.name})`,value:t.relation.foreignId})),c=u.type==="embeddedRelation"?u:null,d=p.find(t=>t.relation.foreignId===c?.foreignRelationRef),b=j(c?.foreignRelationRef);J(()=>{b!==void 0&&b!==c?.foreignRelationRef&&(i(`${e}.embeddedFieldNames`,[]),d?.model.id&&i(`${e}.modelRef`,d.model.id))},[e,i,d,c?.foreignRelationRef,b,p]);const v=d?.model.model.fields.filter(t=>!d.relation.references.some(R=>R.localRef===t.id)).map(t=>({label:t.name,value:t.id}))??[],g=d?.model.service.transformers.map(t=>({label:L.getTransformName(N,t,y),value:t.id}))??[];return m.jsxs("div",{className:"space-y-4",children:[m.jsx(H,{control:a,name:`${e}.foreignRelationRef`,options:h,label:"Relation",placeholder:"Select relation"}),m.jsx(T,{control:a,disabled:v.length===0,options:v,name:`${e}.embeddedFieldNames`,label:"Embedded Field Names"}),g.length>0&&m.jsx(T,{control:a,options:g,name:`${e}.embeddedTransformerNames`,label:"Embedded Transformers"})]})}const G={name:"embeddedRelation",label:"Embedded Relation",description:"Upsert records to a related model table",instructions:`This transformer allows you to upsert related records to a related model's table
|
|
2
|
+
e.g. UserRole records for a User. It will create, update, delete related records to fit the provided
|
|
3
|
+
input.`,getSummary(r,o){return[{label:"Embedded Relation",description:o.nameFromId(r.foreignRelationRef)}]},allowNewTransformer(r,o){const{definition:e}=r,n=E.getRelationsToModel(e,o.id),a=o.service?.transformers?.filter(i=>i.type==="embeddedRelation");return n.some(({relation:i})=>!a?.some(s=>s.foreignRelationRef===i.foreignId))},getNewTransformer:()=>({id:B.generateNewId(),foreignRelationRef:"",type:"embeddedRelation",embeddedFieldNames:[],modelRef:""}),Form:K,pluginKey:void 0},{modelTransformerEntityType:Y}=await l("@baseplate-dev/project-builder-lib"),{createNewModelTransformerWebConfig:k}=await l("@baseplate-dev/project-builder-lib/web"),oe=[G,k({name:"password",label:"Password",description:"Hashes the input value of value 'password' using Argon2id",getNewTransformer:()=>({id:Y.generateNewId(),type:"password"}),allowNewTransformer(r,o){return!o.service?.transformers?.some(e=>e.type==="password")&&o.model.fields.some(e=>e.name==="passwordHash")},getSummary:()=>[],pluginKey:void 0})],te={string:{label:"String",value:"string",description:"Variable length text"},int:{label:"Integer",value:"int",description:"Whole number"},float:{label:"Float",value:"float",description:"Decimal number"},decimal:{label:"Decimal",value:"decimal",description:"Precise decimal number"},boolean:{label:"Boolean",value:"boolean",description:"True or false value"},json:{label:"JSON",value:"json",description:"JSON data"},uuid:{label:"UUID",value:"uuid",description:"Unique identifier"},dateTime:{label:"DateTime",value:"dateTime",description:"Date and time"},date:{label:"Date",value:"date",description:"Calendar date"},enum:{label:"Enum",value:"enum",description:"List of values"}};export{oe as B,ee as E,te as S,A as u};
|
|
4
|
+
//# sourceMappingURL=-constants-C0cnDlAn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"-constants-C0cnDlAn.js","sources":["../../src/hooks/use-deep.ts","../../src/routes/data/models/-hooks/use-edited-model-config.tsx","../../src/routes/data/models/edit.$key/-components/service/service-embedded-relation-form.tsx","../../src/routes/data/models/-constants.tsx"],"sourcesContent":["import { isEqual } from 'es-toolkit';\nimport { useRef } from 'react';\n\n/**\n * A hook that returns a deeply memoized value of a selector function.\n *\n * @param selector - The selector function to deeply memoize.\n */\nexport function useDeep<S, U>(selector: (state: S) => U): (state: S) => U {\n const prev = useRef<U>(undefined);\n\n return (state) => {\n const next = selector(state);\n if (isEqual(prev.current, next)) {\n return prev.current as U;\n }\n prev.current = next;\n return next;\n };\n}\n","import type {\n ModelConfig,\n ModelConfigInput,\n} from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { UseFormGetValues, UseFormWatch } from 'react-hook-form';\nimport type { StoreApi } from 'zustand';\n\nimport { jsonDeepClone } from '@baseplate-dev/utils';\nimport { createContext, useContext, useEffect, useMemo } from 'react';\nimport { createStore, useStore } from 'zustand';\n\nimport { useDeep } from '#src/hooks/use-deep.js';\n\ninterface ModelConfigStore {\n model: ModelConfigInput;\n setModel: (model: ModelConfigInput) => void;\n getValues: UseFormGetValues<ModelConfigInput>;\n}\n\nconst EditedModelContext = createContext<\n StoreApi<ModelConfigStore> | undefined\n>(undefined);\n\nexport function EditedModelContextProvider({\n originalModel,\n children,\n watch,\n getValues,\n}: {\n originalModel: ModelConfig;\n children: React.ReactNode;\n watch: UseFormWatch<ModelConfigInput>;\n getValues: UseFormGetValues<ModelConfigInput>;\n}): React.JSX.Element {\n const store = useMemo(\n () =>\n createStore<ModelConfigStore>((set) => ({\n model: {\n ...originalModel,\n ...getValues(),\n },\n setModel: (model) => {\n set({\n model: {\n ...originalModel,\n ...model,\n },\n });\n },\n getValues,\n })),\n [originalModel, getValues],\n );\n\n useEffect(() => {\n const { unsubscribe } = watch((data) => {\n // We need to clone the data since React hook form data store is not immutable\n store.getState().setModel(jsonDeepClone(data as ModelConfigInput));\n });\n return unsubscribe;\n }, [watch, store]);\n\n return (\n <EditedModelContext.Provider value={store}>\n {children}\n </EditedModelContext.Provider>\n );\n}\n\nexport function useEditedModelConfig<T>(\n selector: (model: ModelConfigInput) => T,\n): T {\n const store = useContext(EditedModelContext);\n if (!store) {\n throw new Error(\n 'useEditedModelConfig must be used within a EditedModelContextProvider',\n );\n }\n return useStore(\n store,\n useDeep((state) => selector(state.model)),\n );\n}\n","import type { EmbeddedRelationTransformerConfig } from '@baseplate-dev/project-builder-lib';\nimport type {\n ModelTransformerWebConfig,\n ModelTransformerWebFormProps,\n} from '@baseplate-dev/project-builder-lib/web';\nimport type React from 'react';\nimport type { UseFormReturn } from 'react-hook-form';\n\nimport {\n modelTransformerEntityType,\n ModelTransformerUtils,\n ModelUtils,\n} from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n MultiComboboxFieldController,\n SelectFieldController,\n} from '@baseplate-dev/ui-components';\nimport { useEffect } from 'react';\nimport { useWatch } from 'react-hook-form';\n\nimport { usePrevious } from '#src/hooks/use-previous.js';\n\nimport { useEditedModelConfig } from '../../../-hooks/use-edited-model-config.js';\n\nfunction ServiceEmbeddedRelationForm({\n formProps,\n name,\n}: ModelTransformerWebFormProps): React.JSX.Element {\n // force type cast to avoid TS error\n const prefix = name as 'prefix';\n const formPropsTyped = formProps as unknown as UseFormReturn<{\n prefix: EmbeddedRelationTransformerConfig;\n }>;\n const { control, setValue } = formPropsTyped;\n\n const { definition, definitionContainer, pluginContainer } =\n useProjectDefinition();\n\n const transformer = useWatch({\n control,\n name: prefix,\n });\n\n const availableRelations = useEditedModelConfig((model) => {\n const relationsToModel = ModelUtils.getRelationsToModel(\n definition,\n model.id,\n );\n const otherEmbeddedRelations = model.service?.transformers?.filter(\n (t): t is EmbeddedRelationTransformerConfig =>\n t.type === 'embeddedRelation' && t.id !== transformer.id,\n );\n return relationsToModel.filter(\n ({ relation }) =>\n !otherEmbeddedRelations?.some(\n (o) => o.foreignRelationRef === relation.foreignId,\n ),\n );\n });\n\n const relationOptions = availableRelations.map((relation) => ({\n label: `${relation.relation.foreignRelationName} (${relation.model.name})`,\n value: relation.relation.foreignId,\n }));\n\n const embeddedTransformer =\n (transformer.type as string) === 'embeddedRelation' ? transformer : null;\n const relation = availableRelations.find(\n (r) => r.relation.foreignId === embeddedTransformer?.foreignRelationRef,\n );\n\n const previousForeignModelId = usePrevious(\n embeddedTransformer?.foreignRelationRef,\n );\n useEffect(() => {\n if (\n previousForeignModelId !== undefined &&\n previousForeignModelId !== embeddedTransformer?.foreignRelationRef\n ) {\n setValue(`${prefix}.embeddedFieldNames`, []);\n if (relation?.model.id) {\n setValue(`${prefix}.modelRef`, relation.model.id);\n }\n }\n }, [\n prefix,\n setValue,\n relation,\n embeddedTransformer?.foreignRelationRef,\n previousForeignModelId,\n availableRelations,\n ]);\n\n const foreignFieldOptions =\n relation?.model.model.fields\n .filter(\n (field) =>\n !relation.relation.references.some(\n (reference) => reference.localRef === field.id,\n ),\n )\n .map((field) => ({\n label: field.name,\n value: field.id,\n })) ?? [];\n\n const foreignTransformerOptions =\n relation?.model.service.transformers.map((transformer) => ({\n label: ModelTransformerUtils.getTransformName(\n definitionContainer,\n transformer,\n pluginContainer,\n ),\n value: transformer.id,\n })) ?? [];\n\n return (\n <div className={'space-y-4'}>\n <SelectFieldController\n control={control}\n name={`${prefix}.foreignRelationRef`}\n options={relationOptions}\n label=\"Relation\"\n placeholder=\"Select relation\"\n />\n <MultiComboboxFieldController\n control={control}\n disabled={foreignFieldOptions.length === 0}\n options={foreignFieldOptions}\n name={`${prefix}.embeddedFieldNames`}\n label=\"Embedded Field Names\"\n />\n {foreignTransformerOptions.length > 0 && (\n <MultiComboboxFieldController\n control={control}\n options={foreignTransformerOptions}\n name={`${prefix}.embeddedTransformerNames`}\n label=\"Embedded Transformers\"\n />\n )}\n </div>\n );\n}\n\nexport const embeddedRelationTransformerWebConfig: ModelTransformerWebConfig<EmbeddedRelationTransformerConfig> =\n {\n name: 'embeddedRelation',\n label: 'Embedded Relation',\n description: 'Upsert records to a related model table',\n instructions: `This transformer allows you to upsert related records to a related model's table\n e.g. UserRole records for a User. It will create, update, delete related records to fit the provided\n input.`,\n getSummary(definition, container) {\n return [\n {\n label: 'Embedded Relation',\n description: container.nameFromId(definition.foreignRelationRef),\n },\n ];\n },\n allowNewTransformer(projectContainer, model) {\n const { definition } = projectContainer;\n const relationsToModel = ModelUtils.getRelationsToModel(\n definition,\n model.id,\n );\n const otherEmbeddedRelations = model.service?.transformers?.filter(\n (t): t is EmbeddedRelationTransformerConfig =>\n t.type === 'embeddedRelation',\n );\n return relationsToModel.some(\n ({ relation }) =>\n !otherEmbeddedRelations?.some(\n (o) => o.foreignRelationRef === relation.foreignId,\n ),\n );\n },\n getNewTransformer: () => ({\n id: modelTransformerEntityType.generateNewId(),\n foreignRelationRef: '',\n type: 'embeddedRelation',\n embeddedFieldNames: [],\n modelRef: '',\n }),\n Form: ServiceEmbeddedRelationForm,\n pluginKey: undefined,\n };\n","import type { ScalarFieldType } from '@baseplate-dev/project-builder-lib';\n\nimport { modelTransformerEntityType } from '@baseplate-dev/project-builder-lib';\nimport { createNewModelTransformerWebConfig } from '@baseplate-dev/project-builder-lib/web';\n\nimport { embeddedRelationTransformerWebConfig } from './edit.$key/-components/service/service-embedded-relation-form.js';\n\nexport const BUILT_IN_TRANSFORMER_WEB_CONFIGS = [\n embeddedRelationTransformerWebConfig,\n createNewModelTransformerWebConfig({\n name: 'password',\n label: 'Password',\n description: \"Hashes the input value of value 'password' using Argon2id\",\n getNewTransformer: () => ({\n id: modelTransformerEntityType.generateNewId(),\n type: 'password',\n }),\n allowNewTransformer(_, modelConfig) {\n return (\n !modelConfig.service?.transformers?.some(\n (t) => t.type === 'password',\n ) && modelConfig.model.fields.some((f) => f.name === 'passwordHash')\n );\n },\n getSummary: () => [],\n pluginKey: undefined,\n }),\n];\n\nexport interface ScalarFieldTypeOption {\n label: string;\n value: string;\n description: string;\n}\n\nexport const SCALAR_FIELD_TYPE_OPTIONS: Record<\n ScalarFieldType,\n ScalarFieldTypeOption\n> = {\n string: {\n label: 'String',\n value: 'string',\n description: 'Variable length text',\n },\n int: {\n label: 'Integer',\n value: 'int',\n description: 'Whole number',\n },\n float: {\n label: 'Float',\n value: 'float',\n description: 'Decimal number',\n },\n decimal: {\n label: 'Decimal',\n value: 'decimal',\n description: 'Precise decimal number',\n },\n boolean: {\n label: 'Boolean',\n value: 'boolean',\n description: 'True or false value',\n },\n json: {\n label: 'JSON',\n value: 'json',\n description: 'JSON data',\n },\n uuid: {\n label: 'UUID',\n value: 'uuid',\n description: 'Unique identifier',\n },\n dateTime: {\n label: 'DateTime',\n value: 'dateTime',\n description: 'Date and time',\n },\n date: {\n label: 'Date',\n value: 'date',\n description: 'Calendar date',\n },\n enum: {\n label: 'Enum',\n value: 'enum',\n description: 'List of values',\n },\n};\n"],"names":["useRef","importShared","useDeep","selector","prev","state","next","isEqual","jsonDeepClone","createContext","useContext","useEffect","useMemo","EditedModelContext","EditedModelContextProvider","originalModel","children","watch","getValues","store","createStore","set","model","unsubscribe","data","useEditedModelConfig","useStore","modelTransformerEntityType","ModelTransformerUtils","ModelUtils","useProjectDefinition","MultiComboboxFieldController","SelectFieldController","ServiceEmbeddedRelationForm","formProps","name","prefix","formPropsTyped","control","setValue","definition","definitionContainer","pluginContainer","transformer","useWatch","availableRelations","relationsToModel","otherEmbeddedRelations","t","relation","o","relationOptions","embeddedTransformer","r","previousForeignModelId","usePrevious","foreignFieldOptions","field","reference","foreignTransformerOptions","jsxs","jsx","embeddedRelationTransformerWebConfig","container","projectContainer","createNewModelTransformerWebConfig","BUILT_IN_TRANSFORMER_WEB_CONFIGS","_","modelConfig","f","SCALAR_FIELD_TYPE_OPTIONS"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i}from"../../_virtual___federation_fn_import-DXu2m-ZE.js";import{j as a}from"../../jsx-runtime-D_zvdyIk.js";import{F as v,M as p,x as B,c as h}from"../../model-merger-vEOkdVdS.js";import{c as k}from"../../capitalize-gOJXDbsR.js";import{c as M,d as S,b as y}from"../../index.esm-CTDJ8Wko.js";import{i as b}from"../../isEqual-C420KeG-.js";const w=await i("react"),j=w.createContext(null);function m(){const e=w.useContext(j);if(!e)throw new Error("useProjectDefinition must be used within a <ProjectDefinitionProvider>");return e}const{ComboboxField:D,useControllerMerged:E}=await i("@baseplate-dev/ui-components"),{useMemo:F,useState:N}=await i("react");function T(e){return{label:`Create "${e}"`,value:e}}function W({canCreate:e,value:t,...n}){const{definition:r}=m(),[o,s]=N(""),c=F(()=>{const d=r.features.map(l=>({label:l.name,value:l.id}));if(!e)return d;const u=o||t;return!!!d.some(l=>l.label===u||l.value===u)&&u&&v.validateFeatureName(u)?[...d,T(u)]:d},[r.features,o,t,e]);return a.jsx(D,{placeholder:"Select a feature",...n,searchQuery:e?o:void 0,onSearchQueryChange:s,options:c,value:t})}function ae({name:e,control:t,...n}){const{field:r,fieldState:{error:o}}=E({name:e,control:t},n),s=n;return a.jsx(W,{error:o?.message,...s,...r,value:r.value??null})}const{ComboboxField:$,useControllerMerged:I}=await i("@baseplate-dev/ui-components"),{useMemo:R,useState:q}=await i("react");function P(e){return{label:`Create "${e}"`,value:e}}function A({canCreate:e,value:t,...n}){const{definition:r}=m(),[o,s]=q(""),c=R(()=>{const d=r.models.map(l=>({label:l.name,value:l.id}));if(!e)return d;const u=o||t;return!!!d.some(l=>l.label===u||l.value===u)&&u&&p.validateModelName(u)?[...d,P(u)]:d},[r.models,o,t,e]);return a.jsx($,{placeholder:"Select a model",...n,searchQuery:e?o:void 0,onSearchQueryChange:s,options:c,value:t})}function ie({name:e,control:t,...n}){const{field:r,fieldState:{error:o}}=I({name:e,control:t},n),s=n;return a.jsx(A,{error:o?.message,...s,...r,value:r.value??null})}const{Alert:V,AlertDescription:U,AlertTitle:Q}=await i("@baseplate-dev/ui-components");function ue({pendingModelChanges:e}){const t=Object.values(e).filter(n=>n!==void 0);return t.length===0?null:a.jsx("div",{className:"space-y-4",children:t.map(n=>a.jsxs(V,{variant:n.isNewModel?"default":"warning",children:[a.jsxs(Q,{children:[n.isNewModel?"New Model":"Model Changes",": ",n.name]}),a.jsx(U,{children:a.jsxs("div",{className:"mt-2 space-y-2",children:[n.isNewModel?a.jsx("p",{children:"This is a new model that will be created with the following configuration:"}):a.jsx("p",{children:"The following changes will be applied to the model:"}),a.jsx("ul",{className:"list-disc pl-4 space-y-1",children:Object.entries(n.changes).map(([r,o])=>{const s=B[r];if(!s)return null;if(o?.length)return a.jsxs("li",{children:[o.length===1?k(s.name):a.jsxs(a.Fragment,{children:[a.jsx("span",{className:"font-medium",children:o.length})," ",s.name,"(s)"]})," ","will be ",s.getActionVerb(n.isNewModel)]},r)})})]})})]},n.name))})}const{createContext:O}=await i("react"),H=O(null),{useEffect:C,useId:z}=await i("react"),f=M(e=>({activeBlockers:[],addBlocker:t=>{e(n=>({activeBlockers:[...n.activeBlockers,t]}))},removeBlocker:t=>{e(n=>({activeBlockers:n.activeBlockers.filter(r=>r.id!==t)}))},requestedBlockers:[],requestBlocker(t){e(n=>({requestedBlockers:[...n.requestedBlockers,t]}))},clearRequestedBlockers:()=>{e(()=>({requestedBlockers:[]}))}}));function le(){const e=f(r=>r.activeBlockers.length>0),t=f(r=>r.clearRequestedBlockers);C(()=>()=>{t()},[t]);const n=f(r=>r.requestBlocker);return e?n:({onContinue:r})=>{r()}}function g(e){const t=z(),n=f(o=>o.addBlocker),r=f(o=>o.removeBlocker);C(()=>{if(!e.disableBlock)return n({disableBlock:e.disableBlock,title:e.title,content:e.content,buttonContinueWithoutSaveText:e.buttonContinueWithoutSaveText,onContinueWithoutSave:e.onContinueWithoutSave,buttonContinueText:e.buttonContinueText,onContinue:e.onContinue,id:t}),()=>{r(t)}},[n,r,e.disableBlock,e.buttonContinueWithoutSaveText,e.onContinueWithoutSave,e.buttonContinueText,e.content,e.title,e.onContinue,t])}function ce(e,t){g({disableBlock:!e.isDirty,title:"Unsaved Changes",content:"You have unsaved changes. Are you sure you want to continue?",buttonContinueText:"Discard Changes",onContinue:()=>(t(),!0)})}const{toast:de}=await i("@baseplate-dev/ui-components"),{useEffect:fe,useRef:Y}=await i("react");function me({control:e,reset:t,onSubmit:n}){const r=Y(!1),o=S({control:e});r.current=o.isDirty,g({disableBlock:!o.isDirty,title:"Unsaved Changes",content:"You have unsaved changes. Do you want to save your changes?",buttonContinueWithoutSaveText:"Discard Changes",onContinueWithoutSave:()=>(t(),!0),buttonContinueText:"Save",onContinue:async()=>(await n(),await new Promise(s=>setTimeout(s,1)),!r.current)})}const{useMemo:G}=await i("react");function be(e){const{definitionSchemaParserContext:t}=m();return G(()=>e(t),[t,e])}const{useContext:J}=await i("react");function he(){const e=J(H);if(!e)throw new Error("useErrorHandler must be used within an ErrorHandlerContext");return e}const{toast:K}=await i("@baseplate-dev/ui-components"),{useEffect:L,useRef:X}=await i("react");function we(e){const t=y(e),{reset:n,formState:r}=t,{isDirty:o}=r,{updatedExternally:s}=m(),c=X(void 0);return L(()=>{c.current&&!b(c.current.oldDefaultValues,e?.defaultValues)&&(n(e?.defaultValues),o&&s&&K.warning("Contents were updated externally so form was reset!")),(!c.current||!b(c.current.oldDefaultValues,e?.defaultValues))&&(c.current={oldDefaultValues:e?.defaultValues})},[e?.defaultValues,n,s,o]),t}function Ce(e){return e}function Z(){const e=new Map;return{registerInputWebConfig(t){if(e.has(t.name))throw new Error(`Admin CRUD input with name ${t.name} is already registered`);e.set(t.name,t)},getInputWebConfig(t,n=[]){const r=n.find(s=>s.name===t);if(r)return r;const o=e.get(t);if(!o)throw new Error(`Unable to find input with name ${t}`);return o},getInputWebConfigs(t=[]){return[...t,...e.values()]}}}const ge=h("core/admin-crud-input-web",{defaultInitializer:Z});function xe(e){return e}function _(){const e=new Map;return{registerTransformerWebConfig(t){if(e.has(t.name))throw new Error(`Model transformer with name ${t.name} is already registered`);e.set(t.name,t)},getTransformerWebConfig(t,n=[]){const r=n.find(s=>s.name===t);if(r)return r;const o=e.get(t);if(!o)throw new Error(`Unable to find transformer with name ${t}`);return o},getTransformerWebConfigs(t=[]){return[...t,...e.values()]}}}const ve=h("core/model-transformer-web",{defaultInitializer:_});function pe(e){if(e!=="")return e}export{H as ErrorHandlerContext,W as FeatureComboboxField,ae as FeatureComboboxFieldController,A as ModelComboboxField,ie as ModelComboboxFieldController,ue as ModelMergerResultAlert,j as ProjectDefinitionContext,ge as adminCrudInputWebSpec,Ce as createAdminCrudInputWebConfig,Z as createAdminCrudInputWebImplementation,_ as createModelTransformerWebImplementation,xe as createNewModelTransformerWebConfig,ve as modelTransformerWebSpec,pe as setUndefinedIfEmpty,le as useBlockBeforeContinue,ce as useBlockDirtyFormNavigate,me as useBlockUnsavedChangesNavigate,g as useBlockerDialog,f as useBlockerDialogState,be as useDefinitionSchema,he as useErrorHandler,m as useProjectDefinition,we as useResettableForm};
|
|
2
|
+
//# sourceMappingURL=web-BCejYgPM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-CEscUEnR.js","sources":["../../../../../project-builder-lib/dist/web/hooks/use-project-definition.js","../../../../../project-builder-lib/dist/web/components/feature-combobox-field.js","../../../../../project-builder-lib/dist/web/components/model-combobox-field.js","../../../../../project-builder-lib/dist/web/components/model-merger-result-alert.js","../../../../../project-builder-lib/dist/web/contexts/error-handler.js","../../../../../project-builder-lib/dist/web/hooks/use-blocker-dialog.js","../../../../../project-builder-lib/dist/web/hooks/use-block-dirty-form-navigate.js","../../../../../project-builder-lib/dist/web/hooks/use-block-unsaved-changes-navigate.js","../../../../../project-builder-lib/dist/web/hooks/use-definition-schema.js","../../../../../project-builder-lib/dist/web/hooks/use-error-handler.js","../../../../../project-builder-lib/dist/web/hooks/use-resettable-form.js","../../../../../project-builder-lib/dist/web/specs/admin-crud-input-web-spec.js","../../../../../project-builder-lib/dist/web/specs/model-transformer-web-spec.js","../../../../../project-builder-lib/dist/web/utils/form.js"],"sourcesContent":["import React from 'react';\nexport const ProjectDefinitionContext = React.createContext(null);\nexport function useProjectDefinition() {\n const result = React.useContext(ProjectDefinitionContext);\n if (!result) {\n throw new Error(`useProjectDefinition must be used within a <ProjectDefinitionProvider>`);\n }\n return result;\n}\n//# sourceMappingURL=use-project-definition.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { ComboboxField, useControllerMerged, } from '@baseplate-dev/ui-components';\nimport { useMemo, useState } from 'react';\nimport { FeatureUtils } from '#src/definition/index.js';\nimport { useProjectDefinition } from '../hooks/use-project-definition.js';\nfunction createCreateOption(value) {\n return {\n label: `Create \"${value}\"`,\n value,\n };\n}\nfunction FeatureComboboxField({ canCreate, value, ...rest }) {\n const { definition } = useProjectDefinition();\n const [searchQuery, setSearchQuery] = useState('');\n const featureOptions = useMemo(() => {\n const baseFeatures = definition.features.map((feature) => ({\n label: feature.name,\n value: feature.id,\n }));\n if (!canCreate)\n return baseFeatures;\n const newFeatureName = searchQuery ? searchQuery : value;\n const doesNewFeatureExist = !!baseFeatures.some((option) => option.label === newFeatureName || option.value === newFeatureName);\n return !doesNewFeatureExist &&\n newFeatureName &&\n FeatureUtils.validateFeatureName(newFeatureName)\n ? [...baseFeatures, createCreateOption(newFeatureName)]\n : baseFeatures;\n }, [definition.features, searchQuery, value, canCreate]);\n return (_jsx(ComboboxField, { placeholder: \"Select a feature\", ...rest, searchQuery: canCreate ? searchQuery : undefined, onSearchQueryChange: setSearchQuery, options: featureOptions, value: value }));\n}\nfunction FeatureComboboxFieldController({ name, control, ...rest }) {\n const { field, fieldState: { error }, } = useControllerMerged({ name, control }, rest);\n const restProps = rest;\n return (_jsx(FeatureComboboxField, { error: error?.message, ...restProps, ...field, value: field.value ?? null }));\n}\nexport { FeatureComboboxField, FeatureComboboxFieldController };\n//# sourceMappingURL=feature-combobox-field.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { ComboboxField, useControllerMerged, } from '@baseplate-dev/ui-components';\nimport { useMemo, useState } from 'react';\nimport { ModelUtils } from '#src/definition/index.js';\nimport { useProjectDefinition } from '../hooks/use-project-definition.js';\nfunction createCreateOption(value) {\n return {\n label: `Create \"${value}\"`,\n value,\n };\n}\nfunction ModelComboboxField({ canCreate, value, ...rest }) {\n const { definition } = useProjectDefinition();\n const [searchQuery, setSearchQuery] = useState('');\n const modelOptions = useMemo(() => {\n const baseModels = definition.models.map((model) => ({\n label: model.name,\n value: model.id,\n }));\n if (!canCreate)\n return baseModels;\n const newModelName = searchQuery ? searchQuery : value;\n const doesNewModelExist = !!baseModels.some((option) => option.label === newModelName || option.value === newModelName);\n return !doesNewModelExist &&\n newModelName &&\n ModelUtils.validateModelName(newModelName)\n ? [...baseModels, createCreateOption(newModelName)]\n : baseModels;\n }, [definition.models, searchQuery, value, canCreate]);\n return (_jsx(ComboboxField, { placeholder: \"Select a model\", ...rest, searchQuery: canCreate ? searchQuery : undefined, onSearchQueryChange: setSearchQuery, options: modelOptions, value: value }));\n}\nfunction ModelComboboxFieldController({ name, control, ...rest }) {\n const { field, fieldState: { error }, } = useControllerMerged({ name, control }, rest);\n const restProps = rest;\n return (_jsx(ModelComboboxField, { error: error?.message, ...restProps, ...field, value: field.value ?? null }));\n}\nexport { ModelComboboxField, ModelComboboxFieldController };\n//# sourceMappingURL=model-combobox-field.js.map","import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Alert, AlertDescription, AlertTitle, } from '@baseplate-dev/ui-components';\nimport { capitalize } from 'es-toolkit';\nimport { modelMergerDefinitionDiffConfig } from '#src/tools/index.js';\nexport function ModelMergerResultAlert({ pendingModelChanges, }) {\n const changes = Object.values(pendingModelChanges).filter((change) => change !== undefined);\n if (changes.length === 0) {\n return null;\n }\n return (_jsx(\"div\", { className: \"space-y-4\", children: changes.map((change) => (_jsxs(Alert, { variant: change.isNewModel ? 'default' : 'warning', children: [_jsxs(AlertTitle, { children: [change.isNewModel ? 'New Model' : 'Model Changes', \": \", change.name] }), _jsx(AlertDescription, { children: _jsxs(\"div\", { className: \"mt-2 space-y-2\", children: [change.isNewModel ? (_jsx(\"p\", { children: \"This is a new model that will be created with the following configuration:\" })) : (_jsx(\"p\", { children: \"The following changes will be applied to the model:\" })), _jsx(\"ul\", { className: \"list-disc pl-4 space-y-1\", children: Object.entries(change.changes).map(([key, value]) => {\n const field = modelMergerDefinitionDiffConfig[key];\n if (!field) {\n return null;\n }\n if (value?.length) {\n return (_jsxs(\"li\", { children: [value.length === 1 ? (capitalize(field.name)) : (_jsxs(_Fragment, { children: [_jsx(\"span\", { className: \"font-medium\", children: value.length }), ' ', field.name, \"(s)\"] })), ' ', \"will be \", field.getActionVerb(change.isNewModel)] }, key));\n }\n }) })] }) })] }, change.name))) }));\n}\n//# sourceMappingURL=model-merger-result-alert.js.map","import { createContext } from 'react';\nexport const ErrorHandlerContext = createContext(null);\n//# sourceMappingURL=error-handler.js.map","import { useEffect, useId } from 'react';\nimport { create } from 'zustand';\nexport const useBlockerDialogState = create((set) => ({\n activeBlockers: [],\n addBlocker: (options) => {\n set((state) => ({\n activeBlockers: [...state.activeBlockers, options],\n }));\n },\n removeBlocker: (id) => {\n set((state) => ({\n activeBlockers: state.activeBlockers.filter((blocker) => blocker.id !== id),\n }));\n },\n requestedBlockers: [],\n requestBlocker(options) {\n set((state) => ({\n requestedBlockers: [...state.requestedBlockers, options],\n }));\n },\n clearRequestedBlockers: () => {\n set(() => ({\n requestedBlockers: [],\n }));\n },\n}));\nexport function useBlockBeforeContinue() {\n const hasActiveBlockers = useBlockerDialogState((state) => state.activeBlockers.length > 0);\n const clearRequestedBlockers = useBlockerDialogState((state) => state.clearRequestedBlockers);\n // make sure we clear any blocker requests if we navigate away\n useEffect(() => () => {\n clearRequestedBlockers();\n }, [clearRequestedBlockers]);\n const requestBlocker = useBlockerDialogState((state) => state.requestBlocker);\n // if no blockers, continue immediately\n if (!hasActiveBlockers) {\n return ({ onContinue }) => {\n onContinue();\n };\n }\n return requestBlocker;\n}\nexport function useBlockerDialog(options) {\n const id = useId();\n const addBlocker = useBlockerDialogState((state) => state.addBlocker);\n const removeBlocker = useBlockerDialogState((state) => state.removeBlocker);\n useEffect(() => {\n if (options.disableBlock) {\n return;\n }\n addBlocker({\n disableBlock: options.disableBlock,\n title: options.title,\n content: options.content,\n buttonContinueWithoutSaveText: options.buttonContinueWithoutSaveText,\n onContinueWithoutSave: options.onContinueWithoutSave,\n buttonContinueText: options.buttonContinueText,\n onContinue: options.onContinue,\n id,\n });\n return () => {\n removeBlocker(id);\n };\n }, [\n addBlocker,\n removeBlocker,\n options.disableBlock,\n options.buttonContinueWithoutSaveText,\n options.onContinueWithoutSave,\n options.buttonContinueText,\n options.content,\n options.title,\n options.onContinue,\n id,\n ]);\n}\n//# sourceMappingURL=use-blocker-dialog.js.map","import { useBlockerDialog } from './use-blocker-dialog.js';\nexport function useBlockDirtyFormNavigate(formState, reset) {\n useBlockerDialog({\n disableBlock: !formState.isDirty,\n title: 'Unsaved Changes',\n content: 'You have unsaved changes. Are you sure you want to continue?',\n buttonContinueText: 'Discard Changes',\n onContinue: () => {\n reset();\n return true;\n },\n });\n}\n//# sourceMappingURL=use-block-dirty-form-navigate.js.map","import { toast } from '@baseplate-dev/ui-components';\nimport { flattenObject } from 'es-toolkit';\nimport { useEffect, useRef } from 'react';\nimport { useFormState } from 'react-hook-form';\nimport { useBlockerDialog } from './use-blocker-dialog.js';\nexport function useBlockUnsavedChangesNavigate({ control, reset, onSubmit, }) {\n const isDirtyRef = useRef(false);\n const formState = useFormState({ control });\n isDirtyRef.current = formState.isDirty;\n if (import.meta.env.DEV) {\n // eslint-disable-next-line react-hooks/rules-of-hooks -- only want to run this check in dev mode for performance/usability reasons\n useEffect(() => {\n if (Object.keys(formState.dirtyFields).length === 0 &&\n formState.isDirty) {\n // a bit of a hack to figure out what the issue is but OK since we only do this in dev mode\n const { _formValues, _defaultValues } = control;\n const formValueKeys = Object.keys(flattenObject(_formValues));\n const defaultValueKeys = Object.keys(flattenObject(_defaultValues));\n const missingKeys = formValueKeys.filter((key) => !defaultValueKeys.includes(key));\n toast.error(`Form is dirty but no fields are marked as dirty. This implies that there is likely a field ` +\n `is controlled but not set in defaultValues. This can be fixed by setting the default value to the field. ` +\n `Note: You will only see this error if you are running the app in dev mode. ` +\n `Missing fields: ${missingKeys.join(', ')}`);\n }\n }, [formState.dirtyFields, formState.isDirty, control]);\n }\n useBlockerDialog({\n disableBlock: !formState.isDirty,\n title: 'Unsaved Changes',\n content: 'You have unsaved changes. Do you want to save your changes?',\n buttonContinueWithoutSaveText: 'Discard Changes',\n onContinueWithoutSave: () => {\n reset();\n return true;\n },\n buttonContinueText: 'Save',\n onContinue: async () => {\n await onSubmit();\n // a bit of a hack to make sure we get the latest form state before continuing\n // there's not an easy way of figuring out if the submission was successful or not\n // so we wait for a React re-render and then check if the form is still dirty\n await new Promise((resolve) => setTimeout(resolve, 1));\n return !isDirtyRef.current;\n },\n });\n}\n//# sourceMappingURL=use-block-unsaved-changes-navigate.js.map","import { useMemo } from 'react';\nimport { useProjectDefinition } from './use-project-definition.js';\nexport function useDefinitionSchema(schemaCreator) {\n const { definitionSchemaParserContext } = useProjectDefinition();\n return useMemo(() => schemaCreator(definitionSchemaParserContext), [definitionSchemaParserContext, schemaCreator]);\n}\n//# sourceMappingURL=use-definition-schema.js.map","import { useContext } from 'react';\nimport { ErrorHandlerContext } from '../contexts/error-handler.js';\nexport function useErrorHandler() {\n const context = useContext(ErrorHandlerContext);\n if (!context) {\n throw new Error('useErrorHandler must be used within an ErrorHandlerContext');\n }\n return context;\n}\n//# sourceMappingURL=use-error-handler.js.map","import { toast } from '@baseplate-dev/ui-components';\nimport { isEqual } from 'es-toolkit';\nimport { useEffect, useRef } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useProjectDefinition } from './use-project-definition.js';\nexport function useResettableForm(props) {\n const formProps = useForm(props);\n const { reset, formState } = formProps;\n const { isDirty } = formState;\n const { updatedExternally } = useProjectDefinition();\n const oldValues = useRef(undefined);\n useEffect(() => {\n if (oldValues.current &&\n !isEqual(oldValues.current.oldDefaultValues, props?.defaultValues)) {\n reset(props?.defaultValues);\n if (isDirty && updatedExternally) {\n toast.warning('Contents were updated externally so form was reset!');\n }\n }\n if (!oldValues.current ||\n !isEqual(oldValues.current.oldDefaultValues, props?.defaultValues)) {\n oldValues.current = {\n oldDefaultValues: props?.defaultValues,\n };\n }\n }, [props?.defaultValues, reset, updatedExternally, isDirty]);\n return formProps;\n}\n//# sourceMappingURL=use-resettable-form.js.map","import { createPluginSpec } from '#src/plugins/spec/types.js';\nexport function createAdminCrudInputWebConfig(config) {\n return config;\n}\nexport function createAdminCrudInputWebImplementation() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const inputs = new Map();\n return {\n registerInputWebConfig(input) {\n if (inputs.has(input.name)) {\n throw new Error(`Admin CRUD input with name ${input.name} is already registered`);\n }\n inputs.set(input.name, input);\n },\n getInputWebConfig(name, builtInInputs = []) {\n const builtInInput = builtInInputs.find((b) => b.name === name);\n if (builtInInput) {\n return builtInInput;\n }\n const input = inputs.get(name);\n if (!input) {\n throw new Error(`Unable to find input with name ${name}`);\n }\n return input;\n },\n getInputWebConfigs(builtInInputs = []) {\n return [...builtInInputs, ...inputs.values()];\n },\n };\n}\n/**\n * Spec for adding config component for plugin\n */\nexport const adminCrudInputWebSpec = createPluginSpec('core/admin-crud-input-web', { defaultInitializer: createAdminCrudInputWebImplementation });\n//# sourceMappingURL=admin-crud-input-web-spec.js.map","import { createPluginSpec } from '#src/plugins/spec/types.js';\nexport function createNewModelTransformerWebConfig(config) {\n return config;\n}\nexport function createModelTransformerWebImplementation() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const transformers = new Map();\n return {\n registerTransformerWebConfig(transformer) {\n if (transformers.has(transformer.name)) {\n throw new Error(`Model transformer with name ${transformer.name} is already registered`);\n }\n transformers.set(transformer.name, transformer);\n },\n getTransformerWebConfig(name, builtInTransformers = []) {\n const builtInTransformer = builtInTransformers.find((b) => b.name === name);\n if (builtInTransformer) {\n return builtInTransformer;\n }\n const transformer = transformers.get(name);\n if (!transformer) {\n throw new Error(`Unable to find transformer with name ${name}`);\n }\n return transformer;\n },\n getTransformerWebConfigs(builtInTransformers = []) {\n return [...builtInTransformers, ...transformers.values()];\n },\n };\n}\n/**\n * Spec for adding config component for plugin\n */\nexport const modelTransformerWebSpec = createPluginSpec('core/model-transformer-web', { defaultInitializer: createModelTransformerWebImplementation });\n//# sourceMappingURL=model-transformer-web-spec.js.map","export function setUndefinedIfEmpty(value) {\n if (value === '')\n return undefined;\n return value;\n}\n//# sourceMappingURL=form.js.map"],"names":["React","importShared","ProjectDefinitionContext","useProjectDefinition","result","ComboboxField","useControllerMerged","useMemo","useState","createCreateOption","value","FeatureComboboxField","canCreate","rest","definition","searchQuery","setSearchQuery","featureOptions","baseFeatures","feature","newFeatureName","option","FeatureUtils","_jsx","FeatureComboboxFieldController","name","control","field","error","restProps","ModelComboboxField","modelOptions","baseModels","model","newModelName","ModelUtils","ModelComboboxFieldController","Alert","AlertDescription","AlertTitle","ModelMergerResultAlert","pendingModelChanges","changes","change","_jsxs","key","modelMergerDefinitionDiffConfig","capitalize","_Fragment","createContext","ErrorHandlerContext","useEffect","useId","useBlockerDialogState","create","set","options","state","id","blocker","useBlockBeforeContinue","hasActiveBlockers","clearRequestedBlockers","requestBlocker","onContinue","useBlockerDialog","addBlocker","removeBlocker","useBlockDirtyFormNavigate","formState","reset","toast","useRef","useBlockUnsavedChangesNavigate","onSubmit","isDirtyRef","useFormState","resolve","useDefinitionSchema","schemaCreator","definitionSchemaParserContext","useContext","useErrorHandler","context","useResettableForm","props","formProps","useForm","isDirty","updatedExternally","oldValues","isEqual","createAdminCrudInputWebConfig","config","createAdminCrudInputWebImplementation","inputs","input","builtInInputs","builtInInput","b","adminCrudInputWebSpec","createPluginSpec","createNewModelTransformerWebConfig","createModelTransformerWebImplementation","transformers","transformer","builtInTransformers","builtInTransformer","modelTransformerWebSpec","setUndefinedIfEmpty"],"mappings":"wSAAA,MAAAA,EAAA,MAAAC,EAAA,OAAA,EACaC,EAA2BF,EAAM,cAAc,IAAI,EACzD,SAASG,GAAuB,CACnC,MAAMC,EAASJ,EAAM,WAAWE,CAAwB,EACxD,GAAI,CAACE,EACD,MAAM,IAAI,MAAM,wEAAwE,EAE5F,OAAOA,CACX,CCPA,KAAA,CAAA,cAAAC,EAAA,oBAAAC,CAAA,EAAA,MAAAL,EAAA,8BAAA,EACA,CAAA,QAAAM,EAAA,SAAAC,CAAA,EAAA,MAAAP,EAAA,OAAA,EAGA,SAASQ,EAAmBC,EAAO,CAC/B,MAAO,CACH,MAAO,WAAWA,CAAK,IACvB,MAAAA,CACH,CACL,CACA,SAASC,EAAqB,CAAE,UAAAC,EAAW,MAAAF,EAAO,GAAGG,CAAI,EAAI,CACzD,KAAM,CAAE,WAAAC,CAAY,EAAGX,EAAsB,EACvC,CAACY,EAAaC,CAAc,EAAIR,EAAS,EAAE,EAC3CS,EAAiBV,EAAQ,IAAM,CACjC,MAAMW,EAAeJ,EAAW,SAAS,IAAKK,IAAa,CACvD,MAAOA,EAAQ,KACf,MAAOA,EAAQ,EAC3B,EAAU,EACF,GAAI,CAACP,EACD,OAAOM,EACX,MAAME,EAAiBL,GAA4BL,EAEnD,MAAO,CADqB,CAAC,CAACQ,EAAa,KAAMG,GAAWA,EAAO,QAAUD,GAAkBC,EAAO,QAAUD,CAAc,GAE1HA,GACAE,EAAa,oBAAoBF,CAAc,EAC7C,CAAC,GAAGF,EAAcT,EAAmBW,CAAc,CAAC,EACpDF,CACd,EAAO,CAACJ,EAAW,SAAUC,EAAaL,EAAOE,CAAS,CAAC,EACvD,OAAQW,EAAAA,IAAKlB,EAAe,CAAE,YAAa,mBAAoB,GAAGQ,EAAM,YAAaD,EAAYG,EAAc,OAAW,oBAAqBC,EAAgB,QAASC,EAAgB,MAAOP,EAAO,CAC1M,CACA,SAASc,GAA+B,CAAE,KAAAC,EAAM,QAAAC,EAAS,GAAGb,CAAI,EAAI,CAChE,KAAM,CAAE,MAAAc,EAAO,WAAY,CAAE,MAAAC,CAAO,CAAA,EAAMtB,EAAoB,CAAE,KAAAmB,EAAM,QAAAC,CAAS,EAAEb,CAAI,EAC/EgB,EAAYhB,EAClB,OAAQU,EAAI,IAACZ,EAAsB,CAAE,MAAOiB,GAAO,QAAS,GAAGC,EAAW,GAAGF,EAAO,MAAOA,EAAM,OAAS,IAAI,CAAE,CACpH,CClCA,KAAA,CAAA,cAAAtB,EAAA,oBAAAC,CAAA,EAAA,MAAAL,EAAA,8BAAA,EACA,CAAA,QAAAM,EAAA,SAAAC,CAAA,EAAA,MAAAP,EAAA,OAAA,EAGA,SAASQ,EAAmBC,EAAO,CAC/B,MAAO,CACH,MAAO,WAAWA,CAAK,IACvB,MAAAA,CACH,CACL,CACA,SAASoB,EAAmB,CAAE,UAAAlB,EAAW,MAAAF,EAAO,GAAGG,CAAI,EAAI,CACvD,KAAM,CAAE,WAAAC,CAAY,EAAGX,EAAsB,EACvC,CAACY,EAAaC,CAAc,EAAIR,EAAS,EAAE,EAC3CuB,EAAexB,EAAQ,IAAM,CAC/B,MAAMyB,EAAalB,EAAW,OAAO,IAAKmB,IAAW,CACjD,MAAOA,EAAM,KACb,MAAOA,EAAM,EACzB,EAAU,EACF,GAAI,CAACrB,EACD,OAAOoB,EACX,MAAME,EAAenB,GAA4BL,EAEjD,MAAO,CADmB,CAAC,CAACsB,EAAW,KAAMX,GAAWA,EAAO,QAAUa,GAAgBb,EAAO,QAAUa,CAAY,GAElHA,GACAC,EAAW,kBAAkBD,CAAY,EACvC,CAAC,GAAGF,EAAYvB,EAAmByB,CAAY,CAAC,EAChDF,CACd,EAAO,CAAClB,EAAW,OAAQC,EAAaL,EAAOE,CAAS,CAAC,EACrD,OAAQW,EAAAA,IAAKlB,EAAe,CAAE,YAAa,iBAAkB,GAAGQ,EAAM,YAAaD,EAAYG,EAAc,OAAW,oBAAqBC,EAAgB,QAASe,EAAc,MAAOrB,EAAO,CACtM,CACA,SAAS0B,GAA6B,CAAE,KAAAX,EAAM,QAAAC,EAAS,GAAGb,CAAI,EAAI,CAC9D,KAAM,CAAE,MAAAc,EAAO,WAAY,CAAE,MAAAC,CAAO,CAAA,EAAMtB,EAAoB,CAAE,KAAAmB,EAAM,QAAAC,CAAS,EAAEb,CAAI,EAC/EgB,EAAYhB,EAClB,OAAQU,EAAI,IAACO,EAAoB,CAAE,MAAOF,GAAO,QAAS,GAAGC,EAAW,GAAGF,EAAO,MAAOA,EAAM,OAAS,IAAI,CAAE,CAClH,CClCA,KAAA,CAAA,MAAAU,EAAA,iBAAAC,EAAA,WAAAC,CAAA,EAAA,MAAAtC,EAAA,8BAAA,EAGO,SAASuC,GAAuB,CAAE,oBAAAC,GAAwB,CAC7D,MAAMC,EAAU,OAAO,OAAOD,CAAmB,EAAE,OAAQE,GAAWA,IAAW,MAAS,EAC1F,OAAID,EAAQ,SAAW,EACZ,KAEHnB,EAAAA,IAAK,MAAO,CAAE,UAAW,YAAa,SAAUmB,EAAQ,IAAKC,GAAYC,EAAK,KAACP,EAAO,CAAE,QAASM,EAAO,WAAa,UAAY,UAAW,SAAU,CAACC,EAAK,KAACL,EAAY,CAAE,SAAU,CAACI,EAAO,WAAa,YAAc,gBAAiB,KAAMA,EAAO,IAAI,CAAG,CAAA,EAAGpB,EAAAA,IAAKe,EAAkB,CAAE,SAAUM,EAAAA,KAAM,MAAO,CAAE,UAAW,iBAAkB,SAAU,CAACD,EAAO,WAAcpB,EAAI,IAAC,IAAK,CAAE,SAAU,4EAA4E,CAAE,EAAMA,EAAI,IAAC,IAAK,CAAE,SAAU,qDAAqD,CAAE,EAAIA,EAAAA,IAAK,KAAM,CAAE,UAAW,2BAA4B,SAAU,OAAO,QAAQoB,EAAO,OAAO,EAAE,IAAI,CAAC,CAACE,EAAKnC,CAAK,IAAM,CACroB,MAAMiB,EAAQmB,EAAgCD,CAAG,EACjD,GAAI,CAAClB,EACD,OAAO,KAEX,GAAIjB,GAAO,OACP,OAAQkC,EAAAA,KAAM,KAAM,CAAE,SAAU,CAAClC,EAAM,SAAW,EAAKqC,EAAWpB,EAAM,IAAI,EAAMiB,EAAK,KAACI,WAAW,CAAE,SAAU,CAACzB,EAAI,IAAC,OAAQ,CAAE,UAAW,cAAe,SAAUb,EAAM,OAAQ,EAAG,IAAKiB,EAAM,KAAM,KAAK,CAAG,CAAA,EAAI,IAAK,WAAYA,EAAM,cAAcgB,EAAO,UAAU,CAAC,CAAG,EAAEE,CAAG,CAExT,CAAiC,CAAG,CAAA,CAAC,CAAG,CAAA,EAAG,CAAC,CAAG,EAAEF,EAAO,IAAI,CAAE,EAAG,CACjE,CClBA,KAAA,CAAA,cAAAM,CAAA,EAAA,MAAAhD,EAAA,OAAA,EACaiD,EAAsBD,EAAc,IAAI,ECDrD,CAAA,UAAAE,EAAA,MAAAC,CAAA,EAAA,MAAAnD,EAAA,OAAA,EAEaoD,EAAwBC,EAAQC,IAAS,CAClD,eAAgB,CAAE,EAClB,WAAaC,GAAY,CACrBD,EAAKE,IAAW,CACZ,eAAgB,CAAC,GAAGA,EAAM,eAAgBD,CAAO,CAC7D,EAAU,CACL,EACD,cAAgBE,GAAO,CACnBH,EAAKE,IAAW,CACZ,eAAgBA,EAAM,eAAe,OAAQE,GAAYA,EAAQ,KAAOD,CAAE,CACtF,EAAU,CACL,EACD,kBAAmB,CAAE,EACrB,eAAeF,EAAS,CACpBD,EAAKE,IAAW,CACZ,kBAAmB,CAAC,GAAGA,EAAM,kBAAmBD,CAAO,CACnE,EAAU,CACL,EACD,uBAAwB,IAAM,CAC1BD,EAAI,KAAO,CACP,kBAAmB,CAAE,CACjC,EAAU,CACL,CACL,EAAE,EACK,SAASK,IAAyB,CACrC,MAAMC,EAAoBR,EAAuBI,GAAUA,EAAM,eAAe,OAAS,CAAC,EACpFK,EAAyBT,EAAuBI,GAAUA,EAAM,sBAAsB,EAE5FN,EAAU,IAAM,IAAM,CAClBW,EAAwB,CAChC,EAAO,CAACA,CAAsB,CAAC,EAC3B,MAAMC,EAAiBV,EAAuBI,GAAUA,EAAM,cAAc,EAE5E,OAAKI,EAKEE,EAJI,CAAC,CAAE,WAAAC,KAAiB,CACvBA,EAAY,CACf,CAGT,CACO,SAASC,EAAiBT,EAAS,CACtC,MAAME,EAAKN,EAAO,EACZc,EAAab,EAAuBI,GAAUA,EAAM,UAAU,EAC9DU,EAAgBd,EAAuBI,GAAUA,EAAM,aAAa,EAC1EN,EAAU,IAAM,CACZ,GAAI,CAAAK,EAAQ,aAGZ,OAAAU,EAAW,CACP,aAAcV,EAAQ,aACtB,MAAOA,EAAQ,MACf,QAASA,EAAQ,QACjB,8BAA+BA,EAAQ,8BACvC,sBAAuBA,EAAQ,sBAC/B,mBAAoBA,EAAQ,mBAC5B,WAAYA,EAAQ,WACpB,GAAAE,CACZ,CAAS,EACM,IAAM,CACTS,EAAcT,CAAE,CACnB,CACT,EAAO,CACCQ,EACAC,EACAX,EAAQ,aACRA,EAAQ,8BACRA,EAAQ,sBACRA,EAAQ,mBACRA,EAAQ,QACRA,EAAQ,MACRA,EAAQ,WACRE,CACR,CAAK,CACL,CC1EO,SAASU,GAA0BC,EAAWC,EAAO,CACxDL,EAAiB,CACb,aAAc,CAACI,EAAU,QACzB,MAAO,kBACP,QAAS,+DACT,mBAAoB,kBACpB,WAAY,KACRC,EAAO,EACA,GAEnB,CAAK,CACL,CCZA,KAAA,CAAA,MAAAC,EAAA,EAAA,MAAAtE,EAAA,8BAAA,EAEA,CAAA,UAAAkD,GAAA,OAAAqB,CAAA,EAAA,MAAAvE,EAAA,OAAA,EAGO,SAASwE,GAA+B,CAAE,QAAA/C,EAAS,MAAA4C,EAAO,SAAAI,GAAa,CACpE,MAAAC,EAAaH,EAAO,EAAK,EACzBH,EAAYO,EAAa,CAAE,QAAAlD,EAAS,EAC1CiD,EAAW,QAAUN,EAAU,QAkBdJ,EAAA,CACb,aAAc,CAACI,EAAU,QACzB,MAAO,kBACP,QAAS,8DACT,8BAA+B,kBAC/B,sBAAuB,KACbC,EAAA,EACC,IAEX,mBAAoB,OACpB,WAAY,UACR,MAAMI,EAAS,EAIf,MAAM,IAAI,QAASG,GAAY,WAAWA,EAAS,CAAC,CAAC,EAC9C,CAACF,EAAW,QACvB,CACH,CACL,CC7CA,KAAA,CAAA,QAAApE,CAAA,EAAA,MAAAN,EAAA,OAAA,EAEO,SAAS6E,GAAoBC,EAAe,CAC/C,KAAM,CAAE,8BAAAC,CAA+B,EAAG7E,EAAsB,EAChE,OAAOI,EAAQ,IAAMwE,EAAcC,CAA6B,EAAG,CAACA,EAA+BD,CAAa,CAAC,CACrH,CCLA,KAAA,CAAA,WAAAE,CAAA,EAAA,MAAAhF,EAAA,OAAA,EAEO,SAASiF,IAAkB,CAC9B,MAAMC,EAAUF,EAAW/B,CAAmB,EAC9C,GAAI,CAACiC,EACD,MAAM,IAAI,MAAM,4DAA4D,EAEhF,OAAOA,CACX,CCRA,KAAA,CAAA,MAAAZ,CAAA,EAAA,MAAAtE,EAAA,8BAAA,EAEA,CAAA,UAAAkD,EAAA,OAAAqB,CAAA,EAAA,MAAAvE,EAAA,OAAA,EAGO,SAASmF,GAAkBC,EAAO,CACrC,MAAMC,EAAYC,EAAQF,CAAK,EACzB,CAAE,MAAAf,EAAO,UAAAD,CAAS,EAAKiB,EACvB,CAAE,QAAAE,CAAO,EAAKnB,EACd,CAAE,kBAAAoB,CAAmB,EAAGtF,EAAsB,EAC9CuF,EAAYlB,EAAO,MAAS,EAClC,OAAArB,EAAU,IAAM,CACRuC,EAAU,SACV,CAACC,EAAQD,EAAU,QAAQ,iBAAkBL,GAAO,aAAa,IACjEf,EAAMe,GAAO,aAAa,EACtBG,GAAWC,GACXlB,EAAM,QAAQ,qDAAqD,IAGvE,CAACmB,EAAU,SACX,CAACC,EAAQD,EAAU,QAAQ,iBAAkBL,GAAO,aAAa,KACjEK,EAAU,QAAU,CAChB,iBAAkBL,GAAO,aAC5B,EAEb,EAAO,CAACA,GAAO,cAAef,EAAOmB,EAAmBD,CAAO,CAAC,EACrDF,CACX,CC1BO,SAASM,GAA8BC,EAAQ,CAClD,OAAOA,CACX,CACO,SAASC,GAAwC,CAEpD,MAAMC,EAAS,IAAI,IACnB,MAAO,CACH,uBAAuBC,EAAO,CAC1B,GAAID,EAAO,IAAIC,EAAM,IAAI,EACrB,MAAM,IAAI,MAAM,8BAA8BA,EAAM,IAAI,wBAAwB,EAEpFD,EAAO,IAAIC,EAAM,KAAMA,CAAK,CAC/B,EACD,kBAAkBvE,EAAMwE,EAAgB,GAAI,CACxC,MAAMC,EAAeD,EAAc,KAAME,GAAMA,EAAE,OAAS1E,CAAI,EAC9D,GAAIyE,EACA,OAAOA,EAEX,MAAMF,EAAQD,EAAO,IAAItE,CAAI,EAC7B,GAAI,CAACuE,EACD,MAAM,IAAI,MAAM,kCAAkCvE,CAAI,EAAE,EAE5D,OAAOuE,CACV,EACD,mBAAmBC,EAAgB,GAAI,CACnC,MAAO,CAAC,GAAGA,EAAe,GAAGF,EAAO,OAAM,CAAE,CAC/C,CACJ,CACL,CAIY,MAACK,GAAwBC,EAAiB,4BAA6B,CAAE,mBAAoBP,CAAuC,CAAA,EChCzI,SAASQ,GAAmCT,EAAQ,CACvD,OAAOA,CACX,CACO,SAASU,GAA0C,CAEtD,MAAMC,EAAe,IAAI,IACzB,MAAO,CACH,6BAA6BC,EAAa,CACtC,GAAID,EAAa,IAAIC,EAAY,IAAI,EACjC,MAAM,IAAI,MAAM,+BAA+BA,EAAY,IAAI,wBAAwB,EAE3FD,EAAa,IAAIC,EAAY,KAAMA,CAAW,CACjD,EACD,wBAAwBhF,EAAMiF,EAAsB,GAAI,CACpD,MAAMC,EAAqBD,EAAoB,KAAMP,GAAMA,EAAE,OAAS1E,CAAI,EAC1E,GAAIkF,EACA,OAAOA,EAEX,MAAMF,EAAcD,EAAa,IAAI/E,CAAI,EACzC,GAAI,CAACgF,EACD,MAAM,IAAI,MAAM,wCAAwChF,CAAI,EAAE,EAElE,OAAOgF,CACV,EACD,yBAAyBC,EAAsB,GAAI,CAC/C,MAAO,CAAC,GAAGA,EAAqB,GAAGF,EAAa,OAAM,CAAE,CAC3D,CACJ,CACL,CAIY,MAACI,GAA0BP,EAAiB,6BAA8B,CAAE,mBAAoBE,CAAyC,CAAA,ECjC9I,SAASM,GAAoBnG,EAAO,CACvC,GAAIA,IAAU,GAEd,OAAOA,CACX"}
|
|
1
|
+
{"version":3,"file":"web-BCejYgPM.js","sources":["../../../../../project-builder-lib/dist/web/hooks/use-project-definition.js","../../../../../project-builder-lib/dist/web/components/feature-combobox-field.js","../../../../../project-builder-lib/dist/web/components/model-combobox-field.js","../../../../../project-builder-lib/dist/web/components/model-merger-result-alert.js","../../../../../project-builder-lib/dist/web/contexts/error-handler.js","../../../../../project-builder-lib/dist/web/hooks/use-blocker-dialog.js","../../../../../project-builder-lib/dist/web/hooks/use-block-dirty-form-navigate.js","../../../../../project-builder-lib/dist/web/hooks/use-block-unsaved-changes-navigate.js","../../../../../project-builder-lib/dist/web/hooks/use-definition-schema.js","../../../../../project-builder-lib/dist/web/hooks/use-error-handler.js","../../../../../project-builder-lib/dist/web/hooks/use-resettable-form.js","../../../../../project-builder-lib/dist/web/specs/admin-crud-input-web-spec.js","../../../../../project-builder-lib/dist/web/specs/model-transformer-web-spec.js","../../../../../project-builder-lib/dist/web/utils/form.js"],"sourcesContent":["import React from 'react';\nexport const ProjectDefinitionContext = React.createContext(null);\nexport function useProjectDefinition() {\n const result = React.useContext(ProjectDefinitionContext);\n if (!result) {\n throw new Error(`useProjectDefinition must be used within a <ProjectDefinitionProvider>`);\n }\n return result;\n}\n//# sourceMappingURL=use-project-definition.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { ComboboxField, useControllerMerged, } from '@baseplate-dev/ui-components';\nimport { useMemo, useState } from 'react';\nimport { FeatureUtils } from '#src/definition/index.js';\nimport { useProjectDefinition } from '../hooks/use-project-definition.js';\nfunction createCreateOption(value) {\n return {\n label: `Create \"${value}\"`,\n value,\n };\n}\nfunction FeatureComboboxField({ canCreate, value, ...rest }) {\n const { definition } = useProjectDefinition();\n const [searchQuery, setSearchQuery] = useState('');\n const featureOptions = useMemo(() => {\n const baseFeatures = definition.features.map((feature) => ({\n label: feature.name,\n value: feature.id,\n }));\n if (!canCreate)\n return baseFeatures;\n const newFeatureName = searchQuery ? searchQuery : value;\n const doesNewFeatureExist = !!baseFeatures.some((option) => option.label === newFeatureName || option.value === newFeatureName);\n return !doesNewFeatureExist &&\n newFeatureName &&\n FeatureUtils.validateFeatureName(newFeatureName)\n ? [...baseFeatures, createCreateOption(newFeatureName)]\n : baseFeatures;\n }, [definition.features, searchQuery, value, canCreate]);\n return (_jsx(ComboboxField, { placeholder: \"Select a feature\", ...rest, searchQuery: canCreate ? searchQuery : undefined, onSearchQueryChange: setSearchQuery, options: featureOptions, value: value }));\n}\nfunction FeatureComboboxFieldController({ name, control, ...rest }) {\n const { field, fieldState: { error }, } = useControllerMerged({ name, control }, rest);\n const restProps = rest;\n return (_jsx(FeatureComboboxField, { error: error?.message, ...restProps, ...field, value: field.value ?? null }));\n}\nexport { FeatureComboboxField, FeatureComboboxFieldController };\n//# sourceMappingURL=feature-combobox-field.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { ComboboxField, useControllerMerged, } from '@baseplate-dev/ui-components';\nimport { useMemo, useState } from 'react';\nimport { ModelUtils } from '#src/definition/index.js';\nimport { useProjectDefinition } from '../hooks/use-project-definition.js';\nfunction createCreateOption(value) {\n return {\n label: `Create \"${value}\"`,\n value,\n };\n}\nfunction ModelComboboxField({ canCreate, value, ...rest }) {\n const { definition } = useProjectDefinition();\n const [searchQuery, setSearchQuery] = useState('');\n const modelOptions = useMemo(() => {\n const baseModels = definition.models.map((model) => ({\n label: model.name,\n value: model.id,\n }));\n if (!canCreate)\n return baseModels;\n const newModelName = searchQuery ? searchQuery : value;\n const doesNewModelExist = !!baseModels.some((option) => option.label === newModelName || option.value === newModelName);\n return !doesNewModelExist &&\n newModelName &&\n ModelUtils.validateModelName(newModelName)\n ? [...baseModels, createCreateOption(newModelName)]\n : baseModels;\n }, [definition.models, searchQuery, value, canCreate]);\n return (_jsx(ComboboxField, { placeholder: \"Select a model\", ...rest, searchQuery: canCreate ? searchQuery : undefined, onSearchQueryChange: setSearchQuery, options: modelOptions, value: value }));\n}\nfunction ModelComboboxFieldController({ name, control, ...rest }) {\n const { field, fieldState: { error }, } = useControllerMerged({ name, control }, rest);\n const restProps = rest;\n return (_jsx(ModelComboboxField, { error: error?.message, ...restProps, ...field, value: field.value ?? null }));\n}\nexport { ModelComboboxField, ModelComboboxFieldController };\n//# sourceMappingURL=model-combobox-field.js.map","import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Alert, AlertDescription, AlertTitle, } from '@baseplate-dev/ui-components';\nimport { capitalize } from 'es-toolkit';\nimport { modelMergerDefinitionDiffConfig } from '#src/tools/index.js';\nexport function ModelMergerResultAlert({ pendingModelChanges, }) {\n const changes = Object.values(pendingModelChanges).filter((change) => change !== undefined);\n if (changes.length === 0) {\n return null;\n }\n return (_jsx(\"div\", { className: \"space-y-4\", children: changes.map((change) => (_jsxs(Alert, { variant: change.isNewModel ? 'default' : 'warning', children: [_jsxs(AlertTitle, { children: [change.isNewModel ? 'New Model' : 'Model Changes', \": \", change.name] }), _jsx(AlertDescription, { children: _jsxs(\"div\", { className: \"mt-2 space-y-2\", children: [change.isNewModel ? (_jsx(\"p\", { children: \"This is a new model that will be created with the following configuration:\" })) : (_jsx(\"p\", { children: \"The following changes will be applied to the model:\" })), _jsx(\"ul\", { className: \"list-disc pl-4 space-y-1\", children: Object.entries(change.changes).map(([key, value]) => {\n const field = modelMergerDefinitionDiffConfig[key];\n if (!field) {\n return null;\n }\n if (value?.length) {\n return (_jsxs(\"li\", { children: [value.length === 1 ? (capitalize(field.name)) : (_jsxs(_Fragment, { children: [_jsx(\"span\", { className: \"font-medium\", children: value.length }), ' ', field.name, \"(s)\"] })), ' ', \"will be \", field.getActionVerb(change.isNewModel)] }, key));\n }\n }) })] }) })] }, change.name))) }));\n}\n//# sourceMappingURL=model-merger-result-alert.js.map","import { createContext } from 'react';\nexport const ErrorHandlerContext = createContext(null);\n//# sourceMappingURL=error-handler.js.map","import { useEffect, useId } from 'react';\nimport { create } from 'zustand';\nexport const useBlockerDialogState = create((set) => ({\n activeBlockers: [],\n addBlocker: (options) => {\n set((state) => ({\n activeBlockers: [...state.activeBlockers, options],\n }));\n },\n removeBlocker: (id) => {\n set((state) => ({\n activeBlockers: state.activeBlockers.filter((blocker) => blocker.id !== id),\n }));\n },\n requestedBlockers: [],\n requestBlocker(options) {\n set((state) => ({\n requestedBlockers: [...state.requestedBlockers, options],\n }));\n },\n clearRequestedBlockers: () => {\n set(() => ({\n requestedBlockers: [],\n }));\n },\n}));\nexport function useBlockBeforeContinue() {\n const hasActiveBlockers = useBlockerDialogState((state) => state.activeBlockers.length > 0);\n const clearRequestedBlockers = useBlockerDialogState((state) => state.clearRequestedBlockers);\n // make sure we clear any blocker requests if we navigate away\n useEffect(() => () => {\n clearRequestedBlockers();\n }, [clearRequestedBlockers]);\n const requestBlocker = useBlockerDialogState((state) => state.requestBlocker);\n // if no blockers, continue immediately\n if (!hasActiveBlockers) {\n return ({ onContinue }) => {\n onContinue();\n };\n }\n return requestBlocker;\n}\nexport function useBlockerDialog(options) {\n const id = useId();\n const addBlocker = useBlockerDialogState((state) => state.addBlocker);\n const removeBlocker = useBlockerDialogState((state) => state.removeBlocker);\n useEffect(() => {\n if (options.disableBlock) {\n return;\n }\n addBlocker({\n disableBlock: options.disableBlock,\n title: options.title,\n content: options.content,\n buttonContinueWithoutSaveText: options.buttonContinueWithoutSaveText,\n onContinueWithoutSave: options.onContinueWithoutSave,\n buttonContinueText: options.buttonContinueText,\n onContinue: options.onContinue,\n id,\n });\n return () => {\n removeBlocker(id);\n };\n }, [\n addBlocker,\n removeBlocker,\n options.disableBlock,\n options.buttonContinueWithoutSaveText,\n options.onContinueWithoutSave,\n options.buttonContinueText,\n options.content,\n options.title,\n options.onContinue,\n id,\n ]);\n}\n//# sourceMappingURL=use-blocker-dialog.js.map","import { useBlockerDialog } from './use-blocker-dialog.js';\nexport function useBlockDirtyFormNavigate(formState, reset) {\n useBlockerDialog({\n disableBlock: !formState.isDirty,\n title: 'Unsaved Changes',\n content: 'You have unsaved changes. Are you sure you want to continue?',\n buttonContinueText: 'Discard Changes',\n onContinue: () => {\n reset();\n return true;\n },\n });\n}\n//# sourceMappingURL=use-block-dirty-form-navigate.js.map","import { toast } from '@baseplate-dev/ui-components';\nimport { flattenObject } from 'es-toolkit';\nimport { useEffect, useRef } from 'react';\nimport { useFormState } from 'react-hook-form';\nimport { useBlockerDialog } from './use-blocker-dialog.js';\nexport function useBlockUnsavedChangesNavigate({ control, reset, onSubmit, }) {\n const isDirtyRef = useRef(false);\n const formState = useFormState({ control });\n isDirtyRef.current = formState.isDirty;\n if (import.meta.env.DEV) {\n // eslint-disable-next-line react-hooks/rules-of-hooks -- only want to run this check in dev mode for performance/usability reasons\n useEffect(() => {\n if (Object.keys(formState.dirtyFields).length === 0 &&\n formState.isDirty) {\n // a bit of a hack to figure out what the issue is but OK since we only do this in dev mode\n const { _formValues, _defaultValues } = control;\n const formValueKeys = Object.keys(flattenObject(_formValues));\n const defaultValueKeys = Object.keys(flattenObject(_defaultValues));\n const missingKeys = formValueKeys.filter((key) => !defaultValueKeys.includes(key));\n toast.error(`Form is dirty but no fields are marked as dirty. This implies that there is likely a field ` +\n `is controlled but not set in defaultValues. This can be fixed by setting the default value to the field. ` +\n `Note: You will only see this error if you are running the app in dev mode. ` +\n `Missing fields: ${missingKeys.join(', ')}`);\n }\n }, [formState.dirtyFields, formState.isDirty, control]);\n }\n useBlockerDialog({\n disableBlock: !formState.isDirty,\n title: 'Unsaved Changes',\n content: 'You have unsaved changes. Do you want to save your changes?',\n buttonContinueWithoutSaveText: 'Discard Changes',\n onContinueWithoutSave: () => {\n reset();\n return true;\n },\n buttonContinueText: 'Save',\n onContinue: async () => {\n await onSubmit();\n // a bit of a hack to make sure we get the latest form state before continuing\n // there's not an easy way of figuring out if the submission was successful or not\n // so we wait for a React re-render and then check if the form is still dirty\n await new Promise((resolve) => setTimeout(resolve, 1));\n return !isDirtyRef.current;\n },\n });\n}\n//# sourceMappingURL=use-block-unsaved-changes-navigate.js.map","import { useMemo } from 'react';\nimport { useProjectDefinition } from './use-project-definition.js';\nexport function useDefinitionSchema(schemaCreator) {\n const { definitionSchemaParserContext } = useProjectDefinition();\n return useMemo(() => schemaCreator(definitionSchemaParserContext), [definitionSchemaParserContext, schemaCreator]);\n}\n//# sourceMappingURL=use-definition-schema.js.map","import { useContext } from 'react';\nimport { ErrorHandlerContext } from '../contexts/error-handler.js';\nexport function useErrorHandler() {\n const context = useContext(ErrorHandlerContext);\n if (!context) {\n throw new Error('useErrorHandler must be used within an ErrorHandlerContext');\n }\n return context;\n}\n//# sourceMappingURL=use-error-handler.js.map","import { toast } from '@baseplate-dev/ui-components';\nimport { isEqual } from 'es-toolkit';\nimport { useEffect, useRef } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useProjectDefinition } from './use-project-definition.js';\nexport function useResettableForm(props) {\n const formProps = useForm(props);\n const { reset, formState } = formProps;\n const { isDirty } = formState;\n const { updatedExternally } = useProjectDefinition();\n const oldValues = useRef(undefined);\n useEffect(() => {\n if (oldValues.current &&\n !isEqual(oldValues.current.oldDefaultValues, props?.defaultValues)) {\n reset(props?.defaultValues);\n if (isDirty && updatedExternally) {\n toast.warning('Contents were updated externally so form was reset!');\n }\n }\n if (!oldValues.current ||\n !isEqual(oldValues.current.oldDefaultValues, props?.defaultValues)) {\n oldValues.current = {\n oldDefaultValues: props?.defaultValues,\n };\n }\n }, [props?.defaultValues, reset, updatedExternally, isDirty]);\n return formProps;\n}\n//# sourceMappingURL=use-resettable-form.js.map","import { createPluginSpec } from '#src/plugins/spec/types.js';\nexport function createAdminCrudInputWebConfig(config) {\n return config;\n}\nexport function createAdminCrudInputWebImplementation() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const inputs = new Map();\n return {\n registerInputWebConfig(input) {\n if (inputs.has(input.name)) {\n throw new Error(`Admin CRUD input with name ${input.name} is already registered`);\n }\n inputs.set(input.name, input);\n },\n getInputWebConfig(name, builtInInputs = []) {\n const builtInInput = builtInInputs.find((b) => b.name === name);\n if (builtInInput) {\n return builtInInput;\n }\n const input = inputs.get(name);\n if (!input) {\n throw new Error(`Unable to find input with name ${name}`);\n }\n return input;\n },\n getInputWebConfigs(builtInInputs = []) {\n return [...builtInInputs, ...inputs.values()];\n },\n };\n}\n/**\n * Spec for adding config component for plugin\n */\nexport const adminCrudInputWebSpec = createPluginSpec('core/admin-crud-input-web', { defaultInitializer: createAdminCrudInputWebImplementation });\n//# sourceMappingURL=admin-crud-input-web-spec.js.map","import { createPluginSpec } from '#src/plugins/spec/types.js';\nexport function createNewModelTransformerWebConfig(config) {\n return config;\n}\nexport function createModelTransformerWebImplementation() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const transformers = new Map();\n return {\n registerTransformerWebConfig(transformer) {\n if (transformers.has(transformer.name)) {\n throw new Error(`Model transformer with name ${transformer.name} is already registered`);\n }\n transformers.set(transformer.name, transformer);\n },\n getTransformerWebConfig(name, builtInTransformers = []) {\n const builtInTransformer = builtInTransformers.find((b) => b.name === name);\n if (builtInTransformer) {\n return builtInTransformer;\n }\n const transformer = transformers.get(name);\n if (!transformer) {\n throw new Error(`Unable to find transformer with name ${name}`);\n }\n return transformer;\n },\n getTransformerWebConfigs(builtInTransformers = []) {\n return [...builtInTransformers, ...transformers.values()];\n },\n };\n}\n/**\n * Spec for adding config component for plugin\n */\nexport const modelTransformerWebSpec = createPluginSpec('core/model-transformer-web', { defaultInitializer: createModelTransformerWebImplementation });\n//# sourceMappingURL=model-transformer-web-spec.js.map","export function setUndefinedIfEmpty(value) {\n if (value === '')\n return undefined;\n return value;\n}\n//# sourceMappingURL=form.js.map"],"names":["React","importShared","ProjectDefinitionContext","useProjectDefinition","result","ComboboxField","useControllerMerged","useMemo","useState","createCreateOption","value","FeatureComboboxField","canCreate","rest","definition","searchQuery","setSearchQuery","featureOptions","baseFeatures","feature","newFeatureName","option","FeatureUtils","_jsx","FeatureComboboxFieldController","name","control","field","error","restProps","ModelComboboxField","modelOptions","baseModels","model","newModelName","ModelUtils","ModelComboboxFieldController","Alert","AlertDescription","AlertTitle","ModelMergerResultAlert","pendingModelChanges","changes","change","_jsxs","key","modelMergerDefinitionDiffConfig","capitalize","_Fragment","createContext","ErrorHandlerContext","useEffect","useId","useBlockerDialogState","create","set","options","state","id","blocker","useBlockBeforeContinue","hasActiveBlockers","clearRequestedBlockers","requestBlocker","onContinue","useBlockerDialog","addBlocker","removeBlocker","useBlockDirtyFormNavigate","formState","reset","toast","useRef","useBlockUnsavedChangesNavigate","onSubmit","isDirtyRef","useFormState","resolve","useDefinitionSchema","schemaCreator","definitionSchemaParserContext","useContext","useErrorHandler","context","useResettableForm","props","formProps","useForm","isDirty","updatedExternally","oldValues","isEqual","createAdminCrudInputWebConfig","config","createAdminCrudInputWebImplementation","inputs","input","builtInInputs","builtInInput","b","adminCrudInputWebSpec","createPluginSpec","createNewModelTransformerWebConfig","createModelTransformerWebImplementation","transformers","transformer","builtInTransformers","builtInTransformer","modelTransformerWebSpec","setUndefinedIfEmpty"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{c as j,m as Te,a as G,d as f,D as ot,g as C,R as de,b as rt,s as ee,e as q,f as Z,h as P,i as H,j as M,k as at,l as Ce,n as it,o as he,p as kt,M as Rt,q as ge,r as wt}from"../model-merger-vEOkdVdS.js";import{I as Ar,G as Mr,H as jr,u as Nr,F as Fr,L as $r,B as Or,C as _r,E as zr,K as xr,J as Lr,w as Br,t as Ur,y as Kr,A as Wr,z as Vr,v as qr,x as Hr}from"../model-merger-vEOkdVdS.js";import{p as St,c as st,f as Et}from"../index-D5UX5AHP.js";import{i as g}from"../_virtual___federation_fn_import-DXu2m-ZE.js";import{i as Le}from"../isEqual-C420KeG-.js";import{p as Pe}from"../immer-B7fdkLVi.js";import{s as Tt}from"../sortBy-C9bvycg5.js";import{i as Be}from"../inflection-C1nKqrJS.js";function Y(e,t){const n={};for(let o=0;o<e.length;o++){const r=e[o],a=t(r);Object.hasOwn(n,a)||(n[a]=[]),n[a].push(r)}return n}function ae(e,t){const n={};for(let o=0;o<e.length;o++){const r=e[o],a=t(r);n[a]=r}return n}function ue(e){return Array.from(new Set(e))}function lt(...e){return function(...t){let n=e.length?e[0].apply(this,t):t[0];for(let o=1;o<e.length;o++)n=e[o].call(this,n);return n}}function De(e,t){const n={},o=Object.keys(e);for(let r=0;r<o.length;r++){const a=o[r],i=e[a];t(i,a)&&(n[a]=i)}return n}function Ct(){const e=new Map;return{registerCompiler(t){if(e.has(t.name))throw new Error(`Admin CRUD input with name ${t.name} is already registered`);e.set(t.name,t)},getCompiler(t,n=[]){const o=n.find(a=>a.name===t);if(o)return o;const r=e.get(t);if(!r)throw new Error(`Unable to find input with name ${t}`);return r}}}const Wo=j("core/admin-crud-input-compiler",{defaultInitializer:Ct});function Vo(e){return De(e,t=>t!==void 0&&!(Array.isArray(t)&&t.length===0))}function Pt(e){return De(e,t=>t!==void 0)}function qo(e){if(e!==null&&!(Array.isArray(e)&&e.length===0)&&!(typeof e=="object"&&Object.keys(e).every(t=>e[t]===void 0)))return e}function Ho(e){if(e)return e}class ct{constructor(t){Object.defineProperty(this,"implementations",{enumerable:!0,configurable:!0,writable:!0,value:t})}getPluginSpec(t){const n=this.implementations[t.name];if(!n)throw new Error(`Unable to find implementation for spec ${t.name}`);return n}getPluginSpecOptional(t){return this.implementations[t.name]}}const{toposortOrdered:Dt}=await g("@baseplate-dev/utils");function vt(e){return e.flatMap(t=>t.pluginModules.map(n=>({...n,id:`${t.key}/${n.key}`,name:`${t.name}/${n.key}`,pluginKey:t.key,pluginName:t.name})))}function It(e,t){const n=ae(e,i=>i.id),o=Te(t,()=>"built-in");for(const{name:i,module:s,id:d}of e)for(const c of Object.values(s.exports??{})){const l=c.name;if(l in o){const b=n[o[l]];throw new Error(`Duplicate export from plugins found ${l} (${i} and ${b.name})`)}o[l]=d}const r=e.flatMap(({module:i,name:s,id:d})=>Object.values(i.dependencies??{}).map(c=>{const l=o[c.name];if(!l){if(c.isOptional)return;throw new Error(`Cannot resolve plugin dependency for ${s} (${c.name})`)}if(l!=="built-in")return[l,d]}).filter(c=>c!==void 0)),a=e.map(i=>i.id);return Dt(a,r)}function At(e,t){const n={...t};for(const{name:o,module:r,pluginKey:a}of e){const i=r.dependencies?Pt(Te(r.dependencies,c=>{const l=n[c.name];if(!l&&!c.isOptional)throw new Error(`Plugin ${o} missing dependency ${c.name}`);return l})):{},s={pluginKey:a},d=r.initialize(i,s);Object.entries(r.exports??{}).map(([c,l])=>{const b=d[c];if(!b)throw new Error(`Plugin ${o} did not return required export ${c}`);n[l.name]=b})}return n}function Mt(e,t){const n=vt(e),o=ae(n,i=>i.id),r=It(n,t),a=At(r.map(i=>o[i]),t);return new ct(a)}function Go(e){return e}function jt(e,t){return e.availablePlugins.find(n=>n.metadata.key===t)?.metadata}function ye(e,t){const n=jt(e,t);if(!n)throw new Error(`Could not find plugin with key ${t}`);return n}function Zo(e,t){const n=ye(e,t);return e.availablePlugins.filter(o=>o.metadata.managedBy===n.fullyQualifiedName).map(o=>o.metadata)}const{z:w}=await g("zod"),Nt=w.string().regex(/^(\d+\.\d+\.\d+)$/),Ft=w.object({spec:w.string().min(1),version:w.string().min(1)}),$t=w.object({spec:w.string(),version:w.string()}),Qo=w.object({name:w.string().min(1).regex(/^[a-z0-9-]+$/),moduleDirectories:w.array(w.string()).optional(),displayName:w.string().min(1),icon:w.string().optional(),description:w.string(),managedBy:w.string().optional(),version:Nt,specs:w.object({exports:w.array(Ft).optional(),dependencies:w.array($t).optional()}).optional(),hidden:w.boolean().optional()}),I=G("plugin");function Ot(e){const t=[...e].sort((n,o)=>n.version-o.version);if(t.some(n=>n.version<=0))throw new Error("Migration version must be a positive integer");for(let n=0;n<t.length-1;n++)if(t[n].version===t[n+1].version)throw new Error("Migration versions must be unique");return t}function _t(){const e=new Map,t=new Map;return{registerSchemaCreator(n,o){if(e.has(n))throw new Error(`Schema for plugin ${n} is already registered`);e.set(n,o)},registerMigrations(n,o){if(t.has(n))throw new Error(`Migrations for plugin ${n} are already registered`);const r=Ot(o);t.set(n,r)},getSchemaCreator(n){return e.get(n)},getMigrations(n){return t.get(n)},getLastMigrationVersion(n){const o=t.get(n);return o?.[o.length-1]?.version}}}const ie=j("core/plugin-config",{defaultInitializer:_t});function Yo(e,t){const n=t.getPluginSpec(ie);return Pe(e,o=>{for(const r of o.plugins??[]){const a=n.getMigrations(I.keyFromId(r.id)),i=r.configSchemaVersion??-1;if(!a)continue;const s=a.at(-1);if(s){for(const d of a)if(d.version>i)try{const c=d.migrate(r.config,o);c.updatedConfig!==void 0&&(r.config=c.updatedConfig),c.updateProjectDefinition&&c.updateProjectDefinition(o)}catch(c){throw new Error(`Error migrating plugin ${r.id} to version ${d.version}: ${String(c)}`)}r.configSchemaVersion=s.version}}})}const Jo=j("core/auth-config",{}),Xo=j("core/auth-model-config",{});function zt(){const e=new Map;return{registerWebConfigComponent(t,n){if(e.has(t))throw new Error(`Web config component for plugin ${t} is already registered`);e.set(t,n)},getWebConfigComponent(t){return e.get(t)}}}const er=j("core/web-config",{platforms:"web",defaultInitializer:zt}),{safeMerge:Ue}=await g("@baseplate-dev/utils");function tr(){const e={};let t={};return{addChildrenToFeature(n,o){e[n]=Ue(e[n]??{},o)},getChildrenForFeature(n){return e[n]??{}},addRootChildren(n){t=Ue(t,n)},getRootChildren(){return t}}}function xt(){const e=new Map;return{registerAppCompiler(t){const n=e.get(t.appType)??[];e.has(t.appType)||e.set(t.appType,n),n.push(t)},getAppCompilers(t){return e.get(t)??[]}}}const nr=j("AppCompiler",{defaultInitializer:xt});function Lt(){const e=new Map;return{registerTransformerCompiler(t){if(e.has(t.name))throw new Error(`Model transformer with name ${t.name} is already registered`);e.set(t.name,t)},getModelTransformerCompiler(t,n=[]){const o=n.find(a=>a.name===t);if(o)return o;const r=e.get(t);if(!r)throw new Error(`Unable to find transformer with name ${t}`);return r}}}const or=j("core/model-transformer-compiler",{defaultInitializer:Lt}),Bt=["50","100","200","300","400","500","600","700","800","900","950"],dt={white:"oklch(1 0 0)",black:"oklch(0 0 0)"},te={red:{50:"oklch(0.971 0.013 17.38)",100:"oklch(0.936 0.032 17.717)",200:"oklch(0.885 0.062 18.334)",300:"oklch(0.808 0.114 19.571)",400:"oklch(0.704 0.191 22.216)",500:"oklch(0.637 0.237 25.331)",600:"oklch(0.577 0.245 27.325)",700:"oklch(0.505 0.213 27.518)",800:"oklch(0.444 0.177 26.899)",900:"oklch(0.396 0.141 25.723)",950:"oklch(0.258 0.092 26.042)"},orange:{50:"oklch(0.98 0.016 73.684)",100:"oklch(0.954 0.038 75.164)",200:"oklch(0.901 0.076 70.697)",300:"oklch(0.837 0.128 66.29)",400:"oklch(0.75 0.183 55.934)",500:"oklch(0.705 0.213 47.604)",600:"oklch(0.646 0.222 41.116)",700:"oklch(0.553 0.195 38.402)",800:"oklch(0.47 0.157 37.304)",900:"oklch(0.408 0.123 38.172)",950:"oklch(0.266 0.079 36.259)"},amber:{50:"oklch(0.987 0.022 95.277)",100:"oklch(0.962 0.059 95.617)",200:"oklch(0.924 0.12 95.746)",300:"oklch(0.879 0.169 91.605)",400:"oklch(0.828 0.189 84.429)",500:"oklch(0.769 0.188 70.08)",600:"oklch(0.666 0.179 58.318)",700:"oklch(0.555 0.163 48.998)",800:"oklch(0.473 0.137 46.201)",900:"oklch(0.414 0.112 45.904)",950:"oklch(0.279 0.077 45.635)"},yellow:{50:"oklch(0.987 0.026 102.212)",100:"oklch(0.973 0.071 103.193)",200:"oklch(0.945 0.129 101.54)",300:"oklch(0.905 0.182 98.111)",400:"oklch(0.852 0.199 91.936)",500:"oklch(0.795 0.184 86.047)",600:"oklch(0.681 0.162 75.834)",700:"oklch(0.554 0.135 66.442)",800:"oklch(0.476 0.114 61.907)",900:"oklch(0.421 0.095 57.708)",950:"oklch(0.286 0.066 53.813)"},lime:{50:"oklch(0.986 0.031 120.757)",100:"oklch(0.967 0.067 122.328)",200:"oklch(0.938 0.127 124.321)",300:"oklch(0.897 0.196 126.665)",400:"oklch(0.841 0.238 128.85)",500:"oklch(0.768 0.233 130.85)",600:"oklch(0.648 0.2 131.684)",700:"oklch(0.532 0.157 131.589)",800:"oklch(0.453 0.124 130.933)",900:"oklch(0.405 0.101 131.063)",950:"oklch(0.274 0.072 132.109)"},green:{50:"oklch(0.982 0.018 155.826)",100:"oklch(0.962 0.044 156.743)",200:"oklch(0.925 0.084 155.995)",300:"oklch(0.871 0.15 154.449)",400:"oklch(0.792 0.209 151.711)",500:"oklch(0.723 0.219 149.579)",600:"oklch(0.627 0.194 149.214)",700:"oklch(0.527 0.154 150.069)",800:"oklch(0.448 0.119 151.328)",900:"oklch(0.393 0.095 152.535)",950:"oklch(0.266 0.065 152.934)"},emerald:{50:"oklch(0.979 0.021 166.113)",100:"oklch(0.95 0.052 163.051)",200:"oklch(0.905 0.093 164.15)",300:"oklch(0.845 0.143 164.978)",400:"oklch(0.765 0.177 163.223)",500:"oklch(0.696 0.17 162.48)",600:"oklch(0.596 0.145 163.225)",700:"oklch(0.508 0.118 165.612)",800:"oklch(0.432 0.095 166.913)",900:"oklch(0.378 0.077 168.94)",950:"oklch(0.262 0.051 172.552)"},teal:{50:"oklch(0.984 0.014 180.72)",100:"oklch(0.953 0.051 180.801)",200:"oklch(0.91 0.096 180.426)",300:"oklch(0.855 0.138 181.071)",400:"oklch(0.777 0.152 181.912)",500:"oklch(0.704 0.14 182.503)",600:"oklch(0.6 0.118 184.704)",700:"oklch(0.511 0.096 186.391)",800:"oklch(0.437 0.078 188.216)",900:"oklch(0.386 0.063 188.416)",950:"oklch(0.277 0.046 192.524)"},cyan:{50:"oklch(0.984 0.019 200.873)",100:"oklch(0.956 0.045 203.388)",200:"oklch(0.917 0.08 205.041)",300:"oklch(0.865 0.127 207.078)",400:"oklch(0.789 0.154 211.53)",500:"oklch(0.715 0.143 215.221)",600:"oklch(0.609 0.126 221.723)",700:"oklch(0.52 0.105 223.128)",800:"oklch(0.45 0.085 224.283)",900:"oklch(0.398 0.07 227.392)",950:"oklch(0.302 0.056 229.695)"},sky:{50:"oklch(0.977 0.013 236.62)",100:"oklch(0.951 0.026 236.824)",200:"oklch(0.901 0.058 230.902)",300:"oklch(0.828 0.111 230.318)",400:"oklch(0.746 0.16 232.661)",500:"oklch(0.685 0.169 237.323)",600:"oklch(0.588 0.158 241.966)",700:"oklch(0.5 0.134 242.749)",800:"oklch(0.443 0.11 240.79)",900:"oklch(0.391 0.09 240.876)",950:"oklch(0.293 0.066 243.157)"},blue:{50:"oklch(0.97 0.014 254.604)",100:"oklch(0.932 0.032 255.585)",200:"oklch(0.882 0.059 254.128)",300:"oklch(0.809 0.105 251.813)",400:"oklch(0.707 0.165 254.624)",500:"oklch(0.623 0.214 259.815)",600:"oklch(0.546 0.245 262.881)",700:"oklch(0.488 0.243 264.376)",800:"oklch(0.424 0.199 265.638)",900:"oklch(0.379 0.146 265.522)",950:"oklch(0.282 0.091 267.935)"},indigo:{50:"oklch(0.962 0.018 272.314)",100:"oklch(0.93 0.034 272.788)",200:"oklch(0.87 0.065 274.039)",300:"oklch(0.785 0.115 274.713)",400:"oklch(0.673 0.182 276.935)",500:"oklch(0.585 0.233 277.117)",600:"oklch(0.511 0.262 276.966)",700:"oklch(0.457 0.24 277.023)",800:"oklch(0.398 0.195 277.366)",900:"oklch(0.359 0.144 278.697)",950:"oklch(0.257 0.09 281.288)"},violet:{50:"oklch(0.969 0.016 293.756)",100:"oklch(0.943 0.029 294.588)",200:"oklch(0.894 0.057 293.283)",300:"oklch(0.811 0.111 293.571)",400:"oklch(0.702 0.183 293.541)",500:"oklch(0.606 0.25 292.717)",600:"oklch(0.541 0.281 293.009)",700:"oklch(0.491 0.27 292.581)",800:"oklch(0.432 0.232 292.759)",900:"oklch(0.38 0.189 293.745)",950:"oklch(0.283 0.141 291.089)"},purple:{50:"oklch(0.977 0.014 308.299)",100:"oklch(0.946 0.033 307.174)",200:"oklch(0.902 0.063 306.703)",300:"oklch(0.827 0.119 306.383)",400:"oklch(0.714 0.203 305.504)",500:"oklch(0.627 0.265 303.9)",600:"oklch(0.558 0.288 302.321)",700:"oklch(0.496 0.265 301.924)",800:"oklch(0.438 0.218 303.724)",900:"oklch(0.381 0.176 304.987)",950:"oklch(0.291 0.149 302.717)"},fuchsia:{50:"oklch(0.977 0.017 320.058)",100:"oklch(0.952 0.037 318.852)",200:"oklch(0.903 0.076 319.62)",300:"oklch(0.833 0.145 321.434)",400:"oklch(0.74 0.238 322.16)",500:"oklch(0.667 0.295 322.15)",600:"oklch(0.591 0.293 322.896)",700:"oklch(0.518 0.253 323.949)",800:"oklch(0.452 0.211 324.591)",900:"oklch(0.401 0.17 325.612)",950:"oklch(0.293 0.136 325.661)"},pink:{50:"oklch(0.971 0.014 343.198)",100:"oklch(0.948 0.028 342.258)",200:"oklch(0.899 0.061 343.231)",300:"oklch(0.823 0.12 346.018)",400:"oklch(0.718 0.202 349.761)",500:"oklch(0.656 0.241 354.308)",600:"oklch(0.592 0.249 0.584)",700:"oklch(0.525 0.223 3.958)",800:"oklch(0.459 0.187 3.815)",900:"oklch(0.408 0.153 2.432)",950:"oklch(0.284 0.109 3.907)"},rose:{50:"oklch(0.969 0.015 12.422)",100:"oklch(0.941 0.03 12.58)",200:"oklch(0.892 0.058 10.001)",300:"oklch(0.81 0.117 11.638)",400:"oklch(0.712 0.194 13.428)",500:"oklch(0.645 0.246 16.439)",600:"oklch(0.586 0.253 17.585)",700:"oklch(0.514 0.222 16.935)",800:"oklch(0.455 0.188 13.697)",900:"oklch(0.41 0.159 10.272)",950:"oklch(0.271 0.105 12.094)"},slate:{50:"oklch(0.984 0.003 247.858)",100:"oklch(0.968 0.007 247.896)",200:"oklch(0.929 0.013 255.508)",300:"oklch(0.869 0.022 252.894)",400:"oklch(0.704 0.04 256.788)",500:"oklch(0.554 0.046 257.417)",600:"oklch(0.446 0.043 257.281)",700:"oklch(0.372 0.044 257.287)",800:"oklch(0.279 0.041 260.031)",900:"oklch(0.208 0.042 265.755)",950:"oklch(0.129 0.042 264.695)"},gray:{50:"oklch(0.985 0.002 247.839)",100:"oklch(0.967 0.003 264.542)",200:"oklch(0.928 0.006 264.531)",300:"oklch(0.872 0.01 258.338)",400:"oklch(0.707 0.022 261.325)",500:"oklch(0.551 0.027 264.364)",600:"oklch(0.446 0.03 256.802)",700:"oklch(0.373 0.034 259.733)",800:"oklch(0.278 0.033 256.848)",900:"oklch(0.21 0.034 264.665)",950:"oklch(0.13 0.028 261.692)"},zinc:{50:"oklch(0.985 0 0)",100:"oklch(0.967 0.001 286.375)",200:"oklch(0.92 0.004 286.32)",300:"oklch(0.871 0.006 286.286)",400:"oklch(0.705 0.015 286.067)",500:"oklch(0.552 0.016 285.938)",600:"oklch(0.442 0.017 285.786)",700:"oklch(0.37 0.013 285.805)",800:"oklch(0.274 0.006 286.033)",900:"oklch(0.21 0.006 285.885)",950:"oklch(0.141 0.005 285.823)"},neutral:{50:"oklch(0.985 0 0)",100:"oklch(0.97 0 0)",200:"oklch(0.922 0 0)",300:"oklch(0.87 0 0)",400:"oklch(0.708 0 0)",500:"oklch(0.556 0 0)",600:"oklch(0.439 0 0)",700:"oklch(0.371 0 0)",800:"oklch(0.269 0 0)",900:"oklch(0.205 0 0)",950:"oklch(0.145 0 0)"},stone:{50:"oklch(0.985 0.001 106.423)",100:"oklch(0.97 0.001 106.424)",200:"oklch(0.923 0.003 48.717)",300:"oklch(0.869 0.005 56.366)",400:"oklch(0.709 0.01 56.259)",500:"oklch(0.553 0.013 58.071)",600:"oklch(0.444 0.011 73.639)",700:"oklch(0.374 0.01 67.558)",800:"oklch(0.268 0.007 34.298)",900:"oklch(0.216 0.006 56.043)",950:"oklch(0.147 0.004 49.25)"}},ve={background:{name:"Background",description:"The background color of the page",lightDefault:{color:"white"},darkDefault:{baseShade:"950"},groupKey:"page",category:"surface"},foreground:{name:"Foreground",description:"The foreground color of the page",lightDefault:{baseShade:"950"},darkDefault:{baseShade:"50"},groupKey:"page",category:"surface"},muted:{name:"Muted Background",description:"Muted backgrounds such as <TabsList />, <Skeleton /> and <Switch />, also used as background for containers on white background or vice versa",lightDefault:{baseShade:"100"},darkDefault:{baseShade:"800"},groupKey:"muted",category:"surface"},mutedForeground:{name:"Muted Foreground",description:"Used for secondary text and subtitles",lightDefault:{baseShade:"500"},darkDefault:{baseShade:"400"},groupKey:"muted",category:"surface"},card:{name:"Card Background",description:"Background color for <Card />",lightDefault:{color:"white"},darkDefault:{baseShade:"950"},groupKey:"card",category:"surface"},cardForeground:{name:"Card Foreground",description:"Foreground color for <Card />",lightDefault:{baseShade:"950"},darkDefault:{baseShade:"50"},groupKey:"card",category:"surface"},popover:{name:"Popover Background",description:"Background color for popovers such as <DropdownMenu />, <HoverCard />, <Popover />",lightDefault:{color:"white"},darkDefault:{baseShade:"950"},groupKey:"popover",category:"surface"},popoverForeground:{name:"Popover Foreground",description:"Foreground color for popovers such as <DropdownMenu />, <HoverCard />, <Popover />",lightDefault:{baseShade:"950"},darkDefault:{baseShade:"50"},groupKey:"popover",category:"surface"},accent:{name:"Accent",description:"Used for accents such as hover effects on <DropdownMenuItem>, <SelectItem>...",lightDefault:{baseShade:"100"},darkDefault:{baseShade:"800"},groupKey:"accent",category:"surface"},accentForeground:{name:"Accent Foreground",description:"Used for accent foregrounds such as hover effects on <DropdownMenuItem>, <SelectItem>...",lightDefault:{baseShade:"900"},darkDefault:{baseShade:"50"},groupKey:"accent",category:"surface"},success:{name:"Success",description:"Used for success state on input fields, toast or alerts",lightDefault:{color:"emerald-50"},darkDefault:{color:"emerald-950"},groupKey:"success",category:"surface"},successForeground:{name:"Success Foreground",description:"Used for success foregrounds",lightDefault:{color:"emerald-950"},darkDefault:{color:"emerald-50"},groupKey:"success",category:"surface"},warning:{name:"Warning",description:"Used for warning color on toast or alert",lightDefault:{color:"amber-50"},darkDefault:{color:"amber-950"},groupKey:"warning",category:"surface"},warningForeground:{name:"Warning Foreground",description:"Used for warning foregrounds",lightDefault:{color:"amber-950"},darkDefault:{color:"amber-50"},groupKey:"warning",category:"surface"},error:{name:"Error",description:"Used for error state on input fields, toast or alerts",lightDefault:{color:"red-50"},darkDefault:{color:"red-950"},groupKey:"error",category:"surface"},errorForeground:{name:"Error Foreground",description:"Used for error foregrounds",lightDefault:{color:"red-950"},darkDefault:{color:"red-50"},groupKey:"error",category:"surface"},primary:{name:"Primary",description:"Primary colors for <Button /> and other active states for interactive elements such as checkbox",lightDefault:{primaryShade:"800"},darkDefault:{primaryShade:"950"},groupKey:"primary",category:"interactive"},primaryHover:{name:"Primary Hover",description:"Hover background for primary color",lightDefault:{primaryShade:"900"},darkDefault:{primaryShade:"800"},groupKey:"primary",category:"interactive"},primaryForeground:{name:"Primary Foreground",description:"Text color for primary button",lightDefault:{baseShade:"50"},darkDefault:{baseShade:"50"},groupKey:"primary",category:"interactive"},secondary:{name:"Secondary",description:"Secondary colors for <Button />",lightDefault:{baseShade:"100"},darkDefault:{baseShade:"800"},groupKey:"secondary",category:"interactive"},secondaryHover:{name:"Secondary Hover",description:"Hover background for secondary color",lightDefault:{baseShade:"300"},darkDefault:{baseShade:"600"},groupKey:"secondary",category:"interactive"},secondaryForeground:{name:"Secondary Foreground",description:"Text color for secondary button",lightDefault:{baseShade:"900"},darkDefault:{baseShade:"50"},groupKey:"secondary",category:"interactive"},destructive:{name:"Destructive",description:'Used for destructive actions such as <Button variant="destructive">',lightDefault:{color:"red-500"},darkDefault:{color:"red-900"},groupKey:"destructive",category:"interactive"},destructiveHover:{name:"Destructive Hover",description:"Hover color for destructive background",lightDefault:{color:"red-700"},darkDefault:{color:"red-700"},groupKey:"destructive",category:"interactive"},destructiveForeground:{name:"Destructive Foreground",description:"Hover color for destructive background",lightDefault:{baseShade:"50"},darkDefault:{baseShade:"50"},groupKey:"destructive",category:"interactive"},link:{name:"Link",description:"Used for interactive links mostly in text",lightDefault:{primaryShade:"700"},darkDefault:{primaryShade:"600"},groupKey:"link",category:"interactive"},linkVisited:{name:"Visited Link",description:"Color for link after being visited",lightDefault:{primaryShade:"800"},darkDefault:{primaryShade:"700"},groupKey:"link",category:"interactive"},border:{name:"Border",description:"Default border color",lightDefault:{baseShade:"200"},darkDefault:{baseShade:"800"},groupKey:"border",category:"utility"},input:{name:"Input Border",description:"Border color for inputs such as <Input />, <Select />, <Textarea />",lightDefault:{baseShade:"200"},darkDefault:{baseShade:"800"},groupKey:"border",category:"utility"},ring:{name:"Focus Ring",description:"Used for focus ring.",lightDefault:{primaryShade:"400"},darkDefault:{primaryShade:"500"},groupKey:"ring",category:"utility"}},Ut=Object.keys(ve);function Ke(e){return e.replace(/^\./,"").split("/").filter(t=>t!=="")}function Kt(e,t){const n=Ke(e),o=Ke(t);for(;n.length>0&&o.length>0&&n[0]===o[0];)n.shift(),o.shift();const r=n.length;return[...Array.from({length:r}).fill(".."),...o].join("/")}function Wt(e,t){const n=e.apps.find(o=>o.id===t);if(!n)throw new Error(`Unable to find app with ID ${t}`);return n}function Vt(e){const t=e.apps.filter(o=>o.type==="backend");if(t.length>1||t.length===0)throw new Error("Only one backend app is supported and must exist");return t[0]}function be(e){return e.packageLocation?e.packageLocation:`packages/${e.name}`}function qt(e,t){return Kt(be(e),be(t))}const rr={byId:Wt,getBackendApp:Vt,getBackendRelativePath:qt,getAppDirectory:be},Ie=G("app");function ar(e){return e}const{CASE_VALIDATORS:Ht}=await g("@baseplate-dev/utils"),{z:J}=await g("zod"),Ae={id:J.string().default(Ie.generateNewId()),name:Ht.KEBAB_CASE,type:J.string(),packageLocation:J.string().regex(/^(?!.*(?:\/|\.\.)\/)(?!^\.\.$)(?!^\.$)(?:[\w\-.]+\/?)+[\w\-.]*|^$/,{message:"Invalid package location. Must be a valid subdirectory."}).optional()},ir=J.object(Ae),{z:N}=await g("zod"),Gt=f(()=>N.object({...Ae,type:N.literal("backend"),enableStripe:N.boolean().optional(),enableRedis:N.boolean().optional(),enableBullQueue:N.boolean().optional(),enablePostmark:N.boolean().optional(),enableSubscriptions:N.boolean().optional(),enableAxios:N.boolean().optional()})),sr="backend",Me=G("role");function ke(e){return e instanceof ot?e.value:Array.isArray(e)?e.map(ke):typeof e=="object"&&e!==null?Object.fromEntries(Object.entries(e).map(([t,n])=>[t,ke(n)])):e}function lr(e){return e}class Zt{constructor(t,n,o){Object.defineProperty(this,"references",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"entitiesWithNameResolver",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pathPrefix",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"context",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pathMap",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.references=[],this.entitiesWithNameResolver=[],this.pathPrefix=t,this.context=n,this.pathMap=new Map,this.data=o}_constructPathWithoutPrefix(t){return t?t.split(".").map(o=>/^[0-9]+$/.test(o)?Number.parseInt(o,10):o):[]}_constructPath(t){return t?[...this.pathPrefix,...this._constructPathWithoutPrefix(t)]:this.pathPrefix}_constructPathWithContext(t,n){if(typeof t=="string")return this._constructPath(t);const o=this.context.pathMap.get(t.context);if(!o)throw new Error(`Could not find context for ${t.context} from ${this.pathPrefix.join(".")}`);if(o.type!==n)throw new Error(`Attempted to retrieve context for ${t.context} from ${this.pathPrefix.join(".")} expecting ${n.name}, but found ${o.type.name}`);return o.path}addReference(t){if(!t.type.parentType&&t.parentPath)throw new Error("Parent path does nothing since reference does not have parent");if(t.type.parentType&&!t.parentPath)throw new Error("Parent path required if reference type has parent type");const n=this._constructPathWithoutPrefix(t.path),o=n.length===0?this.data:C(this.data,n);if(o==null)return;const r=this._constructPath(t.path);this.references.push({type:t.type,path:r,parentPath:t.parentPath&&t.type.parentType&&this._constructPathWithContext(t.parentPath,t.type.parentType),onDelete:t.onDelete}),t.addContext&&this._addPathToContext(r,t.type,t.addContext)}addEntity(t){const n=this._constructPath(t.path),o=t.idPath?this._constructPathWithoutPrefix(t.idPath):[...this._constructPathWithoutPrefix(t.path),"id"],r=C(this.data,o);if(!r)throw new Error(`No id found for entity ${t.type.name}`);if(!t.type.isId(r))throw new Error(`Invalid id: ${r} for entity ${t.type.name}`);const i=(t.getNameResolver??(d=>C(d,"name")))(ke(this.data)),s={id:r,type:t.type,path:n,idPath:[...this.pathPrefix,...o],parentPath:t.parentPath&&t.type.parentType&&this._constructPathWithContext(t.parentPath,t.type.parentType)};this.entitiesWithNameResolver.push({...s,nameResolver:typeof i=="string"?{resolveName:()=>i}:i}),t.addContext&&this._addPathToContext([...this.pathPrefix,...o],t.type,t.addContext)}_addPathToContext(t,n,o){this.pathMap.set(o,{path:t,type:n}),this.context.pathMap.set(o,{path:t,type:n})}addPathToContext(t,n,o){this._addPathToContext(this._constructPath(t),n,o)}}function X(e,t,n){const o=new Zt(n,t.context,e);if(e instanceof ot)return o.addReference(e.reference),t.references.push(...o.references),t.entitiesWithNameResolver.push(...o.entitiesWithNameResolver),e.value;if(typeof e=="object"&&e!==null&&de in e){const r=e[de];for(const s of r.entities)o.addEntity(s);for(const s of r.references)o.addReference(s);for(const s of r.contextPaths)o.addPathToContext(s.path,s.type,s.context);t.references.push(...o.references),t.entitiesWithNameResolver.push(...o.entitiesWithNameResolver);const{[de]:a,...i}=e;return Object.fromEntries(Object.entries(i).map(([s,d])=>[s,X(d,t,[...n,s])]))}return Array.isArray(e)?e.map((r,a)=>X(r,t,[...n,a])):typeof e=="object"&&e!==null?Object.fromEntries(Object.entries(e).map(([r,a])=>[r,X(a,t,[...n,r])])):e}function Qt(e){const t={context:{pathMap:new Map},references:[],entitiesWithNameResolver:[]},n=X(e,t,[]),o=new Set;for(const r of t.entitiesWithNameResolver){if(o.has(r.id))throw new Error(`Duplicate ID found: ${r.id}`);o.add(r.id)}return{data:n,references:t.references,entitiesWithNameResolver:t.entitiesWithNameResolver}}const{toposort:Yt}=await g("@baseplate-dev/utils");function Jt(e,{skipReferenceNameResolution:t=!1,allowInvalidReferences:n=!1}={}){const{entitiesWithNameResolver:o,references:r,data:a}=e,i=ae(o,l=>l.id),s=new Map,d=Yt(o.map(l=>l.id),o.flatMap(l=>{const b=l.nameResolver.idsToResolve??{};return Object.values(b).flat().filter(p=>p in i).map(p=>[p,l.id])}));function c(l){if(t)return l;const b=s.get(l);if(!b){if(n)return l;throw new Error(`Could not resolve entity name for id: ${l}`)}return b.name}for(const l of d){const{nameResolver:b,...p}=i[l],O=Te(b.idsToResolve??{},h=>Array.isArray(h)?h.map(E=>c(E)):c(h));s.set(p.id,{...p,name:b.resolveName(O)})}return{entities:[...s.values()],references:r,data:a}}function se(e,t,n,o){const r=rt({...n,transformReferences:!0}),i=e(r).parse(t),s=Qt(i);return Jt(s,o)}const{toposort:Xt}=await g("@baseplate-dev/utils");function We(e,t){return JSON.stringify({name:e,parentId:t})}function ut(e,t,n){const o=se(e,t,n,{skipReferenceNameResolution:!0});return en(o)}function en(e){const{references:t,entities:n,data:o}=e,r=Y(n,p=>p.id),a=Object.values(r).filter(p=>p.length>1);if(a.length>0)throw new Error(`Found multiple duplicate entity IDs: ${a.map(p=>`${p[0].id} (${p.map(O=>O.path.join(".")).join(",")})`).join(", ")}`);if(ue(n.map(p=>p.id)).length!==n.length)throw new Error("Found duplicate entity IDs");const s=ue(n.map(p=>p.type)),d=ue(s.map(p=>p.name));if(d.length!==s.length)throw new Error("Found more entity types than entity type names implying duplicate entity type name");const c=Xt(d,s.filter(p=>!!p.parentType).map(p=>[p.parentType?.name??"",p.name])),l=Y(n,p=>p.type.name),b=Y(t,p=>p.type.name);for(const p of c){const O=l[p]??[],h=b[p]??[],E=ae(O,k=>{const{parentPath:D}=k,Q=D?C(o,D):void 0;if(D&&typeof Q!="string")throw new Error(`Could not resolve parent path: ${D.join(".")}`);return We(k.name,Q)});for(const k of h){const D=C(o,k.path),Q=k.parentPath&&C(o,k.parentPath),ze=We(D,Q),xe=E[ze];if(!xe)throw new Error(`Unable to resolve reference: ${k.path.join(".")} (${k.type.name} ${ze})`);ee(o,k.path,xe.id)}}return e}const Ve="deleted-sentinel-id";function tn(e,t,n){const o=[];let r,a=t;for(r=0;r<100;r++){let p=function(h){if(h.length===0)return!1;const E=h.slice(0,-1),k=C(a,E);return Array.isArray(k)?(b.push({path:E,idx:h.at(-1)}),!0):!1};const i=se(e,a,n,{allowInvalidReferences:!0}),{references:s,entities:d}=i;a=i.data;const c=new Map(d.map(h=>[h.id,h])),l=s.filter(h=>{const E=C(a,h.path);return E!==Ve&&!c.has(E)});if(l.length===0)return o.length>0?{type:"failure",issues:o}:{type:"success",value:a,refPayload:i};const b=[];for(const h of l){const E=C(a,h.path);switch(h.onDelete){case"SET_UNDEFINED":{if(h.path.length>0){const k=h.path.slice(0,-1),D=C(a,k);if(Array.isArray(D))throw new TypeError(`SET_UNDEFINED cannot be used for references inside arrays at path ${h.path.join(".")}. Use DELETE instead to remove the array element.`)}ee(a,h.path,void 0);break}case"RESTRICT":{o.push({ref:h,entityId:E}),ee(a,h.path,Ve);break}case"DELETE":{if(!p(h.path))throw new Error("Unable to find ref to cascade delete to");break}case"DELETE_PARENT":{if(!p(h.path.slice(0,-1)))throw new Error("Unable to find ref to cascade delete to");break}default:throw new Error(`Unknown onDelete action ${h.onDelete}`)}}const O=Y(b,h=>h.path.join("."));for(const[,h]of Object.entries(O)){const E=Tt(h,[k=>-k.idx]);for(const k of E){const D=C(a,k.path);if(!Array.isArray(D))throw new TypeError(`Expected parent to be an array at path ${k.path.join(".")}`);D.splice(k.idx,1)}}}throw new Error("Exceeded max iterations fixing deletions")}function nn(e){const{references:t,entities:n,data:o}=e,r=new Map(n.map(a=>[a.id,a]));return Pe(a=>{for(const i of t){const s=C(a,i.path),d=r.get(s);if(!d)throw new Error(`Could not find entity with ID: ${s} at ${i.path.join(".")}`);ee(a,i.path,d.name)}})(o)}function on(e,t,n){const o=se(e,t,n);return nn(o)}const rn=["string","uuid","int","boolean","dateTime","float","decimal","json","date","enum"],{z:v}=await g("zod"),Re=v.string().regex(/^oklch\(\s*([\d.]+)\s+([\d.]+)\s+([\d.]+)(?:\s*\/\s*([\d.]+))?\s*\)$/,{message:'OKLCH color must be of the format "oklch(l c h [/ a])" where l and c are between 0 and 1 and h is between 0 and 360 and a is between 0 and 100'}),qe=v.record(v.enum(Ut),Re),ne=v.object({paletteName:v.string().min(1),customBase:Re.nullish(),shades:v.record(v.enum(Bt),Re)}).refine(e=>e.paletteName!=="custom"||!!e.paletteName,{message:"A custom base color is required if using a custom base palette",path:["customBase"]}),cr=v.object({base:ne,primary:ne}),an=f(()=>v.object({palettes:v.object({base:ne,primary:ne}),colors:v.object({light:qe,dark:qe})})),{z:L}=await g("zod"),oe={PASCAL_CASE_STRING:L.string().regex(/^[A-Z][a-zA-Z0-9]*$/,"Should be PascalCase, e.g. 'MyModel'"),CAMEL_CASE_STRING:L.string().regex(/^[a-z][a-zA-Z0-9]*$/,"Should be camelCase, e.g. 'myField'"),CONSTANT_CASE_STRING:L.string().regex(/^[A-Z][A-Z0-9_]*$/,"Should be CONSTANT_CASE, e.g. 'MY_CONSTANT'"),OPTIONAL_CONSTANT_CASE_STRING:L.string().regex(/^[A-Z][A-Z0-9_]*$/,"Should be CONSTANT_CASE, e.g. 'MY_CONSTANT'").or(L.literal("")).optional()},{z:R}=await g("zod"),B=f(e=>e.withDefault(R.array(e.withRef({type:Me,onDelete:"DELETE"})),[])),sn=f(e=>R.object({objectType:e.withDefault(R.object({enabled:e.withDefault(R.boolean(),!1),fields:e.withDefault(R.array(e.withRef({type:P,onDelete:"DELETE",parentPath:{context:"model"}})),[]),localRelations:e.withDefault(R.array(e.withRef({type:Z,onDelete:"DELETE",parentPath:{context:"model"}})),[]),foreignRelations:e.withDefault(R.array(e.withRef({type:q,onDelete:"DELETE",parentPath:{context:"model"}})),[])}),{}),queries:e.withDefault(R.object({get:e.withDefault(R.object({enabled:e.withDefault(R.boolean(),!1),roles:B(e)}),{}),list:e.withDefault(R.object({enabled:e.withDefault(R.boolean(),!1),roles:B(e)}),{})}),{}),mutations:e.withDefault(R.object({create:e.withDefault(R.object({enabled:e.withDefault(R.boolean(),!1),roles:B(e)}),{}),update:e.withDefault(R.object({enabled:e.withDefault(R.boolean(),!1),roles:B(e)}),{}),delete:e.withDefault(R.object({enabled:e.withDefault(R.boolean(),!1),roles:B(e)}),{})}),{})})),{z:we}=await g("zod"),je={id:we.string(),type:we.string().min(1)},He=we.object(je);function dr(e){return e}const{z}=await g("zod"),ln=f(e=>e.withEnt(z.object({...je,type:z.literal("password")}),{type:H,parentPath:{context:"model"},getNameResolver:()=>"password"})),cn=f(e=>e.withRefBuilder(e.withEnt(z.object({...je,foreignRelationRef:e.withRef({type:q,onDelete:"DELETE_PARENT",parentPath:{context:"model"}}),type:z.literal("embeddedRelation"),embeddedFieldNames:z.array(e.withRef({type:P,onDelete:"RESTRICT",parentPath:{context:"embeddedModel"}})),embeddedTransformerNames:z.array(e.withRef({type:H,onDelete:"RESTRICT",parentPath:{context:"embeddedModel"}})).optional(),modelRef:e.withRef({type:M,onDelete:"RESTRICT"})}),{type:H,parentPath:{context:"model"},getNameResolver:t=>({idsToResolve:{foreignRelation:t.foreignRelationRef},resolveName:n=>n.foreignRelation})}),t=>{t.addPathToContext("modelRef",M,"embeddedModel")})),dn=[{name:"password",createSchema:ln,getName:()=>"Password"},{name:"embeddedRelation",createSchema:cn,getName:(e,t)=>e.nameFromId(t.foreignRelationRef)}];function un(){const e={};for(const t of dn)e[t.name]=t;return{registerModelTransformer(t){if(e[t.name])throw new Error(`Model transformer with name ${t.name} is already registered`);e[t.name]=t},getModelTransformers(){return e},getModelTransformer(t){const n=e[t];if(!n)throw new Error(`Unable to find transformer with name ${t}`);return n}}}const le=j("core/model-transformer",{defaultInitializer:un}),fn=f(e=>He.passthrough().transform((t,n)=>{const{type:o}=t;return e.plugins.getPluginSpec(le).getModelTransformer(o).createSchema(e).and(He).parse(t,{path:n.path})})),{z:A}=await g("zod"),pn=f(e=>e.withEnt(A.object({id:A.string(),name:A.string().min(1),friendlyName:A.string().min(1)}),{type:at,parentPath:{context:"enum"}})),mn=f(e=>A.object({id:A.string(),name:A.string().min(1),featureRef:e.withRef({type:Ce,onDelete:"RESTRICT"}),values:A.array(pn(e)),isExposed:A.boolean()})),hn=f(e=>e.withEnt(mn(e),{type:it,addContext:"enum"})),{z:u}=await g("zod"),gn=f(e=>e.withEnt(u.object({id:u.string(),name:oe.CAMEL_CASE_STRING,type:u.enum(rn),isOptional:u.boolean().default(!1),options:e.withRefBuilder(u.object({default:u.string().default(""),genUuid:u.boolean().optional(),updatedAt:u.boolean().optional(),defaultToNow:u.boolean().optional(),enumRef:e.withRef({type:it,onDelete:"RESTRICT"}).optional(),defaultEnumValueRef:u.string().optional()}).transform(t=>({...t,...t.enumRef?{}:{defaultEnumValueRef:void 0}})).default({default:""}),t=>{t.addReference({type:at,onDelete:"RESTRICT",path:"defaultEnumValueRef",parentPath:"enumRef"})})}),{type:P,parentPath:{context:"model"}}).superRefine((t,n)=>{const o=t.options.default,{type:r}=t;o&&r==="boolean"&&!["true","false"].includes(o)&&n.addIssue({path:["options","default"],code:"custom",message:"Default value must be true or false"})}).transform(t=>t.type!=="enum"&&t.options.enumRef?{...t,options:{...t.options,enumRef:void 0}}:t)),Ge=["Cascade","Restrict","NoAction","SetNull","SetDefault"],yn=f(e=>e.withRefBuilder(u.object({id:u.string(),foreignId:u.string().default(()=>q.generateNewId()),name:oe.CAMEL_CASE_STRING,references:u.array(u.object({localRef:e.withRef({type:P,onDelete:"RESTRICT",parentPath:{context:"model"}}),foreignRef:e.withRef({type:P,onDelete:"RESTRICT",parentPath:{context:"foreignModel"}})})),modelRef:u.string().min(1),foreignRelationName:oe.CAMEL_CASE_STRING,onDelete:u.enum(Ge).default("Cascade"),onUpdate:u.enum(Ge).default("Restrict")}),t=>{t.addReference({type:M,onDelete:"RESTRICT",addContext:"foreignModel",path:"modelRef"}),t.addEntity({type:Z,parentPath:{context:"model"}}),t.addEntity({type:q,idPath:"foreignId",getNameResolver:n=>n.foreignRelationName,parentPath:"modelRef"})})),bn=f(e=>e.withEnt(u.object({id:u.string(),fields:u.array(u.object({fieldRef:e.withRef({type:P,onDelete:"RESTRICT",parentPath:{context:"model"}})}))}),{type:he,parentPath:{context:"model"},getNameResolver(t){return{idsToResolve:{fields:t.fields.map(n=>n.fieldRef)},resolveName:n=>n.fields.join("_")}}})),kn=f(e=>u.object({create:u.object({enabled:u.boolean().default(!1),fields:u.array(e.withRef({type:P,onDelete:"DELETE",parentPath:{context:"model"}})).optional(),transformerNames:u.array(e.withRef({type:H,onDelete:"DELETE",parentPath:{context:"model"}})).optional()}).default({enabled:!1}),update:u.object({enabled:u.boolean().default(!1),fields:u.array(e.withRef({type:P,onDelete:"DELETE",parentPath:{context:"model"}})).optional(),transformerNames:u.array(e.withRef({type:H,onDelete:"DELETE",parentPath:{context:"model"}})).optional()}).default({enabled:!1}),delete:u.object({enabled:u.boolean().default(!1)}).default({enabled:!1}),transformers:u.array(fn(e)).default([])})),Rn=f(e=>u.object({id:u.string(),name:oe.PASCAL_CASE_STRING,featureRef:e.withRef({type:Ce,onDelete:"RESTRICT"}),model:u.object({fields:u.array(gn(e)),relations:u.array(yn(e)).optional(),primaryKeyFieldRefs:u.array(e.withRef({type:P,onDelete:"RESTRICT",parentPath:{context:"model"}})).min(1),uniqueConstraints:u.array(bn(e)).optional()}),service:kn(e).default({create:{enabled:!1},update:{enabled:!1},delete:{enabled:!1},transformers:[]}),graphql:sn(e).optional()})),wn=f(e=>e.withEnt(Rn(e),{type:M,addContext:"model"})),Ne=G("admin-section",{parentType:Ie}),{z:U}=await g("zod"),Sn=f(e=>U.object({id:U.string().default(Ne.generateNewId()),name:U.string().min(1),featureRef:e.withRef({type:Ce,onDelete:"RESTRICT"}),icon:U.string().optional(),type:U.string().min(1)})),{z:fe}=await g("zod"),Ze=fe.object({type:fe.string().min(1),label:fe.string().min(1)});function ur(e){return e}const Fe=G("admin-crud-embedded-form",{parentType:Ne}),{z:y}=await g("zod"),En=f(e=>y.object({type:y.literal("text"),label:y.string().min(1),modelFieldRef:e.withRef({type:P,onDelete:"RESTRICT",parentPath:{context:"model"}}),validation:y.string().optional()})),Tn={name:"text",createSchema:En},Cn=f(e=>y.object({type:y.literal("foreign"),label:y.string().min(1),localRelationRef:e.withRef({type:Z,onDelete:"RESTRICT",parentPath:{context:"model"}}),labelExpression:y.string().min(1),valueExpression:y.string().min(1),defaultLabel:y.string().optional(),nullLabel:y.string().optional()})),Pn={name:"foreign",createSchema:Cn},Dn=f(e=>y.object({type:y.literal("enum"),label:y.string().min(1),modelFieldRef:e.withRef({type:P,onDelete:"RESTRICT",parentPath:{context:"model"}})})),vn={name:"enum",createSchema:Dn},In=f(e=>y.object({type:y.literal("embedded"),label:y.string().min(1),modelRelationRef:e.withRef({type:q,onDelete:"RESTRICT",parentPath:{context:"model"}}),embeddedFormRef:e.withRef({type:Fe,parentPath:{context:"admin-section"},onDelete:"RESTRICT"})})),An={name:"embedded",createSchema:In},Mn=f(e=>y.object({type:y.literal("embeddedLocal"),label:y.string().min(1),localRelationRef:e.withRef({type:Z,onDelete:"RESTRICT",parentPath:{context:"model"}}),embeddedFormRef:e.withRef({type:Fe,parentPath:{context:"admin-section"},onDelete:"RESTRICT"})})),jn={name:"embeddedLocal",createSchema:Mn},Nn=f(()=>y.object({type:y.literal("password"),label:y.string().min(1)})),Fn={name:"password",createSchema:Nn},$n=[Tn,Pn,vn,An,jn,Fn];function On(){const e=new Map($n.map(t=>[t.name,t]));return{registerAdminCrudInput(t){if(e.has(t.name))throw new Error(`Admin CRUD input with name ${t.name} is already registered`);e.set(t.name,t)},getAdminCrudInputs(){return e},getAdminCrudInput(t){const n=e.get(t);if(!n)throw new Error(`Unable to find input with name ${t}`);return n}}}const ft=j("core/admin-crud-input",{defaultInitializer:On}),$e=f(e=>Ze.passthrough().transform((t,n)=>{const{type:o}=t;return e.plugins.getPluginSpec(ft).getAdminCrudInput(o).createSchema(e).and(Ze).parse(t,{path:n.path})})),{z:m}=await g("zod"),_n=f(e=>m.object({type:m.literal("foreign"),localRelationRef:e.withRef({type:Z,onDelete:"RESTRICT",parentPath:{context:"model"}}),labelExpression:m.string().min(1),valueExpression:m.string().min(1)})),zn=f(e=>m.object({type:m.literal("text"),modelFieldRef:e.withRef({type:P,onDelete:"RESTRICT",parentPath:{context:"model"}})})),xn=f(e=>m.discriminatedUnion("type",[zn(e),_n(e)])),fr=["text","foreign"],pt=f(e=>m.object({label:m.string().min(1),display:xn(e)})),Ln=f(e=>m.object({id:m.string().min(1),name:m.string().min(1),modelRef:e.withRef({type:M,onDelete:"RESTRICT"}),includeIdField:m.boolean().optional(),type:m.literal("object"),form:m.object({fields:m.array($e(e))})})),Bn=f(e=>m.object({id:m.string().min(1),name:m.string().min(1),modelRef:e.withRef({type:M,onDelete:"RESTRICT"}),includeIdField:m.boolean().optional(),type:m.literal("list"),table:m.object({columns:m.array(pt(e))}),form:m.object({fields:m.array($e(e))})})),Un=f(e=>e.withRefBuilder(m.discriminatedUnion("type",[Ln(e),Bn(e)]),t=>{t.addEntity({type:Fe,parentPath:{context:"admin-section"}}),t.addPathToContext("modelRef",M,"model")})),Kn=f(e=>e.withRefBuilder(Sn(e).and(m.object({type:m.literal("crud"),modelRef:e.withRef({type:M,onDelete:"RESTRICT"}),disableCreate:e.withDefault(m.boolean(),!1),table:m.object({columns:m.array(pt(e))}),form:m.object({fields:m.array($e(e))}),embeddedForms:m.array(Un(e)).optional()})),t=>{t.addPathToContext("modelRef",M,"model")})),{z:K}=await g("zod"),Wn=f(e=>e.withRefBuilder(Kn(e),t=>{t.addEntity({type:Ne,parentPath:{context:"app"},addContext:"admin-section"})})),Vn=f(e=>e.withDefault(K.object({enabled:K.boolean(),pathPrefix:K.string().default("/admin"),allowedRoles:e.withDefault(K.array(e.withRef({type:Me,onDelete:"DELETE"})),[]),sections:e.withDefault(K.array(Wn(e)),[])}),{enabled:!1,pathPrefix:"/admin"})),{z:_}=await g("zod"),qn=f(e=>_.object({...Ae,type:_.literal("web"),includeAuth:e.withDefault(_.boolean(),!1),title:_.string().default(""),description:_.string().default(""),includeUploadComponents:e.withDefault(_.boolean(),!1),enableSubscriptions:e.withDefault(_.boolean(),!1),adminApp:Vn(e)})),pr="web",{z:F}=await g("zod"),Se=F.object({id:F.string(),packageName:F.string(),name:F.string(),version:F.string(),config:F.unknown(),configSchemaVersion:F.number().optional()}),Hn=f(e=>e.withEnt(Se.passthrough(),{type:I}).transform((t,n)=>{const o=I.keyFromId(t.id),r=e.plugins.getPluginSpec(ie).getSchemaCreator(o);let a=Se;return r&&(a=a.extend({config:r(e)})),a.parse(t,{path:n.path})})),Gn=f(e=>F.array(Hn(e))),{z:pe}=await g("zod"),Zn=f(()=>pe.object({writeMetadata:pe.boolean().default(!1),fileIdRegexWhitelist:pe.string().default("")})),{CASE_VALIDATORS:Qe}=await g("@baseplate-dev/utils"),{z:V}=await g("zod"),Qn=V.object({name:Qe.KEBAB_CASE,packageScope:V.union([V.literal(""),Qe.KEBAB_CASE]).default(""),portOffset:V.number().min(1e3).max(6e4).int().refine(e=>e%1e3===0,"Port offset must be a multiple of 1000, e.g. 1000, 2000, 3000, etc.")}),Yn=f(e=>V.object({general:Qn,templateExtractor:Zn(e).optional(),theme:an(e).optional()})),{z:$}=await g("zod"),Jn=f(e=>e.withRefBuilder($.discriminatedUnion("type",[Gt(e),qn(e)]),t=>{t.addEntity({type:Ie,addContext:"app"})})),x=f(e=>$.object({cliVersion:$.string().nullish(),apps:$.array(Jn(e)).default([]),features:kt(e),models:$.array(wn(e)).default([]),enums:$.array(hn(e)).optional(),isInitialized:$.boolean().default(!1),schemaVersion:$.number(),plugins:Gn(e).optional(),settings:Yn(e)}));function mt(e,t){return e.enums?.find(n=>n.id===t)}function Xn(e,t){const n=mt(e,t);if(!n)throw new Error(`Could not find enum with ID ${t}`);return n}const mr={byId:mt,byIdOrThrow:Xn};function eo(e,t){const{primaryKeyFieldRefs:n}=e.model,o=e.model.uniqueConstraints??[];return n.length===1&&n.includes(t)||o.some(r=>r.fields.length===1&&r.fields[0].fieldRef===t)}function ht(e,t){const n=[...t].sort();return(Le([...e.model.primaryKeyFieldRefs].sort(),n)||e.model.uniqueConstraints?.some(o=>Le(o.fields.map(r=>r.fieldRef).sort(),n)))??!1}function Oe(e,t){return t.references.map(n=>{const o=e.model.fields.find(r=>r.id===n.localRef);if(!o)throw new Error(`Could not find field ${n.localRef} from relation ${t.name} in model ${e.name}`);return o})}function to(e,t){return Oe(e,t).some(o=>o.isOptional)}function no(e,t){const o=Oe(e,t).map(r=>r.id).sort();return ht(e,o)}function oo(e){switch(e.type){case"boolean":return"boolean()";case"date":return"string()";case"int":case"float":return"number()";case"dateTime":case"string":case"decimal":case"uuid":return"string()";default:throw new Error(`Unsupported validator for ${e.type}`)}}function ro(e,t,n,o){const r=Rt.byIdOrThrow(e,t),a=r.model.fields.find(d=>d.id===n);if(!a)throw new Error(`Field ${n} not found in model ${r.name}`);const i=a.isOptional?".nullish()":"";if(a.type==="int")return`z.number().or(z.string()).pipe(z.coerce.number().finite().int())${i}`;if(a.type==="float")return`z.number().or(z.string()).pipe(z.coerce.number().finite())${i}`;const s=`z.${oo(a)}${i}`;return s}const hr={isScalarUnique:eo,areScalarsUnique:ht,getRelationLocalFields:Oe,isRelationOptional:to,isRelationOneToOne:no,getModelFieldValidation:ro};function ao(e,t){return t.getPluginSpec(le).getModelTransformer(e.type)}function io(e,t,n){return n.getPluginSpec(le).getModelTransformer(t.type).getName(e,t)}const gr={getTransformer:ao,getTransformName:io};function _e(e,t){const n=I.idFromKey(t);return e.plugins?.find(r=>r.id===n)}function gt(e,t){const n=_e(e,t);if(!n)throw new Error(`Could not find plugin with ID ${t}`);return n}function so(e,t){return _e(e,t)?.config}function lo(e,t){return gt(e,t).config}function co(e,t,n,o){const r=e.plugins??[],a=I.idFromKey(t.key),s=o.getPluginSpec(ie).getLastMigrationVersion(t.key);e.plugins=r.some(d=>d.id===a)?r.map(d=>a===d.id?{...d,config:n}:d):[...r,{id:a,name:t.name,version:t.version,packageName:t.packageName,config:n,configSchemaVersion:s}]}function yt(e,t,n){const o=ye(n.pluginStore,t),r=e.plugins?.filter(a=>ye(n.pluginStore,I.keyFromId(a.id)).managedBy===o.fullyQualifiedName);if(r)for(const a of r)yt(e,a.id,n);e.plugins=e.plugins?.filter(a=>a.id!==I.idFromKey(t))}const yr={byKey:_e,byKeyOrThrow:gt,configByKey:so,setPluginConfig:co,configByKeyOrThrow:lo,disablePlugin:yt},{z:Ye}=await g("zod"),uo=[ie,le,ft];function ce(e,t){const{availablePlugins:n,builtinSpecImplementations:o=[]}=e,r=Ye.object({plugins:Ye.array(Se).optional()}).parse(t),{plugins:a=[]}=r,i=[...uo,...o],s={};for(const c of i)if("type"in c){if(typeof c.defaultInitializer!="function")throw new TypeError(`Spec ${c.type} does not have a defaultInitializer function!`);s[c.name]=c.defaultInitializer()}else s[c.spec.name]=c.implementation;const d=a.map(c=>{const l=n.find(({metadata:p})=>p.name===c.name&&p.packageName===c.packageName),b=`${c.packageName}/${c.name}`;if(!l)throw new Error(`Unable to find plugin ${b}!`);return{key:l.metadata.key,name:b,pluginModules:l.modules}});return Mt(d,s)}function br(e,t,n){const o={...n,plugins:[...n.plugins??[],...t.filter(r=>!n.plugins?.some(a=>a.id===I.idFromKey(r.key))).map(r=>({id:I.idFromKey(r.key),version:r.version,name:r.name,packageName:r.packageName}))]};return ce(e,o)}function fo(e,t){const{pluginStore:n}=t,o=ce(n,e),r=rt({plugins:o});return x(r)}function kr(e,t){return fo(e,t).parse(e)}function po(e,t){const{pluginStore:n}=t,o=ce(n,e);return{definition:se(x,e,{plugins:o}),pluginStore:o}}const{stringifyPrettyStable:mo}=await g("@baseplate-dev/utils");class re{constructor(t,n,o){Object.defineProperty(this,"pluginStore",{enumerable:!0,configurable:!0,writable:!0,value:o}),Object.defineProperty(this,"refPayload",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"definition",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"references",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"entities",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"parserContext",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.refPayload=t,this.definition=t.data,this.references=t.references,this.entities=t.entities,this.parserContext=n}nameFromId(t){if(!t)return;const n=this.entities.find(o=>o.id===t)?.name;if(!n)throw new Error(`Could not find name for id ${t}`);return n}safeNameFromId(t){return t?this.entities.find(o=>o.id===t)?.name:void 0}fixRefDeletions(t){const n=Pe(t)(this.definition);return tn(x,n,{plugins:this.pluginStore})}toSerializedContents(){const t=on(x,this.definition,{defaultMode:"strip",plugins:this.pluginStore});return mo(t)}static fromDefinition(t,n){const{definition:o,pluginStore:r}=po(t,n);return new re(o,n,r)}static fromSerializedConfig(t,n){const o=ce(n.pluginStore,t);return new re(ut(x,t,{plugins:o}),n,o)}}const ho={version:5,name:"primaryUniqueRefs",description:"Store primary key in primaryKeyFieldRefs field and unique constraints in unique constraints field",migrate:e=>({...e,models:e.models.map(t=>{const n=t.model,o=n.primaryKeys?.length?n.primaryKeys:n.fields.filter(r=>r.isId).map(r=>r.name);return{...t,model:{...ge(n,["primaryKeys","uniqueConstraints"]),primaryKeyFieldRefs:o,fields:n.fields.map(r=>ge(r,["isId","isUnique"])),uniqueConstraints:[...n.uniqueConstraints?.map(r=>({id:he.generateNewId(),fields:r.fields.map(a=>({fieldRef:a.name}))}))??[],...n.fields.filter(r=>r.isUnique).map(r=>({id:he.generateNewId(),fields:[{fieldRef:r.name}]}))]}}})})},go={version:6,name:"individualServiceControllers",description:"Make service controller fields individually enabled",migrate:e=>({...e,models:e.models.map(t=>{const{build:n,create:o,update:r,delete:a,...i}=t.service??{};if(!n)return ge(t,["service"]);const s=o&&(!!o.fields?.length||!!o.transformerNames?.length),d=r&&(!!r.fields?.length||!!r.transformerNames?.length),c=!a?.disabled;return{...t,service:{...i,create:s?{...o,enabled:!0}:void 0,update:d?{...r,enabled:!0}:void 0,delete:c?{enabled:!0}:void 0}}})})};function Je(e){return De(e,t=>t!==void 0)}function Xe(e){return Object.keys(e).every(t=>e[t]===void 0)?void 0:e}const yo={version:7,name:"modelGraphql",description:"Migrate model schema to GraphQL schema",migrate:e=>({...e,models:e.models.map(t=>{const{schema:n,...o}=t,{buildObjectType:r,exposedFields:a,exposedLocalRelations:i,exposedForeignRelations:s,buildQuery:d,buildMutations:c,authorize:l}=n??{};return Je({...o,graphql:Xe(Je({objectType:r?{enabled:!!r,fields:a??[],localRelations:i??[],foreignRelations:s??[]}:void 0,queries:d?{get:{enabled:d,roles:l?.read??[]},list:{enabled:d,roles:l?.read??[]}}:void 0,mutations:c?Xe({create:!l||l.create.length>0?{enabled:!0,roles:l?.create??[]}:void 0,update:!l||l.update.length>0?{enabled:!0,roles:l?.update??[]}:void 0,delete:!l||l.delete.length>0?{enabled:!0,roles:l?.delete??[]}:void 0}):void 0}))})})})},et=[{name:"public",comment:"All users (including unauthenticated and authenticated users)",builtIn:!0},{name:"user",comment:"All authenticated users",builtIn:!0},{name:"system",comment:"System processes without a user context, e.g. background jobs",builtIn:!0}],bo={version:8,name:"anonymousPublicRole",description:"Migrate anonymous to public role",migrate:e=>({...e,auth:e.auth&&{...e.auth,roles:[...et.map(t=>({id:e.auth?.roles?.find(o=>o.name===t.name||o.name==="anonymous"&&t.name==="public")?.id??Me.generateNewId(),name:t.name,comment:t.comment,builtIn:!0})),...e.auth.roles?.filter(t=>!et.some(n=>n.name===t.name)&&t.name!=="anonymous").map(t=>({id:t.id,name:t.name,comment:t.comment,builtIn:!1}))??[]]}})};function S(e,t,n){const o=t.split("."),r=(a,i)=>{if(i.length===0)return n(wt(a));const[s,...d]=i;if(s==="*"){if(!Array.isArray(a))throw new TypeError(`Expected an array at ${o.join(".")}`);return a.map(c=>r(c,d))}else{if(typeof a!="object")throw new TypeError(`Expected an object at ${o.join(".")}, got ${typeof a}`);return a===null?a:s==="**"?Object.fromEntries(Object.entries(a).map(([c,l])=>[c,r(l,d)])):s in a?{...a,[s]:r(a[s],d)}:a}};return r(e,o)}function T(e){return t=>{if(t===null)return null;if(typeof t!="object")throw new TypeError(`Expected an object, got ${typeof t}`);return Object.fromEntries(Object.entries(t).map(([n,o])=>[e[n]||n,o]))}}const ko={version:9,name:"renameRefs",description:'Rename zRefs to be suffixed with "Ref"',migrate:e=>lt(n=>S(n,"apps.*.sections.*",T({feature:"featureRef",modelName:"modelRef"})),n=>S(n,"apps.*.sections.*.form.fields.*",T({localRelationName:"localRelationRef",modelField:"modelFieldRef",localRelation:"localRelationRef",modelRelation:"modelRelationRef",embeddedFormName:"embeddedFormRef"})),n=>S(n,"apps.*.sections.*.embeddedForms.*.form.fields.*",T({localRelationName:"localRelationRef",localRelation:"localRelationRef",modelField:"modelFieldRef",modelRelation:"modelRelationRef",embeddedFormName:"embeddedFormRef"})),n=>S(n,"apps.*.sections.*.table.columns.*.display",T({modelField:"modelFieldRef",localRelationName:"localRelationRef"})),n=>S(n,"apps.*.sections.*.embeddedForms.*.table.columns.*.display",T({modelField:"modelFieldRef",localRelationName:"localRelationRef"})),n=>S(n,"apps.*.sections.*.embeddedForms.*",T({modelName:"modelRef"})),n=>S(n,"auth",T({userModel:"userModelRef",userRoleModel:"userRoleModelRef",authFeaturePath:"authFeatureRef",accountsFeaturePath:"accountsFeatureRef"})),n=>S(n,"enums.*",T({feature:"featureRef"})),n=>S(n,"models.*.model.fields.*.options",T({enumType:"enumRef",defaultEnumValue:"defaultEnumValueRef"})),n=>S(n,"models.*",T({feature:"featureRef"})),n=>S(n,"models.*.model.relations.*.references.*",T({local:"localRef",foreign:"foreignRef"})),n=>S(n,"models.*.model.relations.*",T({modelName:"modelRef"})),n=>S(n,"plugins.*.config.categories.*",T({usedByRelation:"usedByRelationRef",defaultAdapter:"defaultAdapterRef"})))(e)};function Ro(e){const t=St(e);if(!t||t.mode!=="oklch")throw new Error(`Invalid OKLCH color string: ${e}`);return t}function wo(e){const t=typeof e=="string"?Ro(e):e,o=st("rgb")(t);return Et(o)}function So(e){const n=st("oklch")(e);return n?`oklch(${n.l.toFixed(3)} ${n.c.toFixed(3)} ${n.h?.toFixed(3)??0}${n.alpha===void 0?"":`/ ${n.alpha.toFixed(3)}`})`:"oklch(0 0 0)"}function me(e){if(e.startsWith("oklch"))return e;if(e.startsWith("#"))return So(e);throw new Error(`Invalid color: ${e}`)}const Eo={version:10,name:"hexToOklch",description:"Convert hex colors to OKLCH in theme configuration",migrate:e=>e.theme?lt(n=>S(n,"theme.palettes.**.customBase",me),n=>S(n,"theme.palettes.**.shades.**",me),n=>S(n,"theme.colors.**.**",me))(e):e},To={version:11,name:"pluginId",description:"Convert plugin ids to use the plugin entity type",migrate:e=>S(e,"plugins.*.id",t=>I.idFromKey(t))},Co={version:12,name:"migrateAuthConfig",description:"Migrate auth config to auth0 plugin config",migrate:e=>{if(!e.auth?.useAuth0)return{...e,auth:void 0};const t="plugin:halfdomelabs_baseplate-plugin-auth_auth0",n={userAccountModelRef:e.auth.userModelRef,authFeatureRef:e.auth.authFeatureRef,roles:e.auth.roles.map(a=>({id:a.id,name:a.name,comment:a.comment,builtIn:a.builtIn}))},o=e.plugins??[],r=o.findIndex(a=>a.id===t);return r===-1?o.push({id:t,name:"auth0",packageName:"@halfdomelabs/baseplate-plugin-auth",version:"0.1.0",config:n}):o[r]={...o[r],config:n},{...e,auth:void 0,plugins:o}}},Po={version:13,name:"moveGeneralSettings",description:"Move general settings fields from root to settings.general",migrate:e=>{const{name:t,packageScope:n,portOffset:o,templateExtractor:r,theme:a,...i}=e;return{...i,settings:{general:{name:t,packageScope:n,portOffset:o},templateExtractor:r,theme:a}}}},tt={"plugin:halfdomelabs_baseplate-plugin-auth_auth0":"plugin:baseplate-dev_plugin-auth_auth0","plugin:halfdomelabs_baseplate-plugin-storage_storage":"plugin:baseplate-dev_plugin-storage_storage"},Do={version:14,name:"migratePluginIds",description:"Migrate plugin IDs and package names to new format and resets client version in preparation for 0.1.0 reset",migrate:e=>{if(!e.plugins)return e;const t=e.plugins.map(n=>{const o=n.id in tt?tt[n.id]:n.id,r=n.packageName.replace("@halfdomelabs/baseplate-","@baseplate-dev/");return{...n,id:o,packageName:r}});return{...e,plugins:t,cliVersion:"0.1.0"}}},vo={version:15,name:"nullParentRefs",description:"Convert null parentRefs to undefined in features",migrate:e=>{if(!e.features)return e;const t=e.features.map(n=>({...n,parentRef:n.parentRef??void 0}));return{...e,features:t}}},Io={version:16,name:"webAdminApp",description:"Convert admin apps to web apps with adminApp and add adminApp to existing web apps",migrate:e=>{if(!e.apps)return e;const t=e.apps.map(n=>{if(n.type==="admin"){const{sections:o,allowedRoles:r,...a}=n;return{...a,type:"web",adminApp:{enabled:!0,pathPrefix:"/admin",sections:o??[],allowedRoles:r??void 0}}}return n.type==="web"&&!("adminApp"in n)?{...n,adminApp:{enabled:!1,pathPrefix:"/admin"}}:n});return{...e,apps:t}}},Ao={version:17,name:"renameAuthPlugin",description:"Rename plugin plugin-auth_auth to plugin-auth_local-auth and auto-activate auth manager plugin",migrate:e=>{if(!e.plugins)return e;let t=[...e.plugins],n=null;t=t.map(r=>r.id==="plugin:baseplate-dev_plugin-auth_auth"?(n={...r,name:"local-auth",id:"plugin:baseplate-dev_plugin-auth_local-auth"},n):r);const o=t.filter(r=>r.id==="plugin:baseplate-dev_plugin-auth_local-auth"||r.id==="plugin:baseplate-dev_plugin-auth_auth0"||r.id==="plugin:baseplate-dev_plugin-auth_placeholder-auth");if(o.length>0){const r=o.find(a=>a.id==="plugin:baseplate-dev_plugin-auth_local-auth")??o.find(a=>a.id==="plugin:baseplate-dev_plugin-auth_auth0")??o.find(a=>a.id==="plugin:baseplate-dev_plugin-auth_placeholder-auth");if(r){const a=r.id.replace("plugin:",""),i=r.config??{};t.push({id:"plugin:baseplate-dev_plugin-auth_auth",name:"auth",packageName:"@baseplate-dev/plugin-auth",version:"1.0.0",config:{implementationPluginKey:a,authFeatureRef:i.authFeatureRef,roles:i.roles}})}}return{...e,plugins:t}}},bt=[ho,go,yo,bo,ko,Eo,To,Co,Po,Do,vo,Io,Ao];function Rr(e){return typeof e=="object"&&!!e&&"schemaVersion"in e}class Mo extends Error{constructor(t,n){super(`Schema migration ${t} failed: ${n instanceof Error?n.message:String(n)}`),Object.defineProperty(this,"migrationName",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cause",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name="SchemaMigrationError",this.migrationName=t,this.cause=n}}function wr(e){const{schemaVersion:t}=e,n=bt.filter(r=>r.version>t).sort((r,a)=>r.version-a.version);let o=e;for(const r of n)try{o={...r.migrate(o),schemaVersion:r.version}}catch(a){throw new Mo(r.name,a)}return{migratedDefinition:o,appliedMigrations:n}}function jo(){return bt.at(-1)?.version??0}function No(e={}){return{settings:{general:{name:"test-project",packageScope:"",portOffset:3e3}},features:[],cliVersion:"1.0.0",apps:[],models:[],isInitialized:!0,schemaVersion:jo(),...e}}function Fo(e={}){return{...No(),...e}}function Sr(e={}){const t={availablePlugins:[]},n=new ct({}),o=ut(x,Fo(e),{plugins:n});return new re(o,{pluginStore:t},n)}const Er=["TEMPLATE_EXTRACTOR"];function $o(e){const t=dt[e];if(t)return t;const n=e.split("-");if(n.length===2){const o=n[0];if(Object.prototype.hasOwnProperty.call(te,o)){const a=te[n[0]][n[1]];if(a)return a}}return e}let W=null;function Oo(){if(!W){W={};for(const[e,t]of Object.entries(dt))W[t]=e;for(const[e,t]of Object.entries(te))for(const[n,o]of Object.entries(t))W[o]=`${e}-${n}`}return W}function Tr(e){return Oo()[e]??wo(e)}function Ee(e,t){return"color"in t?$o(t.color):"primaryShade"in t?e.primary.shades[t.primaryShade]:e.base.shades[t.baseShade]}function Cr(e,t,n){const o=ve[n][t==="light"?"lightDefault":"darkDefault"];return Ee(e,o)}function nt(e,t,n){const o={};for(const[r,a]of Object.entries(ve)){const i=r,s=t==="light"?a.lightDefault:a.darkDefault,d=Ee(e,s),c=n?.config[i]&&Ee(n.palettes,s),l=n?.config[i];o[i]=!d||l&&c!==l?l:d}return o}function Pr(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[`--${Be.dasherize(Be.underscore(t))}`,n]))}function Dr(){const e={paletteName:"slate",shades:te.slate},t={base:e,primary:e};return{palettes:t,colors:{light:nt(t,"light"),dark:nt(t,"dark")}}}export{Er as AVAILABLE_FLAGS,rr as AppUtils,$n as BUILT_IN_ADMIN_CRUD_INPUTS,dn as BUILT_IN_TRANSFORMERS,te as COLOR_PALETTES,Ar as DefinitionDiffArrayIncludesField,Mr as DefinitionDiffKeyedArrayField,jr as DefinitionDiffReplacementField,Nr as DefinitionEntityType,Zt as DefinitionRefBuilder,mr as EnumUtils,dt as FIXED_COLOR_MAPPINGS,Fr as FeatureUtils,hr as ModelFieldUtils,gr as ModelTransformerUtils,Rt as ModelUtils,Bt as PALETTE_SHADES,ct as PluginImplementationStore,yr as PluginUtils,re as ProjectDefinitionContainer,Ge as REFERENTIAL_ACTIONS,rn as SCALAR_FIELD_TYPES,bt as SCHEMA_MIGRATIONS,Mo as SchemaMigrationError,ve as THEME_COLORS,Ut as THEME_COLOR_KEYS,oe as VALIDATORS,fr as adminCrudDisplayTypes,Fe as adminCrudEmbeddedFormEntityType,An as adminCrudEmbeddedInputType,jn as adminCrudEmbeddedLocalInputType,Wo as adminCrudInputCompilerSpec,ft as adminCrudInputSpec,Ne as adminSectionEntityType,nr as appCompilerSpec,Ie as appEntityType,$r as applyDefinitionDiff,Or as applyModelMergerDiff,_r as applyModelMergerResultInPlace,Jo as authConfigSpec,Xo as authModelConfigSpec,Me as authRoleEntityType,sr as backendAppEntryType,Ze as baseAdminCrudInputSchema,ir as baseAppSchema,Ae as baseAppValidators,Se as basePluginDefinitionSchema,je as baseTransformerFields,He as baseTransformerSchema,$o as convertColorNameToOklch,So as convertHexToOklch,Tr as convertOklchToColorName,wo as convertOklchToHex,Vn as createAdminAppSchema,xn as createAdminCrudDisplaySchema,Un as createAdminCrudEmbeddedFormSchema,In as createAdminCrudEmbeddedInputSchema,Bn as createAdminCrudEmbeddedListSchema,Mn as createAdminCrudEmbeddedLocalInputSchema,Ln as createAdminCrudEmbeddedObjectSchema,Dn as createAdminCrudEnumInputSchema,_n as createAdminCrudForeignDisplaySchema,Cn as createAdminCrudForeignInputSchema,Ct as createAdminCrudInputCompilerImplementation,On as createAdminCrudInputImplementation,$e as createAdminCrudInputSchema,ur as createAdminCrudInputType,Nn as createAdminCrudPasswordInputSchema,Kn as createAdminCrudSectionSchema,pt as createAdminCrudTableColumnSchema,zn as createAdminCrudTextDisplaySchema,En as createAdminCrudTextInputSchema,zr as createAndApplyModelMergerResults,tr as createAppCompiler,xt as createAppCompilerPlugin,ar as createAppEntryType,Jn as createAppSchema,Gt as createBackendAppSchema,Sn as createBaseAdminSectionValidators,xr as createDefinitionDiff,Lr as createDefinitionDiffConfig,lr as createDefinitionEntityNameResolver,rt as createDefinitionSchemaParserContext,cn as createEmbeddedRelationTransformerSchema,G as createEntityType,mn as createEnumBaseSchema,hn as createEnumSchema,pn as createEnumValueSchema,Br as createFeatureSchema,kt as createFeaturesSchema,Ur as createInitializedPluginSpec,Rn as createModelBaseSchema,sn as createModelGraphqlSchema,Kr as createModelMergerResult,Wr as createModelMergerResults,yn as createModelRelationFieldSchema,gn as createModelScalarFieldSchema,wn as createModelSchema,kn as createModelServiceSchema,Lt as createModelTransformerCompilerImplementation,un as createModelTransformerImplementation,dr as createModelTransformerType,bn as createModelUniqueConstraintSchema,ln as createPasswordTransformerSchema,Go as createPlatformPluginExport,_t as createPluginConfigImplementation,ce as createPluginImplementationStore,br as createPluginImplementationStoreWithNewPlugins,j as createPluginSpec,Hn as createPluginWithConfigSchema,Gn as createPluginsSchema,x as createProjectDefinitionSchema,fo as createProjectDefinitionSchemaWithContext,Yn as createSettingsSchema,Zn as createTemplateExtractorSchema,No as createTestProjectDefinition,Sr as createTestProjectDefinitionContainer,Fo as createTestProjectDefinitionInput,an as createThemeSchema,fn as createTransformerSchema,Wn as createWebAdminSectionSchema,qn as createWebAppSchema,zt as createWebConfigImplementation,f as definitionSchema,ut as deserializeSchemaWithTransformedReferences,Vr as doesModelMergerResultsHaveChanges,Qt as extractDefinitionRefs,X as extractDefinitionRefsRecursive,Ce as featureEntityType,qr as featureNameSchema,tn as fixRefDeletions,Qn as generalSettingsSchema,Pr as generateCssFromThemeConfig,Dr as generateDefaultTheme,nt as generateThemeColorsFromShade,qt as getBackendRelativePath,Cr as getDefaultThemeColorFromShade,jo as getLatestMigrationVersion,Zo as getManagedPluginsForPlugin,jt as getPluginMetadataByKey,ye as getPluginMetadataByKeyOrThrow,Mt as initializePlugins,Rr as isMigrateableProjectDefinition,M as modelEntityType,it as modelEnumEntityType,at as modelEnumValueEntityType,q as modelForeignRelationEntityType,Z as modelLocalRelationEntityType,Hr as modelMergerDefinitionDiffConfig,P as modelScalarFieldEntityType,or as modelTransformerCompilerSpec,H as modelTransformerEntityType,le as modelTransformerSpec,he as modelUniqueConstraintEntityType,Re as oklchColor,ne as paletteSchema,cr as palettesSchema,Ro as parseOklch,kr as parseProjectDefinitionWithContext,po as parseProjectDefinitionWithReferences,ie as pluginConfigSpec,I as pluginEntityType,Qo as pluginMetadataSchema,$t as pluginSpecDependencySchema,Ft as pluginSpecSupportSchema,Yo as runPluginMigrations,wr as runSchemaMigrations,on as serializeSchema,nn as serializeSchemaFromRefPayload,Vo as stripEmptyGeneratorChildren,Pt as stripUndefinedValues,qe as themeColorSchema,qo as undefinedIfEmpty,Ho as undefinedIfFalsy,pr as webAppEntryType,er as webConfigSpec};
|
|
2
|
+
//# sourceMappingURL=project-builder-lib-BxDAWgq7.js.map
|