@baseplate-dev/project-builder-web 0.2.1 → 0.2.3
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-gwObfy2j.js +4 -0
- package/dist/assets/-constants-gwObfy2j.js.map +1 -0
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/web-BXxolMLm.js +2 -0
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/web-BXxolMLm.js.map +1 -0
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-CDWHycLw.js +5 -0
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-CDWHycLw.js.map +1 -0
- package/dist/assets/__federation_shared_@baseplate-dev/ui-components-DGE1buQ-.js +46 -0
- package/dist/assets/__federation_shared_@baseplate-dev/ui-components-DGE1buQ-.js.map +1 -0
- package/dist/assets/{_virtual___federation_fn_import-BawTfoQI.js → _virtual___federation_fn_import-CE3p-l_2.js} +2 -2
- package/dist/assets/{_virtual___federation_fn_import-BawTfoQI.js.map → _virtual___federation_fn_import-CE3p-l_2.js.map} +1 -1
- package/dist/assets/backend-BAEsy0fr.js +2 -0
- package/dist/assets/backend-BAEsy0fr.js.map +1 -0
- package/dist/assets/badge-with-type-label-BuG6yCtf.js +2 -0
- package/dist/assets/badge-with-type-label-BuG6yCtf.js.map +1 -0
- package/dist/assets/edit._id-DPcGRUbG.js +2 -0
- package/dist/assets/edit._id-DPcGRUbG.js.map +1 -0
- package/dist/assets/enum-info-form-BjI1ArPU.js +2 -0
- package/dist/assets/enum-info-form-BjI1ArPU.js.map +1 -0
- package/dist/assets/graphql-DksHNLLL.js +2 -0
- package/dist/assets/graphql-DksHNLLL.js.map +1 -0
- package/dist/assets/hierarchy-BwshirJR.js +2 -0
- package/dist/assets/hierarchy-BwshirJR.js.map +1 -0
- package/dist/assets/immer-xieDw-3D.js +2 -0
- package/dist/assets/immer-xieDw-3D.js.map +1 -0
- package/dist/assets/index-B6qfP-Zp.js +2 -0
- package/dist/assets/index-B6qfP-Zp.js.map +1 -0
- package/dist/assets/index-B9Di1LKs.css +1 -0
- package/dist/assets/index-BNK4j9mt.js +2 -0
- package/dist/assets/index-BNK4j9mt.js.map +1 -0
- package/dist/assets/index-BS45dlQs.js +2 -0
- package/dist/assets/index-BS45dlQs.js.map +1 -0
- package/dist/assets/index-C6ezfkGk.js +2 -0
- package/dist/assets/index-C6ezfkGk.js.map +1 -0
- package/dist/assets/index-CVRvV2mv.js +2 -0
- package/dist/assets/index-CVRvV2mv.js.map +1 -0
- package/dist/assets/index-CwavzuOe.js +2 -0
- package/dist/assets/index-CwavzuOe.js.map +1 -0
- package/dist/assets/index-D5UX5AHP.js +5 -0
- package/dist/assets/index-D5UX5AHP.js.map +1 -0
- package/dist/assets/index-Dp90A2TJ.js +2 -0
- package/dist/assets/index-Dp90A2TJ.js.map +1 -0
- package/dist/assets/index-E5Zy1ClF.js +2 -0
- package/dist/assets/index-E5Zy1ClF.js.map +1 -0
- package/dist/assets/index-La9rk06J.js +2 -0
- package/dist/assets/index-La9rk06J.js.map +1 -0
- package/dist/assets/index-gE__lQ6b.js +58 -0
- package/dist/assets/index-gE__lQ6b.js.map +1 -0
- package/dist/assets/index-s17MV-9f.js +2 -0
- package/dist/assets/index-s17MV-9f.js.map +1 -0
- package/dist/assets/index.esm-CyH9wtdI.js +10 -0
- package/dist/assets/index.esm-CyH9wtdI.js.map +1 -0
- package/dist/assets/inflection-C1nKqrJS.js +9 -0
- package/dist/assets/inflection-C1nKqrJS.js.map +1 -0
- package/dist/assets/model-info-form-B9t3m8Pj.js +2 -0
- package/dist/assets/model-info-form-B9t3m8Pj.js.map +1 -0
- package/dist/assets/model-merger-DL4MVNID.js +2 -0
- package/dist/assets/model-merger-DL4MVNID.js.map +1 -0
- package/dist/assets/new-app-dialog-Cd7rJ7i5.js +2 -0
- package/dist/assets/new-app-dialog-Cd7rJ7i5.js.map +1 -0
- package/dist/assets/new-enum-dialog-Z3aWnnBr.js +2 -0
- package/dist/assets/new-enum-dialog-Z3aWnnBr.js.map +1 -0
- package/dist/assets/new-model-dialog-uEX7hTid.js +2 -0
- package/dist/assets/new-model-dialog-uEX7hTid.js.map +1 -0
- package/dist/assets/route-B2oYTZT4.js +2 -0
- package/dist/assets/route-B2oYTZT4.js.map +1 -0
- package/dist/assets/route-B6DRGm3t.js +2 -0
- package/dist/assets/route-B6DRGm3t.js.map +1 -0
- package/dist/assets/route-BOOZxY6E.js +2 -0
- package/dist/assets/route-BOOZxY6E.js.map +1 -0
- package/dist/assets/route-BwqWBMDI.js +2 -0
- package/dist/assets/route-BwqWBMDI.js.map +1 -0
- package/dist/assets/route-BxjC9xAo.js +2 -0
- package/dist/assets/route-BxjC9xAo.js.map +1 -0
- package/dist/assets/route-BzTxfPrV.js +2 -0
- package/dist/assets/route-BzTxfPrV.js.map +1 -0
- package/dist/assets/route-C8YLDv4I.js +2 -0
- package/dist/assets/route-C8YLDv4I.js.map +1 -0
- package/dist/assets/route-DrufP1-c.js +2 -0
- package/dist/assets/route-DrufP1-c.js.map +1 -0
- package/dist/assets/route-_AecKyFO.js +2 -0
- package/dist/assets/route-_AecKyFO.js.map +1 -0
- package/dist/assets/sections-D-GS6uoS.js +2 -0
- package/dist/assets/sections-D-GS6uoS.js.map +1 -0
- package/dist/assets/sections._sectionKey-Bj4VmUuM.js +2 -0
- package/dist/assets/sections._sectionKey-Bj4VmUuM.js.map +1 -0
- package/dist/assets/service-C6FdRXxU.js +2 -0
- package/dist/assets/service-C6FdRXxU.js.map +1 -0
- package/dist/assets/template-extractor-D2LqkpO5.js +2 -0
- package/dist/assets/template-extractor-D2LqkpO5.js.map +1 -0
- package/dist/assets/theme-builder-_PghOvuC.js +11 -0
- package/dist/assets/theme-builder-_PghOvuC.js.map +1 -0
- package/dist/assets/use-definition-schema-B2FBXmC_.js +2 -0
- package/dist/assets/use-definition-schema-B2FBXmC_.js.map +1 -0
- package/dist/assets/use-enum-form-DQza9C6Q.js +2 -0
- package/dist/assets/use-enum-form-DQza9C6Q.js.map +1 -0
- package/dist/assets/use-model-form-D4qoaVd7.js +2 -0
- package/dist/assets/use-model-form-D4qoaVd7.js.map +1 -0
- package/dist/assets/utils-CH9UxfXa.js +2 -0
- package/dist/assets/utils-CH9UxfXa.js.map +1 -0
- package/dist/assets/web-C6Idxok-.js +2 -0
- package/dist/assets/web-C6Idxok-.js.map +1 -0
- package/dist/index.html +6 -8
- package/package.json +9 -8
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/web-DNtY4wq3.js +0 -2
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/web-DNtY4wq3.js.map +0 -1
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-zvGcQ6PN.js +0 -5
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-zvGcQ6PN.js.map +0 -1
- package/dist/assets/__federation_shared_@baseplate-dev/ui-components-DQh2UKHB.js +0 -46
- package/dist/assets/__federation_shared_@baseplate-dev/ui-components-DQh2UKHB.js.map +0 -1
- package/dist/assets/index-BDJ79UQH.css +0 -1
- package/dist/assets/index-C6NlRicZ.js +0 -78
- package/dist/assets/index-C6NlRicZ.js.map +0 -1
- package/dist/assets/index-DC_DCd-Q.js +0 -12
- package/dist/assets/index-DC_DCd-Q.js.map +0 -1
- package/dist/assets/index.esm-H0JGW0RR.js +0 -10
- package/dist/assets/index.esm-H0JGW0RR.js.map +0 -1
- package/dist/assets/model-merger-D2RoujrB.js +0 -2
- package/dist/assets/model-merger-D2RoujrB.js.map +0 -1
- package/dist/assets/not-empty-CznDVwM8.js +0 -2
- package/dist/assets/not-empty-CznDVwM8.js.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as c}from"./_virtual___federation_fn_import-CE3p-l_2.js";import{j as e}from"./index.esm-CyH9wtdI.js";import{L as s}from"./index-gE__lQ6b.js";const{Button:n,Card:i,CardDescription:r,CardFooter:a,CardHeader:o,CardTitle:t}=await c("@baseplate-dev/ui-components"),x=function(){return e.jsx("div",{className:"flex-1 bg-white",children:e.jsxs("div",{className:"mx-auto w-160 space-y-4 p-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("h1",{children:"Baseplate Project Builder"}),e.jsxs("p",{children:["When you've set everything up, just click the"," ",e.jsx("strong",{children:"Sync"})," button and Baseplate will sync the project configuration to your codebase."]})]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-1",children:[e.jsxs(i,{children:[e.jsxs(o,{children:[e.jsx(t,{children:"Models"}),e.jsx(r,{children:"Models are the core of your app. They define the data that your app will store and manipulate."})]}),e.jsx(a,{children:e.jsx(s,{to:"/data",from:"/",children:e.jsx(n,{children:"Configure Models"})})})]}),e.jsxs(i,{children:[e.jsxs(o,{children:[e.jsx(t,{children:"Plugins"}),e.jsx(r,{children:"Baseplate comes with a number of plugins that you can enable or disable, such as email and authentication."})]}),e.jsx(a,{children:e.jsx(s,{to:"/plugins",from:"/",children:e.jsx(n,{children:"Configure Plugins"})})})]}),e.jsxs(i,{children:[e.jsxs(o,{children:[e.jsx(t,{children:"Apps & Repositories"}),e.jsx(r,{children:"Each app represents a separate application that can be run, e.g. backend, frontend, mobile app, etc. You can also configure how the apps are organized into repositories, e.g. monorepos."})]}),e.jsx(a,{children:e.jsx(s,{className:"inline-block",to:"/apps",from:"/",children:e.jsx(n,{children:"Configure Apps"})})})]})]})]})})};export{x as component};
|
|
2
|
+
//# sourceMappingURL=index-C6ezfkGk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-C6ezfkGk.js","sources":["../../src/routes/index.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n Button,\n Card,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '@baseplate-dev/ui-components';\nimport { createFileRoute, Link } from '@tanstack/react-router';\n\nexport const Route = createFileRoute('/')({\n component: Index,\n});\n\nfunction Index(): React.JSX.Element {\n return (\n <div className=\"flex-1 bg-white\">\n <div className=\"mx-auto w-160 space-y-4 p-4\">\n <div className=\"space-y-2\">\n <h1>Baseplate Project Builder</h1>\n <p>\n When you've set everything up, just click the{' '}\n <strong>Sync</strong> button and Baseplate will sync the project\n configuration to your codebase.\n </p>\n </div>\n <div className=\"grid gap-4 md:grid-cols-1\">\n <Card>\n <CardHeader>\n <CardTitle>Models</CardTitle>\n <CardDescription>\n Models are the core of your app. They define the data that your\n app will store and manipulate.\n </CardDescription>\n </CardHeader>\n <CardFooter>\n <Link to=\"/data\" from=\"/\">\n <Button>Configure Models</Button>\n </Link>\n </CardFooter>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Plugins</CardTitle>\n <CardDescription>\n Baseplate comes with a number of plugins that you can enable or\n disable, such as email and authentication.\n </CardDescription>\n </CardHeader>\n <CardFooter>\n <Link to=\"/plugins\" from=\"/\">\n <Button>Configure Plugins</Button>\n </Link>\n </CardFooter>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Apps & Repositories</CardTitle>\n <CardDescription>\n Each app represents a separate application that can be run, e.g.\n backend, frontend, mobile app, etc. You can also configure how\n the apps are organized into repositories, e.g. monorepos.\n </CardDescription>\n </CardHeader>\n <CardFooter>\n <Link className=\"inline-block\" to=\"/apps\" from=\"/\">\n <Button>Configure Apps</Button>\n </Link>\n </CardFooter>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"names":["Button","Card","CardDescription","CardFooter","CardHeader","CardTitle","importShared","SplitComponent","jsxs","jsx","Link"],"mappings":"sJAEA,KAAA,CAAA,OAAAA,EAAA,KAAAC,EAAA,gBAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,UAAAC,CAAA,EAAA,MAAAC,EAAA,8BAAA,EAQ+DC,EAAA,UAM3B,CAClC,aACG,MAAI,CAAA,UAAU,kBACb,SAACC,EAAA,KAAA,MAAA,CAAI,UAAU,8BACb,SAAA,CAACA,EAAAA,KAAA,MAAA,CAAI,UAAU,YACb,SAAA,CAAAC,EAAAA,IAAC,MAAG,SAAyB,2BAAA,CAAA,SAC5B,IAAC,CAAA,SAAA,CAAA,gDACmD,IACnDA,EAAAA,IAAC,UAAO,SAAI,MAAA,CAAA,EAAS,6EAAA,CAEvB,CAAA,CAAA,EACF,EACAD,EAAAA,KAAC,MAAI,CAAA,UAAU,4BACb,SAAA,CAAAA,OAACP,EACC,CAAA,SAAA,CAAAO,OAACJ,EACC,CAAA,SAAA,CAAAK,EAAAA,IAACJ,GAAU,SAAM,QAAA,CAAA,EACjBI,EAAAA,IAACP,GAAe,SAGhB,gGAAA,CAAA,CAAA,EACF,EACCO,EAAA,IAAAN,EAAA,CACC,SAACM,EAAA,IAAAC,EAAA,CAAK,GAAG,QAAQ,KAAK,IACpB,SAACD,EAAAA,IAAAT,EAAA,CAAO,SAAgB,kBAAA,CAAA,CAAA,CAC1B,CACF,CAAA,CAAA,EACF,SACCC,EACC,CAAA,SAAA,CAAAO,OAACJ,EACC,CAAA,SAAA,CAAAK,EAAAA,IAACJ,GAAU,SAAO,SAAA,CAAA,EAClBI,EAAAA,IAACP,GAAe,SAGhB,4GAAA,CAAA,CAAA,EACF,EACCO,EAAA,IAAAN,EAAA,CACC,SAACM,EAAA,IAAAC,EAAA,CAAK,GAAG,WAAW,KAAK,IACvB,SAACD,EAAAA,IAAAT,EAAA,CAAO,SAAiB,mBAAA,CAAA,CAAA,CAC3B,CACF,CAAA,CAAA,EACF,SACCC,EACC,CAAA,SAAA,CAAAO,OAACJ,EACC,CAAA,SAAA,CAAAK,EAAAA,IAACJ,GAAU,SAAmB,qBAAA,CAAA,EAC9BI,EAAAA,IAACP,GAAe,SAIhB,2LAAA,CAAA,CAAA,EACF,EACCO,MAAAN,EAAA,CACC,SAACM,EAAAA,IAAAC,EAAA,CAAK,UAAU,eAAe,GAAG,QAAQ,KAAK,IAC7C,SAAAD,MAACT,EAAO,CAAA,SAAA,iBAAc,EACxB,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as s}from"./_virtual___federation_fn_import-CE3p-l_2.js";import{j as e}from"./index.esm-CyH9wtdI.js";import{H as r}from"./index-gE__lQ6b.js";import{N as o}from"./new-model-dialog-uEX7hTid.js";const{useProjectDefinition:a}=await s("@baseplate-dev/project-builder-lib/web"),{Button:t,EmptyDisplay:n}=await s("@baseplate-dev/ui-components"),h=function(){const{definition:i}=a();return i.models.length===0?e.jsx(n,{icon:r,header:"No Models",subtitle:"Create a model to get started",actions:e.jsx(o,{children:e.jsx(t,{children:"New Model"})})}):e.jsxs("div",{className:"max-w-4xl space-y-4 p-4 text-style-prose",children:[e.jsx("h1",{children:"Models"}),e.jsx("p",{children:"Models are the building blocks of your app. They define the data structure of your app."}),e.jsxs("p",{children:["Choose a model to edit from the sidebar or"," ",e.jsx(o,{children:e.jsx(t,{variant:"link",size:"none",children:"create a new model"})}),"."]})]})};export{h as component};
|
|
2
|
+
//# sourceMappingURL=index-CVRvV2mv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CVRvV2mv.js","sources":["../../src/routes/data/models/index.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport { Button, EmptyDisplay } from '@baseplate-dev/ui-components';\nimport { createFileRoute } from '@tanstack/react-router';\nimport { HiDatabase } from 'react-icons/hi';\n\nimport { NewModelDialog } from './-components/new-model-dialog.js';\n\nexport const Route = createFileRoute('/data/models/')({\n component: ModelsIndexPage,\n});\n\nfunction ModelsIndexPage(): React.JSX.Element {\n const { definition } = useProjectDefinition();\n\n if (definition.models.length === 0) {\n return (\n <EmptyDisplay\n icon={HiDatabase}\n header=\"No Models\"\n subtitle=\"Create a model to get started\"\n actions={\n <NewModelDialog>\n <Button>New Model</Button>\n </NewModelDialog>\n }\n />\n );\n }\n\n return (\n <div className=\"max-w-4xl space-y-4 p-4 text-style-prose\">\n <h1>Models</h1>\n <p>\n Models are the building blocks of your app. They define the data\n structure of your app.\n </p>\n <p>\n Choose a model to edit from the sidebar or{' '}\n <NewModelDialog>\n <Button variant=\"link\" size=\"none\">\n create a new model\n </Button>\n </NewModelDialog>\n .\n </p>\n </div>\n );\n}\n"],"names":["useProjectDefinition","importShared","Button","EmptyDisplay","SplitComponent","definition","models","length","jsx","HiDatabase","NewModelDialog","jsxs"],"mappings":"yMAEA,KAAA,CAAA,qBAAAA,CAAA,EAAA,MAAAC,EAAA,wCAAA,EACA,CAAA,OAAAC,EAAA,aAAAC,CAAA,EAAA,MAAAF,EAAA,8BAAA,EAImEG,EAAA,UAMrB,CACtC,KAAA,CAAEC,WAAAA,GAAeL,EAAqB,EAExCK,OAAAA,EAAWC,OAAOC,SAAW,EAE5BC,EAAA,IAAAL,EAAA,CACC,KAAMM,EACN,OAAO,YACP,SAAS,gCACT,cACGC,EACC,CAAA,SAAAF,EAAAA,IAACN,EAAO,CAAA,SAAA,WAAA,CAAS,CACnB,CAAA,EAEF,EAKJS,EAAA,KAAC,MAAI,CAAA,UAAU,2CACb,SAAA,CAAAH,EAAAA,IAAC,MAAG,SAAM,QAAA,CAAA,EACVA,EAAAA,IAAC,KAAC,SAGF,yFAAA,CAAA,SACC,IAAC,CAAA,SAAA,CAAA,6CAC2C,IAC3CA,EAAAA,IAACE,GACC,SAACF,EAAA,IAAAN,EAAA,CAAO,QAAQ,OAAO,KAAK,OAAM,SAAA,oBAAA,CAElC,CACF,CAAA,EAAgB,GAAA,CAElB,CAAA,CAAA,EACF,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as f}from"./_virtual___federation_fn_import-CE3p-l_2.js";import{j as e,u as I,b as ie,e as le,f as Se}from"./index.esm-CyH9wtdI.js";import{s as te,m as q,e as ne,S as $e,n as Ne,a as Fe,r as se}from"./index-gE__lQ6b.js";import{u as g,S as Me,E as Ie}from"./-constants-gwObfy2j.js";import{u as Le}from"./use-model-form-D4qoaVd7.js";import{q as Te,c as w,L as Ee,N as Oe,O as qe,P as Ue,I as ve,K as be,B as Ce}from"./index-BS45dlQs.js";import{i as Pe}from"./inflection-C1nKqrJS.js";import{c as Ae}from"./capitalize-gOJXDbsR.js";const Be=/\p{Lu}?\p{Ll}+|[0-9]+|\p{Lu}+(?!\p{Ll})|\p{Emoji_Presentation}|\p{Extended_Pictographic}|\p{L}+/gu;function Ke(d){return Array.from(d.match(Be)??[])}function M(d){const t=Ke(d);if(t.length===0)return"";const[s,...a]=t;return`${s.toLowerCase()}${a.map(r=>Ae(r)).join("")}`}const{modelScalarFieldEntityType:ae}=await f("@baseplate-dev/project-builder-lib"),{Button:re,ButtonGroup:ze,DropdownMenu:Ve,DropdownMenuContent:ke,DropdownMenuItem:He,DropdownMenuTrigger:_e}=await f("@baseplate-dev/ui-components"),{useMemo:We}=await f("react");function Ge({className:d,appendField:t,setValue:s}){const a=g(n=>n.model.fields.map(l=>l.name)),r=g(n=>n.model.primaryKeyFieldRefs.length),i=We(()=>{const n=[];r||n.push({name:"ID (uuid)",fields:[{name:"id",type:"uuid",options:{genUuid:!0},isPrimaryKey:!0}]});const l=a.includes("createdAt"),m=a.includes("updatedAt");return(!l||!m)&&n.push({name:"Timestamps",fields:[{name:"createdAt",type:"dateTime",options:{defaultToNow:!0}},{name:"updatedAt",type:"dateTime",options:{updatedAt:!0,defaultToNow:!0}}]}),n},[a,r]),o=n=>{for(const{isPrimaryKey:l,...m}of n.fields){const c=ae.generateNewId();a.includes(m.name)||t({id:c,...m}),l&&s("model.primaryKeyFieldRefs",[c],{shouldDirty:!0})}};return e.jsxs(ze,{className:d,children:[e.jsx(re,{variant:"secondary",onClick:()=>{t({id:ae.generateNewId(),name:"",type:"string",isOptional:!0,options:{default:""}})},size:"sm",children:"Add Field"}),e.jsxs(Ve,{children:[e.jsx(_e,{disabled:i.length===0,asChild:!0,children:e.jsx(re,{variant:"secondary",size:"sm",children:e.jsx(Te,{})})}),e.jsx(ke,{children:i.map(n=>e.jsx(He,{onClick:()=>{o(n)},children:n.name},n.name))})]})]})}const{Button:de,DialogClose:Ye,DialogFooter:Xe,MultiComboboxFieldController:Je}=await f("@baseplate-dev/ui-components"),{useId:Qe}=await f("react"),{z:W}=await f("zod"),Ze=W.object({fields:W.array(W.string()).min(1,"At least one primary key is required")});function en({className:d,control:t,onSubmitSuccess:s}){const a=g(c=>c.model.fields),{field:{value:r=[],onChange:i}}=I({name:"model.primaryKeyFieldRefs",control:t}),{control:o,handleSubmit:n}=ie({resolver:te(Ze),values:{fields:r}}),l=n(c=>{i(c.fields),s?.()}),m=Qe();return e.jsxs("form",{className:w("space-y-4",d),onSubmit:c=>(c.stopPropagation(),l(c)),id:m,children:[e.jsx(Je,{control:o,name:"fields",options:a.map(c=>({value:c.id,label:c.name})),placeholder:"Select fields to use as primary keys"}),e.jsxs(Xe,{children:[e.jsx(Ye,{asChild:!0,children:e.jsx(de,{variant:"secondary",children:"Cancel"})}),e.jsx(de,{type:"submit",form:m,children:"Save"})]})]})}const{Dialog:nn,DialogContent:tn,DialogDescription:sn,DialogHeader:on,DialogTitle:ln,DialogTrigger:an,useControlledState:rn}=await f("@baseplate-dev/ui-components");function we({control:d,children:t,asChild:s,open:a,onOpenChange:r}){const[i,o]=rn(a,r,!1);return e.jsxs(nn,{open:i,onOpenChange:o,children:[t&&e.jsx(an,{asChild:s,children:t}),e.jsxs(tn,{children:[e.jsxs(on,{children:[e.jsx(ln,{children:"Primary Keys"}),e.jsx(sn,{children:"Select the fields that will be used as the primary key for this model"})]}),e.jsx(en,{control:d,onSubmitSuccess:()=>{o(!1)}})]})]})}const{BadgeWithIcon:dn}=await f("@baseplate-dev/ui-components"),{useState:cn}=await f("react");function mn({className:d,control:t,autoCollapse:s}){const[a,r]=cn(!1),i=!s||a;return e.jsx(we,{control:t,children:e.jsx(dn,{icon:Ee,variant:"secondary",className:d,onMouseEnter:()=>{r(!0)},onMouseLeave:()=>{r(!1)},"aria-label":"Primary Key",title:"Primary Key",children:i&&"Primary"})})}const{createModelRelationFieldSchema:un,ModelFieldUtils:fn,modelForeignRelationEntityType:pn,modelLocalRelationEntityType:hn,ModelUtils:ce}=await f("@baseplate-dev/project-builder-lib"),{useDefinitionSchema:xn,useProjectDefinition:jn}=await f("@baseplate-dev/project-builder-lib/web"),{Button:G,ComboboxField:gn,ComboboxFieldController:Y,DialogClose:yn,DialogFooter:vn,InputFieldController:me,SelectFieldController:bn,toast:ue}=await f("@baseplate-dev/ui-components"),De=await f("react"),{useId:Cn,useMemo:wn}=De;function Dn(d,t,s){if(!s)return;const a=s.replace(/Id$/,""),r=l=>d.models.find(m=>m.id!==t.id&&l(m))?.id,i=r(l=>l.name.toLowerCase()===a.toLowerCase());if(i)return i;const o=r(l=>l.featureRef===l.featureRef&&l.name.toLowerCase().includes(a.toLowerCase()));return o||r(l=>l.name.toLowerCase().includes(a.toLowerCase()))}function fe(d,t,s,a){const r=(()=>{if(s.name)return s.name;if(s.modelRef){const n=ce.byIdOrThrow(d,s.modelRef);return M(n.name)}})(),i=(()=>{if(!s.modelRef)return;const{model:{fields:n,primaryKeyFieldRefs:l},name:m}=ce.byIdOrThrow(d,s.modelRef),c=n.filter(x=>l.includes(x.id)),p=s.references??[];return c.map((x,h)=>{const D=h===0&&a?a:c.length===1?`${M(m)}Id`:x.name;return{localRef:p[h]?.localRef??t.model.fields.find(y=>y.name===D)?.id,foreignRef:x.id}})})(),o=(()=>{if(!i)return;if(s.foreignRelationName)return s.foreignRelationName;const n=i.every(l=>l.localRef)&&fn.areScalarsUnique(t,i.map(l=>l.localRef));return M(n?t.name:Pe.pluralize(t.name))})();return{name:r??"",foreignRelationName:o??"",references:i??[]}}function Rn({className:d,control:t,onSubmitSuccess:s,relationId:a,defaultFieldName:r}){const{definition:i}=jn(),o=g(u=>u),n=o.name,{fields:l}=o.model,{field:{value:m=[],onChange:c}}=I({name:"model.relations",control:t}),p=i.models.map(u=>({label:u.name,value:u.id})),x=a===void 0?void 0:m.find(u=>u.id===a),h=wn(()=>{if(x)return x;const u=Dn(i,o,r);return{id:hn.generateNewId(),foreignId:pn.generateNewId(),modelRef:u??"",onDelete:"Restrict",onUpdate:"Restrict",...fe(i,o,{modelRef:u},r)}},[x,r,i,o]),D=xn(un),{control:b,handleSubmit:y,setError:H,watch:P,setValue:L}=ie({resolver:te(D),defaultValues:h}),S=P(),$=S.modelRef?i.models.find(u=>u.id===S.modelRef):void 0,T=$?.model.fields,_=l.map(u=>({label:u.name,value:u.id})),A=T?.map(u=>({label:u.name,value:u.id}))??[],j=S.references.some(u=>l.find(C=>C.id===u.localRef)?.isOptional),R=()=>{c(m.filter(u=>u.id!==a)),s?.()},Re=y(u=>{const{id:C}=u;if(l.some(v=>v.name===u.name)||m.some(v=>v.name===u.name&&v.id!==u.id)){H("name",{message:"The relation name cannot be the same as a field/relation name"});return}const O=u.references.map(v=>v.localRef);if(new Set(O).size!==O.length){ue.error("Local fields must be unique");return}const B=u.references.map(v=>v.foreignRef);if(new Set(B).size!==B.length){ue.error("Foreign fields must be unique");return}m.some(v=>v.id===C)?c(m.map(v=>v.id===C?u:v)):c([...m,u]),s?.()}),oe=Cn(),E=!!$;return e.jsxs("form",{className:w("space-y-4",d),onSubmit:u=>(u.stopPropagation(),Re(u)),id:oe,children:[e.jsxs("div",{className:"grid grid-cols-2 gap-x-8 gap-y-2",children:[e.jsx(gn,{options:[{label:n,value:n}],value:n,disabled:!0,label:"Local Model"}),e.jsx(Y,{control:b,name:"modelRef",options:p,label:"Foreign Model",onChange:u=>{if(!u)return;const{foreignRelationName:C,name:O,references:B}=fe(i,o,{...S,modelRef:u},r);C&&L("foreignRelationName",C),O&&L("name",O),L("references",B)}})]}),e.jsxs("div",{className:w("grid grid-cols-2 gap-x-8 gap-y-2",!E&&"pointer-events-none opacity-50"),children:[e.jsx(me,{control:b,disabled:!E,name:"name",label:"Local Relation Name",description:e.jsxs("span",{children:["Name of the relation, e.g. ",M(n),".",e.jsx("strong",{children:$?.name?M($.name):"user"})]})}),e.jsx(me,{control:b,disabled:!E,name:"foreignRelationName",label:"Foreign Relation Name",description:e.jsxs("span",{children:["Name of the relation on the foreign model, e.g."," ",M($?.name??"post"),".",e.jsx("strong",{children:h.foreignRelationName||"user"})]})}),e.jsx("div",{className:"text-sm font-medium",children:"Local Field"}),e.jsx("div",{className:"text-sm font-medium",children:"Foreign Field"}),S.references.map((u,C)=>e.jsxs(De.Fragment,{children:[e.jsx(Y,{disabled:!E,control:b,name:`references.${C}.localRef`,options:_}),e.jsx(Y,{control:b,name:`references.${C}.foreignRef`,options:A,disabled:!0})]},C))]}),e.jsx("div",{className:"grid grid-cols-2 gap-x-8 gap-y-2 border-t pt-4",children:e.jsx(bn,{label:"On Delete",control:b,options:[{label:"Cascade (delete entire local row)",value:"Cascade"},{label:"Restrict (throw error)",value:"Restrict"},...j?[{label:"Set Null (set local field to null)",value:"SetNull"}]:[]],name:"onDelete",description:"What to do when the foreign row is deleted"})}),e.jsx(vn,{children:e.jsxs("div",{className:"flex w-full justify-between",children:[a&&e.jsx(G,{variant:"secondary",onClick:u=>{u.preventDefault(),R()},children:"Delete"}),e.jsxs("div",{className:"flex gap-4",children:[e.jsx(yn,{asChild:!0,children:e.jsx(G,{variant:"secondary",children:"Cancel"})}),e.jsx(G,{type:"submit",form:oe,disabled:!E,children:"Save"})]})]})})]})}const{Dialog:Sn,DialogContent:$n,DialogDescription:Nn,DialogHeader:Fn,DialogTitle:Mn,DialogTrigger:In,useControlledState:Ln}=await f("@baseplate-dev/ui-components");function V({control:d,children:t,asChild:s,open:a,onOpenChange:r,relationId:i,defaultFieldName:o}){const[n,l]=Ln(a,r,!1);return e.jsxs(Sn,{open:n,onOpenChange:l,children:[t&&e.jsx(In,{asChild:s,children:t}),e.jsxs($n,{width:"lg",children:[e.jsxs(Fn,{children:[e.jsx(Mn,{children:i?"Edit Relation":"Create Relation"}),e.jsx(Nn,{children:"Set up the relation between this model and another model"})]}),e.jsx(Rn,{control:d,onSubmitSuccess:()=>{l(!1)},relationId:i,defaultFieldName:o})]})]})}const{useProjectDefinition:Tn}=await f("@baseplate-dev/project-builder-lib/web"),{BadgeWithIcon:En}=await f("@baseplate-dev/ui-components"),{useState:On}=await f("react");function qn({className:d,control:t,relation:s,autoCollapse:a}){const{definitionContainer:r}=Tn(),[i,o]=On(!1),n=!a||i;return e.jsx(V,{control:t,relationId:s.id,children:e.jsx(En,{icon:Oe,variant:"secondary",className:w("max-w-[100px]",d),onMouseEnter:()=>{o(!0)},onMouseLeave:()=>{o(!1)},"aria-label":"Relation",title:"Relation",children:n&&`${r.nameFromId(s.modelRef)} ${s.references.length>1?`(${s.references.length})`:""}`})})}const{modelUniqueConstraintEntityType:Un}=await f("@baseplate-dev/project-builder-lib"),{Button:X,DialogClose:Pn,DialogFooter:An,MultiComboboxFieldController:Bn}=await f("@baseplate-dev/ui-components"),{useId:Kn}=await f("react"),{z:K}=await f("zod"),zn=K.object({id:K.string().optional(),fields:K.array(K.string()).min(1,"At least one field is required")});function Vn({className:d,control:t,onSubmitSuccess:s,constraintId:a}){const r=g(h=>h.model.fields),{field:{value:i=[],onChange:o}}=I({name:"model.uniqueConstraints",control:t}),n=a===void 0?void 0:i.find(h=>h.id===a),{control:l,handleSubmit:m}=ie({resolver:te(zn),values:n?{id:n.id,fields:n.fields.map(h=>h.fieldRef)}:{fields:[]}}),c=()=>{o(i.filter(h=>h.id!==a)),s?.()},p=m(h=>{const D={id:h.id??Un.generateNewId(),fields:h.fields.map(y=>({fieldRef:y}))},{id:b}=D;i.some(y=>y.id===b)?o(i.map(y=>y.id===b?D:y)):o([...i,D]),s?.()}),x=Kn();return e.jsxs("form",{className:w("space-y-4",d),onSubmit:h=>(h.stopPropagation(),p(h)),id:x,children:[e.jsx(Bn,{control:l,name:"fields",options:r.map(h=>({value:h.id,label:h.name})),placeholder:"Select fields to use as primary keys"}),e.jsx(An,{children:e.jsxs("div",{className:"flex w-full justify-between",children:[a&&e.jsx(X,{variant:"secondary",onClick:h=>{h.preventDefault(),c()},children:"Delete"}),e.jsxs("div",{className:"flex gap-4",children:[e.jsx(Pn,{asChild:!0,children:e.jsx(X,{variant:"secondary",children:"Cancel"})}),e.jsx(X,{type:"submit",form:x,children:"Save"})]})]})})]})}const{Dialog:kn,DialogContent:Hn,DialogDescription:_n,DialogHeader:Wn,DialogTitle:Gn,DialogTrigger:Yn,useControlledState:Xn}=await f("@baseplate-dev/ui-components");function k({control:d,children:t,asChild:s,open:a,onOpenChange:r,constraintId:i}){const[o,n]=Xn(a,r,!1);return e.jsxs(kn,{open:o,onOpenChange:n,children:[t&&e.jsx(Yn,{asChild:s,children:t}),e.jsxs(Hn,{children:[e.jsxs(Wn,{children:[e.jsx(Gn,{children:"Unique Constraint"}),e.jsx(_n,{children:"Select the fields that will be part of this unique constraint."})]}),e.jsx(Vn,{control:d,onSubmitSuccess:()=>{n(!1)},constraintId:i})]})]})}const{BadgeWithIcon:Jn}=await f("@baseplate-dev/ui-components"),{useState:Qn}=await f("react");function Zn({className:d,control:t,constraintId:s,autoCollapse:a}){const[r,i]=Qn(!1),o=!a||r,n=g(l=>l.model.uniqueConstraints?.find(m=>m.id===s)?.fields.length??0);return e.jsx(k,{control:t,constraintId:s,children:e.jsx(Jn,{variant:"secondary",icon:qe,className:w("",d),onMouseEnter:()=>{i(!0)},onMouseLeave:()=>{i(!1)},"aria-label":"Unique Constraint",title:"Unique Constraint",children:o&&`Unique ${n>1?`(${n})`:""}`})})}function ei({className:d,control:t,idx:s}){const a=g(c=>c.model.fields[s]),r=g(c=>c.model.primaryKeyFieldRefs.includes(a.id)),i=g(c=>c.model.uniqueConstraints?.filter(p=>p.fields.some(x=>x.fieldRef===a.id)).map(p=>p.id)??[]),o=g(({model:c})=>{const p=c.fields[s];return c.relations?.filter(x=>x.references.some(h=>h.localRef===p.id))??[]}),l=(r?1:0)+i.length+o.length>2,m=[r&&e.jsx(mn,{control:t,autoCollapse:l},"primary"),...i.map(c=>e.jsx(Zn,{control:t,constraintId:c,autoCollapse:l},c)),...o.map(c=>e.jsx(qn,{control:t,relation:c,autoCollapse:l},c.id))];return e.jsx("div",{className:w("flex gap-4",d),children:m})}const{EnumUtils:ni}=await f("@baseplate-dev/project-builder-lib"),{useProjectDefinition:ii}=await f("@baseplate-dev/project-builder-lib/web"),{Button:N,ComboboxField:ti,DropdownMenu:pe,DropdownMenuContent:he,DropdownMenuGroup:xe,DropdownMenuItem:J,DropdownMenuTrigger:je,InputField:ge,InputFieldController:Q,SelectFieldController:si}=await f("@baseplate-dev/ui-components");function oi({control:d,idx:t,setValue:s}){const{definition:a}=ii(),r=le({control:d,name:`model.fields.${t}.type`}),{field:{value:i,onChange:o}}=I({name:`model.fields.${t}.options`,control:d}),n=le({control:d,name:`model.fields.${t}.options.default`});if(r==="boolean")return e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(si,{control:d,className:"flex-1",name:`model.fields.${t}.options.default`,options:[{label:"True",value:"true"},{label:"False",value:"false"}],placeholder:"NULL"}),n&&e.jsx(N,{title:"Reset",onClick:()=>{s(`model.fields.${t}.options.default`,"",{shouldDirty:!0})},variant:"ghost",size:"icon",children:e.jsx(q,{})})]});if(["string","int","float"].includes(r))return e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(Q,{control:d,placeholder:"NULL",name:`model.fields.${t}.options.default`,className:"flex-1"}),n&&e.jsx(N,{title:"Reset",onClick:()=>{s(`model.fields.${t}.options.default`,void 0,{shouldDirty:!0})},variant:"ghost",size:"icon",children:e.jsx(q,{})})]});if(r==="uuid")return i?.genUuid?e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(ge,{disabled:!0,value:"Random UUID v4",className:"flex-1"}),e.jsx(N,{title:"Reset",onClick:()=>{o({...i,genUuid:!1})},variant:"ghost",size:"icon",children:e.jsx(q,{})})]}):e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(Q,{control:d,placeholder:"NULL",name:`model.fields.${t}.options.default`,className:"flex-1"}),e.jsxs(pe,{children:[e.jsx(je,{asChild:!0,children:e.jsx(N,{title:"Options",variant:"ghost",size:"icon",children:e.jsx(ne,{})})}),e.jsx(he,{children:e.jsx(xe,{children:e.jsx(J,{onSelect:()=>{o({...i,genUuid:!0})},children:"Random UUID v4"})})})]})]});if(r==="dateTime"||r==="date"){const{defaultToNow:l,updatedAt:m}=i??{};return l??m?e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(ge,{disabled:!0,value:m?"Last Updated":"Now",className:"flex-1"}),e.jsx(N,{title:"Reset",onClick:()=>{o({...i,defaultToNow:!1,updatedAt:!1})},variant:"ghost",size:"icon",children:e.jsx(q,{})})]}):e.jsxs("div",{className:"flex items-center space-x-1",children:[e.jsx(Q,{placeholder:"NULL",control:d,name:`model.fields.${t}.options.default`,className:"flex-1"}),e.jsxs(pe,{children:[e.jsx(je,{asChild:!0,children:e.jsx(N,{title:"Options",variant:"ghost",size:"icon",children:e.jsx(ne,{})})}),e.jsx(he,{children:e.jsxs(xe,{children:[e.jsx(J,{onSelect:()=>{o({...i,defaultToNow:!0,updatedAt:!1})},children:"Now"}),e.jsx(J,{onSelect:()=>{o({...i,defaultToNow:!0,updatedAt:!0})},children:"Last Updated At"})]})})]})]})}if(r==="enum"&&i?.enumRef){const m=ni.byIdOrThrow(a,i.enumRef).values.map(c=>({label:c.friendlyName,value:c.id}));return e.jsxs("div",{className:"flex items-center space-x-1",children:[e.jsx(ti,{placeholder:"NULL",value:i.defaultEnumValueRef??null,onChange:c=>{o({...i,defaultEnumValueRef:c||void 0})},options:m,className:"flex-1"}),i.defaultEnumValueRef&&e.jsx(N,{title:"Reset",onClick:()=>{o({...i,defaultEnumValueRef:""})},variant:"ghost",size:"icon",children:e.jsx(q,{})})]})}return e.jsx("div",{})}const{SCALAR_FIELD_TYPES:li}=await f("@baseplate-dev/project-builder-lib"),{useProjectDefinition:ai}=await f("@baseplate-dev/project-builder-lib/web"),{ComboboxField:ri}=await f("@baseplate-dev/ui-components");function di({control:d,idx:t}){const{definition:s}=ai(),a=(s.enums??[]).map(p=>({label:p.name,value:`enum-${p.id}`,description:"Enum type"})),r=[...li.filter(p=>p!=="enum").map(p=>Me[p]),...a],{field:{value:i,onChange:o}}=I({name:`model.fields.${t}.type`,control:d}),{field:{value:n,onChange:l}}=I({name:`model.fields.${t}.options`,control:d}),m=p=>{if(p?.startsWith("enum-")){const x=p.replace("enum-","");l({enumRef:x}),o("enum")}else o(p)},c=n?.enumRef;return e.jsx("div",{className:"space-y-2",children:e.jsx(ri,{value:i==="enum"&&c?`enum-${c}`:i,onChange:m,options:r,renderItemLabel:p=>e.jsxs("div",{className:"flex flex-col",children:[e.jsx("div",{children:p.label}),e.jsx("div",{className:"text-xs text-muted-foreground",children:p.description})]})})})}const{modelUniqueConstraintEntityType:ci}=await f("@baseplate-dev/project-builder-lib"),{Button:ye,DropdownMenu:mi,DropdownMenuContent:ui,DropdownMenuGroup:fi,DropdownMenuItem:F,DropdownMenuTrigger:pi,InputFieldController:hi,SwitchFieldController:xi,toast:ji}=await f("@baseplate-dev/ui-components"),{useState:U}=await f("react");function gi({className:d,control:t,idx:s,setValue:a,onRemove:r}){const i=g(j=>j.model.fields[s]),o=g(j=>j.model.relations),n=g(j=>j.model),l=n.primaryKeyFieldRefs.includes(i.id),m=n.primaryKeyFieldRefs.length>1,c=n.uniqueConstraints??[],p=c.filter(j=>j.fields.some(R=>R.fieldRef===i.id)),x=o?.filter(j=>j.references.some(R=>R.localRef===i.id))??[],h=(()=>{if(x.length>0)return`Unable to remove field as it is being used in relations ${x.map(j=>j.name).join(", ")}`;if(l&&m)return"Unable to remove field as it is being used in in the primary key";if(n.uniqueConstraints?.some(j=>j.fields.some(R=>R.fieldRef===i.id)))return"Unable to remove field as it is being used in in a unique constraint"})();function D(){if(h){ji.error(h);return}r(s),l&&!m&&a("model.primaryKeyFieldRefs",[],{shouldDirty:!0})}const[b,y]=U(!1),[H,P]=U(!1),[L,S]=U(),[$,T]=U(!1),[_,A]=U();return e.jsxs("div",{className:w("items-center",d),children:[e.jsx("div",{children:e.jsx(hi,{control:t,name:`model.fields.${s}.name`})}),e.jsx("div",{children:e.jsx(di,{control:t,idx:s})}),e.jsx("div",{children:e.jsx(xi,{control:t,name:`model.fields.${s}.isOptional`})}),e.jsx("div",{className:"mr-4",children:e.jsx(oi,{control:t,idx:s,setValue:a})}),e.jsx("div",{children:e.jsx(ei,{control:t,idx:s})}),e.jsx("div",{children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(mi,{children:[e.jsx(pi,{asChild:!0,children:e.jsx(ye,{variant:"ghost",size:"icon",children:e.jsx(ne,{})})}),e.jsx(ui,{children:e.jsxs(fi,{children:[x.length===0&&e.jsx(F,{onSelect:()=>{T(!0),A(void 0)},children:"Add Relation"}),x.length>0&&x.map(j=>e.jsxs(F,{onSelect:()=>{T(!0),A(j.id)},children:["Edit Relation ",x.length>1&&j.name]},j.id)),!m&&!l&&e.jsx(F,{onSelect:()=>{a("model.primaryKeyFieldRefs",[i.id],{shouldDirty:!0})},children:"Set as Primary Key"}),l&&e.jsx(F,{onSelect:()=>{y(!0)},children:"Edit Primary Key"}),p.length===0&&(m||!l)&&e.jsx(F,{onSelect:()=>{a("model.uniqueConstraints",[...c,{id:ci.generateNewId(),fields:[{fieldRef:i.id}]}],{shouldDirty:!0})},children:"Make Unique"}),p.length>0&&p.map((j,R)=>e.jsxs(F,{onSelect:()=>{S(j.id),P(!0)},children:["Edit Unique Constraint"," ",p.length>1&&R+1]},j.id))]})})]}),e.jsx(we,{control:t,open:b,onOpenChange:y}),e.jsx(k,{control:t,open:H,onOpenChange:P,constraintId:L}),e.jsx(V,{control:t,open:$,onOpenChange:T,relationId:_,defaultFieldName:i.name}),e.jsx(ye,{variant:"ghost",onClick:()=>{D()},size:"icon",children:e.jsx(Ue,{})})]})})]})}function yi({className:d,control:t,setValue:s}){const{fields:a,remove:r,append:i,move:o}=Se({control:t,name:"model.fields"}),n="grid grid-cols-[repeat(2,minmax(130px,1fr))_60px_minmax(130px,1fr)_minmax(100px,1fr)_80px] gap-3",l=a.map((m,c)=>({id:m.id,element:e.jsx(gi,{className:n,control:t,setValue:s,idx:c,onRemove:r},m.id)}));return e.jsxs("div",{className:w("space-y-4",d),children:[a.length===0?e.jsx("p",{className:"pt-4 text-style-muted",children:"Add some fields to get started"}):e.jsxs("div",{className:"flex w-full flex-col gap-2 bg-white",children:[e.jsxs("div",{className:w(n,"sticky -top-0 z-10 bg-white py-2 text-sm font-semibold","pl-12"),children:[e.jsx("div",{children:"Name"}),e.jsx("div",{children:"Type"}),e.jsx("div",{children:"Optional"}),e.jsx("div",{children:"Default Value"}),e.jsx("div",{className:"sr-only",children:"Badges"}),e.jsx("div",{className:"sr-only",children:"Actions"})]}),e.jsx($e,{listItems:l,sortItems:o})]}),e.jsx(Ge,{appendField:i,setValue:s})]})}const{useProjectDefinition:vi}=await f("@baseplate-dev/project-builder-lib/web"),{Button:Z,RecordView:bi,RecordViewActions:Ci,RecordViewItem:z,RecordViewItemList:wi,SectionListSection:Di,SectionListSectionContent:Ri,SectionListSectionDescription:Si,SectionListSectionHeader:$i,SectionListSectionTitle:Ni,useConfirmDialog:Fi}=await f("@baseplate-dev/ui-components");function Mi({control:d,setValue:t}){const{requestConfirm:s}=Fi(),{definitionContainer:a}=vi(),r=g(({model:n})=>n.relations??[]),i=g(({model:n})=>Object.fromEntries(n.fields.map(l=>[l.id,l.name])));function o(n){const l=r.find(m=>m.id===n);s({title:"Delete Relation",content:`Are you sure you want to delete the relation "${l?.name??"<invalid>"}"?`,onConfirm:()=>{t("model.relations",r.filter(m=>m.id!==n))}})}return e.jsxs(Di,{children:[e.jsxs($i,{children:[e.jsx(Ni,{children:"Relations"}),e.jsx(Si,{children:"Define relations to enforce uniqueness on one or more fields."})]}),e.jsxs(Ri,{className:"space-y-4",children:[r.map(n=>e.jsxs(bi,{children:[e.jsxs(wi,{children:[e.jsx(z,{title:"Name",children:n.name}),e.jsx(z,{title:"Local Field",children:n.references.map(l=>i[l.localRef]).join(", ")}),e.jsx(z,{title:"Foreign Model",children:a.nameFromId(n.modelRef)}),e.jsx(z,{title:"On Delete",children:n.onDelete})]}),e.jsxs(Ci,{children:[e.jsx(V,{relationId:n.id,control:d,asChild:!0,children:e.jsx(Z,{variant:"ghost",size:"icon",title:"Edit",children:e.jsx(ve,{})})}),e.jsx(Z,{variant:"ghostDestructive",size:"icon",title:"Delete",onClick:()=>{o(n.id)},children:e.jsx(be,{})})]})]},n.id)),e.jsx(V,{control:d,asChild:!0,children:e.jsxs(Z,{variant:"secondary",size:"sm",children:[e.jsx(Ce,{}),"Add Relation"]})})]})]})}const{Button:ee,RecordView:Ii,RecordViewActions:Li,RecordViewItem:Ti,RecordViewItemList:Ei,SectionListSection:Oi,SectionListSectionContent:qi,SectionListSectionDescription:Ui,SectionListSectionHeader:Pi,SectionListSectionTitle:Ai,useConfirmDialog:Bi}=await f("@baseplate-dev/ui-components");function Ki({control:d,setValue:t}){const{requestConfirm:s}=Bi(),a=g(({model:o})=>o.uniqueConstraints??[]),r=g(({model:o})=>Object.fromEntries(o.fields.map(n=>[n.id,n.name])));function i(o){s({title:"Delete Unique Constraint",content:"Are you sure you want to delete this unique constraint?",onConfirm:()=>{t("model.uniqueConstraints",a.filter(n=>n.id!==o))}})}return e.jsxs(Oi,{children:[e.jsxs(Pi,{children:[e.jsx(Ai,{children:"Unique Constraints"}),e.jsx(Ui,{children:"Define unique constraints to enforce uniqueness on one or more fields."})]}),e.jsxs(qi,{className:"space-y-4",children:[a.map(o=>e.jsxs(Ii,{children:[e.jsx(Ei,{children:e.jsx(Ti,{title:"Fields",children:o.fields.map(n=>r[n.fieldRef]??"<invalid>").join(", ")})}),e.jsxs(Li,{children:[e.jsx(k,{constraintId:o.id,control:d,asChild:!0,children:e.jsx(ee,{variant:"ghost",size:"icon",title:"Edit",children:e.jsx(ve,{})})}),e.jsx(ee,{variant:"ghostDestructive",size:"icon",title:"Delete",onClick:()=>{i(o.id)},children:e.jsx(be,{})})]})]},o.id)),e.jsx(k,{control:d,asChild:!0,children:e.jsxs(ee,{variant:"secondary",size:"sm",children:[e.jsx(Ce,{}),"Add Unique Constraint"]})})]})]})}const{modelEntityType:zi,modelLocalRelationEntityType:Vi,modelScalarFieldEntityType:ki}=await f("@baseplate-dev/project-builder-lib"),{useBlockUnsavedChangesNavigate:Hi}=await f("@baseplate-dev/project-builder-lib/web"),{FormActionBar:_i,SectionList:Wi}=await f("@baseplate-dev/ui-components");se(zi,"/data/models/edit/{key}");se(ki,"/data/models/edit/{parentKey}");se(Vi,"/data/models/edit/{parentKey}");const it=function(){const{key:t}=Ne.useParams(),{form:s,onSubmit:a,defaultValues:r}=Le({omit:["name","featureRef"],modelKey:t}),{control:i,watch:o,getValues:n,setValue:l,reset:m}=s;return Hi({control:i,reset:m,onSubmit:a}),e.jsx(Fe,{children:e.jsx(Ie,{initialModel:r,getValues:n,watch:o,children:e.jsxs("form",{onSubmit:a,className:"max-w-7xl min-w-[700px] flex-1 space-y-4 px-4 pb-4",children:[e.jsx(yi,{control:i,setValue:l}),e.jsxs(Wi,{children:[e.jsx(Mi,{control:i,setValue:l}),e.jsx(Ki,{control:i,setValue:l})]}),e.jsx(_i,{form:s})]})})})};export{it as component};
|
|
2
|
+
//# sourceMappingURL=index-CwavzuOe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CwavzuOe.js","sources":["../../../../node_modules/.pnpm/es-toolkit@1.31.0/node_modules/es-toolkit/dist/string/words.mjs","../../../../node_modules/.pnpm/es-toolkit@1.31.0/node_modules/es-toolkit/dist/string/camelCase.mjs","../../src/routes/data/models/edit.$key/-components/fields/model-add-field-button.tsx","../../src/routes/data/models/edit.$key/-components/fields/primary-key/model-primary-key-form.tsx","../../src/routes/data/models/edit.$key/-components/fields/primary-key/model-primary-key-dialog.tsx","../../src/routes/data/models/edit.$key/-components/fields/primary-key/model-primary-key-badge.tsx","../../src/routes/data/models/edit.$key/-components/fields/relations/model-relation-form.tsx","../../src/routes/data/models/edit.$key/-components/fields/relations/model-relation-dialog.tsx","../../src/routes/data/models/edit.$key/-components/fields/relations/model-relation-badge.tsx","../../src/routes/data/models/edit.$key/-components/fields/unique-constraints/model-unique-constraint-form.tsx","../../src/routes/data/models/edit.$key/-components/fields/unique-constraints/model-unique-constraint-dialog.tsx","../../src/routes/data/models/edit.$key/-components/fields/unique-constraints/model-unique-constraint-badge.tsx","../../src/routes/data/models/edit.$key/-components/fields/badges/model-field-badges.tsx","../../src/routes/data/models/edit.$key/-components/fields/model-field-default-value-input.tsx","../../src/routes/data/models/edit.$key/-components/fields/model-field-type-input.tsx","../../src/routes/data/models/edit.$key/-components/fields/model-field-form.tsx","../../src/routes/data/models/edit.$key/-components/fields/model-fields-form.tsx","../../src/routes/data/models/edit.$key/-components/model-relations-section.tsx","../../src/routes/data/models/edit.$key/-components/model-unique-constraints-section.tsx","../../src/routes/data/models/edit.$key/index.tsx?tsr-split=component"],"sourcesContent":["const CASE_SPLIT_PATTERN = /\\p{Lu}?\\p{Ll}+|[0-9]+|\\p{Lu}+(?!\\p{Ll})|\\p{Emoji_Presentation}|\\p{Extended_Pictographic}|\\p{L}+/gu;\nfunction words(str) {\n return Array.from(str.match(CASE_SPLIT_PATTERN) ?? []);\n}\n\nexport { CASE_SPLIT_PATTERN, words };\n","import { capitalize } from './capitalize.mjs';\nimport { words } from './words.mjs';\n\nfunction camelCase(str) {\n const words$1 = words(str);\n if (words$1.length === 0) {\n return '';\n }\n const [first, ...rest] = words$1;\n return `${first.toLowerCase()}${rest.map(word => capitalize(word)).join('')}`;\n}\n\nexport { camelCase };\n","import type {\n ModelConfigInput,\n ModelScalarFieldConfig,\n ModelScalarFieldConfigInput,\n} from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { UseFieldArrayAppend, UseFormSetValue } from 'react-hook-form';\n\nimport { modelScalarFieldEntityType } from '@baseplate-dev/project-builder-lib';\nimport {\n Button,\n ButtonGroup,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@baseplate-dev/ui-components';\nimport { useMemo } from 'react';\nimport { MdExpandMore } from 'react-icons/md';\n\nimport { useEditedModelConfig } from '../../../-hooks/use-edited-model-config.js';\n\ninterface ModelAddFieldButtonProps {\n className?: string;\n appendField: UseFieldArrayAppend<ModelConfigInput, 'model.fields'>;\n setValue: UseFormSetValue<ModelConfigInput>;\n}\n\ninterface AutoAddField {\n name: string;\n fields: (Omit<ModelScalarFieldConfigInput, 'id'> & {\n isPrimaryKey?: boolean;\n })[];\n}\n\nexport function ModelAddFieldButton({\n className,\n appendField,\n setValue,\n}: ModelAddFieldButtonProps): React.JSX.Element {\n const fieldNames = useEditedModelConfig((model) =>\n model.model.fields.map((f) => f.name),\n );\n const primaryKeyFieldLength = useEditedModelConfig(\n (model) => model.model.primaryKeyFieldRefs.length,\n );\n const availableAutoFields = useMemo(() => {\n const autoFields: AutoAddField[] = [];\n if (!primaryKeyFieldLength) {\n autoFields.push({\n name: 'ID (uuid)',\n fields: [\n {\n name: 'id',\n type: 'uuid',\n options: {\n genUuid: true,\n },\n isPrimaryKey: true,\n },\n ],\n });\n }\n const hasCreatedAt = fieldNames.includes('createdAt');\n const hasUpdatedAt = fieldNames.includes('updatedAt');\n if (!hasCreatedAt || !hasUpdatedAt) {\n autoFields.push({\n name: 'Timestamps',\n fields: [\n {\n name: 'createdAt',\n type: 'dateTime',\n options: {\n defaultToNow: true,\n },\n },\n {\n name: 'updatedAt',\n type: 'dateTime',\n options: {\n updatedAt: true,\n defaultToNow: true,\n },\n },\n ],\n });\n }\n return autoFields;\n }, [fieldNames, primaryKeyFieldLength]);\n\n const applyAutoField = (autoField: AutoAddField): void => {\n for (const { isPrimaryKey, ...field } of autoField.fields) {\n const fieldId = modelScalarFieldEntityType.generateNewId();\n if (!fieldNames.includes(field.name)) {\n appendField({\n id: fieldId,\n ...field,\n });\n }\n if (isPrimaryKey) {\n setValue('model.primaryKeyFieldRefs', [fieldId], { shouldDirty: true });\n }\n }\n };\n return (\n <ButtonGroup className={className}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n appendField({\n id: modelScalarFieldEntityType.generateNewId(),\n name: '',\n type: 'string',\n isOptional: true,\n options: {\n default: '',\n },\n } satisfies ModelScalarFieldConfig);\n }}\n size=\"sm\"\n >\n Add Field\n </Button>\n <DropdownMenu>\n <DropdownMenuTrigger\n disabled={availableAutoFields.length === 0}\n asChild\n >\n <Button variant=\"secondary\" size=\"sm\">\n <MdExpandMore />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n {availableAutoFields.map((field) => (\n <DropdownMenuItem\n key={field.name}\n onClick={() => {\n applyAutoField(field);\n }}\n >\n {field.name}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </ButtonGroup>\n );\n}\n","import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport {\n Button,\n DialogClose,\n DialogFooter,\n MultiComboboxFieldController,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { clsx } from 'clsx';\nimport { useId } from 'react';\nimport { useController, useForm } from 'react-hook-form';\nimport { z } from 'zod';\n\nimport { useEditedModelConfig } from '../../../../-hooks/use-edited-model-config.js';\n\ninterface ModelPrimaryKeyFormProps {\n className?: string;\n control: Control<ModelConfigInput>;\n onSubmitSuccess?: () => void;\n}\n\nconst primaryKeychema = z.object({\n fields: z.array(z.string()).min(1, 'At least one primary key is required'),\n});\n\ntype FormValues = z.infer<typeof primaryKeychema>;\n\nexport function ModelPrimaryKeyForm({\n className,\n control: modelControl,\n onSubmitSuccess,\n}: ModelPrimaryKeyFormProps): React.JSX.Element {\n const fields = useEditedModelConfig((model) => model.model.fields);\n const {\n field: { value: modelValue = [], onChange: onModelChange },\n } = useController({\n name: 'model.primaryKeyFieldRefs',\n control: modelControl,\n });\n\n const { control, handleSubmit } = useForm<FormValues>({\n resolver: zodResolver(primaryKeychema),\n values: { fields: modelValue },\n });\n\n const onSubmit = handleSubmit((data) => {\n onModelChange(data.fields);\n onSubmitSuccess?.();\n });\n\n const formId = useId();\n\n return (\n <form\n className={clsx('space-y-4', className)}\n onSubmit={(e) => {\n e.stopPropagation();\n return onSubmit(e);\n }}\n id={formId}\n >\n <MultiComboboxFieldController\n control={control}\n name=\"fields\"\n options={fields.map((f) => ({ value: f.id, label: f.name }))}\n placeholder=\"Select fields to use as primary keys\"\n />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\" form={formId}>\n Save\n </Button>\n </DialogFooter>\n </form>\n );\n}\n","import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n useControlledState,\n} from '@baseplate-dev/ui-components';\n\nimport { ModelPrimaryKeyForm } from './model-primary-key-form.js';\n\ninterface ModelPrimaryKeyDialogProps {\n control: Control<ModelConfigInput>;\n asChild?: boolean;\n open?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function ModelPrimaryKeyDialog({\n control,\n children,\n asChild,\n open,\n onOpenChange,\n}: ModelPrimaryKeyDialogProps): React.JSX.Element {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n {children && <DialogTrigger asChild={asChild}>{children}</DialogTrigger>}\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Primary Keys</DialogTitle>\n <DialogDescription>\n Select the fields that will be used as the primary key for this\n model\n </DialogDescription>\n </DialogHeader>\n <ModelPrimaryKeyForm\n control={control}\n onSubmitSuccess={() => {\n setIsOpen(false);\n }}\n />\n </DialogContent>\n </Dialog>\n );\n}\n","import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport { BadgeWithIcon } from '@baseplate-dev/ui-components';\nimport { useState } from 'react';\nimport { MdKey } from 'react-icons/md';\n\nimport { ModelPrimaryKeyDialog } from './model-primary-key-dialog.js';\n\ninterface ModelPrimaryKeyBadgeProps {\n className?: string;\n control: Control<ModelConfigInput>;\n autoCollapse?: boolean;\n}\n\nexport function ModelPrimaryKeyBadge({\n className,\n control,\n autoCollapse,\n}: ModelPrimaryKeyBadgeProps): React.JSX.Element {\n const [isHovered, setIsHovered] = useState(false);\n const shouldShowText = !autoCollapse || isHovered;\n return (\n <ModelPrimaryKeyDialog control={control}>\n <BadgeWithIcon\n icon={MdKey}\n variant=\"secondary\"\n className={className}\n onMouseEnter={() => {\n setIsHovered(true);\n }}\n onMouseLeave={() => {\n setIsHovered(false);\n }}\n aria-label=\"Primary Key\"\n title=\"Primary Key\"\n >\n {shouldShowText && 'Primary'}\n </BadgeWithIcon>\n </ModelPrimaryKeyDialog>\n );\n}\n","import type {\n ModelConfig,\n ModelConfigInput,\n ModelRelationFieldConfig,\n ModelRelationFieldConfigInput,\n ProjectDefinition,\n} from '@baseplate-dev/project-builder-lib';\nimport type { Control } from 'react-hook-form';\n\nimport {\n createModelRelationFieldSchema,\n ModelFieldUtils,\n modelForeignRelationEntityType,\n modelLocalRelationEntityType,\n ModelUtils,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n useDefinitionSchema,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n ComboboxField,\n ComboboxFieldController,\n DialogClose,\n DialogFooter,\n InputFieldController,\n SelectFieldController,\n toast,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { clsx } from 'clsx';\nimport { camelCase } from 'es-toolkit';\nimport { pluralize } from 'inflection';\nimport React, { useId, useMemo } from 'react';\nimport { useController, useForm } from 'react-hook-form';\n\nimport { useEditedModelConfig } from '../../../../-hooks/use-edited-model-config.js';\n\ninterface ModelRelationFormProps {\n className?: string;\n control: Control<ModelConfigInput>;\n onSubmitSuccess?: () => void;\n relationId?: string;\n defaultFieldName?: string;\n}\n\n/**\n * Tries to guess the model type from the field name\n */\nfunction guessModelTypeFromFieldName(\n definition: ProjectDefinition,\n editedModel: ModelConfigInput,\n fieldName: string | undefined,\n): string | undefined {\n if (!fieldName) return;\n\n const name = fieldName.replace(/Id$/, '');\n\n const tryFindModel = (\n condition: (m: ModelConfig) => boolean,\n ): string | undefined =>\n definition.models.find((m) => m.id !== editedModel.id && condition(m))?.id;\n\n // try to find a model with the exact name first\n const modelWithName = tryFindModel(\n (m) => m.name.toLowerCase() === name.toLowerCase(),\n );\n if (modelWithName) return modelWithName;\n\n // try to find a model with the same feature and a similar name\n const modelWithFeature = tryFindModel(\n (m) =>\n m.featureRef === m.featureRef &&\n m.name.toLowerCase().includes(name.toLowerCase()),\n );\n if (modelWithFeature) return modelWithFeature;\n\n // try to find a model with a similar name\n const modelWithSimilarName = tryFindModel((m) =>\n m.name.toLowerCase().includes(name.toLowerCase()),\n );\n return modelWithSimilarName;\n}\n\n/**\n * Tries to guess the default values for a relation field based on the model\n */\nfunction getRelationDefaultsFromModel(\n definition: ProjectDefinition,\n editedModel: ModelConfigInput,\n editedRelation: Partial<ModelRelationFieldConfigInput>,\n defaultFieldName?: string,\n): Pick<\n ModelRelationFieldConfig,\n 'foreignRelationName' | 'name' | 'references'\n> {\n // default the name to the local field name if it ends with Id\n const name = (() => {\n if (editedRelation.name) return editedRelation.name;\n if (editedRelation.modelRef) {\n const model = ModelUtils.byIdOrThrow(definition, editedRelation.modelRef);\n return camelCase(model.name);\n }\n return;\n })();\n\n const references = (() => {\n if (!editedRelation.modelRef) return;\n const {\n model: { fields, primaryKeyFieldRefs },\n name: foreignName,\n } = ModelUtils.byIdOrThrow(definition, editedRelation.modelRef);\n const primaryKeys = fields.filter((f) =>\n primaryKeyFieldRefs.includes(f.id),\n );\n const existingReferences = editedRelation.references ?? [];\n return primaryKeys.map((primaryKey, i) => {\n const bestGuessLocalName = (() => {\n if (i === 0 && defaultFieldName) return defaultFieldName;\n if (primaryKeys.length === 1) return `${camelCase(foreignName)}Id`;\n return primaryKey.name;\n })();\n const bestGuessLocal =\n existingReferences[i]?.localRef ??\n editedModel.model.fields.find((f) => f.name === bestGuessLocalName)?.id;\n return {\n localRef: bestGuessLocal,\n foreignRef: primaryKey.id,\n };\n });\n })();\n\n const foreignRelationName = (() => {\n if (!references) return;\n if (editedRelation.foreignRelationName) {\n return editedRelation.foreignRelationName;\n }\n const isOneToOne =\n references.every((ref) => ref.localRef) &&\n ModelFieldUtils.areScalarsUnique(\n editedModel,\n references.map((r) => r.localRef),\n );\n return camelCase(\n isOneToOne ? editedModel.name : pluralize(editedModel.name),\n );\n })();\n\n return {\n name: name ?? '',\n foreignRelationName: foreignRelationName ?? '',\n references: references ?? [],\n };\n}\n\nexport function ModelRelationForm({\n className,\n control: modelControl,\n onSubmitSuccess,\n relationId,\n defaultFieldName,\n}: ModelRelationFormProps): React.JSX.Element {\n const { definition } = useProjectDefinition();\n const editedModel = useEditedModelConfig((model) => model);\n const modelName = editedModel.name;\n const { fields } = editedModel.model;\n const {\n field: { value: modelRelations = [], onChange: onModelRelationsChange },\n } = useController({\n name: `model.relations`,\n control: modelControl,\n });\n\n const foreignModelOptions = definition.models.map((type) => ({\n label: type.name,\n value: type.id,\n }));\n\n const modelRelation =\n relationId === undefined\n ? undefined\n : modelRelations.find((item) => item.id === relationId);\n\n const defaultValues = useMemo((): ModelRelationFieldConfigInput => {\n if (modelRelation) return modelRelation;\n const modelRef = guessModelTypeFromFieldName(\n definition,\n editedModel,\n defaultFieldName,\n );\n return {\n id: modelLocalRelationEntityType.generateNewId(),\n foreignId: modelForeignRelationEntityType.generateNewId(),\n modelRef: modelRef ?? '',\n onDelete: 'Restrict',\n onUpdate: 'Restrict',\n ...getRelationDefaultsFromModel(\n definition,\n editedModel,\n {\n modelRef,\n },\n defaultFieldName,\n ),\n };\n }, [modelRelation, defaultFieldName, definition, editedModel]);\n\n const modelRelationFieldSchema = useDefinitionSchema(\n createModelRelationFieldSchema,\n );\n\n const { control, handleSubmit, setError, watch, setValue } = useForm({\n resolver: zodResolver(modelRelationFieldSchema),\n defaultValues,\n });\n\n const relation = watch();\n\n const foreignModel = relation.modelRef\n ? definition.models.find((m) => m.id === relation.modelRef)\n : undefined;\n\n const foreignFields = foreignModel?.model.fields;\n\n const localFieldOptions = fields.map((f) => ({\n label: f.name,\n value: f.id,\n }));\n\n const foreignFieldOptions =\n foreignFields?.map((f) => ({\n label: f.name,\n value: f.id,\n })) ?? [];\n\n const isRelationOptional = relation.references.some(\n (ref) => fields.find((f) => f.id === ref.localRef)?.isOptional,\n );\n\n const onDelete = (): void => {\n onModelRelationsChange(\n modelRelations.filter((relation) => relation.id !== relationId),\n );\n onSubmitSuccess?.();\n };\n\n const onSubmit = handleSubmit((data): void => {\n const { id } = data;\n\n if (\n fields.some((field) => field.name === data.name) ||\n modelRelations.some(\n (relation) => relation.name === data.name && relation.id !== data.id,\n )\n ) {\n setError('name', {\n message:\n 'The relation name cannot be the same as a field/relation name',\n });\n return;\n }\n\n // look for duplicate local fields\n const localFields = data.references.map((ref) => ref.localRef);\n if (new Set(localFields).size !== localFields.length) {\n toast.error('Local fields must be unique');\n return;\n }\n\n const foreignFields = data.references.map((ref) => ref.foreignRef);\n if (new Set(foreignFields).size !== foreignFields.length) {\n toast.error('Foreign fields must be unique');\n return;\n }\n\n // replace the existing relation with the new one if it exists\n if (modelRelations.some((relation) => relation.id === id)) {\n onModelRelationsChange(\n modelRelations.map((relation) =>\n relation.id === id ? data : relation,\n ),\n );\n } else {\n onModelRelationsChange([...modelRelations, data]);\n }\n onSubmitSuccess?.();\n });\n\n const formId = useId();\n\n const hasSelectedForeignModel = !!foreignModel;\n\n return (\n <form\n className={clsx('space-y-4', className)}\n onSubmit={(e) => {\n e.stopPropagation();\n return onSubmit(e);\n }}\n id={formId}\n >\n <div className=\"grid grid-cols-2 gap-x-8 gap-y-2\">\n <ComboboxField\n options={[{ label: modelName, value: modelName }]}\n value={modelName}\n disabled\n label=\"Local Model\"\n />\n <ComboboxFieldController\n control={control}\n name=\"modelRef\"\n options={foreignModelOptions}\n label=\"Foreign Model\"\n onChange={(value) => {\n if (!value) return;\n const { foreignRelationName, name, references } =\n getRelationDefaultsFromModel(\n definition,\n editedModel,\n {\n ...relation,\n modelRef: value,\n },\n defaultFieldName,\n );\n if (foreignRelationName) {\n setValue('foreignRelationName', foreignRelationName);\n }\n if (name) {\n setValue('name', name);\n }\n setValue('references', references);\n }}\n />\n </div>\n <div\n className={clsx(\n 'grid grid-cols-2 gap-x-8 gap-y-2',\n !hasSelectedForeignModel && 'pointer-events-none opacity-50',\n )}\n >\n <InputFieldController\n control={control}\n disabled={!hasSelectedForeignModel}\n name=\"name\"\n label=\"Local Relation Name\"\n description={\n <span>\n Name of the relation, e.g. {camelCase(modelName)}.\n <strong>\n {foreignModel?.name ? camelCase(foreignModel.name) : 'user'}\n </strong>\n </span>\n }\n />\n <InputFieldController\n control={control}\n disabled={!hasSelectedForeignModel}\n name=\"foreignRelationName\"\n label=\"Foreign Relation Name\"\n description={\n <span>\n Name of the relation on the foreign model, e.g.{' '}\n {camelCase(foreignModel?.name ?? 'post')}.\n <strong>{defaultValues.foreignRelationName || 'user'}</strong>\n </span>\n }\n />\n <div className=\"text-sm font-medium\">Local Field</div>\n <div className=\"text-sm font-medium\">Foreign Field</div>\n {relation.references.map((_, i) => (\n <React.Fragment key={i}>\n <ComboboxFieldController\n disabled={!hasSelectedForeignModel}\n control={control}\n name={`references.${i}.localRef`}\n options={localFieldOptions}\n />\n <ComboboxFieldController\n control={control}\n name={`references.${i}.foreignRef`}\n options={foreignFieldOptions}\n disabled\n />\n </React.Fragment>\n ))}\n </div>\n <div className=\"grid grid-cols-2 gap-x-8 gap-y-2 border-t pt-4\">\n <SelectFieldController\n label=\"On Delete\"\n control={control}\n options={[\n { label: 'Cascade (delete entire local row)', value: 'Cascade' },\n { label: 'Restrict (throw error)', value: 'Restrict' },\n ...(isRelationOptional\n ? [\n {\n label: 'Set Null (set local field to null)',\n value: 'SetNull',\n },\n ]\n : []),\n ]}\n name=\"onDelete\"\n description=\"What to do when the foreign row is deleted\"\n />\n </div>\n <DialogFooter>\n <div className=\"flex w-full justify-between\">\n {relationId && (\n <Button\n variant=\"secondary\"\n onClick={(e) => {\n e.preventDefault();\n onDelete();\n }}\n >\n Delete\n </Button>\n )}\n <div className=\"flex gap-4\">\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button\n type=\"submit\"\n form={formId}\n disabled={!hasSelectedForeignModel}\n >\n Save\n </Button>\n </div>\n </div>\n </DialogFooter>\n </form>\n );\n}\n","import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n useControlledState,\n} from '@baseplate-dev/ui-components';\n\nimport { ModelRelationForm } from './model-relation-form.js';\n\ninterface ModelRelationDialogProps {\n control: Control<ModelConfigInput>;\n asChild?: boolean;\n open?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n children?: React.ReactNode;\n relationId?: string;\n defaultFieldName?: string;\n}\n\nexport function ModelRelationDialog({\n control,\n children,\n asChild,\n open,\n onOpenChange,\n relationId,\n defaultFieldName,\n}: ModelRelationDialogProps): React.JSX.Element {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n {children && <DialogTrigger asChild={asChild}>{children}</DialogTrigger>}\n <DialogContent width=\"lg\">\n <DialogHeader>\n <DialogTitle>\n {relationId ? 'Edit Relation' : 'Create Relation'}\n </DialogTitle>\n <DialogDescription>\n Set up the relation between this model and another model\n </DialogDescription>\n </DialogHeader>\n <ModelRelationForm\n control={control}\n onSubmitSuccess={() => {\n setIsOpen(false);\n }}\n relationId={relationId}\n defaultFieldName={defaultFieldName}\n />\n </DialogContent>\n </Dialog>\n );\n}\n","import type {\n ModelConfigInput,\n ModelRelationFieldConfigInput,\n} from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport { BadgeWithIcon } from '@baseplate-dev/ui-components';\nimport clsx from 'clsx';\nimport { useState } from 'react';\nimport { MdLink } from 'react-icons/md';\n\nimport { ModelRelationDialog } from './model-relation-dialog.js';\n\ninterface ModelRelationBadgeProps {\n className?: string;\n control: Control<ModelConfigInput>;\n relation: ModelRelationFieldConfigInput;\n autoCollapse?: boolean;\n}\n\nexport function ModelRelationsBadge({\n className,\n control,\n relation,\n autoCollapse,\n}: ModelRelationBadgeProps): React.JSX.Element {\n const { definitionContainer } = useProjectDefinition();\n const [isHovered, setIsHovered] = useState(false);\n const shouldShowText = !autoCollapse || isHovered;\n return (\n <ModelRelationDialog control={control} relationId={relation.id}>\n <BadgeWithIcon\n icon={MdLink}\n variant=\"secondary\"\n className={clsx('max-w-[100px]', className)}\n onMouseEnter={() => {\n setIsHovered(true);\n }}\n onMouseLeave={() => {\n setIsHovered(false);\n }}\n aria-label=\"Relation\"\n title=\"Relation\"\n >\n {shouldShowText &&\n `${definitionContainer.nameFromId(relation.modelRef)} ${\n relation.references.length > 1\n ? `(${relation.references.length})`\n : ''\n }`}\n </BadgeWithIcon>\n </ModelRelationDialog>\n );\n}\n","import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport { modelUniqueConstraintEntityType } from '@baseplate-dev/project-builder-lib';\nimport {\n Button,\n DialogClose,\n DialogFooter,\n MultiComboboxFieldController,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { clsx } from 'clsx';\nimport { useId } from 'react';\nimport { useController, useForm } from 'react-hook-form';\nimport { z } from 'zod';\n\nimport { useEditedModelConfig } from '../../../../-hooks/use-edited-model-config.js';\n\ninterface ModelUniqueConstraintFormProps {\n className?: string;\n control: Control<ModelConfigInput>;\n onSubmitSuccess?: () => void;\n constraintId?: string;\n}\n\nconst formSchema = z.object({\n id: z.string().optional(),\n fields: z.array(z.string()).min(1, 'At least one field is required'),\n});\n\ntype FormValues = z.infer<typeof formSchema>;\n\nexport function ModelUniqueConstraintForm({\n className,\n control: modelControl,\n onSubmitSuccess,\n constraintId,\n}: ModelUniqueConstraintFormProps): React.JSX.Element {\n const fields = useEditedModelConfig((model) => model.model.fields);\n const {\n field: { value: modelValue = [], onChange: onModelChange },\n } = useController({\n name: `model.uniqueConstraints`,\n control: modelControl,\n });\n\n const modelUniqueConstraint =\n constraintId === undefined\n ? undefined\n : modelValue.find((uc) => uc.id === constraintId);\n\n const { control, handleSubmit } = useForm<FormValues>({\n resolver: zodResolver(formSchema),\n values: modelUniqueConstraint\n ? {\n id: modelUniqueConstraint.id,\n fields: modelUniqueConstraint.fields.map((f) => f.fieldRef),\n }\n : { fields: [] },\n });\n\n const onDelete = (): void => {\n onModelChange(modelValue.filter((uc) => uc.id !== constraintId));\n onSubmitSuccess?.();\n };\n\n const onSubmit = handleSubmit((data) => {\n const dataWithId = {\n id: data.id ?? modelUniqueConstraintEntityType.generateNewId(),\n fields: data.fields.map((fieldRef) => ({\n fieldRef,\n })),\n };\n const { id } = dataWithId;\n // replace the existing unique constraint with the new one if it exists\n if (modelValue.some((uc) => uc.id === id)) {\n onModelChange(modelValue.map((uc) => (uc.id === id ? dataWithId : uc)));\n } else {\n onModelChange([...modelValue, dataWithId]);\n }\n onSubmitSuccess?.();\n });\n\n const formId = useId();\n\n return (\n <form\n className={clsx('space-y-4', className)}\n onSubmit={(e) => {\n e.stopPropagation();\n return onSubmit(e);\n }}\n id={formId}\n >\n <MultiComboboxFieldController\n control={control}\n name=\"fields\"\n options={fields.map((f) => ({ value: f.id, label: f.name }))}\n placeholder=\"Select fields to use as primary keys\"\n />\n <DialogFooter>\n <div className=\"flex w-full justify-between\">\n {constraintId && (\n <Button\n variant=\"secondary\"\n onClick={(e) => {\n e.preventDefault();\n onDelete();\n }}\n >\n Delete\n </Button>\n )}\n <div className=\"flex gap-4\">\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\" form={formId}>\n Save\n </Button>\n </div>\n </div>\n </DialogFooter>\n </form>\n );\n}\n","import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n useControlledState,\n} from '@baseplate-dev/ui-components';\n\nimport { ModelUniqueConstraintForm } from './model-unique-constraint-form.js';\n\ninterface ModelUniqueConstraintDialogProps {\n control: Control<ModelConfigInput>;\n asChild?: boolean;\n open?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n children?: React.ReactNode;\n constraintId?: string;\n}\n\nexport function ModelUniqueConstraintDialog({\n control,\n children,\n asChild,\n open,\n onOpenChange,\n constraintId,\n}: ModelUniqueConstraintDialogProps): React.JSX.Element {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n {children && <DialogTrigger asChild={asChild}>{children}</DialogTrigger>}\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Unique Constraint</DialogTitle>\n <DialogDescription>\n Select the fields that will be part of this unique constraint.\n </DialogDescription>\n </DialogHeader>\n <ModelUniqueConstraintForm\n control={control}\n onSubmitSuccess={() => {\n setIsOpen(false);\n }}\n constraintId={constraintId}\n />\n </DialogContent>\n </Dialog>\n );\n}\n","import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport { BadgeWithIcon } from '@baseplate-dev/ui-components';\nimport { clsx } from 'clsx';\nimport { useState } from 'react';\nimport { MdStar } from 'react-icons/md';\n\nimport { useEditedModelConfig } from '../../../../-hooks/use-edited-model-config.js';\nimport { ModelUniqueConstraintDialog } from './model-unique-constraint-dialog.js';\n\ninterface ModelFieldUniqueBadgeProps {\n className?: string;\n control: Control<ModelConfigInput>;\n constraintId: string;\n autoCollapse?: boolean;\n}\n\nexport function ModelFieldUniqueBadge({\n className,\n control,\n constraintId,\n autoCollapse,\n}: ModelFieldUniqueBadgeProps): React.JSX.Element {\n const [isHovered, setIsHovered] = useState(false);\n const shouldShowText = !autoCollapse || isHovered;\n const fieldsLength = useEditedModelConfig(\n (model) =>\n model.model.uniqueConstraints?.find((uc) => uc.id === constraintId)\n ?.fields.length ?? 0,\n );\n return (\n <ModelUniqueConstraintDialog control={control} constraintId={constraintId}>\n <BadgeWithIcon\n variant=\"secondary\"\n icon={MdStar}\n className={clsx('', className)}\n onMouseEnter={() => {\n setIsHovered(true);\n }}\n onMouseLeave={() => {\n setIsHovered(false);\n }}\n aria-label=\"Unique Constraint\"\n title=\"Unique Constraint\"\n >\n {shouldShowText &&\n `Unique ${fieldsLength > 1 ? `(${fieldsLength})` : ''}`}\n </BadgeWithIcon>\n </ModelUniqueConstraintDialog>\n );\n}\n","import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport { clsx } from 'clsx';\n\nimport { useEditedModelConfig } from '../../../../-hooks/use-edited-model-config.js';\nimport { ModelPrimaryKeyBadge } from '../primary-key/model-primary-key-badge.js';\nimport { ModelRelationsBadge } from '../relations/model-relation-badge.js';\nimport { ModelFieldUniqueBadge } from '../unique-constraints/model-unique-constraint-badge.js';\n\ninterface ModelFieldBadgesProps {\n className?: string;\n control: Control<ModelConfigInput>;\n idx: number;\n}\n\nexport function ModelFieldBadges({\n className,\n control,\n idx,\n}: ModelFieldBadgesProps): React.JSX.Element {\n const field = useEditedModelConfig((model) => model.model.fields[idx]);\n const isPrimary = useEditedModelConfig((model) =>\n model.model.primaryKeyFieldRefs.includes(field.id),\n );\n const uniqueConstraints = useEditedModelConfig(\n (model) =>\n model.model.uniqueConstraints\n ?.filter((constraint) =>\n constraint.fields.some((f) => f.fieldRef === field.id),\n )\n .map((uc) => uc.id) ?? [],\n );\n const modelFieldRelations = useEditedModelConfig(({ model }) => {\n const field = model.fields[idx];\n return (\n model.relations?.filter((r) =>\n r.references.some((ref) => ref.localRef === field.id),\n ) ?? []\n );\n });\n\n const totalBadges =\n (isPrimary ? 1 : 0) + uniqueConstraints.length + modelFieldRelations.length;\n const autoCollapse = totalBadges > 2;\n\n const badges = [\n isPrimary && (\n <ModelPrimaryKeyBadge\n key={'primary'}\n control={control}\n autoCollapse={autoCollapse}\n />\n ),\n ...uniqueConstraints.map((uc) => (\n <ModelFieldUniqueBadge\n key={uc}\n control={control}\n constraintId={uc}\n autoCollapse={autoCollapse}\n />\n )),\n ...modelFieldRelations.map((relation) => (\n <ModelRelationsBadge\n key={relation.id}\n control={control}\n relation={relation}\n autoCollapse={autoCollapse}\n />\n )),\n ];\n\n return <div className={clsx('flex gap-4', className)}>{badges}</div>;\n}\n","import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control, UseFormSetValue } from 'react-hook-form';\n\nimport { EnumUtils } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n ComboboxField,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n InputField,\n InputFieldController,\n SelectFieldController,\n} from '@baseplate-dev/ui-components';\nimport { useController, useWatch } from 'react-hook-form';\nimport { HiDotsVertical, HiOutlineX } from 'react-icons/hi';\n\ninterface ModelFieldDefaultValueInputProps {\n control: Control<ModelConfigInput>;\n setValue: UseFormSetValue<ModelConfigInput>;\n idx: number;\n}\n\nexport function ModelFieldDefaultValueInput({\n control,\n idx,\n setValue,\n}: ModelFieldDefaultValueInputProps): React.JSX.Element {\n const { definition } = useProjectDefinition();\n const type = useWatch({\n control,\n name: `model.fields.${idx}.type`,\n });\n\n const {\n field: { value: optionsValue, onChange: onOptionsChange },\n } = useController({\n name: `model.fields.${idx}.options`,\n control,\n });\n\n const defaultValue = useWatch({\n control,\n name: `model.fields.${idx}.options.default`,\n });\n\n if (type === 'boolean') {\n return (\n <div className=\"flex items-center gap-1\">\n <SelectFieldController\n control={control}\n className=\"flex-1\"\n name={`model.fields.${idx}.options.default`}\n options={[\n { label: 'True', value: 'true' },\n { label: 'False', value: 'false' },\n ]}\n placeholder=\"NULL\"\n />\n {defaultValue && (\n <Button\n title=\"Reset\"\n onClick={() => {\n setValue(`model.fields.${idx}.options.default`, '', {\n shouldDirty: true,\n });\n }}\n variant=\"ghost\"\n size=\"icon\"\n >\n <HiOutlineX />\n </Button>\n )}\n </div>\n );\n }\n\n if (['string', 'int', 'float'].includes(type)) {\n return (\n <div className=\"flex items-center gap-1\">\n <InputFieldController\n control={control}\n placeholder=\"NULL\"\n name={`model.fields.${idx}.options.default`}\n className=\"flex-1\"\n />\n {defaultValue && (\n <Button\n title=\"Reset\"\n onClick={() => {\n setValue(`model.fields.${idx}.options.default`, undefined, {\n shouldDirty: true,\n });\n }}\n variant=\"ghost\"\n size=\"icon\"\n >\n <HiOutlineX />\n </Button>\n )}\n </div>\n );\n }\n\n if (type === 'uuid') {\n if (optionsValue?.genUuid) {\n return (\n <div className=\"flex items-center gap-1\">\n <InputField disabled value=\"Random UUID v4\" className=\"flex-1\" />\n <Button\n title=\"Reset\"\n onClick={() => {\n onOptionsChange({ ...optionsValue, genUuid: false });\n }}\n variant=\"ghost\"\n size=\"icon\"\n >\n <HiOutlineX />\n </Button>\n </div>\n );\n }\n return (\n <div className=\"flex items-center gap-1\">\n <InputFieldController\n control={control}\n placeholder=\"NULL\"\n name={`model.fields.${idx}.options.default`}\n className=\"flex-1\"\n />\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button title=\"Options\" variant=\"ghost\" size=\"icon\">\n <HiDotsVertical />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuGroup>\n <DropdownMenuItem\n onSelect={() => {\n onOptionsChange({\n ...optionsValue,\n genUuid: true,\n });\n }}\n >\n Random UUID v4\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n }\n\n if (type === 'dateTime' || type === 'date') {\n const { defaultToNow, updatedAt } = optionsValue ?? {};\n\n if (defaultToNow ?? updatedAt) {\n return (\n <div className=\"flex items-center gap-1\">\n <InputField\n disabled\n value={updatedAt ? 'Last Updated' : 'Now'}\n className=\"flex-1\"\n />\n <Button\n title=\"Reset\"\n onClick={() => {\n onOptionsChange({\n ...optionsValue,\n defaultToNow: false,\n updatedAt: false,\n });\n }}\n variant=\"ghost\"\n size=\"icon\"\n >\n <HiOutlineX />\n </Button>\n </div>\n );\n }\n return (\n <div className=\"flex items-center space-x-1\">\n <InputFieldController\n placeholder=\"NULL\"\n control={control}\n name={`model.fields.${idx}.options.default`}\n className=\"flex-1\"\n />\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button title=\"Options\" variant=\"ghost\" size=\"icon\">\n <HiDotsVertical />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuGroup>\n <DropdownMenuItem\n onSelect={() => {\n onOptionsChange({\n ...optionsValue,\n defaultToNow: true,\n updatedAt: false,\n });\n }}\n >\n Now\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={() => {\n onOptionsChange({\n ...optionsValue,\n defaultToNow: true,\n updatedAt: true,\n });\n }}\n >\n Last Updated At\n </DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n }\n\n if (type === 'enum' && optionsValue?.enumRef) {\n const fieldEnum = EnumUtils.byIdOrThrow(definition, optionsValue.enumRef);\n const enumValues = fieldEnum.values.map((v) => ({\n label: v.friendlyName,\n value: v.id,\n }));\n return (\n <div className=\"flex items-center space-x-1\">\n <ComboboxField\n placeholder=\"NULL\"\n value={optionsValue.defaultEnumValueRef ?? null}\n onChange={(value) => {\n onOptionsChange({\n ...optionsValue,\n defaultEnumValueRef: value ? value : undefined,\n });\n }}\n options={enumValues}\n className=\"flex-1\"\n />\n {optionsValue.defaultEnumValueRef && (\n <Button\n title=\"Reset\"\n onClick={() => {\n onOptionsChange({\n ...optionsValue,\n defaultEnumValueRef: '',\n });\n }}\n variant=\"ghost\"\n size=\"icon\"\n >\n <HiOutlineX />\n </Button>\n )}\n </div>\n );\n }\n\n return <div />;\n}\n","import type {\n ModelConfigInput,\n ScalarFieldType,\n} from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport { SCALAR_FIELD_TYPES } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport { ComboboxField } from '@baseplate-dev/ui-components';\nimport { useController } from 'react-hook-form';\n\nimport type { ScalarFieldTypeOption } from '../../../-constants.js';\n\nimport { SCALAR_FIELD_TYPE_OPTIONS } from '../../../-constants.js';\n\ninterface ModelFieldTypeInputProps {\n control: Control<ModelConfigInput>;\n idx: number;\n}\n\nexport function ModelFieldTypeInput({\n control,\n idx,\n}: ModelFieldTypeInputProps): React.JSX.Element {\n const { definition } = useProjectDefinition();\n\n const enumOptions: ScalarFieldTypeOption[] = (definition.enums ?? []).map(\n (config) => ({\n label: config.name,\n value: `enum-${config.id}`,\n description: 'Enum type',\n }),\n );\n\n const typeOptions = [\n ...SCALAR_FIELD_TYPES.filter((t) => t !== 'enum').map(\n (fieldType) => SCALAR_FIELD_TYPE_OPTIONS[fieldType],\n ),\n ...enumOptions,\n ];\n\n const {\n field: { value: typeValue, onChange: onTypeChange },\n } = useController({\n name: `model.fields.${idx}.type`,\n control,\n });\n\n const {\n field: { value: fieldOptions, onChange: onFieldOptionsChange },\n } = useController({\n name: `model.fields.${idx}.options`,\n control,\n });\n\n const handleChange = (value: string | null): void => {\n if (value?.startsWith('enum-')) {\n const enumRef = value.replace('enum-', '');\n onFieldOptionsChange({\n enumRef,\n });\n onTypeChange('enum');\n } else {\n onTypeChange(value as ScalarFieldType);\n }\n };\n\n const enumRef = fieldOptions?.enumRef;\n\n return (\n <div className=\"space-y-2\">\n <ComboboxField\n value={typeValue === 'enum' && enumRef ? `enum-${enumRef}` : typeValue}\n onChange={handleChange}\n options={typeOptions}\n renderItemLabel={(option) => (\n <div className=\"flex flex-col\">\n <div>{option.label}</div>\n <div className=\"text-xs text-muted-foreground\">\n {option.description}\n </div>\n </div>\n )}\n />\n </div>\n );\n}\n","import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control, UseFormSetValue } from 'react-hook-form';\n\nimport { modelUniqueConstraintEntityType } from '@baseplate-dev/project-builder-lib';\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n InputFieldController,\n SwitchFieldController,\n toast,\n} from '@baseplate-dev/ui-components';\nimport clsx from 'clsx';\nimport { useState } from 'react';\nimport { HiDotsVertical } from 'react-icons/hi';\nimport { MdOutlineDelete } from 'react-icons/md';\n\nimport { useEditedModelConfig } from '../../../-hooks/use-edited-model-config.js';\nimport { ModelFieldBadges } from './badges/model-field-badges.js';\nimport { ModelFieldDefaultValueInput } from './model-field-default-value-input.js';\nimport { ModelFieldTypeInput } from './model-field-type-input.js';\nimport { ModelPrimaryKeyDialog } from './primary-key/model-primary-key-dialog.js';\nimport { ModelRelationDialog } from './relations/model-relation-dialog.js';\nimport { ModelUniqueConstraintDialog } from './unique-constraints/model-unique-constraint-dialog.js';\n\ninterface Props {\n className?: string;\n control: Control<ModelConfigInput>;\n setValue: UseFormSetValue<ModelConfigInput>;\n idx: number;\n onRemove: (idx: number) => void;\n}\n\nfunction ModelFieldForm({\n className,\n control,\n idx,\n setValue,\n onRemove,\n}: Props): React.JSX.Element {\n const watchedField = useEditedModelConfig((model) => model.model.fields[idx]);\n\n const watchedRelations = useEditedModelConfig(\n (model) => model.model.relations,\n );\n\n const model = useEditedModelConfig((model) => model.model);\n const isPartOfPrimaryKey = model.primaryKeyFieldRefs.includes(\n watchedField.id,\n );\n const hasCompositePrimaryKey = model.primaryKeyFieldRefs.length > 1;\n const uniqueConstraints = model.uniqueConstraints ?? [];\n\n const ownUniqueConstraints = uniqueConstraints.filter((uc) =>\n uc.fields.some((f) => f.fieldRef === watchedField.id),\n );\n const usedRelations =\n watchedRelations?.filter((relation) =>\n relation.references.some((r) => r.localRef === watchedField.id),\n ) ?? [];\n\n const removeError = (() => {\n // check local references\n if (usedRelations.length > 0) {\n return `Unable to remove field as it is being used in relations ${usedRelations\n .map((r) => r.name)\n .join(', ')}`;\n }\n // check primary keys\n if (isPartOfPrimaryKey && hasCompositePrimaryKey) {\n return `Unable to remove field as it is being used in in the primary key`;\n }\n // check unique constraints\n if (\n model.uniqueConstraints?.some((constraint) =>\n constraint.fields.some((f) => f.fieldRef === watchedField.id),\n )\n ) {\n return `Unable to remove field as it is being used in in a unique constraint`;\n }\n return;\n })();\n\n function handleRemove(): void {\n if (removeError) {\n toast.error(removeError);\n return;\n }\n\n onRemove(idx);\n\n if (isPartOfPrimaryKey && !hasCompositePrimaryKey) {\n setValue('model.primaryKeyFieldRefs', [], { shouldDirty: true });\n }\n }\n\n const [isPrimaryKeyDialogOpen, setIsPrimaryKeyDialogOpen] = useState(false);\n\n const [isUniqueConstraintDialogOpen, setIsUniqueConstraintDialogOpen] =\n useState(false);\n const [uniqueConstriantId, setUniqueConstraintId] = useState<\n string | undefined\n >();\n\n const [isRelationDialogOpen, setIsRelationDialogOpen] = useState(false);\n const [relationId, setRelationId] = useState<string | undefined>();\n\n return (\n <div className={clsx('items-center', className)}>\n <div>\n <InputFieldController\n control={control}\n name={`model.fields.${idx}.name`}\n />\n </div>\n <div>\n <ModelFieldTypeInput control={control} idx={idx} />\n </div>\n <div>\n <SwitchFieldController\n control={control}\n name={`model.fields.${idx}.isOptional`}\n />\n </div>\n <div className=\"mr-4\">\n <ModelFieldDefaultValueInput\n control={control}\n idx={idx}\n setValue={setValue}\n />\n </div>\n <div>\n <ModelFieldBadges control={control} idx={idx} />\n </div>\n <div>\n <div className=\"flex items-center gap-2\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\">\n <HiDotsVertical />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuGroup>\n {usedRelations.length === 0 && (\n <DropdownMenuItem\n onSelect={() => {\n setIsRelationDialogOpen(true);\n setRelationId(undefined);\n }}\n >\n Add Relation\n </DropdownMenuItem>\n )}\n {usedRelations.length > 0 &&\n usedRelations.map((relation) => (\n <DropdownMenuItem\n key={relation.id}\n onSelect={() => {\n setIsRelationDialogOpen(true);\n setRelationId(relation.id);\n }}\n >\n Edit Relation {usedRelations.length > 1 && relation.name}\n </DropdownMenuItem>\n ))}\n {!hasCompositePrimaryKey && !isPartOfPrimaryKey && (\n <DropdownMenuItem\n onSelect={() => {\n setValue('model.primaryKeyFieldRefs', [watchedField.id], {\n shouldDirty: true,\n });\n }}\n >\n Set as Primary Key\n </DropdownMenuItem>\n )}\n {isPartOfPrimaryKey && (\n <DropdownMenuItem\n onSelect={() => {\n setIsPrimaryKeyDialogOpen(true);\n }}\n >\n Edit Primary Key\n </DropdownMenuItem>\n )}\n {ownUniqueConstraints.length === 0 &&\n (hasCompositePrimaryKey || !isPartOfPrimaryKey) && (\n <DropdownMenuItem\n onSelect={() => {\n setValue(\n 'model.uniqueConstraints',\n [\n ...uniqueConstraints,\n {\n id: modelUniqueConstraintEntityType.generateNewId(),\n fields: [{ fieldRef: watchedField.id }],\n },\n ],\n { shouldDirty: true },\n );\n }}\n >\n Make Unique\n </DropdownMenuItem>\n )}\n {ownUniqueConstraints.length > 0 &&\n ownUniqueConstraints.map((uc, idx) => (\n <DropdownMenuItem\n key={uc.id}\n onSelect={() => {\n setUniqueConstraintId(uc.id);\n setIsUniqueConstraintDialogOpen(true);\n }}\n >\n Edit Unique Constraint{' '}\n {ownUniqueConstraints.length > 1 && idx + 1}\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n <ModelPrimaryKeyDialog\n control={control}\n open={isPrimaryKeyDialogOpen}\n onOpenChange={setIsPrimaryKeyDialogOpen}\n />\n <ModelUniqueConstraintDialog\n control={control}\n open={isUniqueConstraintDialogOpen}\n onOpenChange={setIsUniqueConstraintDialogOpen}\n constraintId={uniqueConstriantId}\n />\n <ModelRelationDialog\n control={control}\n open={isRelationDialogOpen}\n onOpenChange={setIsRelationDialogOpen}\n relationId={relationId}\n defaultFieldName={watchedField.name}\n />\n <Button\n variant=\"ghost\"\n onClick={() => {\n handleRemove();\n }}\n size=\"icon\"\n >\n <MdOutlineDelete />\n </Button>\n </div>\n </div>\n </div>\n );\n}\n\nexport default ModelFieldForm;\n","import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type {\n Control,\n FieldArrayWithId,\n UseFormSetValue,\n} from 'react-hook-form';\n\nimport { clsx } from 'clsx';\nimport { useFieldArray } from 'react-hook-form';\n\nimport { SortableList } from '#src/components/index.js';\n\nimport { ModelAddFieldButton } from './model-add-field-button.js';\nimport ModelFieldForm from './model-field-form.js';\n\ninterface ModelFieldsFormProps {\n className?: string;\n control: Control<ModelConfigInput>;\n setValue: UseFormSetValue<ModelConfigInput>;\n}\n\nexport function ModelFieldsForm({\n className,\n control,\n setValue,\n}: ModelFieldsFormProps): React.JSX.Element {\n const {\n fields: fieldFields,\n remove: removeField,\n append: appendField,\n move: sortFields,\n } = useFieldArray({\n control,\n name: 'model.fields',\n });\n\n const gridClassNames =\n 'grid grid-cols-[repeat(2,minmax(130px,1fr))_60px_minmax(130px,1fr)_minmax(100px,1fr)_80px] gap-3';\n\n const fieldListItems = fieldFields.map((f: FieldArrayWithId, i: number) => ({\n id: f.id,\n element: (\n <ModelFieldForm\n className={gridClassNames}\n key={f.id}\n control={control}\n setValue={setValue}\n idx={i}\n onRemove={removeField}\n />\n ),\n }));\n\n return (\n <div className={clsx('space-y-4', className)}>\n {fieldFields.length === 0 ? (\n <p className=\"pt-4 text-style-muted\">Add some fields to get started</p>\n ) : (\n <div className=\"flex w-full flex-col gap-2 bg-white\">\n <div\n className={clsx(\n gridClassNames,\n 'sticky -top-0 z-10 bg-white py-2 text-sm font-semibold',\n // account for handle in sortable list\n 'pl-12',\n )}\n >\n <div>Name</div>\n <div>Type</div>\n <div>Optional</div>\n <div>Default Value</div>\n <div className=\"sr-only\">Badges</div>\n <div className=\"sr-only\">Actions</div>\n </div>\n <SortableList listItems={fieldListItems} sortItems={sortFields} />\n </div>\n )}\n <ModelAddFieldButton appendField={appendField} setValue={setValue} />\n </div>\n );\n}\n","import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control, UseFormSetValue } from 'react-hook-form';\n\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n RecordView,\n RecordViewActions,\n RecordViewItem,\n RecordViewItemList,\n SectionListSection,\n SectionListSectionContent,\n SectionListSectionDescription,\n SectionListSectionHeader,\n SectionListSectionTitle,\n useConfirmDialog,\n} from '@baseplate-dev/ui-components';\nimport { MdAdd, MdDeleteOutline, MdEdit } from 'react-icons/md';\n\nimport { useEditedModelConfig } from '../../-hooks/use-edited-model-config.js';\nimport { ModelRelationDialog } from './fields/relations/model-relation-dialog.js';\n\ninterface Props {\n control: Control<ModelConfigInput>;\n setValue: UseFormSetValue<ModelConfigInput>;\n}\n\nexport function ModelRelationsSection({\n control,\n setValue,\n}: Props): React.JSX.Element {\n const { requestConfirm } = useConfirmDialog();\n const { definitionContainer } = useProjectDefinition();\n const relations = useEditedModelConfig(({ model }) => model.relations ?? []);\n const fieldIdsToNames = useEditedModelConfig(({ model }) =>\n Object.fromEntries(model.fields.map((field) => [field.id, field.name])),\n );\n\n function handleDeleteRelation(relationId: string): void {\n const relation = relations.find((relation) => relation.id === relationId);\n requestConfirm({\n title: 'Delete Relation',\n content: `Are you sure you want to delete the relation \"${relation?.name ?? '<invalid>'}\"?`,\n onConfirm: () => {\n setValue(\n 'model.relations',\n relations.filter((relation) => relation.id !== relationId),\n );\n },\n });\n }\n\n return (\n <SectionListSection>\n <SectionListSectionHeader>\n <SectionListSectionTitle>Relations</SectionListSectionTitle>\n <SectionListSectionDescription>\n Define relations to enforce uniqueness on one or more fields.\n </SectionListSectionDescription>\n </SectionListSectionHeader>\n <SectionListSectionContent className=\"space-y-4\">\n {relations.map((relation) => (\n <RecordView key={relation.id}>\n <RecordViewItemList>\n <RecordViewItem title=\"Name\">{relation.name}</RecordViewItem>\n <RecordViewItem title=\"Local Field\">\n {relation.references\n .map((r) => fieldIdsToNames[r.localRef])\n .join(', ')}\n </RecordViewItem>\n <RecordViewItem title=\"Foreign Model\">\n {definitionContainer.nameFromId(relation.modelRef)}\n </RecordViewItem>\n <RecordViewItem title=\"On Delete\">\n {relation.onDelete}\n </RecordViewItem>\n </RecordViewItemList>\n <RecordViewActions>\n <ModelRelationDialog\n relationId={relation.id}\n control={control}\n asChild\n >\n <Button variant=\"ghost\" size=\"icon\" title=\"Edit\">\n <MdEdit />\n </Button>\n </ModelRelationDialog>\n <Button\n variant=\"ghostDestructive\"\n size=\"icon\"\n title=\"Delete\"\n onClick={() => {\n handleDeleteRelation(relation.id);\n }}\n >\n <MdDeleteOutline />\n </Button>\n </RecordViewActions>\n </RecordView>\n ))}\n <ModelRelationDialog control={control} asChild>\n <Button variant=\"secondary\" size=\"sm\">\n <MdAdd />\n Add Relation\n </Button>\n </ModelRelationDialog>\n </SectionListSectionContent>\n </SectionListSection>\n );\n}\n","import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control, UseFormSetValue } from 'react-hook-form';\n\nimport {\n Button,\n RecordView,\n RecordViewActions,\n RecordViewItem,\n RecordViewItemList,\n SectionListSection,\n SectionListSectionContent,\n SectionListSectionDescription,\n SectionListSectionHeader,\n SectionListSectionTitle,\n useConfirmDialog,\n} from '@baseplate-dev/ui-components';\nimport { MdAdd, MdDeleteOutline, MdEdit } from 'react-icons/md';\n\nimport { useEditedModelConfig } from '../../-hooks/use-edited-model-config.js';\nimport { ModelUniqueConstraintDialog } from './fields/unique-constraints/model-unique-constraint-dialog.js';\n\ninterface Props {\n control: Control<ModelConfigInput>;\n setValue: UseFormSetValue<ModelConfigInput>;\n}\n\nexport function ModelUniqueConstraintsSection({\n control,\n setValue,\n}: Props): React.JSX.Element {\n const { requestConfirm } = useConfirmDialog();\n const uniqueConstraints = useEditedModelConfig(\n ({ model }) => model.uniqueConstraints ?? [],\n );\n const fieldIdsToNames = useEditedModelConfig(({ model }) =>\n Object.fromEntries(model.fields.map((field) => [field.id, field.name])),\n );\n\n function handleDeleteConstraint(constraintId: string): void {\n requestConfirm({\n title: 'Delete Unique Constraint',\n content: 'Are you sure you want to delete this unique constraint?',\n onConfirm: () => {\n setValue(\n 'model.uniqueConstraints',\n uniqueConstraints.filter(\n (constraint) => constraint.id !== constraintId,\n ),\n );\n },\n });\n }\n\n return (\n <SectionListSection>\n <SectionListSectionHeader>\n <SectionListSectionTitle>Unique Constraints</SectionListSectionTitle>\n <SectionListSectionDescription>\n Define unique constraints to enforce uniqueness on one or more fields.\n </SectionListSectionDescription>\n </SectionListSectionHeader>\n <SectionListSectionContent className=\"space-y-4\">\n {uniqueConstraints.map((constraint) => (\n <RecordView key={constraint.id}>\n <RecordViewItemList>\n <RecordViewItem title=\"Fields\">\n {constraint.fields\n .map(\n (field) => fieldIdsToNames[field.fieldRef] ?? '<invalid>',\n )\n .join(', ')}\n </RecordViewItem>\n </RecordViewItemList>\n <RecordViewActions>\n <ModelUniqueConstraintDialog\n constraintId={constraint.id}\n control={control}\n asChild\n >\n <Button variant=\"ghost\" size=\"icon\" title=\"Edit\">\n <MdEdit />\n </Button>\n </ModelUniqueConstraintDialog>\n <Button\n variant=\"ghostDestructive\"\n size=\"icon\"\n title=\"Delete\"\n onClick={() => {\n handleDeleteConstraint(constraint.id);\n }}\n >\n <MdDeleteOutline />\n </Button>\n </RecordViewActions>\n </RecordView>\n ))}\n <ModelUniqueConstraintDialog control={control} asChild>\n <Button variant=\"secondary\" size=\"sm\">\n <MdAdd />\n Add Unique Constraint\n </Button>\n </ModelUniqueConstraintDialog>\n </SectionListSectionContent>\n </SectionListSection>\n );\n}\n","import type React from 'react';\n\nimport {\n modelEntityType,\n modelLocalRelationEntityType,\n modelScalarFieldEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport { useBlockUnsavedChangesNavigate } from '@baseplate-dev/project-builder-lib/web';\nimport { FormActionBar, SectionList } from '@baseplate-dev/ui-components';\nimport { createFileRoute } from '@tanstack/react-router';\n\nimport { ErrorBoundary } from '#src/components/index.js';\nimport { registerEntityTypeUrl } from '#src/services/entity-type.js';\n\nimport { EditedModelContextProvider } from '../-hooks/use-edited-model-config.js';\nimport { useModelForm } from '../-hooks/use-model-form.js';\nimport { ModelFieldsForm } from './-components/fields/model-fields-form.js';\nimport { ModelRelationsSection } from './-components/model-relations-section.js';\nimport { ModelUniqueConstraintsSection } from './-components/model-unique-constraints-section.js';\n\nregisterEntityTypeUrl(modelEntityType, `/data/models/edit/{key}`);\nregisterEntityTypeUrl(\n modelScalarFieldEntityType,\n `/data/models/edit/{parentKey}`,\n);\nregisterEntityTypeUrl(\n modelLocalRelationEntityType,\n `/data/models/edit/{parentKey}`,\n);\n\nexport const Route = createFileRoute('/data/models/edit/$key/')({\n component: ModelEditModelPage,\n});\n\nfunction ModelEditModelPage(): React.JSX.Element {\n const { key } = Route.useParams();\n const { form, onSubmit, defaultValues } = useModelForm({\n omit: ['name', 'featureRef'],\n modelKey: key,\n });\n const { control, watch, getValues, setValue, reset } = form;\n\n useBlockUnsavedChangesNavigate({ control, reset, onSubmit });\n\n // TODO: Add validation for fields form where:\n // - referenced type does not match field type\n // - SET NULL is on non-optional fields\n\n return (\n <ErrorBoundary>\n <EditedModelContextProvider\n initialModel={defaultValues}\n getValues={getValues}\n watch={watch}\n >\n <form\n onSubmit={onSubmit}\n className=\"max-w-7xl min-w-[700px] flex-1 space-y-4 px-4 pb-4\"\n >\n <ModelFieldsForm control={control} setValue={setValue} />\n <SectionList>\n <ModelRelationsSection control={control} setValue={setValue} />\n <ModelUniqueConstraintsSection\n control={control}\n setValue={setValue}\n />\n </SectionList>\n <FormActionBar form={form} />\n </form>\n </EditedModelContextProvider>\n </ErrorBoundary>\n );\n}\n"],"names":["CASE_SPLIT_PATTERN","words","str","camelCase","words$1","first","rest","word","capitalize","modelScalarFieldEntityType","importShared","Button","ButtonGroup","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuTrigger","useMemo","ModelAddFieldButton","className","appendField","setValue","fieldNames","useEditedModelConfig","model","f","primaryKeyFieldLength","availableAutoFields","autoFields","hasCreatedAt","hasUpdatedAt","applyAutoField","autoField","isPrimaryKey","field","fieldId","jsxs","jsx","MdExpandMore","DialogClose","DialogFooter","MultiComboboxFieldController","useId","z","primaryKeychema","ModelPrimaryKeyForm","modelControl","onSubmitSuccess","fields","modelValue","onModelChange","useController","control","handleSubmit","useForm","zodResolver","onSubmit","data","formId","clsx","e","Dialog","DialogContent","DialogDescription","DialogHeader","DialogTitle","DialogTrigger","useControlledState","ModelPrimaryKeyDialog","children","asChild","open","onOpenChange","isOpen","setIsOpen","BadgeWithIcon","useState","ModelPrimaryKeyBadge","autoCollapse","isHovered","setIsHovered","shouldShowText","MdKey","createModelRelationFieldSchema","ModelFieldUtils","modelForeignRelationEntityType","modelLocalRelationEntityType","ModelUtils","useDefinitionSchema","useProjectDefinition","ComboboxField","ComboboxFieldController","InputFieldController","SelectFieldController","toast","React","guessModelTypeFromFieldName","definition","editedModel","fieldName","name","tryFindModel","condition","modelWithName","m","modelWithFeature","getRelationDefaultsFromModel","editedRelation","defaultFieldName","references","primaryKeyFieldRefs","foreignName","primaryKeys","existingReferences","primaryKey","i","bestGuessLocalName","foreignRelationName","isOneToOne","ref","r","pluralize","ModelRelationForm","relationId","modelName","modelRelations","onModelRelationsChange","foreignModelOptions","type","modelRelation","item","defaultValues","modelRef","modelRelationFieldSchema","setError","watch","relation","foreignModel","foreignFields","localFieldOptions","foreignFieldOptions","isRelationOptional","onDelete","id","localFields","hasSelectedForeignModel","value","_","ModelRelationDialog","ModelRelationsBadge","definitionContainer","MdLink","modelUniqueConstraintEntityType","formSchema","ModelUniqueConstraintForm","constraintId","modelUniqueConstraint","uc","dataWithId","fieldRef","ModelUniqueConstraintDialog","ModelFieldUniqueBadge","fieldsLength","MdStar","ModelFieldBadges","idx","isPrimary","uniqueConstraints","constraint","modelFieldRelations","badges","EnumUtils","DropdownMenuGroup","InputField","ModelFieldDefaultValueInput","useWatch","optionsValue","onOptionsChange","defaultValue","HiOutlineX","HiDotsVertical","defaultToNow","updatedAt","enumValues","v","SCALAR_FIELD_TYPES","ModelFieldTypeInput","enumOptions","config","typeOptions","t","fieldType","SCALAR_FIELD_TYPE_OPTIONS","typeValue","onTypeChange","fieldOptions","onFieldOptionsChange","handleChange","enumRef","option","SwitchFieldController","ModelFieldForm","onRemove","watchedField","watchedRelations","isPartOfPrimaryKey","hasCompositePrimaryKey","ownUniqueConstraints","usedRelations","removeError","handleRemove","isPrimaryKeyDialogOpen","setIsPrimaryKeyDialogOpen","isUniqueConstraintDialogOpen","setIsUniqueConstraintDialogOpen","uniqueConstriantId","setUniqueConstraintId","isRelationDialogOpen","setIsRelationDialogOpen","setRelationId","MdOutlineDelete","ModelFieldsForm","fieldFields","removeField","sortFields","useFieldArray","gridClassNames","fieldListItems","SortableList","RecordView","RecordViewActions","RecordViewItem","RecordViewItemList","SectionListSection","SectionListSectionContent","SectionListSectionDescription","SectionListSectionHeader","SectionListSectionTitle","useConfirmDialog","ModelRelationsSection","requestConfirm","relations","fieldIdsToNames","handleDeleteRelation","MdEdit","MdDeleteOutline","MdAdd","ModelUniqueConstraintsSection","handleDeleteConstraint","modelEntityType","useBlockUnsavedChangesNavigate","FormActionBar","SectionList","registerEntityTypeUrl","SplitComponent","key","Route","useParams","form","useModelForm","omit","modelKey","getValues","reset","ErrorBoundary","EditedModelContextProvider"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
const A0=(e,n)=>{if(typeof e=="number"){if(n===3)return{mode:"rgb",r:(e>>8&15|e>>4&240)/255,g:(e>>4&15|e&240)/255,b:(e&15|e<<4&240)/255};if(n===4)return{mode:"rgb",r:(e>>12&15|e>>8&240)/255,g:(e>>8&15|e>>4&240)/255,b:(e>>4&15|e&240)/255,alpha:(e&15|e<<4&240)/255};if(n===6)return{mode:"rgb",r:(e>>16&255)/255,g:(e>>8&255)/255,b:(e&255)/255};if(n===8)return{mode:"rgb",r:(e>>24&255)/255,g:(e>>16&255)/255,b:(e>>8&255)/255,alpha:(e&255)/255}}},kn={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},_n=e=>A0(kn[e.toLowerCase()],6),zn=/^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i,$n=e=>{let n;return(n=e.match(zn))?A0(parseInt(n[1],16),n[1].length):void 0},R="([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)",U=`${R}%`,a0=`(?:${R}%|${R})`,wn=`(?:${R}(deg|grad|rad|turn)|${R})`,Y="\\s*,\\s*",Tn=new RegExp(`^rgba?\\(\\s*${R}${Y}${R}${Y}${R}\\s*(?:,\\s*${a0}\\s*)?\\)$`),Nn=new RegExp(`^rgba?\\(\\s*${U}${Y}${U}${Y}${U}\\s*(?:,\\s*${a0}\\s*)?\\)$`),Pn=e=>{let n={mode:"rgb"},t;if(t=e.match(Tn))t[1]!==void 0&&(n.r=t[1]/255),t[2]!==void 0&&(n.g=t[2]/255),t[3]!==void 0&&(n.b=t[3]/255);else if(t=e.match(Nn))t[1]!==void 0&&(n.r=t[1]/100),t[2]!==void 0&&(n.g=t[2]/100),t[3]!==void 0&&(n.b=t[3]/100);else return;return t[4]!==void 0?n.alpha=Math.max(0,Math.min(1,t[4]/100)):t[5]!==void 0&&(n.alpha=Math.max(0,Math.min(1,+t[5]))),n},Hn=(e,n)=>e===void 0?void 0:typeof e!="object"?Yn(e):e.mode!==void 0?e:n?{...e,mode:n}:void 0,D0=(e="rgb")=>n=>(n=Hn(n,e))!==void 0?n.mode===e?n:T[n.mode][e]?T[n.mode][e](n):e==="rgb"?T[n.mode].rgb(n):T.rgb[e](T[n.mode].rgb(n)):void 0,T={},Z0={},fe=[],F0={},Rn=e=>e,b=e=>(T[e.mode]={...T[e.mode],...e.toMode},Object.keys(e.fromMode||{}).forEach(n=>{T[n]||(T[n]={}),T[n][e.mode]=e.fromMode[n]}),e.ranges||(e.ranges={}),e.difference||(e.difference={}),e.channels.forEach(n=>{if(e.ranges[n]===void 0&&(e.ranges[n]=[0,1]),!e.interpolate[n])throw new Error(`Missing interpolator for: ${n}`);typeof e.interpolate[n]=="function"&&(e.interpolate[n]={use:e.interpolate[n]}),e.interpolate[n].fixup||(e.interpolate[n].fixup=Rn)}),Z0[e.mode]=e,(e.parse||[]).forEach(n=>{In(n,e.mode)}),D0(e.mode)),Xn=e=>Z0[e],In=(e,n)=>{if(typeof e=="string"){if(!n)throw new Error("'mode' required when 'parser' is a string");F0[e]=n}else typeof e=="function"&&fe.indexOf(e)<0&&fe.push(e)},Qe=/[^\x00-\x7F]|[a-zA-Z_]/,Cn=/[^\x00-\x7F]|[-\w]/,o={Function:"function",Ident:"ident",Number:"number",Percentage:"percentage",ParenClose:")",None:"none",Hue:"hue",Alpha:"alpha"};let s=0;function ie(e){let n=e[s],t=e[s+1];return n==="-"||n==="+"?/\d/.test(t)||t==="."&&/\d/.test(e[s+2]):n==="."?/\d/.test(t):/\d/.test(n)}function Ue(e){if(s>=e.length)return!1;let n=e[s];if(Qe.test(n))return!0;if(n==="-"){if(e.length-s<2)return!1;let t=e[s+1];return!!(t==="-"||Qe.test(t))}return!1}const qn={deg:1,rad:180/Math.PI,grad:9/10,turn:360};function Q(e){let n="";if((e[s]==="-"||e[s]==="+")&&(n+=e[s++]),n+=ae(e),e[s]==="."&&/\d/.test(e[s+1])&&(n+=e[s++]+ae(e)),(e[s]==="e"||e[s]==="E")&&((e[s+1]==="-"||e[s+1]==="+")&&/\d/.test(e[s+2])?n+=e[s++]+e[s++]+ae(e):/\d/.test(e[s+1])&&(n+=e[s++]+ae(e))),Ue(e)){let t=re(e);return t==="deg"||t==="rad"||t==="turn"||t==="grad"?{type:o.Hue,value:n*qn[t]}:void 0}return e[s]==="%"?(s++,{type:o.Percentage,value:+n}):{type:o.Number,value:+n}}function ae(e){let n="";for(;/\d/.test(e[s]);)n+=e[s++];return n}function re(e){let n="";for(;s<e.length&&Cn.test(e[s]);)n+=e[s++];return n}function Ln(e){let n=re(e);return e[s]==="("?(s++,{type:o.Function,value:n}):n==="none"?{type:o.None,value:void 0}:{type:o.Ident,value:n}}function Sn(e=""){let n=e.trim(),t=[],a;for(s=0;s<n.length;){if(a=n[s++],a===`
|
|
2
|
+
`||a===" "||a===" "){for(;s<n.length&&(n[s]===`
|
|
3
|
+
`||n[s]===" "||n[s]===" ");)s++;continue}if(a===",")return;if(a===")"){t.push({type:o.ParenClose});continue}if(a==="+"){if(s--,ie(n)){t.push(Q(n));continue}return}if(a==="-"){if(s--,ie(n)){t.push(Q(n));continue}if(Ue(n)){t.push({type:o.Ident,value:re(n)});continue}return}if(a==="."){if(s--,ie(n)){t.push(Q(n));continue}return}if(a==="/"){for(;s<n.length&&(n[s]===`
|
|
4
|
+
`||n[s]===" "||n[s]===" ");)s++;let i;if(ie(n)&&(i=Q(n),i.type!==o.Hue)){t.push({type:o.Alpha,value:i});continue}if(Ue(n)&&re(n)==="none"){t.push({type:o.Alpha,value:{type:o.None,value:void 0}});continue}return}if(/\d/.test(a)){s--,t.push(Q(n));continue}if(Qe.test(a)){s--,t.push(Ln(n));continue}return}return t}function jn(e){e._i=0;let n=e[e._i++];if(!n||n.type!==o.Function||n.value!=="color"||(n=e[e._i++],n.type!==o.Ident))return;const t=F0[n.value];if(!t)return;const a={mode:t},i=J0(e,!1);if(!i)return;const f=Xn(t).channels;for(let r=0,d,u;r<f.length;r++)d=i[r],u=f[r],d.type!==o.None&&(a[u]=d.type===o.Number?d.value:d.value/100,u==="alpha"&&(a[u]=Math.max(0,Math.min(1,a[u]))));return a}function J0(e,n){const t=[];let a;for(;e._i<e.length;){if(a=e[e._i++],a.type===o.None||a.type===o.Number||a.type===o.Alpha||a.type===o.Percentage||n&&a.type===o.Hue){t.push(a);continue}if(a.type===o.ParenClose){if(e._i<e.length)return;continue}return}if(!(t.length<3||t.length>4)){if(t.length===4){if(t[3].type!==o.Alpha)return;t[3]=t[3].value}return t.length===3&&t.push({type:o.None,value:void 0}),t.every(i=>i.type!==o.Alpha)?t:void 0}}function On(e,n){e._i=0;let t=e[e._i++];if(!t||t.type!==o.Function)return;let a=J0(e,n);if(a)return a.unshift(t.value),a}const Yn=e=>{if(typeof e!="string")return;const n=Sn(e),t=n?On(n,!0):void 0;let a,i=0,f=fe.length;for(;i<f;)if((a=fe[i++](e,t))!==void 0)return a;return n?jn(n):void 0};function En(e,n){if(!n||n[0]!=="rgb"&&n[0]!=="rgba")return;const t={mode:"rgb"},[,a,i,f,r]=n;if(!(a.type===o.Hue||i.type===o.Hue||f.type===o.Hue))return a.type!==o.None&&(t.r=a.type===o.Number?a.value/255:a.value/100),i.type!==o.None&&(t.g=i.type===o.Number?i.value/255:i.value/100),f.type!==o.None&&(t.b=f.type===o.Number?f.value/255:f.value/100),r.type!==o.None&&(t.alpha=Math.min(1,Math.max(0,r.type===o.Number?r.value:r.value/100))),t}const An=e=>e==="transparent"?{mode:"rgb",r:0,g:0,b:0,alpha:0}:void 0,Dn=(e,n,t)=>e+t*(n-e),Zn=e=>{let n=[];for(let t=0;t<e.length-1;t++){let a=e[t],i=e[t+1];a===void 0&&i===void 0?n.push(void 0):a!==void 0&&i!==void 0?n.push([a,i]):n.push(a!==void 0?[a,a]:[i,i])}return n},Fn=e=>n=>{let t=Zn(n);return a=>{let i=a*t.length,f=a>=1?t.length-1:Math.max(Math.floor(i),0),r=t[f];return r===void 0?void 0:e(r[0],r[1],i-f)}},l=Fn(Dn),y=e=>{let n=!1,t=e.map(a=>a!==void 0?(n=!0,a):1);return n?t:e},E={mode:"rgb",channels:["r","g","b","alpha"],parse:[En,$n,Pn,_n,An,"srgb"],serialize:"srgb",interpolate:{r:l,g:l,b:l,alpha:{use:l,fixup:y}},gamut:!0,white:{r:1,g:1,b:1},black:{r:0,g:0,b:0}},Ne=(e=0)=>Math.pow(Math.abs(e),563/256)*Math.sign(e),x0=e=>{let n=Ne(e.r),t=Ne(e.g),a=Ne(e.b),i={mode:"xyz65",x:.5766690429101305*n+.1855582379065463*t+.1882286462349947*a,y:.297344975250536*n+.6273635662554661*t+.0752914584939979*a,z:.0270313613864123*n+.0706888525358272*t+.9913375368376386*a};return e.alpha!==void 0&&(i.alpha=e.alpha),i},Pe=e=>Math.pow(Math.abs(e),256/563)*Math.sign(e),M0=({x:e,y:n,z:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i={mode:"a98",r:Pe(e*2.0415879038107465-n*.5650069742788597-.3447313507783297*t),g:Pe(e*-.9692436362808798+n*1.8759675015077206+.0415550574071756*t),b:Pe(e*.0134442806320312-n*.1183623922310184+1.0151749943912058*t)};return a!==void 0&&(i.alpha=a),i},He=(e=0)=>{const n=Math.abs(e);return n<=.04045?e/12.92:(Math.sign(e)||1)*Math.pow((n+.055)/1.055,2.4)},A=({r:e,g:n,b:t,alpha:a})=>{let i={mode:"lrgb",r:He(e),g:He(n),b:He(t)};return a!==void 0&&(i.alpha=a),i},L=e=>{let{r:n,g:t,b:a,alpha:i}=A(e),f={mode:"xyz65",x:.4123907992659593*n+.357584339383878*t+.1804807884018343*a,y:.2126390058715102*n+.715168678767756*t+.0721923153607337*a,z:.0193308187155918*n+.119194779794626*t+.9505321522496607*a};return i!==void 0&&(f.alpha=i),f},Re=(e=0)=>{const n=Math.abs(e);return n>.0031308?(Math.sign(e)||1)*(1.055*Math.pow(n,1/2.4)-.055):e*12.92},D=({r:e,g:n,b:t,alpha:a},i="rgb")=>{let f={mode:i,r:Re(e),g:Re(n),b:Re(t)};return a!==void 0&&(f.alpha=a),f},S=({x:e,y:n,z:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i=D({r:e*3.2409699419045226-n*1.537383177570094-.4986107602930034*t,g:e*-.9692436362808796+n*1.8759675015077204+.0415550574071756*t,b:e*.0556300796969936-n*.2039769588889765+1.0569715142428784*t});return a!==void 0&&(i.alpha=a),i},Jn={...E,mode:"a98",parse:["a98-rgb"],serialize:"a98-rgb",fromMode:{rgb:e=>M0(L(e)),xyz65:M0},toMode:{rgb:e=>S(x0(e)),xyz65:x0}},z=e=>(e=e%360)<0?e+360:e,Bn=(e,n)=>e.map((t,a,i)=>{if(t===void 0)return t;let f=z(t);return a===0||e[a-1]===void 0?f:n(f-z(i[a-1]))}).reduce((t,a)=>!t.length||a===void 0||t[t.length-1]===void 0?(t.push(a),t):(t.push(a+t[t.length-1]),t),[]),N=e=>Bn(e,n=>Math.abs(n)<=180?n:n-360*Math.sign(n)),k=[-.14861,1.78277,-.29227,-.90649,1.97294,0],Gn=Math.PI/180,Wn=180/Math.PI;let y0=k[3]*k[4],v0=k[1]*k[4],k0=k[1]*k[2]-k[0]*k[3];const Kn=({r:e,g:n,b:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i=(k0*t+e*y0-n*v0)/(k0+y0-v0),f=t-i,r=(k[4]*(n-i)-k[2]*f)/k[3],d={mode:"cubehelix",l:i,s:i===0||i===1?void 0:Math.sqrt(f*f+r*r)/(k[4]*i*(1-i))};return d.s&&(d.h=Math.atan2(r,f)*Wn-120),a!==void 0&&(d.alpha=a),d},Qn=({h:e,s:n,l:t,alpha:a})=>{let i={mode:"rgb"};e=(e===void 0?0:e+120)*Gn,t===void 0&&(t=0);let f=n===void 0?0:n*t*(1-t),r=Math.cos(e),d=Math.sin(e);return i.r=t+f*(k[0]*r+k[1]*d),i.g=t+f*(k[2]*r+k[3]*d),i.b=t+f*(k[4]*r+k[5]*d),a!==void 0&&(i.alpha=a),i},se=(e,n)=>{if(e.h===void 0||n.h===void 0||!e.s||!n.s)return 0;let t=z(e.h),a=z(n.h),i=Math.sin((a-t+360)/2*Math.PI/180);return 2*Math.sqrt(e.s*n.s)*i},Un=(e,n)=>{if(e.h===void 0||n.h===void 0)return 0;let t=z(e.h),a=z(n.h);return Math.abs(a-t)>180?t-(a-360*Math.sign(a-t)):a-t},he=(e,n)=>{if(e.h===void 0||n.h===void 0||!e.c||!n.c)return 0;let t=z(e.h),a=z(n.h),i=Math.sin((a-t+360)/2*Math.PI/180);return 2*Math.sqrt(e.c*n.c)*i},P=e=>{let n=e.reduce((a,i)=>{if(i!==void 0){let f=i*Math.PI/180;a.sin+=Math.sin(f),a.cos+=Math.cos(f)}return a},{sin:0,cos:0}),t=Math.atan2(n.sin,n.cos)*180/Math.PI;return t<0?360+t:t},Vn={mode:"cubehelix",channels:["h","s","l","alpha"],parse:["--cubehelix"],serialize:"--cubehelix",ranges:{h:[0,360],s:[0,4.614],l:[0,1]},fromMode:{rgb:Kn},toMode:{rgb:Qn},interpolate:{h:{use:l,fixup:N},s:l,l,alpha:{use:l,fixup:y}},difference:{h:se},average:{h:P}},X=({l:e,a:n,b:t,alpha:a},i="lch")=>{n===void 0&&(n=0),t===void 0&&(t=0);let f=Math.sqrt(n*n+t*t),r={mode:i,l:e,c:f};return f&&(r.h=z(Math.atan2(t,n)*180/Math.PI)),a!==void 0&&(r.alpha=a),r},I=({l:e,c:n,h:t,alpha:a},i="lab")=>{t===void 0&&(t=0);let f={mode:i,l:e,a:n?n*Math.cos(t/180*Math.PI):0,b:n?n*Math.sin(t/180*Math.PI):0};return a!==void 0&&(f.alpha=a),f},B0=Math.pow(29,3)/Math.pow(3,3),G0=Math.pow(6,3)/Math.pow(29,3),x={X:.3457/.3585,Y:1,Z:(1-.3457-.3585)/.3585},O={X:.3127/.329,Y:1,Z:(1-.3127-.329)/.329};let Xe=e=>Math.pow(e,3)>G0?Math.pow(e,3):(116*e-16)/B0;const W0=({l:e,a:n,b:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i=(e+16)/116,f=n/500+i,r=i-t/200,d={mode:"xyz65",x:Xe(f)*O.X,y:Xe(i)*O.Y,z:Xe(r)*O.Z};return a!==void 0&&(d.alpha=a),d},ce=e=>S(W0(e)),Ie=e=>e>G0?Math.cbrt(e):(B0*e+16)/116,K0=({x:e,y:n,z:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i=Ie(e/O.X),f=Ie(n/O.Y),r=Ie(t/O.Z),d={mode:"lab65",l:116*f-16,a:500*(i-f),b:200*(f-r)};return a!==void 0&&(d.alpha=a),d},be=e=>{let n=K0(L(e));return e.r===e.b&&e.b===e.g&&(n.a=n.b=0),n},de=1,Q0=1,V=26/180*Math.PI,oe=Math.cos(V),le=Math.sin(V),U0=100/Math.log(139/100),Ve=({l:e,c:n,h:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i={mode:"lab65",l:(Math.exp(e*de/U0)-1)/.0039},f=(Math.exp(.0435*n*Q0*de)-1)/.075,r=f*Math.cos(t/180*Math.PI-V),d=f*Math.sin(t/180*Math.PI-V);return i.a=r*oe-d/.83*le,i.b=r*le+d/.83*oe,a!==void 0&&(i.alpha=a),i},e0=({l:e,a:n,b:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i=n*oe+t*le,f=.83*(t*oe-n*le),r=Math.sqrt(i*i+f*f),d={mode:"dlch",l:U0/de*Math.log(1+.0039*e),c:Math.log(1+.075*r)/(.0435*Q0*de)};return d.c&&(d.h=z((Math.atan2(f,i)+V)/Math.PI*180)),a!==void 0&&(d.alpha=a),d},_0=e=>Ve(X(e,"dlch")),z0=e=>I(e0(e),"dlab"),et={mode:"dlab",parse:["--din99o-lab"],serialize:"--din99o-lab",toMode:{lab65:_0,rgb:e=>ce(_0(e))},fromMode:{lab65:z0,rgb:e=>z0(be(e))},channels:["l","a","b","alpha"],ranges:{l:[0,100],a:[-40.09,45.501],b:[-40.469,44.344]},interpolate:{l,a:l,b:l,alpha:{use:l,fixup:y}}},nt={mode:"dlch",parse:["--din99o-lch"],serialize:"--din99o-lch",toMode:{lab65:Ve,dlab:e=>I(e,"dlab"),rgb:e=>ce(Ve(e))},fromMode:{lab65:e0,dlab:e=>X(e,"dlch"),rgb:e=>e0(be(e))},channels:["l","c","h","alpha"],ranges:{l:[0,100],c:[0,51.484],h:[0,360]},interpolate:{l,c:l,h:{use:l,fixup:N},alpha:{use:l,fixup:y}},difference:{h:he},average:{h:P}};function tt({h:e,s:n,i:t,alpha:a}){e=z(e!==void 0?e:0),n===void 0&&(n=0),t===void 0&&(t=0);let i=Math.abs(e/60%2-1),f;switch(Math.floor(e/60)){case 0:f={r:t*(1+n*(3/(2-i)-1)),g:t*(1+n*(3*(1-i)/(2-i)-1)),b:t*(1-n)};break;case 1:f={r:t*(1+n*(3*(1-i)/(2-i)-1)),g:t*(1+n*(3/(2-i)-1)),b:t*(1-n)};break;case 2:f={r:t*(1-n),g:t*(1+n*(3/(2-i)-1)),b:t*(1+n*(3*(1-i)/(2-i)-1))};break;case 3:f={r:t*(1-n),g:t*(1+n*(3*(1-i)/(2-i)-1)),b:t*(1+n*(3/(2-i)-1))};break;case 4:f={r:t*(1+n*(3*(1-i)/(2-i)-1)),g:t*(1-n),b:t*(1+n*(3/(2-i)-1))};break;case 5:f={r:t*(1+n*(3/(2-i)-1)),g:t*(1-n),b:t*(1+n*(3*(1-i)/(2-i)-1))};break;default:f={r:t*(1-n),g:t*(1-n),b:t*(1-n)}}return f.mode="rgb",a!==void 0&&(f.alpha=a),f}function it({r:e,g:n,b:t,alpha:a}){e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i=Math.max(e,n,t),f=Math.min(e,n,t),r={mode:"hsi",s:e+n+t===0?0:1-3*f/(e+n+t),i:(e+n+t)/3};return i-f!==0&&(r.h=(i===e?(n-t)/(i-f)+(n<t)*6:i===n?(t-e)/(i-f)+2:(e-n)/(i-f)+4)*60),a!==void 0&&(r.alpha=a),r}const at={mode:"hsi",toMode:{rgb:tt},parse:["--hsi"],serialize:"--hsi",fromMode:{rgb:it},channels:["h","s","i","alpha"],ranges:{h:[0,360]},gamut:"rgb",interpolate:{h:{use:l,fixup:N},s:l,i:l,alpha:{use:l,fixup:y}},difference:{h:se},average:{h:P}};function ft({h:e,s:n,l:t,alpha:a}){e=z(e!==void 0?e:0),n===void 0&&(n=0),t===void 0&&(t=0);let i=t+n*(t<.5?t:1-t),f=i-(i-t)*2*Math.abs(e/60%2-1),r;switch(Math.floor(e/60)){case 0:r={r:i,g:f,b:2*t-i};break;case 1:r={r:f,g:i,b:2*t-i};break;case 2:r={r:2*t-i,g:i,b:f};break;case 3:r={r:2*t-i,g:f,b:i};break;case 4:r={r:f,g:2*t-i,b:i};break;case 5:r={r:i,g:2*t-i,b:f};break;default:r={r:2*t-i,g:2*t-i,b:2*t-i}}return r.mode="rgb",a!==void 0&&(r.alpha=a),r}function rt({r:e,g:n,b:t,alpha:a}){e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i=Math.max(e,n,t),f=Math.min(e,n,t),r={mode:"hsl",s:i===f?0:(i-f)/(1-Math.abs(i+f-1)),l:.5*(i+f)};return i-f!==0&&(r.h=(i===e?(n-t)/(i-f)+(n<t)*6:i===n?(t-e)/(i-f)+2:(e-n)/(i-f)+4)*60),a!==void 0&&(r.alpha=a),r}const dt=(e,n)=>{switch(n){case"deg":return+e;case"rad":return e/Math.PI*180;case"grad":return e/10*9;case"turn":return e*360}},ot=new RegExp(`^hsla?\\(\\s*${wn}${Y}${U}${Y}${U}\\s*(?:,\\s*${a0}\\s*)?\\)$`),lt=e=>{let n=e.match(ot);if(!n)return;let t={mode:"hsl"};return n[3]!==void 0?t.h=+n[3]:n[1]!==void 0&&n[2]!==void 0&&(t.h=dt(n[1],n[2])),n[4]!==void 0&&(t.s=Math.min(Math.max(0,n[4]/100),1)),n[5]!==void 0&&(t.l=Math.min(Math.max(0,n[5]/100),1)),n[6]!==void 0?t.alpha=Math.max(0,Math.min(1,n[6]/100)):n[7]!==void 0&&(t.alpha=Math.max(0,Math.min(1,+n[7]))),t};function ut(e,n){if(!n||n[0]!=="hsl"&&n[0]!=="hsla")return;const t={mode:"hsl"},[,a,i,f,r]=n;if(a.type!==o.None){if(a.type===o.Percentage)return;t.h=a.value}if(i.type!==o.None){if(i.type===o.Hue)return;t.s=i.value/100}if(f.type!==o.None){if(f.type===o.Hue)return;t.l=f.value/100}return r.type!==o.None&&(t.alpha=Math.min(1,Math.max(0,r.type===o.Number?r.value:r.value/100))),t}const V0={mode:"hsl",toMode:{rgb:ft},fromMode:{rgb:rt},channels:["h","s","l","alpha"],ranges:{h:[0,360]},gamut:"rgb",parse:[ut,lt],serialize:e=>`hsl(${e.h!==void 0?e.h:"none"} ${e.s!==void 0?e.s*100+"%":"none"} ${e.l!==void 0?e.l*100+"%":"none"}${e.alpha<1?` / ${e.alpha}`:""})`,interpolate:{h:{use:l,fixup:N},s:l,l,alpha:{use:l,fixup:y}},difference:{h:se},average:{h:P}};function en({h:e,s:n,v:t,alpha:a}){e=z(e!==void 0?e:0),n===void 0&&(n=0),t===void 0&&(t=0);let i=Math.abs(e/60%2-1),f;switch(Math.floor(e/60)){case 0:f={r:t,g:t*(1-n*i),b:t*(1-n)};break;case 1:f={r:t*(1-n*i),g:t,b:t*(1-n)};break;case 2:f={r:t*(1-n),g:t,b:t*(1-n*i)};break;case 3:f={r:t*(1-n),g:t*(1-n*i),b:t};break;case 4:f={r:t*(1-n*i),g:t*(1-n),b:t};break;case 5:f={r:t,g:t*(1-n),b:t*(1-n*i)};break;default:f={r:t*(1-n),g:t*(1-n),b:t*(1-n)}}return f.mode="rgb",a!==void 0&&(f.alpha=a),f}function nn({r:e,g:n,b:t,alpha:a}){e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i=Math.max(e,n,t),f=Math.min(e,n,t),r={mode:"hsv",s:i===0?0:1-f/i,v:i};return i-f!==0&&(r.h=(i===e?(n-t)/(i-f)+(n<t)*6:i===n?(t-e)/(i-f)+2:(e-n)/(i-f)+4)*60),a!==void 0&&(r.alpha=a),r}const tn={mode:"hsv",toMode:{rgb:en},parse:["--hsv"],serialize:"--hsv",fromMode:{rgb:nn},channels:["h","s","v","alpha"],ranges:{h:[0,360]},gamut:"rgb",interpolate:{h:{use:l,fixup:N},s:l,v:l,alpha:{use:l,fixup:y}},difference:{h:se},average:{h:P}};function st({h:e,w:n,b:t,alpha:a}){if(n===void 0&&(n=0),t===void 0&&(t=0),n+t>1){let i=n+t;n/=i,t/=i}return en({h:e,s:t===1?1:1-n/(1-t),v:1-t,alpha:a})}function ht(e){let n=nn(e);if(n===void 0)return;let t=n.s!==void 0?n.s:0,a=n.v!==void 0?n.v:0,i={mode:"hwb",w:(1-t)*a,b:1-a};return n.h!==void 0&&(i.h=n.h),n.alpha!==void 0&&(i.alpha=n.alpha),i}function ct(e,n){if(!n||n[0]!=="hwb")return;const t={mode:"hwb"},[,a,i,f,r]=n;if(a.type!==o.None){if(a.type===o.Percentage)return;t.h=a.value}if(i.type!==o.None){if(i.type===o.Hue)return;t.w=i.value/100}if(f.type!==o.None){if(f.type===o.Hue)return;t.b=f.value/100}return r.type!==o.None&&(t.alpha=Math.min(1,Math.max(0,r.type===o.Number?r.value:r.value/100))),t}const bt={mode:"hwb",toMode:{rgb:st},fromMode:{rgb:ht},channels:["h","w","b","alpha"],ranges:{h:[0,360]},gamut:"rgb",parse:[ct],serialize:e=>`hwb(${e.h!==void 0?e.h:"none"} ${e.w!==void 0?e.w*100+"%":"none"} ${e.b!==void 0?e.b*100+"%":"none"}${e.alpha<1?` / ${e.alpha}`:""})`,interpolate:{h:{use:l,fixup:N},w:l,b:l,alpha:{use:l,fixup:y}},difference:{h:Un},average:{h:P}},an=203,pe=.1593017578125,fn=78.84375,ge=.8359375,me=18.8515625,xe=18.6875;function Ce(e){if(e<0)return 0;const n=Math.pow(e,1/fn);return 1e4*Math.pow(Math.max(0,n-ge)/(me-xe*n),1/pe)}function qe(e){if(e<0)return 0;const n=Math.pow(e/1e4,pe);return Math.pow((ge+me*n)/(1+xe*n),fn)}const Le=e=>Math.max(e/an,0),$0=({i:e,t:n,p:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);const i=Ce(e+.008609037037932761*n+.11102962500302593*t),f=Ce(e-.00860903703793275*n-.11102962500302599*t),r=Ce(e+.5600313357106791*n-.32062717498731885*t),d={mode:"xyz65",x:Le(2.070152218389422*i-1.3263473389671556*f+.2066510476294051*r),y:Le(.3647385209748074*i+.680566024947227*f-.0453045459220346*r),z:Le(-.049747207535812*i-.0492609666966138*f+1.1880659249923042*r)};return a!==void 0&&(d.alpha=a),d},Se=(e=0)=>Math.max(e*an,0),w0=({x:e,y:n,z:t,alpha:a})=>{const i=Se(e),f=Se(n),r=Se(t),d=qe(.3592832590121217*i+.6976051147779502*f-.0358915932320289*r),u=qe(-.1920808463704995*i+1.1004767970374323*f+.0753748658519118*r),h=qe(.0070797844607477*i+.0748396662186366*f+.8433265453898765*r),c=.5*d+.5*u,p=1.61376953125*d-3.323486328125*u+1.709716796875*h,g=4.378173828125*d-4.24560546875*u-.132568359375*h,m={mode:"itp",i:c,t:p,p:g};return a!==void 0&&(m.alpha=a),m},pt={mode:"itp",channels:["i","t","p","alpha"],parse:["--ictcp"],serialize:"--ictcp",toMode:{xyz65:$0,rgb:e=>S($0(e))},fromMode:{xyz65:w0,rgb:e=>w0(L(e))},ranges:{i:[0,.581],t:[-.369,.272],p:[-.164,.331]},interpolate:{i:l,t:l,p:l,alpha:{use:l,fixup:y}}},gt=134.03437499999998,mt=16295499532821565e-27,je=e=>{if(e<0)return 0;let n=Math.pow(e/1e4,pe);return Math.pow((ge+me*n)/(1+xe*n),gt)},Oe=(e=0)=>Math.max(e*203,0),rn=({x:e,y:n,z:t,alpha:a})=>{e=Oe(e),n=Oe(n),t=Oe(t);let i=1.15*e-.15*t,f=.66*n+.34*e,r=je(.41478972*i+.579999*f+.014648*t),d=je(-.20151*i+1.120649*f+.0531008*t),u=je(-.0166008*i+.2648*f+.6684799*t),h=(r+d)/2,c={mode:"jab",j:.44*h/(1-.56*h)-mt,a:3.524*r-4.066708*d+.542708*u,b:.199076*r+1.096799*d-1.295875*u};return a!==void 0&&(c.alpha=a),c},xt=134.03437499999998,T0=16295499532821565e-27,Ye=e=>{if(e<0)return 0;let n=Math.pow(e,1/xt);return 1e4*Math.pow((ge-n)/(xe*n-me),1/pe)},Ee=e=>e/203,dn=({j:e,a:n,b:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i=(e+T0)/(.44+.56*(e+T0)),f=Ye(i+.13860504*n+.058047316*t),r=Ye(i-.13860504*n-.058047316*t),d=Ye(i-.096019242*n-.8118919*t),u={mode:"xyz65",x:Ee(1.661373024652174*f-.914523081304348*r+.23136208173913045*d),y:Ee(-.3250758611844533*f+1.571847026732543*r-.21825383453227928*d),z:Ee(-.090982811*f-.31272829*r+1.5227666*d)};return a!==void 0&&(u.alpha=a),u},on=e=>{let n=rn(L(e));return e.r===e.b&&e.b===e.g&&(n.a=n.b=0),n},ln=e=>S(dn(e)),Mt={mode:"jab",channels:["j","a","b","alpha"],parse:["--jzazbz"],serialize:"--jzazbz",fromMode:{rgb:on,xyz65:rn},toMode:{rgb:ln,xyz65:dn},ranges:{j:[0,.222],a:[-.109,.129],b:[-.185,.134]},interpolate:{j:l,a:l,b:l,alpha:{use:l,fixup:y}}},N0=({j:e,a:n,b:t,alpha:a})=>{n===void 0&&(n=0),t===void 0&&(t=0);let i=Math.sqrt(n*n+t*t),f={mode:"jch",j:e,c:i};return i&&(f.h=z(Math.atan2(t,n)*180/Math.PI)),a!==void 0&&(f.alpha=a),f},P0=({j:e,c:n,h:t,alpha:a})=>{t===void 0&&(t=0);let i={mode:"jab",j:e,a:n?n*Math.cos(t/180*Math.PI):0,b:n?n*Math.sin(t/180*Math.PI):0};return a!==void 0&&(i.alpha=a),i},yt={mode:"jch",parse:["--jzczhz"],serialize:"--jzczhz",toMode:{jab:P0,rgb:e=>ln(P0(e))},fromMode:{rgb:e=>N0(on(e)),jab:N0},channels:["j","c","h","alpha"],ranges:{j:[0,.221],c:[0,.19],h:[0,360]},interpolate:{h:{use:l,fixup:N},c:l,j:l,alpha:{use:l,fixup:y}},difference:{h:he},average:{h:P}},Me=Math.pow(29,3)/Math.pow(3,3),f0=Math.pow(6,3)/Math.pow(29,3);let Ae=e=>Math.pow(e,3)>f0?Math.pow(e,3):(116*e-16)/Me;const r0=({l:e,a:n,b:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i=(e+16)/116,f=n/500+i,r=i-t/200,d={mode:"xyz50",x:Ae(f)*x.X,y:Ae(i)*x.Y,z:Ae(r)*x.Z};return a!==void 0&&(d.alpha=a),d},ee=({x:e,y:n,z:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i=D({r:e*3.1341359569958707-n*1.6173863321612538-.4906619460083532*t,g:e*-.978795502912089+n*1.916254567259524+.03344273116131949*t,b:e*.07195537988411677-n*.2289768264158322+1.405386058324125*t});return a!==void 0&&(i.alpha=a),i},un=e=>ee(r0(e)),ne=e=>{let{r:n,g:t,b:a,alpha:i}=A(e),f={mode:"xyz50",x:.436065742824811*n+.3851514688337912*t+.14307845442264197*a,y:.22249319175623702*n+.7168870538238823*t+.06061979053616537*a,z:.013923904500943465*n+.09708128566574634*t+.7140993584005155*a};return i!==void 0&&(f.alpha=i),f},De=e=>e>f0?Math.cbrt(e):(Me*e+16)/116,d0=({x:e,y:n,z:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i=De(e/x.X),f=De(n/x.Y),r=De(t/x.Z),d={mode:"lab",l:116*f-16,a:500*(i-f),b:200*(f-r)};return a!==void 0&&(d.alpha=a),d},sn=e=>{let n=d0(ne(e));return e.r===e.b&&e.b===e.g&&(n.a=n.b=0),n};function vt(e,n){if(!n||n[0]!=="lab")return;const t={mode:"lab"},[,a,i,f,r]=n;if(!(a.type===o.Hue||i.type===o.Hue||f.type===o.Hue))return a.type!==o.None&&(t.l=Math.min(Math.max(0,a.value),100)),i.type!==o.None&&(t.a=i.type===o.Number?i.value:i.value*125/100),f.type!==o.None&&(t.b=f.type===o.Number?f.value:f.value*125/100),r.type!==o.None&&(t.alpha=Math.min(1,Math.max(0,r.type===o.Number?r.value:r.value/100))),t}const o0={mode:"lab",toMode:{xyz50:r0,rgb:un},fromMode:{xyz50:d0,rgb:sn},channels:["l","a","b","alpha"],ranges:{l:[0,100],a:[-100,100],b:[-100,100]},parse:[vt],serialize:e=>`lab(${e.l!==void 0?e.l:"none"} ${e.a!==void 0?e.a:"none"} ${e.b!==void 0?e.b:"none"}${e.alpha<1?` / ${e.alpha}`:""})`,interpolate:{l,a:l,b:l,alpha:{use:l,fixup:y}}},kt={...o0,mode:"lab65",parse:["--lab-d65"],serialize:"--lab-d65",toMode:{xyz65:W0,rgb:ce},fromMode:{xyz65:K0,rgb:be},ranges:{l:[0,100],a:[-86.182,98.234],b:[-107.86,94.477]}};function _t(e,n){if(!n||n[0]!=="lch")return;const t={mode:"lch"},[,a,i,f,r]=n;if(a.type!==o.None){if(a.type===o.Hue)return;t.l=Math.min(Math.max(0,a.value),100)}if(i.type!==o.None&&(t.c=Math.max(0,i.type===o.Number?i.value:i.value*150/100)),f.type!==o.None){if(f.type===o.Percentage)return;t.h=f.value}return r.type!==o.None&&(t.alpha=Math.min(1,Math.max(0,r.type===o.Number?r.value:r.value/100))),t}const l0={mode:"lch",toMode:{lab:I,rgb:e=>un(I(e))},fromMode:{rgb:e=>X(sn(e)),lab:X},channels:["l","c","h","alpha"],ranges:{l:[0,100],c:[0,150],h:[0,360]},parse:[_t],serialize:e=>`lch(${e.l!==void 0?e.l:"none"} ${e.c!==void 0?e.c:"none"} ${e.h!==void 0?e.h:"none"}${e.alpha<1?` / ${e.alpha}`:""})`,interpolate:{h:{use:l,fixup:N},c:l,l,alpha:{use:l,fixup:y}},difference:{h:he},average:{h:P}},zt={...l0,mode:"lch65",parse:["--lch-d65"],serialize:"--lch-d65",toMode:{lab65:e=>I(e,"lab65"),rgb:e=>ce(I(e,"lab65"))},fromMode:{rgb:e=>X(be(e),"lch65"),lab65:e=>X(e,"lch65")},ranges:{l:[0,100],c:[0,133.807],h:[0,360]}},hn=({l:e,u:n,v:t,alpha:a})=>{n===void 0&&(n=0),t===void 0&&(t=0);let i=Math.sqrt(n*n+t*t),f={mode:"lchuv",l:e,c:i};return i&&(f.h=z(Math.atan2(t,n)*180/Math.PI)),a!==void 0&&(f.alpha=a),f},cn=({l:e,c:n,h:t,alpha:a})=>{t===void 0&&(t=0);let i={mode:"luv",l:e,u:n?n*Math.cos(t/180*Math.PI):0,v:n?n*Math.sin(t/180*Math.PI):0};return a!==void 0&&(i.alpha=a),i},bn=(e,n,t)=>4*e/(e+15*n+3*t),pn=(e,n,t)=>9*n/(e+15*n+3*t),$t=bn(x.X,x.Y,x.Z),wt=pn(x.X,x.Y,x.Z),Tt=e=>e<=f0?Me*e:116*Math.cbrt(e)-16,n0=({x:e,y:n,z:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i=Tt(n/x.Y),f=bn(e,n,t),r=pn(e,n,t);!isFinite(f)||!isFinite(r)?i=f=r=0:(f=13*i*(f-$t),r=13*i*(r-wt));let d={mode:"luv",l:i,u:f,v:r};return a!==void 0&&(d.alpha=a),d},Nt=(e,n,t)=>4*e/(e+15*n+3*t),Pt=(e,n,t)=>9*n/(e+15*n+3*t),Ht=Nt(x.X,x.Y,x.Z),Rt=Pt(x.X,x.Y,x.Z),t0=({l:e,u:n,v:t,alpha:a})=>{if(e===void 0&&(e=0),e===0)return{mode:"xyz50",x:0,y:0,z:0};n===void 0&&(n=0),t===void 0&&(t=0);let i=n/(13*e)+Ht,f=t/(13*e)+Rt,r=x.Y*(e<=8?e/Me:Math.pow((e+16)/116,3)),d=r*(9*i)/(4*f),u=r*(12-3*i-20*f)/(4*f),h={mode:"xyz50",x:d,y:r,z:u};return a!==void 0&&(h.alpha=a),h},Xt=e=>hn(n0(ne(e))),It=e=>ee(t0(cn(e))),Ct={mode:"lchuv",toMode:{luv:cn,rgb:It},fromMode:{rgb:Xt,luv:hn},channels:["l","c","h","alpha"],parse:["--lchuv"],serialize:"--lchuv",ranges:{l:[0,100],c:[0,176.956],h:[0,360]},interpolate:{h:{use:l,fixup:N},c:l,l,alpha:{use:l,fixup:y}},difference:{h:he},average:{h:P}},qt={...E,mode:"lrgb",toMode:{rgb:D},fromMode:{rgb:A},parse:["srgb-linear"],serialize:"srgb-linear"},Lt={mode:"luv",toMode:{xyz50:t0,rgb:e=>ee(t0(e))},fromMode:{xyz50:n0,rgb:e=>n0(ne(e))},channels:["l","u","v","alpha"],parse:["--luv"],serialize:"--luv",ranges:{l:[0,100],u:[-84.936,175.042],v:[-125.882,87.243]},interpolate:{l,u:l,v:l,alpha:{use:l,fixup:y}}},gn=({r:e,g:n,b:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i=Math.cbrt(.41222147079999993*e+.5363325363*n+.0514459929*t),f=Math.cbrt(.2119034981999999*e+.6806995450999999*n+.1073969566*t),r=Math.cbrt(.08830246189999998*e+.2817188376*n+.6299787005000002*t),d={mode:"oklab",l:.2104542553*i+.793617785*f-.0040720468*r,a:1.9779984951*i-2.428592205*f+.4505937099*r,b:.0259040371*i+.7827717662*f-.808675766*r};return a!==void 0&&(d.alpha=a),d},ye=e=>{let n=gn(A(e));return e.r===e.b&&e.b===e.g&&(n.a=n.b=0),n},te=({l:e,a:n,b:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i=Math.pow(e*.9999999984505198+.39633779217376786*n+.2158037580607588*t,3),f=Math.pow(e*1.0000000088817609-.10556134232365635*n-.06385417477170591*t,3),r=Math.pow(e*1.0000000546724108-.08948418209496575*n-1.2914855378640917*t,3),d={mode:"lrgb",r:4.076741661347994*i-3.307711590408193*f+.230969928729428*r,g:-1.2684380040921763*i+2.6097574006633715*f-.3413193963102197*r,b:-.004196086541837188*i-.7034186144594493*f+1.7076147009309444*r};return a!==void 0&&(d.alpha=a),d},ve=e=>D(te(e));function i0(e){const a=1.170873786407767;return .5*(a*e-.206+Math.sqrt((a*e-.206)*(a*e-.206)+4*.03*a*e))}function ue(e){return(e*e+.206*e)/(1.170873786407767*(e+.03))}function St(e,n){let t,a,i,f,r,d,u,h;-1.88170328*e-.80936493*n>1?(t=1.19086277,a=1.76576728,i=.59662641,f=.75515197,r=.56771245,d=4.0767416621,u=-3.3077115913,h=.2309699292):1.81444104*e-1.19445276*n>1?(t=.73956515,a=-.45954404,i=.08285427,f=.1254107,r=.14503204,d=-1.2684380046,u=2.6097574011,h=-.3413193965):(t=1.35733652,a=-.00915799,i=-1.1513021,f=-.50559606,r=.00692167,d=-.0041960863,u=-.7034186147,h=1.707614701);let c=t+a*e+i*n+f*e*e+r*e*n,p=.3963377774*e+.2158037573*n,g=-.1055613458*e-.0638541728*n,m=-.0894841775*e-1.291485548*n;{let M=1+c*p,_=1+c*g,v=1+c*m,w=M*M*M,$=_*_*_,H=v*v*v,Z=3*p*M*M,F=3*g*_*_,J=3*m*v*v,B=6*p*p*M,G=6*g*g*_,W=6*m*m*v,j=d*w+u*$+h*H,C=d*Z+u*F+h*J,K=d*B+u*G+h*W;c=c-j*C/(C*C-.5*j*K)}return c}function u0(e,n){let t=St(e,n),a=te({l:1,a:t*e,b:t*n}),i=Math.cbrt(1/Math.max(a.r,a.g,a.b)),f=i*t;return[i,f]}function jt(e,n,t,a,i,f=null){f||(f=u0(e,n));let r;if((t-i)*f[1]-(f[0]-i)*a<=0)r=f[1]*i/(a*f[0]+f[1]*(i-t));else{r=f[1]*(i-1)/(a*(f[0]-1)+f[1]*(i-t));{let d=t-i,u=a,h=.3963377774*e+.2158037573*n,c=-.1055613458*e-.0638541728*n,p=-.0894841775*e-1.291485548*n,g=d+u*h,m=d+u*c,M=d+u*p;{let _=i*(1-r)+r*t,v=r*a,w=_+v*h,$=_+v*c,H=_+v*p,Z=w*w*w,F=$*$*$,J=H*H*H,B=3*g*w*w,G=3*m*$*$,W=3*M*H*H,j=6*g*g*w,C=6*m*m*$,K=6*M*M*H,h0=4.0767416621*Z-3.3077115913*F+.2309699292*J-1,ke=4.0767416621*B-3.3077115913*G+.2309699292*W,Mn=4.0767416621*j-3.3077115913*C+.2309699292*K,c0=ke/(ke*ke-.5*h0*Mn),_e=-h0*c0,b0=-1.2684380046*Z+2.6097574011*F-.3413193965*J-1,ze=-1.2684380046*B+2.6097574011*G-.3413193965*W,yn=-1.2684380046*j+2.6097574011*C-.3413193965*K,p0=ze/(ze*ze-.5*b0*yn),$e=-b0*p0,g0=-.0041960863*Z-.7034186147*F+1.707614701*J-1,we=-.0041960863*B-.7034186147*G+1.707614701*W,vn=-.0041960863*j-.7034186147*C+1.707614701*K,m0=we/(we*we-.5*g0*vn),Te=-g0*m0;_e=c0>=0?_e:1e6,$e=p0>=0?$e:1e6,Te=m0>=0?Te:1e6,r+=Math.min(_e,Math.min($e,Te))}}}return r}function s0(e,n,t=null){t||(t=u0(e,n));let a=t[0],i=t[1];return[i/a,i/(1-a)]}function mn(e,n,t){let a=u0(n,t),i=jt(n,t,e,1,e,a),f=s0(n,t,a),r=.11516993+1/(7.4477897+4.1590124*t+n*(-2.19557347+1.75198401*t+n*(-2.13704948-10.02301043*t+n*(-4.24894561+5.38770819*t+4.69891013*n)))),d=.11239642+1/(1.6132032-.68124379*t+n*(.40370612+.90148123*t+n*(-.27087943+.6122399*t+n*(.00299215-.45399568*t-.14661872*n)))),u=i/Math.min(e*f[0],(1-e)*f[1]),h=e*r,c=(1-e)*d,p=.9*u*Math.sqrt(Math.sqrt(1/(1/(h*h*h*h)+1/(c*c*c*c))));return h=e*.4,c=(1-e)*.8,[Math.sqrt(1/(1/(h*h)+1/(c*c))),p,i]}function H0(e){const n=e.l!==void 0?e.l:0,t=e.a!==void 0?e.a:0,a=e.b!==void 0?e.b:0,i={mode:"okhsl",l:i0(n)};e.alpha!==void 0&&(i.alpha=e.alpha);let f=Math.sqrt(t*t+a*a);if(!f)return i.s=0,i;let[r,d,u]=mn(n,t/f,a/f),h;if(f<d){let c=0,p=.8*r,g=1-p/d;h=(f-c)/(p+g*(f-c))*.8}else{let c=d,p=.2*d*d*1.25*1.25/r,g=1-p/(u-d);h=.8+.2*((f-c)/(p+g*(f-c)))}return h&&(i.s=h,i.h=z(Math.atan2(a,t)*180/Math.PI)),i}function R0(e){let n=e.h!==void 0?e.h:0,t=e.s!==void 0?e.s:0,a=e.l!==void 0?e.l:0;const i={mode:"oklab",l:ue(a)};if(e.alpha!==void 0&&(i.alpha=e.alpha),!t||a===1)return i.a=i.b=0,i;let f=Math.cos(n/180*Math.PI),r=Math.sin(n/180*Math.PI),[d,u,h]=mn(i.l,f,r),c,p,g,m;t<.8?(c=1.25*t,p=0,g=.8*d,m=1-g/u):(c=5*(t-.8),p=u,g=.2*u*u*1.25*1.25/d,m=1-g/(h-u));let M=p+c*g/(1-m*c);return i.a=M*f,i.b=M*r,i}const Ot={...V0,mode:"okhsl",channels:["h","s","l","alpha"],parse:["--okhsl"],serialize:"--okhsl",fromMode:{oklab:H0,rgb:e=>H0(ye(e))},toMode:{oklab:R0,rgb:e=>ve(R0(e))}};function X0(e){let n=e.l!==void 0?e.l:0,t=e.a!==void 0?e.a:0,a=e.b!==void 0?e.b:0,i=Math.sqrt(t*t+a*a),f=i?t/i:1,r=i?a/i:1,[d,u]=s0(f,r),h=.5,c=1-h/d,p=u/(i+n*u),g=p*n,m=p*i,M=ue(g),_=m*M/g,v=te({l:M,a:f*_,b:r*_}),w=Math.cbrt(1/Math.max(v.r,v.g,v.b,0));n=n/w,i=i/w*i0(n)/n,n=i0(n);const $={mode:"okhsv",s:i?(h+u)*m/(u*h+u*c*m):0,v:n?n/g:0};return $.s&&($.h=z(Math.atan2(a,t)*180/Math.PI)),e.alpha!==void 0&&($.alpha=e.alpha),$}function I0(e){const n={mode:"oklab"};e.alpha!==void 0&&(n.alpha=e.alpha);const t=e.h!==void 0?e.h:0,a=e.s!==void 0?e.s:0,i=e.v!==void 0?e.v:0,f=Math.cos(t/180*Math.PI),r=Math.sin(t/180*Math.PI),[d,u]=s0(f,r),h=.5,c=1-h/d,p=1-a*h/(h+u-u*c*a),g=a*u*h/(h+u-u*c*a),m=ue(p),M=g*m/p,_=te({l:m,a:f*M,b:r*M}),v=Math.cbrt(1/Math.max(_.r,_.g,_.b,0)),w=ue(i*p),$=g*w/p;return n.l=w*v,n.a=$*f*v,n.b=$*r*v,n}const Yt={...tn,mode:"okhsv",channels:["h","s","v","alpha"],parse:["--okhsv"],serialize:"--okhsv",fromMode:{oklab:X0,rgb:e=>X0(ye(e))},toMode:{oklab:I0,rgb:e=>ve(I0(e))}};function Et(e,n){if(!n||n[0]!=="oklab")return;const t={mode:"oklab"},[,a,i,f,r]=n;if(!(a.type===o.Hue||i.type===o.Hue||f.type===o.Hue))return a.type!==o.None&&(t.l=Math.min(Math.max(0,a.type===o.Number?a.value:a.value/100),1)),i.type!==o.None&&(t.a=i.type===o.Number?i.value:i.value*.4/100),f.type!==o.None&&(t.b=f.type===o.Number?f.value:f.value*.4/100),r.type!==o.None&&(t.alpha=Math.min(1,Math.max(0,r.type===o.Number?r.value:r.value/100))),t}const At={...o0,mode:"oklab",toMode:{lrgb:te,rgb:ve},fromMode:{lrgb:gn,rgb:ye},ranges:{l:[0,1],a:[-.4,.4],b:[-.4,.4]},parse:[Et],serialize:e=>`oklab(${e.l!==void 0?e.l:"none"} ${e.a!==void 0?e.a:"none"} ${e.b!==void 0?e.b:"none"}${e.alpha<1?` / ${e.alpha}`:""})`};function Dt(e,n){if(!n||n[0]!=="oklch")return;const t={mode:"oklch"},[,a,i,f,r]=n;if(a.type!==o.None){if(a.type===o.Hue)return;t.l=Math.min(Math.max(0,a.type===o.Number?a.value:a.value/100),1)}if(i.type!==o.None&&(t.c=Math.max(0,i.type===o.Number?i.value:i.value*.4/100)),f.type!==o.None){if(f.type===o.Percentage)return;t.h=f.value}return r.type!==o.None&&(t.alpha=Math.min(1,Math.max(0,r.type===o.Number?r.value:r.value/100))),t}const Zt={...l0,mode:"oklch",toMode:{oklab:e=>I(e,"oklab"),rgb:e=>ve(I(e,"oklab"))},fromMode:{rgb:e=>X(ye(e),"oklch"),oklab:e=>X(e,"oklch")},parse:[Dt],serialize:e=>`oklch(${e.l!==void 0?e.l:"none"} ${e.c!==void 0?e.c:"none"} ${e.h!==void 0?e.h:"none"}${e.alpha<1?` / ${e.alpha}`:""})`,ranges:{l:[0,1],c:[0,.4],h:[0,360]}},C0=e=>{let{r:n,g:t,b:a,alpha:i}=A(e),f={mode:"xyz65",x:.486570948648216*n+.265667693169093*t+.1982172852343625*a,y:.2289745640697487*n+.6917385218365062*t+.079286914093745*a,z:0*n+.0451133818589026*t+1.043944368900976*a};return i!==void 0&&(f.alpha=i),f},q0=({x:e,y:n,z:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i=D({r:e*2.4934969119414263-n*.9313836179191242-.402710784450717*t,g:e*-.8294889695615749+n*1.7626640603183465+.0236246858419436*t,b:e*.0358458302437845-n*.0761723892680418+.9568845240076871*t},"p3");return a!==void 0&&(i.alpha=a),i},Ft={...E,mode:"p3",parse:["display-p3"],serialize:"display-p3",fromMode:{rgb:e=>q0(L(e)),xyz65:q0},toMode:{rgb:e=>S(C0(e)),xyz65:C0}},Ze=e=>{let n=Math.abs(e);return n>=1/512?Math.sign(e)*Math.pow(n,1/1.8):16*e},L0=({x:e,y:n,z:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i={mode:"prophoto",r:Ze(e*1.3457868816471585-n*.2555720873797946-.0511018649755453*t),g:Ze(e*-.5446307051249019+n*1.5082477428451466+.0205274474364214*t),b:Ze(e*0+n*0+1.2119675456389452*t)};return a!==void 0&&(i.alpha=a),i},Fe=(e=0)=>{let n=Math.abs(e);return n>=16/512?Math.sign(e)*Math.pow(n,1.8):e/16},S0=e=>{let n=Fe(e.r),t=Fe(e.g),a=Fe(e.b),i={mode:"xyz50",x:.7977666449006423*n+.1351812974005331*t+.0313477341283922*a,y:.2880748288194013*n+.7118352342418731*t+899369387256e-16*a,z:0*n+0*t+.8251046025104602*a};return e.alpha!==void 0&&(i.alpha=e.alpha),i},Jt={...E,mode:"prophoto",parse:["prophoto-rgb"],serialize:"prophoto-rgb",fromMode:{xyz50:L0,rgb:e=>L0(ne(e))},toMode:{xyz50:S0,rgb:e=>ee(S0(e))}},j0=1.09929682680944,Bt=.018053968510807,Je=e=>{const n=Math.abs(e);return n>Bt?(Math.sign(e)||1)*(j0*Math.pow(n,.45)-(j0-1)):4.5*e},O0=({x:e,y:n,z:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);let i={mode:"rec2020",r:Je(e*1.7166511879712683-n*.3556707837763925-.2533662813736599*t),g:Je(e*-.6666843518324893+n*1.6164812366349395+.0157685458139111*t),b:Je(e*.0176398574453108-n*.0427706132578085+.9421031212354739*t)};return a!==void 0&&(i.alpha=a),i},Y0=1.09929682680944,Gt=.018053968510807,Be=(e=0)=>{let n=Math.abs(e);return n<Gt*4.5?e/4.5:(Math.sign(e)||1)*Math.pow((n+Y0-1)/Y0,1/.45)},E0=e=>{let n=Be(e.r),t=Be(e.g),a=Be(e.b),i={mode:"xyz65",x:.6369580483012911*n+.1446169035862083*t+.1688809751641721*a,y:.262700212011267*n+.6779980715188708*t+.059301716469862*a,z:0*n+.0280726930490874*t+1.0609850577107909*a};return e.alpha!==void 0&&(i.alpha=e.alpha),i},Wt={...E,mode:"rec2020",fromMode:{xyz65:O0,rgb:e=>O0(L(e))},toMode:{xyz65:E0,rgb:e=>S(E0(e))},parse:["rec2020"],serialize:"rec2020"},q=.0037930732552754493,xn=Math.cbrt(q),Ge=e=>Math.cbrt(e)-xn,Kt=e=>{const{r:n,g:t,b:a,alpha:i}=A(e),f=Ge(.3*n+.622*t+.078*a+q),r=Ge(.23*n+.692*t+.078*a+q),d=Ge(.2434226892454782*n+.2047674442449682*t+.5518098665095535*a+q),u={mode:"xyb",x:(f-r)/2,y:(f+r)/2,b:d-(f+r)/2};return i!==void 0&&(u.alpha=i),u},We=e=>Math.pow(e+xn,3),Qt=({x:e,y:n,b:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);const i=We(e+n)-q,f=We(n-e)-q,r=We(t+n)-q,d=D({r:11.031566904639861*i-9.866943908131562*f-.16462299650829934*r,g:-3.2541473810744237*i+4.418770377582723*f-.16462299650829934*r,b:-3.6588512867136815*i+2.7129230459360922*f+1.9459282407775895*r});return a!==void 0&&(d.alpha=a),d},Ut={mode:"xyb",channels:["x","y","b","alpha"],parse:["--xyb"],serialize:"--xyb",toMode:{rgb:Qt},fromMode:{rgb:Kt},ranges:{x:[-.0154,.0281],y:[0,.8453],b:[-.2778,.388]},interpolate:{x:l,y:l,b:l,alpha:{use:l,fixup:y}}},Vt={mode:"xyz50",parse:["xyz-d50"],serialize:"xyz-d50",toMode:{rgb:ee,lab:d0},fromMode:{rgb:ne,lab:r0},channels:["x","y","z","alpha"],ranges:{x:[0,.964],y:[0,.999],z:[0,.825]},interpolate:{x:l,y:l,z:l,alpha:{use:l,fixup:y}}},ei=e=>{let{x:n,y:t,z:a,alpha:i}=e;n===void 0&&(n=0),t===void 0&&(t=0),a===void 0&&(a=0);let f={mode:"xyz50",x:1.0479298208405488*n+.0229467933410191*t-.0501922295431356*a,y:.0296278156881593*n+.990434484573249*t-.0170738250293851*a,z:-.0092430581525912*n+.0150551448965779*t+.7518742899580008*a};return i!==void 0&&(f.alpha=i),f},ni=e=>{let{x:n,y:t,z:a,alpha:i}=e;n===void 0&&(n=0),t===void 0&&(t=0),a===void 0&&(a=0);let f={mode:"xyz65",x:.9554734527042182*n-.0230985368742614*t+.0632593086610217*a,y:-.0283697069632081*n+1.0099954580058226*t+.021041398966943*a,z:.0123140016883199*n-.0205076964334779*t+1.3303659366080753*a};return i!==void 0&&(f.alpha=i),f},ti={mode:"xyz65",toMode:{rgb:S,xyz50:ei},fromMode:{rgb:L,xyz50:ni},ranges:{x:[0,.95],y:[0,1],z:[0,1.088]},channels:["x","y","z","alpha"],parse:["xyz","xyz-d65"],serialize:"xyz-d65",interpolate:{x:l,y:l,z:l,alpha:{use:l,fixup:y}}},ii=({r:e,g:n,b:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);const i={mode:"yiq",y:.29889531*e+.58662247*n+.11448223*t,i:.59597799*e-.2741761*n-.32180189*t,q:.21147017*e-.52261711*n+.31114694*t};return a!==void 0&&(i.alpha=a),i},ai=({y:e,i:n,q:t,alpha:a})=>{e===void 0&&(e=0),n===void 0&&(n=0),t===void 0&&(t=0);const i={mode:"rgb",r:e+.95608445*n+.6208885*t,g:e-.27137664*n-.6486059*t,b:e-1.10561724*n+1.70250126*t};return a!==void 0&&(i.alpha=a),i},fi={mode:"yiq",toMode:{rgb:ai},fromMode:{rgb:ii},channels:["y","i","q","alpha"],parse:["--yiq"],serialize:"--yiq",ranges:{i:[-.595,.595],q:[-.522,.522]},interpolate:{y:l,i:l,q:l,alpha:{use:l,fixup:y}}},ri=e=>Math.max(0,Math.min(1,e||0)),Ke=e=>Math.round(ri(e)*255),di=D0("rgb"),oi=e=>{if(e===void 0)return;let n=Ke(e.r),t=Ke(e.g),a=Ke(e.b);return"#"+(1<<24|n<<16|t<<8|a).toString(16).slice(1)},li=e=>oi(di(e));b(Jn);b(Vn);b(et);b(nt);b(at);b(V0);b(tn);b(bt);b(pt);b(Mt);b(yt);b(o0);b(kt);b(l0);b(zt);b(Ct);b(qt);b(Lt);b(Ot);b(Yt);b(At);b(Zt);b(Ft);b(Jt);b(Wt);b(E);b(Ut);b(Vt);b(ti);b(fi);export{D0 as c,li as f,Yn as p};
|
|
5
|
+
//# sourceMappingURL=index-D5UX5AHP.js.map
|