{"version":3,"file":"kform-scaffolder.cjs","sources":["../../src/Schematic.ts","../../src/SchematicBuilderContext.ts","../../src/actions/LoadSchematic.tsx","../../src/actions/SaveSchematic.tsx","../../src/util/join.ts","../../src/scaffolding/scaffold.ts","../../src/scaffolding/useScaffolder.ts","../../src/actions/ScaffoldToZip.tsx","../../src/scaffolding/configScaffolder.ts","../../src/scaffolding/kotlin/util/defaultImports.ts","../../src/scaffolding/kotlin/KtFile.ts","../../src/scaffolding/kotlin/util/simpleKtName.ts","../../src/scaffolding/kotlin/util/annotations.ts","../../src/scaffolding/scaffolders/scaffoldModels.ts","../../src/util/boolDataAttr.ts","../../src/util/preventDrag.ts","../../src/schematicBuilders/util/ChildMarker.tsx","../../src/schematicBuilders/util/ChildRemove.tsx","../../src/schematicBuilders/util/KindSelect.tsx","../../src/schematicBuilders/util/NullableInput.tsx","../../src/schematicBuilders/util/PackageNameInput.tsx","../../src/schematicBuilders/ClassBuilder.tsx","../../src/schematicBuilders/EnumBuilder.tsx","../../src/schematicBuilders/ListableBuilder.tsx","../../src/util/code.ts","../../src/SchematicKind.ts","../../src/scaffolding/scaffolders/scaffoldSchemas.ts","../../src/scaffolding/templates/Serializer.kt.ejs?raw","../../src/scaffolding/templating/EjsTemplateFile.ts","../../src/scaffolding/templating/util/addEjsTemplateFile.ts","../../src/scaffolding/scaffolders/scaffoldSerializer.ts","../../src/scaffolding/templates/Validator.kt.ejs?raw","../../src/scaffolding/scaffolders/scaffoldValidator.ts","../../src/SchematicBuilder.tsx","../../src/scaffolding/templating/TemplateFile.ts","../../src/scaffolding/templating/util/addTemplateFile.ts","../../src/scaffolding/typescript/TsFile.ts"],"sourcesContent":["export interface Schematic {\n  id: string;\n  kind: string;\n  packageSuffix?: string;\n  name?: string;\n  nullable?: boolean;\n  collapsed?: boolean;\n  children?: Schematic[];\n  childName?: string;\n}\n\nexport function createSchematic(schematic?: Partial<Schematic>): Schematic {\n  return {\n    id: self.crypto.randomUUID(),\n    kind: \"\",\n    ...schematic,\n  };\n}\n\nexport function moveSchematic(\n  schematic: Schematic,\n  moveId: string,\n  parentId: string,\n  sortBefore: string | null,\n): Schematic {\n  const { schematic: schematicWithoutFrom, removed: fromSchematic } = remove(\n    schematic,\n    moveId,\n  );\n  return add(schematicWithoutFrom!, fromSchematic!, parentId, sortBefore);\n}\n\nfunction remove(\n  schematic: Schematic,\n  id: string,\n): { schematic: Schematic | null; removed: Schematic | null } {\n  if (schematic.id === id) {\n    return { schematic: null, removed: schematic };\n  }\n  if (!schematic.children) {\n    return { schematic, removed: null };\n  }\n  const newChildren = [];\n  let removed: Schematic | null = null;\n  for (const child of schematic.children) {\n    const { schematic: newChild, removed: removedChild } = remove(child, id);\n    if (newChild !== null) {\n      newChildren.push(newChild);\n    }\n    if (removedChild !== null) {\n      removed = removedChild;\n    }\n  }\n  return { schematic: { ...schematic, children: newChildren }, removed };\n}\n\nfunction add(\n  schematic: Schematic,\n  toAdd: Schematic,\n  parentId: string,\n  sortBefore: string | null,\n): Schematic {\n  if (schematic.id === parentId) {\n    const oldChildren = schematic.children ?? [];\n    const index =\n      sortBefore === null\n        ? oldChildren.length\n        : oldChildren.findIndex((c) => c.id === sortBefore);\n    return {\n      ...schematic,\n      children: [\n        ...oldChildren.slice(0, index),\n        toAdd,\n        ...oldChildren.slice(index),\n      ],\n    };\n  }\n  if (!schematic.children) {\n    return schematic;\n  }\n  return {\n    ...schematic,\n    children: schematic.children.map((child) =>\n      add(child, toAdd, parentId, sortBefore),\n    ),\n  };\n}\n","import * as React from \"react\";\n\nimport { Scaffolder } from \"./scaffolding/scaffold\";\nimport { Schematic } from \"./Schematic\";\nimport { SchematicKind } from \"./SchematicKind\";\n\nexport interface DraggedSchematic {\n  id: string;\n  type: string;\n  node: React.ReactNode;\n}\n\nexport interface SchematicBuilderContextValue {\n  name: string;\n  basePath?: string;\n  basePackage?: string;\n  baseDir?: string | ((schematic: Schematic) => string);\n  schematicKinds: Map<string, SchematicKind>;\n  scaffolders:\n    | Scaffolder<any>[]\n    | ((schematic: Schematic) => Scaffolder<any>[]);\n  getRootSchematic: () => Schematic;\n  useSchematic: <T>(selector: (schematic: Schematic) => T) => T;\n  setSchematic: ((schematic: Partial<Schematic>) => void) &\n    ((setter: (schematic: Schematic) => Partial<Schematic>) => void);\n  removeSchematic: () => void;\n  parentPackage?: string;\n  parentId?: string;\n  parentChildName?: string;\n  draggedSchematic: DraggedSchematic | null;\n  disableDrop?: boolean;\n  ignoreDrop?: boolean;\n  latestSchematicFileHandle: React.MutableRefObject<FileSystemFileHandle | null>;\n}\n\nexport const SchematicBuilderContext =\n  React.createContext<SchematicBuilderContextValue | null>(null);\n\nexport function useSchematicBuilderContext(): SchematicBuilderContextValue {\n  const context = React.useContext(SchematicBuilderContext);\n  if (context === null) {\n    throw new Error(\"Schematic builder not in context.\");\n  }\n  return context;\n}\n","import { fileOpen } from \"browser-fs-access\";\n\nimport { useSchematicBuilderContext } from \"../SchematicBuilderContext\";\n\nexport function LoadSchematic() {\n  const { name, setSchematic, latestSchematicFileHandle } =\n    useSchematicBuilderContext();\n\n  return (\n    <button\n      className=\"builder-icon-button builder-action builder-load-schematic\"\n      type=\"button\"\n      onClick={async () => {\n        const file = await fileOpen({\n          extensions: [\".json\"],\n          mimeTypes: [\"application/json\"],\n          description: \"Form schematic\",\n          id: name,\n        });\n        if (file.handle) {\n          latestSchematicFileHandle.current = file.handle;\n        }\n        const content = JSON.parse(await file.text());\n        setSchematic(() => content);\n      }}\n      title=\"Load schematic\"\n    >\n      📂\n    </button>\n  );\n}\n","import { fileSave } from \"browser-fs-access\";\n\nimport { Schematic } from \"../Schematic\";\nimport { useSchematicBuilderContext } from \"../SchematicBuilderContext\";\n\nexport function SaveSchematic() {\n  const { name, getRootSchematic, latestSchematicFileHandle } =\n    useSchematicBuilderContext();\n\n  return (\n    <button\n      className=\"builder-icon-button builder-action builder-save-schematic\"\n      type=\"button\"\n      onClick={async () => {\n        const schematic: Schematic = getRootSchematic();\n        latestSchematicFileHandle.current = await fileSave(\n          new Blob([JSON.stringify(schematic, null, 2)]),\n          {\n            fileName: `${schematic.name}-schematic.json`,\n            extensions: [\".json\"],\n            mimeTypes: [\"application/json\"],\n            description: \"Form schematic\",\n            id: name,\n          },\n          latestSchematicFileHandle.current,\n        );\n      }}\n      title=\"Save schematic\"\n    >\n      💾\n    </button>\n  );\n}\n","function join(\n  s1: string | undefined,\n  s2: string | undefined,\n  separator: string,\n): string {\n  return !s1 || !s2\n    ? s1 || s2 || \"\"\n    : `${s1}${s1.endsWith(separator) ? \"\" : separator}${s2}`;\n}\n\nexport function joinPaths(\n  path1: string | undefined,\n  path2: string | undefined,\n): string {\n  return join(path1, path2, \"/\");\n}\n\nexport function joinPackages(\n  pkg1: string | undefined,\n  pkg2: string | undefined,\n): string {\n  return join(pkg1, pkg2, \".\");\n}\n","import { Schematic } from \"../Schematic\";\nimport { SchematicKind } from \"../SchematicKind\";\nimport { joinPackages } from \"../util/join\";\nimport { ScaffoldingData } from \"./ScaffoldingData\";\nimport { ScaffoldingFile, ScaffoldingFileContent } from \"./ScaffoldingFile\";\n\nexport interface ScaffoldOptions {\n  schematicKinds: Map<string, SchematicKind>;\n  basePath?: string;\n  basePackage?: string;\n  baseDir?: string;\n}\n\nexport type Scaffolder<\n  TScaffoldingData extends ScaffoldingData = ScaffoldingData,\n> = (schematic: Schematic, data: TScaffoldingData) => void;\n\nexport interface ScaffoldedFile extends Omit<ScaffoldingFile, \"getContent\"> {\n  path: string;\n  content: ScaffoldingFileContent | Promise<ScaffoldingFileContent>;\n}\n\nexport function scaffold(\n  schematic: Schematic,\n  scaffolders: Scaffolder<any>[],\n  options: ScaffoldOptions,\n): ScaffoldedFile[] {\n  const files = new Map<string, ScaffoldingFile>();\n  const data: ScaffoldingData = {\n    schematicKinds: options.schematicKinds,\n    rootSchematic: schematic,\n    files,\n    currentPath: options.basePath ?? \"/\",\n    currentPackage: joinPackages(options.basePackage, schematic.packageSuffix),\n    currentDir: options.baseDir,\n  };\n  for (const scaffolder of scaffolders) {\n    scaffolder(schematic, data);\n  }\n  return Array.from(files).map(([path, file]) => ({\n    path,\n    content: file.getContent(),\n    base64: file.base64,\n    binary: file.binary,\n    executable: file.executable,\n  }));\n}\n","import * as React from \"react\";\n\nimport { useSchematicBuilderContext } from \"../SchematicBuilderContext\";\nimport { scaffold, ScaffoldedFile } from \"./scaffold\";\n\nexport function useScaffolder(): () => ScaffoldedFile[] {\n  const {\n    basePath,\n    basePackage,\n    baseDir,\n    schematicKinds,\n    scaffolders,\n    getRootSchematic,\n  } = useSchematicBuilderContext();\n  return React.useCallback(() => {\n    const schematic = getRootSchematic();\n    return scaffold(\n      schematic,\n      typeof scaffolders === \"function\" ? scaffolders(schematic) : scaffolders,\n      {\n        schematicKinds,\n        basePath,\n        basePackage,\n        baseDir: typeof baseDir === \"function\" ? baseDir(schematic) : baseDir,\n      },\n    );\n  }, [\n    baseDir,\n    basePackage,\n    basePath,\n    getRootSchematic,\n    scaffolders,\n    schematicKinds,\n  ]);\n}\n","import { fileSave } from \"browser-fs-access\";\nimport JSZip from \"jszip\";\n\nimport { useScaffolder } from \"../scaffolding/useScaffolder\";\nimport { useSchematicBuilderContext } from \"../SchematicBuilderContext\";\n\nlet latestZipFileHandle: FileSystemFileHandle | null = null;\n\nexport function ScaffoldToZip() {\n  const { getRootSchematic, name } = useSchematicBuilderContext();\n  const scaffold = useScaffolder();\n\n  return (\n    <button\n      className=\"builder-input builder-action builder-scaffold-zip\"\n      type=\"submit\"\n      onClick={async (evt) => {\n        evt.preventDefault();\n        try {\n          const schematic = getRootSchematic();\n          const files = scaffold();\n          const zip = new JSZip();\n          for (const { path, content, base64, binary, executable } of files) {\n            zip.file(path, content, {\n              base64,\n              binary,\n              unixPermissions: executable ? \"755\" : undefined,\n            });\n          }\n          latestZipFileHandle = await fileSave(\n            zip.generateAsync({ platform: \"UNIX\", type: \"blob\" }),\n            {\n              fileName: `${schematic.name}.zip`,\n              extensions: [\".zip\"],\n              mimeTypes: [\"application/zip\"],\n              description: \"Form scaffolding\",\n              id: name,\n            },\n            latestZipFileHandle,\n          );\n        } catch (err) {\n          alert(err);\n        }\n      }}\n    >\n      Scaffold 🏗️\n    </button>\n  );\n}\n","import { Schematic } from \"../Schematic\";\nimport { Scaffolder } from \"./scaffold\";\nimport { ScaffoldingData } from \"./ScaffoldingData\";\n\n/**\n * Returns a new scaffolder with its data merged with the provided data.\n */\nexport function configScaffolder<TScaffoldingData extends ScaffoldingData>(\n  scaffolder: Scaffolder<TScaffoldingData>,\n  data: Partial<TScaffoldingData>,\n): Scaffolder<TScaffoldingData> {\n  return (schematic: Schematic, originalData: TScaffoldingData) =>\n    scaffolder(schematic, { ...originalData, ...data });\n}\n","const DEFAULT_IMPORTS = [\n  /^kotlin\\.[^.]+$/,\n  /^kotlin\\.annotation\\.[^.]+$/,\n  /^kotlin\\.collections\\.[^.]+$/,\n  /^kotlin\\.comparisons\\.[^.]+$/,\n  /^kotlin\\.io\\.[^.]+$/,\n  /^kotlin\\.ranges\\.[^.]+$/,\n  /^kotlin\\.sequences\\.[^.]+$/,\n  /^kotlin\\.text\\.[^.]+$/,\n];\n\nexport function isDefaultKtImport(qualifiedName: string): boolean {\n  return DEFAULT_IMPORTS.some((i) => i.test(qualifiedName));\n}\n","import { ScaffoldingData } from \"../ScaffoldingData\";\nimport { ScaffoldingFile } from \"../ScaffoldingFile\";\nimport { isDefaultKtImport } from \"./util/defaultImports\";\n\nexport interface KtFile extends ScaffoldingFile {\n  package: string;\n  imports: Set<string>;\n  declarations: string[];\n}\n\nexport function ktFile(data: ScaffoldingData): KtFile {\n  return {\n    package: data.currentPackage ?? \"\",\n    imports: new Set<string>(),\n    declarations: [],\n    getContent: ktFileContent,\n  };\n}\n\nfunction ktFileContent(this: KtFile): string {\n  return (\n    [\n      // Package\n      this.package && `package ${this.package}`,\n\n      // Imports\n      Array.from(this.imports)\n        .filter((i) => !isDefaultKtImport(i))\n        .sort()\n        .map((i) => `import ${i}`)\n        .join(\"\\n\"),\n\n      // Declarations\n      ...this.declarations,\n    ]\n      .filter((s) => s)\n      .join(\"\\n\\n\") + \"\\n\"\n  );\n}\n","export function simpleKtName(qualifiedName: string): string {\n  return qualifiedName.substring(qualifiedName.lastIndexOf(\".\") + 1);\n}\n","import { KtData } from \"../KtData\";\nimport { simpleKtName } from \"./simpleKtName\";\n\nconst JS_EXPORT = \"kotlin.js.JsExport\";\nconst SERIALIZABLE = \"kotlinx.serialization.Serializable\";\n\nfunction annotate(annotation: string, statement: string, data: KtData): string {\n  data.currentFile.imports.add(annotation);\n  return `@${simpleKtName(annotation)}\\n${statement}`;\n}\n\nexport function jsExport(statement: string, data: KtData): string {\n  return annotate(JS_EXPORT, statement, data);\n}\n\nexport function serializable(statement: string, data: KtData): string {\n  return annotate(SERIALIZABLE, statement, data);\n}\n","import { Schematic } from \"../../Schematic\";\nimport { joinPackages, joinPaths } from \"../../util/join\";\nimport { KtData } from \"../kotlin/KtData\";\nimport { KtFile, ktFile } from \"../kotlin/KtFile\";\nimport { jsExport, serializable } from \"../kotlin/util/annotations\";\nimport { ScaffoldingData } from \"../ScaffoldingData\";\n\nexport function scaffoldModels(schematic: Schematic, data: ScaffoldingData) {\n  const fileName = joinPaths(data.currentDir, `${schematic.name}.kt`);\n  let file = data.files.get(fileName) as KtFile | undefined;\n  if (!file) {\n    data.files.set(fileName, (file = ktFile(data)));\n  }\n  scaffoldModelDeclaration(schematic, { ...data, currentFile: file });\n}\n\nfunction scaffoldModelDeclaration(schematic: Schematic, data: KtData) {\n  const schematicKind = data.schematicKinds.get(schematic.kind);\n  if (!schematicKind) {\n    throw new Error(`Unknown schematic kind ${schematic.kind}`);\n  }\n\n  const nDecls = data.currentFile.declarations.length;\n  data.currentFile.declarations.push(\"\");\n  const decl =\n    schematicKind.scaffoldModel?.(schematic, data) ??\n    `typealias ${schematic.name} = ${scaffoldType(schematic, data)}`;\n  data.currentFile.declarations[nDecls] = schematicKind.scaffoldModel\n    ? jsExport(serializable(decl, data), data)\n    : decl;\n}\n\nexport function scaffoldType(schematic: Schematic, data: KtData) {\n  const schematicKind = data.schematicKinds.get(schematic.kind);\n  if (!schematicKind) {\n    throw new Error(`Unknown schematic kind ${schematic.kind}`);\n  }\n\n  const schematicPackage =\n    schematicKind.package ??\n    joinPackages(data.currentPackage, schematic.packageSuffix);\n  const schematicName = schematic.name || schematicKind.name;\n\n  if (schematicPackage !== data.currentPackage) {\n    data.currentFile.imports.add(joinPackages(schematicPackage, schematicName));\n  }\n\n  if (\n    schematicKind.package == null &&\n    schematicPackage !== data.currentPackage\n  ) {\n    scaffoldModels(schematic, {\n      ...data,\n      currentPackage: joinPackages(\n        data.currentPackage,\n        schematic.packageSuffix,\n      ),\n      currentDir: joinPaths(\n        data.currentDir,\n        schematic.packageSuffix?.replace(\".\", \"/\"),\n      ),\n    });\n  } else if (schematicKind.scaffoldModel) {\n    scaffoldModelDeclaration(schematic, data);\n  }\n\n  return (\n    (schematicKind.scaffoldType?.(schematic, data) ?? schematicName) +\n    (schematic.nullable ? \"?\" : \"\")\n  );\n}\n\nexport function scaffoldDefaultValue(\n  schematic: Schematic,\n  data: KtData,\n): string {\n  const schematicKind = data.schematicKinds.get(schematic.kind);\n  if (!schematicKind) {\n    throw new Error(`Unknown schematic kind ${schematic.kind}`);\n  }\n\n  return schematic.nullable\n    ? \"null\"\n    : typeof schematicKind.defaultValue === \"function\"\n      ? schematicKind.defaultValue(schematic, data)\n      : schematicKind.defaultValue;\n}\n","/**\n * Value for a data attribute given a condition.\n */\nexport function boolDataAttr(\n  condition: boolean | null | undefined,\n): string | undefined {\n  return condition ? \"\" : undefined;\n}\n","import * as React from \"react\";\n\n/**\n * Properties used to prevent an element from being dragged.\n */\nexport const preventDrag = {\n  onKeyDown: (evt: React.KeyboardEvent) => evt.stopPropagation(),\n  onPointerDown: (evt: React.PointerEvent) => evt.stopPropagation(),\n};\n","import { useSchematicBuilderContext } from \"../../SchematicBuilderContext\";\nimport { preventDrag } from \"../../util/preventDrag\";\n\nexport function ChildMarker() {\n  const { schematicKinds, useSchematic, setSchematic } =\n    useSchematicBuilderContext();\n  const kind = useSchematic((schematic) => schematic.kind);\n  const collapsed = useSchematic((schematic) => schematic.collapsed);\n  const Builder = schematicKinds.get(kind)?.builder;\n\n  return Builder ? (\n    <button\n      type=\"button\"\n      className=\"builder-child-marker\"\n      title={collapsed ? \"Expand\" : \"Collapse\"}\n      onClick={() =>\n        setSchematic((schematic) => ({\n          collapsed: !schematic.collapsed,\n        }))\n      }\n      {...preventDrag}\n    >\n      {collapsed ? \"▸\" : \"▾\"}\n    </button>\n  ) : (\n    <span className=\"builder-child-marker\">•</span>\n  );\n}\n","import { useSchematicBuilderContext } from \"../../SchematicBuilderContext\";\nimport { preventDrag } from \"../../util/preventDrag\";\n\nexport function ChildRemove() {\n  const { removeSchematic } = useSchematicBuilderContext();\n  return (\n    <button\n      className=\"builder-icon-button builder-child-remove\"\n      type=\"button\"\n      title=\"Remove\"\n      onClick={removeSchematic}\n      {...preventDrag}\n    >\n      ×\n    </button>\n  );\n}\n","import { useSchematicBuilderContext } from \"../../SchematicBuilderContext\";\nimport { preventDrag } from \"../../util/preventDrag\";\n\nconst KIND_PLACEHOLDER = \"--KIND--\";\n\nexport function KindSelect() {\n  const { schematicKinds, useSchematic, setSchematic, parentChildName } =\n    useSchematicBuilderContext();\n  const kind = useSchematic((schematic) => schematic.kind);\n\n  return (\n    <select\n      className=\"builder-input builder-schema\"\n      value={kind}\n      onChange={(evt) => {\n        const schematicKind = schematicKinds.get(evt.target.value);\n        setSchematic({\n          kind: evt.target.value,\n          packageSuffix: schematicKind?.defaultPackageSuffix?.(\n            parentChildName!,\n          ),\n          name: schematicKind?.defaultName?.(parentChildName!),\n          collapsed: false,\n          nullable: schematicKind?.nullable ?? schematicKind?.defaultNullable,\n          children: schematicKind?.initChildren?.(parentChildName!),\n        });\n      }}\n      required\n      style={{\n        width: `calc(${(kind || KIND_PLACEHOLDER).length}ch + 1.85rem)`,\n      }}\n      {...preventDrag}\n    >\n      <option>{KIND_PLACEHOLDER}</option>\n      {Array.from(schematicKinds.values())\n        .filter((kind) => !kind.internal)\n        .map((kind) => (\n          <option key={kind.kind} value={kind.kind}>\n            {kind.kind}\n          </option>\n        ))}\n    </select>\n  );\n}\n","import { useSchematicBuilderContext } from \"../../SchematicBuilderContext\";\nimport { preventDrag } from \"../../util/preventDrag\";\n\nexport function NullableInput() {\n  const { schematicKinds, useSchematic, setSchematic } =\n    useSchematicBuilderContext();\n  const kind = useSchematic((schematic) => schematic.kind);\n  const nullable = useSchematic((schematic) => !!schematic.nullable);\n  const schematicKind = schematicKinds.get(kind);\n  const showInput = schematicKind && schematicKind.nullable === undefined;\n\n  return (\n    showInput && (\n      <input\n        className=\"builder-input builder-nullable\"\n        type=\"checkbox\"\n        title=\"Nullable?\"\n        checked={nullable}\n        onChange={(evt) => setSchematic({ nullable: evt.target.checked })}\n        {...preventDrag}\n      />\n    )\n  );\n}\n","import * as React from \"react\";\n\nimport { useSchematicBuilderContext } from \"../../SchematicBuilderContext\";\nimport { preventDrag } from \"../../util/preventDrag\";\n\nconst PACKAGE_PLACEHOLDER = \"package.suffix\";\nconst NAME_PLACEHOLDER = \"ClassName\";\n\nexport function PackageNameInput() {\n  const { useSchematic, setSchematic, parentPackage } =\n    useSchematicBuilderContext();\n  const pkgRef = React.useRef<HTMLInputElement | null>(null);\n  const packageSuffix = useSchematic((schematic) => schematic.packageSuffix);\n  const name = useSchematic((schematic) => schematic.name);\n\n  return (\n    <div className=\"builder-package-name\">\n      {parentPackage && (\n        <span className=\"builder-package-prefix\">{parentPackage}.</span>\n      )}\n      <input\n        className=\"builder-input builder-package\"\n        placeholder={PACKAGE_PLACEHOLDER}\n        value={packageSuffix ?? \"\"}\n        onChange={(evt) => setSchematic({ packageSuffix: evt.target.value })}\n        pattern=\"(([a-z_][a-z0-9_]*)(\\.([a-z_][a-z0-9_]*))*)?\"\n        style={{ width: `${(packageSuffix || PACKAGE_PLACEHOLDER).length}ch` }}\n        {...preventDrag}\n        ref={pkgRef}\n      />\n      <button\n        type=\"button\"\n        className=\"builder-icon-button builder-edit-package\"\n        onClick={() => {\n          const pkgInput = pkgRef.current!;\n          pkgInput.style.display = \"initial\";\n          pkgInput.focus();\n          pkgInput.style.display = \"\";\n        }}\n      >\n        🖉\n      </button>\n      <span className=\"builder-operator\">.</span>\n      <input\n        className=\"builder-input builder-name\"\n        placeholder={NAME_PLACEHOLDER}\n        value={name ?? \"\"}\n        onChange={(evt) => setSchematic({ name: evt.target.value })}\n        required\n        pattern=\"[a-zA-Z_][a-zA-Z0-9_]*\"\n        style={{ width: `${(name || NAME_PLACEHOLDER).length}ch` }}\n        {...preventDrag}\n      />\n    </div>\n  );\n}\n","import { useDraggable, useDroppable } from \"@dnd-kit/core\";\n\nimport { createSchematic, Schematic } from \"../Schematic\";\nimport {\n  SchematicBuilderContext,\n  useSchematicBuilderContext,\n} from \"../SchematicBuilderContext\";\nimport { boolDataAttr } from \"../util/boolDataAttr\";\nimport { joinPackages } from \"../util/join\";\nimport { preventDrag } from \"../util/preventDrag\";\nimport { ChildMarker } from \"./util/ChildMarker\";\nimport { ChildRemove } from \"./util/ChildRemove\";\nimport { KindSelect } from \"./util/KindSelect\";\nimport { NullableInput } from \"./util/NullableInput\";\nimport { PackageNameInput } from \"./util/PackageNameInput\";\n\nexport const CLASS_DND_TYPE = \"class-field\";\n\nexport function ClassBuilder() {\n  const schematicBuilderContext = useSchematicBuilderContext();\n  const { useSchematic, setSchematic, draggedSchematic, disableDrop } =\n    schematicBuilderContext;\n  const id = useSchematic((schematic) => schematic.id);\n  const packageSuffix = useSchematic((schematic) => schematic.packageSuffix);\n  const fields =\n    useSchematic((schematic: Schematic) => schematic.children) ?? [];\n  const shouldIgnoreDrop =\n    draggedSchematic != null && draggedSchematic.id === fields.at(-1)?.id;\n  const { setNodeRef: setDroppableRef, isOver } = useDroppable({\n    id: `${id}-append`,\n    data: { parentId: id, sortBefore: null, ignored: shouldIgnoreDrop },\n    disabled: disableDrop || draggedSchematic?.type !== CLASS_DND_TYPE,\n  });\n\n  return (\n    <div className=\"class-builder builder\">\n      <PackageNameInput />\n\n      {fields.length === 0 && (\n        <div\n          className=\"builder-empty\"\n          data-over={boolDataAttr(isOver)}\n          ref={setDroppableRef}\n        >\n          No fields.\n        </div>\n      )}\n\n      {fields.length > 0 && (\n        <ul className=\"builder-children\">\n          {fields.map((field, i) => (\n            <SchematicBuilderContext.Provider\n              key={field.id}\n              value={{\n                ...schematicBuilderContext,\n                useSchematic: (selector) =>\n                  useSchematic((schematic) => selector(schematic.children![i])),\n                setSchematic: (toSet) =>\n                  setSchematic((schematic) => ({\n                    ...schematic,\n                    children: schematic.children!.map((f) =>\n                      field === f\n                        ? {\n                            ...f,\n                            ...(typeof toSet === \"function\" ? toSet(f) : toSet),\n                          }\n                        : f,\n                    ),\n                  })),\n                removeSchematic: () =>\n                  setSchematic((schematic) => ({\n                    ...schematic,\n                    children: schematic.children!.filter((f) => f !== field),\n                  })),\n                parentPackage: joinPackages(\n                  schematicBuilderContext.parentPackage,\n                  packageSuffix,\n                ),\n                parentId: id,\n                ignoreDrop:\n                  draggedSchematic != null &&\n                  draggedSchematic.id === fields[i - 1]?.id,\n              }}\n            >\n              <ClassFieldBuilder />\n            </SchematicBuilderContext.Provider>\n          ))}\n\n          <li\n            className=\"builder-child-droppable\"\n            data-over={boolDataAttr(isOver && !shouldIgnoreDrop)}\n            ref={setDroppableRef}\n          />\n        </ul>\n      )}\n\n      <button\n        className=\"builder-input builder-new-child\"\n        type=\"button\"\n        onClick={() => {\n          setSchematic((schematic) => ({\n            ...schematic,\n            children: [\n              ...(schematic.children ?? []),\n              createSchematic({ childName: \"\" }),\n            ],\n          }));\n        }}\n        {...preventDrag}\n      >\n        Add field\n      </button>\n    </div>\n  );\n}\n\nconst CHILD_NAME_PLACEHOLDER = \"fieldName\";\n\nexport function ClassFieldBuilder() {\n  const schematicBuilderContext = useSchematicBuilderContext();\n  const {\n    schematicKinds,\n    useSchematic,\n    setSchematic,\n    draggedSchematic,\n    parentId,\n    disableDrop,\n    ignoreDrop,\n  } = schematicBuilderContext;\n  const id = useSchematic((schematic) => schematic.id);\n  const childName = useSchematic((schematic) => schematic.childName);\n  const kind = useSchematic((schematic) => schematic.kind);\n  const nullable = useSchematic((schematic) => schematic.nullable);\n  const collapsed = useSchematic((schematic) => schematic.collapsed);\n  const Builder = schematicKinds.get(kind)?.builder;\n\n  const {\n    attributes,\n    listeners,\n    setNodeRef: setDraggableRef,\n    isDragging,\n  } = useDraggable({\n    id,\n    data: {\n      type: CLASS_DND_TYPE,\n      node: (\n        <>\n          {[childName, kind].filter((s) => s).join(\": \")}\n          {nullable ? \"?\" : \"\"}\n        </>\n      ),\n    },\n  });\n  const shouldIgnoreDrop = isDragging || ignoreDrop;\n  const { setNodeRef: setDroppableRef, isOver } = useDroppable({\n    id,\n    data: { parentId, sortBefore: id, ignored: shouldIgnoreDrop },\n    disabled: disableDrop || draggedSchematic?.type !== CLASS_DND_TYPE,\n  });\n\n  return (\n    <>\n      <li\n        className=\"builder-child-droppable\"\n        data-over={boolDataAttr(isOver && !shouldIgnoreDrop)}\n        ref={setDroppableRef}\n      />\n\n      <li\n        className=\"builder-child class-builder-field\"\n        data-dragging={boolDataAttr(isDragging)}\n        {...listeners}\n        {...attributes}\n        ref={setDraggableRef}\n        data-collapsible={boolDataAttr(Builder != null)}\n      >\n        <div className=\"builder-child-content\">\n          <ChildMarker />\n          <input\n            className=\"builder-input class-builder-field-id\"\n            placeholder={CHILD_NAME_PLACEHOLDER}\n            value={childName}\n            onChange={(evt) => setSchematic({ childName: evt.target.value })}\n            required\n            pattern=\"[a-zA-Z_][a-zA-Z0-9_]*\"\n            style={{\n              width: `${(childName || CHILD_NAME_PLACEHOLDER).length}ch`,\n            }}\n            {...preventDrag}\n          />\n          <span className=\"builder-operator\">∶</span>\n          <SchematicBuilderContext.Provider\n            value={{ ...schematicBuilderContext, parentChildName: childName }}\n          >\n            <KindSelect />\n          </SchematicBuilderContext.Provider>\n          <NullableInput />\n          <ChildRemove />\n        </div>\n\n        {Builder && !collapsed && (\n          <SchematicBuilderContext.Provider\n            value={{\n              ...schematicBuilderContext,\n              parentChildName: childName,\n              disableDrop: disableDrop || isDragging,\n            }}\n          >\n            <Builder />\n          </SchematicBuilderContext.Provider>\n        )}\n      </li>\n    </>\n  );\n}\n","import { useDraggable, useDroppable } from \"@dnd-kit/core\";\n\nimport { createSchematic, Schematic } from \"../Schematic\";\nimport {\n  SchematicBuilderContext,\n  useSchematicBuilderContext,\n} from \"../SchematicBuilderContext\";\nimport { boolDataAttr } from \"../util/boolDataAttr\";\nimport { preventDrag } from \"../util/preventDrag\";\nimport { ChildMarker } from \"./util/ChildMarker\";\nimport { ChildRemove } from \"./util/ChildRemove\";\nimport { PackageNameInput } from \"./util/PackageNameInput\";\n\nexport const ENUM_DND_TYPE = \"enum-entry\";\n\nexport function EnumBuilder() {\n  const schematicBuilderContext = useSchematicBuilderContext();\n  const { useSchematic, setSchematic, draggedSchematic, disableDrop } =\n    schematicBuilderContext;\n  const id = useSchematic((schematic) => schematic.id);\n  const fields =\n    useSchematic((schematic: Schematic) => schematic.children) ?? [];\n  const shouldIgnoreDrop =\n    draggedSchematic != null && draggedSchematic.id === fields.at(-1)?.id;\n  const { setNodeRef: setDroppableRef, isOver } = useDroppable({\n    id: `${id}-append`,\n    data: { parentId: id, sortBefore: null, ignored: shouldIgnoreDrop },\n    disabled: disableDrop || draggedSchematic?.type !== ENUM_DND_TYPE,\n  });\n\n  return (\n    <div className=\"enum-builder builder\">\n      <PackageNameInput />\n\n      {fields.length === 0 && (\n        <div\n          className=\"builder-empty\"\n          data-over={boolDataAttr(isOver)}\n          ref={setDroppableRef}\n        >\n          No entries.\n        </div>\n      )}\n\n      {fields.length > 0 && (\n        <ul className=\"builder-children\">\n          {fields.map((field, i) => (\n            <SchematicBuilderContext.Provider\n              key={field.id}\n              value={{\n                ...schematicBuilderContext,\n                useSchematic: (selector) =>\n                  useSchematic((schematic) => selector(schematic.children![i])),\n                setSchematic: (toSet) =>\n                  setSchematic((schematic) => ({\n                    ...schematic,\n                    children: schematic.children!.map((f) =>\n                      field === f\n                        ? {\n                            ...f,\n                            ...(typeof toSet === \"function\" ? toSet(f) : toSet),\n                          }\n                        : f,\n                    ),\n                  })),\n                removeSchematic: () =>\n                  setSchematic((schematic) => ({\n                    ...schematic,\n                    children: schematic.children!.filter((f) => f !== field),\n                  })),\n                parentId: id,\n                ignoreDrop:\n                  draggedSchematic != null &&\n                  draggedSchematic.id === fields[i - 1]?.id,\n              }}\n            >\n              <EnumEntryBuilder />\n            </SchematicBuilderContext.Provider>\n          ))}\n\n          <li\n            className=\"builder-child-droppable\"\n            data-over={boolDataAttr(isOver && !shouldIgnoreDrop)}\n            ref={setDroppableRef}\n          />\n        </ul>\n      )}\n\n      <button\n        className=\"builder-input builder-new-child\"\n        type=\"button\"\n        onClick={() => {\n          setSchematic((schematic) => ({\n            ...schematic,\n            children: [\n              ...(schematic.children ?? []),\n              createSchematic({ childName: \"\" }),\n            ],\n          }));\n        }}\n        {...preventDrag}\n      >\n        Add entry\n      </button>\n    </div>\n  );\n}\n\nconst CHILD_NAME_PLACEHOLDER = \"ENTRY_NAME\";\n\nexport function EnumEntryBuilder() {\n  const schematicBuilderContext = useSchematicBuilderContext();\n  const {\n    schematicKinds,\n    useSchematic,\n    setSchematic,\n    draggedSchematic,\n    parentId,\n    disableDrop,\n    ignoreDrop,\n  } = schematicBuilderContext;\n  const id = useSchematic((schematic) => schematic.id);\n  const childName = useSchematic((schematic) => schematic.childName);\n  const kind = useSchematic((schematic) => schematic.kind);\n  const Builder = schematicKinds.get(kind)?.builder;\n\n  const {\n    attributes,\n    listeners,\n    setNodeRef: setDraggableRef,\n    isDragging,\n  } = useDraggable({\n    id,\n    data: {\n      type: ENUM_DND_TYPE,\n      node: <>{[childName, kind].filter((s) => s).join(\": \")}</>,\n    },\n  });\n  const shouldIgnoreDrop = isDragging || ignoreDrop;\n  const { setNodeRef: setDroppableRef, isOver } = useDroppable({\n    id,\n    data: { parentId, sortBefore: id, ignored: shouldIgnoreDrop },\n    disabled: disableDrop || draggedSchematic?.type !== ENUM_DND_TYPE,\n  });\n\n  return (\n    <>\n      <li\n        className=\"builder-child-droppable\"\n        data-over={boolDataAttr(isOver && !shouldIgnoreDrop)}\n        ref={setDroppableRef}\n      />\n\n      <li\n        className=\"builder-child\"\n        data-dragging={boolDataAttr(isDragging)}\n        {...listeners}\n        {...attributes}\n        ref={setDraggableRef}\n        data-collapsible={boolDataAttr(Builder != null)}\n      >\n        <div className=\"builder-child-content\">\n          <ChildMarker />\n          <input\n            className=\"builder-input enum-builder-entry-id\"\n            placeholder={CHILD_NAME_PLACEHOLDER}\n            value={childName}\n            onChange={(evt) => setSchematic({ childName: evt.target.value })}\n            required\n            pattern=\"[a-zA-Z_][a-zA-Z0-9_]*\"\n            style={{\n              width: `${(childName || CHILD_NAME_PLACEHOLDER).length}ch`,\n            }}\n            {...preventDrag}\n          />\n          <ChildRemove />\n        </div>\n      </li>\n    </>\n  );\n}\n","import {\n  SchematicBuilderContext,\n  useSchematicBuilderContext,\n} from \"../SchematicBuilderContext\";\nimport { KindSelect } from \"./util/KindSelect\";\n\nexport interface ListableBuilderProps {\n  showKindSelect?: boolean;\n}\n\nexport function ListableBuilder({\n  showKindSelect = true,\n}: ListableBuilderProps) {\n  const schematicBuilderContext = useSchematicBuilderContext();\n  const { useSchematic, setSchematic } = schematicBuilderContext;\n  const id = useSchematic((schematic) => schematic.id);\n\n  return (\n    <div className=\"listable-builder builder\">\n      <SchematicBuilderContext.Provider\n        value={{\n          ...schematicBuilderContext,\n          useSchematic: (selector) =>\n            useSchematic((schematic) => selector(schematic.children![0])),\n          setSchematic: (toSet) =>\n            setSchematic((schematic) => ({\n              ...schematic,\n              children: [\n                {\n                  ...schematic.children![0],\n                  ...(typeof toSet === \"function\"\n                    ? toSet(schematic.children![0])\n                    : toSet),\n                },\n              ],\n            })),\n          removeSchematic: () => {},\n          parentId: id,\n        }}\n      >\n        <ListableItemBuilder showKindSelect={showKindSelect} />\n      </SchematicBuilderContext.Provider>\n    </div>\n  );\n}\n\nexport function ListableBuilderWithoutKindSelect() {\n  return <ListableBuilder showKindSelect={false} />;\n}\n\nexport type ListableItemBuilderProps = ListableBuilderProps;\n\nexport function ListableItemBuilder({\n  showKindSelect = true,\n}: ListableItemBuilderProps) {\n  const { schematicKinds, useSchematic } = useSchematicBuilderContext();\n  const kind = useSchematic((schematic) => schematic.kind);\n  const Builder = schematicKinds.get(kind)?.builder;\n\n  return (\n    <>\n      {showKindSelect && <KindSelect />}\n      {Builder && <Builder />}\n    </>\n  );\n}\n","const LF = /\\r?\\n/;\nconst EMPTY_LINE = /^\\s*$/;\nconst SPACE = /\\s/;\nconst LF_AFFIX = /(^\\r?\\n)|(\\r?\\n$)/g;\n\n/**\n * Tag function used to aid in the construction of code blocks.\n */\nexport function code(strings: TemplateStringsArray, ...values: any[]): string {\n  const minIndent = Math.min(\n    ...strings.join(\"\").split(LF).filter(isNotEmpty).map(indentWidth),\n  );\n\n  let result = \"\";\n  for (let i = 0; i < values.length; ++i) {\n    const trimmedString = trimNoninitialLines(strings[i], minIndent);\n    result += trimmedString;\n    result += indentNoninitialLines(\n      String(values[i]),\n      indentWidth(trimmedString.split(LF).at(-1)!),\n    );\n  }\n  result += trimNoninitialLines(strings.at(-1)!, minIndent);\n  return result.replace(LF_AFFIX, \"\");\n}\n\nfunction isNotEmpty(line: string): boolean {\n  return !EMPTY_LINE.test(line);\n}\n\nfunction indentWidth(line: string): number {\n  let width = 0;\n  for (const c of line) {\n    if (!SPACE.test(c)) {\n      break;\n    }\n    ++width;\n  }\n  return width;\n}\n\nfunction indentNoninitialLines(str: string, indentWidth: number): string {\n  const lines = str.split(LF);\n  const resultLines: string[] = [lines[0]];\n  for (let i = 1; i < lines.length; ++i) {\n    const line = lines[i];\n    resultLines.push(line && \" \".repeat(indentWidth) + line);\n  }\n  return resultLines.join(\"\\n\");\n}\n\nfunction trimNoninitialLines(str: string, indentWidth: number): string {\n  const lines = str.split(LF);\n  const resultLines: string[] = [lines[0]];\n  for (let i = 1; i < lines.length; ++i) {\n    resultLines.push(lines[i].slice(indentWidth));\n  }\n  return resultLines.join(\"\\n\");\n}\n","import { pascalCase } from \"change-case\";\nimport * as React from \"react\";\n\nimport { KtData } from \"./scaffolding/kotlin/KtData\";\nimport {\n  scaffoldDefaultValue,\n  scaffoldType,\n} from \"./scaffolding/scaffolders/scaffoldModels\";\nimport { scaffoldSchema } from \"./scaffolding/scaffolders/scaffoldSchemas\";\nimport { createSchematic, Schematic } from \"./Schematic\";\nimport { ClassBuilder } from \"./schematicBuilders/ClassBuilder\";\nimport { EnumBuilder } from \"./schematicBuilders/EnumBuilder\";\nimport { ListableBuilder } from \"./schematicBuilders/ListableBuilder\";\nimport { code } from \"./util/code\";\nimport { joinPaths } from \"./util/join\";\n\nexport const NULLABLE_SCHEMA = \"io.kform.schemas.NullableSchema\";\n\n/** Information about a kind of schematic. */\nexport interface SchematicKind {\n  kind: string;\n  internal?: boolean;\n  schema: string;\n  package?: string;\n  name?: string;\n  defaultNullable?: boolean;\n  nullable?: boolean;\n  defaultValue: string | ((schematic: Schematic, data: KtData) => string);\n  builder?: React.FC<any>;\n  initChildren?: (childName: string) => Schematic[];\n  defaultPackageSuffix?: (childName: string) => string;\n  defaultName?: (childName: string) => string;\n  scaffoldModel?: (schematic: Schematic, data: KtData) => string;\n  scaffoldType?: (schematic: Schematic, data: KtData) => string;\n  scaffoldSchema?: (schematic: Schematic, data: KtData) => string;\n}\n\nexport const anySchematicKind: SchematicKind = {\n  kind: \"Any\",\n  package: \"kotlin\",\n  name: \"Any\",\n  schema: \"io.kform.schemas.AnySchema\",\n  nullable: false,\n  defaultValue: \"null\",\n  scaffoldType: () => \"Any?\",\n};\nexport const bigDecimalSchematicKind: SchematicKind = {\n  kind: \"BigDecimal\",\n  package: \"io.kform.datatypes\",\n  name: \"BigDecimal\",\n  schema: \"io.kform.schemas.BigDecimalSchema\",\n  defaultNullable: true,\n  defaultValue: \"BigDecimal.ZERO\",\n};\nexport const bigIntegerSchematicKind: SchematicKind = {\n  kind: \"BigInteger\",\n  package: \"io.kform.datatypes\",\n  name: \"BigInteger\",\n  schema: \"io.kform.schemas.BigIntegerSchema\",\n  defaultNullable: true,\n  defaultValue: \"BigInteger.ZERO\",\n};\nexport const booleanSchematicKind: SchematicKind = {\n  kind: \"Boolean\",\n  package: \"kotlin\",\n  name: \"Boolean\",\n  schema: \"io.kform.schemas.BooleanSchema\",\n  defaultValue: \"false\",\n};\nexport const byteSchematicKind: SchematicKind = {\n  kind: \"Byte\",\n  package: \"kotlin\",\n  name: \"Byte\",\n  schema: \"io.kform.schemas.ByteSchema\",\n  defaultNullable: true,\n  defaultValue: \"0.toByte()\",\n};\nexport const charSchematicKind: SchematicKind = {\n  kind: \"Char\",\n  package: \"kotlin\",\n  name: \"Char\",\n  schema: \"io.kform.schemas.CharSchema\",\n  defaultNullable: true,\n  defaultValue: \"0.toChar()\",\n};\nexport const classSchematicKind: SchematicKind = {\n  kind: \"Class\",\n  schema: \"io.kform.schemas.ClassSchema\",\n  defaultValue: (schematic) => `${schematic.name}()`,\n  builder: ClassBuilder,\n  initChildren: () => [],\n  defaultPackageSuffix: (childName: string) => childName.toLowerCase(),\n  defaultName: (childName: string) => pascalCase(childName),\n  scaffoldModel: (schematic, data) =>\n    code`\n      data class ${schematic.name}(\n          ${schematic.children\n            ?.map(\n              (childSchematic) =>\n                `var ${childSchematic.childName}: ${scaffoldType(\n                  childSchematic,\n                  {\n                    ...data,\n                    currentPath: joinPaths(\n                      data.currentPath,\n                      childSchematic.childName,\n                    ),\n                  },\n                )} = ${scaffoldDefaultValue(childSchematic, {\n                  ...data,\n                  currentPath: joinPaths(\n                    data.currentPath,\n                    childSchematic.childName,\n                  ),\n                })}`,\n            )\n            .join(\",\\n\")}\n      )\n    `,\n  scaffoldSchema: (schematic, data) =>\n    code`\n      ClassSchema {\n          ${schematic.children\n            ?.map(\n              (childSchematic) =>\n                `${schematic.name}::${childSchematic.childName} { ${scaffoldSchema(\n                  childSchematic,\n                  {\n                    ...data,\n                    currentPath: joinPaths(\n                      data.currentPath,\n                      childSchematic.childName,\n                    ),\n                  },\n                )} }`,\n            )\n            .join(\"\\n\")}\n      }\n    `,\n};\nexport const doubleSchematicKind: SchematicKind = {\n  kind: \"Double\",\n  package: \"kotlin\",\n  name: \"Double\",\n  schema: \"io.kform.schemas.DoubleSchema\",\n  defaultNullable: true,\n  defaultValue: \"0.0\",\n};\nexport const enumSchematicKind: SchematicKind = {\n  kind: \"Enum\",\n  schema: \"io.kform.schemas.EnumSchema\",\n  defaultNullable: true,\n  defaultValue: (schematic) =>\n    `${schematic.name}.${schematic.children?.[0].childName}`,\n  builder: EnumBuilder,\n  initChildren: () => [],\n  defaultName: (childName: string) => pascalCase(childName),\n  scaffoldModel: (schematic) =>\n    code`\n      enum class ${schematic.name} {\n          ${schematic.children\n            ?.map((childSchematic) => childSchematic.childName!)\n            .join(\",\\n\")}\n      }\n    `,\n};\nexport const fileSchematicKind: SchematicKind = {\n  kind: \"File\",\n  package: \"io.kform.datatypes\",\n  name: \"File\",\n  schema: \"io.kform.schemas.FileSchema\",\n  defaultNullable: true,\n  defaultValue: (_schematic, data) => {\n    data.currentFile.imports.add(\"io.kform.datatypes.emplyPlaceholderFile\");\n    return \"emplyPlaceholderFile()\";\n  },\n};\nexport const floatSchematicKind: SchematicKind = {\n  kind: \"Float\",\n  package: \"kotlin\",\n  name: \"Float\",\n  schema: \"io.kform.schemas.FloatSchema\",\n  defaultNullable: true,\n  defaultValue: \"0f\",\n};\nexport const instantSchematicKind: SchematicKind = {\n  kind: \"Instant\",\n  package: \"kotlinx.datetime\",\n  name: \"Instant\",\n  schema: \"io.kform.schemas.InstantSchema\",\n  defaultNullable: true,\n  defaultValue: \"Instant.fromEpochMilliseconds(0)\",\n};\nexport const intSchematicKind: SchematicKind = {\n  kind: \"Int\",\n  package: \"kotlin\",\n  name: \"Int\",\n  schema: \"io.kform.schemas.IntSchema\",\n  defaultNullable: true,\n  defaultValue: \"0\",\n};\nexport const listSchematicKind: SchematicKind = {\n  kind: \"List\",\n  package: \"kotlin.collections\",\n  name: \"List\",\n  schema: \"io.kform.schemas.ListSchema\",\n  defaultValue: \"emptyList()\",\n  builder: ListableBuilder,\n  initChildren: () => [createSchematic()],\n  scaffoldType: (schematic, data) =>\n    `List<${scaffoldType(schematic.children![0], {\n      ...data,\n      currentPath: joinPaths(data.currentPath, \"*\"),\n    })}>`,\n  scaffoldSchema: (schematic, data) =>\n    `ListSchema { ${scaffoldSchema(schematic.children![0], {\n      ...data,\n      currentPath: joinPaths(data.currentPath, \"*\"),\n    })} }`,\n};\nexport const localDateSchematicKind: SchematicKind = {\n  kind: \"LocalDate\",\n  package: \"kotlinx.datetime\",\n  name: \"LocalDate\",\n  schema: \"io.kform.schemas.LocalDateSchema\",\n  defaultNullable: true,\n  defaultValue: (_schematic, data) => {\n    data.currentFile.imports.add(\"kotlinx.datetime.Instant\");\n    data.currentFile.imports.add(\"kotlinx.datetime.TimeZone\");\n    return \"Instant.fromEpochMilliseconds(0).toLocalDateTime(TimeZone.UTC).date\";\n  },\n};\nexport const localDateTimeSchematicKind: SchematicKind = {\n  kind: \"LocalDateTime\",\n  package: \"kotlinx.datetime\",\n  name: \"LocalDateTime\",\n  schema: \"io.kform.schemas.LocalDateTimeSchema\",\n  defaultNullable: true,\n  defaultValue: (_schematic, data) => {\n    data.currentFile.imports.add(\"kotlinx.datetime.Instant\");\n    data.currentFile.imports.add(\"kotlinx.datetime.TimeZone\");\n    return \"Instant.fromEpochMilliseconds(0).toLocalDateTime(TimeZone.UTC)\";\n  },\n};\nexport const longSchematicKind: SchematicKind = {\n  kind: \"Long\",\n  package: \"kotlin\",\n  name: \"Long\",\n  schema: \"io.kform.schemas.LongSchema\",\n  defaultNullable: true,\n  defaultValue: \"0L\",\n};\nexport const shortSchematicKind: SchematicKind = {\n  kind: \"Short\",\n  package: \"kotlin\",\n  name: \"Short\",\n  schema: \"io.kform.schemas.ShortSchema\",\n  defaultNullable: true,\n  defaultValue: \"0.toShort()\",\n};\nexport const stringSchematicKind: SchematicKind = {\n  kind: \"String\",\n  package: \"kotlin\",\n  name: \"String\",\n  schema: \"io.kform.schemas.StringSchema\",\n  defaultValue: '\"\"',\n};\nexport const tableSchematicKind: SchematicKind = {\n  kind: \"Table\",\n  package: \"io.kform.datatypes\",\n  name: \"Table\",\n  schema: \"io.kform.schemas.TableSchema\",\n  defaultValue: (_schematic, data) => {\n    data.currentFile.imports.add(\"io.kform.datatypes.tableOf\");\n    return \"tableOf()\";\n  },\n  builder: ListableBuilder,\n  initChildren: () => [createSchematic()],\n  scaffoldType: (schematic, data) =>\n    `Table<${scaffoldType(schematic.children![0], {\n      ...data,\n      currentPath: joinPaths(data.currentPath, \"*\"),\n    })}>`,\n  scaffoldSchema: (schematic, data) =>\n    `TableSchema { ${scaffoldSchema(schematic.children![0], {\n      ...data,\n      currentPath: joinPaths(data.currentPath, \"*\"),\n    })} }`,\n};\n\nexport const defaultSchematicKinds = [\n  anySchematicKind,\n  bigDecimalSchematicKind,\n  bigIntegerSchematicKind,\n  booleanSchematicKind,\n  byteSchematicKind,\n  charSchematicKind,\n  classSchematicKind,\n  doubleSchematicKind,\n  enumSchematicKind,\n  fileSchematicKind,\n  floatSchematicKind,\n  instantSchematicKind,\n  intSchematicKind,\n  listSchematicKind,\n  localDateSchematicKind,\n  localDateTimeSchematicKind,\n  longSchematicKind,\n  shortSchematicKind,\n  stringSchematicKind,\n  tableSchematicKind,\n];\n","import { Schematic } from \"../../Schematic\";\nimport { NULLABLE_SCHEMA } from \"../../SchematicKind\";\nimport { joinPackages, joinPaths } from \"../../util/join\";\nimport { KtData } from \"../kotlin/KtData\";\nimport { KtFile, ktFile } from \"../kotlin/KtFile\";\nimport { jsExport } from \"../kotlin/util/annotations\";\nimport { simpleKtName } from \"../kotlin/util/simpleKtName\";\nimport { ScaffoldingData } from \"../ScaffoldingData\";\n\nexport function scaffoldSchemas(schematic: Schematic, data: ScaffoldingData) {\n  const fileName = joinPaths(data.currentDir, `${schematic.name}Schema.kt`);\n  let file = data.files.get(fileName) as KtFile | undefined;\n  if (!file) {\n    data.files.set(fileName, (file = ktFile(data)));\n    data.files.set(\n      joinPaths(data.currentDir, `${schematic.name}Validations.kt`),\n      ktFile(data),\n    );\n  }\n  scaffoldSchemaDeclaration(schematic, { ...data, currentFile: file });\n}\n\nfunction scaffoldSchemaDeclaration(schematic: Schematic, data: KtData) {\n  const schematicKind = data.schematicKinds.get(schematic.kind);\n  if (!schematicKind) {\n    throw new Error(`Unknown schematic kind ${schematic.kind}`);\n  }\n\n  const nDecls = data.currentFile.declarations.length;\n  data.currentFile.declarations.push(\"\");\n  const decl = `val ${schematic.name}Schema = ${\n    schematicKind.scaffoldSchema?.(schematic, data) ??\n    `${simpleKtName(schematicKind.schema)}()`\n  }`;\n  data.currentFile.imports.add(schematicKind.schema);\n  data.currentFile.declarations[nDecls] =\n    data.currentPath === \"/\" ? jsExport(decl, data) : decl;\n}\n\nexport function scaffoldSchema(schematic: Schematic, data: KtData): string {\n  const schematicKind = data.schematicKinds.get(schematic.kind);\n  if (!schematicKind) {\n    throw new Error(`Unknown schematic kind ${schematic.kind}`);\n  }\n\n  const schematicPackage =\n    schematicKind.package ??\n    joinPackages(data.currentPackage, schematic.packageSuffix);\n\n  let scaffoldedSchema: string;\n  if (\n    schematicKind.package == null &&\n    schematicPackage !== data.currentPackage\n  ) {\n    scaffoldedSchema = `${schematic.name}Schema`;\n    data.currentFile.imports.add(`${schematicPackage}.${scaffoldedSchema}`);\n    scaffoldSchemas(schematic, {\n      ...data,\n      currentPackage: joinPackages(\n        data.currentPackage,\n        schematic.packageSuffix,\n      ),\n      currentDir: joinPaths(\n        data.currentDir,\n        schematic.packageSuffix?.replace(\".\", \"/\"),\n      ),\n    });\n  } else {\n    scaffoldedSchema =\n      schematicKind.scaffoldSchema?.(schematic, data) ??\n      `${simpleKtName(schematicKind.schema)}()`;\n    data.currentFile.imports.add(schematicKind.schema);\n  }\n\n  if (schematic.nullable) {\n    data.currentFile.imports.add(NULLABLE_SCHEMA);\n    return `${simpleKtName(NULLABLE_SCHEMA)} { ${scaffoldedSchema} }`;\n  }\n  return scaffoldedSchema;\n}\n","export default \"package <%= filePackage %>\\n\\nimport kotlin.js.JsExport\\nimport kotlinx.serialization.decodeFromString\\nimport kotlinx.serialization.encodeToString\\nimport kotlinx.serialization.json.Json\\n\\n@JsExport\\nfun encode<%= formClass %>ToJsonString(<%= formVar %>: <%= formClass %>): String = Json.encodeToString(<%= formVar %>)\\n\\n@JsExport\\nfun decode<%= formClass %>FromJsonString(json: String): <%= formClass %> = Json.decodeFromString(json)\\n\"","import { Options, render } from \"ejs\";\n\nimport { TemplateFile, TemplateFileOptions } from \"./TemplateFile\";\n\nexport interface EjsTemplateFile extends TemplateFile {\n  content: string;\n  ejsData?: Record<string, any>;\n  ejsOptions?: Omit<Options, \"_with\" | \"strict\" | \"destructuredLocals\">;\n}\n\nexport type EjsTemplateFileOptions = TemplateFileOptions &\n  EjsTemplateFile[\"ejsOptions\"];\n\nexport function ejsTemplateFile(\n  content: string,\n  ejsData?: EjsTemplateFile[\"ejsData\"],\n  { base64, binary, executable, ...ejsOptions }: EjsTemplateFileOptions = {},\n): EjsTemplateFile {\n  return {\n    content,\n    ejsData,\n    base64,\n    binary,\n    executable,\n    ejsOptions,\n    getContent: ejsTemplateFileContent,\n  } as EjsTemplateFile;\n}\n\nfunction ejsTemplateFileContent(\n  this: EjsTemplateFile,\n): string | Promise<string> {\n  return render(this.content, this.ejsData, {\n    strict: true,\n    destructuredLocals: Object.keys(this.ejsData ?? {}),\n    ...this.ejsOptions,\n  });\n}\n","import { joinPaths } from \"../../../util/join\";\nimport { ScaffoldingData } from \"../../ScaffoldingData\";\nimport { ejsTemplateFile, EjsTemplateFileOptions } from \"../EjsTemplateFile\";\n\nexport function addEjsTemplateFile(\n  data: ScaffoldingData,\n  fileName: string,\n  content: string,\n  ejsData?: Record<string, any>,\n  options?: EjsTemplateFileOptions,\n) {\n  data.files.set(\n    joinPaths(data.currentDir, fileName),\n    ejsTemplateFile(content, ejsData, options),\n  );\n}\n","import { camelCase } from \"change-case\";\n\nimport { Schematic } from \"../../Schematic\";\nimport { ScaffoldingData } from \"../ScaffoldingData\";\nimport serializerKt from \"../templates/Serializer.kt.ejs?raw\";\nimport { addEjsTemplateFile } from \"../templating/util/addEjsTemplateFile\";\n\nexport function scaffoldSerializer(\n  schematic: Schematic,\n  data: ScaffoldingData,\n) {\n  addEjsTemplateFile(data, `${schematic.name}Serializer.kt`, serializerKt, {\n    filePackage: data.currentPackage,\n    formVar: camelCase(schematic.name!),\n    formClass: schematic.name,\n  });\n}\n","export default \"package <%= filePackage %>\\n\\nimport io.kform.ExternalContexts\\nimport io.kform.FormValidator\\nimport io.kform.LocatedValidationError\\nimport io.kform.LocatedValidationWarning\\nimport io.kform.test.assertContainsMatchingIssue\\nimport io.kform.test.assertNotContainsMatchingIssue\\n\\nval <%= formVar %>Validator by lazy { FormValidator(<%= formClass %>Schema) }\\n\\nfun validate<%= formClass %>(\\n    <%= formVar %>: <%= formClass %>,\\n    path: String,\\n    externalContexts: ExternalContexts = emptyMap(),\\n) = <%= formVar %>Validator.validate(<%= formVar %>, path, externalContexts)\\n\\nsuspend fun assert<%= formClass %>ContainsError(\\n    path: String,\\n    code: String,\\n    <%= formVar %>: <%= formClass %>,\\n    externalContexts: ExternalContexts = emptyMap(),\\n) =\\n    assertContainsMatchingIssue(\\n        LocatedValidationError(path, code),\\n        validate<%= formClass %>(<%= formVar %>, path, externalContexts),\\n    )\\n\\nsuspend fun assert<%= formClass %>NotContainsError(\\n    path: String,\\n    code: String,\\n    <%= formVar %>: <%= formClass %>,\\n    externalContexts: ExternalContexts = emptyMap(),\\n) =\\n    assertNotContainsMatchingIssue(\\n        LocatedValidationError(path, code),\\n        validate<%= formClass %>(<%= formVar %>, path, externalContexts),\\n    )\\n\\nsuspend fun assert<%= formClass %>ContainsWarning(\\n    path: String,\\n    code: String,\\n    <%= formVar %>: <%= formClass %>,\\n    externalContexts: ExternalContexts = emptyMap(),\\n) =\\n    assertContainsMatchingIssue(\\n        LocatedValidationWarning(path, code),\\n        validate<%= formClass %>(<%= formVar %>, path, externalContexts),\\n    )\\n\\nsuspend fun assert<%= formClass %>NotContainsWarning(\\n    path: String,\\n    code: String,\\n    <%= formVar %>: <%= formClass %>,\\n    externalContexts: ExternalContexts = emptyMap(),\\n) =\\n    assertNotContainsMatchingIssue(\\n        LocatedValidationWarning(path, code),\\n        validate<%= formClass %>(<%= formVar %>, path, externalContexts),\\n    )\\n\"","import { camelCase } from \"change-case\";\n\nimport { Schematic } from \"../../Schematic\";\nimport { ScaffoldingData } from \"../ScaffoldingData\";\nimport validatorKt from \"../templates/Validator.kt.ejs?raw\";\nimport { addEjsTemplateFile } from \"../templating/util/addEjsTemplateFile\";\n\nexport function scaffoldValidator(schematic: Schematic, data: ScaffoldingData) {\n  addEjsTemplateFile(data, `${schematic.name}Validator.kt`, validatorKt, {\n    filePackage: data.currentPackage,\n    formVar: camelCase(schematic.name!),\n    formClass: schematic.name,\n  });\n}\n","import {\n  closestCenter,\n  DndContext,\n  DragOverlay,\n  KeyboardSensor,\n  PointerSensor,\n  useSensor,\n  useSensors,\n} from \"@dnd-kit/core\";\nimport * as React from \"react\";\nimport { create } from \"zustand/index\";\nimport { persist } from \"zustand/middleware\";\n\nimport { LoadSchematic } from \"./actions/LoadSchematic\";\nimport { SaveSchematic } from \"./actions/SaveSchematic\";\nimport { ScaffoldToZip } from \"./actions/ScaffoldToZip\";\nimport { configScaffolder } from \"./scaffolding/configScaffolder\";\nimport { Scaffolder } from \"./scaffolding/scaffold\";\nimport { scaffoldModels } from \"./scaffolding/scaffolders/scaffoldModels\";\nimport { scaffoldSchemas } from \"./scaffolding/scaffolders/scaffoldSchemas\";\nimport { scaffoldSerializer } from \"./scaffolding/scaffolders/scaffoldSerializer\";\nimport { scaffoldValidator } from \"./scaffolding/scaffolders/scaffoldValidator\";\nimport { createSchematic, moveSchematic, Schematic } from \"./Schematic\";\nimport {\n  DraggedSchematic,\n  SchematicBuilderContext,\n} from \"./SchematicBuilderContext\";\nimport { ClassBuilder } from \"./schematicBuilders/ClassBuilder\";\nimport {\n  classSchematicKind,\n  defaultSchematicKinds,\n  SchematicKind,\n} from \"./SchematicKind\";\n\nexport interface SchematicBuilderProps {\n  name?: string;\n  title?: React.ReactNode;\n  basePath?: string;\n  basePackage?: string;\n  baseDir?: string | ((schematic: Schematic) => string);\n  defaultRootClassPackage?: string;\n  defaultRootClassName?: string;\n  schematicKinds?: SchematicKind[];\n  scaffolders?:\n    | Scaffolder<any>[]\n    | ((schematic: Schematic) => Scaffolder<any>[]);\n  actions?: React.ReactNode;\n}\n\nexport function SchematicBuilder({\n  name = \"kform\",\n  title = document.title,\n  basePath,\n  basePackage,\n  baseDir,\n  defaultRootClassPackage = \"org.example\",\n  defaultRootClassName = \"MyForm\",\n  schematicKinds = defaultSchematicKinds,\n  scaffolders = [\n    configScaffolder(scaffoldSchemas, {\n      currentDir: \"src/commonMain/kotlin\",\n    }),\n    configScaffolder(scaffoldModels, {\n      currentDir: \"src/commonMain/kotlin\",\n    }),\n    configScaffolder(scaffoldSerializer, {\n      currentDir: \"src/commonMain/kotlin\",\n    }),\n    configScaffolder(scaffoldValidator, {\n      currentDir: \"src/commonTest/kotlin\",\n    }),\n  ],\n  actions = (\n    <>\n      <LoadSchematic />\n      <SaveSchematic />\n      <ScaffoldToZip />\n    </>\n  ),\n}: SchematicBuilderProps) {\n  const [useSchematic] = React.useState(() =>\n    create(\n      persist(\n        () =>\n          createSchematic({\n            kind: classSchematicKind.kind,\n            packageSuffix: defaultRootClassPackage,\n            name: defaultRootClassName,\n            children: [],\n          }),\n        { name },\n      ),\n    ),\n  );\n  const schematicKindsMap = React.useMemo(\n    () =>\n      new Map(\n        schematicKinds\n          .sort((t1, t2) => t1.kind.localeCompare(t2.kind))\n          .map((t) => [t.kind, t]),\n      ),\n    [schematicKinds],\n  );\n  const latestSchematicFileHandle = React.useRef<FileSystemFileHandle | null>(\n    null,\n  );\n\n  const [draggedSchematic, setDraggedSchematic] =\n    React.useState<DraggedSchematic | null>(null);\n  const sensors = useSensors(\n    useSensor(PointerSensor, {\n      activationConstraint: { distance: 10, delay: 400, tolerance: 20 },\n    }),\n    useSensor(KeyboardSensor),\n  );\n\n  return (\n    <SchematicBuilderContext.Provider\n      value={{\n        name,\n        basePath,\n        basePackage,\n        baseDir,\n        schematicKinds: schematicKindsMap,\n        scaffolders,\n        getRootSchematic: useSchematic.getState,\n        useSchematic: useSchematic as never,\n        setSchematic: useSchematic.setState,\n        removeSchematic: () => {},\n        parentPackage: basePackage,\n        draggedSchematic,\n        latestSchematicFileHandle,\n      }}\n    >\n      <DndContext\n        sensors={sensors}\n        collisionDetection={closestCenter}\n        onDragStart={(evt) =>\n          setDraggedSchematic({\n            id: evt.active.id as string,\n            ...evt.active.data.current,\n          } as DraggedSchematic)\n        }\n        onDragEnd={(evt) => {\n          const { parentId, sortBefore, ignored } =\n            evt.over?.data.current ?? {};\n          if (!ignored) {\n            useSchematic.setState((schematic) =>\n              moveSchematic(\n                schematic,\n                evt.active.id as string,\n                parentId,\n                sortBefore,\n              ),\n            );\n          }\n          setDraggedSchematic(null);\n        }}\n      >\n        <form className=\"builder-root\">\n          <header className=\"builder-header\">\n            <h1 className=\"builder-title\">{title}</h1>\n            <div className=\"builder-actions\">{actions}</div>\n          </header>\n\n          <ClassBuilder />\n        </form>\n\n        <DragOverlay>\n          {draggedSchematic && (\n            <div className=\"builder-dragged\">{draggedSchematic.node}</div>\n          )}\n        </DragOverlay>\n      </DndContext>\n    </SchematicBuilderContext.Provider>\n  );\n}\n","import { ScaffoldingFile, ScaffoldingFileContent } from \"../ScaffoldingFile\";\n\nexport interface TemplateFile extends ScaffoldingFile {\n  content: ScaffoldingFileContent;\n}\n\nexport type TemplateFileOptions = Omit<ScaffoldingFile, \"getContent\">;\n\nexport function templateFile(\n  content: ScaffoldingFileContent,\n  options?: TemplateFileOptions,\n): TemplateFile {\n  return {\n    ...options,\n    content,\n    getContent: templateFileContent,\n  } as TemplateFile;\n}\n\nfunction templateFileContent(this: TemplateFile): ScaffoldingFileContent {\n  return this.content;\n}\n","import { joinPaths } from \"../../../util/join\";\nimport { ScaffoldingData } from \"../../ScaffoldingData\";\nimport { ScaffoldingFileContent } from \"../../ScaffoldingFile\";\nimport { templateFile, TemplateFileOptions } from \"../TemplateFile\";\n\nexport function addTemplateFile(\n  data: ScaffoldingData,\n  fileName: string,\n  content: ScaffoldingFileContent,\n  options?: TemplateFileOptions,\n) {\n  data.files.set(\n    joinPaths(data.currentDir, fileName),\n    templateFile(content, options),\n  );\n}\n","import { ScaffoldingFile } from \"../ScaffoldingFile\";\nimport { TsImport } from \"./TsImport\";\n\nexport interface TsFile extends ScaffoldingFile {\n  imports: TsImport[];\n  declarations: string[];\n}\n\nexport function tsFile(): TsFile {\n  return {\n    imports: [],\n    declarations: [],\n    getContent: tsFileContent,\n  };\n}\n\ninterface TsImportStatement {\n  moduleName: string;\n  namedImports?: Set<string>;\n  typedImports?: Set<string>;\n  defaultImport?: string;\n  namespaceImport?: string;\n}\n\nfunction tsFileContent(this: TsFile): string {\n  const importStatements = tsImportsToStatements(this.imports);\n  return (\n    [\n      // Imports\n      importStatements\n        .sort((i1, i2) => i1.moduleName.localeCompare(i2.moduleName))\n        .map((i) => tsImportStatementToString(i))\n        .join(\"\\n\"),\n\n      // Declarations\n      ...this.declarations,\n    ]\n      .filter((s) => s)\n      .join(\"\\n\\n\") + \"\\n\"\n  );\n}\n\nfunction tsImportsToStatements(imports: TsImport[]): TsImportStatement[] {\n  const importsStatements = new Map<string, TsImportStatement>();\n  for (const imp of imports) {\n    let statement = importsStatements.get(imp.moduleName);\n    if (!statement) {\n      importsStatements.set(\n        imp.moduleName,\n        (statement = { moduleName: imp.moduleName }),\n      );\n    }\n    if (imp.isDefault) {\n      statement.defaultImport = imp.name;\n    } else if (imp.isNamespace) {\n      statement.namespaceImport = imp.name;\n    } else if (imp.isType) {\n      (statement.typedImports ??= new Set()).add(imp.name);\n    } else if (imp.name) {\n      (statement.namedImports ??= new Set()).add(imp.name);\n    }\n  }\n  return Array.from(importsStatements.values());\n}\n\nfunction tsImportStatementToString(importStatement: TsImportStatement): string {\n  const namedImportsArr = importStatement.namedImports\n    ? Array.from(importStatement.namedImports).sort((i1, i2) =>\n        i1.localeCompare(i2),\n      )\n    : [];\n  const typedImportsArr = importStatement.typedImports\n    ? Array.from(importStatement.typedImports)\n        .sort((i1, i2) => i1.localeCompare(i2))\n        .map((i) => `type ${i}`)\n    : [];\n  const namedTypedImports =\n    namedImportsArr.length > 0 || typedImportsArr.length > 0\n      ? `{ ${[...namedImportsArr, ...typedImportsArr].join(\", \")} }`\n      : null;\n  const defaultImport = importStatement.defaultImport || null;\n  const namespaceImport = importStatement.namespaceImport\n    ? `* as ${importStatement.namespaceImport}`\n    : null;\n  const allImports = [defaultImport, namespaceImport, namedTypedImports]\n    .filter((s) => s)\n    .join(\", \");\n  const moduleName = `\"${importStatement.moduleName}\"`;\n\n  return allImports\n    ? `import ${allImports} from ${moduleName};`\n    : `import ${moduleName};`;\n}\n"],"names":["index","React","jsx","fileOpen","fileSave","scaffold","jsxs","kind","useDroppable","_a","CHILD_NAME_PLACEHOLDER","useDraggable","Fragment","indentWidth","pascalCase","render","camelCase","create","persist","useSensors","useSensor","PointerSensor","KeyboardSensor","DndContext","closestCenter","DragOverlay"],"mappings":"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"}