@ostack.tech/ui-kform-scaffolder 0.15.0 → 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ostack-ui-kform-scaffolder.js +876 -1389
- package/dist/ostack-ui-kform-scaffolder.js.map +1 -1
- package/dist/types/SchematicBuilder.d.ts +3 -3
- package/dist/types/SchematicKind.d.ts +3 -3
- package/dist/types/configs/DefaultLocaleConfig.d.ts +1 -1
- package/dist/types/configs/SerializationFormatConfig.d.ts +1 -1
- package/dist/types/configs/UseTableValuesSerializerConfig.d.ts +1 -1
- package/dist/types/index.d.ts +24 -24
- package/dist/types/main.d.ts +1 -0
- package/dist/types/scaffolding/ScaffoldingData.d.ts +2 -2
- package/dist/types/scaffolding/kotlin/KtData.d.ts +2 -2
- package/dist/types/scaffolding/reactApp/ReactAppData.d.ts +2 -2
- package/dist/types/scaffolding/reactApp/util/reactAppLayout.d.ts +2 -2
- package/dist/types/scaffolding/scaffolders/scaffoldActions.d.ts +2 -2
- package/dist/types/scaffolding/scaffolders/scaffoldApi.d.ts +2 -2
- package/dist/types/scaffolding/scaffolders/scaffoldAppComponent.d.ts +2 -2
- package/dist/types/scaffolding/scaffolders/scaffoldAppContext.d.ts +2 -2
- package/dist/types/scaffolding/scaffolders/scaffoldExternalContexts.d.ts +2 -2
- package/dist/types/scaffolding/scaffolders/scaffoldGradleProject.d.ts +2 -2
- package/dist/types/scaffolding/scaffolders/scaffoldGradleWrapper.d.ts +2 -2
- package/dist/types/scaffolding/scaffolders/scaffoldIssueMessages.d.ts +2 -2
- package/dist/types/scaffolding/scaffolders/scaffoldMain.d.ts +2 -2
- package/dist/types/scaffolding/scaffolders/scaffoldPageComponents.d.ts +2 -2
- package/dist/types/scaffolding/scaffolders/scaffoldProjectMisc.d.ts +2 -2
- package/dist/types/scaffolding/scaffolders/scaffoldResponses.d.ts +2 -2
- package/dist/types/scaffolding/scaffolders/scaffoldSerializer.d.ts +2 -2
- package/dist/types/scaffolding/scaffolders/scaffoldStyles.d.ts +2 -2
- package/dist/types/scaffolding/scaffolders/scaffoldViteProject.d.ts +2 -2
- package/dist/webapp/assets/gradle-wrapper-BruD2auj.jar +0 -0
- package/dist/webapp/assets/index-BKUWl2po.css +1 -0
- package/dist/webapp/assets/index-CZhbP43P.js +1526 -0
- package/dist/webapp/index.html +2 -2
- package/package.json +3 -3
- package/dist/webapp/assets/index-DFHwLN8U.js +0 -1529
- package/dist/webapp/assets/index-x_B5n20N.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ostack-ui-kform-scaffolder.js","sources":["../src/configs/DefaultLocaleConfig.tsx","../src/configs/SerializationFormatConfig.tsx","../src/configs/UseTableValuesSerializerConfig.tsx","../src/scaffolding/templates/react-app/src/actions/Load.tsx.ejs?raw","../src/scaffolding/templates/react-app/src/actions/Save.tsx.ejs?raw","../src/scaffolding/templates/react-app/src/actions/Submit.tsx.ejs?raw","../src/scaffolding/templates/react-app/src/actions/Validate.tsx.ejs?raw","../src/scaffolding/scaffolders/scaffoldActions.ts","../src/scaffolding/templates/react-app/src/api/apiFetch.ts.ejs?raw","../src/scaffolding/templates/react-app/src/api/reportError.ts.ejs?raw","../src/scaffolding/templates/react-app/src/api/submit.ts.ejs?raw","../src/scaffolding/scaffolders/scaffoldApi.ts","../src/scaffolding/scaffolders/scaffoldIssueMessages.ts","../src/scaffolding/scaffolders/scaffoldPageComponents.ts","../src/scaffolding/templates/shared/src/commonMain/kotlin/JsonSerializer.kt.ejs?raw","../src/scaffolding/templates/shared/src/commonMain/kotlin/XmlSerializer.kt.ejs?raw","../src/scaffolding/scaffolders/scaffoldSerializer.ts","../src/util/arrayify.ts","../src/SchematicKind.ts","../src/scaffolding/reactApp/util/reactAppLayout.ts","../src/scaffolding/scaffolders/scaffoldAppComponent.ts","../src/scaffolding/templates/react-app/src/Context.ts.ejs?raw","../src/scaffolding/scaffolders/scaffoldAppContext.ts","../src/scaffolding/templates/shared/src/commonMain/kotlin/ExternalContexts.kt.ejs?raw","../src/scaffolding/scaffolders/scaffoldExternalContexts.ts","../src/scaffolding/templates/build.gradle.kts?raw","../src/scaffolding/templates/gradle.properties.ejs?raw","../src/scaffolding/templates/gradle/libs.versions.toml.ejs?raw","../src/scaffolding/templates/react-app/build.gradle.kts.ejs?raw","../src/scaffolding/templates/settings.gradle.kts.ejs?raw","../src/scaffolding/templates/shared/build.gradle.kts.ejs?raw","../src/scaffolding/templates/shared/src/jsMain/kotlin/JsJodaTimeZone.kt.ejs?raw","../src/scaffolding/scaffolders/scaffoldGradleProject.ts","../src/scaffolding/templates/gradle/wrapper/gradle-wrapper.properties?raw","../src/scaffolding/templates/gradlew.bat?raw","../src/scaffolding/templates/gradlew?raw","../src/scaffolding/scaffolders/scaffoldGradleWrapper.ts","../src/scaffolding/scaffolders/scaffoldMain.ts","../src/scaffolding/templates/_editorconfig?raw","../src/scaffolding/templates/_gitattributes?raw","../src/scaffolding/templates/_gitignore?raw","../src/scaffolding/scaffolders/scaffoldProjectMisc.ts","../src/scaffolding/templates/shared/src/commonMain/kotlin/Responses.kt.ejs?raw","../src/scaffolding/scaffolders/scaffoldResponses.ts","../src/scaffolding/templates/react-app/src/index.scss?raw","../src/scaffolding/scaffolders/scaffoldStyles.ts","../src/scaffolding/templates/react-app/eslint.config.js?raw","../src/scaffolding/templates/react-app/index.html.ejs?raw","../src/scaffolding/templates/react-app/package.json.ejs?raw","../src/scaffolding/templates/react-app/public/vite.svg?raw","../src/scaffolding/templates/react-app/tsconfig.app.json?raw","../src/scaffolding/templates/react-app/tsconfig.json?raw","../src/scaffolding/templates/react-app/tsconfig.node.json?raw","../src/scaffolding/templates/react-app/vite.config.ts.ejs?raw","../src/scaffolding/scaffolders/scaffoldViteProject.ts","../src/SchematicBuilder.tsx"],"sourcesContent":["import { useConfig } from \"@ostack.tech/kform-scaffolder\";\n\nexport interface DefaultLocaleConfigProps {\n defaultValue?: string;\n disabled?: boolean;\n}\n\nexport const DEFAULT_LOCALE = \"en-US\";\n// eslint-disable-next-line react-refresh/only-export-components\nexport const LOCALES: string[] = JSON.parse(import.meta.env.VITE_LOCALES);\n\nexport function DefaultLocaleConfig({\n defaultValue = DEFAULT_LOCALE,\n disabled,\n}: DefaultLocaleConfigProps) {\n const [config, setConfig] = useConfig(\"defaultLocale\", defaultValue);\n return (\n <div className=\"builder-config-field\">\n <label>Default locale</label>\n <select\n value={config}\n onChange={(evt) => {\n setConfig(evt.target.value);\n }}\n disabled={disabled}\n >\n {LOCALES.map((locale) => (\n <option key={locale} value={locale}>\n {locale}\n </option>\n ))}\n </select>\n </div>\n );\n}\n","import { useConfig } from \"@ostack.tech/kform-scaffolder\";\nimport { useRef } from \"react\";\n\nexport type SerializationFormat = \"json\" | \"xml\";\n\nexport interface SerializationFormatConfigProps {\n defaultValue?: SerializationFormat;\n disabled?: boolean;\n}\n\nexport const DEFAULT_SERIALIZATION_FORMAT = \"json\";\n\nexport function SerializationFormatConfig({\n defaultValue = DEFAULT_SERIALIZATION_FORMAT,\n disabled,\n}: SerializationFormatConfigProps) {\n const [useTableValuesSerializerConfig, setUseTableValuesSerializerConfig] =\n useConfig(\"useTableValuesSerializer\", false);\n const lastUseTableValuesSerializerConfig = useRef(\n useTableValuesSerializerConfig,\n );\n const [config, setConfig] = useConfig(\"serializationFormat\", defaultValue);\n return (\n <div className=\"builder-config-field\">\n <label>Serialization format</label>\n <select\n value={config}\n onChange={(evt) => {\n setConfig(evt.target.value as SerializationFormat);\n if (evt.target.value === \"xml\") {\n lastUseTableValuesSerializerConfig.current =\n useTableValuesSerializerConfig;\n setUseTableValuesSerializerConfig(true);\n } else {\n setUseTableValuesSerializerConfig(\n lastUseTableValuesSerializerConfig.current,\n );\n }\n }}\n disabled={disabled}\n >\n <option value=\"json\">JSON</option>\n <option value=\"xml\">XML</option>\n </select>\n </div>\n );\n}\n","import {\n useConfig,\n UseTableValuesSerializerConfig as KFormUseTableValuesSerializerConfig,\n} from \"@ostack.tech/kform-scaffolder\";\n\nimport { DEFAULT_SERIALIZATION_FORMAT } from \"./SerializationFormatConfig.tsx\";\n\nexport interface UseTableValuesSerializerConfigProps {\n disabled?: boolean;\n}\n\nexport function UseTableValuesSerializerConfig({\n disabled,\n}: UseTableValuesSerializerConfigProps) {\n const [serializationFormatConfig] = useConfig(\n \"serializationFormat\",\n DEFAULT_SERIALIZATION_FORMAT,\n );\n return (\n <KFormUseTableValuesSerializerConfig\n disabled={disabled || serializationFormatConfig === \"xml\"}\n />\n );\n}\n","export default \"import { LoadAction } from \\\"@ostack.tech/ui-kform\\\";\\nimport { decode<%= formClass %>FromString, <%= formClass %>FormMode } from \\\"<%= kmpModuleName %>\\\";\\nimport { use<%= formClass %>Context } from \\\"../<%= formClass %>Context.ts\\\";\\n\\nexport function Load() {\\n const { externalContexts } = use<%= formClass %>Context();\\n\\n return (\\n externalContexts.mode !== <%= formClass %>FormMode.READ && (\\n <LoadAction\\n decode={async (file) => decode<%= formClass %>FromString(await file.text())}\\n mimeTypes={[\\\"<%= serializationMimeType %>\\\"]}\\n extensions={[\\\".<%= serializationFormat %>\\\"]}\\n />\\n )\\n );\\n}\\n\"","export default \"import { SaveAction } from \\\"@ostack.tech/ui-kform\\\";\\nimport { type <%= formClass %>, encode<%= formClass %>ToString, <%= formClass %>FormMode } from \\\"<%= kmpModuleName %>\\\";\\nimport { use<%= formClass %>Context } from \\\"../<%= formClass %>Context.ts\\\";\\n\\nexport function Save() {\\n const { externalContexts } = use<%= formClass %>Context();\\n\\n return (\\n <SaveAction\\n encode={(<%= formVar %>: <%= formClass %>) => encode<%= formClass %>ToString(<%= formVar %>, true)}\\n disableOverwrite={externalContexts.mode === <%= formClass %>FormMode.READ}\\n mimeTypes={[\\\"<%= serializationMimeType %>\\\"]}\\n extensions={[\\\".<%= serializationFormat %>\\\"]}\\n />\\n );\\n}\\n\"","export default \"import { LocatedValidationWarning } from \\\"@ostack.tech/kform\\\";\\nimport { SubmitAction } from \\\"@ostack.tech/ui-kform\\\";\\nimport {\\n type <%= formClass %>,\\n <%= formClass %>FormMode,\\n <%= formClass %>SubmitSuccess,\\n <%= formClass %>SubmitValidationError,\\n <%= formClass %>SubmitError,\\n} from \\\"<%= kmpModuleName %>\\\";\\nimport { use<%= formClass %>Context } from \\\"../<%= formClass %>Context.ts\\\";\\nimport { submit } from \\\"../api/submit.ts\\\";\\n\\nexport function Submit() {\\n const { externalContexts } = use<%= formClass %>Context();\\n\\n const handleSubmit = async (\\n <%= formVar %>: <%= formClass %>,\\n acceptedWarnings?: LocatedValidationWarning[],\\n ) => {\\n const response = await submit(<%= formVar %>, acceptedWarnings);\\n if (response instanceof <%= formClass %>SubmitSuccess) {\\n return response.redirectTo;\\n } else if (response instanceof <%= formClass %>SubmitValidationError) {\\n return response.issues;\\n } else {\\n throw response as <%= formClass %>SubmitError;\\n }\\n };\\n\\n const handleSuccessfulSubmit = (redirectTo: string) => {\\n window.location.href = redirectTo;\\n };\\n\\n return (\\n externalContexts.mode !== <%= formClass %>FormMode.READ && (\\n <SubmitAction\\n onSubmit={handleSubmit}\\n onSuccessfulSubmit={handleSuccessfulSubmit}\\n <%_ if (useTableValuesSerializer) { -%>\\n convertExternalIssuesTableRowIndicesToIds\\n <%_ } -%>\\n />\\n )\\n );\\n}\\n\"","export default \"import { ValidateAction } from \\\"@ostack.tech/ui-kform\\\";\\nimport { <%= formClass %>FormMode } from \\\"<%= kmpModuleName %>\\\";\\nimport { use<%= formClass %>Context } from \\\"../<%= formClass %>Context.ts\\\";\\n\\nexport function Validate() {\\n const { externalContexts } = use<%= formClass %>Context();\\n\\n return externalContexts.mode !== <%= formClass %>FormMode.READ && <ValidateAction />;\\n}\\n\"","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { camelCase, kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport loadTsxEjs from \"../templates/react-app/src/actions/Load.tsx.ejs?raw\";\nimport saveTsxEjs from \"../templates/react-app/src/actions/Save.tsx.ejs?raw\";\nimport submitTsxEjs from \"../templates/react-app/src/actions/Submit.tsx.ejs?raw\";\nimport validateTsxEjs from \"../templates/react-app/src/actions/Validate.tsx.ejs?raw\";\n\nexport function scaffoldActions(schematic: Schematic, data: ReactAppData) {\n const ejsData = {\n kmpModuleName: data.kmpModuleName ?? `${kebabCase(schematic.name!)}-shared`,\n serializationFormat: data.serializationFormat ?? \"json\",\n serializationMimeType: `application/${data.serializationFormat}`,\n formVar: camelCase(schematic.name!),\n formClass: schematic.name,\n useTableValuesSerializer: data.useTableValuesSerializer,\n };\n\n addEjsTemplateFile(data, \"actions/Load.tsx\", loadTsxEjs, ejsData);\n addEjsTemplateFile(data, \"actions/Save.tsx\", saveTsxEjs, ejsData);\n addEjsTemplateFile(data, \"actions/Submit.tsx\", submitTsxEjs, ejsData);\n addEjsTemplateFile(data, \"actions/Validate.tsx\", validateTsxEjs, ejsData);\n}\n","export default \"const API_BASE_URL = new URL(\\\"<%= apiBasePath %>\\\", window.location.origin);\\n\\n/**\\n * Wrapper around `fetch` for accessing the API.\\n *\\n * Configuration common to all API requests should be set here.\\n */\\nexport function apiFetch(url: string | URL, init?: RequestInit) {\\n return fetch(new URL(url, API_BASE_URL), init);\\n}\\n\"","export default \"import type { ErrorReport } from \\\"@ostack.tech/ui\\\";\\nimport { apiFetch } from \\\"./apiFetch.ts\\\";\\n\\nconst REPORT_ERROR_API_ENDPOINT = \\\"<%= reportErrorApiEndpoint %>\\\";\\n\\nexport async function reportError(error: ErrorReport) {\\n await apiFetch(REPORT_ERROR_API_ENDPOINT, {\\n method: \\\"POST\\\",\\n headers: { \\\"Content-Type\\\": \\\"application/json\\\" },\\n body: JSON.stringify(error, null, import.meta.env.DEV ? 2 : 0),\\n });\\n}\\n\"","export default \"import { LocatedValidationWarning } from \\\"@ostack.tech/kform\\\";\\nimport {\\n decode<%= formClass %>SubmitResponseFromString,\\n encode<%= formClass %>ToString,\\n <%= formClass %>,\\n} from \\\"<%= kmpModuleName %>\\\";\\nimport { apiFetch } from \\\"./apiFetch.ts\\\";\\n\\nconst SUBMIT_API_ENDPOINT = \\\"<%= submitApiEndpoint %>\\\";\\n\\nexport async function submit(\\n <%= formVar %>: <%= formClass %>,\\n acceptedWarnings?: LocatedValidationWarning[],\\n) {\\n const params = new URLSearchParams();\\n if (acceptedWarnings?.length) {\\n const acceptedWarningCodes = new Set(acceptedWarnings.map((w) => w.code));\\n params.set(\\\"acceptedWarnings\\\", Array.from(acceptedWarningCodes).join());\\n }\\n\\n const response = await apiFetch(`${SUBMIT_API_ENDPOINT}?${params}`, {\\n method: \\\"POST\\\",\\n headers: { \\\"Content-Type\\\": \\\"<%= serializationMimeType %>\\\" },\\n body: encode<%= formClass %>ToString(<%= formVar %>, import.meta.env.DEV),\\n });\\n return decode<%= formClass %>SubmitResponseFromString(await response.text());\\n}\\n\"","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { camelCase, kebabCase } from \"change-case\";\n\nimport { DEFAULT_SERIALIZATION_FORMAT } from \"../../configs/SerializationFormatConfig.tsx\";\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport apiFetchTsEjs from \"../templates/react-app/src/api/apiFetch.ts.ejs?raw\";\nimport reportErrorTsEjs from \"../templates/react-app/src/api/reportError.ts.ejs?raw\";\nimport submitTsEjs from \"../templates/react-app/src/api/submit.ts.ejs?raw\";\n\nexport const DEFAULT_API_BASE_PATH = \"/api/\";\nexport const DEFAULT_REPORT_ERROR_API_ENDPOINT = \"report-error\";\nexport const DEFAULT_SUBMIT_API_ENDPOINT = \"submit\";\n\nexport function scaffoldApi(schematic: Schematic, data: ReactAppData) {\n const ejsData = {\n kmpModuleName: data.kmpModuleName ?? `${kebabCase(schematic.name!)}-shared`,\n serializationFormat:\n data.serializationFormat ?? DEFAULT_SERIALIZATION_FORMAT,\n serializationMimeType: `application/${data.serializationFormat}`,\n formVar: camelCase(schematic.name!),\n formClass: schematic.name,\n apiBasePath: data.apiBasePath ?? DEFAULT_API_BASE_PATH,\n reportErrorApiEndpoint:\n data.reportErrorApiEndpoint ?? DEFAULT_REPORT_ERROR_API_ENDPOINT,\n submitApiEndpoint: data.submitApiEndpoint ?? DEFAULT_SUBMIT_API_ENDPOINT,\n };\n\n addEjsTemplateFile(data, \"api/apiFetch.ts\", apiFetchTsEjs, ejsData);\n addEjsTemplateFile(data, \"api/reportError.ts\", reportErrorTsEjs, ejsData);\n addEjsTemplateFile(data, \"api/submit.ts\", submitTsEjs, ejsData);\n}\n","import {\n code,\n joinPaths,\n type Schematic,\n type TsFile,\n tsFile,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { constantCase, kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\n\nconst DEFAULT_SCAFFOLD_ISSUE_MESSAGES = true;\n\nexport function scaffoldIssueMessages(\n schematic: Schematic,\n data: ReactAppData,\n) {\n if (!shouldScaffoldIssueMessages(data)) {\n return;\n }\n\n const fileName = joinPaths(\n data.currentDir,\n `${schematic.name}IssueMessages.tsx`,\n );\n let file = data.files.get(fileName) as TsFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = tsFile()));\n }\n scaffoldIssueMessagesConstant(schematic, {\n kmpModuleName: `${kebabCase(data.rootSchematic.name!)}-shared`,\n ...data,\n currentFile: file,\n });\n}\n\nexport function shouldScaffoldIssueMessages(data: ReactAppData) {\n return data.scaffoldIssueMessages ?? DEFAULT_SCAFFOLD_ISSUE_MESSAGES;\n}\n\nfunction scaffoldIssueMessagesConstant(\n schematic: Schematic,\n data: ReactAppData,\n) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"IssueMessagesByCode\",\n isType: true,\n });\n data.currentFile.declarations.push(code`\n export const ${constantCase(schematic.name!)}_ISSUE_MESSAGES: Record<string, IssueMessagesByCode> = {};\n `);\n}\n","import {\n code,\n joinPaths,\n type Schematic,\n type TsFile,\n tsFile,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { kebabCase, sentenceCase } from \"change-case\";\n\nimport type { SchematicKind } from \"../../SchematicKind.ts\";\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport { reactAppLayout } from \"../reactApp/util/reactAppLayout.ts\";\nimport { scaffoldIssueMessages } from \"./scaffoldIssueMessages.ts\";\n\nexport function scaffoldPageComponents(\n schematic: Schematic,\n data: ReactAppData,\n) {\n const layout = reactAppLayout(schematic, {\n kmpModuleName: `${kebabCase(schematic.name!)}-shared`,\n ...data,\n });\n for (const annex of layout) {\n for (const formPage of annex.formPages) {\n scaffoldPageComponent(formPage.schematic, formPage.data);\n if (formPage.data.currentPath !== \"/\") {\n scaffoldIssueMessages(formPage.schematic, formPage.data);\n }\n }\n }\n}\n\nfunction scaffoldPageComponent(schematic: Schematic, data: ReactAppData) {\n const fileName = joinPaths(data.currentDir, `${schematic.name}.tsx`);\n let file = data.files.get(fileName) as TsFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = tsFile()));\n }\n scaffoldPageComponentDeclarations(schematic, {\n kmpModuleName: `${kebabCase(data.rootSchematic.name!)}-shared`,\n ...data,\n currentFile: file,\n });\n}\n\nfunction scaffoldPageComponentDeclarations(\n schematic: Schematic,\n data: ReactAppData,\n) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Grid\",\n });\n\n data.currentFile.declarations.push(code`\n export function ${schematic.name}() {\n return (\n <Grid container>\n ${schematic\n .children!.map(\n (child) =>\n code`\n <Grid xs={12}>\n ${scaffoldField(child, {\n ...data,\n currentPath: child.childName,\n })}\n </Grid>\n `,\n )\n .join(\"\\n\\n\")}\n </Grid>\n );\n }\n `);\n}\n\nexport function scaffoldField(schematic: Schematic, data: ReactAppData) {\n const schematicKind = data.schematicKinds.get(\n schematic.kind,\n ) as SchematicKind;\n if (!schematicKind) {\n throw new Error(`Unknown schematic kind ${schematic.kind}`);\n }\n\n if (schematicKind.scaffoldField) {\n return schematicKind.scaffoldField?.(schematic, data);\n }\n\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"ControlField\",\n });\n\n let controlModuleName: string | undefined;\n let controlName: string | undefined;\n if (schematicKind.control) {\n const controlSeparator = schematicKind.control.lastIndexOf(\".\");\n controlModuleName = schematicKind.control.slice(0, controlSeparator);\n controlName = schematicKind.control.slice(controlSeparator + 1);\n data.currentFile.imports.push({\n moduleName: controlModuleName,\n name: controlName,\n });\n }\n\n let control = schematicKind.scaffoldControl?.(schematic, data);\n if (!control) {\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n control = [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n `<${controlName!} />`,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n }\n\n return code`\n <ControlField path=\"${data.currentPath}\">\n ${control}\n </ControlField>\n `;\n}\n","export default \"package <%= filePackage %>\\n\\nimport kotlin.js.JsExport\\nimport kotlin.jvm.JvmOverloads\\nimport kotlinx.serialization.json.Json\\n\\n/** Base JSON configuration. */\\nprivate val JSON_CONFIG = Json.Default\\n/** Pretty JSON configuration. */\\nprivate val JSON_CONFIG_PRETTY = Json(JSON_CONFIG) { prettyPrint = true }\\n\\n/** JSON configuration. */\\n@JvmOverloads\\nfun jsonConfig(prettyPrint: Boolean = false): Json =\\n if (prettyPrint) JSON_CONFIG_PRETTY else JSON_CONFIG\\n\\n<%_ if (includeSerializationFormatVersion) { -%>\\n/** Version of the serialization format. */\\n@JsExport\\nconst val <%= formConstant %>_SERIALIZATION_VERSION = 1\\n\\n<%_ } -%>\\n@JsExport\\n@JvmOverloads\\nfun encode<%= formClass %>ToString(<%= formVar %>: <%= formClass %>, prettyPrint: Boolean = false): String =\\n jsonConfig(prettyPrint).encodeToString(<%= formVar %>)\\n\\n@JsExport\\nfun decode<%= formClass %>FromString(json: String): <%= formClass %> =\\n jsonConfig().decodeFromString(json)\\n\\n@JvmOverloads\\nfun encode<%= formClass %>ExternalContextsToString(externalContexts: <%= formClass %>ExternalContexts, prettyPrint: Boolean = false): String =\\n jsonConfig(prettyPrint).encodeToString(externalContexts)\\n\\n@JsExport\\nfun decode<%= formClass %>ExternalContextsFromString(json: String): <%= formClass %>ExternalContexts =\\n jsonConfig().decodeFromString(json)\\n\\n@JvmOverloads\\nfun encode<%= formClass %>SubmitResponseToString(response: <%= formClass %>SubmitResponse, prettyPrint: Boolean = false): String =\\n jsonConfig(prettyPrint).encodeToString(response)\\n\\n@JsExport\\nfun decode<%= formClass %>SubmitResponseFromString(json: String): <%= formClass %>SubmitResponse =\\n jsonConfig().decodeFromString(json)\\n\"","export default \"package <%= filePackage %>\\n\\nimport kotlin.js.JsExport\\nimport kotlin.jvm.JvmOverloads\\nimport kotlinx.serialization.decodeFromString\\nimport kotlinx.serialization.encodeToString\\nimport nl.adaptivity.xmlutil.ExperimentalXmlUtilApi\\nimport nl.adaptivity.xmlutil.QName\\nimport nl.adaptivity.xmlutil.XMLConstants\\nimport nl.adaptivity.xmlutil.core.XmlVersion\\nimport nl.adaptivity.xmlutil.serialization.DefaultXmlSerializationPolicy\\nimport nl.adaptivity.xmlutil.serialization.OutputKind\\nimport nl.adaptivity.xmlutil.serialization.XML\\nimport nl.adaptivity.xmlutil.serialization.XmlSerializationPolicy\\nimport nl.adaptivity.xmlutil.serialization.structure.SafeParentInfo\\n\\n/** Base XML configuration. */\\nprivate val XML_CONFIG = XML {\\n recommended_0_91_0 {\\n xmlVersion = XmlVersion.XML10\\n autoPolymorphic = false\\n encodeDefault = XmlSerializationPolicy.XmlEncodeDefault.NEVER\\n }\\n\\n // Set policy on top of the current policy config\\n @OptIn(ExperimentalXmlUtilApi::class)\\n policy =\\n object : DefaultXmlSerializationPolicy(policy) {\\n // Serialize properties as elements instead of attributes by default\\n override val defaultPrimitiveOutputKind: OutputKind = OutputKind.Element\\n\\n // Use property names as serial names by default\\n override fun effectiveName(\\n serializerParent: SafeParentInfo,\\n tagParent: SafeParentInfo,\\n outputKind: OutputKind,\\n useName: XmlSerializationPolicy.DeclaredNameInfo,\\n ): QName =\\n useName.annotatedName\\n ?: serializerParent.elementTypeDescriptor.typeQname\\n ?: QName(\\n if (outputKind == OutputKind.Element) tagParent.namespace.namespaceURI\\n else XMLConstants.NULL_NS_URI,\\n useName.serialName,\\n )\\n }\\n}\\n/** Pretty XML configuration. */\\nprivate val XML_CONFIG_PRETTY = XML_CONFIG.copy { indent = 4 }\\n\\n/** XML configuration. */\\n@JvmOverloads\\nfun xmlConfig(prettyPrint: Boolean = false): XML =\\n if (prettyPrint) XML_CONFIG_PRETTY else XML_CONFIG\\n\\n<%_ if (includeSerializationFormatVersion) { -%>\\n/** Version of the serialization format. */\\n@JsExport\\nconst val <%= formConstant %>_SERIALIZATION_VERSION = 1\\n\\n<%_ } -%>\\n@JsExport\\n@JvmOverloads\\nfun encode<%= formClass %>ToString(<%= formVar %>: <%= formClass %>, prettyPrint: Boolean = false): String =\\n xmlConfig(prettyPrint).encodeToString(<%= formVar %>)\\n\\n@JsExport\\nfun decode<%= formClass %>FromString(xml: String): <%= formClass %> =\\n xmlConfig().decodeFromString(xml)\\n\\n@JvmOverloads\\nfun encode<%= formClass %>ExternalContextsToString(externalContexts: <%= formClass %>ExternalContexts, prettyPrint: Boolean = false): String =\\n xmlConfig(prettyPrint).encodeToString(externalContexts)\\n\\n@JsExport\\nfun decode<%= formClass %>ExternalContextsFromString(xml: String): <%= formClass %>ExternalContexts =\\n xmlConfig().decodeFromString(xml)\\n\\n@JvmOverloads\\nfun encode<%= formClass %>SubmitResponseToString(response: <%= formClass %>SubmitResponse, prettyPrint: Boolean = false): String =\\n xmlConfig(prettyPrint).encodeToString(response)\\n\\n@JsExport\\nfun decode<%= formClass %>SubmitResponseFromString(xml: String): <%= formClass %>SubmitResponse =\\n xmlConfig().decodeFromString(xml)\\n\"","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { camelCase, constantCase } from \"change-case\";\n\nimport type { KtData } from \"../kotlin/KtData.ts\";\nimport jsonSerializerKt from \"../templates/shared/src/commonMain/kotlin/JsonSerializer.kt.ejs?raw\";\nimport xmlSerializerKt from \"../templates/shared/src/commonMain/kotlin/XmlSerializer.kt.ejs?raw\";\n\nexport const DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION = true;\n\nexport function scaffoldSerializer(schematic: Schematic, data: KtData): void {\n const ejsData = {\n filePackage: data.currentPackage,\n formVar: camelCase(schematic.name!),\n formClass: schematic.name,\n formConstant: constantCase(schematic.name!),\n includeSerializationFormatVersion:\n data.includeSerializationFormatVersion ??\n DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION,\n };\n\n addEjsTemplateFile(\n data,\n `${schematic.name}Serializer.kt`,\n data.serializationFormat === \"xml\" ? xmlSerializerKt : jsonSerializerKt,\n ejsData,\n );\n}\n","export function arrayify<T>(value: T | T[] | null | undefined): T[] {\n return value == null ? [] : Array.isArray(value) ? value : [value];\n}\n","import {\n annotate,\n anySchematicKind as kFormAnySchematicKind,\n bigDecimalSchematicKind as kFormBigDecimalSchematicKind,\n bigIntegerSchematicKind as kFormBigIntegerSchematicKind,\n booleanSchematicKind as kFormBooleanSchematicKind,\n byteSchematicKind as kFormByteSchematicKind,\n classSchematicKind as kFormClassSchematicKind,\n code,\n createSchematic,\n doubleSchematicKind as kFormDoubleSchematicKind,\n enumSchematicKind as kFormEnumSchematicKind,\n fileSchematicKind as kFormFileSchematicKind,\n floatSchematicKind as kFormFloatSchematicKind,\n intSchematicKind as kFormIntSchematicKind,\n joinPaths,\n ListableBuilderWithoutKindSelect,\n listSchematicKind as kFormListSchematicKind,\n localDateSchematicKind as kFormLocalDateSchematicKind,\n longSchematicKind as kFormLongSchematicKind,\n type Schematic,\n type SchematicKind as KFormSchematicKind,\n shortSchematicKind as kFormShortSchematicKind,\n stringSchematicKind as kFormStringSchematicKind,\n tableSchematicKind as kFormTableSchematicKind,\n} from \"@ostack.tech/kform-scaffolder\";\nimport {\n camelCase,\n capitalCase,\n constantCase,\n pascalCase,\n sentenceCase,\n} from \"change-case\";\n\nimport type { KtData } from \"./scaffolding/kotlin/KtData.ts\";\nimport type { ReactAppData } from \"./scaffolding/reactApp/ReactAppData.ts\";\nimport { scaffoldField } from \"./scaffolding/scaffolders/scaffoldPageComponents.ts\";\nimport { DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION } from \"./scaffolding/scaffolders/scaffoldSerializer.ts\";\nimport { arrayify } from \"./util/arrayify.ts\";\n\nexport interface SchematicKind extends KFormSchematicKind {\n // Override KForm data types with this package's\n defaultValue: string | ((schematic: Schematic, data: KtData) => string);\n propertyAnnotations?:\n | string\n | string[]\n | ((schematic: Schematic, data: KtData) => string | string[] | undefined);\n scaffoldModel?: (schematic: Schematic, data: KtData) => string;\n scaffoldType?: (schematic: Schematic, data: KtData) => string;\n scaffoldSchema?: (schematic: Schematic, data: KtData) => string;\n\n // New schematic properties\n control?: string;\n scaffoldControl?: (schematic: Schematic, data: ReactAppData) => string;\n scaffoldField?: (schematic: Schematic, data: ReactAppData) => string;\n}\n\nexport const anySchematicKind: SchematicKind = {\n ...kFormAnySchematicKind,\n};\nexport const bigDecimalSchematicKind: SchematicKind = {\n ...kFormBigDecimalSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const bigIntegerSchematicKind: SchematicKind = {\n ...kFormBigIntegerSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const booleanSchematicKind: SchematicKind = {\n ...kFormBooleanSchematicKind,\n control: \"@ostack.tech/ui-kform.CheckboxControl\",\n scaffoldControl: (schematic, data) =>\n data.omitLabel\n ? `<CheckboxControl />`\n : `<CheckboxControl>${sentenceCase(schematic.childName!)}</CheckboxControl>`,\n};\nexport const byteSchematicKind: SchematicKind = {\n ...kFormByteSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const classAnnexSchematicKind: SchematicKind = {\n ...kFormClassSchematicKind,\n defaultPackageSuffix: (childName) => `annexes.${childName.toLowerCase()}`,\n kind: \"Class (Annex)\",\n};\nexport const classFormPageSchematicKind: SchematicKind = {\n ...kFormClassSchematicKind,\n kind: \"Class (FormPage)\",\n nullable: false,\n};\nexport const classSchematicKind: SchematicKind = {\n ...kFormClassSchematicKind,\n nullable: false,\n scaffoldModel: (schematic, data) => {\n const baseModel = kFormClassSchematicKind.scaffoldModel!(schematic, data);\n if (data.currentPath !== \"/\") {\n return baseModel;\n }\n\n const classAnnotations: string[] = [];\n let versionProperty: string | null = null;\n\n if (data.serializationFormat === \"xml\") {\n data.currentFile.imports.add(\n \"nl.adaptivity.xmlutil.serialization.XmlSerialName\",\n );\n const namespace =\n data.xmlNamespace ??\n `http://${data\n .currentPackage!.split(\".\")\n .reverse()\n .join(\".\")}/schema/${new Date().getFullYear()}`;\n classAnnotations.push(\n `@XmlSerialName(\"${schematic.name}\", \"${namespace}\")`,\n );\n }\n\n if (\n data.includeSerializationFormatVersion ??\n DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION\n ) {\n data.currentFile.imports\n .add(\"kotlinx.serialization.EncodeDefault\")\n .add(\"kotlinx.serialization.ExperimentalSerializationApi\");\n const versionAnnotations = [\n \"@EncodeDefault\",\n \"@OptIn(ExperimentalSerializationApi::class)\",\n ];\n\n if (data.serializationFormat === \"xml\") {\n data.currentFile.imports.add(\n \"nl.adaptivity.xmlutil.serialization.XmlElement\",\n );\n versionAnnotations.push(\"@XmlElement(false)\");\n } else {\n data.currentFile.imports.add(\"kotlinx.serialization.SerialName\");\n versionAnnotations.push('@SerialName($$\"$version\")');\n }\n\n versionProperty = annotate(\n versionAnnotations,\n `internal var version = ${constantCase(schematic.name!)}_SERIALIZATION_VERSION`,\n );\n }\n\n return (\n annotate(classAnnotations, baseModel) +\n (versionProperty\n ? ` ${code`\n {\n ${versionProperty}\n }\n `}`\n : \"\")\n );\n },\n scaffoldField: (schematic, data) => {\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui\", name: \"FieldGroup\" },\n { moduleName: \"@ostack.tech/ui\", name: \"FieldGroupHeader\" },\n { moduleName: \"@ostack.tech/ui\", name: \"FieldGroupTitle\" },\n { moduleName: \"@ostack.tech/ui\", name: \"FieldGroupBody\" },\n { moduleName: \"@ostack.tech/ui\", name: \"Grid\" },\n );\n\n return code`\n <FieldGroup>\n <FieldGroupHeader>\n <FieldGroupTitle>${capitalCase(schematic.name!)}</FieldGroupTitle>\n </FieldGroupHeader>\n\n <FieldGroupBody>\n <Grid container>\n ${schematic\n .children!.map(\n (child) =>\n code`\n <Grid xs={12}>\n ${scaffoldField(child, {\n ...data,\n currentPath: joinPaths(\n data.currentPath,\n child.childName,\n ),\n })}\n </Grid>\n `,\n )\n .join(\"\\n\\n\")}\n </Grid>\n </FieldGroupBody>\n </FieldGroup>\n `;\n },\n};\nexport const doubleSchematicKind: SchematicKind = {\n ...kFormDoubleSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const enumSchematicKind: SchematicKind = {\n ...kFormEnumSchematicKind,\n kind: \"Enum\",\n internal: true,\n nullable: false,\n};\nexport const enumSelectSchematicKind: SchematicKind = {\n ...kFormEnumSchematicKind,\n kind: \"Enum (Select)\",\n control: \"@ostack.tech/ui-kform.SelectControl\",\n scaffoldControl: (schematic, data) => {\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n data.currentFile.imports.push({\n moduleName: data.kmpModuleName!,\n name: schematic.name!,\n });\n return [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n code`\n <SelectControl\n options={[\n ${schematic\n .children!.map(\n (child) =>\n `{ value: ${schematic.name}.${\n child.childName\n }, text: ${JSON.stringify(sentenceCase(child.childName!))} }`,\n )\n .join(\",\\n\")}\n ]}\n />\n `,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n },\n};\nexport const enumRadioGroupSchematicKind: SchematicKind = {\n ...kFormEnumSchematicKind,\n kind: \"Enum (RadioGroup)\",\n control: \"@ostack.tech/ui-kform.RadioGroupControl\",\n scaffoldControl: (schematic, data) => {\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n data.currentFile.imports.push({\n moduleName: data.kmpModuleName!,\n name: schematic.name!,\n });\n return [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n code`\n <RadioGroupControl\n options={[\n ${schematic\n .children!.map(\n (child) =>\n `{ value: ${schematic.name}.${\n child.childName\n }, text: ${JSON.stringify(sentenceCase(child.childName!))} }`,\n )\n .join(\",\\n\")}\n ]}\n />\n `,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n },\n};\nexport const fileSchematicKind: SchematicKind = {\n ...kFormFileSchematicKind,\n nullable: true,\n control: \"@ostack.tech/ui-kform.FileControl\",\n};\nexport const floatSchematicKind: SchematicKind = {\n ...kFormFloatSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const intSchematicKind: SchematicKind = {\n ...kFormIntSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const listCheckboxGroupSchematicKind: SchematicKind = {\n ...kFormListSchematicKind,\n kind: \"List<Enum> (CheckboxGroup)\",\n nullable: false,\n initChildren: (childName) => [\n createSchematic({\n kind: \"Enum\",\n name: pascalCase(childName),\n nullable: false,\n children: [],\n }),\n ],\n builder: ListableBuilderWithoutKindSelect,\n control: \"@ostack.tech/ui-kform.CheckboxGroupControl\",\n scaffoldControl: (schematic, data) => {\n const childSchematic = schematic.children![0];\n if (childSchematic.kind !== \"Enum\") {\n throw new Error(\"Invalid child kind.\");\n }\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n data.currentFile.imports.push({\n moduleName: data.kmpModuleName!,\n name: childSchematic.name!,\n });\n return [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n code`\n <CheckboxGroupControl\n options={[\n ${childSchematic\n .children!.map(\n (child) =>\n `{ value: ${childSchematic.name}.${\n child.childName\n }, text: ${JSON.stringify(sentenceCase(child.childName!))} }`,\n )\n .join(\",\\n\")}\n ]}\n />\n `,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n },\n};\nexport const listSelectMultipleSchematicKind: SchematicKind = {\n ...kFormListSchematicKind,\n kind: \"List<Enum> (SelectMultiple)\",\n nullable: false,\n initChildren: (childName) => [\n createSchematic({\n kind: \"Enum\",\n name: pascalCase(childName),\n nullable: false,\n children: [],\n }),\n ],\n builder: ListableBuilderWithoutKindSelect,\n control: \"@ostack.tech/ui-kform.SelectMultipleControl\",\n scaffoldControl: (schematic, data) => {\n const childSchematic = schematic.children![0];\n if (childSchematic.kind !== \"Enum\") {\n throw new Error(\"Invalid child kind.\");\n }\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n data.currentFile.imports.push({\n moduleName: data.kmpModuleName!,\n name: childSchematic.name!,\n });\n return [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n code`\n <SelectMultipleControl\n options={[\n ${childSchematic\n .children!.map(\n (child) =>\n `{ value: ${childSchematic.name}.${\n child.childName\n }, text: ${JSON.stringify(sentenceCase(child.childName!))} }`,\n )\n .join(\",\\n\")}\n ]}\n />\n `,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n },\n};\nexport const localDateSchematicKind: SchematicKind = {\n ...kFormLocalDateSchematicKind,\n nullable: true,\n control: \"@ostack.tech/ui-kform.DateControl\",\n};\nexport const longSchematicKind: SchematicKind = {\n ...kFormLongSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const shortSchematicKind: SchematicKind = {\n ...kFormShortSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const stringSchematicKind: SchematicKind = {\n ...kFormStringSchematicKind,\n control: \"@ostack.tech/ui-kform.TextControl\",\n};\nexport const tableAnnexesSchematicKind: SchematicKind = {\n ...kFormTableSchematicKind,\n kind: \"Table (Annexes)\",\n nullable: false,\n builder: ListableBuilderWithoutKindSelect,\n initChildren: (childName) => [\n createSchematic({\n kind: \"Class (Annex)\",\n packageSuffix: `annexes.${childName.toLowerCase()}`,\n name: pascalCase(childName),\n nullable: false,\n children: [],\n }),\n ],\n propertyAnnotations: (schematic, data) => {\n const annotations = arrayify(\n typeof kFormTableSchematicKind.propertyAnnotations === \"function\"\n ? kFormTableSchematicKind.propertyAnnotations?.(schematic, data)\n : kFormTableSchematicKind.propertyAnnotations,\n );\n if (data.serializationFormat === \"xml\") {\n data.currentFile.imports.add(\n \"nl.adaptivity.xmlutil.serialization.XmlChildrenName\",\n );\n annotations.push(\n `@XmlChildrenName(\"${camelCase(schematic.children![0].name!)}\")`,\n );\n }\n return annotations;\n },\n};\nexport const tableSchematicKind: SchematicKind = {\n ...kFormTableSchematicKind,\n nullable: false,\n builder: ListableBuilderWithoutKindSelect,\n initChildren: (childName) => [\n createSchematic({\n kind: \"Class\",\n name: `${pascalCase(childName)}Row`,\n nullable: false,\n children: [],\n }),\n ],\n propertyAnnotations: tableAnnexesSchematicKind.propertyAnnotations,\n control: \"@ostack.tech/ui-kform.TableControl\",\n scaffoldControl: (schematic, data) => {\n const rowSchematic = schematic.children![0];\n if (rowSchematic.kind !== \"Class\") {\n throw new Error(\"Table child schematic is not of Class kind.\");\n }\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui\", name: \"Label\" },\n {\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"tableControlIndexColumn\",\n },\n {\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"tableControlActionsColumn\",\n },\n {\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"TableControlAddRowTrigger\",\n },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"TableControlContent\" },\n );\n\n return code`\n <TableControl\n columns={[\n tableControlIndexColumn(),\n ${rowSchematic\n .children!.map(\n (child) => code`\n {\n label: ${JSON.stringify(sentenceCase(child.childName!))},\n render: () => (\n ${scaffoldField(child, {\n ...data,\n omitLabel: true,\n currentPath: child.childName!,\n })}\n )\n }\n `,\n )\n .join(\",\\n\")},\n tableControlActionsColumn()\n ]}\n >\n <Label>${sentenceCase(schematic.childName!)}</Label>\n <TableControlAddRowTrigger />\n <TableControlContent />\n </TableControl>\n `;\n },\n};\n\nexport const defaultSchematicKinds = [\n anySchematicKind,\n bigDecimalSchematicKind,\n bigIntegerSchematicKind,\n booleanSchematicKind,\n byteSchematicKind,\n classSchematicKind,\n classAnnexSchematicKind,\n classFormPageSchematicKind,\n doubleSchematicKind,\n enumSchematicKind,\n enumSelectSchematicKind,\n enumRadioGroupSchematicKind,\n fileSchematicKind,\n floatSchematicKind,\n intSchematicKind,\n listCheckboxGroupSchematicKind,\n listSelectMultipleSchematicKind,\n localDateSchematicKind,\n longSchematicKind,\n shortSchematicKind,\n stringSchematicKind,\n tableAnnexesSchematicKind,\n tableSchematicKind,\n];\n","import { joinPaths, type Schematic } from \"@ostack.tech/kform-scaffolder\";\nimport { camelCase } from \"change-case\";\n\nimport {\n classAnnexSchematicKind,\n classFormPageSchematicKind,\n tableAnnexesSchematicKind,\n} from \"../../../SchematicKind.ts\";\nimport type { ReactAppData } from \"../ReactAppData.ts\";\n\nexport interface LayoutAnnex {\n schematic: Schematic;\n data: ReactAppData;\n formPages: LayoutFormPage[];\n}\n\nexport interface LayoutFormPage {\n schematic: Schematic;\n data: ReactAppData;\n}\n\nexport function reactAppLayout(\n schematic: Schematic,\n data: ReactAppData,\n): LayoutAnnex[] {\n const annexes: LayoutAnnex[] = [];\n if (\n schematic.children?.every(\n (child) =>\n child.kind === classAnnexSchematicKind.kind ||\n child.kind === tableAnnexesSchematicKind.kind,\n )\n ) {\n for (const annex of schematic.children) {\n if (annex.kind === classAnnexSchematicKind.kind) {\n annexes.push(\n layoutAnnex(annex, {\n ...data,\n currentPath: joinPaths(data.currentPath, annex.childName),\n currentDir: joinPaths(\n data.currentDir,\n annex.packageSuffix?.replaceAll(\".\", \"/\"),\n ),\n }),\n );\n } else {\n annexes.push(\n layoutRepetitiveAnnex(annex, {\n ...data,\n currentPath: joinPaths(data.currentPath, annex.childName),\n }),\n );\n }\n }\n } else if (\n schematic.children?.every(\n (child) => child.kind === classFormPageSchematicKind.kind,\n )\n ) {\n annexes.push(layoutAnnex(schematic, data));\n } else if (\n schematic.children?.some(\n (child) =>\n child.kind === classAnnexSchematicKind.kind ||\n child.kind === tableAnnexesSchematicKind.kind ||\n child.kind === classFormPageSchematicKind.kind,\n )\n ) {\n throw new Error(\n \"Annexes/form pages cannot be mixed with other kinds of fields.\",\n );\n } else {\n annexes.push(layoutAnnex(schematic, data));\n }\n return annexes;\n}\n\nfunction layoutRepetitiveAnnex(\n schematic: Schematic,\n data: ReactAppData,\n): LayoutAnnex {\n const childSchematic = schematic.children![0];\n return layoutAnnex(childSchematic, {\n ...data,\n currentPath: joinPaths(data.currentPath, \"*\"),\n currentDir: joinPaths(\n data.currentDir,\n childSchematic.packageSuffix?.replaceAll(\".\", \"/\"),\n ),\n });\n}\n\nfunction layoutAnnex(schematic: Schematic, data: ReactAppData): LayoutAnnex {\n if (\n schematic.children?.some(\n (child) =>\n child.kind === classAnnexSchematicKind.kind ||\n child.kind === tableAnnexesSchematicKind.kind,\n )\n ) {\n throw new Error(\n \"Annexes must only appear at the top level of the schematic.\",\n );\n }\n\n let formPages: LayoutFormPage[];\n if (\n schematic.children?.every(\n (child) => child.kind === classFormPageSchematicKind.kind,\n )\n ) {\n formPages = schematic.children?.map((formPage) => ({\n schematic: formPage,\n data: {\n ...data,\n currentPath: joinPaths(\n data.currentPath,\n camelCase(formPage.childName!),\n ),\n currentDir: joinPaths(\n data.currentDir,\n formPage.packageSuffix?.replaceAll(\".\", \"/\"),\n ),\n },\n }));\n } else if (\n schematic.children?.some(\n (child) => child.kind === classFormPageSchematicKind.kind,\n )\n ) {\n throw new Error(\"Form pages cannot be mixed with other kinds of fields.\");\n } else {\n formPages = [{ schematic, data }];\n }\n\n return { schematic, data, formPages };\n}\n","import {\n code,\n joinPaths,\n type Schematic,\n type TsFile,\n tsFile,\n} from \"@ostack.tech/kform-scaffolder\";\nimport {\n capitalCase,\n constantCase,\n kebabCase,\n sentenceCase,\n} from \"change-case\";\n\nimport { DEFAULT_LOCALE } from \"../../configs/DefaultLocaleConfig.tsx\";\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport {\n type LayoutAnnex,\n type LayoutFormPage,\n reactAppLayout,\n} from \"../reactApp/util/reactAppLayout.ts\";\nimport {\n scaffoldIssueMessages,\n shouldScaffoldIssueMessages,\n} from \"./scaffoldIssueMessages.ts\";\n\nexport const DEFAULT_ACTIVE_PATH_SEARCH_PARAM = \"page\";\n\nexport function scaffoldAppComponent(schematic: Schematic, data: ReactAppData) {\n const fileName = joinPaths(data.currentDir, `${schematic.name}App.tsx`);\n let file = data.files.get(fileName) as TsFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = tsFile()));\n }\n scaffoldAppComponentFile(schematic, {\n kmpModuleName: `${kebabCase(schematic.name!)}-shared`,\n ...data,\n currentFile: file,\n });\n scaffoldIssueMessages(schematic, data);\n}\n\nfunction scaffoldAppComponentFile(schematic: Schematic, data: ReactAppData) {\n const localeVar = (data.defaultLocale ?? DEFAULT_LOCALE).replaceAll(\"-\", \"\");\n const activePathSearchParam =\n data.activePathSearchParam ?? DEFAULT_ACTIVE_PATH_SEARCH_PARAM;\n\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/kform\", name: \"ktMapToObject\" },\n { moduleName: \"@ostack.tech/ui\", name: \"useSearchParam\" },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"FormApp\" },\n { moduleName: \"@ostack.tech/ui-kform\", name: localeVar },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"IssuesPanel\" },\n { moduleName: \"react\", name: \"useMemo\" },\n { moduleName: data.kmpModuleName!, name: `${schematic.name}FormMode` },\n { moduleName: data.kmpModuleName!, name: `${schematic.name}Schema` },\n { moduleName: `./api/reportError.ts`, name: \"reportError\" },\n {\n moduleName: `./${schematic.name}Context.ts`,\n name: `use${schematic.name}Context`,\n },\n );\n\n let issueMessagesProp = \"\";\n if (shouldScaffoldIssueMessages(data)) {\n data.currentFile.imports.push({\n moduleName: `./${schematic.name}IssueMessages.tsx`,\n name: `${constantCase(schematic.name!)}_ISSUE_MESSAGES`,\n });\n issueMessagesProp = `\\nissueMessages={${constantCase(schematic.name!)}_ISSUE_MESSAGES}`;\n }\n\n data.currentFile.declarations.push(code`\n export function ${schematic.name}App() {\n const { externalContexts } = use${schematic.name}Context();\n const [activePath, setActivePath] = useSearchParam(\"${activePathSearchParam}\");\n\n return (\n <FormApp\n schema={${schematic.name}Schema.get()}\n initialValue={\n externalContexts.mode !== ${schematic.name}FormMode.NEW\n ? externalContexts.initialValue\n : undefined\n }\n externalContexts={useMemo(\n () => ktMapToObject(externalContexts.toMap()),\n [externalContexts],\n )}\n readOnly={externalContexts.mode === ${schematic.name}FormMode.READ}\n validationMode={\n externalContexts.mode === ${schematic.name}FormMode.READ\n ? \"manual\"\n : \"auto\"\n }\n formTitle=\"${capitalCase(schematic.name!)}\"\n activePath={activePath}\n onActivePathChange={setActivePath}${issueMessagesProp}\n defaultLocale={${localeVar}}\n reportError={reportError}\n >\n ${scaffoldAppLayout(schematic, data)}\n\n <IssuesPanel />\n </FormApp>\n );\n }\n `);\n}\n\nexport function scaffoldAppLayout(\n schematic: Schematic,\n data: ReactAppData,\n scaffoldTopBarFn: (\n data: ReactAppData,\n annexesManager?: string,\n ) => string = scaffoldTopBar,\n): string {\n const layout = reactAppLayout(schematic, data);\n\n if (layout.length === 1 && layout[0].data.currentPath === \"/\") {\n return code`\n ${scaffoldTopBarFn(data)}\n\n ${scaffoldFormPages(data, layout[0])}\n `;\n }\n\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui-kform\", name: \"Annexes\" },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"AnnexesManager\" },\n );\n\n return code`\n <Annexes>\n ${scaffoldTopBarFn(data, \"<AnnexesManager />\")}\n\n ${layout.map((annex) => scaffoldAnnex(data, annex)).join(\"\\n\\n\")}\n </Annexes>\n `;\n}\n\nfunction scaffoldTopBar(data: ReactAppData, annexesManager?: string) {\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui-kform\", name: \"TopBar\" },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"TopBarActions\" },\n { moduleName: \"./actions/Load.tsx\", name: \"Load\" },\n { moduleName: \"./actions/Save.tsx\", name: \"Save\" },\n { moduleName: \"./actions/Validate.tsx\", name: \"Validate\" },\n { moduleName: \"./actions/Submit.tsx\", name: \"Submit\" },\n );\n\n return code`\n <TopBar>${annexesManager ? `\\n ${annexesManager}\\n` : \"\"}\n <TopBarActions>\n <Load />\n <Save />\n <Validate />\n <Submit />\n </TopBarActions>\n </TopBar>\n `;\n}\n\nfunction scaffoldAnnex(data: ReactAppData, annex: LayoutAnnex): string {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"Annex\",\n });\n\n return code`\n <Annex path=\"${annex.data.currentPath}\" title=\"${sentenceCase(annex.schematic.name!)}\"${\n annex.formPages.length === 1 &&\n annex.schematic === annex.formPages[0].schematic\n ? \" documentTitle={null}\"\n : \"\"\n }>\n ${scaffoldFormPages(data, annex)}\n </Annex>\n `;\n}\n\nfunction scaffoldFormPages(data: ReactAppData, annex: LayoutAnnex) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"FormPages\",\n });\n\n let formPagesNavigation = \"\";\n if (annex.formPages.length > 1) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"FormPagesNavigation\",\n });\n formPagesNavigation = \"\\n <FormPagesNavigation />\\n\";\n }\n\n return code`\n <FormPages>${formPagesNavigation}\n ${annex.formPages.map((formPage) => scaffoldFormPage(data, annex, formPage)).join(\"\\n\\n\")}\n </FormPages>\n `;\n}\n\nfunction scaffoldFormPage(\n data: ReactAppData,\n annex: LayoutAnnex,\n formPage: LayoutFormPage,\n) {\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui-kform\", name: \"FormPage\" },\n {\n moduleName: `./${joinPaths(\n formPage.data.currentDir!.slice(\n data.currentDir!.length + (data.currentDir!.endsWith(\"/\") ? 0 : 1),\n ),\n formPage.schematic.name,\n )}.tsx`,\n name: formPage.schematic.name!,\n },\n );\n\n let issueMessagesProp = \"\";\n if (shouldScaffoldIssueMessages(data) && formPage.data.currentPath !== \"/\") {\n data.currentFile.imports.push({\n moduleName: `./${joinPaths(\n formPage.data.currentDir!.slice(\n data.currentDir!.length + (data.currentDir!.endsWith(\"/\") ? 0 : 1),\n ),\n formPage.schematic.name,\n )}IssueMessages.tsx`,\n name: `${constantCase(formPage.schematic.name!)}_ISSUE_MESSAGES`,\n });\n issueMessagesProp = ` issueMessages={${constantCase(formPage.schematic.name!)}_ISSUE_MESSAGES}`;\n }\n\n const pathProp =\n annex.schematic === formPage.schematic\n ? \"\"\n : ` path=\"${formPage.data.currentPath!.slice(\n annex.data.currentPath!.length +\n (annex.data.currentPath!.endsWith(\"/\") ? 0 : 1),\n )}\"`;\n const documentTitleProp =\n formPage.data.currentPath === \"/\" ? \" documentTitle={null}\" : \"\";\n\n return code`\n <FormPage${pathProp} title=\"${sentenceCase(\n formPage.schematic.name!,\n )}\" code=\"${formPage.schematic.name?.[0].toUpperCase()}\"${\n documentTitleProp\n }${issueMessagesProp}>\n <${formPage.schematic.name!} />\n </FormPage>\n `;\n}\n","export default \"import { createContext, useContext } from \\\"react\\\";\\nimport { <%= formClass %>ExternalContexts } from \\\"<%= kmpModuleName %>\\\";\\n\\nexport interface <%= formClass %>ContextValue {\\n externalContexts: <%= formClass %>ExternalContexts;\\n}\\n\\nexport const <%= formClass %>Context = createContext<<%= formClass %>ContextValue>(null as never);\\n\\nexport function use<%= formClass %>Context(): <%= formClass %>ContextValue {\\n return useContext(<%= formClass %>Context);\\n}\\n\"","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport contextTsEjs from \"../templates/react-app/src/Context.ts.ejs?raw\";\n\nexport function scaffoldAppContext(schematic: Schematic, data: ReactAppData) {\n const ejsData = {\n kmpModuleName: data.kmpModuleName ?? `${kebabCase(schematic.name!)}-shared`,\n formClass: schematic.name,\n };\n\n addEjsTemplateFile(\n data,\n `${schematic.name}Context.ts`,\n contextTsEjs,\n ejsData,\n );\n}\n","export default \"package <%= filePackage %>\\n\\nimport kotlin.js.JsExport\\nimport kotlin.jvm.JvmOverloads\\nimport kotlinx.serialization.Serializable\\n\\n@JsExport\\n@Serializable\\nenum class <%= formClass %>FormMode {\\n /** Submitting a new form. */\\n NEW,\\n /** Reading a previously submitted form (`initialValue` should be provided as context). */\\n READ,\\n /** Replacing a previously submitted form (`initialValue` should be provided as context). */\\n REPLACE,\\n}\\n\\n@JsExport\\n@Serializable\\ndata class <%= formClass %>ExternalContexts @JvmOverloads constructor(\\n val mode: <%= formClass %>FormMode = <%= formClass %>FormMode.NEW,\\n val initialValue: <%= formClass %>? = null,\\n) {\\n fun toMap(): Map<String, Any?> = mapOf(\\\"mode\\\" to mode, \\\"initialValue\\\" to initialValue)\\n}\\n\"","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\n\nimport type { KtData } from \"../kotlin/KtData.ts\";\nimport externalContextsKt from \"../templates/shared/src/commonMain/kotlin/ExternalContexts.kt.ejs?raw\";\n\nexport function scaffoldExternalContexts(\n schematic: Schematic,\n data: KtData,\n): void {\n const ejsData = {\n filePackage: data.currentPackage,\n formClass: schematic.name,\n };\n\n addEjsTemplateFile(\n data,\n `${schematic.name}ExternalContexts.kt`,\n externalContextsKt,\n ejsData,\n );\n}\n","export default \"allprojects {\\n repositories { mavenCentral() }\\n}\\n\"","export default \"group=<%= gradlePropertiesGroup %>\\nversion=0.0.1\\n\\norg.gradle.caching=true\\norg.gradle.configuration-cache=true\\n\"","export default \"[versions]\\n# Plugins\\nkotlin = \\\"2.2.21\\\"\\nnodeGradle = \\\"7.1.0\\\"\\n# Libraries\\nkotlinxCoroutines = \\\"1.10.2\\\"\\nkform = \\\"<%= kFormVersion %>\\\"\\n<%_ if (includeKotlinxDatetime) { -%>\\nkotlinxDatetime = \\\"0.7.1\\\"\\n<%_ } -%>\\n<%_ if (serializationFormat === \\\"json\\\") { -%>\\nkotlinxSerialization = \\\"1.9.0\\\"\\n<%_ } -%>\\n<%_ if (includeKtMath) { -%>\\nktMath = \\\"0.10.2\\\"\\n<%_ } -%>\\nslf4j = \\\"2.0.17\\\"\\n<%_ if (serializationFormat === \\\"xml\\\") { -%>\\nxmlutil = \\\"0.91.1\\\"\\n<%_ } -%>\\n<%_ if (includeKotlinxDatetime) { -%>\\n# npm libraries\\njsJodaTimezone = \\\"2.22.0\\\"\\n<%_ } -%>\\n# Runtimes\\njvmToolchain = \\\"<%= jvmToolchainVersion %>\\\"\\nnodejs = \\\"<%= nodejsVersion %>\\\"\\n\\n[libraries]\\nkform = { module = \\\"tech.ostack:kform\\\", version.ref = \\\"kform\\\" }\\nkform-jsBindings = { module = \\\"tech.ostack:kform-js-bindings\\\", version.ref = \\\"kform\\\" }\\nkotlinxCoroutines-test = { module = \\\"org.jetbrains.kotlinx:kotlinx-coroutines-test\\\", version.ref = \\\"kotlinxCoroutines\\\" }\\n<%_ if (includeKotlinxDatetime) { -%>\\nkotlinxDatetime = { module = \\\"org.jetbrains.kotlinx:kotlinx-datetime\\\", version.ref = \\\"kotlinxDatetime\\\" }\\n<%_ } -%>\\n<%_ if (serializationFormat === \\\"json\\\") { -%>\\nkotlinxSerialization-json = { module = \\\"org.jetbrains.kotlinx:kotlinx-serialization-json\\\", version.ref = \\\"kotlinxSerialization\\\" }\\n<%_ } -%>\\n<%_ if (includeKtMath) { -%>\\nktMath = { module = \\\"io.github.gciatto:kt-math\\\", version.ref = \\\"ktMath\\\" }\\n<%_ } -%>\\nslf4j-simple = { module = \\\"org.slf4j:slf4j-simple\\\", version.ref = \\\"slf4j\\\" }\\n<%_ if (serializationFormat === \\\"xml\\\") { -%>\\nxmlutil-serialization = { module = \\\"io.github.pdvrieze.xmlutil:serialization\\\", version.ref = \\\"xmlutil\\\" }\\n<%_ } -%>\\n\\n[plugins]\\nkotlin-multiplatform = { id = \\\"org.jetbrains.kotlin.multiplatform\\\", version.ref = \\\"kotlin\\\" }\\nkotlin-serialization = { id = \\\"org.jetbrains.kotlin.plugin.serialization\\\", version.ref = \\\"kotlin\\\" }\\nnodeGradle = { id = \\\"com.github.node-gradle.node\\\", version.ref = \\\"nodeGradle\\\" }\\n\"","export default \"import com.github.gradle.node.npm.task.NpmTask\\n\\nplugins {\\n alias(libs.plugins.nodeGradle)\\n base\\n}\\n\\nval isCI = System.getenv(\\\"CI\\\") !in arrayOf(null, \\\"0\\\", \\\"false\\\")\\nnode {\\n download = true\\n version = libs.versions.nodejs.get()\\n npmInstallCommand = if (isCI) \\\"ci\\\" else \\\"install\\\"\\n}\\n\\nval sharedPackage = project(\\\":shared\\\").file(\\\"build/<%= formId %>-shared-$version.tgz\\\")\\n\\nval npmInstallShared by tasks.registering(NpmTask::class) {\\n group = \\\"build\\\"\\n dependsOn(\\\":shared:packJsPackage\\\")\\n npmCommand = listOf(\\\"install\\\", \\\"<%= formId %>-shared@file:$sharedPackage\\\")\\n\\n inputs.file(sharedPackage)\\n outputs.dir(\\\"node_modules/<%= formId %>-shared\\\")\\n}\\n\\ntasks.npmInstall {\\n dependsOn(npmInstallShared)\\n}\\n\\nval npmRunDev by tasks.registering(NpmTask::class) {\\n group = \\\"development\\\"\\n dependsOn(tasks.npmInstall)\\n npmCommand = listOf(\\\"run\\\", \\\"dev\\\")\\n}\\n\\nprivate fun NpmTask.npmRunBuild(buildReason: String) {\\n group = \\\"build\\\"\\n dependsOn(tasks.npmInstall)\\n npmCommand = listOf(\\\"run\\\", \\\"build\\\")\\n environment = mapOf(\\\"VITE_BUILD_REASON\\\" to buildReason)\\n\\n inputs.dir(\\\"src\\\")\\n inputs.file(sharedPackage)\\n inputs.file(\\\"index.html\\\")\\n inputs.file(\\\"package.json\\\")\\n inputs.file(\\\"tsconfig.json\\\")\\n inputs.file(\\\"tsconfig.app.json\\\")\\n inputs.file(\\\"tsconfig.node.json\\\")\\n inputs.file(\\\"vite.config.ts\\\")\\n outputs.dir(\\\"build/dist\\\")\\n}\\n\\nval npmRunBuild by tasks.registering(NpmTask::class) {\\n npmRunBuild(\\\"production\\\")\\n}\\n\\nval npmRunBuildPreview by tasks.registering(NpmTask::class) {\\n npmRunBuild(\\\"preview\\\")\\n}\\n\\nval npmRunPreview by tasks.registering(NpmTask::class) {\\n group = \\\"development\\\"\\n dependsOn(npmRunBuildPreview)\\n npmCommand = listOf(\\\"run\\\", \\\"preview\\\")\\n}\\n\\nval npmRunLint by tasks.registering(NpmTask::class) {\\n group = \\\"verification\\\"\\n dependsOn(tasks.npmInstall)\\n npmCommand = listOf(\\\"run\\\", \\\"lint\\\")\\n\\n inputs.dir(\\\"src\\\")\\n inputs.file(\\\"eslint.config.js\\\")\\n inputs.file(\\\"package.json\\\")\\n inputs.file(\\\"tsconfig.json\\\")\\n inputs.file(\\\"tsconfig.app.json\\\")\\n inputs.file(\\\"tsconfig.node.json\\\")\\n outputs.upToDateWhen { true }\\n}\\n\\ntasks.assemble {\\n dependsOn(npmRunBuild)\\n}\\n\"","export default \"plugins {\\n id(\\\"org.gradle.toolchains.foojay-resolver-convention\\\") version \\\"1.0.0\\\"\\n}\\n\\nrootProject.name = \\\"<%= formId %>\\\"\\n\\ninclude(\\\"shared\\\", \\\"react-app\\\")\\n\"","export default \"import com.github.gradle.node.npm.task.NpmTask\\n\\nplugins {\\n alias(libs.plugins.kotlin.multiplatform)\\n alias(libs.plugins.kotlin.serialization)\\n alias(libs.plugins.nodeGradle)\\n}\\n\\nkotlin {\\n jvmToolchain(libs.versions.jvmToolchain.get().toInt())\\n jvm {\\n testRuns[\\\"test\\\"].executionTask.configure { useJUnitPlatform() }\\n }\\n js {\\n compilerOptions {\\n target = \\\"es2015\\\"\\n freeCompilerArgs.add(\\\"-Xes-long-as-bigint\\\")\\n freeCompilerArgs.add(\\\"-Xwarning-level=NON_EXPORTABLE_TYPE:disabled\\\")\\n }\\n binaries.library()\\n browser { testTask { useMocha() } }\\n generateTypeScriptDefinitions()\\n }\\n\\n sourceSets {\\n all {\\n // Opt in to the experimental `JsExport` annotation\\n languageSettings.optIn(\\\"kotlin.js.ExperimentalJsExport\\\")\\n }\\n\\n commonMain.dependencies {\\n api(libs.kform)\\n <%_ if (includeKotlinxDatetime) { -%>\\n api(libs.kotlinxDatetime)\\n <%_ } -%>\\n <%_ if (serializationFormat === \\\"json\\\") { -%>\\n api(libs.kotlinxSerialization.json)\\n <%_ } -%>\\n <%_ if (includeKtMath) { -%>\\n api(libs.ktMath)\\n <%_ } -%>\\n <%_ if (serializationFormat === \\\"xml\\\") { -%>\\n api(libs.xmlutil.serialization)\\n <%_ } -%>\\n }\\n commonTest.dependencies {\\n implementation(kotlin(\\\"test\\\"))\\n implementation(libs.kotlinxCoroutines.test)\\n }\\n jvmTest.dependencies {\\n implementation(libs.slf4j.simple)\\n }\\n jsMain.dependencies {\\n implementation(libs.kform.jsBindings)\\n <%_ if (includeKotlinxDatetime) { -%>\\n implementation(npm(\\\"@js-joda/timezone\\\", libs.versions.jsJodaTimezone.get()))\\n <%_ } -%>\\n }\\n }\\n}\\n\\nnode {\\n download = true\\n version = libs.versions.nodejs.get()\\n}\\n\\n// Packs the result of the JS compilation, for consumption by the React app\\nval packJsPackage by tasks.registering(NpmTask::class) {\\n group = \\\"build\\\"\\n dependsOn(\\\"jsBrowserProductionLibraryDistribution\\\")\\n\\n val libraryDir = \\\"build/dist/js/productionLibrary\\\"\\n npmCommand = listOf(\\\"pack\\\", libraryDir, \\\"--pack-destination\\\", \\\"build\\\")\\n\\n inputs.dir(libraryDir)\\n outputs.file(\\\"build/<%= formId %>-shared-$version.tgz\\\")\\n}\\n\"","export default \"package <%= filePackage %>\\n\\n// See: https://github.com/Kotlin/kotlinx-datetime?tab=readme-ov-file#note-about-time-zones-in-js\\n@JsModule(\\\"@js-joda/timezone\\\")\\n@JsNonModule\\nexternal object JsJodaTimeZoneModule\\n\\n@JsExport\\nval jsJodaTz = JsJodaTimeZoneModule\\n\"","import {\n addEjsTemplateFile,\n addTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { capitalCase, kebabCase } from \"change-case\";\n\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport buildGradleKts from \"../templates/build.gradle.kts?raw\";\nimport gradlePropertiesEjs from \"../templates/gradle.properties.ejs?raw\";\nimport libsVersionsTomlEjs from \"../templates/gradle/libs.versions.toml.ejs?raw\";\nimport reactAppBuildGradleKtsEjs from \"../templates/react-app/build.gradle.kts.ejs?raw\";\nimport settingsGradleKtsEjs from \"../templates/settings.gradle.kts.ejs?raw\";\nimport sharedBuildGradleKtsEjs from \"../templates/shared/build.gradle.kts.ejs?raw\";\nimport jsJodaTimeZoneKtEjs from \"../templates/shared/src/jsMain/kotlin/JsJodaTimeZone.kt.ejs?raw\";\n\nexport const DEFAULT_JVM_TOOLCHAIN_VERSION = \"17\";\nexport const DEFAULT_NODEJS_VERSION = \"22.20.0\";\n\nexport function scaffoldGradleProject(\n schematic: Schematic,\n data: ScaffoldingData,\n) {\n const ejsData = {\n gradlePropertiesGroup: data.gradlePropertiesGroup ?? data.currentPackage,\n filePackage: data.currentPackage,\n formId: kebabCase(schematic.name!),\n formTitle: capitalCase(schematic.name!),\n kFormVersion: import.meta.env.VITE_KFORM_VERSION,\n serializationFormat: data.serializationFormat ?? \"json\",\n includeKotlinxDatetime:\n data.includeKotlinxDatetime ?? usesKotlinxDatetime(schematic, data),\n includeKtMath: data.includeKtMath ?? usesKtMath(schematic),\n jvmToolchainVersion:\n data.jvmToolchainVersion ?? DEFAULT_JVM_TOOLCHAIN_VERSION,\n nodejsVersion: data.nodejsVersion ?? DEFAULT_NODEJS_VERSION,\n };\n\n addEjsTemplateFile(data, \"gradle.properties\", gradlePropertiesEjs, ejsData);\n addEjsTemplateFile(\n data,\n \"settings.gradle.kts\",\n settingsGradleKtsEjs,\n ejsData,\n );\n addEjsTemplateFile(\n data,\n \"gradle/libs.versions.toml\",\n libsVersionsTomlEjs,\n ejsData,\n );\n addTemplateFile(data, \"build.gradle.kts\", buildGradleKts);\n addEjsTemplateFile(\n data,\n \"shared/build.gradle.kts\",\n sharedBuildGradleKtsEjs,\n ejsData,\n );\n if (ejsData.includeKotlinxDatetime) {\n addEjsTemplateFile(\n data,\n \"shared/src/jsMain/kotlin/JsJodaTimeZone.kt\",\n jsJodaTimeZoneKtEjs,\n ejsData,\n );\n }\n addEjsTemplateFile(\n data,\n \"react-app/build.gradle.kts\",\n reactAppBuildGradleKtsEjs,\n ejsData,\n );\n}\n\nfunction usesKotlinxDatetime(\n schematic: Schematic,\n data: ScaffoldingData,\n): boolean {\n const schematicKind = data.schematicKinds.get(schematic.kind);\n return (\n schematicKind?.package === \"kotlinx.datetime\" ||\n schematic.children?.some((child) => usesKotlinxDatetime(child, data)) ===\n true\n );\n}\n\nfunction usesKtMath(schematic: Schematic): boolean {\n return (\n [\"BigInteger\", \"BigDecimal\"].includes(schematic.kind) ||\n schematic.children?.some((child) => usesKtMath(child)) === true\n );\n}\n","export default \"distributionBase=GRADLE_USER_HOME\\ndistributionPath=wrapper/dists\\ndistributionUrl=https\\\\://services.gradle.org/distributions/gradle-8.14.2-bin.zip\\nnetworkTimeout=10000\\nvalidateDistributionUrl=true\\nzipStoreBase=GRADLE_USER_HOME\\nzipStorePath=wrapper/dists\\n\"","export default \"@rem\\r\\n@rem Copyright 2015 the original author or authors.\\r\\n@rem\\r\\n@rem Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\r\\n@rem you may not use this file except in compliance with the License.\\r\\n@rem You may obtain a copy of the License at\\r\\n@rem\\r\\n@rem https://www.apache.org/licenses/LICENSE-2.0\\r\\n@rem\\r\\n@rem Unless required by applicable law or agreed to in writing, software\\r\\n@rem distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\r\\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\r\\n@rem See the License for the specific language governing permissions and\\r\\n@rem limitations under the License.\\r\\n@rem\\r\\n@rem SPDX-License-Identifier: Apache-2.0\\r\\n@rem\\r\\n\\r\\n@if \\\"%DEBUG%\\\"==\\\"\\\" @echo off\\r\\n@rem ##########################################################################\\r\\n@rem\\r\\n@rem Gradle startup script for Windows\\r\\n@rem\\r\\n@rem ##########################################################################\\r\\n\\r\\n@rem Set local scope for the variables with windows NT shell\\r\\nif \\\"%OS%\\\"==\\\"Windows_NT\\\" setlocal\\r\\n\\r\\nset DIRNAME=%~dp0\\r\\nif \\\"%DIRNAME%\\\"==\\\"\\\" set DIRNAME=.\\r\\n@rem This is normally unused\\r\\nset APP_BASE_NAME=%~n0\\r\\nset APP_HOME=%DIRNAME%\\r\\n\\r\\n@rem Resolve any \\\".\\\" and \\\"..\\\" in APP_HOME to make it shorter.\\r\\nfor %%i in (\\\"%APP_HOME%\\\") do set APP_HOME=%%~fi\\r\\n\\r\\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\\r\\nset DEFAULT_JVM_OPTS=\\\"-Xmx64m\\\" \\\"-Xms64m\\\"\\r\\n\\r\\n@rem Find java.exe\\r\\nif defined JAVA_HOME goto findJavaFromJavaHome\\r\\n\\r\\nset JAVA_EXE=java.exe\\r\\n%JAVA_EXE% -version >NUL 2>&1\\r\\nif %ERRORLEVEL% equ 0 goto execute\\r\\n\\r\\necho. 1>&2\\r\\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2\\r\\necho. 1>&2\\r\\necho Please set the JAVA_HOME variable in your environment to match the 1>&2\\r\\necho location of your Java installation. 1>&2\\r\\n\\r\\ngoto fail\\r\\n\\r\\n:findJavaFromJavaHome\\r\\nset JAVA_HOME=%JAVA_HOME:\\\"=%\\r\\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\\r\\n\\r\\nif exist \\\"%JAVA_EXE%\\\" goto execute\\r\\n\\r\\necho. 1>&2\\r\\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2\\r\\necho. 1>&2\\r\\necho Please set the JAVA_HOME variable in your environment to match the 1>&2\\r\\necho location of your Java installation. 1>&2\\r\\n\\r\\ngoto fail\\r\\n\\r\\n:execute\\r\\n@rem Setup the command line\\r\\n\\r\\nset CLASSPATH=\\r\\n\\r\\n\\r\\n@rem Execute Gradle\\r\\n\\\"%JAVA_EXE%\\\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \\\"-Dorg.gradle.appname=%APP_BASE_NAME%\\\" -classpath \\\"%CLASSPATH%\\\" -jar \\\"%APP_HOME%\\\\gradle\\\\wrapper\\\\gradle-wrapper.jar\\\" %*\\r\\n\\r\\n:end\\r\\n@rem End local scope for the variables with windows NT shell\\r\\nif %ERRORLEVEL% equ 0 goto mainEnd\\r\\n\\r\\n:fail\\r\\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\\r\\nrem the _cmd.exe /c_ return code!\\r\\nset EXIT_CODE=%ERRORLEVEL%\\r\\nif %EXIT_CODE% equ 0 set EXIT_CODE=1\\r\\nif not \\\"\\\"==\\\"%GRADLE_EXIT_CONSOLE%\\\" exit %EXIT_CODE%\\r\\nexit /b %EXIT_CODE%\\r\\n\\r\\n:mainEnd\\r\\nif \\\"%OS%\\\"==\\\"Windows_NT\\\" endlocal\\r\\n\\r\\n:omega\\r\\n\"","export default \"#!/bin/sh\\n\\n#\\n# Copyright © 2015-2021 the original authors.\\n#\\n# Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n# you may not use this file except in compliance with the License.\\n# You may obtain a copy of the License at\\n#\\n# https://www.apache.org/licenses/LICENSE-2.0\\n#\\n# Unless required by applicable law or agreed to in writing, software\\n# distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n# See the License for the specific language governing permissions and\\n# limitations under the License.\\n#\\n# SPDX-License-Identifier: Apache-2.0\\n#\\n\\n##############################################################################\\n#\\n# Gradle start up script for POSIX generated by Gradle.\\n#\\n# Important for running:\\n#\\n# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is\\n# noncompliant, but you have some other compliant shell such as ksh or\\n# bash, then to run this script, type that shell name before the whole\\n# command line, like:\\n#\\n# ksh Gradle\\n#\\n# Busybox and similar reduced shells will NOT work, because this script\\n# requires all of these POSIX shell features:\\n# * functions;\\n# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,\\n# «${var#prefix}», «${var%suffix}», and «$( cmd )»;\\n# * compound commands having a testable exit status, especially «case»;\\n# * various built-in commands including «command», «set», and «ulimit».\\n#\\n# Important for patching:\\n#\\n# (2) This script targets any POSIX shell, so it avoids extensions provided\\n# by Bash, Ksh, etc; in particular arrays are avoided.\\n#\\n# The \\\"traditional\\\" practice of packing multiple parameters into a\\n# space-separated string is a well documented source of bugs and security\\n# problems, so this is (mostly) avoided, by progressively accumulating\\n# options in \\\"$@\\\", and eventually passing that to Java.\\n#\\n# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,\\n# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;\\n# see the in-line comments for details.\\n#\\n# There are tweaks for specific operating systems such as AIX, CygWin,\\n# Darwin, MinGW, and NonStop.\\n#\\n# (3) This script is generated from the Groovy template\\n# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\\n# within the Gradle project.\\n#\\n# You can find Gradle at https://github.com/gradle/gradle/.\\n#\\n##############################################################################\\n\\n# Attempt to set APP_HOME\\n\\n# Resolve links: $0 may be a link\\napp_path=$0\\n\\n# Need this for daisy-chained symlinks.\\nwhile\\n APP_HOME=${app_path%\\\"${app_path##*/}\\\"} # leaves a trailing /; empty if no leading path\\n [ -h \\\"$app_path\\\" ]\\ndo\\n ls=$( ls -ld \\\"$app_path\\\" )\\n link=${ls#*' -> '}\\n case $link in #(\\n /*) app_path=$link ;; #(\\n *) app_path=$APP_HOME$link ;;\\n esac\\ndone\\n\\n# This is normally unused\\n# shellcheck disable=SC2034\\nAPP_BASE_NAME=${0##*/}\\n# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\\nAPP_HOME=$( cd -P \\\"${APP_HOME:-./}\\\" > /dev/null && printf '%s\\\\n' \\\"$PWD\\\" ) || exit\\n\\n# Use the maximum available, or set MAX_FD != -1 to use that value.\\nMAX_FD=maximum\\n\\nwarn () {\\n echo \\\"$*\\\"\\n} >&2\\n\\ndie () {\\n echo\\n echo \\\"$*\\\"\\n echo\\n exit 1\\n} >&2\\n\\n# OS specific support (must be 'true' or 'false').\\ncygwin=false\\nmsys=false\\ndarwin=false\\nnonstop=false\\ncase \\\"$( uname )\\\" in #(\\n CYGWIN* ) cygwin=true ;; #(\\n Darwin* ) darwin=true ;; #(\\n MSYS* | MINGW* ) msys=true ;; #(\\n NONSTOP* ) nonstop=true ;;\\nesac\\n\\nCLASSPATH=\\\"\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\"\\\"\\n\\n\\n# Determine the Java command to use to start the JVM.\\nif [ -n \\\"$JAVA_HOME\\\" ] ; then\\n if [ -x \\\"$JAVA_HOME/jre/sh/java\\\" ] ; then\\n # IBM's JDK on AIX uses strange locations for the executables\\n JAVACMD=$JAVA_HOME/jre/sh/java\\n else\\n JAVACMD=$JAVA_HOME/bin/java\\n fi\\n if [ ! -x \\\"$JAVACMD\\\" ] ; then\\n die \\\"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\\n\\nPlease set the JAVA_HOME variable in your environment to match the\\nlocation of your Java installation.\\\"\\n fi\\nelse\\n JAVACMD=java\\n if ! command -v java >/dev/null 2>&1\\n then\\n die \\\"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\\n\\nPlease set the JAVA_HOME variable in your environment to match the\\nlocation of your Java installation.\\\"\\n fi\\nfi\\n\\n# Increase the maximum file descriptors if we can.\\nif ! \\\"$cygwin\\\" && ! \\\"$darwin\\\" && ! \\\"$nonstop\\\" ; then\\n case $MAX_FD in #(\\n max*)\\n # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.\\n # shellcheck disable=SC2039,SC3045\\n MAX_FD=$( ulimit -H -n ) ||\\n warn \\\"Could not query maximum file descriptor limit\\\"\\n esac\\n case $MAX_FD in #(\\n '' | soft) :;; #(\\n *)\\n # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.\\n # shellcheck disable=SC2039,SC3045\\n ulimit -n \\\"$MAX_FD\\\" ||\\n warn \\\"Could not set maximum file descriptor limit to $MAX_FD\\\"\\n esac\\nfi\\n\\n# Collect all arguments for the java command, stacking in reverse order:\\n# * args from the command line\\n# * the main class name\\n# * -classpath\\n# * -D...appname settings\\n# * --module-path (only if needed)\\n# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.\\n\\n# For Cygwin or MSYS, switch paths to Windows format before running java\\nif \\\"$cygwin\\\" || \\\"$msys\\\" ; then\\n APP_HOME=$( cygpath --path --mixed \\\"$APP_HOME\\\" )\\n CLASSPATH=$( cygpath --path --mixed \\\"$CLASSPATH\\\" )\\n\\n JAVACMD=$( cygpath --unix \\\"$JAVACMD\\\" )\\n\\n # Now convert the arguments - kludge to limit ourselves to /bin/sh\\n for arg do\\n if\\n case $arg in #(\\n -*) false ;; # don't mess with options #(\\n /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath\\n [ -e \\\"$t\\\" ] ;; #(\\n *) false ;;\\n esac\\n then\\n arg=$( cygpath --path --ignore --mixed \\\"$arg\\\" )\\n fi\\n # Roll the args list around exactly as many times as the number of\\n # args, so each arg winds up back in the position where it started, but\\n # possibly modified.\\n #\\n # NB: a `for` loop captures its iteration list before it begins, so\\n # changing the positional parameters here affects neither the number of\\n # iterations, nor the values presented in `arg`.\\n shift # remove old arg\\n set -- \\\"$@\\\" \\\"$arg\\\" # push replacement arg\\n done\\nfi\\n\\n\\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\\nDEFAULT_JVM_OPTS='\\\"-Xmx64m\\\" \\\"-Xms64m\\\"'\\n\\n# Collect all arguments for the java command:\\n# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\\n# and any embedded shellness will be escaped.\\n# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\\n# treated as '${Hostname}' itself on the command line.\\n\\nset -- \\\\\\n \\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\" \\\\\\n -classpath \\\"$CLASSPATH\\\" \\\\\\n -jar \\\"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\\\" \\\\\\n \\\"$@\\\"\\n\\n# Stop when \\\"xargs\\\" is not available.\\nif ! command -v xargs >/dev/null 2>&1\\nthen\\n die \\\"xargs is not available\\\"\\nfi\\n\\n# Use \\\"xargs\\\" to parse quoted args.\\n#\\n# With -n1 it outputs one arg per line, with the quotes and backslashes removed.\\n#\\n# In Bash we could simply go:\\n#\\n# readarray ARGS < <( xargs -n1 <<<\\\"$var\\\" ) &&\\n# set -- \\\"${ARGS[@]}\\\" \\\"$@\\\"\\n#\\n# but POSIX shell has neither arrays nor command substitution, so instead we\\n# post-process each arg (as a line of input to sed) to backslash-escape any\\n# character that might be a shell metacharacter, then use eval to reverse\\n# that process (while maintaining the separation between arguments), and wrap\\n# the whole thing up as a single \\\"set\\\" statement.\\n#\\n# This will of course break if any of these variables contains a newline or\\n# an unmatched quote.\\n#\\n\\neval \\\"set -- $(\\n printf '%s\\\\n' \\\"$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\\\" |\\n xargs -n1 |\\n sed ' s~[^-[:alnum:]+,./:=@_]~\\\\\\\\&~g; ' |\\n tr '\\\\n' ' '\\n )\\\" '\\\"$@\\\"'\\n\\nexec \\\"$JAVACMD\\\" \\\"$@\\\"\\n\"","import { addTemplateFile, type Schematic } from \"@ostack.tech/kform-scaffolder\";\n\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport gradleWrapperJar from \"../templates/gradle/wrapper/gradle-wrapper.jar?base64\";\nimport gradleWrapperProperties from \"../templates/gradle/wrapper/gradle-wrapper.properties?raw\";\nimport gradlewBat from \"../templates/gradlew.bat?raw\";\nimport gradlew from \"../templates/gradlew?raw\";\n\nexport function scaffoldGradleWrapper(\n _schematic: Schematic,\n data: ScaffoldingData,\n) {\n // Gradle\n addTemplateFile(data, \"gradlew\", gradlew, { executable: true });\n addTemplateFile(data, \"gradlew.bat\", gradlewBat);\n addTemplateFile(data, \"gradle/wrapper/gradle-wrapper.jar\", gradleWrapperJar, {\n base64: true,\n });\n addTemplateFile(\n data,\n \"gradle/wrapper/gradle-wrapper.properties\",\n gradleWrapperProperties,\n );\n}\n","import {\n code,\n joinPaths,\n type Schematic,\n type TsFile,\n tsFile,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\n\nexport function scaffoldMain(schematic: Schematic, data: ReactAppData) {\n const fileName = joinPaths(data.currentDir, \"main.tsx\");\n let file = data.files.get(fileName) as TsFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = tsFile()));\n }\n scaffoldMainDeclarations(schematic, {\n kmpModuleName: `${kebabCase(schematic.name!)}-shared`,\n ...data,\n currentFile: file,\n });\n}\n\nfunction scaffoldMainDeclarations(schematic: Schematic, data: ReactAppData) {\n data.currentFile.imports.push(\n { moduleName: \"./index.scss\" },\n { moduleName: \"react\", name: \"StrictMode\" },\n { moduleName: \"react-dom/client\", name: \"createRoot\" },\n {\n moduleName: data.kmpModuleName!,\n name: `decode${schematic.name}ExternalContextsFromString`,\n },\n {\n moduleName: `./${schematic.name}Context.ts`,\n name: `${schematic.name}Context`,\n },\n {\n moduleName: `./${schematic.name!}App.tsx`,\n name: `${schematic.name!}App`,\n },\n );\n\n data.currentFile.declarations.push(code`\n export function renderRoot(encodedExternalContexts: string) {\n createRoot(document.getElementById(\"${kebabCase(schematic.name!)}-app-root\")!).render(\n <StrictMode>\n <${schematic.name}Context.Provider\n value={{\n externalContexts: decode${schematic.name}ExternalContextsFromString(\n encodedExternalContexts,\n ),\n }}\n >\n <${schematic.name!}App />\n </${schematic.name}Context.Provider>\n </StrictMode>,\n );\n }\n `);\n}\n","export default \"# http://editorconfig.org\\nroot = true\\n\\n[*]\\ncharset = utf-8\\nend_of_line = lf\\nindent_size = 2\\nindent_style = space\\ninsert_final_newline = true\\nmax_line_length = 80\\ntrim_trailing_whitespace = true\\n\\n[*.bat]\\nend_of_line = crlf\\n\\n[{*.kt,*.kts,*.md}]\\nindent_size = 4\\nmax_line_length = 100\\n\"","export default \"* text=auto eol=lf\\n*.bat text eol=crlf\\n\"","export default \"# Gradle\\n.gradle/\\nbuild/\\n!**/src/**/build/\\n\\n# Kotlin\\n.kotlin/\\n\\n# Node.js\\nnode_modules/\\n.npmrc\\n\\n# Typescript\\n*.tsbuildinfo\\n\\n# Local env files\\n.env*.local\\n\\n# Logs\\nlogs\\n*.log\\n\\n# IDEs and editors\\n.vscode/\\n.idea/\\n.project\\n.classpath\\n.c9/\\n*.launch\\n.settings/\\n*.sublime-workspace\\nout/\\n!**/src/**/out/\\n\\n# Misc\\n.DS_Store\\n*.pem\\n\"","import { addTemplateFile, type Schematic } from \"@ostack.tech/kform-scaffolder\";\n\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport editorconfig from \"../templates/_editorconfig?raw\";\nimport gitattributes from \"../templates/_gitattributes?raw\";\nimport gitignore from \"../templates/_gitignore?raw\";\n\nexport function scaffoldProjectMisc(\n _schematic: Schematic,\n data: ScaffoldingData,\n) {\n addTemplateFile(data, \".gitignore\", gitignore);\n addTemplateFile(data, \".gitattributes\", gitattributes);\n addTemplateFile(data, \".editorconfig\", editorconfig);\n}\n","export default \"package <%= filePackage %>\\n\\nimport kotlin.js.JsExport\\nimport kotlin.jvm.JvmOverloads\\nimport kotlinx.serialization.SerialName\\nimport kotlinx.serialization.Serializable\\nimport tech.ostack.kform.LocatedValidationIssue\\n\\n@JsExport\\n@Serializable\\nsealed interface <%= formClass %>SubmitResponse\\n\\n@JsExport\\n@Serializable\\n@SerialName(\\\"success\\\")\\nclass <%= formClass %>SubmitSuccess(val redirectTo: String) : <%= formClass %>SubmitResponse\\n\\n@JsExport\\n@Serializable\\n@SerialName(\\\"error\\\")\\nclass <%= formClass %>SubmitError @JvmOverloads constructor(override val message: String? = null) :\\n Throwable(message), <%= formClass %>SubmitResponse\\n\\n@JsExport\\n@Serializable\\n@SerialName(\\\"validationError\\\")\\nclass <%= formClass %>SubmitValidationError(val issues: List<LocatedValidationIssue>) :\\n <%= formClass %>SubmitResponse\\n\"","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\n\nimport type { KtData } from \"../kotlin/KtData.ts\";\nimport responsesKt from \"../templates/shared/src/commonMain/kotlin/Responses.kt.ejs?raw\";\n\nexport function scaffoldResponses(schematic: Schematic, data: KtData): void {\n const ejsData = {\n filePackage: data.currentPackage,\n formClass: schematic.name,\n };\n\n addEjsTemplateFile(\n data,\n `${schematic.name}Responses.kt`,\n responsesKt,\n ejsData,\n );\n}\n","export default \"@use \\\"@ostack.tech/ui/scss\\\" as o-ui;\\n@use \\\"@ostack.tech/ui-kform/scss\\\" as o-ui-kform;\\n\"","import { addTemplateFile, type Schematic } from \"@ostack.tech/kform-scaffolder\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport indexScss from \"../templates/react-app/src/index.scss?raw\";\n\nexport function scaffoldStyles(_schematic: Schematic, data: ReactAppData) {\n addTemplateFile(data, \"index.scss\", indexScss);\n}\n","export default \"import js from \\\"@eslint/js\\\";\\nimport { defineConfig, globalIgnores } from \\\"eslint/config\\\";\\nimport reactHooks from \\\"eslint-plugin-react-hooks\\\";\\nimport reactRefresh from \\\"eslint-plugin-react-refresh\\\";\\nimport globals from \\\"globals\\\";\\nimport tseslint from \\\"typescript-eslint\\\";\\n\\nexport default defineConfig([\\n globalIgnores([\\\".gradle\\\", \\\"build\\\"]),\\n {\\n files: [\\\"**/*.{ts,tsx}\\\"],\\n extends: [\\n js.configs.recommended,\\n tseslint.configs.recommended,\\n reactHooks.configs.flat.recommended,\\n reactRefresh.configs.vite,\\n ],\\n languageOptions: {\\n ecmaVersion: 2020,\\n globals: globals.browser,\\n },\\n },\\n]);\\n\"","export default \"<!doctype html>\\n<html lang=\\\"en\\\">\\n <head>\\n <meta charset=\\\"UTF-8\\\" />\\n <link rel=\\\"icon\\\" type=\\\"image/svg+xml\\\" href=\\\"/vite.svg\\\" />\\n <meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\" />\\n <title><%= formTitle %></title>\\n <style>\\n body {\\n margin: 0;\\n }\\n </style>\\n </head>\\n <body>\\n <div id=\\\"<%= formId %>-app-root\\\"></div>\\n <script type=\\\"module\\\">\\n import { renderRoot } from \\\"/src/main.tsx\\\";\\n\\n renderRoot(<%- encodedExternalContexts %>);\\n </script>\\n </body>\\n</html>\\n\"","export default \"{\\n \\\"name\\\": \\\"<%= formId %>-react-app\\\",\\n \\\"private\\\": true,\\n \\\"version\\\": \\\"0.0.0\\\",\\n \\\"type\\\": \\\"module\\\",\\n \\\"scripts\\\": {\\n \\\"dev\\\": \\\"vite\\\",\\n \\\"build\\\": \\\"tsc -b && vite build\\\",\\n \\\"lint\\\": \\\"eslint .\\\",\\n \\\"preview\\\": \\\"vite preview\\\"\\n },\\n \\\"dependencies\\\": {\\n \\\"@fortawesome/fontawesome-svg-core\\\": \\\"<%= dependencyVersions[\\\"@fortawesome/fontawesome-svg-core\\\"] %>\\\",\\n \\\"@fortawesome/free-regular-svg-icons\\\": \\\"<%= dependencyVersions[\\\"@fortawesome/free-regular-svg-icons\\\"] %>\\\",\\n \\\"@fortawesome/free-solid-svg-icons\\\": \\\"<%= dependencyVersions[\\\"@fortawesome/free-solid-svg-icons\\\"] %>\\\",\\n \\\"@ostack.tech/kform-react\\\": \\\"~<%= kFormVersion %>\\\",\\n \\\"@ostack.tech/ui\\\": \\\"~<%= ostackUiVersion %>\\\",\\n \\\"@ostack.tech/ui-kform\\\": \\\"~<%= ostackUiVersion %>\\\",\\n \\\"date-fns\\\": \\\"<%= dependencyVersions[\\\"date-fns\\\"] %>\\\",\\n \\\"<%= formId %>-shared\\\": \\\"file:../shared/build/<%= formId %>-shared-0.0.1.tgz\\\",\\n \\\"react\\\": \\\"<%= dependencyVersions.react %>\\\",\\n \\\"react-dom\\\": \\\"<%= dependencyVersions[\\\"react-dom\\\"] %>\\\"\\n },\\n \\\"devDependencies\\\": {\\n \\\"@eslint/js\\\": \\\"<%= dependencyVersions[\\\"@eslint/js\\\"] %>\\\",\\n \\\"@types/node\\\": \\\"<%= dependencyVersions[\\\"@types/node\\\"] %>\\\",\\n \\\"@types/ostack.tech__kform\\\": \\\"npm:@ostack.tech/kform@~<%= kFormVersion %>\\\",\\n \\\"@types/react\\\": \\\"<%= dependencyVersions[\\\"@types/react\\\"] %>\\\",\\n \\\"@types/react-dom\\\": \\\"<%= dependencyVersions[\\\"@types/react-dom\\\"] %>\\\",\\n \\\"@vitejs/plugin-react\\\": \\\"<%= dependencyVersions[\\\"@vitejs/plugin-react\\\"] %>\\\",\\n \\\"eslint\\\": \\\"<%= dependencyVersions.eslint %>\\\",\\n \\\"eslint-plugin-react-hooks\\\": \\\"<%= dependencyVersions[\\\"eslint-plugin-react-hooks\\\"] %>\\\",\\n \\\"eslint-plugin-react-refresh\\\": \\\"<%= dependencyVersions[\\\"eslint-plugin-react-refresh\\\"] %>\\\",\\n \\\"globals\\\": \\\"<%= dependencyVersions.globals %>\\\",\\n \\\"sass-embedded\\\": \\\"<%= dependencyVersions[\\\"sass-embedded\\\"] %>\\\",\\n \\\"typescript\\\": \\\"<%= dependencyVersions.typescript %>\\\",\\n \\\"typescript-eslint\\\": \\\"<%= dependencyVersions[\\\"typescript-eslint\\\"] %>\\\",\\n \\\"vite\\\": \\\"<%= dependencyVersions.vite %>\\\"\\n }\\n}\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" aria-hidden=\\\"true\\\" role=\\\"img\\\" class=\\\"iconify iconify--logos\\\" width=\\\"31.88\\\" height=\\\"32\\\" preserveAspectRatio=\\\"xMidYMid meet\\\" viewBox=\\\"0 0 256 257\\\"><defs><linearGradient id=\\\"IconifyId1813088fe1fbc01fb466\\\" x1=\\\"-.828%\\\" x2=\\\"57.636%\\\" y1=\\\"7.652%\\\" y2=\\\"78.411%\\\"><stop offset=\\\"0%\\\" stop-color=\\\"#41D1FF\\\"></stop><stop offset=\\\"100%\\\" stop-color=\\\"#BD34FE\\\"></stop></linearGradient><linearGradient id=\\\"IconifyId1813088fe1fbc01fb467\\\" x1=\\\"43.376%\\\" x2=\\\"50.316%\\\" y1=\\\"2.242%\\\" y2=\\\"89.03%\\\"><stop offset=\\\"0%\\\" stop-color=\\\"#FFEA83\\\"></stop><stop offset=\\\"8.333%\\\" stop-color=\\\"#FFDD35\\\"></stop><stop offset=\\\"100%\\\" stop-color=\\\"#FFA800\\\"></stop></linearGradient></defs><path fill=\\\"url(#IconifyId1813088fe1fbc01fb466)\\\" d=\\\"M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z\\\"></path><path fill=\\\"url(#IconifyId1813088fe1fbc01fb467)\\\" d=\\\"M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z\\\"></path></svg>\\n\"","export default \"{\\n \\\"compilerOptions\\\": {\\n \\\"tsBuildInfoFile\\\": \\\"./node_modules/.tmp/tsconfig.app.tsbuildinfo\\\",\\n \\\"target\\\": \\\"ES2022\\\",\\n \\\"useDefineForClassFields\\\": true,\\n \\\"lib\\\": [\\\"ES2022\\\", \\\"DOM\\\", \\\"DOM.Iterable\\\"],\\n \\\"module\\\": \\\"ESNext\\\",\\n \\\"types\\\": [\\\"vite/client\\\"],\\n \\\"skipLibCheck\\\": true,\\n\\n /* Bundler mode */\\n \\\"moduleResolution\\\": \\\"bundler\\\",\\n \\\"allowImportingTsExtensions\\\": true,\\n \\\"verbatimModuleSyntax\\\": true,\\n \\\"moduleDetection\\\": \\\"force\\\",\\n \\\"noEmit\\\": true,\\n \\\"jsx\\\": \\\"react-jsx\\\",\\n\\n /* Linting */\\n \\\"strict\\\": true,\\n \\\"noUnusedLocals\\\": true,\\n \\\"noUnusedParameters\\\": true,\\n \\\"erasableSyntaxOnly\\\": true,\\n \\\"noFallthroughCasesInSwitch\\\": true,\\n \\\"noUncheckedSideEffectImports\\\": true\\n },\\n \\\"include\\\": [\\\"src\\\"]\\n}\\n\"","export default \"{\\n \\\"files\\\": [],\\n \\\"references\\\": [\\n { \\\"path\\\": \\\"./tsconfig.app.json\\\" },\\n { \\\"path\\\": \\\"./tsconfig.node.json\\\" }\\n ]\\n}\\n\"","export default \"{\\n \\\"compilerOptions\\\": {\\n \\\"tsBuildInfoFile\\\": \\\"./node_modules/.tmp/tsconfig.node.tsbuildinfo\\\",\\n \\\"target\\\": \\\"ES2023\\\",\\n \\\"lib\\\": [\\\"ES2023\\\"],\\n \\\"module\\\": \\\"ESNext\\\",\\n \\\"types\\\": [\\\"node\\\"],\\n \\\"skipLibCheck\\\": true,\\n\\n /* Bundler mode */\\n \\\"moduleResolution\\\": \\\"bundler\\\",\\n \\\"allowImportingTsExtensions\\\": true,\\n \\\"verbatimModuleSyntax\\\": true,\\n \\\"moduleDetection\\\": \\\"force\\\",\\n \\\"noEmit\\\": true,\\n\\n /* Linting */\\n \\\"strict\\\": true,\\n \\\"noUnusedLocals\\\": true,\\n \\\"noUnusedParameters\\\": true,\\n \\\"erasableSyntaxOnly\\\": true,\\n \\\"noFallthroughCasesInSwitch\\\": true,\\n \\\"noUncheckedSideEffectImports\\\": true\\n },\\n \\\"include\\\": [\\\"vite.config.ts\\\"]\\n}\\n\"","export default \"import { resolve } from \\\"node:path\\\";\\n\\nimport react from \\\"@vitejs/plugin-react\\\";\\nimport { defineConfig } from \\\"vite\\\";\\n\\n// https://vite.dev/config/\\nexport default defineConfig({\\n plugins: [react()],\\n build: {\\n outDir: \\\"<%= viteConfigOutDir %>\\\",\\n rollupOptions: {\\n preserveEntrySignatures: \\\"exports-only\\\",\\n input: {\\n \\\"<%= formId %>-app\\\":\\n process.env.VITE_BUILD_REASON === \\\"preview\\\"\\n ? \\\"index.html\\\"\\n : \\\"src/main.tsx\\\",\\n },\\n output: {\\n // Output files without hashes, making it easier to serve them in the\\n // server. However, the server is expected to somehow \\\"version\\\" them for\\n // cache busting purposes.\\n entryFileNames: \\\"assets/[name].js\\\",\\n chunkFileNames: \\\"assets/[name].js\\\",\\n assetFileNames: \\\"assets/[name].[ext]\\\",\\n },\\n },\\n },\\n resolve: {\\n alias: {\\n // Due to how Kotlin \\\"bundles\\\" dependencies, we need to use the\\n // `@ostack.tech/kform` produced by the shared module.\\n \\\"@ostack.tech/kform\\\": resolve(\\n import.meta.dirname,\\n \\\"node_modules/<%= formId %>-shared/ostack-kform.mjs\\\",\\n ),\\n },\\n },\\n server: {\\n proxy: { \\\"<%= apiBasePath %>\\\": \\\"<%= viteConfigProxyTarget %>\\\" },\\n },\\n});\\n\"","import {\n addEjsTemplateFile,\n addTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { capitalCase, kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport eslintConfigJs from \"../templates/react-app/eslint.config.js?raw\";\nimport indexHtmlEjs from \"../templates/react-app/index.html.ejs?raw\";\nimport packageJsonEjs from \"../templates/react-app/package.json.ejs?raw\";\nimport viteSvg from \"../templates/react-app/public/vite.svg?raw\";\nimport tsConfigAppJson from \"../templates/react-app/tsconfig.app.json?raw\";\nimport tsConfigJson from \"../templates/react-app/tsconfig.json?raw\";\nimport tsConfigNodeJson from \"../templates/react-app/tsconfig.node.json?raw\";\nimport viteConfigTsEjs from \"../templates/react-app/vite.config.ts.ejs?raw\";\nimport { DEFAULT_API_BASE_PATH } from \"./scaffoldApi.ts\";\n\nexport const DEFAULT_VITE_CONFIG_OUT_DIR = \"build/dist/\";\nexport const DEFAULT_VITE_CONFIG_PROXY_TARGET = \"http://127.0.0.1:8080/\";\n\nexport function scaffoldViteProject(schematic: Schematic, data: ReactAppData) {\n const ejsData = {\n formId: kebabCase(schematic.name!),\n formClass: schematic.name,\n formTitle: capitalCase(schematic.name!),\n ostackUiVersion: import.meta.env.VITE_OSTACK_UI_VERSION,\n kFormVersion: import.meta.env.VITE_KFORM_VERSION,\n dependencyVersions: JSON.parse(import.meta.env.VITE_DEPENDENCY_VERSIONS),\n encodedExternalContexts: JSON.stringify(\n data.serializationFormat === \"json\"\n ? \"{}\"\n : `<${schematic.name}ExternalContexts />`,\n ),\n apiBasePath: data.apiBasePath ?? DEFAULT_API_BASE_PATH,\n viteConfigOutDir: data.viteConfigOutDir ?? DEFAULT_VITE_CONFIG_OUT_DIR,\n viteConfigProxyTarget:\n data.viteConfigProxyTarget ?? DEFAULT_VITE_CONFIG_PROXY_TARGET,\n };\n\n addEjsTemplateFile(data, \"react-app/package.json\", packageJsonEjs, ejsData);\n addEjsTemplateFile(\n data,\n \"react-app/vite.config.ts\",\n viteConfigTsEjs,\n ejsData,\n );\n addTemplateFile(data, \"react-app/tsconfig.json\", tsConfigJson);\n addTemplateFile(data, \"react-app/tsconfig.app.json\", tsConfigAppJson);\n addTemplateFile(data, \"react-app/tsconfig.node.json\", tsConfigNodeJson);\n addTemplateFile(data, \"react-app/eslint.config.js\", eslintConfigJs);\n addEjsTemplateFile(data, \"react-app/index.html\", indexHtmlEjs, ejsData);\n addTemplateFile(data, \"react-app/public/vite.svg\", viteSvg);\n}\n","import {\n configScaffolder,\n scaffoldModels,\n scaffoldSchemas,\n scaffoldValidator,\n SchematicBuilder as KFormSchematicBuilder,\n type SchematicBuilderProps as KFormSchematicBuilderProps,\n} from \"@ostack.tech/kform-scaffolder\";\n\nimport { DefaultLocaleConfig } from \"./configs/DefaultLocaleConfig.tsx\";\nimport { SerializationFormatConfig } from \"./configs/SerializationFormatConfig.tsx\";\nimport { UseTableValuesSerializerConfig } from \"./configs/UseTableValuesSerializerConfig.tsx\";\nimport type { KtData } from \"./scaffolding/kotlin/KtData.ts\";\nimport type { ReactAppData } from \"./scaffolding/reactApp/ReactAppData.ts\";\nimport { scaffoldActions } from \"./scaffolding/scaffolders/scaffoldActions.ts\";\nimport { scaffoldApi } from \"./scaffolding/scaffolders/scaffoldApi.ts\";\nimport { scaffoldAppComponent } from \"./scaffolding/scaffolders/scaffoldAppComponent.ts\";\nimport { scaffoldAppContext } from \"./scaffolding/scaffolders/scaffoldAppContext.ts\";\nimport { scaffoldExternalContexts } from \"./scaffolding/scaffolders/scaffoldExternalContexts.ts\";\nimport { scaffoldGradleProject } from \"./scaffolding/scaffolders/scaffoldGradleProject.ts\";\nimport { scaffoldGradleWrapper } from \"./scaffolding/scaffolders/scaffoldGradleWrapper.ts\";\nimport { scaffoldMain } from \"./scaffolding/scaffolders/scaffoldMain.ts\";\nimport { scaffoldPageComponents } from \"./scaffolding/scaffolders/scaffoldPageComponents.ts\";\nimport { scaffoldProjectMisc } from \"./scaffolding/scaffolders/scaffoldProjectMisc.ts\";\nimport { scaffoldResponses } from \"./scaffolding/scaffolders/scaffoldResponses.ts\";\nimport { scaffoldSerializer } from \"./scaffolding/scaffolders/scaffoldSerializer.ts\";\nimport { scaffoldStyles } from \"./scaffolding/scaffolders/scaffoldStyles.ts\";\nimport { scaffoldViteProject } from \"./scaffolding/scaffolders/scaffoldViteProject.ts\";\nimport { defaultSchematicKinds, type SchematicKind } from \"./SchematicKind.ts\";\n\nexport interface SchematicBuilderProps extends KFormSchematicBuilderProps {\n schematicKinds?: SchematicKind[];\n}\n\nconst kotlinMainData: Partial<KtData> = {\n currentDir: \"shared/src/commonMain/kotlin\",\n};\nconst kotlinTestData: Partial<KtData> = {\n currentDir: \"shared/src/commonTest/kotlin\",\n};\nconst reactAppData: Partial<ReactAppData> = {\n currentDir: \"react-app/src\",\n};\n\nexport function SchematicBuilder({\n name = \"ostack-ui-kform\",\n schematicKinds = defaultSchematicKinds,\n scaffolders = [\n scaffoldProjectMisc,\n scaffoldGradleWrapper,\n scaffoldGradleProject,\n scaffoldViteProject,\n configScaffolder(scaffoldSchemas, kotlinMainData),\n configScaffolder(scaffoldModels, kotlinMainData),\n configScaffolder(scaffoldResponses, kotlinMainData),\n configScaffolder(scaffoldExternalContexts, kotlinMainData),\n configScaffolder(scaffoldSerializer, kotlinMainData),\n configScaffolder(scaffoldValidator, kotlinTestData),\n configScaffolder(scaffoldMain, reactAppData),\n configScaffolder(scaffoldStyles, reactAppData),\n configScaffolder(scaffoldAppComponent, reactAppData),\n configScaffolder(scaffoldAppContext, reactAppData),\n configScaffolder(scaffoldActions, reactAppData),\n configScaffolder(scaffoldApi, reactAppData),\n configScaffolder(scaffoldPageComponents, reactAppData),\n ],\n scaffoldingData = (schematic) => ({\n useFileBase64Serializer: true,\n ...schematic.config,\n }),\n configs = (\n <>\n <DefaultLocaleConfig />\n <SerializationFormatConfig />\n <UseTableValuesSerializerConfig />\n </>\n ),\n version = import.meta.env.VITE_OSTACK_UI_VERSION,\n ...otherProps\n}: SchematicBuilderProps) {\n return (\n <KFormSchematicBuilder\n name={name}\n schematicKinds={schematicKinds}\n scaffolders={scaffolders}\n scaffoldingData={scaffoldingData}\n configs={configs}\n version={version}\n {...otherProps}\n />\n );\n}\n"],"names":["KFormUseTableValuesSerializerConfig","kFormAnySchematicKind","kFormBigDecimalSchematicKind","kFormBigIntegerSchematicKind","kFormBooleanSchematicKind","kFormByteSchematicKind","kFormClassSchematicKind","kFormDoubleSchematicKind","kFormEnumSchematicKind","kFormFileSchematicKind","kFormFloatSchematicKind","kFormIntSchematicKind","kFormListSchematicKind","kFormLocalDateSchematicKind","kFormLongSchematicKind","kFormShortSchematicKind","kFormStringSchematicKind","kFormTableSchematicKind","KFormSchematicBuilder"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAf,MAAA,UAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACQR,SAAS,sBACd,YACA,MACA;AAEA,kBAAgB,MAAM,WAAW,SAAS,EAAE,YAAY,MAAM;AAC9D,kBAAgB,MAAM,eAAe,UAAU;AAC/C,kBAAgB,MAAM,qCAAqC,kBAAkB;AAAA,IAC3E,QAAQ;AAAA,EAAA,CACT;AACD;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;ACZO,SAAS,aAAa,WAAsB,MAAoB;AACrE,QAAM,WAAW,UAAU,KAAK,YAAY,UAAU;AACtD,MAAI,OAAO,KAAK,MAAM,IAAI,QAAQ;AAClC,MAAI,CAAC,MAAM;AACT,SAAK,MAAM,IAAI,UAAW,OAAO,QAAS;AAAA,EAC5C;AACA,2BAAyB,WAAW;AAAA,IAClC,eAAe,GAAG,UAAU,UAAU,IAAK,CAAC;AAAA,IAC5C,GAAG;AAAA,IACH,aAAa;AAAA,EAAA,CACd;AACH;AAEA,SAAS,yBAAyB,WAAsB,MAAoB;AAC1E,OAAK,YAAY,QAAQ;AAAA,IACvB,EAAE,YAAY,eAAA;AAAA,IACd,EAAE,YAAY,SAAS,MAAM,aAAA;AAAA,IAC7B,EAAE,YAAY,oBAAoB,MAAM,aAAA;AAAA,IACxC;AAAA,MACE,YAAY,KAAK;AAAA,MACjB,MAAM,SAAS,UAAU,IAAI;AAAA,IAAA;AAAA,IAE/B;AAAA,MACE,YAAY,KAAK,UAAU,IAAI;AAAA,MAC/B,MAAM,GAAG,UAAU,IAAI;AAAA,IAAA;AAAA,IAEzB;AAAA,MACE,YAAY,KAAK,UAAU,IAAK;AAAA,MAChC,MAAM,GAAG,UAAU,IAAK;AAAA,IAAA;AAAA,EAC1B;AAGF,OAAK,YAAY,aAAa,KAAK;AAAA;AAAA,4CAEO,UAAU,UAAU,IAAK,CAAC;AAAA;AAAA,aAEzD,UAAU,IAAI;AAAA;AAAA,wCAEa,UAAU,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,eAKvC,UAAU,IAAK;AAAA,cAChB,UAAU,IAAI;AAAA;AAAA;AAAA;AAAA,GAIzB;AACH;AC5DA,MAAA,eAAe;ACAf,MAAA,gBAAe;ACAf,MAAA,YAAe;ACOR,SAAS,oBACd,YACA,MACA;AACA,kBAAgB,MAAM,cAAc,SAAS;AAC7C,kBAAgB,MAAM,kBAAkB,aAAa;AACrD,kBAAgB,MAAM,iBAAiB,YAAY;AACrD;ACdA,MAAA,cAAe;ACQR,SAAS,kBAAkB,WAAsB,MAAoB;AAC1E,QAAM,UAAU;AAAA,IACd,aAAa,KAAK;AAAA,IAClB,WAAW,UAAU;AAAA,EAAA;AAGvB;AAAA,IACE;AAAA,IACA,GAAG,UAAU,IAAI;AAAA,IACjB;AAAA,IACA;AAAA,EAAA;AAEJ;ACpBA,MAAA,YAAe;ACKR,SAAS,eAAe,YAAuB,MAAoB;AACxE,kBAAgB,MAAM,cAAc,SAAS;AAC/C;ACPA,MAAA,iBAAe;ACAf,MAAA,eAAe;ACAf,MAAA,iBAAe;ACAf,MAAA,UAAe;ACAf,MAAA,kBAAe;ACAf,MAAA,eAAe;ACAf,MAAA,mBAAe;ACAf,MAAA,kBAAe;ACkBR,MAAM,8BAA8B;AACpC,MAAM,mCAAmC;AAEzC,SAAS,oBAAoB,WAAsB,MAAoB;AAC5E,QAAM,UAAU;AAAA,IACd,QAAQ,UAAU,UAAU,IAAK;AAAA,IACjC,WAAW,UAAU;AAAA,IACrB,WAAW,YAAY,UAAU,IAAK;AAAA,IACtC,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,oBAAoB,KAAK,MAAM,kyCAAwC;AAAA,IACvE,yBAAyB,KAAK;AAAA,MAC5B,KAAK,wBAAwB,SACzB,OACA,IAAI,UAAU,IAAI;AAAA,IAAA;AAAA,IAExB,aAAa,KAAK,eAAe;AAAA,IACjC,kBAAkB,KAAK,oBAAoB;AAAA,IAC3C,uBACE,KAAK,yBAAyB;AAAA,EAAA;AAGlC,qBAAmB,MAAM,0BAA0B,gBAAgB,OAAO;AAC1E;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEF,kBAAgB,MAAM,2BAA2B,YAAY;AAC7D,kBAAgB,MAAM,+BAA+B,eAAe;AACpE,kBAAgB,MAAM,gCAAgC,gBAAgB;AACtE,kBAAgB,MAAM,8BAA8B,cAAc;AAClE,qBAAmB,MAAM,wBAAwB,cAAc,OAAO;AACtE,kBAAgB,MAAM,6BAA6B,OAAO;AAC5D;ACnBA,MAAM,iBAAkC;AAAA,EACtC,YAAY;AACd;AACA,MAAM,iBAAkC;AAAA,EACtC,YAAY;AACd;AACA,MAAM,eAAsC;AAAA,EAC1C,YAAY;AACd;AAEO,SAAS,iBAAiB;AAAA,EAC/B,OAAO;AAAA,EACP,iBAAiB;AAAA,EACjB,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB,iBAAiB,cAAc;AAAA,IAChD,iBAAiB,gBAAgB,cAAc;AAAA,IAC/C,iBAAiB,mBAAmB,cAAc;AAAA,IAClD,iBAAiB,0BAA0B,cAAc;AAAA,IACzD,iBAAiB,oBAAoB,cAAc;AAAA,IACnD,iBAAiB,mBAAmB,cAAc;AAAA,IAClD,iBAAiB,cAAc,YAAY;AAAA,IAC3C,iBAAiB,gBAAgB,YAAY;AAAA,IAC7C,iBAAiB,sBAAsB,YAAY;AAAA,IACnD,iBAAiB,oBAAoB,YAAY;AAAA,IACjD,iBAAiB,iBAAiB,YAAY;AAAA,IAC9C,iBAAiB,aAAa,YAAY;AAAA,IAC1C,iBAAiB,wBAAwB,YAAY;AAAA,EAAA;AAAA,EAEvD,kBAAkB,CAAC,eAAe;AAAA,IAChC,yBAAyB;AAAA,IACzB,GAAG,UAAU;AAAA,EAAA;AAAA,EAEf,UACE,qBAAA,UAAA,EACE,UAAA;AAAA,IAAA,oBAAC,qBAAA,EAAoB;AAAA,wBACpB,2BAAA,EAA0B;AAAA,wBAC1B,gCAAA,CAAA,CAA+B;AAAA,EAAA,GAClC;AAAA,EAEF,UAAU;AAAA,EACV,GAAG;AACL,GAA0B;AACxB,SACE;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACC,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;"}
|
|
1
|
+
{"version":3,"file":"ostack-ui-kform-scaffolder.js","names":[],"sources":["../src/configs/DefaultLocaleConfig.tsx","../src/configs/SerializationFormatConfig.tsx","../src/configs/UseTableValuesSerializerConfig.tsx","../src/scaffolding/scaffolders/scaffoldActions.ts","../src/scaffolding/scaffolders/scaffoldApi.ts","../src/scaffolding/scaffolders/scaffoldIssueMessages.ts","../src/scaffolding/scaffolders/scaffoldPageComponents.ts","../src/scaffolding/scaffolders/scaffoldSerializer.ts","../src/util/arrayify.ts","../src/SchematicKind.ts","../src/scaffolding/reactApp/util/reactAppLayout.ts","../src/scaffolding/scaffolders/scaffoldAppComponent.ts","../src/scaffolding/scaffolders/scaffoldAppContext.ts","../src/scaffolding/scaffolders/scaffoldExternalContexts.ts","../src/scaffolding/scaffolders/scaffoldGradleProject.ts","../src/scaffolding/templates/gradle/wrapper/gradle-wrapper.jar?url","../src/scaffolding/scaffolders/scaffoldGradleWrapper.ts","../src/scaffolding/scaffolders/scaffoldMain.ts","../src/scaffolding/scaffolders/scaffoldProjectMisc.ts","../src/scaffolding/scaffolders/scaffoldResponses.ts","../src/scaffolding/scaffolders/scaffoldStyles.ts","../src/scaffolding/scaffolders/scaffoldViteProject.ts","../src/SchematicBuilder.tsx"],"sourcesContent":["import { useConfig } from \"@ostack.tech/kform-scaffolder\";\n\nexport interface DefaultLocaleConfigProps {\n defaultValue?: string;\n disabled?: boolean;\n}\n\nexport const DEFAULT_LOCALE = \"en-US\";\n// eslint-disable-next-line react-refresh/only-export-components\nexport const LOCALES: string[] = JSON.parse(import.meta.env.VITE_LOCALES);\n\nexport function DefaultLocaleConfig({\n defaultValue = DEFAULT_LOCALE,\n disabled,\n}: DefaultLocaleConfigProps) {\n const [config, setConfig] = useConfig(\"defaultLocale\", defaultValue);\n return (\n <div className=\"builder-config-field\">\n <label>Default locale</label>\n <select\n value={config}\n onChange={(evt) => {\n setConfig(evt.target.value);\n }}\n disabled={disabled}\n >\n {LOCALES.map((locale) => (\n <option key={locale} value={locale}>\n {locale}\n </option>\n ))}\n </select>\n </div>\n );\n}\n","import { useConfig } from \"@ostack.tech/kform-scaffolder\";\nimport { useRef } from \"react\";\n\nexport type SerializationFormat = \"json\" | \"xml\";\n\nexport interface SerializationFormatConfigProps {\n defaultValue?: SerializationFormat;\n disabled?: boolean;\n}\n\nexport const DEFAULT_SERIALIZATION_FORMAT = \"json\";\n\nexport function SerializationFormatConfig({\n defaultValue = DEFAULT_SERIALIZATION_FORMAT,\n disabled,\n}: SerializationFormatConfigProps) {\n const [useTableValuesSerializerConfig, setUseTableValuesSerializerConfig] =\n useConfig(\"useTableValuesSerializer\", false);\n const lastUseTableValuesSerializerConfig = useRef(\n useTableValuesSerializerConfig,\n );\n const [config, setConfig] = useConfig(\"serializationFormat\", defaultValue);\n return (\n <div className=\"builder-config-field\">\n <label>Serialization format</label>\n <select\n value={config}\n onChange={(evt) => {\n setConfig(evt.target.value as SerializationFormat);\n if (evt.target.value === \"xml\") {\n lastUseTableValuesSerializerConfig.current =\n useTableValuesSerializerConfig;\n setUseTableValuesSerializerConfig(true);\n } else {\n setUseTableValuesSerializerConfig(\n lastUseTableValuesSerializerConfig.current,\n );\n }\n }}\n disabled={disabled}\n >\n <option value=\"json\">JSON</option>\n <option value=\"xml\">XML</option>\n </select>\n </div>\n );\n}\n","import {\n useConfig,\n UseTableValuesSerializerConfig as KFormUseTableValuesSerializerConfig,\n} from \"@ostack.tech/kform-scaffolder\";\n\nimport { DEFAULT_SERIALIZATION_FORMAT } from \"./SerializationFormatConfig.tsx\";\n\nexport interface UseTableValuesSerializerConfigProps {\n disabled?: boolean;\n}\n\nexport function UseTableValuesSerializerConfig({\n disabled,\n}: UseTableValuesSerializerConfigProps) {\n const [serializationFormatConfig] = useConfig(\n \"serializationFormat\",\n DEFAULT_SERIALIZATION_FORMAT,\n );\n return (\n <KFormUseTableValuesSerializerConfig\n disabled={disabled || serializationFormatConfig === \"xml\"}\n />\n );\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { camelCase, kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport loadTsxEjs from \"../templates/react-app/src/actions/Load.tsx.ejs?raw\";\nimport saveTsxEjs from \"../templates/react-app/src/actions/Save.tsx.ejs?raw\";\nimport submitTsxEjs from \"../templates/react-app/src/actions/Submit.tsx.ejs?raw\";\nimport validateTsxEjs from \"../templates/react-app/src/actions/Validate.tsx.ejs?raw\";\n\nexport function scaffoldActions(schematic: Schematic, data: ReactAppData) {\n const ejsData = {\n kmpModuleName: data.kmpModuleName ?? `${kebabCase(schematic.name!)}-shared`,\n serializationFormat: data.serializationFormat ?? \"json\",\n serializationMimeType: `application/${data.serializationFormat}`,\n formVar: camelCase(schematic.name!),\n formClass: schematic.name,\n useTableValuesSerializer: data.useTableValuesSerializer,\n };\n\n addEjsTemplateFile(data, \"actions/Load.tsx\", loadTsxEjs, ejsData);\n addEjsTemplateFile(data, \"actions/Save.tsx\", saveTsxEjs, ejsData);\n addEjsTemplateFile(data, \"actions/Submit.tsx\", submitTsxEjs, ejsData);\n addEjsTemplateFile(data, \"actions/Validate.tsx\", validateTsxEjs, ejsData);\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { camelCase, kebabCase } from \"change-case\";\n\nimport { DEFAULT_SERIALIZATION_FORMAT } from \"../../configs/SerializationFormatConfig.tsx\";\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport apiFetchTsEjs from \"../templates/react-app/src/api/apiFetch.ts.ejs?raw\";\nimport reportErrorTsEjs from \"../templates/react-app/src/api/reportError.ts.ejs?raw\";\nimport submitTsEjs from \"../templates/react-app/src/api/submit.ts.ejs?raw\";\n\nexport const DEFAULT_API_BASE_PATH = \"/api/\";\nexport const DEFAULT_REPORT_ERROR_API_ENDPOINT = \"report-error\";\nexport const DEFAULT_SUBMIT_API_ENDPOINT = \"submit\";\n\nexport function scaffoldApi(schematic: Schematic, data: ReactAppData) {\n const ejsData = {\n kmpModuleName: data.kmpModuleName ?? `${kebabCase(schematic.name!)}-shared`,\n serializationFormat:\n data.serializationFormat ?? DEFAULT_SERIALIZATION_FORMAT,\n serializationMimeType: `application/${data.serializationFormat}`,\n formVar: camelCase(schematic.name!),\n formClass: schematic.name,\n apiBasePath: data.apiBasePath ?? DEFAULT_API_BASE_PATH,\n reportErrorApiEndpoint:\n data.reportErrorApiEndpoint ?? DEFAULT_REPORT_ERROR_API_ENDPOINT,\n submitApiEndpoint: data.submitApiEndpoint ?? DEFAULT_SUBMIT_API_ENDPOINT,\n };\n\n addEjsTemplateFile(data, \"api/apiFetch.ts\", apiFetchTsEjs, ejsData);\n addEjsTemplateFile(data, \"api/reportError.ts\", reportErrorTsEjs, ejsData);\n addEjsTemplateFile(data, \"api/submit.ts\", submitTsEjs, ejsData);\n}\n","import {\n code,\n joinPaths,\n type Schematic,\n type TsFile,\n tsFile,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { constantCase, kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\n\nconst DEFAULT_SCAFFOLD_ISSUE_MESSAGES = true;\n\nexport function scaffoldIssueMessages(\n schematic: Schematic,\n data: ReactAppData,\n) {\n if (!shouldScaffoldIssueMessages(data)) {\n return;\n }\n\n const fileName = joinPaths(\n data.currentDir,\n `${schematic.name}IssueMessages.tsx`,\n );\n let file = data.files.get(fileName) as TsFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = tsFile()));\n }\n scaffoldIssueMessagesConstant(schematic, {\n kmpModuleName: `${kebabCase(data.rootSchematic.name!)}-shared`,\n ...data,\n currentFile: file,\n });\n}\n\nexport function shouldScaffoldIssueMessages(data: ReactAppData) {\n return data.scaffoldIssueMessages ?? DEFAULT_SCAFFOLD_ISSUE_MESSAGES;\n}\n\nfunction scaffoldIssueMessagesConstant(\n schematic: Schematic,\n data: ReactAppData,\n) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"IssueMessagesByCode\",\n isType: true,\n });\n data.currentFile.declarations.push(code`\n export const ${constantCase(schematic.name!)}_ISSUE_MESSAGES: Record<string, IssueMessagesByCode> = {};\n `);\n}\n","import {\n code,\n joinPaths,\n type Schematic,\n type TsFile,\n tsFile,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { kebabCase, sentenceCase } from \"change-case\";\n\nimport type { SchematicKind } from \"../../SchematicKind.ts\";\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport { reactAppLayout } from \"../reactApp/util/reactAppLayout.ts\";\nimport { scaffoldIssueMessages } from \"./scaffoldIssueMessages.ts\";\n\nexport function scaffoldPageComponents(\n schematic: Schematic,\n data: ReactAppData,\n) {\n const layout = reactAppLayout(schematic, {\n kmpModuleName: `${kebabCase(schematic.name!)}-shared`,\n ...data,\n });\n for (const annex of layout) {\n for (const formPage of annex.formPages) {\n scaffoldPageComponent(formPage.schematic, formPage.data);\n if (formPage.data.currentPath !== \"/\") {\n scaffoldIssueMessages(formPage.schematic, formPage.data);\n }\n }\n }\n}\n\nfunction scaffoldPageComponent(schematic: Schematic, data: ReactAppData) {\n const fileName = joinPaths(data.currentDir, `${schematic.name}.tsx`);\n let file = data.files.get(fileName) as TsFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = tsFile()));\n }\n scaffoldPageComponentDeclarations(schematic, {\n kmpModuleName: `${kebabCase(data.rootSchematic.name!)}-shared`,\n ...data,\n currentFile: file,\n });\n}\n\nfunction scaffoldPageComponentDeclarations(\n schematic: Schematic,\n data: ReactAppData,\n) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Grid\",\n });\n\n data.currentFile.declarations.push(code`\n export function ${schematic.name}() {\n return (\n <Grid container>\n ${schematic\n .children!.map(\n (child) =>\n code`\n <Grid xs={12}>\n ${scaffoldField(child, {\n ...data,\n currentPath: child.childName,\n })}\n </Grid>\n `,\n )\n .join(\"\\n\\n\")}\n </Grid>\n );\n }\n `);\n}\n\nexport function scaffoldField(schematic: Schematic, data: ReactAppData) {\n const schematicKind = data.schematicKinds.get(\n schematic.kind,\n ) as SchematicKind;\n if (!schematicKind) {\n throw new Error(`Unknown schematic kind ${schematic.kind}`);\n }\n\n if (schematicKind.scaffoldField) {\n return schematicKind.scaffoldField?.(schematic, data);\n }\n\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"ControlField\",\n });\n\n let controlModuleName: string | undefined;\n let controlName: string | undefined;\n if (schematicKind.control) {\n const controlSeparator = schematicKind.control.lastIndexOf(\".\");\n controlModuleName = schematicKind.control.slice(0, controlSeparator);\n controlName = schematicKind.control.slice(controlSeparator + 1);\n data.currentFile.imports.push({\n moduleName: controlModuleName,\n name: controlName,\n });\n }\n\n let control = schematicKind.scaffoldControl?.(schematic, data);\n if (!control) {\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n control = [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n `<${controlName!} />`,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n }\n\n return code`\n <ControlField path=\"${data.currentPath}\">\n ${control}\n </ControlField>\n `;\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { camelCase, constantCase } from \"change-case\";\n\nimport type { KtData } from \"../kotlin/KtData.ts\";\nimport jsonSerializerKt from \"../templates/shared/src/commonMain/kotlin/JsonSerializer.kt.ejs?raw\";\nimport xmlSerializerKt from \"../templates/shared/src/commonMain/kotlin/XmlSerializer.kt.ejs?raw\";\n\nexport const DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION = true;\n\nexport function scaffoldSerializer(schematic: Schematic, data: KtData): void {\n const ejsData = {\n filePackage: data.currentPackage,\n formVar: camelCase(schematic.name!),\n formClass: schematic.name,\n formConstant: constantCase(schematic.name!),\n includeSerializationFormatVersion:\n data.includeSerializationFormatVersion ??\n DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION,\n };\n\n addEjsTemplateFile(\n data,\n `${schematic.name}Serializer.kt`,\n data.serializationFormat === \"xml\" ? xmlSerializerKt : jsonSerializerKt,\n ejsData,\n );\n}\n","export function arrayify<T>(value: T | T[] | null | undefined): T[] {\n return value == null ? [] : Array.isArray(value) ? value : [value];\n}\n","import {\n annotate,\n anySchematicKind as kFormAnySchematicKind,\n bigDecimalSchematicKind as kFormBigDecimalSchematicKind,\n bigIntegerSchematicKind as kFormBigIntegerSchematicKind,\n booleanSchematicKind as kFormBooleanSchematicKind,\n byteSchematicKind as kFormByteSchematicKind,\n classSchematicKind as kFormClassSchematicKind,\n code,\n createSchematic,\n doubleSchematicKind as kFormDoubleSchematicKind,\n enumSchematicKind as kFormEnumSchematicKind,\n fileSchematicKind as kFormFileSchematicKind,\n floatSchematicKind as kFormFloatSchematicKind,\n intSchematicKind as kFormIntSchematicKind,\n joinPaths,\n ListableBuilderWithoutKindSelect,\n listSchematicKind as kFormListSchematicKind,\n localDateSchematicKind as kFormLocalDateSchematicKind,\n longSchematicKind as kFormLongSchematicKind,\n type Schematic,\n type SchematicKind as KFormSchematicKind,\n shortSchematicKind as kFormShortSchematicKind,\n stringSchematicKind as kFormStringSchematicKind,\n tableSchematicKind as kFormTableSchematicKind,\n} from \"@ostack.tech/kform-scaffolder\";\nimport {\n camelCase,\n capitalCase,\n constantCase,\n pascalCase,\n sentenceCase,\n} from \"change-case\";\n\nimport type { KtData } from \"./scaffolding/kotlin/KtData.ts\";\nimport type { ReactAppData } from \"./scaffolding/reactApp/ReactAppData.ts\";\nimport { scaffoldField } from \"./scaffolding/scaffolders/scaffoldPageComponents.ts\";\nimport { DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION } from \"./scaffolding/scaffolders/scaffoldSerializer.ts\";\nimport { arrayify } from \"./util/arrayify.ts\";\n\nexport interface SchematicKind extends KFormSchematicKind {\n // Override KForm data types with this package's\n defaultValue: string | ((schematic: Schematic, data: KtData) => string);\n propertyAnnotations?:\n | string\n | string[]\n | ((schematic: Schematic, data: KtData) => string | string[] | undefined);\n scaffoldModel?: (schematic: Schematic, data: KtData) => string;\n scaffoldType?: (schematic: Schematic, data: KtData) => string;\n scaffoldSchema?: (schematic: Schematic, data: KtData) => string;\n\n // New schematic properties\n control?: string;\n scaffoldControl?: (schematic: Schematic, data: ReactAppData) => string;\n scaffoldField?: (schematic: Schematic, data: ReactAppData) => string;\n}\n\nexport const anySchematicKind: SchematicKind = {\n ...kFormAnySchematicKind,\n};\nexport const bigDecimalSchematicKind: SchematicKind = {\n ...kFormBigDecimalSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const bigIntegerSchematicKind: SchematicKind = {\n ...kFormBigIntegerSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const booleanSchematicKind: SchematicKind = {\n ...kFormBooleanSchematicKind,\n control: \"@ostack.tech/ui-kform.CheckboxControl\",\n scaffoldControl: (schematic, data) =>\n data.omitLabel\n ? `<CheckboxControl />`\n : `<CheckboxControl>${sentenceCase(schematic.childName!)}</CheckboxControl>`,\n};\nexport const byteSchematicKind: SchematicKind = {\n ...kFormByteSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const classAnnexSchematicKind: SchematicKind = {\n ...kFormClassSchematicKind,\n defaultPackageSuffix: (childName) => `annexes.${childName.toLowerCase()}`,\n kind: \"Class (Annex)\",\n};\nexport const classFormPageSchematicKind: SchematicKind = {\n ...kFormClassSchematicKind,\n kind: \"Class (FormPage)\",\n nullable: false,\n};\nexport const classSchematicKind: SchematicKind = {\n ...kFormClassSchematicKind,\n nullable: false,\n scaffoldModel: (schematic, data) => {\n const baseModel = kFormClassSchematicKind.scaffoldModel!(schematic, data);\n if (data.currentPath !== \"/\") {\n return baseModel;\n }\n\n const classAnnotations: string[] = [];\n let versionProperty: string | null = null;\n\n if (data.serializationFormat === \"xml\") {\n data.currentFile.imports.add(\n \"nl.adaptivity.xmlutil.serialization.XmlSerialName\",\n );\n const namespace =\n data.xmlNamespace ??\n `http://${data\n .currentPackage!.split(\".\")\n .reverse()\n .join(\".\")}/schema/${new Date().getFullYear()}`;\n classAnnotations.push(\n `@XmlSerialName(\"${schematic.name}\", \"${namespace}\")`,\n );\n }\n\n if (\n data.includeSerializationFormatVersion ??\n DEFAULT_INCLUDE_SERIALIZATION_FORMAT_VERSION\n ) {\n data.currentFile.imports\n .add(\"kotlinx.serialization.EncodeDefault\")\n .add(\"kotlinx.serialization.ExperimentalSerializationApi\");\n const versionAnnotations = [\n \"@EncodeDefault\",\n \"@OptIn(ExperimentalSerializationApi::class)\",\n ];\n\n if (data.serializationFormat === \"xml\") {\n data.currentFile.imports.add(\n \"nl.adaptivity.xmlutil.serialization.XmlElement\",\n );\n versionAnnotations.push(\"@XmlElement(false)\");\n } else {\n data.currentFile.imports.add(\"kotlinx.serialization.SerialName\");\n versionAnnotations.push('@SerialName($$\"$version\")');\n }\n\n versionProperty = annotate(\n versionAnnotations,\n `internal var version = ${constantCase(schematic.name!)}_SERIALIZATION_VERSION`,\n );\n }\n\n return (\n annotate(classAnnotations, baseModel) +\n (versionProperty\n ? ` ${code`\n {\n ${versionProperty}\n }\n `}`\n : \"\")\n );\n },\n scaffoldField: (schematic, data) => {\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui\", name: \"FieldGroup\" },\n { moduleName: \"@ostack.tech/ui\", name: \"FieldGroupHeader\" },\n { moduleName: \"@ostack.tech/ui\", name: \"FieldGroupTitle\" },\n { moduleName: \"@ostack.tech/ui\", name: \"FieldGroupBody\" },\n { moduleName: \"@ostack.tech/ui\", name: \"Grid\" },\n );\n\n return code`\n <FieldGroup>\n <FieldGroupHeader>\n <FieldGroupTitle>${capitalCase(schematic.name!)}</FieldGroupTitle>\n </FieldGroupHeader>\n\n <FieldGroupBody>\n <Grid container>\n ${schematic\n .children!.map(\n (child) =>\n code`\n <Grid xs={12}>\n ${scaffoldField(child, {\n ...data,\n currentPath: joinPaths(\n data.currentPath,\n child.childName,\n ),\n })}\n </Grid>\n `,\n )\n .join(\"\\n\\n\")}\n </Grid>\n </FieldGroupBody>\n </FieldGroup>\n `;\n },\n};\nexport const doubleSchematicKind: SchematicKind = {\n ...kFormDoubleSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const enumSchematicKind: SchematicKind = {\n ...kFormEnumSchematicKind,\n kind: \"Enum\",\n internal: true,\n nullable: false,\n};\nexport const enumSelectSchematicKind: SchematicKind = {\n ...kFormEnumSchematicKind,\n kind: \"Enum (Select)\",\n control: \"@ostack.tech/ui-kform.SelectControl\",\n scaffoldControl: (schematic, data) => {\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n data.currentFile.imports.push({\n moduleName: data.kmpModuleName!,\n name: schematic.name!,\n });\n return [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n code`\n <SelectControl\n options={[\n ${schematic\n .children!.map(\n (child) =>\n `{ value: ${schematic.name}.${\n child.childName\n }, text: ${JSON.stringify(sentenceCase(child.childName!))} }`,\n )\n .join(\",\\n\")}\n ]}\n />\n `,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n },\n};\nexport const enumRadioGroupSchematicKind: SchematicKind = {\n ...kFormEnumSchematicKind,\n kind: \"Enum (RadioGroup)\",\n control: \"@ostack.tech/ui-kform.RadioGroupControl\",\n scaffoldControl: (schematic, data) => {\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n data.currentFile.imports.push({\n moduleName: data.kmpModuleName!,\n name: schematic.name!,\n });\n return [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n code`\n <RadioGroupControl\n options={[\n ${schematic\n .children!.map(\n (child) =>\n `{ value: ${schematic.name}.${\n child.childName\n }, text: ${JSON.stringify(sentenceCase(child.childName!))} }`,\n )\n .join(\",\\n\")}\n ]}\n />\n `,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n },\n};\nexport const fileSchematicKind: SchematicKind = {\n ...kFormFileSchematicKind,\n nullable: true,\n control: \"@ostack.tech/ui-kform.FileControl\",\n};\nexport const floatSchematicKind: SchematicKind = {\n ...kFormFloatSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const intSchematicKind: SchematicKind = {\n ...kFormIntSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const listCheckboxGroupSchematicKind: SchematicKind = {\n ...kFormListSchematicKind,\n kind: \"List<Enum> (CheckboxGroup)\",\n nullable: false,\n initChildren: (childName) => [\n createSchematic({\n kind: \"Enum\",\n name: pascalCase(childName),\n nullable: false,\n children: [],\n }),\n ],\n builder: ListableBuilderWithoutKindSelect,\n control: \"@ostack.tech/ui-kform.CheckboxGroupControl\",\n scaffoldControl: (schematic, data) => {\n const childSchematic = schematic.children![0];\n if (childSchematic.kind !== \"Enum\") {\n throw new Error(\"Invalid child kind.\");\n }\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n data.currentFile.imports.push({\n moduleName: data.kmpModuleName!,\n name: childSchematic.name!,\n });\n return [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n code`\n <CheckboxGroupControl\n options={[\n ${childSchematic\n .children!.map(\n (child) =>\n `{ value: ${childSchematic.name}.${\n child.childName\n }, text: ${JSON.stringify(sentenceCase(child.childName!))} }`,\n )\n .join(\",\\n\")}\n ]}\n />\n `,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n },\n};\nexport const listSelectMultipleSchematicKind: SchematicKind = {\n ...kFormListSchematicKind,\n kind: \"List<Enum> (SelectMultiple)\",\n nullable: false,\n initChildren: (childName) => [\n createSchematic({\n kind: \"Enum\",\n name: pascalCase(childName),\n nullable: false,\n children: [],\n }),\n ],\n builder: ListableBuilderWithoutKindSelect,\n control: \"@ostack.tech/ui-kform.SelectMultipleControl\",\n scaffoldControl: (schematic, data) => {\n const childSchematic = schematic.children![0];\n if (childSchematic.kind !== \"Enum\") {\n throw new Error(\"Invalid child kind.\");\n }\n if (!data.omitLabel) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui\",\n name: \"Label\",\n });\n }\n data.currentFile.imports.push({\n moduleName: data.kmpModuleName!,\n name: childSchematic.name!,\n });\n return [\n data.omitLabel\n ? null\n : `<Label>${sentenceCase(schematic.childName!)}</Label>`,\n code`\n <SelectMultipleControl\n options={[\n ${childSchematic\n .children!.map(\n (child) =>\n `{ value: ${childSchematic.name}.${\n child.childName\n }, text: ${JSON.stringify(sentenceCase(child.childName!))} }`,\n )\n .join(\",\\n\")}\n ]}\n />\n `,\n ]\n .filter((s) => s)\n .join(\"\\n\");\n },\n};\nexport const localDateSchematicKind: SchematicKind = {\n ...kFormLocalDateSchematicKind,\n nullable: true,\n control: \"@ostack.tech/ui-kform.DateControl\",\n};\nexport const longSchematicKind: SchematicKind = {\n ...kFormLongSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const shortSchematicKind: SchematicKind = {\n ...kFormShortSchematicKind,\n control: \"@ostack.tech/ui-kform.NumericControl\",\n};\nexport const stringSchematicKind: SchematicKind = {\n ...kFormStringSchematicKind,\n control: \"@ostack.tech/ui-kform.TextControl\",\n};\nexport const tableAnnexesSchematicKind: SchematicKind = {\n ...kFormTableSchematicKind,\n kind: \"Table (Annexes)\",\n nullable: false,\n builder: ListableBuilderWithoutKindSelect,\n initChildren: (childName) => [\n createSchematic({\n kind: \"Class (Annex)\",\n packageSuffix: `annexes.${childName.toLowerCase()}`,\n name: pascalCase(childName),\n nullable: false,\n children: [],\n }),\n ],\n propertyAnnotations: (schematic, data) => {\n const annotations = arrayify(\n typeof kFormTableSchematicKind.propertyAnnotations === \"function\"\n ? kFormTableSchematicKind.propertyAnnotations?.(schematic, data)\n : kFormTableSchematicKind.propertyAnnotations,\n );\n if (data.serializationFormat === \"xml\") {\n data.currentFile.imports.add(\n \"nl.adaptivity.xmlutil.serialization.XmlChildrenName\",\n );\n annotations.push(\n `@XmlChildrenName(\"${camelCase(schematic.children![0].name!)}\")`,\n );\n }\n return annotations;\n },\n};\nexport const tableSchematicKind: SchematicKind = {\n ...kFormTableSchematicKind,\n nullable: false,\n builder: ListableBuilderWithoutKindSelect,\n initChildren: (childName) => [\n createSchematic({\n kind: \"Class\",\n name: `${pascalCase(childName)}Row`,\n nullable: false,\n children: [],\n }),\n ],\n propertyAnnotations: tableAnnexesSchematicKind.propertyAnnotations,\n control: \"@ostack.tech/ui-kform.TableControl\",\n scaffoldControl: (schematic, data) => {\n const rowSchematic = schematic.children![0];\n if (rowSchematic.kind !== \"Class\") {\n throw new Error(\"Table child schematic is not of Class kind.\");\n }\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui\", name: \"Label\" },\n {\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"tableControlIndexColumn\",\n },\n {\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"tableControlActionsColumn\",\n },\n {\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"TableControlAddRowTrigger\",\n },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"TableControlContent\" },\n );\n\n return code`\n <TableControl\n columns={[\n tableControlIndexColumn(),\n ${rowSchematic\n .children!.map(\n (child) => code`\n {\n label: ${JSON.stringify(sentenceCase(child.childName!))},\n render: () => (\n ${scaffoldField(child, {\n ...data,\n omitLabel: true,\n currentPath: child.childName!,\n })}\n )\n }\n `,\n )\n .join(\",\\n\")},\n tableControlActionsColumn()\n ]}\n >\n <Label>${sentenceCase(schematic.childName!)}</Label>\n <TableControlAddRowTrigger />\n <TableControlContent />\n </TableControl>\n `;\n },\n};\n\nexport const defaultSchematicKinds = [\n anySchematicKind,\n bigDecimalSchematicKind,\n bigIntegerSchematicKind,\n booleanSchematicKind,\n byteSchematicKind,\n classSchematicKind,\n classAnnexSchematicKind,\n classFormPageSchematicKind,\n doubleSchematicKind,\n enumSchematicKind,\n enumSelectSchematicKind,\n enumRadioGroupSchematicKind,\n fileSchematicKind,\n floatSchematicKind,\n intSchematicKind,\n listCheckboxGroupSchematicKind,\n listSelectMultipleSchematicKind,\n localDateSchematicKind,\n longSchematicKind,\n shortSchematicKind,\n stringSchematicKind,\n tableAnnexesSchematicKind,\n tableSchematicKind,\n];\n","import { joinPaths, type Schematic } from \"@ostack.tech/kform-scaffolder\";\nimport { camelCase } from \"change-case\";\n\nimport {\n classAnnexSchematicKind,\n classFormPageSchematicKind,\n tableAnnexesSchematicKind,\n} from \"../../../SchematicKind.ts\";\nimport type { ReactAppData } from \"../ReactAppData.ts\";\n\nexport interface LayoutAnnex {\n schematic: Schematic;\n data: ReactAppData;\n formPages: LayoutFormPage[];\n}\n\nexport interface LayoutFormPage {\n schematic: Schematic;\n data: ReactAppData;\n}\n\nexport function reactAppLayout(\n schematic: Schematic,\n data: ReactAppData,\n): LayoutAnnex[] {\n const annexes: LayoutAnnex[] = [];\n if (\n schematic.children?.every(\n (child) =>\n child.kind === classAnnexSchematicKind.kind ||\n child.kind === tableAnnexesSchematicKind.kind,\n )\n ) {\n for (const annex of schematic.children) {\n if (annex.kind === classAnnexSchematicKind.kind) {\n annexes.push(\n layoutAnnex(annex, {\n ...data,\n currentPath: joinPaths(data.currentPath, annex.childName),\n currentDir: joinPaths(\n data.currentDir,\n annex.packageSuffix?.replaceAll(\".\", \"/\"),\n ),\n }),\n );\n } else {\n annexes.push(\n layoutRepetitiveAnnex(annex, {\n ...data,\n currentPath: joinPaths(data.currentPath, annex.childName),\n }),\n );\n }\n }\n } else if (\n schematic.children?.every(\n (child) => child.kind === classFormPageSchematicKind.kind,\n )\n ) {\n annexes.push(layoutAnnex(schematic, data));\n } else if (\n schematic.children?.some(\n (child) =>\n child.kind === classAnnexSchematicKind.kind ||\n child.kind === tableAnnexesSchematicKind.kind ||\n child.kind === classFormPageSchematicKind.kind,\n )\n ) {\n throw new Error(\n \"Annexes/form pages cannot be mixed with other kinds of fields.\",\n );\n } else {\n annexes.push(layoutAnnex(schematic, data));\n }\n return annexes;\n}\n\nfunction layoutRepetitiveAnnex(\n schematic: Schematic,\n data: ReactAppData,\n): LayoutAnnex {\n const childSchematic = schematic.children![0];\n return layoutAnnex(childSchematic, {\n ...data,\n currentPath: joinPaths(data.currentPath, \"*\"),\n currentDir: joinPaths(\n data.currentDir,\n childSchematic.packageSuffix?.replaceAll(\".\", \"/\"),\n ),\n });\n}\n\nfunction layoutAnnex(schematic: Schematic, data: ReactAppData): LayoutAnnex {\n if (\n schematic.children?.some(\n (child) =>\n child.kind === classAnnexSchematicKind.kind ||\n child.kind === tableAnnexesSchematicKind.kind,\n )\n ) {\n throw new Error(\n \"Annexes must only appear at the top level of the schematic.\",\n );\n }\n\n let formPages: LayoutFormPage[];\n if (\n schematic.children?.every(\n (child) => child.kind === classFormPageSchematicKind.kind,\n )\n ) {\n formPages = schematic.children?.map((formPage) => ({\n schematic: formPage,\n data: {\n ...data,\n currentPath: joinPaths(\n data.currentPath,\n camelCase(formPage.childName!),\n ),\n currentDir: joinPaths(\n data.currentDir,\n formPage.packageSuffix?.replaceAll(\".\", \"/\"),\n ),\n },\n }));\n } else if (\n schematic.children?.some(\n (child) => child.kind === classFormPageSchematicKind.kind,\n )\n ) {\n throw new Error(\"Form pages cannot be mixed with other kinds of fields.\");\n } else {\n formPages = [{ schematic, data }];\n }\n\n return { schematic, data, formPages };\n}\n","import {\n code,\n joinPaths,\n type Schematic,\n type TsFile,\n tsFile,\n} from \"@ostack.tech/kform-scaffolder\";\nimport {\n capitalCase,\n constantCase,\n kebabCase,\n sentenceCase,\n} from \"change-case\";\n\nimport { DEFAULT_LOCALE } from \"../../configs/DefaultLocaleConfig.tsx\";\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport {\n type LayoutAnnex,\n type LayoutFormPage,\n reactAppLayout,\n} from \"../reactApp/util/reactAppLayout.ts\";\nimport {\n scaffoldIssueMessages,\n shouldScaffoldIssueMessages,\n} from \"./scaffoldIssueMessages.ts\";\n\nexport const DEFAULT_ACTIVE_PATH_SEARCH_PARAM = \"page\";\n\nexport function scaffoldAppComponent(schematic: Schematic, data: ReactAppData) {\n const fileName = joinPaths(data.currentDir, `${schematic.name}App.tsx`);\n let file = data.files.get(fileName) as TsFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = tsFile()));\n }\n scaffoldAppComponentFile(schematic, {\n kmpModuleName: `${kebabCase(schematic.name!)}-shared`,\n ...data,\n currentFile: file,\n });\n scaffoldIssueMessages(schematic, data);\n}\n\nfunction scaffoldAppComponentFile(schematic: Schematic, data: ReactAppData) {\n const localeVar = (data.defaultLocale ?? DEFAULT_LOCALE).replaceAll(\"-\", \"\");\n const activePathSearchParam =\n data.activePathSearchParam ?? DEFAULT_ACTIVE_PATH_SEARCH_PARAM;\n\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/kform\", name: \"ktMapToObject\" },\n { moduleName: \"@ostack.tech/ui\", name: \"useSearchParam\" },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"FormApp\" },\n { moduleName: \"@ostack.tech/ui-kform\", name: localeVar },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"IssuesPanel\" },\n { moduleName: \"react\", name: \"useMemo\" },\n { moduleName: data.kmpModuleName!, name: `${schematic.name}FormMode` },\n { moduleName: data.kmpModuleName!, name: `${schematic.name}Schema` },\n { moduleName: `./api/reportError.ts`, name: \"reportError\" },\n {\n moduleName: `./${schematic.name}Context.ts`,\n name: `use${schematic.name}Context`,\n },\n );\n\n let issueMessagesProp = \"\";\n if (shouldScaffoldIssueMessages(data)) {\n data.currentFile.imports.push({\n moduleName: `./${schematic.name}IssueMessages.tsx`,\n name: `${constantCase(schematic.name!)}_ISSUE_MESSAGES`,\n });\n issueMessagesProp = `\\nissueMessages={${constantCase(schematic.name!)}_ISSUE_MESSAGES}`;\n }\n\n data.currentFile.declarations.push(code`\n export function ${schematic.name}App() {\n const { externalContexts } = use${schematic.name}Context();\n const [activePath, setActivePath] = useSearchParam(\"${activePathSearchParam}\");\n\n return (\n <FormApp\n schema={${schematic.name}Schema.get()}\n initialValue={\n externalContexts.mode !== ${schematic.name}FormMode.NEW\n ? externalContexts.initialValue\n : undefined\n }\n externalContexts={useMemo(\n () => ktMapToObject(externalContexts.toMap()),\n [externalContexts],\n )}\n readOnly={externalContexts.mode === ${schematic.name}FormMode.READ}\n validationMode={\n externalContexts.mode === ${schematic.name}FormMode.READ\n ? \"manual\"\n : \"auto\"\n }\n formTitle=\"${capitalCase(schematic.name!)}\"\n activePath={activePath}\n onActivePathChange={setActivePath}${issueMessagesProp}\n defaultLocale={${localeVar}}\n reportError={reportError}\n >\n ${scaffoldAppLayout(schematic, data)}\n\n <IssuesPanel />\n </FormApp>\n );\n }\n `);\n}\n\nexport function scaffoldAppLayout(\n schematic: Schematic,\n data: ReactAppData,\n scaffoldTopBarFn: (\n data: ReactAppData,\n annexesManager?: string,\n ) => string = scaffoldTopBar,\n): string {\n const layout = reactAppLayout(schematic, data);\n\n if (layout.length === 1 && layout[0].data.currentPath === \"/\") {\n return code`\n ${scaffoldTopBarFn(data)}\n\n ${scaffoldFormPages(data, layout[0])}\n `;\n }\n\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui-kform\", name: \"Annexes\" },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"AnnexesManager\" },\n );\n\n return code`\n <Annexes>\n ${scaffoldTopBarFn(data, \"<AnnexesManager />\")}\n\n ${layout.map((annex) => scaffoldAnnex(data, annex)).join(\"\\n\\n\")}\n </Annexes>\n `;\n}\n\nfunction scaffoldTopBar(data: ReactAppData, annexesManager?: string) {\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui-kform\", name: \"TopBar\" },\n { moduleName: \"@ostack.tech/ui-kform\", name: \"TopBarActions\" },\n { moduleName: \"./actions/Load.tsx\", name: \"Load\" },\n { moduleName: \"./actions/Save.tsx\", name: \"Save\" },\n { moduleName: \"./actions/Validate.tsx\", name: \"Validate\" },\n { moduleName: \"./actions/Submit.tsx\", name: \"Submit\" },\n );\n\n return code`\n <TopBar>${annexesManager ? `\\n ${annexesManager}\\n` : \"\"}\n <TopBarActions>\n <Load />\n <Save />\n <Validate />\n <Submit />\n </TopBarActions>\n </TopBar>\n `;\n}\n\nfunction scaffoldAnnex(data: ReactAppData, annex: LayoutAnnex): string {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"Annex\",\n });\n\n return code`\n <Annex path=\"${annex.data.currentPath}\" title=\"${sentenceCase(annex.schematic.name!)}\"${\n annex.formPages.length === 1 &&\n annex.schematic === annex.formPages[0].schematic\n ? \" documentTitle={null}\"\n : \"\"\n }>\n ${scaffoldFormPages(data, annex)}\n </Annex>\n `;\n}\n\nfunction scaffoldFormPages(data: ReactAppData, annex: LayoutAnnex) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"FormPages\",\n });\n\n let formPagesNavigation = \"\";\n if (annex.formPages.length > 1) {\n data.currentFile.imports.push({\n moduleName: \"@ostack.tech/ui-kform\",\n name: \"FormPagesNavigation\",\n });\n formPagesNavigation = \"\\n <FormPagesNavigation />\\n\";\n }\n\n return code`\n <FormPages>${formPagesNavigation}\n ${annex.formPages.map((formPage) => scaffoldFormPage(data, annex, formPage)).join(\"\\n\\n\")}\n </FormPages>\n `;\n}\n\nfunction scaffoldFormPage(\n data: ReactAppData,\n annex: LayoutAnnex,\n formPage: LayoutFormPage,\n) {\n data.currentFile.imports.push(\n { moduleName: \"@ostack.tech/ui-kform\", name: \"FormPage\" },\n {\n moduleName: `./${joinPaths(\n formPage.data.currentDir!.slice(\n data.currentDir!.length + (data.currentDir!.endsWith(\"/\") ? 0 : 1),\n ),\n formPage.schematic.name,\n )}.tsx`,\n name: formPage.schematic.name!,\n },\n );\n\n let issueMessagesProp = \"\";\n if (shouldScaffoldIssueMessages(data) && formPage.data.currentPath !== \"/\") {\n data.currentFile.imports.push({\n moduleName: `./${joinPaths(\n formPage.data.currentDir!.slice(\n data.currentDir!.length + (data.currentDir!.endsWith(\"/\") ? 0 : 1),\n ),\n formPage.schematic.name,\n )}IssueMessages.tsx`,\n name: `${constantCase(formPage.schematic.name!)}_ISSUE_MESSAGES`,\n });\n issueMessagesProp = ` issueMessages={${constantCase(formPage.schematic.name!)}_ISSUE_MESSAGES}`;\n }\n\n const pathProp =\n annex.schematic === formPage.schematic\n ? \"\"\n : ` path=\"${formPage.data.currentPath!.slice(\n annex.data.currentPath!.length +\n (annex.data.currentPath!.endsWith(\"/\") ? 0 : 1),\n )}\"`;\n const documentTitleProp =\n formPage.data.currentPath === \"/\" ? \" documentTitle={null}\" : \"\";\n\n return code`\n <FormPage${pathProp} title=\"${sentenceCase(\n formPage.schematic.name!,\n )}\" code=\"${formPage.schematic.name?.[0].toUpperCase()}\"${\n documentTitleProp\n }${issueMessagesProp}>\n <${formPage.schematic.name!} />\n </FormPage>\n `;\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport contextTsEjs from \"../templates/react-app/src/Context.ts.ejs?raw\";\n\nexport function scaffoldAppContext(schematic: Schematic, data: ReactAppData) {\n const ejsData = {\n kmpModuleName: data.kmpModuleName ?? `${kebabCase(schematic.name!)}-shared`,\n formClass: schematic.name,\n };\n\n addEjsTemplateFile(\n data,\n `${schematic.name}Context.ts`,\n contextTsEjs,\n ejsData,\n );\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\n\nimport type { KtData } from \"../kotlin/KtData.ts\";\nimport externalContextsKt from \"../templates/shared/src/commonMain/kotlin/ExternalContexts.kt.ejs?raw\";\n\nexport function scaffoldExternalContexts(\n schematic: Schematic,\n data: KtData,\n): void {\n const ejsData = {\n filePackage: data.currentPackage,\n formClass: schematic.name,\n };\n\n addEjsTemplateFile(\n data,\n `${schematic.name}ExternalContexts.kt`,\n externalContextsKt,\n ejsData,\n );\n}\n","import {\n addEjsTemplateFile,\n addTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { capitalCase, kebabCase } from \"change-case\";\n\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport buildGradleKts from \"../templates/build.gradle.kts?raw\";\nimport gradlePropertiesEjs from \"../templates/gradle.properties.ejs?raw\";\nimport libsVersionsTomlEjs from \"../templates/gradle/libs.versions.toml.ejs?raw\";\nimport reactAppBuildGradleKtsEjs from \"../templates/react-app/build.gradle.kts.ejs?raw\";\nimport settingsGradleKtsEjs from \"../templates/settings.gradle.kts.ejs?raw\";\nimport sharedBuildGradleKtsEjs from \"../templates/shared/build.gradle.kts.ejs?raw\";\nimport jsJodaTimeZoneKtEjs from \"../templates/shared/src/jsMain/kotlin/JsJodaTimeZone.kt.ejs?raw\";\n\nexport const DEFAULT_JVM_TOOLCHAIN_VERSION = \"17\";\nexport const DEFAULT_NODEJS_VERSION = \"22.20.0\";\n\nexport function scaffoldGradleProject(\n schematic: Schematic,\n data: ScaffoldingData,\n) {\n const ejsData = {\n gradlePropertiesGroup: data.gradlePropertiesGroup ?? data.currentPackage,\n filePackage: data.currentPackage,\n formId: kebabCase(schematic.name!),\n formTitle: capitalCase(schematic.name!),\n kFormVersion: import.meta.env.VITE_KFORM_VERSION,\n serializationFormat: data.serializationFormat ?? \"json\",\n includeKotlinxDatetime:\n data.includeKotlinxDatetime ?? usesKotlinxDatetime(schematic, data),\n includeKtMath: data.includeKtMath ?? usesKtMath(schematic),\n jvmToolchainVersion:\n data.jvmToolchainVersion ?? DEFAULT_JVM_TOOLCHAIN_VERSION,\n nodejsVersion: data.nodejsVersion ?? DEFAULT_NODEJS_VERSION,\n };\n\n addEjsTemplateFile(data, \"gradle.properties\", gradlePropertiesEjs, ejsData);\n addEjsTemplateFile(\n data,\n \"settings.gradle.kts\",\n settingsGradleKtsEjs,\n ejsData,\n );\n addEjsTemplateFile(\n data,\n \"gradle/libs.versions.toml\",\n libsVersionsTomlEjs,\n ejsData,\n );\n addTemplateFile(data, \"build.gradle.kts\", buildGradleKts);\n addEjsTemplateFile(\n data,\n \"shared/build.gradle.kts\",\n sharedBuildGradleKtsEjs,\n ejsData,\n );\n if (ejsData.includeKotlinxDatetime) {\n addEjsTemplateFile(\n data,\n \"shared/src/jsMain/kotlin/JsJodaTimeZone.kt\",\n jsJodaTimeZoneKtEjs,\n ejsData,\n );\n }\n addEjsTemplateFile(\n data,\n \"react-app/build.gradle.kts\",\n reactAppBuildGradleKtsEjs,\n ejsData,\n );\n}\n\nfunction usesKotlinxDatetime(\n schematic: Schematic,\n data: ScaffoldingData,\n): boolean {\n const schematicKind = data.schematicKinds.get(schematic.kind);\n return (\n schematicKind?.package === \"kotlinx.datetime\" ||\n schematic.children?.some((child) => usesKotlinxDatetime(child, data)) ===\n true\n );\n}\n\nfunction usesKtMath(schematic: Schematic): boolean {\n return (\n [\"BigInteger\", \"BigDecimal\"].includes(schematic.kind) ||\n schematic.children?.some((child) => usesKtMath(child)) === true\n );\n}\n","export default \"data:application/java-archive;base64,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AAAAAAAAAAAAAAAwDgAATUVUQS1JTkYvTUFOSUZFU1QuTUZVVAUAAQAAAABQSwECFAAUAAgICAAAACEAAsIE3yIBAABwAQAAMQAJAAAAAAAAAAAAAAD2DgAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVBcmd1bWVudEV4Y2VwdGlvbi5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQBsZK5NbgIAALMDAAAmAAkAAAAAAAAAAAAAAIAQAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZU9wdGlvbi5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQBrrAeZWwIAALYEAAAzAAkAAAAAAAAAAAAAAEsTAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRBZnRlck9wdGlvbnMuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEABUgOxC4DAABdBwAAPAAJAAAAAAAAAAAAAAAQFgAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkQmVmb3JlRmlyc3RTdWJDb21tYW5kLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAO+A7pzcBgAAYg4AAD0ACQAAAAAAAAAAAAAAsRkAAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lUGFyc2VyJEtub3duT3B0aW9uUGFyc2VyU3RhdGUuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEAxIDBO00CAACXBAAAPAAJAAAAAAAAAAAAAAABIQAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkTWlzc2luZ09wdGlvbkFyZ1N0YXRlLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAKUEGSPYAgAASgUAAD0ACQAAAAAAAAAAAAAAwSMAAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lUGFyc2VyJE9wdGlvbkF3YXJlUGFyc2VyU3RhdGUuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEAIjgzfKIBAAB9AgAAOAAJAAAAAAAAAAAAAAANJwAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkT3B0aW9uUGFyc2Vy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\"","import { addTemplateFile, type Schematic } from \"@ostack.tech/kform-scaffolder\";\n\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport gradleWrapperJarUrl from \"../templates/gradle/wrapper/gradle-wrapper.jar?url\";\nimport gradleWrapperProperties from \"../templates/gradle/wrapper/gradle-wrapper.properties?raw\";\nimport gradlewBat from \"../templates/gradlew.bat?raw\";\nimport gradlew from \"../templates/gradlew?raw\";\n\nexport function scaffoldGradleWrapper(\n _schematic: Schematic,\n data: ScaffoldingData,\n) {\n // Gradle\n addTemplateFile(data, \"gradlew\", gradlew, { executable: true });\n addTemplateFile(data, \"gradlew.bat\", gradlewBat);\n addTemplateFile(\n data,\n \"gradle/wrapper/gradle-wrapper.jar\",\n fetch(gradleWrapperJarUrl).then((res) => res.arrayBuffer()),\n );\n addTemplateFile(\n data,\n \"gradle/wrapper/gradle-wrapper.properties\",\n gradleWrapperProperties,\n );\n}\n","import {\n code,\n joinPaths,\n type Schematic,\n type TsFile,\n tsFile,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\n\nexport function scaffoldMain(schematic: Schematic, data: ReactAppData) {\n const fileName = joinPaths(data.currentDir, \"main.tsx\");\n let file = data.files.get(fileName) as TsFile | undefined;\n if (!file) {\n data.files.set(fileName, (file = tsFile()));\n }\n scaffoldMainDeclarations(schematic, {\n kmpModuleName: `${kebabCase(schematic.name!)}-shared`,\n ...data,\n currentFile: file,\n });\n}\n\nfunction scaffoldMainDeclarations(schematic: Schematic, data: ReactAppData) {\n data.currentFile.imports.push(\n { moduleName: \"./index.scss\" },\n { moduleName: \"react\", name: \"StrictMode\" },\n { moduleName: \"react-dom/client\", name: \"createRoot\" },\n {\n moduleName: data.kmpModuleName!,\n name: `decode${schematic.name}ExternalContextsFromString`,\n },\n {\n moduleName: `./${schematic.name}Context.ts`,\n name: `${schematic.name}Context`,\n },\n {\n moduleName: `./${schematic.name!}App.tsx`,\n name: `${schematic.name!}App`,\n },\n );\n\n data.currentFile.declarations.push(code`\n export function renderRoot(encodedExternalContexts: string) {\n createRoot(document.getElementById(\"${kebabCase(schematic.name!)}-app-root\")!).render(\n <StrictMode>\n <${schematic.name}Context.Provider\n value={{\n externalContexts: decode${schematic.name}ExternalContextsFromString(\n encodedExternalContexts,\n ),\n }}\n >\n <${schematic.name!}App />\n </${schematic.name}Context.Provider>\n </StrictMode>,\n );\n }\n `);\n}\n","import { addTemplateFile, type Schematic } from \"@ostack.tech/kform-scaffolder\";\n\nimport type { ScaffoldingData } from \"../ScaffoldingData.ts\";\nimport editorconfig from \"../templates/_editorconfig?raw\";\nimport gitattributes from \"../templates/_gitattributes?raw\";\nimport gitignore from \"../templates/_gitignore?raw\";\n\nexport function scaffoldProjectMisc(\n _schematic: Schematic,\n data: ScaffoldingData,\n) {\n addTemplateFile(data, \".gitignore\", gitignore);\n addTemplateFile(data, \".gitattributes\", gitattributes);\n addTemplateFile(data, \".editorconfig\", editorconfig);\n}\n","import {\n addEjsTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\n\nimport type { KtData } from \"../kotlin/KtData.ts\";\nimport responsesKt from \"../templates/shared/src/commonMain/kotlin/Responses.kt.ejs?raw\";\n\nexport function scaffoldResponses(schematic: Schematic, data: KtData): void {\n const ejsData = {\n filePackage: data.currentPackage,\n formClass: schematic.name,\n };\n\n addEjsTemplateFile(\n data,\n `${schematic.name}Responses.kt`,\n responsesKt,\n ejsData,\n );\n}\n","import { addTemplateFile, type Schematic } from \"@ostack.tech/kform-scaffolder\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport indexScss from \"../templates/react-app/src/index.scss?raw\";\n\nexport function scaffoldStyles(_schematic: Schematic, data: ReactAppData) {\n addTemplateFile(data, \"index.scss\", indexScss);\n}\n","import {\n addEjsTemplateFile,\n addTemplateFile,\n type Schematic,\n} from \"@ostack.tech/kform-scaffolder\";\nimport { capitalCase, kebabCase } from \"change-case\";\n\nimport type { ReactAppData } from \"../reactApp/ReactAppData.ts\";\nimport eslintConfigJs from \"../templates/react-app/eslint.config.js?raw\";\nimport indexHtmlEjs from \"../templates/react-app/index.html.ejs?raw\";\nimport packageJsonEjs from \"../templates/react-app/package.json.ejs?raw\";\nimport viteSvg from \"../templates/react-app/public/vite.svg?raw\";\nimport tsConfigAppJson from \"../templates/react-app/tsconfig.app.json?raw\";\nimport tsConfigJson from \"../templates/react-app/tsconfig.json?raw\";\nimport tsConfigNodeJson from \"../templates/react-app/tsconfig.node.json?raw\";\nimport viteConfigTsEjs from \"../templates/react-app/vite.config.ts.ejs?raw\";\nimport { DEFAULT_API_BASE_PATH } from \"./scaffoldApi.ts\";\n\nexport const DEFAULT_VITE_CONFIG_OUT_DIR = \"build/dist/\";\nexport const DEFAULT_VITE_CONFIG_PROXY_TARGET = \"http://127.0.0.1:8080/\";\n\nexport function scaffoldViteProject(schematic: Schematic, data: ReactAppData) {\n const ejsData = {\n formId: kebabCase(schematic.name!),\n formClass: schematic.name,\n formTitle: capitalCase(schematic.name!),\n ostackUiVersion: import.meta.env.VITE_OSTACK_UI_VERSION,\n kFormVersion: import.meta.env.VITE_KFORM_VERSION,\n dependencyVersions: JSON.parse(import.meta.env.VITE_DEPENDENCY_VERSIONS),\n encodedExternalContexts: JSON.stringify(\n data.serializationFormat === \"json\"\n ? \"{}\"\n : `<${schematic.name}ExternalContexts />`,\n ),\n apiBasePath: data.apiBasePath ?? DEFAULT_API_BASE_PATH,\n viteConfigOutDir: data.viteConfigOutDir ?? DEFAULT_VITE_CONFIG_OUT_DIR,\n viteConfigProxyTarget:\n data.viteConfigProxyTarget ?? DEFAULT_VITE_CONFIG_PROXY_TARGET,\n };\n\n addEjsTemplateFile(data, \"react-app/package.json\", packageJsonEjs, ejsData);\n addEjsTemplateFile(\n data,\n \"react-app/vite.config.ts\",\n viteConfigTsEjs,\n ejsData,\n );\n addTemplateFile(data, \"react-app/tsconfig.json\", tsConfigJson);\n addTemplateFile(data, \"react-app/tsconfig.app.json\", tsConfigAppJson);\n addTemplateFile(data, \"react-app/tsconfig.node.json\", tsConfigNodeJson);\n addTemplateFile(data, \"react-app/eslint.config.js\", eslintConfigJs);\n addEjsTemplateFile(data, \"react-app/index.html\", indexHtmlEjs, ejsData);\n addTemplateFile(data, \"react-app/public/vite.svg\", viteSvg);\n}\n","import {\n configScaffolder,\n scaffoldModels,\n scaffoldSchemas,\n scaffoldValidator,\n SchematicBuilder as KFormSchematicBuilder,\n type SchematicBuilderProps as KFormSchematicBuilderProps,\n} from \"@ostack.tech/kform-scaffolder\";\n\nimport { DefaultLocaleConfig } from \"./configs/DefaultLocaleConfig.tsx\";\nimport { SerializationFormatConfig } from \"./configs/SerializationFormatConfig.tsx\";\nimport { UseTableValuesSerializerConfig } from \"./configs/UseTableValuesSerializerConfig.tsx\";\nimport type { KtData } from \"./scaffolding/kotlin/KtData.ts\";\nimport type { ReactAppData } from \"./scaffolding/reactApp/ReactAppData.ts\";\nimport { scaffoldActions } from \"./scaffolding/scaffolders/scaffoldActions.ts\";\nimport { scaffoldApi } from \"./scaffolding/scaffolders/scaffoldApi.ts\";\nimport { scaffoldAppComponent } from \"./scaffolding/scaffolders/scaffoldAppComponent.ts\";\nimport { scaffoldAppContext } from \"./scaffolding/scaffolders/scaffoldAppContext.ts\";\nimport { scaffoldExternalContexts } from \"./scaffolding/scaffolders/scaffoldExternalContexts.ts\";\nimport { scaffoldGradleProject } from \"./scaffolding/scaffolders/scaffoldGradleProject.ts\";\nimport { scaffoldGradleWrapper } from \"./scaffolding/scaffolders/scaffoldGradleWrapper.ts\";\nimport { scaffoldMain } from \"./scaffolding/scaffolders/scaffoldMain.ts\";\nimport { scaffoldPageComponents } from \"./scaffolding/scaffolders/scaffoldPageComponents.ts\";\nimport { scaffoldProjectMisc } from \"./scaffolding/scaffolders/scaffoldProjectMisc.ts\";\nimport { scaffoldResponses } from \"./scaffolding/scaffolders/scaffoldResponses.ts\";\nimport { scaffoldSerializer } from \"./scaffolding/scaffolders/scaffoldSerializer.ts\";\nimport { scaffoldStyles } from \"./scaffolding/scaffolders/scaffoldStyles.ts\";\nimport { scaffoldViteProject } from \"./scaffolding/scaffolders/scaffoldViteProject.ts\";\nimport { defaultSchematicKinds, type SchematicKind } from \"./SchematicKind.ts\";\n\nexport interface SchematicBuilderProps extends KFormSchematicBuilderProps {\n schematicKinds?: SchematicKind[];\n}\n\nconst kotlinMainData: Partial<KtData> = {\n currentDir: \"shared/src/commonMain/kotlin\",\n};\nconst kotlinTestData: Partial<KtData> = {\n currentDir: \"shared/src/commonTest/kotlin\",\n};\nconst reactAppData: Partial<ReactAppData> = {\n currentDir: \"react-app/src\",\n};\n\nexport function SchematicBuilder({\n name = \"ostack-ui-kform\",\n schematicKinds = defaultSchematicKinds,\n scaffolders = [\n scaffoldProjectMisc,\n scaffoldGradleWrapper,\n scaffoldGradleProject,\n scaffoldViteProject,\n configScaffolder(scaffoldSchemas, kotlinMainData),\n configScaffolder(scaffoldModels, kotlinMainData),\n configScaffolder(scaffoldResponses, kotlinMainData),\n configScaffolder(scaffoldExternalContexts, kotlinMainData),\n configScaffolder(scaffoldSerializer, kotlinMainData),\n configScaffolder(scaffoldValidator, kotlinTestData),\n configScaffolder(scaffoldMain, reactAppData),\n configScaffolder(scaffoldStyles, reactAppData),\n configScaffolder(scaffoldAppComponent, reactAppData),\n configScaffolder(scaffoldAppContext, reactAppData),\n configScaffolder(scaffoldActions, reactAppData),\n configScaffolder(scaffoldApi, reactAppData),\n configScaffolder(scaffoldPageComponents, reactAppData),\n ],\n scaffoldingData = (schematic) => ({\n useFileBase64Serializer: true,\n ...schematic.config,\n }),\n configs = (\n <>\n <DefaultLocaleConfig />\n <SerializationFormatConfig />\n <UseTableValuesSerializerConfig />\n </>\n ),\n version = import.meta.env.VITE_OSTACK_UI_VERSION,\n ...otherProps\n}: SchematicBuilderProps) {\n return (\n <KFormSchematicBuilder\n name={name}\n schematicKinds={schematicKinds}\n scaffolders={scaffolders}\n scaffoldingData={scaffoldingData}\n configs={configs}\n version={version}\n {...otherProps}\n />\n );\n}\n"],"mappings":"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"}
|