@ostack.tech/kform-scaffolder 0.37.1 → 1.0.0-SNAPSHOT.20260811155807
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.
|
@@ -1382,7 +1382,7 @@ function SchematicBuilder({ name = "kform", title = document.title, basePath, ba
|
|
|
1382
1382
|
/* @__PURE__ */ jsx(LoadSchematic, {}),
|
|
1383
1383
|
/* @__PURE__ */ jsx(SaveSchematic, {}),
|
|
1384
1384
|
/* @__PURE__ */ jsx(ScaffoldToZip, {})
|
|
1385
|
-
] }), configs = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(UseFileBase64SerializerConfig, {}), /* @__PURE__ */ jsx(UseTableValuesSerializerConfig, {})] }), version = "0.
|
|
1385
|
+
] }), configs = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(UseFileBase64SerializerConfig, {}), /* @__PURE__ */ jsx(UseTableValuesSerializerConfig, {})] }), version = "1.0.0-SNAPSHOT" }) {
|
|
1386
1386
|
const [useSchematic] = useState(() => create(persist(() => createSchematic({
|
|
1387
1387
|
kind: classSchematicKind.kind,
|
|
1388
1388
|
packageSuffix: defaultRootClassPackage,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ostack-kform-scaffolder.js","names":[],"sources":["../../src/Schematic.ts","../../src/SchematicBuilderContext.ts","../../src/actions/LoadSchematic.tsx","../../src/actions/SaveSchematic.tsx","../../src/scaffolding/configScaffolder.ts","../../src/util/join.ts","../../src/scaffolding/scaffold.ts","../../src/scaffolding/useScaffolder.ts","../../src/actions/ScaffoldToZip.tsx","../../src/configs/util/useConfig.ts","../../src/configs/UseFileBase64SerializerConfig.tsx","../../src/configs/UseTableValuesSerializerConfig.tsx","../../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","../../../../node_modules/change-case/dist/index.js","../../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/templating/EjsTemplateFile.ts","../../src/scaffolding/templating/util/addEjsTemplateFile.ts","../../src/scaffolding/scaffolders/scaffoldSerializer.ts","../../src/scaffolding/scaffolders/scaffoldValidator.ts","../../src/util/useSafeLayoutEffect.ts","../../src/util/useMeasure.ts","../../src/SchematicBuilderConfig.tsx","../../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 config?: Record<string, unknown>;\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 {\n createContext,\n type ReactNode,\n type RefObject,\n useContext,\n} from \"react\";\n\nimport type { Scaffolder } from \"./scaffolding/scaffold.ts\";\nimport type { Schematic } from \"./Schematic.ts\";\nimport type { SchematicKind } from \"./SchematicKind.ts\";\n\nexport interface DraggedSchematic {\n id: string;\n type: string;\n node: 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>[] | ((schematic: Schematic) => Scaffolder<any>[]);\n scaffoldingData?:\n Record<string, any> | ((schematic: Schematic) => Record<string, 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 latestSchematicFileHandleRef: RefObject<FileSystemFileHandle | null>;\n}\n\nexport const SchematicBuilderContext =\n createContext<SchematicBuilderContextValue | null>(null);\n\nexport function useSchematicBuilderContext(): SchematicBuilderContextValue {\n const context = 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.ts\";\n\nexport function LoadSchematic() {\n const { name, setSchematic, latestSchematicFileHandleRef } =\n useSchematicBuilderContext();\n\n return (\n <button\n className=\"builder-icon-button builder-action builder-load-schematic\"\n type=\"button\"\n onClick={async () => {\n try {\n const file = await fileOpen({\n extensions: [\".json\"],\n mimeTypes: [\"application/json\"],\n description: \"Form schematic\",\n id: name,\n });\n latestSchematicFileHandleRef.current = file.handle ?? null;\n const content = JSON.parse(await file.text());\n setSchematic(() => content);\n } catch (err) {\n // User aborted\n if (err instanceof DOMException && err.name === \"AbortError\") {\n return;\n }\n\n alert(`Unable to load schematic: ${err?.toString()}`);\n }\n }}\n title=\"Load schematic\"\n aria-label=\"Load schematic\"\n >\n 📂\n </button>\n );\n}\n","import { fileSave, supported } from \"browser-fs-access\";\n\nimport type { Schematic } from \"../Schematic.ts\";\nimport { useSchematicBuilderContext } from \"../SchematicBuilderContext.ts\";\n\nexport function SaveSchematic() {\n const { name, getRootSchematic, latestSchematicFileHandleRef } =\n useSchematicBuilderContext();\n\n return (\n <button\n className=\"builder-icon-button builder-action builder-save-schematic\"\n type=\"button\"\n onClick={async () => {\n try {\n const schematic: Schematic = getRootSchematic();\n latestSchematicFileHandleRef.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 latestSchematicFileHandleRef.current,\n );\n if (supported) {\n alert(\n `Schematic saved successfully as “${latestSchematicFileHandleRef.current?.name ?? \"unknown\"}”.`,\n );\n }\n } catch (err) {\n // User aborted\n if (err instanceof DOMException && err.name === \"AbortError\") {\n return;\n }\n\n alert(`Unable to save schematic: ${err?.toString()}`);\n }\n }}\n title=\"Save schematic\"\n aria-label=\"Save schematic\"\n >\n 💾\n </button>\n );\n}\n","import type { Schematic } from \"../Schematic.ts\";\nimport type { Scaffolder } from \"./scaffold.ts\";\nimport type { ScaffoldingData } from \"./ScaffoldingData.ts\";\n\n/** Returns a new scaffolder with its data merged with the provided data. */\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","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 type { Schematic } from \"../Schematic.ts\";\nimport type { SchematicKind } from \"../SchematicKind.ts\";\nimport { joinPackages } from \"../util/join.ts\";\nimport type { ScaffoldingData } from \"./ScaffoldingData.ts\";\nimport type {\n ScaffoldingFile,\n ScaffoldingFileContent,\n} from \"./ScaffoldingFile.ts\";\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 { useCallback } from \"react\";\n\nimport { useSchematicBuilderContext } from \"../SchematicBuilderContext.ts\";\nimport { configScaffolder } from \"./configScaffolder.ts\";\nimport { scaffold, type ScaffoldedFile } from \"./scaffold.ts\";\n\nexport function useScaffolder(): () => ScaffoldedFile[] {\n const {\n basePath,\n basePackage,\n baseDir,\n schematicKinds,\n scaffolders,\n scaffoldingData,\n getRootSchematic,\n } = useSchematicBuilderContext();\n return useCallback(() => {\n const schematic = getRootSchematic();\n\n let actualScaffolders =\n typeof scaffolders === \"function\" ? scaffolders(schematic) : scaffolders;\n const actualScaffoldingData =\n typeof scaffoldingData === \"function\"\n ? scaffoldingData(schematic)\n : scaffoldingData;\n\n if (actualScaffoldingData) {\n actualScaffolders = actualScaffolders.map((scaffolder) =>\n configScaffolder(scaffolder, actualScaffoldingData),\n );\n }\n\n return scaffold(schematic, actualScaffolders, {\n schematicKinds,\n basePath,\n basePackage,\n baseDir: typeof baseDir === \"function\" ? baseDir(schematic) : baseDir,\n });\n }, [\n baseDir,\n basePackage,\n basePath,\n getRootSchematic,\n scaffolders,\n scaffoldingData,\n schematicKinds,\n ]);\n}\n","import { fileSave, supported } from \"browser-fs-access\";\nimport JSZip from \"jszip\";\n\nimport { useScaffolder } from \"../scaffolding/useScaffolder.ts\";\nimport { useSchematicBuilderContext } from \"../SchematicBuilderContext.ts\";\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 const fileHandle = 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 );\n if (supported) {\n alert(\n `Project scaffolded successfully in “${fileHandle?.name ?? \"unknown\"}”.`,\n );\n }\n } catch (err) {\n // User aborted\n if (err instanceof DOMException && err.name === \"AbortError\") {\n return;\n }\n\n alert(`Unable to scaffold project: ${err?.toString()}`);\n }\n }}\n >\n Scaffold 🏗️\n </button>\n );\n}\n","import { useCallback, useMemo } from \"react\";\n\nimport { useSchematicBuilderContext } from \"../../SchematicBuilderContext.ts\";\n\ntype UseConfigReturnType<T = unknown> = [\n T,\n (configValue: T | ((configValue: T) => T)) => void,\n];\n\nexport function useConfig<T = unknown>(\n configName: string,\n): UseConfigReturnType<T | undefined>;\nexport function useConfig<T = unknown>(\n configName: string,\n defaultValue: T,\n): UseConfigReturnType<T>;\nexport function useConfig<T>(\n configName: string,\n defaultValue?: T,\n): UseConfigReturnType<T> {\n const { useSchematic, setSchematic } = useSchematicBuilderContext();\n const configValue = useSchematic(\n (schematic) => (schematic.config?.[configName] ?? defaultValue) as T,\n );\n const setConfigValue = useCallback(\n (configValue: T | ((configValue: T) => T)) =>\n setSchematic((schematic) => ({\n config: {\n ...schematic.config,\n [configName]:\n typeof configValue === \"function\"\n ? (configValue as any)(schematic.config?.[configName])\n : configValue,\n },\n })),\n [configName, setSchematic],\n );\n\n return useMemo(\n () => [configValue, setConfigValue],\n [configValue, setConfigValue],\n );\n}\n","import { useConfig } from \"./util/useConfig.ts\";\n\nexport interface UseFileBase64SerializerConfigProps {\n disabled?: boolean;\n}\n\nexport function UseFileBase64SerializerConfig({\n disabled,\n}: UseFileBase64SerializerConfigProps) {\n const [config, setConfig] = useConfig(\"useFileBase64Serializer\", false);\n return (\n <div className=\"builder-config-field\">\n <label>\n <input\n type=\"checkbox\"\n checked={config}\n onChange={(evt) => setConfig(evt.target.checked)}\n disabled={disabled}\n />\n Use <code>FileBase64Serializer</code>\n </label>\n </div>\n );\n}\n","import { useConfig } from \"./util/useConfig.ts\";\n\nexport interface UseTableValuesSerializerConfigProps {\n disabled?: boolean;\n}\n\nexport function UseTableValuesSerializerConfig({\n disabled,\n}: UseTableValuesSerializerConfigProps) {\n const [config, setConfig] = useConfig(\"useTableValuesSerializer\", false);\n return (\n <div className=\"builder-config-field\">\n <label>\n <input\n type=\"checkbox\"\n checked={config}\n onChange={(evt) => setConfig(evt.target.checked)}\n disabled={disabled}\n />\n Use <code>TableValuesSerializer</code>\n </label>\n </div>\n );\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 type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport type { ScaffoldingFile } from \"../ScaffoldingFile.ts\";\nimport { isDefaultKtImport } from \"./util/defaultImports.ts\";\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 type { KtData } from \"../KtData.ts\";\nimport { simpleKtName } from \"./simpleKtName.ts\";\n\nconst JS_EXPORT = \"kotlin.js.JsExport\";\nconst SERIALIZABLE = \"kotlinx.serialization.Serializable\";\n\nexport function annotate(\n annotations: string | string[] | undefined,\n code: string,\n): string {\n if (!annotations || annotations.length === 0) {\n return code;\n }\n return [\n ...(typeof annotations === \"string\" ? [annotations] : annotations),\n code,\n ].join(\"\\n\");\n}\n\nexport function jsExport(code: string, data: KtData): string {\n data.currentFile.imports.add(JS_EXPORT);\n return annotate(`@${simpleKtName(JS_EXPORT)}`, code);\n}\n\nexport function serializable(code: string, data: KtData): string {\n data.currentFile.imports.add(SERIALIZABLE);\n return annotate(`@${simpleKtName(SERIALIZABLE)}`, code);\n}\n","import type { Schematic } from \"../../Schematic.ts\";\nimport { joinPackages, joinPaths } from \"../../util/join.ts\";\nimport type { KtData } from \"../kotlin/KtData.ts\";\nimport { type KtFile, ktFile } from \"../kotlin/KtFile.ts\";\nimport { jsExport, serializable } from \"../kotlin/util/annotations.ts\";\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\n\nexport function scaffoldModels(\n schematic: Schematic,\n data: ScaffoldingData,\n): void {\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): void {\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 scaffoldPropertyAnnotations(\n schematic: Schematic,\n data: KtData,\n): string | string[] | undefined {\n const schematicKind = data.schematicKinds.get(schematic.kind);\n if (!schematicKind) {\n throw new Error(`Unknown schematic kind: '${schematic.kind}'.`);\n }\n\n return typeof schematicKind.propertyAnnotations === \"function\"\n ? schematicKind.propertyAnnotations(schematic, data)\n : schematicKind.propertyAnnotations;\n}\n\nexport function scaffoldType(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 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","// Regexps involved with splitting words in various case formats.\nconst SPLIT_LOWER_UPPER_RE = /([\\p{Ll}\\d])(\\p{Lu})/gu;\nconst SPLIT_UPPER_UPPER_RE = /(\\p{Lu})([\\p{Lu}][\\p{Ll}])/gu;\n// Used to iterate over the initial split result and separate numbers.\nconst SPLIT_SEPARATE_NUMBER_RE = /(\\d)\\p{Ll}|(\\p{L})\\d/u;\n// Regexp involved with stripping non-word characters from the result.\nconst DEFAULT_STRIP_REGEXP = /[^\\p{L}\\d]+/giu;\n// The replacement value for splits.\nconst SPLIT_REPLACE_VALUE = \"$1\\0$2\";\n// The default characters to keep after transforming case.\nconst DEFAULT_PREFIX_SUFFIX_CHARACTERS = \"\";\n/**\n * Split any cased input strings into an array of words.\n */\nexport function split(value) {\n let result = value.trim();\n result = result\n .replace(SPLIT_LOWER_UPPER_RE, SPLIT_REPLACE_VALUE)\n .replace(SPLIT_UPPER_UPPER_RE, SPLIT_REPLACE_VALUE);\n result = result.replace(DEFAULT_STRIP_REGEXP, \"\\0\");\n let start = 0;\n let end = result.length;\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\")\n start++;\n if (start === end)\n return [];\n while (result.charAt(end - 1) === \"\\0\")\n end--;\n return result.slice(start, end).split(/\\0/g);\n}\n/**\n * Split the input string into an array of words, separating numbers.\n */\nexport function splitSeparateNumbers(value) {\n const words = split(value);\n for (let i = 0; i < words.length; i++) {\n const word = words[i];\n const match = SPLIT_SEPARATE_NUMBER_RE.exec(word);\n if (match) {\n const offset = match.index + (match[1] ?? match[2]).length;\n words.splice(i, 1, word.slice(0, offset), word.slice(offset));\n }\n }\n return words;\n}\n/**\n * Convert a string to space separated lower case (`foo bar`).\n */\nexport function noCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n return (prefix +\n words.map(lowerFactory(options?.locale)).join(options?.delimiter ?? \" \") +\n suffix);\n}\n/**\n * Convert a string to camel case (`fooBar`).\n */\nexport function camelCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return (prefix +\n words\n .map((word, index) => {\n if (index === 0)\n return lower(word);\n return transform(word, index);\n })\n .join(options?.delimiter ?? \"\") +\n suffix);\n}\n/**\n * Convert a string to pascal case (`FooBar`).\n */\nexport function pascalCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return prefix + words.map(transform).join(options?.delimiter ?? \"\") + suffix;\n}\n/**\n * Convert a string to pascal snake case (`Foo_Bar`).\n */\nexport function pascalSnakeCase(input, options) {\n return capitalCase(input, { delimiter: \"_\", ...options });\n}\n/**\n * Convert a string to capital case (`Foo Bar`).\n */\nexport function capitalCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n return (prefix +\n words\n .map(capitalCaseTransformFactory(lower, upper))\n .join(options?.delimiter ?? \" \") +\n suffix);\n}\n/**\n * Convert a string to constant case (`FOO_BAR`).\n */\nexport function constantCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n return (prefix +\n words.map(upperFactory(options?.locale)).join(options?.delimiter ?? \"_\") +\n suffix);\n}\n/**\n * Convert a string to dot case (`foo.bar`).\n */\nexport function dotCase(input, options) {\n return noCase(input, { delimiter: \".\", ...options });\n}\n/**\n * Convert a string to kebab case (`foo-bar`).\n */\nexport function kebabCase(input, options) {\n return noCase(input, { delimiter: \"-\", ...options });\n}\n/**\n * Convert a string to path case (`foo/bar`).\n */\nexport function pathCase(input, options) {\n return noCase(input, { delimiter: \"/\", ...options });\n}\n/**\n * Convert a string to path case (`Foo bar`).\n */\nexport function sentenceCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = capitalCaseTransformFactory(lower, upper);\n return (prefix +\n words\n .map((word, index) => {\n if (index === 0)\n return transform(word);\n return lower(word);\n })\n .join(options?.delimiter ?? \" \") +\n suffix);\n}\n/**\n * Convert a string to snake case (`foo_bar`).\n */\nexport function snakeCase(input, options) {\n return noCase(input, { delimiter: \"_\", ...options });\n}\n/**\n * Convert a string to header case (`Foo-Bar`).\n */\nexport function trainCase(input, options) {\n return capitalCase(input, { delimiter: \"-\", ...options });\n}\nfunction lowerFactory(locale) {\n return locale === false\n ? (input) => input.toLowerCase()\n : (input) => input.toLocaleLowerCase(locale);\n}\nfunction upperFactory(locale) {\n return locale === false\n ? (input) => input.toUpperCase()\n : (input) => input.toLocaleUpperCase(locale);\n}\nfunction capitalCaseTransformFactory(lower, upper) {\n return (word) => `${upper(word[0])}${lower(word.slice(1))}`;\n}\nfunction pascalCaseTransformFactory(lower, upper) {\n return (word, index) => {\n const char0 = word[0];\n const initial = index > 0 && char0 >= \"0\" && char0 <= \"9\" ? \"_\" + char0 : upper(char0);\n return initial + lower(word.slice(1));\n };\n}\nfunction splitPrefixSuffix(input, options = {}) {\n const splitFn = options.split ?? (options.separateNumbers ? splitSeparateNumbers : split);\n const prefixCharacters = options.prefixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n const suffixCharacters = options.suffixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n let prefixIndex = 0;\n let suffixIndex = input.length;\n while (prefixIndex < input.length) {\n const char = input.charAt(prefixIndex);\n if (!prefixCharacters.includes(char))\n break;\n prefixIndex++;\n }\n while (suffixIndex > prefixIndex) {\n const index = suffixIndex - 1;\n const char = input.charAt(index);\n if (!suffixCharacters.includes(char))\n break;\n suffixIndex = index;\n }\n return [\n input.slice(0, prefixIndex),\n splitFn(input.slice(prefixIndex, suffixIndex)),\n input.slice(suffixIndex),\n ];\n}\n//# sourceMappingURL=index.js.map","/** Value for a data attribute given a condition. */\nexport function boolDataAttr(\n condition: boolean | null | undefined,\n): string | undefined {\n return condition ? \"\" : undefined;\n}\n","import type { KeyboardEvent, PointerEvent } from \"react\";\n\n/** Properties used to prevent an element from being dragged. */\nexport const preventDrag = {\n onKeyDown: (evt: KeyboardEvent) => evt.stopPropagation(),\n onPointerDown: (evt: PointerEvent) => evt.stopPropagation(),\n};\n","import { useSchematicBuilderContext } from \"../../SchematicBuilderContext.ts\";\nimport { preventDrag } from \"../../util/preventDrag.ts\";\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.ts\";\nimport { preventDrag } from \"../../util/preventDrag.ts\";\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.ts\";\nimport { preventDrag } from \"../../util/preventDrag.ts\";\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.ts\";\nimport { preventDrag } from \"../../util/preventDrag.ts\";\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 { useRef } from \"react\";\n\nimport { useSchematicBuilderContext } from \"../../SchematicBuilderContext.ts\";\nimport { preventDrag } from \"../../util/preventDrag.ts\";\n\nconst PACKAGE_PLACEHOLDER = \"package.suffix\";\nconst NAME_PLACEHOLDER = \"ClassName\";\n\nexport function PackageNameInput() {\n const { useSchematic, setSchematic, parentPackage } =\n useSchematicBuilderContext();\n const pkgRef = 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, type Schematic } from \"../Schematic.ts\";\nimport {\n SchematicBuilderContext,\n useSchematicBuilderContext,\n} from \"../SchematicBuilderContext.ts\";\nimport { boolDataAttr } from \"../util/boolDataAttr.ts\";\nimport { joinPackages } from \"../util/join.ts\";\nimport { preventDrag } from \"../util/preventDrag.ts\";\nimport { ChildMarker } from \"./util/ChildMarker.tsx\";\nimport { ChildRemove } from \"./util/ChildRemove.tsx\";\nimport { KindSelect } from \"./util/KindSelect.tsx\";\nimport { NullableInput } from \"./util/NullableInput.tsx\";\nimport { PackageNameInput } from \"./util/PackageNameInput.tsx\";\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\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 ===\n (fields[i - 1]?.id as string | undefined),\n }}\n >\n <ClassFieldBuilder />\n </SchematicBuilderContext>\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\n value={{ ...schematicBuilderContext, parentChildName: childName }}\n >\n <KindSelect />\n </SchematicBuilderContext>\n <NullableInput />\n <ChildRemove />\n </div>\n\n {Builder && !collapsed && (\n <SchematicBuilderContext\n value={{\n ...schematicBuilderContext,\n parentChildName: childName,\n disableDrop: disableDrop || isDragging,\n }}\n >\n <Builder />\n </SchematicBuilderContext>\n )}\n </li>\n </>\n );\n}\n","import { useDraggable, useDroppable } from \"@dnd-kit/core\";\n\nimport { createSchematic, type Schematic } from \"../Schematic.ts\";\nimport {\n SchematicBuilderContext,\n useSchematicBuilderContext,\n} from \"../SchematicBuilderContext.ts\";\nimport { boolDataAttr } from \"../util/boolDataAttr.ts\";\nimport { preventDrag } from \"../util/preventDrag.ts\";\nimport { ChildMarker } from \"./util/ChildMarker.tsx\";\nimport { ChildRemove } from \"./util/ChildRemove.tsx\";\nimport { PackageNameInput } from \"./util/PackageNameInput.tsx\";\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\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 ===\n (fields[i - 1]?.id as string | undefined),\n }}\n >\n <EnumEntryBuilder />\n </SchematicBuilderContext>\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.ts\";\nimport { KindSelect } from \"./util/KindSelect.tsx\";\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\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>\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/** Tag function used to aid in the construction of code blocks. */\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 type { ComponentType } from \"react\";\n\nimport type { KtData } from \"./scaffolding/kotlin/KtData.ts\";\nimport { annotate } from \"./scaffolding/kotlin/util/annotations.ts\";\nimport {\n scaffoldDefaultValue,\n scaffoldPropertyAnnotations,\n scaffoldType,\n} from \"./scaffolding/scaffolders/scaffoldModels.ts\";\nimport { scaffoldSchema } from \"./scaffolding/scaffolders/scaffoldSchemas.ts\";\nimport { createSchematic, type Schematic } from \"./Schematic.ts\";\nimport { ClassBuilder } from \"./schematicBuilders/ClassBuilder.tsx\";\nimport { EnumBuilder } from \"./schematicBuilders/EnumBuilder.tsx\";\nimport { ListableBuilder } from \"./schematicBuilders/ListableBuilder.tsx\";\nimport { code } from \"./util/code.ts\";\nimport { joinPaths } from \"./util/join.ts\";\n\nexport const NULLABLE_SCHEMA = \"tech.ostack.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 propertyAnnotations?:\n | string\n | string[]\n | ((schematic: Schematic, data: KtData) => string | string[] | undefined);\n builder?: ComponentType;\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: \"tech.ostack.kform.schemas.AnySchema\",\n nullable: false,\n defaultValue: \"null\",\n scaffoldType: () => \"Any?\",\n};\nexport const bigDecimalSchematicKind: SchematicKind = {\n kind: \"BigDecimal\",\n package: \"tech.ostack.kform.datatypes\",\n name: \"BigDecimal\",\n schema: \"tech.ostack.kform.schemas.BigDecimalSchema\",\n defaultNullable: true,\n defaultValue: \"BigDecimal.ZERO\",\n};\nexport const bigIntegerSchematicKind: SchematicKind = {\n kind: \"BigInteger\",\n package: \"tech.ostack.kform.datatypes\",\n name: \"BigInteger\",\n schema: \"tech.ostack.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: \"tech.ostack.kform.schemas.BooleanSchema\",\n defaultValue: \"false\",\n};\nexport const byteSchematicKind: SchematicKind = {\n kind: \"Byte\",\n package: \"kotlin\",\n name: \"Byte\",\n schema: \"tech.ostack.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: \"tech.ostack.kform.schemas.CharSchema\",\n defaultNullable: true,\n defaultValue: \"0.toChar()\",\n};\nexport const classSchematicKind: SchematicKind = {\n kind: \"Class\",\n schema: \"tech.ostack.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((childSchematic) => {\n const childData = {\n ...data,\n currentPath: joinPaths(\n data.currentPath,\n childSchematic.childName,\n ),\n };\n\n return annotate(\n scaffoldPropertyAnnotations(childSchematic, childData),\n `var ${childSchematic.childName}: ${scaffoldType(\n childSchematic,\n childData,\n )} = ${scaffoldDefaultValue(childSchematic, childData)}`,\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: \"tech.ostack.kform.schemas.DoubleSchema\",\n defaultNullable: true,\n defaultValue: \"0.0\",\n};\nexport const enumSchematicKind: SchematicKind = {\n kind: \"Enum\",\n schema: \"tech.ostack.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: \"tech.ostack.kform.datatypes\",\n name: \"File\",\n schema: \"tech.ostack.kform.schemas.FileSchema\",\n defaultNullable: true,\n defaultValue: (_schematic, data) => {\n data.currentFile.imports.add(\n \"tech.ostack.kform.datatypes.emptyPlaceholderFile\",\n );\n return \"emptyPlaceholderFile()\";\n },\n propertyAnnotations: (_schematic, data) => {\n if (data.useFileBase64Serializer) {\n data.currentFile.imports.add(\n \"tech.ostack.kform.serializers.FileBase64Serializer\",\n );\n return \"@Serializable(with = FileBase64Serializer::class)\";\n }\n },\n};\nexport const floatSchematicKind: SchematicKind = {\n kind: \"Float\",\n package: \"kotlin\",\n name: \"Float\",\n schema: \"tech.ostack.kform.schemas.FloatSchema\",\n defaultNullable: true,\n defaultValue: \"0f\",\n};\nexport const instantSchematicKind: SchematicKind = {\n kind: \"Instant\",\n package: \"kotlin.time\",\n name: \"Instant\",\n schema: \"tech.ostack.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: \"tech.ostack.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: \"tech.ostack.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: \"tech.ostack.kform.schemas.LocalDateSchema\",\n defaultNullable: true,\n defaultValue: \"LocalDate(1970, 1, 1)\",\n};\nexport const localDateTimeSchematicKind: SchematicKind = {\n kind: \"LocalDateTime\",\n package: \"kotlinx.datetime\",\n name: \"LocalDateTime\",\n schema: \"tech.ostack.kform.schemas.LocalDateTimeSchema\",\n defaultNullable: true,\n defaultValue: \"LocalDateTime(1970, 1, 1, 0, 0)\",\n};\nexport const longSchematicKind: SchematicKind = {\n kind: \"Long\",\n package: \"kotlin\",\n name: \"Long\",\n schema: \"tech.ostack.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: \"tech.ostack.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: \"tech.ostack.kform.schemas.StringSchema\",\n defaultValue: '\"\"',\n};\nexport const tableSchematicKind: SchematicKind = {\n kind: \"Table\",\n package: \"tech.ostack.kform.datatypes\",\n name: \"Table\",\n schema: \"tech.ostack.kform.schemas.TableSchema\",\n defaultValue: (_schematic, data) => {\n data.currentFile.imports.add(\"tech.ostack.kform.datatypes.tableOf\");\n return \"tableOf()\";\n },\n builder: ListableBuilder,\n initChildren: () => [createSchematic()],\n propertyAnnotations: (_schematic, data) => {\n if (data.useTableValuesSerializer) {\n data.currentFile.imports.add(\n \"tech.ostack.kform.serializers.TableValuesSerializer\",\n );\n return \"@Serializable(with = TableValuesSerializer::class)\";\n }\n },\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 type { Schematic } from \"../../Schematic.ts\";\nimport { NULLABLE_SCHEMA } from \"../../SchematicKind.ts\";\nimport { joinPackages, joinPaths } from \"../../util/join.ts\";\nimport type { KtData } from \"../kotlin/KtData.ts\";\nimport { type KtFile, ktFile } from \"../kotlin/KtFile.ts\";\nimport { jsExport } from \"../kotlin/util/annotations.ts\";\nimport { simpleKtName } from \"../kotlin/util/simpleKtName.ts\";\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\n\nexport function scaffoldSchemas(\n schematic: Schematic,\n data: ScaffoldingData,\n): void {\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): void {\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","import { type Options, render } from \"ejs\";\n\nimport type { TemplateFile, TemplateFileOptions } from \"./TemplateFile.ts\";\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 };\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.ts\";\nimport type { ScaffoldingData } from \"../../ScaffoldingData.ts\";\nimport {\n ejsTemplateFile,\n type EjsTemplateFileOptions,\n} from \"../EjsTemplateFile.ts\";\n\nexport function addEjsTemplateFile(\n data: ScaffoldingData,\n fileName: string,\n content: string,\n ejsData?: Record<string, any>,\n options?: EjsTemplateFileOptions,\n): void {\n data.files.set(\n joinPaths(data.currentDir, fileName),\n ejsTemplateFile(content, ejsData, options),\n );\n}\n","import { camelCase } from \"change-case\";\n\nimport type { Schematic } from \"../../Schematic.ts\";\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport serializerKt from \"../templates/Serializer.kt.ejs?raw\";\nimport { addEjsTemplateFile } from \"../templating/util/addEjsTemplateFile.ts\";\n\nexport function scaffoldSerializer(\n schematic: Schematic,\n data: ScaffoldingData,\n): void {\n addEjsTemplateFile(data, `${schematic.name}Serializer.kt`, serializerKt, {\n filePackage: data.currentPackage,\n formVar: camelCase(schematic.name!),\n formClass: schematic.name,\n });\n}\n","import { camelCase } from \"change-case\";\n\nimport type { Schematic } from \"../../Schematic.ts\";\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport validatorKt from \"../templates/Validator.kt.ejs?raw\";\nimport { addEjsTemplateFile } from \"../templating/util/addEjsTemplateFile.ts\";\n\nexport function scaffoldValidator(\n schematic: Schematic,\n data: ScaffoldingData,\n): void {\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 { useEffect, useLayoutEffect } from \"react\";\n\n/** `useLayoutEffect` hook which runs `useEffect` on the server. */\nexport const useSafeLayoutEffect =\n typeof document !== \"undefined\" ? useLayoutEffect : useEffect;\n","import { useSafeLayoutEffect } from \"./useSafeLayoutEffect.ts\";\n\n/**\n * Hook that tracks the dimensions of an HTML element using the Resize Observer\n * API + window resize.\n */\nexport function useMeasure<T extends Element = Element>(\n element: T | null,\n setMeasurement: (measurement: DOMRectReadOnly | undefined) => void,\n) {\n useSafeLayoutEffect(() => {\n if (!element) {\n setMeasurement(undefined);\n return;\n }\n\n const cb = () => setMeasurement(element.getBoundingClientRect());\n cb();\n\n const observer = new ResizeObserver(([entry]) => entry && cb());\n observer.observe(element);\n window.addEventListener(\"resize\", cb);\n\n return () => {\n observer.disconnect();\n window.removeEventListener(\"resize\", cb);\n setMeasurement(undefined);\n };\n }, [element, setMeasurement]);\n}\n","import { type ReactNode, useState } from \"react\";\n\nimport { useMeasure } from \"./util/useMeasure.ts\";\n\nexport interface SchematicBuilderConfigProps {\n children?: ReactNode;\n}\n\nexport function SchematicBuilderConfig({\n children,\n}: SchematicBuilderConfigProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);\n const [popoverEl, setPopoverEl] = useState<HTMLDivElement | null>(null);\n useMeasure(anchorEl, (measurement) => {\n if (popoverEl && measurement) {\n popoverEl.style.setProperty(\"--anchor-top\", `${measurement.top}px`);\n popoverEl.style.setProperty(\"--anchor-left\", `${measurement.left}px`);\n popoverEl.style.setProperty(\"--anchor-bottom\", `${measurement.bottom}px`);\n popoverEl.style.setProperty(\"--anchor-right\", `${measurement.right}px`);\n popoverEl.style.setProperty(\"--anchor-width\", `${measurement.width}px`);\n popoverEl.style.setProperty(\"--anchor-height\", `${measurement.height}px`);\n }\n });\n useMeasure(popoverEl, (measurement) => {\n if (popoverEl && measurement) {\n popoverEl.style.setProperty(\"--width\", `${measurement.width}px`);\n popoverEl.style.setProperty(\"--height\", `${measurement.height}px`);\n }\n });\n\n return (\n <>\n <button\n type=\"button\"\n className=\"builder-icon-button builder-action builder-config-schematic\"\n popoverTarget=\"builder-config-popover\"\n title=\"Config\"\n aria-label=\"Config\"\n ref={setAnchorEl}\n >\n ⚙️\n </button>\n <div popover=\"\" id=\"builder-config-popover\" ref={setPopoverEl}>\n {children}\n </div>\n </>\n );\n}\n","import {\n closestCenter,\n DndContext,\n DragOverlay,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport { type ReactNode, useMemo, useRef, useState } from \"react\";\nimport { create } from \"zustand\";\nimport { persist } from \"zustand/middleware\";\n\nimport { LoadSchematic } from \"./actions/LoadSchematic.tsx\";\nimport { SaveSchematic } from \"./actions/SaveSchematic.tsx\";\nimport { ScaffoldToZip } from \"./actions/ScaffoldToZip.tsx\";\nimport { UseFileBase64SerializerConfig } from \"./configs/UseFileBase64SerializerConfig.tsx\";\nimport { UseTableValuesSerializerConfig } from \"./configs/UseTableValuesSerializerConfig.tsx\";\nimport { configScaffolder } from \"./scaffolding/configScaffolder.ts\";\nimport type { KtData } from \"./scaffolding/kotlin/KtData.ts\";\nimport type { Scaffolder } from \"./scaffolding/scaffold.ts\";\nimport { scaffoldModels } from \"./scaffolding/scaffolders/scaffoldModels.ts\";\nimport { scaffoldSchemas } from \"./scaffolding/scaffolders/scaffoldSchemas.ts\";\nimport { scaffoldSerializer } from \"./scaffolding/scaffolders/scaffoldSerializer.ts\";\nimport { scaffoldValidator } from \"./scaffolding/scaffolders/scaffoldValidator.ts\";\nimport { createSchematic, moveSchematic, type Schematic } from \"./Schematic.ts\";\nimport { SchematicBuilderConfig } from \"./SchematicBuilderConfig.tsx\";\nimport {\n type DraggedSchematic,\n SchematicBuilderContext,\n} from \"./SchematicBuilderContext.ts\";\nimport { ClassBuilder } from \"./schematicBuilders/ClassBuilder.tsx\";\nimport {\n classSchematicKind,\n defaultSchematicKinds,\n type SchematicKind,\n} from \"./SchematicKind.ts\";\n\nexport interface SchematicBuilderProps {\n name?: string;\n title?: 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>[] | ((schematic: Schematic) => Scaffolder<any>[]);\n scaffoldingData?:\n Record<string, any> | ((schematic: Schematic) => Record<string, any>);\n actions?: ReactNode;\n configs?: ReactNode;\n version?: ReactNode;\n}\n\nconst kotlinMainData: Partial<KtData> = {\n currentDir: \"shared/src/commonMain/kotlin\",\n};\nconst kotlinTestData: Partial<KtData> = {\n currentDir: \"shared/src/commonTest/kotlin\",\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, kotlinMainData),\n configScaffolder(scaffoldModels, kotlinMainData),\n configScaffolder(scaffoldSerializer, kotlinMainData),\n configScaffolder(scaffoldValidator, kotlinTestData),\n ],\n scaffoldingData = (schematic) => schematic.config,\n actions = (\n <>\n <LoadSchematic />\n <SaveSchematic />\n <ScaffoldToZip />\n </>\n ),\n configs = (\n <>\n <UseFileBase64SerializerConfig />\n <UseTableValuesSerializerConfig />\n </>\n ),\n version = import.meta.env.VITE_APP_VERSION,\n}: SchematicBuilderProps) {\n const [useSchematic] = 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 = 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 latestSchematicFileHandleRef = useRef<FileSystemFileHandle | null>(\n null,\n );\n\n const [draggedSchematic, setDraggedSchematic] =\n 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\n value={{\n name,\n basePath,\n basePackage,\n baseDir,\n schematicKinds: schematicKindsMap,\n scaffolders,\n scaffoldingData,\n getRootSchematic: useSchematic.getState,\n useSchematic,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n setSchematic: useSchematic.setState,\n removeSchematic: () => {},\n parentPackage: basePackage,\n draggedSchematic,\n latestSchematicFileHandleRef,\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 {version && <div className=\"builder-version\">{version}</div>}\n <div className=\"builder-actions\">\n {configs && (\n <SchematicBuilderConfig>{configs}</SchematicBuilderConfig>\n )}\n {actions}\n </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>\n );\n}\n","import type {\n ScaffoldingFile,\n ScaffoldingFileContent,\n} from \"../ScaffoldingFile.ts\";\n\nexport interface TemplateFile extends ScaffoldingFile {\n content: ScaffoldingFileContent | Promise<ScaffoldingFileContent>;\n}\n\nexport type TemplateFileOptions = Omit<ScaffoldingFile, \"getContent\">;\n\nexport function templateFile(\n content: ScaffoldingFileContent | Promise<ScaffoldingFileContent>,\n options?: TemplateFileOptions,\n): TemplateFile {\n return { ...options, content, getContent: templateFileContent };\n}\n\nfunction templateFileContent(\n this: TemplateFile,\n): ScaffoldingFileContent | Promise<ScaffoldingFileContent> {\n return this.content;\n}\n","import { joinPaths } from \"../../../util/join.ts\";\nimport type { ScaffoldingData } from \"../../ScaffoldingData.ts\";\nimport type { ScaffoldingFileContent } from \"../../ScaffoldingFile.ts\";\nimport { templateFile, type TemplateFileOptions } from \"../TemplateFile.ts\";\n\nexport function addTemplateFile(\n data: ScaffoldingData,\n fileName: string,\n content: ScaffoldingFileContent | Promise<ScaffoldingFileContent>,\n options?: TemplateFileOptions,\n): void {\n data.files.set(\n joinPaths(data.currentDir, fileName),\n templateFile(content, options),\n );\n}\n","import type { ScaffoldingFile } from \"../ScaffoldingFile.ts\";\nimport type { TsImport } from \"./TsImport.ts\";\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 = [\n ...new Set([\n ...(importStatement.namedImports ?? []),\n ...(importStatement.typedImports ?? []),\n ]),\n ].sort((i1, i2) => i1.localeCompare(i2));\n const allNamedImportsAreTyped = namedImportsArr.every(\n (i) => !importStatement.namedImports?.has(i),\n );\n const namedImports =\n namedImportsArr.length > 0\n ? allNamedImportsAreTyped\n ? `type { ${namedImportsArr.join(\", \")} }`\n : `{ ${namedImportsArr\n .map((i) =>\n importStatement.namedImports?.has(i) ? i : `type ${i}`,\n )\n .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, namedImports]\n .filter((s) => s)\n .join(\", \");\n const moduleName = JSON.stringify(importStatement.moduleName);\n\n return allImports\n ? `import ${allImports} from ${moduleName};`\n : `import ${moduleName};`;\n}\n"],"x_google_ignoreList":[17],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ostack-kform-scaffolder.js","names":[],"sources":["../../src/Schematic.ts","../../src/SchematicBuilderContext.ts","../../src/actions/LoadSchematic.tsx","../../src/actions/SaveSchematic.tsx","../../src/scaffolding/configScaffolder.ts","../../src/util/join.ts","../../src/scaffolding/scaffold.ts","../../src/scaffolding/useScaffolder.ts","../../src/actions/ScaffoldToZip.tsx","../../src/configs/util/useConfig.ts","../../src/configs/UseFileBase64SerializerConfig.tsx","../../src/configs/UseTableValuesSerializerConfig.tsx","../../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","../../../../node_modules/change-case/dist/index.js","../../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/templating/EjsTemplateFile.ts","../../src/scaffolding/templating/util/addEjsTemplateFile.ts","../../src/scaffolding/scaffolders/scaffoldSerializer.ts","../../src/scaffolding/scaffolders/scaffoldValidator.ts","../../src/util/useSafeLayoutEffect.ts","../../src/util/useMeasure.ts","../../src/SchematicBuilderConfig.tsx","../../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 config?: Record<string, unknown>;\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 {\n createContext,\n type ReactNode,\n type RefObject,\n useContext,\n} from \"react\";\n\nimport type { Scaffolder } from \"./scaffolding/scaffold.ts\";\nimport type { Schematic } from \"./Schematic.ts\";\nimport type { SchematicKind } from \"./SchematicKind.ts\";\n\nexport interface DraggedSchematic {\n id: string;\n type: string;\n node: 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>[] | ((schematic: Schematic) => Scaffolder<any>[]);\n scaffoldingData?:\n Record<string, any> | ((schematic: Schematic) => Record<string, 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 latestSchematicFileHandleRef: RefObject<FileSystemFileHandle | null>;\n}\n\nexport const SchematicBuilderContext =\n createContext<SchematicBuilderContextValue | null>(null);\n\nexport function useSchematicBuilderContext(): SchematicBuilderContextValue {\n const context = 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.ts\";\n\nexport function LoadSchematic() {\n const { name, setSchematic, latestSchematicFileHandleRef } =\n useSchematicBuilderContext();\n\n return (\n <button\n className=\"builder-icon-button builder-action builder-load-schematic\"\n type=\"button\"\n onClick={async () => {\n try {\n const file = await fileOpen({\n extensions: [\".json\"],\n mimeTypes: [\"application/json\"],\n description: \"Form schematic\",\n id: name,\n });\n latestSchematicFileHandleRef.current = file.handle ?? null;\n const content = JSON.parse(await file.text());\n setSchematic(() => content);\n } catch (err) {\n // User aborted\n if (err instanceof DOMException && err.name === \"AbortError\") {\n return;\n }\n\n alert(`Unable to load schematic: ${err?.toString()}`);\n }\n }}\n title=\"Load schematic\"\n aria-label=\"Load schematic\"\n >\n 📂\n </button>\n );\n}\n","import { fileSave, supported } from \"browser-fs-access\";\n\nimport type { Schematic } from \"../Schematic.ts\";\nimport { useSchematicBuilderContext } from \"../SchematicBuilderContext.ts\";\n\nexport function SaveSchematic() {\n const { name, getRootSchematic, latestSchematicFileHandleRef } =\n useSchematicBuilderContext();\n\n return (\n <button\n className=\"builder-icon-button builder-action builder-save-schematic\"\n type=\"button\"\n onClick={async () => {\n try {\n const schematic: Schematic = getRootSchematic();\n latestSchematicFileHandleRef.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 latestSchematicFileHandleRef.current,\n );\n if (supported) {\n alert(\n `Schematic saved successfully as “${latestSchematicFileHandleRef.current?.name ?? \"unknown\"}”.`,\n );\n }\n } catch (err) {\n // User aborted\n if (err instanceof DOMException && err.name === \"AbortError\") {\n return;\n }\n\n alert(`Unable to save schematic: ${err?.toString()}`);\n }\n }}\n title=\"Save schematic\"\n aria-label=\"Save schematic\"\n >\n 💾\n </button>\n );\n}\n","import type { Schematic } from \"../Schematic.ts\";\nimport type { Scaffolder } from \"./scaffold.ts\";\nimport type { ScaffoldingData } from \"./ScaffoldingData.ts\";\n\n/** Returns a new scaffolder with its data merged with the provided data. */\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","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 type { Schematic } from \"../Schematic.ts\";\nimport type { SchematicKind } from \"../SchematicKind.ts\";\nimport { joinPackages } from \"../util/join.ts\";\nimport type { ScaffoldingData } from \"./ScaffoldingData.ts\";\nimport type {\n ScaffoldingFile,\n ScaffoldingFileContent,\n} from \"./ScaffoldingFile.ts\";\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 { useCallback } from \"react\";\n\nimport { useSchematicBuilderContext } from \"../SchematicBuilderContext.ts\";\nimport { configScaffolder } from \"./configScaffolder.ts\";\nimport { scaffold, type ScaffoldedFile } from \"./scaffold.ts\";\n\nexport function useScaffolder(): () => ScaffoldedFile[] {\n const {\n basePath,\n basePackage,\n baseDir,\n schematicKinds,\n scaffolders,\n scaffoldingData,\n getRootSchematic,\n } = useSchematicBuilderContext();\n return useCallback(() => {\n const schematic = getRootSchematic();\n\n let actualScaffolders =\n typeof scaffolders === \"function\" ? scaffolders(schematic) : scaffolders;\n const actualScaffoldingData =\n typeof scaffoldingData === \"function\"\n ? scaffoldingData(schematic)\n : scaffoldingData;\n\n if (actualScaffoldingData) {\n actualScaffolders = actualScaffolders.map((scaffolder) =>\n configScaffolder(scaffolder, actualScaffoldingData),\n );\n }\n\n return scaffold(schematic, actualScaffolders, {\n schematicKinds,\n basePath,\n basePackage,\n baseDir: typeof baseDir === \"function\" ? baseDir(schematic) : baseDir,\n });\n }, [\n baseDir,\n basePackage,\n basePath,\n getRootSchematic,\n scaffolders,\n scaffoldingData,\n schematicKinds,\n ]);\n}\n","import { fileSave, supported } from \"browser-fs-access\";\nimport JSZip from \"jszip\";\n\nimport { useScaffolder } from \"../scaffolding/useScaffolder.ts\";\nimport { useSchematicBuilderContext } from \"../SchematicBuilderContext.ts\";\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 const fileHandle = 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 );\n if (supported) {\n alert(\n `Project scaffolded successfully in “${fileHandle?.name ?? \"unknown\"}”.`,\n );\n }\n } catch (err) {\n // User aborted\n if (err instanceof DOMException && err.name === \"AbortError\") {\n return;\n }\n\n alert(`Unable to scaffold project: ${err?.toString()}`);\n }\n }}\n >\n Scaffold 🏗️\n </button>\n );\n}\n","import { useCallback, useMemo } from \"react\";\n\nimport { useSchematicBuilderContext } from \"../../SchematicBuilderContext.ts\";\n\ntype UseConfigReturnType<T = unknown> = [\n T,\n (configValue: T | ((configValue: T) => T)) => void,\n];\n\nexport function useConfig<T = unknown>(\n configName: string,\n): UseConfigReturnType<T | undefined>;\nexport function useConfig<T = unknown>(\n configName: string,\n defaultValue: T,\n): UseConfigReturnType<T>;\nexport function useConfig<T>(\n configName: string,\n defaultValue?: T,\n): UseConfigReturnType<T> {\n const { useSchematic, setSchematic } = useSchematicBuilderContext();\n const configValue = useSchematic(\n (schematic) => (schematic.config?.[configName] ?? defaultValue) as T,\n );\n const setConfigValue = useCallback(\n (configValue: T | ((configValue: T) => T)) =>\n setSchematic((schematic) => ({\n config: {\n ...schematic.config,\n [configName]:\n typeof configValue === \"function\"\n ? (configValue as any)(schematic.config?.[configName])\n : configValue,\n },\n })),\n [configName, setSchematic],\n );\n\n return useMemo(\n () => [configValue, setConfigValue],\n [configValue, setConfigValue],\n );\n}\n","import { useConfig } from \"./util/useConfig.ts\";\n\nexport interface UseFileBase64SerializerConfigProps {\n disabled?: boolean;\n}\n\nexport function UseFileBase64SerializerConfig({\n disabled,\n}: UseFileBase64SerializerConfigProps) {\n const [config, setConfig] = useConfig(\"useFileBase64Serializer\", false);\n return (\n <div className=\"builder-config-field\">\n <label>\n <input\n type=\"checkbox\"\n checked={config}\n onChange={(evt) => setConfig(evt.target.checked)}\n disabled={disabled}\n />\n Use <code>FileBase64Serializer</code>\n </label>\n </div>\n );\n}\n","import { useConfig } from \"./util/useConfig.ts\";\n\nexport interface UseTableValuesSerializerConfigProps {\n disabled?: boolean;\n}\n\nexport function UseTableValuesSerializerConfig({\n disabled,\n}: UseTableValuesSerializerConfigProps) {\n const [config, setConfig] = useConfig(\"useTableValuesSerializer\", false);\n return (\n <div className=\"builder-config-field\">\n <label>\n <input\n type=\"checkbox\"\n checked={config}\n onChange={(evt) => setConfig(evt.target.checked)}\n disabled={disabled}\n />\n Use <code>TableValuesSerializer</code>\n </label>\n </div>\n );\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 type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport type { ScaffoldingFile } from \"../ScaffoldingFile.ts\";\nimport { isDefaultKtImport } from \"./util/defaultImports.ts\";\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 type { KtData } from \"../KtData.ts\";\nimport { simpleKtName } from \"./simpleKtName.ts\";\n\nconst JS_EXPORT = \"kotlin.js.JsExport\";\nconst SERIALIZABLE = \"kotlinx.serialization.Serializable\";\n\nexport function annotate(\n annotations: string | string[] | undefined,\n code: string,\n): string {\n if (!annotations || annotations.length === 0) {\n return code;\n }\n return [\n ...(typeof annotations === \"string\" ? [annotations] : annotations),\n code,\n ].join(\"\\n\");\n}\n\nexport function jsExport(code: string, data: KtData): string {\n data.currentFile.imports.add(JS_EXPORT);\n return annotate(`@${simpleKtName(JS_EXPORT)}`, code);\n}\n\nexport function serializable(code: string, data: KtData): string {\n data.currentFile.imports.add(SERIALIZABLE);\n return annotate(`@${simpleKtName(SERIALIZABLE)}`, code);\n}\n","import type { Schematic } from \"../../Schematic.ts\";\nimport { joinPackages, joinPaths } from \"../../util/join.ts\";\nimport type { KtData } from \"../kotlin/KtData.ts\";\nimport { type KtFile, ktFile } from \"../kotlin/KtFile.ts\";\nimport { jsExport, serializable } from \"../kotlin/util/annotations.ts\";\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\n\nexport function scaffoldModels(\n schematic: Schematic,\n data: ScaffoldingData,\n): void {\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): void {\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 scaffoldPropertyAnnotations(\n schematic: Schematic,\n data: KtData,\n): string | string[] | undefined {\n const schematicKind = data.schematicKinds.get(schematic.kind);\n if (!schematicKind) {\n throw new Error(`Unknown schematic kind: '${schematic.kind}'.`);\n }\n\n return typeof schematicKind.propertyAnnotations === \"function\"\n ? schematicKind.propertyAnnotations(schematic, data)\n : schematicKind.propertyAnnotations;\n}\n\nexport function scaffoldType(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 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","// Regexps involved with splitting words in various case formats.\nconst SPLIT_LOWER_UPPER_RE = /([\\p{Ll}\\d])(\\p{Lu})/gu;\nconst SPLIT_UPPER_UPPER_RE = /(\\p{Lu})([\\p{Lu}][\\p{Ll}])/gu;\n// Used to iterate over the initial split result and separate numbers.\nconst SPLIT_SEPARATE_NUMBER_RE = /(\\d)\\p{Ll}|(\\p{L})\\d/u;\n// Regexp involved with stripping non-word characters from the result.\nconst DEFAULT_STRIP_REGEXP = /[^\\p{L}\\d]+/giu;\n// The replacement value for splits.\nconst SPLIT_REPLACE_VALUE = \"$1\\0$2\";\n// The default characters to keep after transforming case.\nconst DEFAULT_PREFIX_SUFFIX_CHARACTERS = \"\";\n/**\n * Split any cased input strings into an array of words.\n */\nexport function split(value) {\n let result = value.trim();\n result = result\n .replace(SPLIT_LOWER_UPPER_RE, SPLIT_REPLACE_VALUE)\n .replace(SPLIT_UPPER_UPPER_RE, SPLIT_REPLACE_VALUE);\n result = result.replace(DEFAULT_STRIP_REGEXP, \"\\0\");\n let start = 0;\n let end = result.length;\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\")\n start++;\n if (start === end)\n return [];\n while (result.charAt(end - 1) === \"\\0\")\n end--;\n return result.slice(start, end).split(/\\0/g);\n}\n/**\n * Split the input string into an array of words, separating numbers.\n */\nexport function splitSeparateNumbers(value) {\n const words = split(value);\n for (let i = 0; i < words.length; i++) {\n const word = words[i];\n const match = SPLIT_SEPARATE_NUMBER_RE.exec(word);\n if (match) {\n const offset = match.index + (match[1] ?? match[2]).length;\n words.splice(i, 1, word.slice(0, offset), word.slice(offset));\n }\n }\n return words;\n}\n/**\n * Convert a string to space separated lower case (`foo bar`).\n */\nexport function noCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n return (prefix +\n words.map(lowerFactory(options?.locale)).join(options?.delimiter ?? \" \") +\n suffix);\n}\n/**\n * Convert a string to camel case (`fooBar`).\n */\nexport function camelCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return (prefix +\n words\n .map((word, index) => {\n if (index === 0)\n return lower(word);\n return transform(word, index);\n })\n .join(options?.delimiter ?? \"\") +\n suffix);\n}\n/**\n * Convert a string to pascal case (`FooBar`).\n */\nexport function pascalCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return prefix + words.map(transform).join(options?.delimiter ?? \"\") + suffix;\n}\n/**\n * Convert a string to pascal snake case (`Foo_Bar`).\n */\nexport function pascalSnakeCase(input, options) {\n return capitalCase(input, { delimiter: \"_\", ...options });\n}\n/**\n * Convert a string to capital case (`Foo Bar`).\n */\nexport function capitalCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n return (prefix +\n words\n .map(capitalCaseTransformFactory(lower, upper))\n .join(options?.delimiter ?? \" \") +\n suffix);\n}\n/**\n * Convert a string to constant case (`FOO_BAR`).\n */\nexport function constantCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n return (prefix +\n words.map(upperFactory(options?.locale)).join(options?.delimiter ?? \"_\") +\n suffix);\n}\n/**\n * Convert a string to dot case (`foo.bar`).\n */\nexport function dotCase(input, options) {\n return noCase(input, { delimiter: \".\", ...options });\n}\n/**\n * Convert a string to kebab case (`foo-bar`).\n */\nexport function kebabCase(input, options) {\n return noCase(input, { delimiter: \"-\", ...options });\n}\n/**\n * Convert a string to path case (`foo/bar`).\n */\nexport function pathCase(input, options) {\n return noCase(input, { delimiter: \"/\", ...options });\n}\n/**\n * Convert a string to path case (`Foo bar`).\n */\nexport function sentenceCase(input, options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = capitalCaseTransformFactory(lower, upper);\n return (prefix +\n words\n .map((word, index) => {\n if (index === 0)\n return transform(word);\n return lower(word);\n })\n .join(options?.delimiter ?? \" \") +\n suffix);\n}\n/**\n * Convert a string to snake case (`foo_bar`).\n */\nexport function snakeCase(input, options) {\n return noCase(input, { delimiter: \"_\", ...options });\n}\n/**\n * Convert a string to header case (`Foo-Bar`).\n */\nexport function trainCase(input, options) {\n return capitalCase(input, { delimiter: \"-\", ...options });\n}\nfunction lowerFactory(locale) {\n return locale === false\n ? (input) => input.toLowerCase()\n : (input) => input.toLocaleLowerCase(locale);\n}\nfunction upperFactory(locale) {\n return locale === false\n ? (input) => input.toUpperCase()\n : (input) => input.toLocaleUpperCase(locale);\n}\nfunction capitalCaseTransformFactory(lower, upper) {\n return (word) => `${upper(word[0])}${lower(word.slice(1))}`;\n}\nfunction pascalCaseTransformFactory(lower, upper) {\n return (word, index) => {\n const char0 = word[0];\n const initial = index > 0 && char0 >= \"0\" && char0 <= \"9\" ? \"_\" + char0 : upper(char0);\n return initial + lower(word.slice(1));\n };\n}\nfunction splitPrefixSuffix(input, options = {}) {\n const splitFn = options.split ?? (options.separateNumbers ? splitSeparateNumbers : split);\n const prefixCharacters = options.prefixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n const suffixCharacters = options.suffixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n let prefixIndex = 0;\n let suffixIndex = input.length;\n while (prefixIndex < input.length) {\n const char = input.charAt(prefixIndex);\n if (!prefixCharacters.includes(char))\n break;\n prefixIndex++;\n }\n while (suffixIndex > prefixIndex) {\n const index = suffixIndex - 1;\n const char = input.charAt(index);\n if (!suffixCharacters.includes(char))\n break;\n suffixIndex = index;\n }\n return [\n input.slice(0, prefixIndex),\n splitFn(input.slice(prefixIndex, suffixIndex)),\n input.slice(suffixIndex),\n ];\n}\n//# sourceMappingURL=index.js.map","/** Value for a data attribute given a condition. */\nexport function boolDataAttr(\n condition: boolean | null | undefined,\n): string | undefined {\n return condition ? \"\" : undefined;\n}\n","import type { KeyboardEvent, PointerEvent } from \"react\";\n\n/** Properties used to prevent an element from being dragged. */\nexport const preventDrag = {\n onKeyDown: (evt: KeyboardEvent) => evt.stopPropagation(),\n onPointerDown: (evt: PointerEvent) => evt.stopPropagation(),\n};\n","import { useSchematicBuilderContext } from \"../../SchematicBuilderContext.ts\";\nimport { preventDrag } from \"../../util/preventDrag.ts\";\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.ts\";\nimport { preventDrag } from \"../../util/preventDrag.ts\";\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.ts\";\nimport { preventDrag } from \"../../util/preventDrag.ts\";\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.ts\";\nimport { preventDrag } from \"../../util/preventDrag.ts\";\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 { useRef } from \"react\";\n\nimport { useSchematicBuilderContext } from \"../../SchematicBuilderContext.ts\";\nimport { preventDrag } from \"../../util/preventDrag.ts\";\n\nconst PACKAGE_PLACEHOLDER = \"package.suffix\";\nconst NAME_PLACEHOLDER = \"ClassName\";\n\nexport function PackageNameInput() {\n const { useSchematic, setSchematic, parentPackage } =\n useSchematicBuilderContext();\n const pkgRef = 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, type Schematic } from \"../Schematic.ts\";\nimport {\n SchematicBuilderContext,\n useSchematicBuilderContext,\n} from \"../SchematicBuilderContext.ts\";\nimport { boolDataAttr } from \"../util/boolDataAttr.ts\";\nimport { joinPackages } from \"../util/join.ts\";\nimport { preventDrag } from \"../util/preventDrag.ts\";\nimport { ChildMarker } from \"./util/ChildMarker.tsx\";\nimport { ChildRemove } from \"./util/ChildRemove.tsx\";\nimport { KindSelect } from \"./util/KindSelect.tsx\";\nimport { NullableInput } from \"./util/NullableInput.tsx\";\nimport { PackageNameInput } from \"./util/PackageNameInput.tsx\";\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\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 ===\n (fields[i - 1]?.id as string | undefined),\n }}\n >\n <ClassFieldBuilder />\n </SchematicBuilderContext>\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\n value={{ ...schematicBuilderContext, parentChildName: childName }}\n >\n <KindSelect />\n </SchematicBuilderContext>\n <NullableInput />\n <ChildRemove />\n </div>\n\n {Builder && !collapsed && (\n <SchematicBuilderContext\n value={{\n ...schematicBuilderContext,\n parentChildName: childName,\n disableDrop: disableDrop || isDragging,\n }}\n >\n <Builder />\n </SchematicBuilderContext>\n )}\n </li>\n </>\n );\n}\n","import { useDraggable, useDroppable } from \"@dnd-kit/core\";\n\nimport { createSchematic, type Schematic } from \"../Schematic.ts\";\nimport {\n SchematicBuilderContext,\n useSchematicBuilderContext,\n} from \"../SchematicBuilderContext.ts\";\nimport { boolDataAttr } from \"../util/boolDataAttr.ts\";\nimport { preventDrag } from \"../util/preventDrag.ts\";\nimport { ChildMarker } from \"./util/ChildMarker.tsx\";\nimport { ChildRemove } from \"./util/ChildRemove.tsx\";\nimport { PackageNameInput } from \"./util/PackageNameInput.tsx\";\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\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 ===\n (fields[i - 1]?.id as string | undefined),\n }}\n >\n <EnumEntryBuilder />\n </SchematicBuilderContext>\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.ts\";\nimport { KindSelect } from \"./util/KindSelect.tsx\";\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\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>\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/** Tag function used to aid in the construction of code blocks. */\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 type { ComponentType } from \"react\";\n\nimport type { KtData } from \"./scaffolding/kotlin/KtData.ts\";\nimport { annotate } from \"./scaffolding/kotlin/util/annotations.ts\";\nimport {\n scaffoldDefaultValue,\n scaffoldPropertyAnnotations,\n scaffoldType,\n} from \"./scaffolding/scaffolders/scaffoldModels.ts\";\nimport { scaffoldSchema } from \"./scaffolding/scaffolders/scaffoldSchemas.ts\";\nimport { createSchematic, type Schematic } from \"./Schematic.ts\";\nimport { ClassBuilder } from \"./schematicBuilders/ClassBuilder.tsx\";\nimport { EnumBuilder } from \"./schematicBuilders/EnumBuilder.tsx\";\nimport { ListableBuilder } from \"./schematicBuilders/ListableBuilder.tsx\";\nimport { code } from \"./util/code.ts\";\nimport { joinPaths } from \"./util/join.ts\";\n\nexport const NULLABLE_SCHEMA = \"tech.ostack.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 propertyAnnotations?:\n | string\n | string[]\n | ((schematic: Schematic, data: KtData) => string | string[] | undefined);\n builder?: ComponentType;\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: \"tech.ostack.kform.schemas.AnySchema\",\n nullable: false,\n defaultValue: \"null\",\n scaffoldType: () => \"Any?\",\n};\nexport const bigDecimalSchematicKind: SchematicKind = {\n kind: \"BigDecimal\",\n package: \"tech.ostack.kform.datatypes\",\n name: \"BigDecimal\",\n schema: \"tech.ostack.kform.schemas.BigDecimalSchema\",\n defaultNullable: true,\n defaultValue: \"BigDecimal.ZERO\",\n};\nexport const bigIntegerSchematicKind: SchematicKind = {\n kind: \"BigInteger\",\n package: \"tech.ostack.kform.datatypes\",\n name: \"BigInteger\",\n schema: \"tech.ostack.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: \"tech.ostack.kform.schemas.BooleanSchema\",\n defaultValue: \"false\",\n};\nexport const byteSchematicKind: SchematicKind = {\n kind: \"Byte\",\n package: \"kotlin\",\n name: \"Byte\",\n schema: \"tech.ostack.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: \"tech.ostack.kform.schemas.CharSchema\",\n defaultNullable: true,\n defaultValue: \"0.toChar()\",\n};\nexport const classSchematicKind: SchematicKind = {\n kind: \"Class\",\n schema: \"tech.ostack.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((childSchematic) => {\n const childData = {\n ...data,\n currentPath: joinPaths(\n data.currentPath,\n childSchematic.childName,\n ),\n };\n\n return annotate(\n scaffoldPropertyAnnotations(childSchematic, childData),\n `var ${childSchematic.childName}: ${scaffoldType(\n childSchematic,\n childData,\n )} = ${scaffoldDefaultValue(childSchematic, childData)}`,\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: \"tech.ostack.kform.schemas.DoubleSchema\",\n defaultNullable: true,\n defaultValue: \"0.0\",\n};\nexport const enumSchematicKind: SchematicKind = {\n kind: \"Enum\",\n schema: \"tech.ostack.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: \"tech.ostack.kform.datatypes\",\n name: \"File\",\n schema: \"tech.ostack.kform.schemas.FileSchema\",\n defaultNullable: true,\n defaultValue: (_schematic, data) => {\n data.currentFile.imports.add(\n \"tech.ostack.kform.datatypes.emptyPlaceholderFile\",\n );\n return \"emptyPlaceholderFile()\";\n },\n propertyAnnotations: (_schematic, data) => {\n if (data.useFileBase64Serializer) {\n data.currentFile.imports.add(\n \"tech.ostack.kform.serializers.FileBase64Serializer\",\n );\n return \"@Serializable(with = FileBase64Serializer::class)\";\n }\n },\n};\nexport const floatSchematicKind: SchematicKind = {\n kind: \"Float\",\n package: \"kotlin\",\n name: \"Float\",\n schema: \"tech.ostack.kform.schemas.FloatSchema\",\n defaultNullable: true,\n defaultValue: \"0f\",\n};\nexport const instantSchematicKind: SchematicKind = {\n kind: \"Instant\",\n package: \"kotlin.time\",\n name: \"Instant\",\n schema: \"tech.ostack.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: \"tech.ostack.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: \"tech.ostack.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: \"tech.ostack.kform.schemas.LocalDateSchema\",\n defaultNullable: true,\n defaultValue: \"LocalDate(1970, 1, 1)\",\n};\nexport const localDateTimeSchematicKind: SchematicKind = {\n kind: \"LocalDateTime\",\n package: \"kotlinx.datetime\",\n name: \"LocalDateTime\",\n schema: \"tech.ostack.kform.schemas.LocalDateTimeSchema\",\n defaultNullable: true,\n defaultValue: \"LocalDateTime(1970, 1, 1, 0, 0)\",\n};\nexport const longSchematicKind: SchematicKind = {\n kind: \"Long\",\n package: \"kotlin\",\n name: \"Long\",\n schema: \"tech.ostack.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: \"tech.ostack.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: \"tech.ostack.kform.schemas.StringSchema\",\n defaultValue: '\"\"',\n};\nexport const tableSchematicKind: SchematicKind = {\n kind: \"Table\",\n package: \"tech.ostack.kform.datatypes\",\n name: \"Table\",\n schema: \"tech.ostack.kform.schemas.TableSchema\",\n defaultValue: (_schematic, data) => {\n data.currentFile.imports.add(\"tech.ostack.kform.datatypes.tableOf\");\n return \"tableOf()\";\n },\n builder: ListableBuilder,\n initChildren: () => [createSchematic()],\n propertyAnnotations: (_schematic, data) => {\n if (data.useTableValuesSerializer) {\n data.currentFile.imports.add(\n \"tech.ostack.kform.serializers.TableValuesSerializer\",\n );\n return \"@Serializable(with = TableValuesSerializer::class)\";\n }\n },\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 type { Schematic } from \"../../Schematic.ts\";\nimport { NULLABLE_SCHEMA } from \"../../SchematicKind.ts\";\nimport { joinPackages, joinPaths } from \"../../util/join.ts\";\nimport type { KtData } from \"../kotlin/KtData.ts\";\nimport { type KtFile, ktFile } from \"../kotlin/KtFile.ts\";\nimport { jsExport } from \"../kotlin/util/annotations.ts\";\nimport { simpleKtName } from \"../kotlin/util/simpleKtName.ts\";\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\n\nexport function scaffoldSchemas(\n schematic: Schematic,\n data: ScaffoldingData,\n): void {\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): void {\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","import { type Options, render } from \"ejs\";\n\nimport type { TemplateFile, TemplateFileOptions } from \"./TemplateFile.ts\";\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 };\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.ts\";\nimport type { ScaffoldingData } from \"../../ScaffoldingData.ts\";\nimport {\n ejsTemplateFile,\n type EjsTemplateFileOptions,\n} from \"../EjsTemplateFile.ts\";\n\nexport function addEjsTemplateFile(\n data: ScaffoldingData,\n fileName: string,\n content: string,\n ejsData?: Record<string, any>,\n options?: EjsTemplateFileOptions,\n): void {\n data.files.set(\n joinPaths(data.currentDir, fileName),\n ejsTemplateFile(content, ejsData, options),\n );\n}\n","import { camelCase } from \"change-case\";\n\nimport type { Schematic } from \"../../Schematic.ts\";\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport serializerKt from \"../templates/Serializer.kt.ejs?raw\";\nimport { addEjsTemplateFile } from \"../templating/util/addEjsTemplateFile.ts\";\n\nexport function scaffoldSerializer(\n schematic: Schematic,\n data: ScaffoldingData,\n): void {\n addEjsTemplateFile(data, `${schematic.name}Serializer.kt`, serializerKt, {\n filePackage: data.currentPackage,\n formVar: camelCase(schematic.name!),\n formClass: schematic.name,\n });\n}\n","import { camelCase } from \"change-case\";\n\nimport type { Schematic } from \"../../Schematic.ts\";\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport validatorKt from \"../templates/Validator.kt.ejs?raw\";\nimport { addEjsTemplateFile } from \"../templating/util/addEjsTemplateFile.ts\";\n\nexport function scaffoldValidator(\n schematic: Schematic,\n data: ScaffoldingData,\n): void {\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 { useEffect, useLayoutEffect } from \"react\";\n\n/** `useLayoutEffect` hook which runs `useEffect` on the server. */\nexport const useSafeLayoutEffect =\n typeof document !== \"undefined\" ? useLayoutEffect : useEffect;\n","import { useSafeLayoutEffect } from \"./useSafeLayoutEffect.ts\";\n\n/**\n * Hook that tracks the dimensions of an HTML element using the Resize Observer\n * API + window resize.\n */\nexport function useMeasure<T extends Element = Element>(\n element: T | null,\n setMeasurement: (measurement: DOMRectReadOnly | undefined) => void,\n) {\n useSafeLayoutEffect(() => {\n if (!element) {\n setMeasurement(undefined);\n return;\n }\n\n const cb = () => setMeasurement(element.getBoundingClientRect());\n cb();\n\n const observer = new ResizeObserver(([entry]) => entry && cb());\n observer.observe(element);\n window.addEventListener(\"resize\", cb);\n\n return () => {\n observer.disconnect();\n window.removeEventListener(\"resize\", cb);\n setMeasurement(undefined);\n };\n }, [element, setMeasurement]);\n}\n","import { type ReactNode, useState } from \"react\";\n\nimport { useMeasure } from \"./util/useMeasure.ts\";\n\nexport interface SchematicBuilderConfigProps {\n children?: ReactNode;\n}\n\nexport function SchematicBuilderConfig({\n children,\n}: SchematicBuilderConfigProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);\n const [popoverEl, setPopoverEl] = useState<HTMLDivElement | null>(null);\n useMeasure(anchorEl, (measurement) => {\n if (popoverEl && measurement) {\n popoverEl.style.setProperty(\"--anchor-top\", `${measurement.top}px`);\n popoverEl.style.setProperty(\"--anchor-left\", `${measurement.left}px`);\n popoverEl.style.setProperty(\"--anchor-bottom\", `${measurement.bottom}px`);\n popoverEl.style.setProperty(\"--anchor-right\", `${measurement.right}px`);\n popoverEl.style.setProperty(\"--anchor-width\", `${measurement.width}px`);\n popoverEl.style.setProperty(\"--anchor-height\", `${measurement.height}px`);\n }\n });\n useMeasure(popoverEl, (measurement) => {\n if (popoverEl && measurement) {\n popoverEl.style.setProperty(\"--width\", `${measurement.width}px`);\n popoverEl.style.setProperty(\"--height\", `${measurement.height}px`);\n }\n });\n\n return (\n <>\n <button\n type=\"button\"\n className=\"builder-icon-button builder-action builder-config-schematic\"\n popoverTarget=\"builder-config-popover\"\n title=\"Config\"\n aria-label=\"Config\"\n ref={setAnchorEl}\n >\n ⚙️\n </button>\n <div popover=\"\" id=\"builder-config-popover\" ref={setPopoverEl}>\n {children}\n </div>\n </>\n );\n}\n","import {\n closestCenter,\n DndContext,\n DragOverlay,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport { type ReactNode, useMemo, useRef, useState } from \"react\";\nimport { create } from \"zustand\";\nimport { persist } from \"zustand/middleware\";\n\nimport { LoadSchematic } from \"./actions/LoadSchematic.tsx\";\nimport { SaveSchematic } from \"./actions/SaveSchematic.tsx\";\nimport { ScaffoldToZip } from \"./actions/ScaffoldToZip.tsx\";\nimport { UseFileBase64SerializerConfig } from \"./configs/UseFileBase64SerializerConfig.tsx\";\nimport { UseTableValuesSerializerConfig } from \"./configs/UseTableValuesSerializerConfig.tsx\";\nimport { configScaffolder } from \"./scaffolding/configScaffolder.ts\";\nimport type { KtData } from \"./scaffolding/kotlin/KtData.ts\";\nimport type { Scaffolder } from \"./scaffolding/scaffold.ts\";\nimport { scaffoldModels } from \"./scaffolding/scaffolders/scaffoldModels.ts\";\nimport { scaffoldSchemas } from \"./scaffolding/scaffolders/scaffoldSchemas.ts\";\nimport { scaffoldSerializer } from \"./scaffolding/scaffolders/scaffoldSerializer.ts\";\nimport { scaffoldValidator } from \"./scaffolding/scaffolders/scaffoldValidator.ts\";\nimport { createSchematic, moveSchematic, type Schematic } from \"./Schematic.ts\";\nimport { SchematicBuilderConfig } from \"./SchematicBuilderConfig.tsx\";\nimport {\n type DraggedSchematic,\n SchematicBuilderContext,\n} from \"./SchematicBuilderContext.ts\";\nimport { ClassBuilder } from \"./schematicBuilders/ClassBuilder.tsx\";\nimport {\n classSchematicKind,\n defaultSchematicKinds,\n type SchematicKind,\n} from \"./SchematicKind.ts\";\n\nexport interface SchematicBuilderProps {\n name?: string;\n title?: 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>[] | ((schematic: Schematic) => Scaffolder<any>[]);\n scaffoldingData?:\n Record<string, any> | ((schematic: Schematic) => Record<string, any>);\n actions?: ReactNode;\n configs?: ReactNode;\n version?: ReactNode;\n}\n\nconst kotlinMainData: Partial<KtData> = {\n currentDir: \"shared/src/commonMain/kotlin\",\n};\nconst kotlinTestData: Partial<KtData> = {\n currentDir: \"shared/src/commonTest/kotlin\",\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, kotlinMainData),\n configScaffolder(scaffoldModels, kotlinMainData),\n configScaffolder(scaffoldSerializer, kotlinMainData),\n configScaffolder(scaffoldValidator, kotlinTestData),\n ],\n scaffoldingData = (schematic) => schematic.config,\n actions = (\n <>\n <LoadSchematic />\n <SaveSchematic />\n <ScaffoldToZip />\n </>\n ),\n configs = (\n <>\n <UseFileBase64SerializerConfig />\n <UseTableValuesSerializerConfig />\n </>\n ),\n version = import.meta.env.VITE_APP_VERSION,\n}: SchematicBuilderProps) {\n const [useSchematic] = 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 = 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 latestSchematicFileHandleRef = useRef<FileSystemFileHandle | null>(\n null,\n );\n\n const [draggedSchematic, setDraggedSchematic] =\n 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\n value={{\n name,\n basePath,\n basePackage,\n baseDir,\n schematicKinds: schematicKindsMap,\n scaffolders,\n scaffoldingData,\n getRootSchematic: useSchematic.getState,\n useSchematic,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n setSchematic: useSchematic.setState,\n removeSchematic: () => {},\n parentPackage: basePackage,\n draggedSchematic,\n latestSchematicFileHandleRef,\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 {version && <div className=\"builder-version\">{version}</div>}\n <div className=\"builder-actions\">\n {configs && (\n <SchematicBuilderConfig>{configs}</SchematicBuilderConfig>\n )}\n {actions}\n </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>\n );\n}\n","import type {\n ScaffoldingFile,\n ScaffoldingFileContent,\n} from \"../ScaffoldingFile.ts\";\n\nexport interface TemplateFile extends ScaffoldingFile {\n content: ScaffoldingFileContent | Promise<ScaffoldingFileContent>;\n}\n\nexport type TemplateFileOptions = Omit<ScaffoldingFile, \"getContent\">;\n\nexport function templateFile(\n content: ScaffoldingFileContent | Promise<ScaffoldingFileContent>,\n options?: TemplateFileOptions,\n): TemplateFile {\n return { ...options, content, getContent: templateFileContent };\n}\n\nfunction templateFileContent(\n this: TemplateFile,\n): ScaffoldingFileContent | Promise<ScaffoldingFileContent> {\n return this.content;\n}\n","import { joinPaths } from \"../../../util/join.ts\";\nimport type { ScaffoldingData } from \"../../ScaffoldingData.ts\";\nimport type { ScaffoldingFileContent } from \"../../ScaffoldingFile.ts\";\nimport { templateFile, type TemplateFileOptions } from \"../TemplateFile.ts\";\n\nexport function addTemplateFile(\n data: ScaffoldingData,\n fileName: string,\n content: ScaffoldingFileContent | Promise<ScaffoldingFileContent>,\n options?: TemplateFileOptions,\n): void {\n data.files.set(\n joinPaths(data.currentDir, fileName),\n templateFile(content, options),\n );\n}\n","import type { ScaffoldingFile } from \"../ScaffoldingFile.ts\";\nimport type { TsImport } from \"./TsImport.ts\";\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 = [\n ...new Set([\n ...(importStatement.namedImports ?? []),\n ...(importStatement.typedImports ?? []),\n ]),\n ].sort((i1, i2) => i1.localeCompare(i2));\n const allNamedImportsAreTyped = namedImportsArr.every(\n (i) => !importStatement.namedImports?.has(i),\n );\n const namedImports =\n namedImportsArr.length > 0\n ? allNamedImportsAreTyped\n ? `type { ${namedImportsArr.join(\", \")} }`\n : `{ ${namedImportsArr\n .map((i) =>\n importStatement.namedImports?.has(i) ? i : `type ${i}`,\n )\n .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, namedImports]\n .filter((s) => s)\n .join(\", \");\n const moduleName = JSON.stringify(importStatement.moduleName);\n\n return allImports\n ? `import ${allImports} from ${moduleName};`\n : `import ${moduleName};`;\n}\n"],"x_google_ignoreList":[17],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -170,4 +170,4 @@ suspend fun assert<%= formClass %>NotContainsWarning(
|
|
|
170
170
|
LocatedValidationWarning(path, code),
|
|
171
171
|
validate<%= formClass %>(<%= formVar %>, path, externalContexts),
|
|
172
172
|
)
|
|
173
|
-
`;function ya(e,t){ga(t,`${e.name}Validator.kt`,va,{filePackage:t.currentPackage,formVar:Jr(e.name),formClass:e.name})}var ba=typeof document<`u`?C.useLayoutEffect:C.useEffect;function xa(e,t){ba(()=>{if(!e){t(void 0);return}let n=()=>t(e.getBoundingClientRect());n();let r=new ResizeObserver(([e])=>e&&n());return r.observe(e),window.addEventListener(`resize`,n),()=>{r.disconnect(),window.removeEventListener(`resize`,n),t(void 0)}},[e,t])}function Sa({children:e}){let[t,n]=(0,C.useState)(null),[r,i]=(0,C.useState)(null);return xa(t,e=>{r&&e&&(r.style.setProperty(`--anchor-top`,`${e.top}px`),r.style.setProperty(`--anchor-left`,`${e.left}px`),r.style.setProperty(`--anchor-bottom`,`${e.bottom}px`),r.style.setProperty(`--anchor-right`,`${e.right}px`),r.style.setProperty(`--anchor-width`,`${e.width}px`),r.style.setProperty(`--anchor-height`,`${e.height}px`))}),xa(r,e=>{r&&e&&(r.style.setProperty(`--width`,`${e.width}px`),r.style.setProperty(`--height`,`${e.height}px`))}),(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`button`,{type:`button`,className:`builder-icon-button builder-action builder-config-schematic`,popoverTarget:`builder-config-popover`,title:`Config`,"aria-label":`Config`,ref:n,children:`⚙️`}),(0,W.jsx)(`div`,{popover:``,id:`builder-config-popover`,ref:i,children:e})]})}var Ca={currentDir:`shared/src/commonMain/kotlin`},wa={currentDir:`shared/src/commonTest/kotlin`};function Ta({name:e=`kform`,title:t=document.title,basePath:n,basePackage:r,baseDir:i,defaultRootClassPackage:a=`org.example`,defaultRootClassName:o=`MyForm`,schematicKinds:s=Vi,scaffolders:c=[hr(Hi,Ca),hr(Fr,Ca),hr(_a,Ca),hr(ya,wa)],scaffoldingData:l=e=>e.config,actions:u=(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(fr,{}),(0,W.jsx)(pr,{}),(0,W.jsx)(xr,{})]}),configs:d=(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Cr,{}),(0,W.jsx)(wr,{})]}),version:f=`0.
|
|
173
|
+
`;function ya(e,t){ga(t,`${e.name}Validator.kt`,va,{filePackage:t.currentPackage,formVar:Jr(e.name),formClass:e.name})}var ba=typeof document<`u`?C.useLayoutEffect:C.useEffect;function xa(e,t){ba(()=>{if(!e){t(void 0);return}let n=()=>t(e.getBoundingClientRect());n();let r=new ResizeObserver(([e])=>e&&n());return r.observe(e),window.addEventListener(`resize`,n),()=>{r.disconnect(),window.removeEventListener(`resize`,n),t(void 0)}},[e,t])}function Sa({children:e}){let[t,n]=(0,C.useState)(null),[r,i]=(0,C.useState)(null);return xa(t,e=>{r&&e&&(r.style.setProperty(`--anchor-top`,`${e.top}px`),r.style.setProperty(`--anchor-left`,`${e.left}px`),r.style.setProperty(`--anchor-bottom`,`${e.bottom}px`),r.style.setProperty(`--anchor-right`,`${e.right}px`),r.style.setProperty(`--anchor-width`,`${e.width}px`),r.style.setProperty(`--anchor-height`,`${e.height}px`))}),xa(r,e=>{r&&e&&(r.style.setProperty(`--width`,`${e.width}px`),r.style.setProperty(`--height`,`${e.height}px`))}),(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`button`,{type:`button`,className:`builder-icon-button builder-action builder-config-schematic`,popoverTarget:`builder-config-popover`,title:`Config`,"aria-label":`Config`,ref:n,children:`⚙️`}),(0,W.jsx)(`div`,{popover:``,id:`builder-config-popover`,ref:i,children:e})]})}var Ca={currentDir:`shared/src/commonMain/kotlin`},wa={currentDir:`shared/src/commonTest/kotlin`};function Ta({name:e=`kform`,title:t=document.title,basePath:n,basePackage:r,baseDir:i,defaultRootClassPackage:a=`org.example`,defaultRootClassName:o=`MyForm`,schematicKinds:s=Vi,scaffolders:c=[hr(Hi,Ca),hr(Fr,Ca),hr(_a,Ca),hr(ya,wa)],scaffoldingData:l=e=>e.config,actions:u=(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(fr,{}),(0,W.jsx)(pr,{}),(0,W.jsx)(xr,{})]}),configs:d=(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Cr,{}),(0,W.jsx)(wr,{})]}),version:f=`1.0.0-SNAPSHOT`}){let[p]=(0,C.useState)(()=>Gn(Jn(()=>ti({kind:Bi.kind,packageSuffix:a,name:o,children:[]}),{name:e}))),m=(0,C.useMemo)(()=>new Map(s.sort((e,t)=>e.kind.localeCompare(t.kind)).map(e=>[e.kind,e])),[s]),h=(0,C.useRef)(null),[g,_]=(0,C.useState)(null),v=xe(be(xt,{activationConstraint:{distance:10,delay:400,tolerance:20}}),be(gt));return(0,W.jsx)(lr,{value:{name:e,basePath:n,basePackage:r,baseDir:i,schematicKinds:m,scaffolders:c,scaffoldingData:l,getRootSchematic:p.getState,useSchematic:p,setSchematic:p.setState,removeSchematic:()=>{},parentPackage:r,draggedSchematic:g,latestSchematicFileHandleRef:h},children:(0,W.jsxs)(yn,{sensors:v,collisionDetection:ke,onDragStart:e=>_({id:e.active.id,...e.active.data.current}),onDragEnd:e=>{let{parentId:t,sortBefore:n,ignored:r}=e.over?.data.current??{};r||p.setState(r=>ni(r,e.active.id,t,n)),_(null)},children:[(0,W.jsxs)(`form`,{className:`builder-root`,children:[(0,W.jsxs)(`header`,{className:`builder-header`,children:[(0,W.jsx)(`h1`,{className:`builder-title`,children:t}),f&&(0,W.jsx)(`div`,{className:`builder-version`,children:f}),(0,W.jsxs)(`div`,{className:`builder-actions`,children:[d&&(0,W.jsx)(Sa,{children:d}),u]})]}),(0,W.jsx)(gi,{})]}),(0,W.jsx)(zn,{children:g&&(0,W.jsx)(`div`,{className:`builder-dragged`,children:g.node})})]})})}(0,S.createRoot)(document.getElementById(`root`)).render((0,W.jsx)(C.StrictMode,{children:(0,W.jsx)(Ta,{})}));
|
package/webapp/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<meta name="color-scheme" content="light dark" />
|
|
7
7
|
<title>Form Scaffolder—ostack/KForm</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-BzkesVN7.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="/assets/index-BKUWl2po.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|