@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 @@
|
|
|
1
|
+
{"version":3,"file":"theme-builder-_PghOvuC.js","sources":["../../src/routes/settings/-components/theme-colors-css-display.tsx","../../src/routes/settings/-components/theme-colors-editor.tsx","../../src/routes/settings/-components/theme-colors-preview.tsx","../../src/routes/settings/-theme-utils/palette-neural-net.ts","../../src/routes/settings/-theme-utils/palette-generator.ts","../../src/routes/settings/-components/theme-palette-editor.tsx","../../src/routes/settings/theme-builder.tsx?tsr-split=component"],"sourcesContent":["import type { ThemeConfig } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport { generateCssFromThemeConfig } from '@baseplate-dev/project-builder-lib';\nimport { TextareaField } from '@baseplate-dev/ui-components';\nimport { clsx } from 'clsx';\nimport { useMemo } from 'react';\nimport { useWatch } from 'react-hook-form';\n\ninterface ThemeColorsCssDisplayProps {\n className?: string;\n control: Control<ThemeConfig>;\n}\n\nfunction convertRecordToCss(record: Record<string, string>): string {\n return Object.entries(record)\n .map(([key, value]) => ` ${key}: ${value};`)\n .join('\\n');\n}\n\nexport function ThemeColorsCssDisplay({\n className,\n control,\n}: ThemeColorsCssDisplayProps): React.JSX.Element {\n const colors = useWatch({ control, name: `colors` });\n\n const cssValue = useMemo(\n () =>\n `\n:root {\n${convertRecordToCss(generateCssFromThemeConfig(colors.light))}\n}\n\n.dark, html[data-theme='dark'] {\n${convertRecordToCss(generateCssFromThemeConfig(colors.dark))}\n}\n `.trim(),\n [colors],\n );\n\n return (\n <div className={clsx('', className)}>\n <TextareaField className=\"h-60\" readOnly value={cssValue} />\n </div>\n );\n}\n","import type { ThemeConfig } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control, UseFormSetValue } from 'react-hook-form';\n\nimport {\n convertHexToOklch,\n convertOklchToColorName,\n convertOklchToHex,\n getDefaultThemeColorFromShade,\n THEME_COLORS,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n Button,\n ColorPickerFieldController,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '@baseplate-dev/ui-components';\nimport { clsx } from 'clsx';\nimport { useWatch } from 'react-hook-form';\nimport { MdInfo, MdRestartAlt } from 'react-icons/md';\n\ninterface ThemeColorEditorProps {\n className?: string;\n control: Control<ThemeConfig>;\n mode: 'light' | 'dark';\n setValue: UseFormSetValue<ThemeConfig>;\n}\n\nexport function ThemeColorsEditor({\n className,\n control,\n mode,\n setValue,\n}: ThemeColorEditorProps): React.JSX.Element {\n const themeColorEntries = Object.entries(THEME_COLORS);\n const palettes = useWatch({ control, name: 'palettes' });\n const themeColors = useWatch({ control, name: `colors.${mode}` });\n return (\n <div className={clsx('flex w-full max-w-xl gap-4', className)}>\n <div className=\"grid flex-1 grid-cols-1 gap-4 sm:grid-cols-2\">\n {themeColorEntries.map(([key, config], idx) => {\n const themeKey = key as keyof typeof THEME_COLORS;\n const lastCategoryKey =\n idx > 0 ? themeColorEntries[idx - 1][1].groupKey : undefined;\n const shouldStartNewColumn = lastCategoryKey !== config.groupKey;\n const currentColor = themeColors[themeKey];\n const defaultValue = getDefaultThemeColorFromShade(\n palettes,\n mode,\n themeKey,\n );\n return (\n <div\n className={clsx(\n shouldStartNewColumn ? 'col-start-1' : undefined,\n 'relative',\n )}\n key={key}\n >\n <ColorPickerFieldController\n control={control}\n className=\"w-full\"\n wrapperClassName=\"flex-col items-start\"\n label={\n <div className=\"flex h-6 w-full items-center gap-1\">\n <div>{config.name}</div>\n <Tooltip delayDuration={500}>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Color Info\"\n className=\"opacity-30\"\n >\n <MdInfo />\n </Button>\n </TooltipTrigger>\n <TooltipContent\n align=\"start\"\n side=\"bottom\"\n className=\"max-w-[400px]\"\n >\n <div className=\"font-normal\">{config.description}</div>\n </TooltipContent>\n </Tooltip>\n </div>\n }\n parseColor={convertOklchToHex}\n serializeColor={convertHexToOklch}\n formatColorName={(color) => {\n const baseShade = Object.entries(palettes.base.shades).find(\n ([, shadeColor]) => shadeColor === color,\n )?.[0];\n if (baseShade) {\n return `base-${baseShade}`;\n }\n const primaryShade = Object.entries(\n palettes.primary.shades,\n ).find(([, shadeColor]) => shadeColor === color)?.[0];\n if (primaryShade) {\n return `primary-${primaryShade}`;\n }\n return convertOklchToColorName(color);\n }}\n name={`colors.${mode}.${themeKey}`}\n />\n {currentColor !== defaultValue && (\n <Button\n className=\"absolute right-2 bottom-1\"\n onClick={() => {\n setValue(`colors.${mode}.${themeKey}`, defaultValue);\n }}\n size=\"icon\"\n variant=\"ghost\"\n aria-label=\"Reset Color\"\n >\n <MdRestartAlt />\n </Button>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import type { ThemeConfig } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport { generateCssFromThemeConfig } from '@baseplate-dev/project-builder-lib';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Combobox,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxInput,\n ComboboxItem,\n} from '@baseplate-dev/ui-components';\nimport { clsx } from 'clsx';\nimport { useWatch } from 'react-hook-form';\n\ninterface ThemeColorsPreviewProps {\n className?: string;\n control: Control<ThemeConfig>;\n mode: 'light' | 'dark';\n}\n\nexport function ThemeColorsPreview({\n className,\n control,\n mode,\n}: ThemeColorsPreviewProps): React.JSX.Element {\n const colors = useWatch({\n control,\n name: `colors.${mode}`,\n });\n const colorCss = generateCssFromThemeConfig(colors);\n return (\n <div\n className={clsx(\n 'size-full rounded-xl border border-border bg-background p-4',\n className,\n )}\n style={colorCss}\n >\n <Card>\n <CardHeader>\n <CardTitle>Color Preview</CardTitle>\n <CardDescription>\n This is a preview of how your theme colors will be applied on\n various elements\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <PreviewSectionTitle>Paragraph Text</PreviewSectionTitle>\n <p className=\"text-base\">\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin\n faucibus.\n </p>\n </div>\n <div>\n <PreviewSectionTitle>Combobox</PreviewSectionTitle>\n <Combobox>\n <ComboboxInput placeholder={'Select an option'} />\n <ComboboxContent style={colorCss}>\n <ComboboxItem value=\"opt1\" label=\"Option 1\">\n Option 1\n </ComboboxItem>\n <ComboboxItem value=\"green\" label=\"Option 2\">\n Option 2\n </ComboboxItem>\n <ComboboxItem value=\"blue\" label=\"Option 3\">\n Option 3\n </ComboboxItem>\n <ComboboxEmpty>No results found</ComboboxEmpty>\n </ComboboxContent>\n </Combobox>\n </div>\n <div>\n <PreviewSectionTitle>Badges</PreviewSectionTitle>\n <div className=\"flex flex-wrap gap-1\">\n <Badge variant=\"default\">Default</Badge>\n <Badge variant=\"destructive\">Destructive</Badge>\n <Badge variant=\"secondary\">Secondary</Badge>\n <Badge variant=\"outline\">Outline</Badge>\n </div>\n </div>\n <div>\n <PreviewSectionTitle>Buttons</PreviewSectionTitle>\n <div className=\"flex flex-wrap gap-2 rounded-lg border border-border p-1\">\n <Button type=\"button\">Primary</Button>\n <Button variant=\"destructive\" type=\"button\">\n Destructive\n </Button>\n <Button variant=\"ghost\" type=\"button\">\n Ghost\n </Button>\n <Button variant=\"link\" type=\"button\">\n Link\n </Button>\n <Button variant=\"secondary\" type=\"button\">\n Secondary\n </Button>\n <Button variant=\"outline\" type=\"button\">\n Outline\n </Button>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n\nfunction PreviewSectionTitle({\n children,\n}: {\n children: React.ReactNode;\n}): React.JSX.Element {\n return <h4 className=\"text-lg font-semibold\">{children}</h4>;\n}\n","/* eslint-disable unicorn/numeric-separators-style */\nexport function generatePaletteNN(color: {\n r: number;\n g: number;\n b: number;\n}): Record<string, number> {\n const input = new Float32Array([color.r, color.g, color.b]);\n return {\n '50-r':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 1.8661608695983887 +\n (1.969373345375061 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) +\n (0.4601062536239624 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (0.7962396740913391 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '50-g':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 1.9256014823913574 +\n (1.231925129890442 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) +\n (1.3603883981704712 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (0.8378368616104126 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '50-b':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 1.5751663446426392 +\n (0.6084778904914856 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) +\n (1.0512851476669312 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (1.9236465692520142 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '100-r':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 1.6104178428649902 +\n (2.411083698272705 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (0.4946855306625366 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (0.5684743523597717 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '100-g':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 1.6873022317886353 +\n (0.7176924347877502 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) +\n (1.6131407022476196 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (0.15697577595710754 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '100-b':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 1.0808522701263428 -\n (0.09388591349124908 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) +\n (0.5177313685417175 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (2.6253278255462646 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '200-r':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 1.3480290174484253 +\n (2.2088170051574707 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (1.1226733922958374 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (0.41870957612991333 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '200-g':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 1.3919278383255005 +\n (0.2666841745376587 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) +\n (1.5987523794174194 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) -\n (0.23637670278549194 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '200-b':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 0.6176453232765198 -\n (0.6029531359672546 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) +\n (0.21029342710971832 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (2.906541109085083 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '300-r':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 0.9194338321685791 +\n (2.3936944007873535 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (1.68363356590271 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (0.36374539136886597 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '300-g':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 1.1811708211898804 -\n (0.08378893882036209 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) +\n (1.4275716543197632 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) -\n (0.6511568427085876 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '300-b':\n 1 /\n (1 +\n 1 /\n Math.exp(\n -0.04160493612289429 -\n (1.0422184467315674 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) +\n (0.1739543229341507 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (3.306165933609009 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '400-r':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 0.5908379554748535 +\n (2.6282155513763428 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (2.483553886413574 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (0.16029347479343414 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '400-g':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 0.9054368138313293 -\n (0.38720616698265076 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) +\n (1.231947422027588 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) -\n (1.0837976932525635 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '400-b':\n 1 /\n (1 +\n 1 /\n Math.exp(\n -0.6404189467430115 -\n (1.6898466348648071 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (0.029696132987737656 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (3.7177767753601074 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '500-r':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 0.3420727550983429 +\n (2.987776756286621 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (3.3403704166412354 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) -\n (0.07194828987121582 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '500-g':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 0.5289734601974487 -\n (0.5567987561225891 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) +\n (1.3352314233779907 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) -\n (1.4835448265075684 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '500-b':\n 1 /\n (1 +\n 1 /\n Math.exp(\n -1.2478309869766235 -\n (2.2976744174957275 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (0.30013492703437805 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (4.339084625244141 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '600-r':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 0.18572008609771729 +\n (2.5128233432769775 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (3.407212495803833 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) -\n (0.20814435184001923 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '600-g':\n 1 /\n (1 +\n 1 /\n Math.exp(\n 0.15741883218288422 -\n (0.7273809909820557 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) +\n (1.2500137090682983 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) -\n (1.6501106023788452 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '600-b':\n 1 /\n (1 +\n 1 /\n Math.exp(\n -1.3073996305465698 -\n (2.5112154483795166 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (0.7157139182090759 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (4.086366176605225 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '700-r':\n 1 /\n (1 +\n 1 /\n Math.exp(\n -0.25121745467185974 +\n (1.7795124053955078 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (2.7557551860809326 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) -\n (0.0411522202193737 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '700-g':\n 1 /\n (1 +\n 1 /\n Math.exp(\n -0.43503373861312866 -\n (0.6766132712364197 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) +\n (1.150789737701416 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) -\n (1.3406033515930176 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '700-b':\n 1 /\n (1 +\n 1 /\n Math.exp(\n -1.1124053001403809 -\n (2.359389305114746 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (0.943118691444397 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (3.267453908920288 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '800-r':\n 1 /\n (1 +\n 1 /\n Math.exp(\n -0.42729225754737854 +\n (1.2738885879516602 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (2.573699474334717 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) -\n (0.11818580329418182 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '800-g':\n 1 /\n (1 +\n 1 /\n Math.exp(\n -0.6730203628540039 -\n (0.770199716091156 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) +\n (0.9060920476913452 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) -\n (1.2600882053375244 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '800-b':\n 1 /\n (1 +\n 1 /\n Math.exp(\n -1.32567298412323 -\n (1.9301948547363281 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (0.8552113175392151 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (2.6513888835906982 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '900-r':\n 1 /\n (1 +\n 1 /\n Math.exp(\n -0.6309270858764648 +\n (1.0235852003097534 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (2.4659388065338135 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) -\n (0.15058130025863647 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '900-g':\n 1 /\n (1 +\n 1 /\n Math.exp(\n -0.9010928273200989 -\n (0.7559532523155212 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) +\n (0.7665435075759888 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) -\n (1.1884112358093262 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '900-b':\n 1 /\n (1 +\n 1 /\n Math.exp(\n -1.5088001489639282 -\n (1.5986618995666504 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (0.7353832125663757 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (2.180158853530884 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '950-r':\n 1 /\n (1 +\n 1 /\n Math.exp(\n -1.166185975074768 +\n (0.5363732576370239 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (2.587523937225342 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) -\n (0.061746854335069656 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '950-g':\n 1 /\n (1 +\n 1 /\n Math.exp(\n -1.2907893657684326 -\n (1.3924223184585571 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) +\n (0.5465696454048157 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) -\n (1.2647709846496582 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n '950-b':\n 1 /\n (1 +\n 1 /\n Math.exp(\n -1.8633685111999512 -\n (1.8034374713897705 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.5648569464683533 +\n 8.592248916625977 * (input[0] || 0) -\n 2.0615885257720947 * (input[1] || 0) -\n 7.465658187866211 * (input[2] || 0),\n )) -\n (0.8856748938560486 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.6313956379890442 -\n 7.673094272613525 * (input[0] || 0) +\n 8.008654594421387 * (input[1] || 0) -\n 1.6121777296066284 * (input[2] || 0),\n )) +\n (1.8510282039642334 * 1) /\n (1 +\n 1 /\n Math.exp(\n 0.08400232344865799 -\n 0.9345706105232239 * (input[0] || 0) -\n 7.6551032066345215 * (input[1] || 0) +\n 8.717894554138184 * (input[2] || 0),\n )),\n )),\n };\n}\n","import type { ColorPalette } from '@baseplate-dev/project-builder-lib';\nimport type { Rgb } from 'culori';\n\nimport { PALETTE_SHADES } from '@baseplate-dev/project-builder-lib';\nimport { converter, formatHex } from 'culori';\n\nimport { generatePaletteNN } from './palette-neural-net.js';\n\nfunction getPaletteKey(shade: string, component: string): string {\n return `${shade}-${component}`;\n}\n\nexport function generatePalette(baseColor: string): ColorPalette {\n const convertToRgb = converter('rgb');\n\n const rgb = convertToRgb(baseColor);\n\n if (!rgb) {\n throw new Error(`Invalid color: ${baseColor}`);\n }\n\n const newPalette = generatePaletteNN(rgb);\n\n return Object.fromEntries(\n PALETTE_SHADES.map((shade) => {\n const shadeRgb: Rgb = {\n mode: 'rgb',\n r: newPalette[getPaletteKey(shade, 'r')],\n g: newPalette[getPaletteKey(shade, 'g')],\n b: newPalette[getPaletteKey(shade, 'b')],\n };\n return [shade, formatHex(shadeRgb)];\n }),\n ) as ColorPalette;\n}\n","import type {\n ColorPaletteName,\n PaletteShades,\n ThemeConfig,\n} from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type {\n Control,\n UseFormGetValues,\n UseFormSetValue,\n} from 'react-hook-form';\n\nimport {\n COLOR_PALETTES,\n convertHexToOklch,\n convertOklchToHex,\n PALETTE_SHADES,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n Button,\n ColorPickerFieldController,\n ComboboxFieldController,\n} from '@baseplate-dev/ui-components';\nimport { capitalize } from 'inflection';\nimport { useCallback } from 'react';\nimport { useWatch } from 'react-hook-form';\n\nimport { generatePalette } from '../-theme-utils/palette-generator.js';\n\ninterface ThemePaletteEditorProps {\n control: Control<ThemeConfig>;\n getValues: UseFormGetValues<ThemeConfig>;\n setValue: UseFormSetValue<ThemeConfig>;\n onShadesChange?: (shades: Partial<PaletteShades>) => void;\n type: 'base' | 'primary';\n}\n\nexport function ThemePaletteEditor({\n control,\n getValues,\n setValue,\n onShadesChange,\n type,\n}: ThemePaletteEditorProps): React.JSX.Element {\n const paletteOptions = [\n { value: 'custom', label: 'Custom Base' },\n ...Object.keys(COLOR_PALETTES).map((key) => ({\n value: key,\n label: capitalize(key),\n })),\n ];\n\n const paletteName = useWatch({\n control,\n name: `palettes.${type}.paletteName`,\n });\n\n const handlePaletteNameChange = useCallback(\n (name: string | null) => {\n if (!name || !Object.prototype.hasOwnProperty.call(COLOR_PALETTES, name))\n return;\n const palette = COLOR_PALETTES[name as ColorPaletteName];\n setValue(`palettes.${type}.shades`, palette);\n onShadesChange?.(palette);\n },\n [setValue, onShadesChange, type],\n );\n\n const handleCustomPaletteGenerate = (): void => {\n const baseColor = getValues(`palettes.${type}.customBase`);\n if (!baseColor) return;\n const newPalette = generatePalette(baseColor);\n setValue(`palettes.${type}.shades`, newPalette);\n onShadesChange?.(newPalette);\n };\n\n return (\n <div className=\"flex max-w-fit flex-col gap-4\">\n <ComboboxFieldController\n name={`palettes.${type}.paletteName`}\n control={control}\n options={paletteOptions}\n placeholder=\"Choose a base palette\"\n onChange={handlePaletteNameChange}\n />\n {paletteName === 'custom' && (\n <div className=\"flex max-w-xl items-center justify-between\">\n <ColorPickerFieldController\n className=\"flex-1 space-x-1\"\n wrapperClassName=\"items-center\"\n control={control}\n name={`palettes.${type}.customBase`}\n label=\"Custom Base Color\"\n placeholder=\"Choose a color\"\n parseColor={convertOklchToHex}\n serializeColor={convertHexToOklch}\n />\n <Button\n variant=\"secondary\"\n onClick={handleCustomPaletteGenerate}\n size=\"sm\"\n >\n Generate\n </Button>\n </div>\n )}\n <div className=\"flex gap-3\">\n {PALETTE_SHADES.map((shade) => (\n <ColorPickerFieldController\n key={shade}\n wrapperClassName=\"flex flex-col items-center\"\n hideText\n control={control}\n name={`palettes.${type}.shades.${shade}`}\n label={shade}\n parseColor={convertOklchToHex}\n serializeColor={convertHexToOklch}\n onChange={() =>\n onShadesChange?.(getValues(`palettes.${type}.shades`))\n }\n />\n ))}\n </div>\n </div>\n );\n}\n","import type { ThemeConfig } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\n\nimport {\n createThemeSchema,\n generateDefaultTheme,\n generateThemeColorsFromShade,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n useBlockUnsavedChangesNavigate,\n useDefinitionSchema,\n useProjectDefinition,\n useResettableForm,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Alert,\n AlertDescription,\n AlertTitle,\n Button,\n FormActionBar,\n SectionList,\n SectionListSection,\n SectionListSectionContent,\n SectionListSectionDescription,\n SectionListSectionHeader,\n SectionListSectionTitle,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { createFileRoute } from '@tanstack/react-router';\nimport { useCallback, useMemo, useState } from 'react';\nimport { MdConstruction } from 'react-icons/md';\n\nimport { ThemeColorsCssDisplay } from './-components/theme-colors-css-display.js';\nimport { ThemeColorsEditor } from './-components/theme-colors-editor.js';\nimport { ThemeColorsPreview } from './-components/theme-colors-preview.js';\nimport { ThemePaletteEditor } from './-components/theme-palette-editor.js';\n\nexport const Route = createFileRoute('/settings/theme-builder')({\n component: ThemeBuilderPage,\n beforeLoad: () => ({\n getTitle: () => 'Theme Builder',\n }),\n});\n\nfunction ThemeBuilderPage(): React.JSX.Element {\n const { definition, saveDefinitionWithFeedback } = useProjectDefinition();\n const themeSchema = useDefinitionSchema(createThemeSchema);\n const values = useMemo(\n () => definition.settings.theme ?? generateDefaultTheme(),\n [definition.settings.theme],\n );\n\n const form = useResettableForm<ThemeConfig>({\n resolver: zodResolver(themeSchema),\n values,\n });\n const { control, handleSubmit, setValue, getValues, reset } = form;\n\n const onSubmit = handleSubmit((data) =>\n saveDefinitionWithFeedback((draftConfig) => {\n draftConfig.settings.theme = data;\n }),\n );\n\n useBlockUnsavedChangesNavigate({ control, reset, onSubmit });\n\n const generateNewThemeColors = useCallback(\n (resetColors?: boolean) => {\n const palettes = getValues('palettes');\n setValue('colors', {\n light: generateThemeColorsFromShade(\n palettes,\n 'light',\n resetColors\n ? undefined\n : {\n palettes: values.palettes,\n config: values.colors.light,\n },\n ),\n dark: generateThemeColorsFromShade(\n palettes,\n 'dark',\n resetColors\n ? undefined\n : {\n palettes: values.palettes,\n config: values.colors.dark,\n },\n ),\n });\n },\n [getValues, setValue, values],\n );\n\n const handleShadesChange = useCallback(() => {\n generateNewThemeColors();\n }, [generateNewThemeColors]);\n\n const [themeMode, setThemeMode] = useState<string>('light');\n\n return (\n <form\n className=\"relative h-full max-h-full pb-(--action-bar-height)\"\n onSubmit={onSubmit}\n >\n <div className=\"flex h-full max-h-full flex-1 flex-col overflow-y-auto px-6\">\n <div className=\"sticky top-0 z-10 space-y-2 border-b bg-background py-6\">\n <h1>Theme Builder</h1>\n <p className=\"max-w-3xl text-muted-foreground\">\n The theme of the UI is based off color variables used with{' '}\n <a\n href=\"https://ui.shadcn.com/docs/theming\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"underline\"\n >\n the Shadn UI component library\n </a>\n . We generate the color variables based off the Tailwind color\n palette structure but you can customize them as you wish.\n </p>\n </div>\n <div className=\"pt-4\">\n {/* TODO: check if this should be removed */}\n <Alert className=\"max-w-fit\">\n <MdConstruction />\n <AlertTitle>Work in Progress</AlertTitle>\n <AlertDescription>\n This page is still a work in progress. It is not being used for\n generation at the moment.\n </AlertDescription>\n </Alert>\n <SectionList>\n <SectionListSection>\n <SectionListSectionHeader>\n <SectionListSectionTitle>\n Theme Palettes\n </SectionListSectionTitle>\n <SectionListSectionDescription>\n Pick the colors for your theme\n </SectionListSectionDescription>\n </SectionListSectionHeader>\n <SectionListSectionContent className=\"max-w-3xl\">\n <Tabs defaultValue=\"base\">\n <TabsList>\n <TabsTrigger value=\"base\">Base</TabsTrigger>\n <TabsTrigger value=\"primary\">Primary</TabsTrigger>\n </TabsList>\n <TabsContent value=\"base\">\n <ThemePaletteEditor\n control={control}\n getValues={getValues}\n setValue={setValue}\n type=\"base\"\n onShadesChange={handleShadesChange}\n />\n </TabsContent>\n <TabsContent value=\"primary\">\n <ThemePaletteEditor\n control={control}\n getValues={getValues}\n setValue={setValue}\n type=\"primary\"\n onShadesChange={handleShadesChange}\n />\n </TabsContent>\n </Tabs>\n </SectionListSectionContent>\n </SectionListSection>\n <SectionListSection>\n <SectionListSectionHeader>\n <SectionListSectionTitle>Theme Colors</SectionListSectionTitle>\n <SectionListSectionDescription>\n Pick the colors for your theme\n </SectionListSectionDescription>\n <div className=\"sticky top-44\">\n <ThemeColorsPreview\n key={themeMode} // force rerender\n control={control}\n mode={themeMode as 'light' | 'dark'}\n />\n </div>\n </SectionListSectionHeader>\n <SectionListSectionContent className=\"flex flex-col gap-4\">\n <Tabs value={themeMode} onValueChange={setThemeMode}>\n <TabsList>\n <TabsTrigger value=\"light\">Light</TabsTrigger>\n <TabsTrigger value=\"dark\">Dark</TabsTrigger>\n </TabsList>\n <TabsContent value=\"light\">\n <ThemeColorsEditor\n control={control}\n setValue={setValue}\n mode=\"light\"\n />\n </TabsContent>\n <TabsContent value=\"dark\">\n <ThemeColorsEditor\n control={control}\n setValue={setValue}\n mode=\"dark\"\n />\n </TabsContent>\n </Tabs>\n <Button\n onClick={() => {\n generateNewThemeColors(true);\n }}\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n className=\"w-fit\"\n >\n Reset Colors\n </Button>\n </SectionListSectionContent>\n </SectionListSection>\n <SectionListSection>\n <SectionListSectionHeader>\n <SectionListSectionTitle>CSS Preview</SectionListSectionTitle>\n <SectionListSectionDescription>\n Preview the CSS for your theme\n </SectionListSectionDescription>\n </SectionListSectionHeader>\n <SectionListSectionContent className=\"flex flex-col gap-4\">\n <ThemeColorsCssDisplay control={control} />\n </SectionListSectionContent>\n </SectionListSection>\n </SectionList>\n </div>\n </div>\n <FormActionBar form={form} />\n </form>\n );\n}\n"],"names":["generateCssFromThemeConfig","importShared","TextareaField","useMemo","convertRecordToCss","record","key","value","ThemeColorsCssDisplay","className","control","colors","useWatch","cssValue","jsx","clsx","convertHexToOklch","convertOklchToColorName","convertOklchToHex","getDefaultThemeColorFromShade","THEME_COLORS","Button","ColorPickerFieldController","Tooltip","TooltipContent","TooltipTrigger","ThemeColorsEditor","mode","setValue","themeColorEntries","palettes","themeColors","config","idx","themeKey","shouldStartNewColumn","currentColor","defaultValue","jsxs","MdInfo","color","baseShade","shadeColor","primaryShade","MdRestartAlt","Badge","Card","CardContent","CardDescription","CardHeader","CardTitle","Combobox","ComboboxContent","ComboboxEmpty","ComboboxInput","ComboboxItem","ThemeColorsPreview","colorCss","PreviewSectionTitle","children","generatePaletteNN","input","PALETTE_SHADES","getPaletteKey","shade","component","generatePalette","baseColor","rgb","converter","newPalette","shadeRgb","formatHex","COLOR_PALETTES","ComboboxFieldController","useCallback","ThemePaletteEditor","getValues","onShadesChange","type","paletteOptions","capitalize","paletteName","handlePaletteNameChange","name","palette","handleCustomPaletteGenerate","createThemeSchema","generateDefaultTheme","generateThemeColorsFromShade","useBlockUnsavedChangesNavigate","useDefinitionSchema","useProjectDefinition","useResettableForm","Alert","AlertDescription","AlertTitle","FormActionBar","SectionList","SectionListSection","SectionListSectionContent","SectionListSectionDescription","SectionListSectionHeader","SectionListSectionTitle","Tabs","TabsContent","TabsList","TabsTrigger","useState","SplitComponent","definition","saveDefinitionWithFeedback","themeSchema","values","settings","theme","form","resolver","zodResolver","handleSubmit","reset","onSubmit","draftConfig","data","generateNewThemeColors","resetColors","light","undefined","dark","handleShadesChange","themeMode","setThemeMode","MdConstruction"],"mappings":"uTAIA,KAAA,CAAA,2BAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,cAAAC,EAAA,EAAA,MAAAD,EAAA,8BAAA,EAEA,CAAA,QAAAE,EAAA,EAAA,MAAAF,EAAA,OAAA,EAQA,SAASG,EAAmBC,EAAwC,CAClE,OAAO,OAAO,QAAQA,CAAM,EACzB,IAAI,CAAC,CAACC,EAAKC,CAAK,IAAM,KAAKD,CAAG,KAAKC,CAAK,GAAG,EAC3C,KAAK;AAAA,CAAI,CACd,CAEO,SAASC,GAAsB,CACpC,UAAAC,EACA,QAAAC,CACF,EAAkD,CAChD,MAAMC,EAASC,EAAS,CAAE,QAAAF,EAAS,KAAM,SAAU,EAE7CG,EAAWV,GACf,IACE;AAAA;AAAA,EAEJC,EAAmBJ,EAA2BW,EAAO,KAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,EAI5DP,EAAmBJ,EAA2BW,EAAO,IAAI,CAAC,CAAC;AAAA;AAAA,MAEvD,KAAK,EACP,CAACA,CAAM,CACT,EAEA,OACGG,EAAA,IAAA,MAAA,CAAI,UAAWC,EAAK,GAAIN,CAAS,EAChC,SAACK,EAAAA,IAAAZ,GAAA,CAAc,UAAU,OAAO,SAAQ,GAAC,MAAOW,CAAU,CAAA,EAC5D,CAEJ,CC1CA,KAAA,mBAAAG,GAAA,wBAAAC,GAAA,kBAAAC,GAAA,8BAAAC,GAAA,aAAAC,EAAA,EAAA,MAAAnB,EAAA,oCAAA,EAOA,QAAAoB,EAAA,2BAAAC,GAAA,QAAAC,GAAA,eAAAC,GAAA,eAAAC,EAAA,EAAA,MAAAxB,EAAA,8BAAA,EAkBO,SAASyB,EAAkB,CAChC,UAAAjB,EACA,QAAAC,EACA,KAAAiB,EACA,SAAAC,CACF,EAA6C,CACrC,MAAAC,EAAoB,OAAO,QAAQT,EAAY,EAC/CU,EAAWlB,EAAS,CAAE,QAAAF,EAAS,KAAM,WAAY,EACjDqB,EAAcnB,EAAS,CAAE,QAAAF,EAAS,KAAM,UAAUiB,CAAI,GAAI,EAChE,aACG,MAAI,CAAA,UAAWZ,EAAK,6BAA8BN,CAAS,EAC1D,SAACK,MAAA,MAAA,CAAI,UAAU,+CACZ,WAAkB,IAAI,CAAC,CAACR,EAAK0B,CAAM,EAAGC,IAAQ,CAC7C,MAAMC,EAAW5B,EAGX6B,GADJF,EAAM,EAAIJ,EAAkBI,EAAM,CAAC,EAAE,CAAC,EAAE,SAAW,UACJD,EAAO,SAClDI,EAAeL,EAAYG,CAAQ,EACnCG,EAAelB,GACnBW,EACAH,EACAO,CACF,EAEE,OAAAI,EAAA,KAAC,MAAA,CACC,UAAWvB,EACToB,EAAuB,cAAgB,OACvC,UACF,EAGA,SAAA,CAAArB,EAAA,IAACQ,GAAA,CACC,QAAAZ,EACA,UAAU,SACV,iBAAiB,uBACjB,MACE4B,EAAA,KAAC,MAAI,CAAA,UAAU,qCACb,SAAA,CAACxB,EAAAA,IAAA,MAAA,CAAK,WAAO,IAAK,CAAA,EAClBwB,EAAAA,KAACf,GAAQ,CAAA,cAAe,IACtB,SAAA,CAACT,EAAAA,IAAAW,GAAA,CAAe,QAAO,GACrB,SAAAX,EAAA,IAACO,EAAA,CACC,QAAQ,QACR,KAAK,OACL,aAAW,aACX,UAAU,aAEV,eAACkB,EAAO,CAAA,CAAA,CAAA,CAAA,EAEZ,EACAzB,EAAA,IAACU,GAAA,CACC,MAAM,QACN,KAAK,SACL,UAAU,gBAEV,SAACV,EAAAA,IAAA,MAAA,CAAI,UAAU,cAAe,WAAO,WAAY,CAAA,CAAA,CAAA,CACnD,CACF,CAAA,CAAA,EACF,EAEF,WAAYI,GACZ,eAAgBF,GAChB,gBAAkBwB,GAAU,CAC1B,MAAMC,EAAY,OAAO,QAAQX,EAAS,KAAK,MAAM,EAAE,KACrD,CAAC,CAAG,CAAAY,CAAU,IAAMA,IAAeF,KACjC,CAAC,EACL,GAAIC,EACF,MAAO,QAAQA,CAAS,GAE1B,MAAME,EAAe,OAAO,QAC1Bb,EAAS,QAAQ,MAAA,EACjB,KAAK,CAAC,EAAGY,CAAU,IAAMA,IAAeF,CAAK,IAAI,CAAC,EACpD,OAAIG,EACK,WAAWA,CAAY,GAEzB1B,GAAwBuB,CAAK,CACtC,EACA,KAAM,UAAUb,CAAI,IAAIO,CAAQ,EAAA,CAClC,EACCE,IAAiBC,GAChBvB,EAAA,IAACO,EAAA,CACC,UAAU,4BACV,QAAS,IAAM,CACbO,EAAS,UAAUD,CAAI,IAAIO,CAAQ,GAAIG,CAAY,CACrD,EACA,KAAK,OACL,QAAQ,QACR,aAAW,cAEX,eAACO,EAAa,CAAA,CAAA,CAAA,CAAA,CAChB,CAAA,EA5DGtC,CA8DP,CAAA,CAEH,EACH,CACF,CAAA,CAEJ,CC1HA,KAAA,CAAA,2BAAAN,EAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,MAAA4C,EAAAxB,OAAAA,EAAA,KAAAyB,GAAA,YAAAC,GAAA,gBAAAC,GAAA,WAAAC,GAAA,UAAAC,GAAA,SAAAC,GAAA,gBAAAC,GAAA,cAAAC,GAAA,cAAAC,GAAA,aAAAC,CAAA,EAAA,MAAAtD,EAAA,8BAAA,EAuBO,SAASuD,GAAmB,CACjC,UAAA/C,EACA,QAAAC,EACA,KAAAiB,CACF,EAA+C,CAC7C,MAAMhB,EAASC,EAAS,CACtB,QAAAF,EACA,KAAM,UAAUiB,CAAI,EAAA,CACrB,EACK8B,EAAWzD,GAA2BW,CAAM,EAEhD,OAAAG,EAAA,IAAC,MAAA,CACC,UAAWC,EACT,8DACAN,CACF,EACA,MAAOgD,EAEP,gBAACX,GACC,CAAA,SAAA,CAAAR,OAACW,GACC,CAAA,SAAA,CAAAnC,EAAAA,IAACoC,IAAU,SAAa,eAAA,CAAA,EACxBpC,EAAAA,IAACkC,IAAgB,SAGjB,gFAAA,CAAA,CAAA,EACF,EACAV,EAAAA,KAACS,GAAY,CAAA,UAAU,YACrB,SAAA,CAAAT,OAAC,MACC,CAAA,SAAA,CAAAxB,EAAAA,IAAC4C,GAAoB,SAAc,gBAAA,CAAA,EAClC5C,EAAA,IAAA,IAAA,CAAE,UAAU,YAAY,SAGzB,0EAAA,CAAA,CAAA,EACF,SACC,MACC,CAAA,SAAA,CAAAA,EAAAA,IAAC4C,GAAoB,SAAQ,UAAA,CAAA,SAC5BP,GACC,CAAA,SAAA,CAACrC,EAAAA,IAAAwC,GAAA,CAAc,YAAa,kBAAoB,CAAA,EAChDhB,EAAAA,KAACc,GAAgB,CAAA,MAAOK,EACtB,SAAA,CAAA3C,MAACyC,EAAa,CAAA,MAAM,OAAO,MAAM,WAAW,SAE5C,WAAA,QACCA,EAAa,CAAA,MAAM,QAAQ,MAAM,WAAW,SAE7C,WAAA,QACCA,EAAa,CAAA,MAAM,OAAO,MAAM,WAAW,SAE5C,WAAA,EACAzC,EAAAA,IAACuC,IAAc,SAAgB,kBAAA,CAAA,CAAA,CACjC,CAAA,CAAA,CACF,CAAA,CAAA,EACF,SACC,MACC,CAAA,SAAA,CAAAvC,EAAAA,IAAC4C,GAAoB,SAAM,QAAA,CAAA,EAC3BpB,EAAAA,KAAC,MAAI,CAAA,UAAU,uBACb,SAAA,CAACxB,EAAA,IAAA+B,EAAA,CAAM,QAAQ,UAAU,SAAO,UAAA,EAC/B/B,EAAA,IAAA+B,EAAA,CAAM,QAAQ,cAAc,SAAW,cAAA,EACvC/B,EAAA,IAAA+B,EAAA,CAAM,QAAQ,YAAY,SAAS,YAAA,EACnC/B,EAAA,IAAA+B,EAAA,CAAM,QAAQ,UAAU,SAAO,SAAA,CAAA,CAAA,CAClC,CAAA,CAAA,EACF,SACC,MACC,CAAA,SAAA,CAAA/B,EAAAA,IAAC4C,GAAoB,SAAO,SAAA,CAAA,EAC5BpB,EAAAA,KAAC,MAAI,CAAA,UAAU,2DACb,SAAA,CAACxB,EAAA,IAAAO,EAAA,CAAO,KAAK,SAAS,SAAO,UAAA,QAC5BA,EAAO,CAAA,QAAQ,cAAc,KAAK,SAAS,SAE5C,cAAA,QACCA,EAAO,CAAA,QAAQ,QAAQ,KAAK,SAAS,SAEtC,QAAA,QACCA,EAAO,CAAA,QAAQ,OAAO,KAAK,SAAS,SAErC,OAAA,QACCA,EAAO,CAAA,QAAQ,YAAY,KAAK,SAAS,SAE1C,YAAA,QACCA,EAAO,CAAA,QAAQ,UAAU,KAAK,SAAS,SAExC,SAAA,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAEA,SAASqC,EAAoB,CAC3B,SAAAC,CACF,EAEsB,CACpB,OAAQ7C,EAAAA,IAAA,KAAA,CAAG,UAAU,wBAAyB,SAAA6C,CAAS,CAAA,CACzD,CCzHO,SAASC,GAAkBpB,EAIP,CACnB,MAAAqB,EAAQ,IAAI,aAAa,CAACrB,EAAM,EAAGA,EAAM,EAAGA,EAAM,CAAC,CAAC,EACnD,MAAA,CACL,OACE,GACC,EACC,EACE,KAAK,IACH,mBACG,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBqB,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,OACE,GACC,EACC,EACE,KAAK,IACH,mBACG,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,OACE,GACC,EACC,EACE,KAAK,IACH,mBACG,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,mBACG,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,mBACG,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAsB,GACpB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,mBACG,mBAAsB,GACpB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,mBACG,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAsB,GACpB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,mBACG,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAsB,GACpB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,kBACG,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,mBAAsB,GACpB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,kBACG,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,iBAAmB,GACjB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAsB,GACpB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,mBACG,mBAAsB,GACpB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,oBACG,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,kBACG,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAsB,GACpB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,kBACG,mBAAsB,GACpB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,mBACG,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,oBAAuB,GACrB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,kBACG,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAsB,GACpB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,kBACG,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,oBACG,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,mBAAsB,GACpB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,mBACG,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAsB,GACpB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,mBACG,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,oBACG,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,oBACG,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,oBACG,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,oBACG,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,iBAAoB,GAClB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,oBACG,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAsB,GACpB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,mBACG,iBAAoB,GAClB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,kBACG,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,mBACG,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAsB,GACpB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,mBACG,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,oBACG,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,mBACG,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAoB,GAClB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,oBAAuB,GACrB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,oBACG,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EAAA,GAEhB,QACE,GACC,EACC,EACE,KAAK,IACH,oBACG,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EAAA,GAE1C,kBAAqB,GACnB,EACC,EACE,KAAK,IACH,kBACE,mBAAqBA,EAAM,CAAC,GAAK,GACjC,mBAAqBA,EAAM,CAAC,GAAK,GACjC,oBAAsBA,EAAM,CAAC,GAAK,EAAA,GAE3C,mBAAqB,GACnB,EACC,EACE,KAAK,IACH,mBACE,mBAAsBA,EAAM,CAAC,GAAK,GAClC,oBAAsBA,EAAM,CAAC,GAAK,GAClC,mBAAqBA,EAAM,CAAC,GAAK,EACrC,EACV,EACR,CACF,CCxmCA,KAAA,CAAA,eAAAC,EAAA,EAAA,MAAA7D,EAAA,oCAAA,EAKA,SAAS8D,EAAcC,EAAeC,EAA2B,CACxD,MAAA,GAAGD,CAAK,IAAIC,CAAS,EAC9B,CAEO,SAASC,GAAgBC,EAAiC,CAGzD,MAAAC,EAFeC,EAAU,KAAK,EAEXF,CAAS,EAElC,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,kBAAkBD,CAAS,EAAE,EAGzC,MAAAG,EAAaV,GAAkBQ,CAAG,EAExC,OAAO,OAAO,YACZN,GAAe,IAAKE,GAAU,CAC5B,MAAMO,EAAgB,CACpB,KAAM,MACN,EAAGD,EAAWP,EAAcC,EAAO,GAAG,CAAC,EACvC,EAAGM,EAAWP,EAAcC,EAAO,GAAG,CAAC,EACvC,EAAGM,EAAWP,EAAcC,EAAO,GAAG,CAAC,CACzC,EACA,MAAO,CAACA,EAAOQ,GAAUD,CAAQ,CAAC,CACnC,CAAA,CACH,CACF,CCtBA,KAAA,CAAA,eAAAE,EAAA,kBAAAzD,EAAA,kBAAAE,EAAA,eAAA4C,EAAA,EAAA,MAAA7D,EAAA,oCAAA,EAMA,CAAAoB,OAAAA,GAAA,2BAAAC,EAAA,wBAAAoD,EAAA,EAAA,MAAAzE,EAAA,8BAAA,EAMA,CAAA,YAAA0E,EAAA,EAAA,MAAA1E,EAAA,OAAA,EAaO,SAAS2E,EAAmB,CACjC,QAAAlE,EACA,UAAAmE,EACA,SAAAjD,EACA,eAAAkD,EACA,KAAAC,CACF,EAA+C,CAC7C,MAAMC,EAAiB,CACrB,CAAE,MAAO,SAAU,MAAO,aAAc,EACxC,GAAG,OAAO,KAAKP,CAAc,EAAE,IAAKnE,IAAS,CAC3C,MAAOA,EACP,MAAO2E,aAAW3E,CAAG,CAAA,EACrB,CACJ,EAEM4E,EAActE,EAAS,CAC3B,QAAAF,EACA,KAAM,YAAYqE,CAAI,cAAA,CACvB,EAEKI,EAA0BR,GAC7BS,GAAwB,CACnB,GAAA,CAACA,GAAQ,CAAC,OAAO,UAAU,eAAe,KAAKX,EAAgBW,CAAI,EACrE,OACI,MAAAC,EAAUZ,EAAeW,CAAwB,EAC9CxD,EAAA,YAAYmD,CAAI,UAAWM,CAAO,EAC3CP,IAAiBO,CAAO,CAC1B,EACA,CAACzD,EAAUkD,EAAgBC,CAAI,CACjC,EAEMO,EAA8B,IAAY,CAC9C,MAAMnB,EAAYU,EAAU,YAAYE,CAAI,aAAa,EACzD,GAAI,CAACZ,EAAW,OACV,MAAAG,EAAaJ,GAAgBC,CAAS,EACnCvC,EAAA,YAAYmD,CAAI,UAAWT,CAAU,EAC9CQ,IAAiBR,CAAU,CAC7B,EAGE,OAAAhC,EAAA,KAAC,MAAI,CAAA,UAAU,gCACb,SAAA,CAAAxB,EAAA,IAAC4D,GAAA,CACC,KAAM,YAAYK,CAAI,eACtB,QAAArE,EACA,QAASsE,EACT,YAAY,wBACZ,SAAUG,CAAA,CACZ,EACCD,IAAgB,UACd5C,OAAA,MAAA,CAAI,UAAU,6CACb,SAAA,CAAAxB,EAAA,IAACQ,EAAA,CACC,UAAU,mBACV,iBAAiB,eACjB,QAAAZ,EACA,KAAM,YAAYqE,CAAI,cACtB,MAAM,oBACN,YAAY,iBACZ,WAAY7D,EACZ,eAAgBF,CAAA,CAClB,EACAF,EAAA,IAACO,GAAA,CACC,QAAQ,YACR,QAASiE,EACT,KAAK,KACN,SAAA,UAAA,CAAA,CAED,EACF,QAED,MAAI,CAAA,UAAU,aACZ,SAAexB,GAAA,IAAKE,GACnBlD,EAAA,IAACQ,EAAA,CAEC,iBAAiB,6BACjB,SAAQ,GACR,QAAAZ,EACA,KAAM,YAAYqE,CAAI,WAAWf,CAAK,GACtC,MAAOA,EACP,WAAY9C,EACZ,eAAgBF,EAChB,SAAU,IACR8D,IAAiBD,EAAU,YAAYE,CAAI,SAAS,CAAC,CAAA,EATlDf,CAAA,CAYR,CACH,CAAA,CAAA,EACF,CAEJ,CC1HA,KAAA,CAAA,kBAAAuB,GAAA,qBAAAC,GAAA,6BAAAC,CAAA,EAAA,MAAAxF,EAAA,oCAAA,EAKA,CAAA,+BAAAyF,GAAA,oBAAAC,GAAA,qBAAAC,GAAA,kBAAAC,EAAA,EAAA,MAAA5F,EAAA,wCAAA,EAMA,CAAA,MAAA6F,GAAA,iBAAAC,GAAA,WAAAC,GAAA,OAAA3E,GAAA,cAAA4E,GAAA,YAAAC,GAAA,mBAAAC,EAAA,0BAAAC,EAAA,8BAAAC,EAAA,yBAAAC,EAAA,wBAAAC,EAAA,KAAAC,EAAA,YAAAC,EAAA,SAAAC,EAAA,YAAAC,CAAA,EAAA,MAAA1G,EAAA,8BAAA,EAmBA,CAAA,YAAA0E,EAAA,QAAAxE,GAAA,SAAAyG,EAAA,EAAA,MAAA3G,EAAA,OAAA,EAM2E4G,GAAA,UAS5B,CACvC,KAAA,CAAEC,WAAAA,EAAYC,2BAAAA,GAA+BnB,GAAqB,EAClEoB,EAAcrB,GAAoBJ,EAAiB,EACnD0B,EAAS9G,GACb,IAAM2G,EAAWI,SAASC,OAAS3B,GAAqB,EACxD,CAACsB,EAAWI,SAASC,KAAK,CAC5B,EAEMC,EAAOvB,GAA+B,CAC1CwB,SAAUC,EAAYN,CAAW,EACjCC,OAAAA,CAAAA,CACD,EACK,CAAEvG,QAAAA,EAAS6G,aAAAA,EAAc3F,SAAAA,EAAUiD,UAAAA,EAAW2C,MAAAA,CAAAA,EAAUJ,EAExDK,EAAWF,EACfR,GAAAA,EAA4CW,GAAA,CAC1CA,EAAYR,SAASC,MAAQQ,CAAAA,CAC9B,CACH,EAE+BjC,GAAA,CAAEhF,QAAAA,EAAS8G,MAAAA,EAAOC,SAAAA,CAAAA,CAAU,EAErDG,MAAAA,EAAyBjD,EAC5BkD,GAA0B,CACnB/F,MAAAA,EAAW+C,EAAU,UAAU,EACrCjD,EAAS,SAAU,CACjBkG,MAAOrC,EACL3D,EACA,QACA+F,EACIE,OACA,CACEjG,SAAUmF,EAAOnF,SACjBE,OAAQiF,EAAOtG,OAAOmH,KAAAA,CAE9B,EACAE,KAAMvC,EACJ3D,EACA,OACA+F,EACIE,OACA,CACEjG,SAAUmF,EAAOnF,SACjBE,OAAQiF,EAAOtG,OAAOqH,IAE9B,CAAA,CAAA,CACD,CAEH,EAAA,CAACnD,EAAWjD,EAAUqF,CAAM,CAC9B,EAEMgB,EAAqBtD,EAAY,IAAM,CACpBiD,EAAA,CAAA,EACtB,CAACA,CAAsB,CAAC,EAErB,CAACM,EAAWC,CAAY,EAAIvB,GAAiB,OAAO,EAE1D,OACGtE,EAAAA,KAAA,OAAA,CACC,UAAU,sDACV,SAAAmF,EAEA,SAAA,CAACnF,EAAAA,KAAA,MAAA,CAAI,UAAU,8DACb,SAAA,CAACA,EAAAA,KAAA,MAAA,CAAI,UAAU,0DACb,SAAA,CAAAxB,EAAAA,IAAC,MAAG,SAAa,eAAA,CAAA,EACjBwB,EAAAA,KAAC,IAAE,CAAA,UAAU,kCAAiC,SAAA,CAAA,6DACe,IAC3DxB,EAAAA,IAAC,IACC,CAAA,KAAK,qCACL,OAAO,SACP,IAAI,aACJ,UAAU,YAAW,SAGvB,gCAAA,CAAA,EAAG,0HAAA,CAGL,CAAA,CAAA,EACF,EACAwB,EAAAA,KAAC,MAAI,CAAA,UAAU,OAEb,SAAA,CAACA,EAAAA,KAAAwD,GAAA,CAAM,UAAU,YACf,SAAA,CAAAhF,EAAA,IAACsH,EAAc,EAAA,EACftH,EAAAA,IAACkF,IAAW,SAAgB,kBAAA,CAAA,EAC5BlF,EAAAA,IAACiF,IAAgB,SAGjB,2FAAA,CAAA,CAAA,EACF,SACCG,GACC,CAAA,SAAA,CAAA5D,OAAC6D,EACC,CAAA,SAAA,CAAA7D,OAACgE,EACC,CAAA,SAAA,CAAAxF,EAAAA,IAACyF,GAAuB,SAExB,gBAAA,CAAA,EACAzF,EAAAA,IAACuF,GAA6B,SAE9B,gCAAA,CAAA,CAAA,EACF,QACCD,EAA0B,CAAA,UAAU,YACnC,SAAC9D,EAAA,KAAAkE,EAAA,CAAK,aAAa,OACjB,SAAA,CAAAlE,OAACoE,EACC,CAAA,SAAA,CAAC5F,EAAA,IAAA6F,EAAA,CAAY,MAAM,OAAO,SAAI,OAAA,EAC7B7F,EAAA,IAAA6F,EAAA,CAAY,MAAM,UAAU,SAAO,SAAA,CAAA,CAAA,EACtC,EACC7F,EAAA,IAAA2F,EAAA,CAAY,MAAM,OACjB,SAAC3F,EAAA,IAAA8D,EAAA,CACC,QAAAlE,EACA,UAAAmE,EACA,SAAAjD,EACA,KAAK,OACL,eAAgBqG,CAAmB,CAAA,EAEvC,EACCnH,EAAA,IAAA2F,EAAA,CAAY,MAAM,UACjB,SAAC3F,EAAAA,IAAA8D,EAAA,CACC,QAAAlE,EACA,UAAAmE,EACA,SAAAjD,EACA,KAAK,UACL,eAAgBqG,EAAmB,CAEvC,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAAA,EACF,SACC9B,EACC,CAAA,SAAA,CAAA7D,OAACgE,EACC,CAAA,SAAA,CAAAxF,EAAAA,IAACyF,GAAwB,SAAY,cAAA,CAAA,EACrCzF,EAAAA,IAACuF,GAA6B,SAE9B,gCAAA,CAAA,EACAvF,EAAAA,IAAC,MAAI,CAAA,UAAU,gBACb,SAAAA,EAAA,IAAC0C,GAAA,CAEC,QAAA9C,EACA,KAAMwH,CAAAA,EAFDA,CAAAA,CAIT,CAAA,CAAA,EACF,EACA5F,EAAAA,KAAC8D,EAA0B,CAAA,UAAU,sBACnC,SAAA,CAAA9D,EAAA,KAACkE,EAAK,CAAA,MAAO0B,EAAW,cAAeC,EACrC,SAAA,CAAA7F,OAACoE,EACC,CAAA,SAAA,CAAC5F,EAAA,IAAA6F,EAAA,CAAY,MAAM,QAAQ,SAAK,QAAA,EAC/B7F,EAAA,IAAA6F,EAAA,CAAY,MAAM,OAAO,SAAI,MAAA,CAAA,CAAA,EAChC,EACA7F,EAAAA,IAAC2F,EAAY,CAAA,MAAM,QACjB,SAAA3F,EAAA,IAACY,GACC,QAAAhB,EACA,SAAAkB,EACA,KAAK,OAAA,CAAO,CAEhB,CAAA,EACAd,EAAAA,IAAC2F,EAAY,CAAA,MAAM,OACjB,SAAA3F,EAAAA,IAACY,GACC,QAAAhB,EACA,SAAAkB,EACA,KAAK,MAAM,CAAA,CAEf,CAAA,CAAA,EACF,EACAd,MAACO,GACC,CAAA,QAAS,IAAM,CACbuG,EAAuB,EAAI,CAC7B,EACA,QAAQ,UACR,KAAK,KACL,KAAK,SACL,UAAU,QAAO,SAGnB,cAAA,CAAA,CAAA,CACF,CAAA,CAAA,EACF,SACCzB,EACC,CAAA,SAAA,CAAA7D,OAACgE,EACC,CAAA,SAAA,CAAAxF,EAAAA,IAACyF,GAAwB,SAAW,aAAA,CAAA,EACpCzF,EAAAA,IAACuF,GAA6B,SAE9B,gCAAA,CAAA,CAAA,EACF,QACCD,EAA0B,CAAA,UAAU,sBACnC,SAACtF,EAAAA,IAAAN,GAAA,CAAsB,QAAAE,EAAiB,CAC1C,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,EACF,EACAI,MAACmF,IAAc,KAAAmB,CAAW,CAAA,CAAA,EAC5B,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i}from"./_virtual___federation_fn_import-CE3p-l_2.js";const{useProjectDefinition:o}=await i("@baseplate-dev/project-builder-lib/web"),{useMemo:n}=await i("react");function r(e){const{definitionSchemaParserContext:t}=o();return n(()=>e(t),[t,e])}export{r as u};
|
|
2
|
+
//# sourceMappingURL=use-definition-schema-B2FBXmC_.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-definition-schema-B2FBXmC_.js","sources":["../../src/hooks/use-definition-schema.ts"],"sourcesContent":["import type {\n def,\n DefinitionSchemaCreator,\n} from '@baseplate-dev/project-builder-lib';\n\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport { useMemo } from 'react';\n\nexport function useDefinitionSchema<T extends DefinitionSchemaCreator>(\n schemaCreator: T,\n): def.InferSchema<T> {\n const { definitionSchemaParserContext } = useProjectDefinition();\n return useMemo(\n () => schemaCreator(definitionSchemaParserContext),\n [definitionSchemaParserContext, schemaCreator],\n ) as def.InferSchema<T>;\n}\n"],"names":["useProjectDefinition","importShared","useMemo","useDefinitionSchema","schemaCreator","definitionSchemaParserContext"],"mappings":"6DAKA,KAAA,CAAA,qBAAAA,CAAA,EAAA,MAAAC,EAAA,wCAAA,EACA,CAAA,QAAAC,CAAA,EAAA,MAAAD,EAAA,OAAA,EAEO,SAASE,EACdC,EACoB,CACd,KAAA,CAAE,8BAAAC,CAA8B,EAAIL,EAAqB,EACxD,OAAAE,EACL,IAAME,EAAcC,CAA6B,EACjD,CAACA,EAA+BD,CAAa,CAC/C,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as u}from"./_virtual___federation_fn_import-CE3p-l_2.js";import{c as x,p as I,s as j,l as B}from"./index-gE__lQ6b.js";import{s as T}from"./immer-xieDw-3D.js";const{createEnumBaseSchema:U,EnumUtils:L,FeatureUtils:M,modelEnumEntityType:r}=await u("@baseplate-dev/project-builder-lib"),{useDefinitionSchema:O,useProjectDefinition:$,useResettableForm:A}=await u("@baseplate-dev/project-builder-lib/web"),{useEventCallback:K}=await u("@baseplate-dev/ui-components"),{useMemo:a,useRef:P}=await u("react");function V(){return{id:r.generateNewId(),name:"",featureRef:"",isExposed:!1,values:[]}}function H({enumKey:g,omit:D,onSubmitSuccess:N,isCreate:i}={}){const{definition:m,saveDefinitionWithFeedback:p,isSavingDefinition:R}=$(),b=x(),v=i?void 0:r.idFromKey(g),t=v?L.byId(m,v):void 0;if(!i&&!t)throw new I("Enum not found");const o=a(()=>V(),[]),c=O(U),d=P(D),l=a(()=>d.current?c.omit(Object.fromEntries(d.current.map(n=>[n,!0]))):c,[c]),w=a(()=>{const n=t??o;return d.current?l.parse(n):n},[t,o,l]),y=A({resolver:j(l),defaultValues:w}),{reset:f,handleSubmit:S,setError:h}=y,F=K(N),k=a(()=>S(n=>{const e={...t,...n,id:t?.id??r.generateNewId()};if(m.enums?.find(s=>s.id!==e.id&&s.name.toLowerCase()===e.name.toLowerCase())){h("name",{message:`Enum with name ${e.name} already exists.`});return}return p(s=>{e.featureRef=M.ensureFeatureByNameRecursively(s,e.featureRef),s.enums=T([...s.enums?.filter(E=>E.id!==e.id)??[],e],[E=>E.name])},{successMessage:i?"Successfully created enum!":"Successfully saved enum!",onSuccess:()=>{i?(b({to:"/data/enums/edit/$key",params:{key:r.keyFromId(e.id)}}).catch(B),f(o)):f(n),F?.()}})}),[b,f,p,h,S,m,i,t,o,F]);return{form:y,onSubmit:k,defaultValues:w,isSavingDefinition:R}}export{H as u};
|
|
2
|
+
//# sourceMappingURL=use-enum-form-DQza9C6Q.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-enum-form-DQza9C6Q.js","sources":["../../src/routes/data/enums/-hooks/use-enum-form.tsx"],"sourcesContent":["import type {\n EnumConfig,\n EnumConfigInput,\n} from '@baseplate-dev/project-builder-lib';\nimport type { UseFormReturn } from 'react-hook-form';\n\nimport {\n createEnumBaseSchema,\n EnumUtils,\n FeatureUtils,\n modelEnumEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n useDefinitionSchema,\n useProjectDefinition,\n useResettableForm,\n} from '@baseplate-dev/project-builder-lib/web';\nimport { useEventCallback } from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useNavigate } from '@tanstack/react-router';\nimport { sortBy } from 'es-toolkit';\nimport { useMemo, useRef } from 'react';\n\nimport { logAndFormatError } from '#src/services/error-formatter.js';\nimport { NotFoundError } from '#src/utils/error.js';\n\ninterface UseEnumFormOptions {\n enumKey?: string;\n omit?: string[];\n onSubmitSuccess?: () => void;\n isCreate?: boolean;\n}\n\nfunction createNewEnum(): EnumConfig {\n return {\n id: modelEnumEntityType.generateNewId(),\n name: '',\n featureRef: '',\n isExposed: false,\n values: [],\n };\n}\n\nexport function useEnumForm({\n enumKey,\n omit,\n onSubmitSuccess,\n isCreate,\n}: UseEnumFormOptions = {}): {\n form: UseFormReturn<EnumConfigInput>;\n onSubmit: () => Promise<void>;\n defaultValues: EnumConfigInput;\n isSavingDefinition: boolean;\n} {\n const { definition, saveDefinitionWithFeedback, isSavingDefinition } =\n useProjectDefinition();\n const navigate = useNavigate();\n\n const urlEnumId = isCreate\n ? undefined\n : modelEnumEntityType.idFromKey(enumKey);\n const enumDefinition = urlEnumId\n ? EnumUtils.byId(definition, urlEnumId)\n : undefined;\n\n if (!isCreate && !enumDefinition) {\n throw new NotFoundError('Enum not found');\n }\n\n // memoize it to keep the same key when resetting\n const newEnumDefinition = useMemo(() => createNewEnum(), []);\n\n const baseEnumSchema = useDefinitionSchema(createEnumBaseSchema);\n\n const fieldsToOmit = useRef(omit);\n\n const finalSchema = useMemo(() => {\n if (fieldsToOmit.current) {\n return baseEnumSchema.omit(\n Object.fromEntries(\n fieldsToOmit.current.map((field) => [field, true]),\n ) as Record<string | number, never>,\n ) as typeof baseEnumSchema;\n }\n\n return baseEnumSchema;\n }, [baseEnumSchema]);\n\n const defaultValues = useMemo(() => {\n const enumToUse = enumDefinition ?? newEnumDefinition;\n return fieldsToOmit.current\n ? (finalSchema.parse(enumToUse) as EnumConfigInput)\n : enumToUse;\n }, [enumDefinition, newEnumDefinition, finalSchema]);\n\n const form = useResettableForm<EnumConfigInput>({\n resolver: zodResolver(finalSchema),\n defaultValues,\n });\n\n const { reset, handleSubmit, setError } = form;\n\n const handleSubmitSuccess = useEventCallback(onSubmitSuccess);\n\n const onSubmit = useMemo(\n () =>\n handleSubmit((data) => {\n const updatedDefinition = {\n ...enumDefinition,\n ...data,\n // generate new ID if new\n id: enumDefinition?.id ?? modelEnumEntityType.generateNewId(),\n };\n // check for enums with the same name\n const existingEnum = definition.enums?.find(\n (e) =>\n e.id !== updatedDefinition.id &&\n e.name.toLowerCase() === updatedDefinition.name.toLowerCase(),\n );\n if (existingEnum) {\n setError('name', {\n message: `Enum with name ${updatedDefinition.name} already exists.`,\n });\n return;\n }\n\n return saveDefinitionWithFeedback(\n (draftConfig) => {\n // create feature if a new feature exists\n updatedDefinition.featureRef =\n FeatureUtils.ensureFeatureByNameRecursively(\n draftConfig,\n updatedDefinition.featureRef,\n );\n draftConfig.enums = sortBy(\n [\n ...(draftConfig.enums?.filter(\n (e) => e.id !== updatedDefinition.id,\n ) ?? []),\n updatedDefinition,\n ],\n [(e) => e.name],\n );\n },\n {\n successMessage: isCreate\n ? 'Successfully created enum!'\n : 'Successfully saved enum!',\n onSuccess: () => {\n if (isCreate) {\n navigate({\n to: '/data/enums/edit/$key',\n params: {\n key: modelEnumEntityType.keyFromId(updatedDefinition.id),\n },\n }).catch(logAndFormatError);\n reset(newEnumDefinition);\n } else {\n reset(data);\n }\n handleSubmitSuccess?.();\n },\n },\n );\n }),\n [\n navigate,\n reset,\n saveDefinitionWithFeedback,\n setError,\n handleSubmit,\n definition,\n isCreate,\n enumDefinition,\n newEnumDefinition,\n handleSubmitSuccess,\n ],\n );\n\n return { form, onSubmit, defaultValues, isSavingDefinition };\n}\n"],"names":["createEnumBaseSchema","EnumUtils","FeatureUtils","modelEnumEntityType","importShared","useDefinitionSchema","useProjectDefinition","useResettableForm","useEventCallback","useMemo","useRef","createNewEnum","useEnumForm","enumKey","omit","onSubmitSuccess","isCreate","definition","saveDefinitionWithFeedback","isSavingDefinition","navigate","useNavigate","urlEnumId","enumDefinition","NotFoundError","newEnumDefinition","baseEnumSchema","fieldsToOmit","finalSchema","field","defaultValues","enumToUse","form","zodResolver","reset","handleSubmit","setError","handleSubmitSuccess","onSubmit","data","updatedDefinition","e","draftConfig","sortBy","logAndFormatError"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as c}from"./_virtual___federation_fn_import-CE3p-l_2.js";import{c as T,s as U,l as j,p as x}from"./index-gE__lQ6b.js";import{s as O}from"./immer-xieDw-3D.js";const{createModelBaseSchema:B,FeatureUtils:D,modelEntityType:u,modelScalarFieldEntityType:K,ModelUtils:L}=await c("@baseplate-dev/project-builder-lib"),{useDefinitionSchema:$,useProjectDefinition:A,useResettableForm:P}=await c("@baseplate-dev/project-builder-lib/web"),{toast:d,useEventCallback:V}=await c("@baseplate-dev/ui-components"),{useMemo:i,useRef:W}=await c("react");function q(){const l=K.generateNewId();return{id:u.generateNewId(),name:"",featureRef:"",service:{create:{enabled:!1},update:{enabled:!1},delete:{enabled:!1},transformers:[]},model:{primaryKeyFieldRefs:[l],fields:[{id:l,name:"id",type:"uuid",isOptional:!1,options:{default:"",genUuid:!0}}]}}}function Q({onSubmitSuccess:l,isCreate:s,omit:k,modelKey:E}){const{definition:m,saveDefinitionWithFeedback:v}=A(),g=T(),w=s?void 0:u.idFromKey(E),r=w?L.byIdOrThrow(m,w):void 0;if(!s&&!r)throw new x("The model you were looking for could not be found.");const n=i(()=>q(),[]),f=$(B),b=W(k),p=i(()=>b.current?f.omit(Object.fromEntries(b.current.map(a=>[a,!0]))):f,[f]),M=i(()=>{const a=r??n;return b.current?p.parse(a):a},[r,n,p]),F=P({resolver:U(p),defaultValues:M}),{reset:h,handleSubmit:S,setError:N}=F,R=V(l),I=i(()=>S(a=>{const t={...r,...a,id:r?.id??u.generateNewId()};if(t.model.fields.length===0){d.error("Model must have at least one field.");return}if(t.model.primaryKeyFieldRefs.length===0){d.error("Model must have at least one primary key field.");return}if(m.models.find(o=>o.id!==a.id&&o.name.toLowerCase()===t.name.toLowerCase())){N("name",{message:`Model with name ${t.name} already exists.`});return}const{service:e}=t;if(e.create.enabled){if(!e.create.fields?.length&&!e.create.transformerNames?.length){d.error("Create method must have at least one field or transformer.");return}}else e.create={enabled:!1};if(e.update.enabled){if(!e.update.fields?.length&&!e.update.transformerNames?.length){d.error("Update method must have at least one field or transformer.");return}}else e.update={enabled:!1};return e.delete.enabled||(e.delete={enabled:!1}),!e.create.enabled&&!e.update.enabled&&!e.delete.enabled&&(t.service={create:{enabled:!1},update:{enabled:!1},delete:{enabled:!1},transformers:[]}),v(o=>{t.featureRef=D.ensureFeatureByNameRecursively(o,t.featureRef),o.models=O([...o.models.filter(y=>y.id!==t.id),t],[y=>y.name])},{successMessage:s?"Successfully created model!":"Successfully saved model!",onSuccess:()=>{s?(g({to:"/data/models/edit/$key",params:{key:u.keyFromId(t.id)}}).catch(j),h(n)):h(a),R?.()}})}),[h,N,S,v,s,g,R,m,n,r]);return{form:F,onSubmit:I,originalModel:r,defaultValues:M}}export{Q as u};
|
|
2
|
+
//# sourceMappingURL=use-model-form-D4qoaVd7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-model-form-D4qoaVd7.js","sources":["../../src/routes/data/models/-hooks/use-model-form.ts"],"sourcesContent":["import type {\n ModelConfig,\n ModelConfigInput,\n} from '@baseplate-dev/project-builder-lib';\nimport type { UseFormReturn } from 'react-hook-form';\nimport type { z } from 'zod';\n\nimport {\n createModelBaseSchema,\n FeatureUtils,\n modelEntityType,\n modelScalarFieldEntityType,\n ModelUtils,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n useDefinitionSchema,\n useProjectDefinition,\n useResettableForm,\n} from '@baseplate-dev/project-builder-lib/web';\nimport { toast, useEventCallback } from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useNavigate } from '@tanstack/react-router';\nimport { sortBy } from 'es-toolkit';\nimport { useMemo, useRef } from 'react';\n\nimport { logAndFormatError } from '#src/services/error-formatter.js';\nimport { NotFoundError } from '#src/utils/error.js';\n\ninterface UseModelFormOptions {\n schema?: z.ZodTypeAny;\n omit?: string[];\n onSubmitSuccess?: () => void;\n isCreate?: boolean;\n modelKey: string | undefined;\n}\n\nfunction createNewModel(): ModelConfig {\n const idFieldId = modelScalarFieldEntityType.generateNewId();\n return {\n id: modelEntityType.generateNewId(),\n name: '',\n featureRef: '',\n service: {\n create: { enabled: false },\n update: { enabled: false },\n delete: { enabled: false },\n transformers: [],\n },\n model: {\n primaryKeyFieldRefs: [idFieldId],\n fields: [\n {\n id: idFieldId,\n name: 'id',\n type: 'uuid',\n isOptional: false,\n options: {\n default: '',\n genUuid: true,\n },\n },\n ],\n },\n };\n}\n\nexport function useModelForm({\n onSubmitSuccess,\n isCreate,\n omit,\n modelKey,\n}: UseModelFormOptions): {\n form: UseFormReturn<ModelConfigInput>;\n onSubmit: () => Promise<void>;\n originalModel?: ModelConfig;\n defaultValues: ModelConfigInput;\n} {\n const { definition, saveDefinitionWithFeedback } = useProjectDefinition();\n const navigate = useNavigate();\n\n const urlModelId = isCreate ? undefined : modelEntityType.idFromKey(modelKey);\n const model = urlModelId\n ? ModelUtils.byIdOrThrow(definition, urlModelId)\n : undefined;\n\n if (!isCreate && !model) {\n throw new NotFoundError(\n 'The model you were looking for could not be found.',\n );\n }\n\n // memoize it to keep the same key when resetting\n const newModel = useMemo(() => createNewModel(), []);\n\n const baseModelSchema = useDefinitionSchema(createModelBaseSchema);\n\n const fieldsToOmit = useRef(omit);\n\n const finalSchema = useMemo(() => {\n if (fieldsToOmit.current) {\n return baseModelSchema.omit(\n Object.fromEntries(\n fieldsToOmit.current.map((field) => [field, true]),\n ) as Record<string | number, never>,\n ) as typeof baseModelSchema;\n }\n\n return baseModelSchema;\n }, [baseModelSchema]);\n\n const defaultValues = useMemo(() => {\n const modelToUse = model ?? newModel;\n return fieldsToOmit.current\n ? (finalSchema.parse(modelToUse) as ModelConfigInput)\n : modelToUse;\n }, [model, newModel, finalSchema]);\n\n const form = useResettableForm<ModelConfigInput, unknown, ModelConfig>({\n resolver: zodResolver(finalSchema),\n defaultValues,\n });\n\n const { reset, handleSubmit, setError } = form;\n\n const handleSubmitSuccess = useEventCallback(onSubmitSuccess);\n\n const onSubmit = useMemo(\n () =>\n handleSubmit((data) => {\n const updatedModel = {\n ...model,\n ...data,\n // generate new ID if new\n id: model?.id ?? modelEntityType.generateNewId(),\n };\n if (updatedModel.model.fields.length === 0) {\n toast.error('Model must have at least one field.');\n return;\n }\n if (updatedModel.model.primaryKeyFieldRefs.length === 0) {\n toast.error('Model must have at least one primary key field.');\n return;\n }\n // check for models with the same name\n const existingModel = definition.models.find(\n (m) =>\n m.id !== data.id &&\n m.name.toLowerCase() === updatedModel.name.toLowerCase(),\n );\n if (existingModel) {\n setError('name', {\n message: `Model with name ${updatedModel.name} already exists.`,\n });\n return;\n }\n\n // clear out any service methods that are disabled\n const { service } = updatedModel;\n if (service.create.enabled) {\n if (\n !service.create.fields?.length &&\n !service.create.transformerNames?.length\n ) {\n toast.error(\n 'Create method must have at least one field or transformer.',\n );\n return;\n }\n } else {\n service.create = {\n enabled: false,\n };\n }\n if (service.update.enabled) {\n if (\n !service.update.fields?.length &&\n !service.update.transformerNames?.length\n ) {\n toast.error(\n 'Update method must have at least one field or transformer.',\n );\n return;\n }\n } else {\n service.update = {\n enabled: false,\n };\n }\n if (!service.delete.enabled) {\n service.delete = {\n enabled: false,\n };\n }\n if (\n !service.create.enabled &&\n !service.update.enabled &&\n !service.delete.enabled\n ) {\n updatedModel.service = {\n create: { enabled: false },\n update: { enabled: false },\n delete: { enabled: false },\n transformers: [],\n };\n }\n\n return saveDefinitionWithFeedback(\n (draftConfig) => {\n // create feature if a new feature exists\n updatedModel.featureRef =\n FeatureUtils.ensureFeatureByNameRecursively(\n draftConfig,\n updatedModel.featureRef,\n );\n draftConfig.models = sortBy(\n [\n ...draftConfig.models.filter((m) => m.id !== updatedModel.id),\n updatedModel,\n ],\n [(m) => m.name],\n );\n },\n {\n successMessage: isCreate\n ? 'Successfully created model!'\n : 'Successfully saved model!',\n onSuccess: () => {\n if (isCreate) {\n navigate({\n to: '/data/models/edit/$key',\n params: { key: modelEntityType.keyFromId(updatedModel.id) },\n }).catch(logAndFormatError);\n reset(newModel);\n } else {\n reset(data);\n }\n handleSubmitSuccess?.();\n },\n },\n );\n }),\n [\n reset,\n setError,\n handleSubmit,\n saveDefinitionWithFeedback,\n isCreate,\n navigate,\n handleSubmitSuccess,\n definition,\n newModel,\n model,\n ],\n );\n\n return {\n form,\n onSubmit,\n originalModel: model,\n defaultValues,\n };\n}\n"],"names":["createModelBaseSchema","FeatureUtils","modelEntityType","modelScalarFieldEntityType","ModelUtils","importShared","useDefinitionSchema","useProjectDefinition","useResettableForm","toast","useEventCallback","useMemo","useRef","createNewModel","idFieldId","useModelForm","onSubmitSuccess","isCreate","omit","modelKey","definition","saveDefinitionWithFeedback","navigate","useNavigate","urlModelId","model","NotFoundError","newModel","baseModelSchema","fieldsToOmit","finalSchema","field","defaultValues","modelToUse","form","zodResolver","reset","handleSubmit","setError","handleSubmitSuccess","onSubmit","data","updatedModel","m","service","draftConfig","sortBy","logAndFormatError"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as n}from"./_virtual___federation_fn_import-CE3p-l_2.js";const{createPluginImplementationStore:o}=await n("@baseplate-dev/project-builder-lib");function m(t,e,a){const i={...a,plugins:[...a.plugins??[],{id:e.id,version:e.version,name:e.name,packageName:e.packageName}]};return o(t,i)}export{m as l};
|
|
2
|
+
//# sourceMappingURL=utils-CH9UxfXa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-CH9UxfXa.js","sources":["../../src/routes/plugins/-components/utils.ts"],"sourcesContent":["import type {\n PluginImplementationStore,\n PluginMetadataWithPaths,\n PluginStore,\n ProjectDefinition,\n} from '@baseplate-dev/project-builder-lib';\n\nimport { createPluginImplementationStore } from '@baseplate-dev/project-builder-lib';\n\nexport function loadPluginImplementationStoreWithNewPlugin(\n pluginStore: PluginStore,\n plugin: PluginMetadataWithPaths,\n projectDefinition: ProjectDefinition,\n): PluginImplementationStore {\n const newProjectDefinition: ProjectDefinition = {\n ...projectDefinition,\n plugins: [\n ...(projectDefinition.plugins ?? []),\n {\n id: plugin.id,\n version: plugin.version,\n name: plugin.name,\n packageName: plugin.packageName,\n },\n ],\n };\n return createPluginImplementationStore(pluginStore, newProjectDefinition);\n}\n"],"names":["createPluginImplementationStore","importShared","loadPluginImplementationStoreWithNewPlugin","pluginStore","plugin","projectDefinition","newProjectDefinition"],"mappings":"kEAOA,KAAA,CAAA,gCAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EAEgB,SAAAC,EACdC,EACAC,EACAC,EAC2B,CAC3B,MAAMC,EAA0C,CAC9C,GAAGD,EACH,QAAS,CACP,GAAIA,EAAkB,SAAW,CAAC,EAClC,CACE,GAAID,EAAO,GACX,QAASA,EAAO,QAChB,KAAMA,EAAO,KACb,YAAaA,EAAO,WAAA,CACtB,CAEJ,EACO,OAAAJ,EAAgCG,EAAaG,CAAoB,CAC1E"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i}from"./_virtual___federation_fn_import-CE3p-l_2.js";import{j as e}from"./index.esm-CyH9wtdI.js";import{g as v,s as f}from"./index-gE__lQ6b.js";const{authConfigSpec:C,createWebAppSchema:w}=await i("@baseplate-dev/project-builder-lib"),{useBlockUnsavedChangesNavigate:A,useDefinitionSchema:k,useProjectDefinition:m,useResettableForm:D}=await i("@baseplate-dev/project-builder-lib/web"),{Button:F,CheckboxFieldController:t,InputFieldController:n,MultiComboboxFieldController:R}=await i("@baseplate-dev/ui-components"),U=function(){const{saveDefinitionWithFeedback:b,isSavingDefinition:u}=m(),{appConfig:s}=v.useLoaderData(),d=k(w),j=D({resolver:f(d),values:s}),{control:o,handleSubmit:x,reset:g}=j,{definition:h,pluginContainer:S}=m(),l=x(a=>b(c=>{c.apps=c.apps.map(r=>r.id===s.id?a:r)}));A({control:o,reset:g,onSubmit:l});const p=S.getPluginSpecOptional(C)?.getAuthRoles(h).map(a=>({label:a.name,value:a.id}));return e.jsx("div",{className:"p-4",children:e.jsxs("form",{onSubmit:l,className:"space-y-4",children:[e.jsx(n,{label:"Name",control:o,name:"name"}),e.jsx(n,{label:"Package Location (optional) e.g. packages/web",control:o,name:"packageLocation"}),e.jsx(n,{label:"Page Title",control:o,name:"title"}),e.jsx(n,{label:"Description Meta Tag",control:o,name:"description"}),e.jsx(t,{label:"Include Auth?",control:o,name:"includeAuth"}),e.jsx(t,{label:"Include Upload Components?",control:o,name:"includeUploadComponents"}),e.jsx(t,{label:"Enable Subscriptions?",control:o,name:"enableSubscriptions"}),p&&e.jsx(R,{label:"Allowed Roles?",control:o,options:p,name:"allowedRoles"}),e.jsx(F,{type:"submit",disabled:u,children:"Save"})]})})};export{U as component};
|
|
2
|
+
//# sourceMappingURL=web-C6Idxok-.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-C6Idxok-.js","sources":["../../src/routes/apps/edit.$key/web.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n authConfigSpec,\n createWebAppSchema,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n useBlockUnsavedChangesNavigate,\n useDefinitionSchema,\n useProjectDefinition,\n useResettableForm,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n CheckboxFieldController,\n InputFieldController,\n MultiComboboxFieldController,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { createFileRoute, notFound, redirect } from '@tanstack/react-router';\n\nexport const Route = createFileRoute('/apps/edit/$key/web')({\n component: WebAppForm,\n loader: ({ context: { app }, params: { key } }) => {\n if (!app) throw notFound();\n if (app.type !== 'web') {\n throw redirect({ to: '/apps/edit/$key', params: { key } });\n }\n return {\n appConfig: app,\n };\n },\n});\n\nfunction WebAppForm(): React.JSX.Element {\n const { saveDefinitionWithFeedback, isSavingDefinition } =\n useProjectDefinition();\n const { appConfig } = Route.useLoaderData();\n\n const webAppSchema = useDefinitionSchema(createWebAppSchema);\n const formProps = useResettableForm({\n resolver: zodResolver(webAppSchema),\n values: appConfig,\n });\n const { control, handleSubmit, reset } = formProps;\n\n const { definition, pluginContainer } = useProjectDefinition();\n\n const onSubmit = handleSubmit((data) =>\n saveDefinitionWithFeedback((draftConfig) => {\n draftConfig.apps = draftConfig.apps.map((app) =>\n app.id === appConfig.id ? data : app,\n );\n }),\n );\n\n useBlockUnsavedChangesNavigate({ control, reset, onSubmit });\n\n const roleOptions = pluginContainer\n .getPluginSpecOptional(authConfigSpec)\n ?.getAuthRoles(definition)\n .map((role) => ({\n label: role.name,\n value: role.id,\n }));\n\n return (\n <div className=\"p-4\">\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <InputFieldController label=\"Name\" control={control} name=\"name\" />\n <InputFieldController\n label=\"Package Location (optional) e.g. packages/web\"\n control={control}\n name=\"packageLocation\"\n />\n <InputFieldController\n label=\"Page Title\"\n control={control}\n name=\"title\"\n />\n <InputFieldController\n label=\"Description Meta Tag\"\n control={control}\n name=\"description\"\n />\n <CheckboxFieldController\n label=\"Include Auth?\"\n control={control}\n name=\"includeAuth\"\n />\n <CheckboxFieldController\n label=\"Include Upload Components?\"\n control={control}\n name=\"includeUploadComponents\"\n />\n <CheckboxFieldController\n label=\"Enable Subscriptions?\"\n control={control}\n name=\"enableSubscriptions\"\n />\n {roleOptions && (\n <MultiComboboxFieldController\n label=\"Allowed Roles?\"\n control={control}\n options={roleOptions}\n name=\"allowedRoles\"\n />\n )}\n <Button type=\"submit\" disabled={isSavingDefinition}>\n Save\n </Button>\n </form>\n </div>\n );\n}\n"],"names":["authConfigSpec","createWebAppSchema","importShared","useBlockUnsavedChangesNavigate","useDefinitionSchema","useProjectDefinition","useResettableForm","Button","CheckboxFieldController","InputFieldController","MultiComboboxFieldController","SplitComponent","saveDefinitionWithFeedback","isSavingDefinition","appConfig","Route","useLoaderData","webAppSchema","formProps","resolver","zodResolver","values","control","handleSubmit","reset","definition","pluginContainer","onSubmit","draftConfig","apps","map","app","id","data","roleOptions","getPluginSpecOptional","getAuthRoles","role","label","name","value","jsx"],"mappings":"wJAEA,KAAA,CAAA,eAAAA,EAAA,mBAAAC,CAAA,EAAA,MAAAC,EAAA,oCAAA,EAIA,CAAA,+BAAAC,EAAA,oBAAAC,EAAA,qBAAAC,EAAA,kBAAAC,CAAA,EAAA,MAAAJ,EAAA,wCAAA,EAMA,CAAA,OAAAK,EAAA,wBAAAC,EAAA,qBAAAC,EAAA,6BAAAC,CAAA,EAAA,MAAAR,EAAA,8BAAA,EAMsDS,EAAA,UAgBb,CACjC,KAAA,CAAEC,2BAAAA,EAA4BC,mBAAAA,GAClCR,EAAqB,EACjB,CAAES,UAAAA,CAAAA,EAAcC,EAAMC,cAAc,EAEpCC,EAAeb,EAAoBH,CAAkB,EACrDiB,EAAYZ,EAAkB,CAClCa,SAAUC,EAAYH,CAAY,EAClCI,OAAQP,CAAAA,CACT,EACK,CAAEQ,QAAAA,EAASC,aAAAA,EAAcC,MAAAA,CAAAA,EAAUN,EAEnC,CAAEO,WAAAA,EAAYC,gBAAAA,GAAoBrB,EAAqB,EAEvDsB,EAAWJ,EACfX,GAAAA,EAA4CgB,GAAA,CAC9BC,EAAAA,KAAOD,EAAYC,KAAKC,IAAKC,GACvCA,EAAIC,KAAOlB,EAAUkB,GAAKC,EAAOF,CACnC,CAAA,CACD,CACH,EAE+B5B,EAAA,CAAEmB,QAAAA,EAASE,MAAAA,EAAOG,SAAAA,CAAAA,CAAU,EAErDO,MAAAA,EAAcR,EACjBS,sBAAsBnC,CAAc,GACnCoC,aAAaX,CAAU,EACxBK,IAAeO,IAAA,CACdC,MAAOD,EAAKE,KACZC,MAAOH,EAAKL,EAAAA,EACZ,EAGF,OAAAS,EAAA,IAAC,OAAI,UAAU,MACb,gBAAC,OAAK,CAAA,SAAAd,EAAoB,UAAU,YAClC,SAAA,CAAAc,EAAA,IAAChC,EAAqB,CAAA,MAAM,OAAO,QAAAa,EAAkB,KAAK,OAAM,QAC/Db,EACC,CAAA,MAAM,gDACN,QAAAa,EACA,KAAK,kBAAiB,QAEvBb,EACC,CAAA,MAAM,aACN,QAAAa,EACA,KAAK,QAAO,QAEbb,EACC,CAAA,MAAM,uBACN,QAAAa,EACA,KAAK,cAAa,QAEnBd,EACC,CAAA,MAAM,gBACN,QAAAc,EACA,KAAK,cAAa,QAEnBd,EACC,CAAA,MAAM,6BACN,QAAAc,EACA,KAAK,0BAAyB,QAE/Bd,EACC,CAAA,MAAM,wBACN,QAAAc,EACA,KAAK,sBAAqB,EAE3BY,SACExB,EACC,CAAA,MAAM,iBACN,QAAAY,EACA,QAASY,EACT,KAAK,cAER,CAAA,QACA3B,EAAO,CAAA,KAAK,SAAS,SAAUM,EAAmB,SAEnD,MAAA,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAEJ"}
|
package/dist/index.html
CHANGED
|
@@ -10,16 +10,14 @@
|
|
|
10
10
|
content="Web app for building a baseplate project"
|
|
11
11
|
/>
|
|
12
12
|
<title>Baseplate Project Builder</title>
|
|
13
|
-
<script type="module" crossorigin src="/assets/index-
|
|
14
|
-
<link rel="modulepreload" crossorigin href="/assets/_virtual___federation_fn_import-
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/assets/index.esm-
|
|
13
|
+
<script type="module" crossorigin src="/assets/index-gE__lQ6b.js"></script>
|
|
14
|
+
<link rel="modulepreload" crossorigin href="/assets/_virtual___federation_fn_import-CE3p-l_2.js">
|
|
15
|
+
<link rel="modulepreload" crossorigin href="/assets/index.esm-CyH9wtdI.js">
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/assets/index-9Ra4Lmds.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/assets/index-B0D_rfGi.js">
|
|
18
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
19
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
20
|
-
<link rel="
|
|
21
|
-
<link rel="modulepreload" crossorigin href="/assets/capitalize-gOJXDbsR.js">
|
|
22
|
-
<link rel="stylesheet" crossorigin href="/assets/index-BDJ79UQH.css">
|
|
18
|
+
<link rel="modulepreload" crossorigin href="/assets/index-BS45dlQs.js">
|
|
19
|
+
<link rel="modulepreload" crossorigin href="/assets/immer-xieDw-3D.js">
|
|
20
|
+
<link rel="stylesheet" crossorigin href="/assets/index-B9Di1LKs.css">
|
|
23
21
|
</head>
|
|
24
22
|
<body>
|
|
25
23
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@baseplate-dev/project-builder-web",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "Web interface for constructing project builder JSON",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"@dnd-kit/sortable": "^10.0.0",
|
|
46
46
|
"@dnd-kit/utilities": "^3.2.1",
|
|
47
47
|
"@hookform/resolvers": "5.0.1",
|
|
48
|
+
"@tanstack/react-router": "1.124.0",
|
|
48
49
|
"@testing-library/dom": "10.4.0",
|
|
49
50
|
"@testing-library/jest-dom": "6.6.3",
|
|
50
51
|
"@testing-library/react": "16.2.0",
|
|
@@ -63,20 +64,20 @@
|
|
|
63
64
|
"react": "19.1.0",
|
|
64
65
|
"react-dom": "19.1.0",
|
|
65
66
|
"react-error-boundary": "6.0.0",
|
|
66
|
-
"react-hook-form": "7.
|
|
67
|
+
"react-hook-form": "7.60.0",
|
|
67
68
|
"react-icons": "5.5.0",
|
|
68
|
-
"react-router-dom": "6.30.0",
|
|
69
69
|
"react-timeago": "8.2.0",
|
|
70
70
|
"semver": "^7.5.4",
|
|
71
71
|
"zod": "3.24.1",
|
|
72
72
|
"zustand": "5.0.3",
|
|
73
|
-
"@baseplate-dev/project-builder-lib": "0.2.
|
|
74
|
-
"@baseplate-dev/ui-components": "0.2.
|
|
75
|
-
"@baseplate-dev/utils": "0.2.
|
|
73
|
+
"@baseplate-dev/project-builder-lib": "0.2.3",
|
|
74
|
+
"@baseplate-dev/ui-components": "0.2.3",
|
|
75
|
+
"@baseplate-dev/utils": "0.2.3"
|
|
76
76
|
},
|
|
77
77
|
"devDependencies": {
|
|
78
78
|
"@originjs/vite-plugin-federation": "1.3.6",
|
|
79
79
|
"@tailwindcss/vite": "4.1.6",
|
|
80
|
+
"@tanstack/router-plugin": "1.124.0",
|
|
80
81
|
"@types/culori": "^2.1.1",
|
|
81
82
|
"@types/node": "^22.0.0",
|
|
82
83
|
"@types/semver": "^7.5.0",
|
|
@@ -90,8 +91,8 @@
|
|
|
90
91
|
"vite": "6.3.5",
|
|
91
92
|
"vite-plugin-svgr": "4.3.0",
|
|
92
93
|
"vitest": "3.0.7",
|
|
93
|
-
"@baseplate-dev/project-builder-server": "0.2.
|
|
94
|
-
"@baseplate-dev/tools": "0.2.
|
|
94
|
+
"@baseplate-dev/project-builder-server": "0.2.3",
|
|
95
|
+
"@baseplate-dev/tools": "0.2.3"
|
|
95
96
|
},
|
|
96
97
|
"engines": {
|
|
97
98
|
"node": "^22.0.0"
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i}from"../../_virtual___federation_fn_import-BawTfoQI.js";import{j as a,c as v,i as p,b as B}from"../../index.esm-H0JGW0RR.js";import{F as k,M,I as S,v as y,c as h}from"../../model-merger-D2RoujrB.js";import{c as E}from"../../capitalize-gOJXDbsR.js";import{i as b}from"../../isEqual-C420KeG-.js";const w=await i("react"),j=w.createContext(null);function m(){const e=w.useContext(j);if(!e)throw new Error("useProjectDefinition must be used within a <ProjectDefinitionProvider>");return e}const{ComboboxField:D,useControllerMerged:F}=await i("@baseplate-dev/ui-components"),{useMemo:W,useState:N}=await i("react");function T(e){return{label:`Create "${e}"`,value:e}}function I({canCreate:e,value:t,...n}){const{definition:r}=m(),[o,s]=N(""),c=W(()=>{const d=r.features.map(l=>({label:l.name,value:l.id}));if(!e)return d;const u=o||t;return!!!d.some(l=>l.label===u||l.value===u)&&u&&k.validateFeatureName(u)?[...d,T(u)]:d},[r.features,o,t,e]);return a.jsx(D,{placeholder:"Select a feature",...n,searchQuery:e?o:void 0,onSearchQueryChange:s,options:c,value:t})}function ae({name:e,control:t,...n}){const{field:r,fieldState:{error:o}}=F({name:e,control:t},n),s=n;return a.jsx(I,{error:o?.message,...s,...r,value:r.value??null})}const{ComboboxField:$,useControllerMerged:P}=await i("@baseplate-dev/ui-components"),{useMemo:R,useState:q}=await i("react");function A(e){return{label:`Create "${e}"`,value:e}}function V({canCreate:e,value:t,...n}){const{definition:r}=m(),[o,s]=q(""),c=R(()=>{const d=r.models.map(l=>({label:l.name,value:l.id}));if(!e)return d;const u=o||t;return!!!d.some(l=>l.label===u||l.value===u)&&u&&M.validateModelName(u)?[...d,A(u)]:d},[r.models,o,t,e]);return a.jsx($,{placeholder:"Select a model",...n,searchQuery:e?o:void 0,onSearchQueryChange:s,options:c,value:t})}function ie({name:e,control:t,...n}){const{field:r,fieldState:{error:o}}=P({name:e,control:t},n),s=n;return a.jsx(V,{error:o?.message,...s,...r,value:r.value??null})}const{Alert:U,AlertDescription:Q,AlertTitle:O}=await i("@baseplate-dev/ui-components");function ue({pendingModelChanges:e}){const t=Object.values(e).filter(n=>n!==void 0);return t.length===0?null:a.jsx("div",{className:"space-y-4",children:t.map(n=>a.jsxs(U,{variant:n.isNewModel?"default":"warning",children:[a.jsxs(O,{children:[n.isNewModel?"New Model":"Model Changes",": ",n.name]}),a.jsx(Q,{children:a.jsxs("div",{className:"mt-2 space-y-2",children:[n.isNewModel?a.jsx("p",{children:"This is a new model that will be created with the following configuration:"}):a.jsx("p",{children:"The following changes will be applied to the model:"}),a.jsx("ul",{className:"list-disc pl-4 space-y-1",children:Object.entries(n.changes).map(([r,o])=>{const s=S[r];if(!s)return null;if(o?.length)return a.jsxs("li",{children:[o.length===1?E(s.name):a.jsxs(a.Fragment,{children:[a.jsx("span",{className:"font-medium",children:o.length})," ",s.name,"(s)"]})," ","will be ",s.getActionVerb(n.isNewModel)]},r)})})]})})]},n.name))})}const{createContext:z}=await i("react"),H=z(null),{useEffect:C,useId:Y}=await i("react"),f=v(e=>({activeBlockers:[],addBlocker:t=>{e(n=>({activeBlockers:[...n.activeBlockers,t]}))},removeBlocker:t=>{e(n=>({activeBlockers:n.activeBlockers.filter(r=>r.id!==t)}))},requestedBlockers:[],requestBlocker(t){e(n=>({requestedBlockers:[...n.requestedBlockers,t]}))},clearRequestedBlockers:()=>{e(()=>({requestedBlockers:[]}))}}));function le(){const e=f(r=>r.activeBlockers.length>0),t=f(r=>r.clearRequestedBlockers);C(()=>()=>{t()},[t]);const n=f(r=>r.requestBlocker);return e?n:({onContinue:r})=>{r()}}function g(e){const t=Y(),n=f(o=>o.addBlocker),r=f(o=>o.removeBlocker);C(()=>{if(!e.disableBlock)return n({disableBlock:e.disableBlock,title:e.title,content:e.content,buttonContinueWithoutSaveText:e.buttonContinueWithoutSaveText,onContinueWithoutSave:e.onContinueWithoutSave,buttonContinueText:e.buttonContinueText,onContinue:e.onContinue,id:t}),()=>{r(t)}},[n,r,e.disableBlock,e.buttonContinueWithoutSaveText,e.onContinueWithoutSave,e.buttonContinueText,e.content,e.title,e.onContinue,t])}function ce(e,t){g({disableBlock:!e.isDirty,title:"Unsaved Changes",content:"You have unsaved changes. Are you sure you want to continue?",buttonContinueText:"Discard Changes",onContinue:()=>(t(),!0)})}const{toast:de}=await i("@baseplate-dev/ui-components"),{useEffect:fe,useRef:G}=await i("react");function me({control:e,reset:t,onSubmit:n}){const r=G(!1),o=p({control:e});r.current=o.isDirty,g({disableBlock:!o.isDirty,title:"Unsaved Changes",content:"You have unsaved changes. Do you want to save your changes?",buttonContinueWithoutSaveText:"Discard Changes",onContinueWithoutSave:()=>(t(),!0),buttonContinueText:"Save",onContinue:async()=>(await n(),await new Promise(s=>setTimeout(s,1)),!r.current)})}const{useContext:J}=await i("react");function be(){const e=J(H);if(!e)throw new Error("useErrorHandler must be used within an ErrorHandlerContext");return e}const{useMemo:K}=await i("react");function he(e){const{pluginContainer:t}=m();return K(()=>y(e,t),[e,t])}const{toast:L}=await i("@baseplate-dev/ui-components"),{useEffect:X,useRef:Z}=await i("react");function we(e){const t=B(e),{reset:n,formState:r}=t,{isDirty:o}=r,{updatedExternally:s}=m(),c=Z(void 0);return X(()=>{c.current&&!b(c.current.oldDefaultValues,e?.defaultValues)&&(n(e?.defaultValues),o&&s&&L.warning("Contents were updated externally so form was reset!")),(!c.current||!b(c.current.oldDefaultValues,e?.defaultValues))&&(c.current={oldDefaultValues:e?.defaultValues})},[e?.defaultValues,n,s,o]),t}function Ce(e){return e}function _(){const e=new Map;return{registerInputWebConfig(t){if(e.has(t.name))throw new Error(`Admin CRUD input with name ${t.name} is already registered`);e.set(t.name,t)},getInputWebConfig(t,n=[]){const r=n.find(s=>s.name===t);if(r)return r;const o=e.get(t);if(!o)throw new Error(`Unable to find input with name ${t}`);return o},getInputWebConfigs(t=[]){return[...t,...e.values()]}}}const ge=h("core/admin-crud-input-web",{defaultInitializer:_});function xe(e){return e}function ee(){const e=new Map;return{registerTransformerWebConfig(t){if(e.has(t.name))throw new Error(`Model transformer with name ${t.name} is already registered`);e.set(t.name,t)},getTransformerWebConfig(t,n=[]){const r=n.find(s=>s.name===t);if(r)return r;const o=e.get(t);if(!o)throw new Error(`Unable to find transformer with name ${t}`);return o},getTransformerWebConfigs(t=[]){return[...t,...e.values()]}}}const ve=h("core/model-transformer-web",{defaultInitializer:ee});function pe(e){if(e!=="")return e}export{H as ErrorHandlerContext,I as FeatureComboboxField,ae as FeatureComboboxFieldController,V as ModelComboboxField,ie as ModelComboboxFieldController,ue as ModelMergerResultAlert,j as ProjectDefinitionContext,ge as adminCrudInputWebSpec,Ce as createAdminCrudInputWebConfig,_ as createAdminCrudInputWebImplementation,ee as createModelTransformerWebImplementation,xe as createNewModelTransformerWebConfig,ve as modelTransformerWebSpec,pe as setUndefinedIfEmpty,le as useBlockBeforeContinue,ce as useBlockDirtyFormNavigate,me as useBlockUnsavedChangesNavigate,g as useBlockerDialog,f as useBlockerDialogState,be as useErrorHandler,he as usePluginEnhancedSchema,m as useProjectDefinition,we as useResettableForm};
|
|
2
|
-
//# sourceMappingURL=web-DNtY4wq3.js.map
|
package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/web-DNtY4wq3.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web-DNtY4wq3.js","sources":["../../../../../project-builder-lib/dist/web/hooks/use-project-definition.js","../../../../../project-builder-lib/dist/web/components/feature-combobox-field.js","../../../../../project-builder-lib/dist/web/components/model-combobox-field.js","../../../../../project-builder-lib/dist/web/components/model-merger-result-alert.js","../../../../../project-builder-lib/dist/web/contexts/error-handler.js","../../../../../project-builder-lib/dist/web/hooks/use-blocker-dialog.js","../../../../../project-builder-lib/dist/web/hooks/use-block-dirty-form-navigate.js","../../../../../project-builder-lib/dist/web/hooks/use-block-unsaved-changes-navigate.js","../../../../../project-builder-lib/dist/web/hooks/use-error-handler.js","../../../../../project-builder-lib/dist/web/hooks/use-plugin-enhanced-schema.js","../../../../../project-builder-lib/dist/web/hooks/use-resettable-form.js","../../../../../project-builder-lib/dist/web/specs/admin-crud-input-web-spec.js","../../../../../project-builder-lib/dist/web/specs/model-transformer-web-spec.js","../../../../../project-builder-lib/dist/web/utils/form.js"],"sourcesContent":["import React from 'react';\nexport const ProjectDefinitionContext = React.createContext(null);\nexport function useProjectDefinition() {\n const result = React.useContext(ProjectDefinitionContext);\n if (!result) {\n throw new Error(`useProjectDefinition must be used within a <ProjectDefinitionProvider>`);\n }\n return result;\n}\n//# sourceMappingURL=use-project-definition.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { ComboboxField, useControllerMerged, } from '@baseplate-dev/ui-components';\nimport { useMemo, useState } from 'react';\nimport { FeatureUtils } from '#src/definition/index.js';\nimport { useProjectDefinition } from '../hooks/use-project-definition.js';\nfunction createCreateOption(value) {\n return {\n label: `Create \"${value}\"`,\n value,\n };\n}\nfunction FeatureComboboxField({ canCreate, value, ...rest }) {\n const { definition } = useProjectDefinition();\n const [searchQuery, setSearchQuery] = useState('');\n const featureOptions = useMemo(() => {\n const baseFeatures = definition.features.map((feature) => ({\n label: feature.name,\n value: feature.id,\n }));\n if (!canCreate)\n return baseFeatures;\n const newFeatureName = searchQuery ? searchQuery : value;\n const doesNewFeatureExist = !!baseFeatures.some((option) => option.label === newFeatureName || option.value === newFeatureName);\n return !doesNewFeatureExist &&\n newFeatureName &&\n FeatureUtils.validateFeatureName(newFeatureName)\n ? [...baseFeatures, createCreateOption(newFeatureName)]\n : baseFeatures;\n }, [definition.features, searchQuery, value, canCreate]);\n return (_jsx(ComboboxField, { placeholder: \"Select a feature\", ...rest, searchQuery: canCreate ? searchQuery : undefined, onSearchQueryChange: setSearchQuery, options: featureOptions, value: value }));\n}\nfunction FeatureComboboxFieldController({ name, control, ...rest }) {\n const { field, fieldState: { error }, } = useControllerMerged({ name, control }, rest);\n const restProps = rest;\n return (_jsx(FeatureComboboxField, { error: error?.message, ...restProps, ...field, value: field.value ?? null }));\n}\nexport { FeatureComboboxField, FeatureComboboxFieldController };\n//# sourceMappingURL=feature-combobox-field.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { ComboboxField, useControllerMerged, } from '@baseplate-dev/ui-components';\nimport { useMemo, useState } from 'react';\nimport { ModelUtils } from '#src/definition/index.js';\nimport { useProjectDefinition } from '../hooks/use-project-definition.js';\nfunction createCreateOption(value) {\n return {\n label: `Create \"${value}\"`,\n value,\n };\n}\nfunction ModelComboboxField({ canCreate, value, ...rest }) {\n const { definition } = useProjectDefinition();\n const [searchQuery, setSearchQuery] = useState('');\n const modelOptions = useMemo(() => {\n const baseModels = definition.models.map((model) => ({\n label: model.name,\n value: model.id,\n }));\n if (!canCreate)\n return baseModels;\n const newModelName = searchQuery ? searchQuery : value;\n const doesNewModelExist = !!baseModels.some((option) => option.label === newModelName || option.value === newModelName);\n return !doesNewModelExist &&\n newModelName &&\n ModelUtils.validateModelName(newModelName)\n ? [...baseModels, createCreateOption(newModelName)]\n : baseModels;\n }, [definition.models, searchQuery, value, canCreate]);\n return (_jsx(ComboboxField, { placeholder: \"Select a model\", ...rest, searchQuery: canCreate ? searchQuery : undefined, onSearchQueryChange: setSearchQuery, options: modelOptions, value: value }));\n}\nfunction ModelComboboxFieldController({ name, control, ...rest }) {\n const { field, fieldState: { error }, } = useControllerMerged({ name, control }, rest);\n const restProps = rest;\n return (_jsx(ModelComboboxField, { error: error?.message, ...restProps, ...field, value: field.value ?? null }));\n}\nexport { ModelComboboxField, ModelComboboxFieldController };\n//# sourceMappingURL=model-combobox-field.js.map","import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Alert, AlertDescription, AlertTitle, } from '@baseplate-dev/ui-components';\nimport { capitalize } from 'es-toolkit';\nimport { modelMergerDefinitionDiffConfig } from '#src/tools/index.js';\nexport function ModelMergerResultAlert({ pendingModelChanges, }) {\n const changes = Object.values(pendingModelChanges).filter((change) => change !== undefined);\n if (changes.length === 0) {\n return null;\n }\n return (_jsx(\"div\", { className: \"space-y-4\", children: changes.map((change) => (_jsxs(Alert, { variant: change.isNewModel ? 'default' : 'warning', children: [_jsxs(AlertTitle, { children: [change.isNewModel ? 'New Model' : 'Model Changes', \": \", change.name] }), _jsx(AlertDescription, { children: _jsxs(\"div\", { className: \"mt-2 space-y-2\", children: [change.isNewModel ? (_jsx(\"p\", { children: \"This is a new model that will be created with the following configuration:\" })) : (_jsx(\"p\", { children: \"The following changes will be applied to the model:\" })), _jsx(\"ul\", { className: \"list-disc pl-4 space-y-1\", children: Object.entries(change.changes).map(([key, value]) => {\n const field = modelMergerDefinitionDiffConfig[key];\n if (!field) {\n return null;\n }\n if (value?.length) {\n return (_jsxs(\"li\", { children: [value.length === 1 ? (capitalize(field.name)) : (_jsxs(_Fragment, { children: [_jsx(\"span\", { className: \"font-medium\", children: value.length }), ' ', field.name, \"(s)\"] })), ' ', \"will be \", field.getActionVerb(change.isNewModel)] }, key));\n }\n }) })] }) })] }, change.name))) }));\n}\n//# sourceMappingURL=model-merger-result-alert.js.map","import { createContext } from 'react';\nexport const ErrorHandlerContext = createContext(null);\n//# sourceMappingURL=error-handler.js.map","import { useEffect, useId } from 'react';\nimport { create } from 'zustand';\nexport const useBlockerDialogState = create((set) => ({\n activeBlockers: [],\n addBlocker: (options) => {\n set((state) => ({\n activeBlockers: [...state.activeBlockers, options],\n }));\n },\n removeBlocker: (id) => {\n set((state) => ({\n activeBlockers: state.activeBlockers.filter((blocker) => blocker.id !== id),\n }));\n },\n requestedBlockers: [],\n requestBlocker(options) {\n set((state) => ({\n requestedBlockers: [...state.requestedBlockers, options],\n }));\n },\n clearRequestedBlockers: () => {\n set(() => ({\n requestedBlockers: [],\n }));\n },\n}));\nexport function useBlockBeforeContinue() {\n const hasActiveBlockers = useBlockerDialogState((state) => state.activeBlockers.length > 0);\n const clearRequestedBlockers = useBlockerDialogState((state) => state.clearRequestedBlockers);\n // make sure we clear any blocker requests if we navigate away\n useEffect(() => () => {\n clearRequestedBlockers();\n }, [clearRequestedBlockers]);\n const requestBlocker = useBlockerDialogState((state) => state.requestBlocker);\n // if no blockers, continue immediately\n if (!hasActiveBlockers) {\n return ({ onContinue }) => {\n onContinue();\n };\n }\n return requestBlocker;\n}\nexport function useBlockerDialog(options) {\n const id = useId();\n const addBlocker = useBlockerDialogState((state) => state.addBlocker);\n const removeBlocker = useBlockerDialogState((state) => state.removeBlocker);\n useEffect(() => {\n if (options.disableBlock) {\n return;\n }\n addBlocker({\n disableBlock: options.disableBlock,\n title: options.title,\n content: options.content,\n buttonContinueWithoutSaveText: options.buttonContinueWithoutSaveText,\n onContinueWithoutSave: options.onContinueWithoutSave,\n buttonContinueText: options.buttonContinueText,\n onContinue: options.onContinue,\n id,\n });\n return () => {\n removeBlocker(id);\n };\n }, [\n addBlocker,\n removeBlocker,\n options.disableBlock,\n options.buttonContinueWithoutSaveText,\n options.onContinueWithoutSave,\n options.buttonContinueText,\n options.content,\n options.title,\n options.onContinue,\n id,\n ]);\n}\n//# sourceMappingURL=use-blocker-dialog.js.map","import { useBlockerDialog } from './use-blocker-dialog.js';\nexport function useBlockDirtyFormNavigate(formState, reset) {\n useBlockerDialog({\n disableBlock: !formState.isDirty,\n title: 'Unsaved Changes',\n content: 'You have unsaved changes. Are you sure you want to continue?',\n buttonContinueText: 'Discard Changes',\n onContinue: () => {\n reset();\n return true;\n },\n });\n}\n//# sourceMappingURL=use-block-dirty-form-navigate.js.map","import { toast } from '@baseplate-dev/ui-components';\nimport { flattenObject } from 'es-toolkit';\nimport { useEffect, useRef } from 'react';\nimport { useFormState } from 'react-hook-form';\nimport { useBlockerDialog } from './use-blocker-dialog.js';\nexport function useBlockUnsavedChangesNavigate({ control, reset, onSubmit, }) {\n const isDirtyRef = useRef(false);\n const formState = useFormState({ control });\n isDirtyRef.current = formState.isDirty;\n if (import.meta.env.DEV) {\n // eslint-disable-next-line react-hooks/rules-of-hooks -- only want to run this check in dev mode for performance/usability reasons\n useEffect(() => {\n if (Object.keys(formState.dirtyFields).length === 0 &&\n formState.isDirty) {\n // a bit of a hack to figure out what the issue is but OK since we only do this in dev mode\n const { _formValues, _defaultValues } = control;\n const formValueKeys = Object.keys(flattenObject(_formValues));\n const defaultValueKeys = Object.keys(flattenObject(_defaultValues));\n const missingKeys = formValueKeys.filter((key) => !defaultValueKeys.includes(key));\n toast.error(`Form is dirty but no fields are marked as dirty. This implies that there is likely a field ` +\n `is controlled but not set in defaultValues. This can be fixed by setting the default value to the field. ` +\n `Note: You will only see this error if you are running the app in dev mode. ` +\n `Missing fields: ${missingKeys.join(', ')}`);\n }\n }, [formState.dirtyFields, formState.isDirty, control]);\n }\n useBlockerDialog({\n disableBlock: !formState.isDirty,\n title: 'Unsaved Changes',\n content: 'You have unsaved changes. Do you want to save your changes?',\n buttonContinueWithoutSaveText: 'Discard Changes',\n onContinueWithoutSave: () => {\n reset();\n return true;\n },\n buttonContinueText: 'Save',\n onContinue: async () => {\n await onSubmit();\n // a bit of a hack to make sure we get the latest form state before continuing\n // there's not an easy way of figuring out if the submission was successful or not\n // so we wait for a React re-render and then check if the form is still dirty\n await new Promise((resolve) => setTimeout(resolve, 1));\n return !isDirtyRef.current;\n },\n });\n}\n//# sourceMappingURL=use-block-unsaved-changes-navigate.js.map","import { useContext } from 'react';\nimport { ErrorHandlerContext } from '../contexts/error-handler.js';\nexport function useErrorHandler() {\n const context = useContext(ErrorHandlerContext);\n if (!context) {\n throw new Error('useErrorHandler must be used within an ErrorHandlerContext');\n }\n return context;\n}\n//# sourceMappingURL=use-error-handler.js.map","import { useMemo } from 'react';\nimport { zPluginWrapper } from '#src/plugins/index.js';\nimport { useProjectDefinition } from './use-project-definition.js';\nexport function usePluginEnhancedSchema(schema) {\n const { pluginContainer } = useProjectDefinition();\n return useMemo(() => zPluginWrapper(schema, pluginContainer), [schema, pluginContainer]);\n}\n//# sourceMappingURL=use-plugin-enhanced-schema.js.map","import { toast } from '@baseplate-dev/ui-components';\nimport { isEqual } from 'es-toolkit';\nimport { useEffect, useRef } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useProjectDefinition } from './use-project-definition.js';\nexport function useResettableForm(props) {\n const formProps = useForm(props);\n const { reset, formState } = formProps;\n const { isDirty } = formState;\n const { updatedExternally } = useProjectDefinition();\n const oldValues = useRef(undefined);\n useEffect(() => {\n if (oldValues.current &&\n !isEqual(oldValues.current.oldDefaultValues, props?.defaultValues)) {\n reset(props?.defaultValues);\n if (isDirty && updatedExternally) {\n toast.warning('Contents were updated externally so form was reset!');\n }\n }\n if (!oldValues.current ||\n !isEqual(oldValues.current.oldDefaultValues, props?.defaultValues)) {\n oldValues.current = {\n oldDefaultValues: props?.defaultValues,\n };\n }\n }, [props?.defaultValues, reset, updatedExternally, isDirty]);\n return formProps;\n}\n//# sourceMappingURL=use-resettable-form.js.map","import { createPluginSpec } from '#src/plugins/spec/types.js';\nexport function createAdminCrudInputWebConfig(config) {\n return config;\n}\nexport function createAdminCrudInputWebImplementation() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const inputs = new Map();\n return {\n registerInputWebConfig(input) {\n if (inputs.has(input.name)) {\n throw new Error(`Admin CRUD input with name ${input.name} is already registered`);\n }\n inputs.set(input.name, input);\n },\n getInputWebConfig(name, builtInInputs = []) {\n const builtInInput = builtInInputs.find((b) => b.name === name);\n if (builtInInput) {\n return builtInInput;\n }\n const input = inputs.get(name);\n if (!input) {\n throw new Error(`Unable to find input with name ${name}`);\n }\n return input;\n },\n getInputWebConfigs(builtInInputs = []) {\n return [...builtInInputs, ...inputs.values()];\n },\n };\n}\n/**\n * Spec for adding config component for plugin\n */\nexport const adminCrudInputWebSpec = createPluginSpec('core/admin-crud-input-web', { defaultInitializer: createAdminCrudInputWebImplementation });\n//# sourceMappingURL=admin-crud-input-web-spec.js.map","import { createPluginSpec } from '#src/plugins/spec/types.js';\nexport function createNewModelTransformerWebConfig(config) {\n return config;\n}\nexport function createModelTransformerWebImplementation() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const transformers = new Map();\n return {\n registerTransformerWebConfig(transformer) {\n if (transformers.has(transformer.name)) {\n throw new Error(`Model transformer with name ${transformer.name} is already registered`);\n }\n transformers.set(transformer.name, transformer);\n },\n getTransformerWebConfig(name, builtInTransformers = []) {\n const builtInTransformer = builtInTransformers.find((b) => b.name === name);\n if (builtInTransformer) {\n return builtInTransformer;\n }\n const transformer = transformers.get(name);\n if (!transformer) {\n throw new Error(`Unable to find transformer with name ${name}`);\n }\n return transformer;\n },\n getTransformerWebConfigs(builtInTransformers = []) {\n return [...builtInTransformers, ...transformers.values()];\n },\n };\n}\n/**\n * Spec for adding config component for plugin\n */\nexport const modelTransformerWebSpec = createPluginSpec('core/model-transformer-web', { defaultInitializer: createModelTransformerWebImplementation });\n//# sourceMappingURL=model-transformer-web-spec.js.map","export function setUndefinedIfEmpty(value) {\n if (value === '')\n return undefined;\n return value;\n}\n//# sourceMappingURL=form.js.map"],"names":["React","importShared","ProjectDefinitionContext","useProjectDefinition","result","ComboboxField","useControllerMerged","useMemo","useState","createCreateOption","value","FeatureComboboxField","canCreate","rest","definition","searchQuery","setSearchQuery","featureOptions","baseFeatures","feature","newFeatureName","option","FeatureUtils","_jsx","FeatureComboboxFieldController","name","control","field","error","restProps","ModelComboboxField","modelOptions","baseModels","model","newModelName","ModelUtils","ModelComboboxFieldController","Alert","AlertDescription","AlertTitle","ModelMergerResultAlert","pendingModelChanges","changes","change","_jsxs","key","modelMergerDefinitionDiffConfig","capitalize","_Fragment","createContext","ErrorHandlerContext","useEffect","useId","useBlockerDialogState","create","set","options","state","id","blocker","useBlockBeforeContinue","hasActiveBlockers","clearRequestedBlockers","requestBlocker","onContinue","useBlockerDialog","addBlocker","removeBlocker","useBlockDirtyFormNavigate","formState","reset","toast","useRef","useBlockUnsavedChangesNavigate","onSubmit","isDirtyRef","useFormState","resolve","useContext","useErrorHandler","context","usePluginEnhancedSchema","schema","pluginContainer","zPluginWrapper","useResettableForm","props","formProps","useForm","isDirty","updatedExternally","oldValues","isEqual","createAdminCrudInputWebConfig","config","createAdminCrudInputWebImplementation","inputs","input","builtInInputs","builtInInput","b","adminCrudInputWebSpec","createPluginSpec","createNewModelTransformerWebConfig","createModelTransformerWebImplementation","transformers","transformer","builtInTransformers","builtInTransformer","modelTransformerWebSpec","setUndefinedIfEmpty"],"mappings":"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"}
|