@ostack.tech/ui-kform-scaffolder 0.15.0 → 0.15.2
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/webapp/assets/gradle-wrapper-BR-5feie.jar +0 -0
- package/dist/webapp/assets/index-BDQK-p1w.js +1516 -0
- package/dist/webapp/assets/index-BKUWl2po.css +1 -0
- package/dist/webapp/index.html +2 -2
- package/package.json +7 -7
- package/{dist/types → types}/SchematicBuilder.d.ts +3 -3
- package/{dist/types → types}/SchematicKind.d.ts +3 -3
- package/{dist/types → types}/configs/DefaultLocaleConfig.d.ts +1 -1
- package/{dist/types → types}/configs/SerializationFormatConfig.d.ts +1 -1
- package/{dist/types → types}/configs/UseTableValuesSerializerConfig.d.ts +1 -1
- package/types/index.d.ts +24 -0
- package/types/main.d.ts +1 -0
- package/{dist/types → types}/scaffolding/ScaffoldingData.d.ts +2 -2
- package/types/scaffolding/kotlin/KtData.d.ts +4 -0
- package/{dist/types → types}/scaffolding/reactApp/ReactAppData.d.ts +2 -2
- package/{dist/types → types}/scaffolding/reactApp/util/reactAppLayout.d.ts +2 -2
- package/types/scaffolding/scaffolders/scaffoldActions.d.ts +3 -0
- package/{dist/types → types}/scaffolding/scaffolders/scaffoldApi.d.ts +2 -2
- package/{dist/types → types}/scaffolding/scaffolders/scaffoldAppComponent.d.ts +2 -2
- package/types/scaffolding/scaffolders/scaffoldAppContext.d.ts +3 -0
- package/types/scaffolding/scaffolders/scaffoldExternalContexts.d.ts +3 -0
- package/types/scaffolding/scaffolders/scaffoldGradleProject.d.ts +5 -0
- package/types/scaffolding/scaffolders/scaffoldGradleWrapper.d.ts +3 -0
- package/{dist/types → types}/scaffolding/scaffolders/scaffoldIssueMessages.d.ts +2 -2
- package/types/scaffolding/scaffolders/scaffoldMain.d.ts +3 -0
- package/{dist/types → types}/scaffolding/scaffolders/scaffoldPageComponents.d.ts +2 -2
- package/types/scaffolding/scaffolders/scaffoldProjectMisc.d.ts +3 -0
- package/types/scaffolding/scaffolders/scaffoldResponses.d.ts +3 -0
- package/{dist/types → types}/scaffolding/scaffolders/scaffoldSerializer.d.ts +2 -2
- package/types/scaffolding/scaffolders/scaffoldStyles.d.ts +3 -0
- package/{dist/types → types}/scaffolding/scaffolders/scaffoldViteProject.d.ts +2 -2
- package/dist/types/index.d.ts +0 -24
- package/dist/types/main.d.ts +0 -0
- package/dist/types/scaffolding/kotlin/KtData.d.ts +0 -4
- package/dist/types/scaffolding/scaffolders/scaffoldActions.d.ts +0 -3
- package/dist/types/scaffolding/scaffolders/scaffoldAppContext.d.ts +0 -3
- package/dist/types/scaffolding/scaffolders/scaffoldExternalContexts.d.ts +0 -3
- package/dist/types/scaffolding/scaffolders/scaffoldGradleProject.d.ts +0 -5
- package/dist/types/scaffolding/scaffolders/scaffoldGradleWrapper.d.ts +0 -3
- package/dist/types/scaffolding/scaffolders/scaffoldMain.d.ts +0 -3
- package/dist/types/scaffolding/scaffolders/scaffoldProjectMisc.d.ts +0 -3
- package/dist/types/scaffolding/scaffolders/scaffoldResponses.d.ts +0 -3
- package/dist/types/scaffolding/scaffolders/scaffoldStyles.d.ts +0 -3
- package/dist/webapp/assets/index-DFHwLN8U.js +0 -1529
- package/dist/webapp/assets/index-x_B5n20N.css +0 -1
- /package/{dist/types → types}/util/arrayify.d.ts +0 -0
|
@@ -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;AA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"}
|
|
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 = \"21\";\nexport const DEFAULT_NODEJS_VERSION = \"24.16.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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Zy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lUGFyc2VyJEFmdGVyT3B0aW9ucy5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQCj0ttQVAMAAJMHAAA8AAkAAAAAAAAAAAAAAEkWAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRCZWZvcmVGaXJzdFN1YkNvbW1hbmQuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEALlZDIGAHAAA6DwAAPQAJAAAAAAAAAAAAAAAQGgAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkS25vd25PcHRpb25QYXJzZXJTdGF0ZS5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQDU5SDkTAIAAJcEAAA8AAkAAAAAAAAAAAAAAOQhAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRNaXNzaW5nT3B0aW9uQXJnU3RhdGUuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEAmT0V29YCAABKBQAAPQAJAAAAAAAAAAAAAACjJAAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkT3B0aW9uQXdhcmVQYXJzZXJTdGF0ZS5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQCflW/2oQEAAH0CAAA4AAkAAAAAAAAAAAAAAO0nAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRPcHRpb25QYXJzZXJTdGF0ZS5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQBXvGfjIgIAAGYDAAAzAAkAAAAAAAAAAAAAAP0pAABvcmcvZ3JhZGxlL2NsaS9Db21tYW5kTGluZVBhcnNlciRPcHRpb25TdHJpbmcuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEAYjZYZqYBAADOAgAAMgAJAAAAAAAAAAAAAACJLAAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkUGFyc2VyU3RhdGUuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEA/Y4pdXQCAADHBAAAPwAJAAAAAAAAAAAAAACYLgAAb3JnL2dyYWRsZS9jbGkvQ29tbWFuZExpbmVQYXJzZXIkVW5rbm93bk9wdGlvblBhcnNlclN0YXRlLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAEoBjirqBAAA0ggAACYACQAAAAAAAAAAAAAAgjEAAG9yZy9ncmFkbGUvY2xpL0NvbW1hbmRMaW5lUGFyc2VyLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAIKL8BCEBAAAUggAACYACQAAAAAAAAAAAAAAyTYAAG9yZy9ncmFkbGUvY2xpL1BhcnNlZENvbW1hbmRMaW5lLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAO2cvGdSAQAArAEAACwACQAAAAAAAAAAAAAAqjsAAG9yZy9ncmFkbGUvY2xpL1BhcnNlZENvbW1hbmRMaW5lT3B0aW9uLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAM7QOawiBQAAVggAADMACQAAAAAAAAAAAAAAXz0AAG9yZy9ncmFkbGUvaW50ZXJuYWwvZmlsZS9QYXRoVHJhdmVyc2FsQ2hlY2tlci5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQDp+MhHngEAACYCAABBAAkAAAAAAAAAAAAAAOtCAABvcmcvZ3JhZGxlL2ludGVybmFsL2ZpbGUvbG9ja2luZy9FeGNsdXNpdmVGaWxlQWNjZXNzTWFuYWdlci5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQBE8acw2wEAAMcCAAA+AAkAAAAAAAAAAAAAAAFFAABvcmcvZ3JhZGxlL3V0aWwvaW50ZXJuYWwvV3JhcHBlckRpc3RyaWJ1dGlvblVybENvbnZlcnRlci5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQClNa2HjwEAAB4CAAAvAAkAAAAAAAAAAAAAAFFHAABvcmcvZ3JhZGxlL3dyYXBwZXIvQm9vdHN0cmFwTWFpblN0YXJ0ZXIkMS5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQBgdBonSwMAABIFAABBAAkAAAAAAAAAAAAAAEZJAABvcmcvZ3JhZGxlL3dyYXBwZXIvRG93bmxvYWQkRGVmYXVsdERvd25sb2FkUHJvZ3Jlc3NMaXN0ZW5lci5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQACc6nUBwMAAEEFAAA0AAkAAAAAAAAAAAAAAAlNAABvcmcvZ3JhZGxlL3dyYXBwZXIvRG93bmxvYWQkUHJveHlBdXRoZW50aWNhdG9yLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhABQxDlHZCQAA5hIAACEACQAAAAAAAAAAAAAAe1AAAG9yZy9ncmFkbGUvd3JhcHBlci9Eb3dubG9hZC5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQCqi+MW2QEAALICAAAtAAkAAAAAAAAAAAAAAKxaAABvcmcvZ3JhZGxlL3dyYXBwZXIvR3JhZGxlVXNlckhvbWVMb29rdXAuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEAodQH4X8WAABdLQAAKgAJAAAAAAAAAAAAAADpXAAAb3JnL2dyYWRsZS93cmFwcGVyL0dyYWRsZVdyYXBwZXJNYWluLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAJOC8wXEDAAAshgAACIACQAAAAAAAAAAAAAAyXMAAG9yZy9ncmFkbGUvd3JhcHBlci9JbnN0YWxsJDEuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEAarrq82oBAADnAQAALQAJAAAAAAAAAAAAAADmgAAAb3JnL2dyYWRsZS93cmFwcGVyL0luc3RhbGwkSW5zdGFsbENoZWNrLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhAEmBk+cSEQAA0yAAACAACQAAAAAAAAAAAAAAtIIAAG9yZy9ncmFkbGUvd3JhcHBlci9JbnN0YWxsLmNsYXNzVVQFAAEAAAAAUEsBAhQAFAAICAgAAAAhACeuAolbAgAAWgQAAB8ACQAAAAAAAAAAAAAAHZQAAG9yZy9ncmFkbGUvd3JhcHBlci9Mb2dnZXIuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEA7t7O9SQBAABqAQAAJgAJAAAAAAAAAAAAAADOlgAAb3JnL2dyYWRsZS93cmFwcGVyL1BhdGhBc3NlbWJsZXIuY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEAdFgpujIEAABmBwAALgAJAAAAAAAAAAAAAABPmAAAb3JnL2dyYWRsZS93cmFwcGVyL1Byb3BlcnRpZXNGaWxlSGFuZGxlci5jbGFzc1VUBQABAAAAAFBLAQIUABQACAgIAAAAIQCzldMe7gIAAFAGAAAtAAkAAAAAAAAAAAAAAOacAABvcmcvZ3JhZGxlL3dyYXBwZXIvV3JhcHBlckNvbmZpZ3VyYXRpb24uY2xhc3NVVAUAAQAAAABQSwECFAAUAAgICAAAACEABq9Rm6IGAABEDQAAKAAJAAAAAAAAAAAAAAA4oAAAb3JnL2dyYWRsZS93cmFwcGVyL1dyYXBwZXJFeGVjdXRvci5jbGFzc1VUBQABAAAAAFBLBQYAAAAAIQAhABANAAA5pwAAAAA=\"","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":";;;;;AAOA,IAAa,iBAAiB;AAE9B,IAAa,UAAoB,KAAK,MAAA,2CAAkC;AAExE,SAAgB,oBAAoB,EAClC,eAAe,gBACf,YAC2B;CAC3B,MAAM,CAAC,QAAQ,aAAa,UAAU,iBAAiB,YAAY;CACnE,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,SAAD,EAAA,UAAO,iBAAqB,CAAA,GAC5B,oBAAC,UAAD;GACE,OAAO;GACP,WAAW,QAAQ;IACjB,UAAU,IAAI,OAAO,KAAK;GAC5B;GACU;aAET,QAAQ,KAAK,WACZ,oBAAC,UAAD;IAAqB,OAAO;cACzB;GACK,GAFK,MAEL,CACT;EACK,CAAA,CACL;;AAET;;;ACxBA,IAAa,+BAA+B;AAE5C,SAAgB,0BAA0B,EACxC,eAAe,8BACf,YACiC;CACjC,MAAM,CAAC,gCAAgC,qCACrC,UAAU,4BAA4B,KAAK;CAC7C,MAAM,qCAAqC,OACzC,8BACF;CACA,MAAM,CAAC,QAAQ,aAAa,UAAU,uBAAuB,YAAY;CACzE,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,SAAD,EAAA,UAAO,uBAA2B,CAAA,GAClC,qBAAC,UAAD;GACE,OAAO;GACP,WAAW,QAAQ;IACjB,UAAU,IAAI,OAAO,KAA4B;IACjD,IAAI,IAAI,OAAO,UAAU,OAAO;KAC9B,mCAAmC,UACjC;KACF,kCAAkC,IAAI;IACxC,OACE,kCACE,mCAAmC,OACrC;GAEJ;GACU;aAdZ,CAgBE,oBAAC,UAAD;IAAQ,OAAM;cAAO;GAAY,CAAA,GACjC,oBAAC,UAAD;IAAQ,OAAM;cAAM;GAAW,CAAA,CACzB;IACL;;AAET;;;ACnCA,SAAgB,+BAA+B,EAC7C,YACsC;CACtC,MAAM,CAAC,6BAA6B,UAClC,uBACA,4BACF;CACA,OACE,oBAAC,kCAAD,EACE,UAAU,YAAY,8BAA8B,MACrD,CAAA;AAEL;;;;;;;;;;;;;;;ACXA,SAAgB,gBAAgB,WAAsB,MAAoB;CACxE,MAAM,UAAU;EACd,eAAe,KAAK,iBAAiB,GAAG,UAAU,UAAU,IAAK,EAAE;EACnE,qBAAqB,KAAK,uBAAuB;EACjD,uBAAuB,eAAe,KAAK;EAC3C,SAAS,UAAU,UAAU,IAAK;EAClC,WAAW,UAAU;EACrB,0BAA0B,KAAK;CACjC;CAEA,mBAAmB,MAAM,oBAAoB,kBAAY,OAAO;CAChE,mBAAmB,MAAM,oBAAoB,kBAAY,OAAO;CAChE,mBAAmB,MAAM,sBAAsB,oBAAc,OAAO;CACpE,mBAAmB,MAAM,wBAAwB,sBAAgB,OAAO;AAC1E;;;;;;;;;;;;ACdA,IAAa,wBAAwB;AACrC,IAAa,oCAAoC;AACjD,IAAa,8BAA8B;AAE3C,SAAgB,YAAY,WAAsB,MAAoB;CACpE,MAAM,UAAU;EACd,eAAe,KAAK,iBAAiB,GAAG,UAAU,UAAU,IAAK,EAAE;EACnE,qBACE,KAAK,uBAAA;EACP,uBAAuB,eAAe,KAAK;EAC3C,SAAS,UAAU,UAAU,IAAK;EAClC,WAAW,UAAU;EACrB,aAAa,KAAK,eAAA;EAClB,wBACE,KAAK,0BAAA;EACP,mBAAmB,KAAK,qBAAA;CAC1B;CAEA,mBAAmB,MAAM,mBAAmB,qBAAe,OAAO;CAClE,mBAAmB,MAAM,sBAAsB,wBAAkB,OAAO;CACxE,mBAAmB,MAAM,iBAAiB,mBAAa,OAAO;AAChE;;;ACtBA,IAAM,kCAAkC;AAExC,SAAgB,sBACd,WACA,MACA;CACA,IAAI,CAAC,4BAA4B,IAAI,GACnC;CAGF,MAAM,WAAW,UACf,KAAK,YACL,GAAG,UAAU,KAAK,kBACpB;CACA,IAAI,OAAO,KAAK,MAAM,IAAI,QAAQ;CAClC,IAAI,CAAC,MACH,KAAK,MAAM,IAAI,UAAW,OAAO,OAAO,CAAE;CAE5C,8BAA8B,WAAW;EACvC,eAAe,GAAG,UAAU,KAAK,cAAc,IAAK,EAAE;EACtD,GAAG;EACH,aAAa;CACf,CAAC;AACH;AAEA,SAAgB,4BAA4B,MAAoB;CAC9D,OAAO,KAAK,yBAAyB;AACvC;AAEA,SAAS,8BACP,WACA,MACA;CACA,KAAK,YAAY,QAAQ,KAAK;EAC5B,YAAY;EACZ,MAAM;EACN,QAAQ;CACV,CAAC;CACD,KAAK,YAAY,aAAa,KAAK,IAAI;mBACtB,aAAa,UAAU,IAAK,EAAE;GAC9C;AACH;;;ACtCA,SAAgB,uBACd,WACA,MACA;CACA,MAAM,SAAS,eAAe,WAAW;EACvC,eAAe,GAAG,UAAU,UAAU,IAAK,EAAE;EAC7C,GAAG;CACL,CAAC;CACD,KAAK,MAAM,SAAS,QAClB,KAAK,MAAM,YAAY,MAAM,WAAW;EACtC,sBAAsB,SAAS,WAAW,SAAS,IAAI;EACvD,IAAI,SAAS,KAAK,gBAAgB,KAChC,sBAAsB,SAAS,WAAW,SAAS,IAAI;CAE3D;AAEJ;AAEA,SAAS,sBAAsB,WAAsB,MAAoB;CACvE,MAAM,WAAW,UAAU,KAAK,YAAY,GAAG,UAAU,KAAK,KAAK;CACnE,IAAI,OAAO,KAAK,MAAM,IAAI,QAAQ;CAClC,IAAI,CAAC,MACH,KAAK,MAAM,IAAI,UAAW,OAAO,OAAO,CAAE;CAE5C,kCAAkC,WAAW;EAC3C,eAAe,GAAG,UAAU,KAAK,cAAc,IAAK,EAAE;EACtD,GAAG;EACH,aAAa;CACf,CAAC;AACH;AAEA,SAAS,kCACP,WACA,MACA;CACA,KAAK,YAAY,QAAQ,KAAK;EAC5B,YAAY;EACZ,MAAM;CACR,CAAC;CAED,KAAK,YAAY,aAAa,KAAK,IAAI;sBACnB,UAAU,KAAK;;;YAGzB,UACC,SAAU,KACR,UACC,IAAI;;sBAEE,cAAc,OAAO;EACrB,GAAG;EACH,aAAa,MAAM;CACrB,CAAC,EAAE;;iBAGX,EACC,KAAK,MAAM,EAAE;;;;GAIvB;AACH;AAEA,SAAgB,cAAc,WAAsB,MAAoB;CACtE,MAAM,gBAAgB,KAAK,eAAe,IACxC,UAAU,IACZ;CACA,IAAI,CAAC,eACH,MAAM,IAAI,MAAM,0BAA0B,UAAU,MAAM;CAG5D,IAAI,cAAc,eAChB,OAAO,cAAc,gBAAgB,WAAW,IAAI;CAGtD,KAAK,YAAY,QAAQ,KAAK;EAC5B,YAAY;EACZ,MAAM;CACR,CAAC;CAED,IAAI;CACJ,IAAI;CACJ,IAAI,cAAc,SAAS;EACzB,MAAM,mBAAmB,cAAc,QAAQ,YAAY,GAAG;EAC9D,oBAAoB,cAAc,QAAQ,MAAM,GAAG,gBAAgB;EACnE,cAAc,cAAc,QAAQ,MAAM,mBAAmB,CAAC;EAC9D,KAAK,YAAY,QAAQ,KAAK;GAC5B,YAAY;GACZ,MAAM;EACR,CAAC;CACH;CAEA,IAAI,UAAU,cAAc,kBAAkB,WAAW,IAAI;CAC7D,IAAI,CAAC,SAAS;EACZ,IAAI,CAAC,KAAK,WACR,KAAK,YAAY,QAAQ,KAAK;GAC5B,YAAY;GACZ,MAAM;EACR,CAAC;EAEH,UAAU,CACR,KAAK,YACD,OACA,UAAU,aAAa,UAAU,SAAU,EAAE,WACjD,IAAI,YAAa,IACnB,EACG,QAAQ,MAAM,CAAC,EACf,KAAK,IAAI;CACd;CAEA,OAAO,IAAI;0BACa,KAAK,YAAY;QACnC,QAAQ;;;AAGhB;;;;;;;;;ACvHA,IAAa,+CAA+C;AAE5D,SAAgB,mBAAmB,WAAsB,MAAoB;CAC3E,MAAM,UAAU;EACd,aAAa,KAAK;EAClB,SAAS,UAAU,UAAU,IAAK;EAClC,WAAW,UAAU;EACrB,cAAc,aAAa,UAAU,IAAK;EAC1C,mCACE,KAAK,qCAAA;CAET;CAEA,mBACE,MACA,GAAG,UAAU,KAAK,gBAClB,KAAK,wBAAwB,QAAQ,2BAAkB,2BACvD,OACF;AACF;;;AC7BA,SAAgB,SAAY,OAAwC;CAClE,OAAO,SAAS,OAAO,CAAC,IAAI,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACnE;;;ACuDA,IAAa,mBAAkC,EAC7C,GAAG,mBACL;AACA,IAAa,0BAAyC;CACpD,GAAG;CACH,SAAS;AACX;AACA,IAAa,0BAAyC;CACpD,GAAG;CACH,SAAS;AACX;AACA,IAAa,uBAAsC;CACjD,GAAG;CACH,SAAS;CACT,kBAAkB,WAAW,SAC3B,KAAK,YACD,wBACA,oBAAoB,aAAa,UAAU,SAAU,EAAE;AAC/D;AACA,IAAa,oBAAmC;CAC9C,GAAG;CACH,SAAS;AACX;AACA,IAAa,0BAAyC;CACpD,GAAG;CACH,uBAAuB,cAAc,WAAW,UAAU,YAAY;CACtE,MAAM;AACR;AACA,IAAa,6BAA4C;CACvD,GAAG;CACH,MAAM;CACN,UAAU;AACZ;AACA,IAAa,qBAAoC;CAC/C,GAAG;CACH,UAAU;CACV,gBAAgB,WAAW,SAAS;EAClC,MAAM,YAAY,qBAAwB,cAAe,WAAW,IAAI;EACxE,IAAI,KAAK,gBAAgB,KACvB,OAAO;EAGT,MAAM,mBAA6B,CAAC;EACpC,IAAI,kBAAiC;EAErC,IAAI,KAAK,wBAAwB,OAAO;GACtC,KAAK,YAAY,QAAQ,IACvB,mDACF;GACA,MAAM,YACJ,KAAK,gBACL,UAAU,KACP,eAAgB,MAAM,GAAG,EACzB,QAAQ,EACR,KAAK,GAAG,EAAE,2BAAU,IAAI,KAAK,GAAE,YAAY;GAChD,iBAAiB,KACf,mBAAmB,UAAU,KAAK,MAAM,UAAU,GACpD;EACF;EAEA,IACE,KAAK,qCAAA,MAEL;GACA,KAAK,YAAY,QACd,IAAI,qCAAqC,EACzC,IAAI,oDAAoD;GAC3D,MAAM,qBAAqB,CACzB,kBACA,6CACF;GAEA,IAAI,KAAK,wBAAwB,OAAO;IACtC,KAAK,YAAY,QAAQ,IACvB,gDACF;IACA,mBAAmB,KAAK,oBAAoB;GAC9C,OAAO;IACL,KAAK,YAAY,QAAQ,IAAI,kCAAkC;IAC/D,mBAAmB,KAAK,6BAA2B;GACrD;GAEA,kBAAkB,SAChB,oBACA,0BAA0B,aAAa,UAAU,IAAK,EAAE,uBAC1D;EACF;EAEA,OACE,SAAS,kBAAkB,SAAS,KACnC,kBACG,IAAI,IAAI;;kBAEA,gBAAgB;;gBAGxB;CAER;CACA,gBAAgB,WAAW,SAAS;EAClC,KAAK,YAAY,QAAQ,KACvB;GAAE,YAAY;GAAmB,MAAM;EAAa,GACpD;GAAE,YAAY;GAAmB,MAAM;EAAmB,GAC1D;GAAE,YAAY;GAAmB,MAAM;EAAkB,GACzD;GAAE,YAAY;GAAmB,MAAM;EAAiB,GACxD;GAAE,YAAY;GAAmB,MAAM;EAAO,CAChD;EAEA,OAAO,IAAI;;;6BAGc,YAAY,UAAU,IAAK,EAAE;;;;;cAK5C,UACC,SAAU,KACR,UACC,IAAI;;wBAEE,cAAc,OAAO;GACrB,GAAG;GACH,aAAa,UACX,KAAK,aACL,MAAM,SACR;EACF,CAAC,EAAE;;mBAGX,EACC,KAAK,MAAM,EAAE;;;;;CAK1B;AACF;AACA,IAAa,sBAAqC;CAChD,GAAG;CACH,SAAS;AACX;AACA,IAAa,oBAAmC;CAC9C,GAAG;CACH,MAAM;CACN,UAAU;CACV,UAAU;AACZ;AACA,IAAa,0BAAyC;CACpD,GAAG;CACH,MAAM;CACN,SAAS;CACT,kBAAkB,WAAW,SAAS;EACpC,IAAI,CAAC,KAAK,WACR,KAAK,YAAY,QAAQ,KAAK;GAC5B,YAAY;GACZ,MAAM;EACR,CAAC;EAEH,KAAK,YAAY,QAAQ,KAAK;GAC5B,YAAY,KAAK;GACjB,MAAM,UAAU;EAClB,CAAC;EACD,OAAO,CACL,KAAK,YACD,OACA,UAAU,aAAa,UAAU,SAAU,EAAE,WACjD,IAAI;;;cAGI,UACC,SAAU,KACR,UACC,YAAY,UAAU,KAAK,GACzB,MAAM,UACP,UAAU,KAAK,UAAU,aAAa,MAAM,SAAU,CAAC,EAAE,GAC9D,EACC,KAAK,KAAK,EAAE;;;OAIvB,EACG,QAAQ,MAAM,CAAC,EACf,KAAK,IAAI;CACd;AACF;AACA,IAAa,8BAA6C;CACxD,GAAG;CACH,MAAM;CACN,SAAS;CACT,kBAAkB,WAAW,SAAS;EACpC,IAAI,CAAC,KAAK,WACR,KAAK,YAAY,QAAQ,KAAK;GAC5B,YAAY;GACZ,MAAM;EACR,CAAC;EAEH,KAAK,YAAY,QAAQ,KAAK;GAC5B,YAAY,KAAK;GACjB,MAAM,UAAU;EAClB,CAAC;EACD,OAAO,CACL,KAAK,YACD,OACA,UAAU,aAAa,UAAU,SAAU,EAAE,WACjD,IAAI;;;cAGI,UACC,SAAU,KACR,UACC,YAAY,UAAU,KAAK,GACzB,MAAM,UACP,UAAU,KAAK,UAAU,aAAa,MAAM,SAAU,CAAC,EAAE,GAC9D,EACC,KAAK,KAAK,EAAE;;;OAIvB,EACG,QAAQ,MAAM,CAAC,EACf,KAAK,IAAI;CACd;AACF;AACA,IAAa,oBAAmC;CAC9C,GAAG;CACH,UAAU;CACV,SAAS;AACX;AACA,IAAa,qBAAoC;CAC/C,GAAG;CACH,SAAS;AACX;AACA,IAAa,mBAAkC;CAC7C,GAAG;CACH,SAAS;AACX;AACA,IAAa,iCAAgD;CAC3D,GAAG;CACH,MAAM;CACN,UAAU;CACV,eAAe,cAAc,CAC3B,gBAAgB;EACd,MAAM;EACN,MAAM,WAAW,SAAS;EAC1B,UAAU;EACV,UAAU,CAAC;CACb,CAAC,CACH;CACA,SAAS;CACT,SAAS;CACT,kBAAkB,WAAW,SAAS;EACpC,MAAM,iBAAiB,UAAU,SAAU;EAC3C,IAAI,eAAe,SAAS,QAC1B,MAAM,IAAI,MAAM,qBAAqB;EAEvC,IAAI,CAAC,KAAK,WACR,KAAK,YAAY,QAAQ,KAAK;GAC5B,YAAY;GACZ,MAAM;EACR,CAAC;EAEH,KAAK,YAAY,QAAQ,KAAK;GAC5B,YAAY,KAAK;GACjB,MAAM,eAAe;EACvB,CAAC;EACD,OAAO,CACL,KAAK,YACD,OACA,UAAU,aAAa,UAAU,SAAU,EAAE,WACjD,IAAI;;;cAGI,eACC,SAAU,KACR,UACC,YAAY,eAAe,KAAK,GAC9B,MAAM,UACP,UAAU,KAAK,UAAU,aAAa,MAAM,SAAU,CAAC,EAAE,GAC9D,EACC,KAAK,KAAK,EAAE;;;OAIvB,EACG,QAAQ,MAAM,CAAC,EACf,KAAK,IAAI;CACd;AACF;AACA,IAAa,kCAAiD;CAC5D,GAAG;CACH,MAAM;CACN,UAAU;CACV,eAAe,cAAc,CAC3B,gBAAgB;EACd,MAAM;EACN,MAAM,WAAW,SAAS;EAC1B,UAAU;EACV,UAAU,CAAC;CACb,CAAC,CACH;CACA,SAAS;CACT,SAAS;CACT,kBAAkB,WAAW,SAAS;EACpC,MAAM,iBAAiB,UAAU,SAAU;EAC3C,IAAI,eAAe,SAAS,QAC1B,MAAM,IAAI,MAAM,qBAAqB;EAEvC,IAAI,CAAC,KAAK,WACR,KAAK,YAAY,QAAQ,KAAK;GAC5B,YAAY;GACZ,MAAM;EACR,CAAC;EAEH,KAAK,YAAY,QAAQ,KAAK;GAC5B,YAAY,KAAK;GACjB,MAAM,eAAe;EACvB,CAAC;EACD,OAAO,CACL,KAAK,YACD,OACA,UAAU,aAAa,UAAU,SAAU,EAAE,WACjD,IAAI;;;cAGI,eACC,SAAU,KACR,UACC,YAAY,eAAe,KAAK,GAC9B,MAAM,UACP,UAAU,KAAK,UAAU,aAAa,MAAM,SAAU,CAAC,EAAE,GAC9D,EACC,KAAK,KAAK,EAAE;;;OAIvB,EACG,QAAQ,MAAM,CAAC,EACf,KAAK,IAAI;CACd;AACF;AACA,IAAa,yBAAwC;CACnD,GAAG;CACH,UAAU;CACV,SAAS;AACX;AACA,IAAa,oBAAmC;CAC9C,GAAG;CACH,SAAS;AACX;AACA,IAAa,qBAAoC;CAC/C,GAAG;CACH,SAAS;AACX;AACA,IAAa,sBAAqC;CAChD,GAAG;CACH,SAAS;AACX;AACA,IAAa,4BAA2C;CACtD,GAAG;CACH,MAAM;CACN,UAAU;CACV,SAAS;CACT,eAAe,cAAc,CAC3B,gBAAgB;EACd,MAAM;EACN,eAAe,WAAW,UAAU,YAAY;EAChD,MAAM,WAAW,SAAS;EAC1B,UAAU;EACV,UAAU,CAAC;CACb,CAAC,CACH;CACA,sBAAsB,WAAW,SAAS;EACxC,MAAM,cAAc,SAClB,OAAO,qBAAwB,wBAAwB,aACnD,qBAAwB,sBAAsB,WAAW,IAAI,IAC7D,qBAAwB,mBAC9B;EACA,IAAI,KAAK,wBAAwB,OAAO;GACtC,KAAK,YAAY,QAAQ,IACvB,qDACF;GACA,YAAY,KACV,qBAAqB,UAAU,UAAU,SAAU,GAAG,IAAK,EAAE,GAC/D;EACF;EACA,OAAO;CACT;AACF;AACA,IAAa,qBAAoC;CAC/C,GAAG;CACH,UAAU;CACV,SAAS;CACT,eAAe,cAAc,CAC3B,gBAAgB;EACd,MAAM;EACN,MAAM,GAAG,WAAW,SAAS,EAAE;EAC/B,UAAU;EACV,UAAU,CAAC;CACb,CAAC,CACH;CACA,qBAAqB,0BAA0B;CAC/C,SAAS;CACT,kBAAkB,WAAW,SAAS;EACpC,MAAM,eAAe,UAAU,SAAU;EACzC,IAAI,aAAa,SAAS,SACxB,MAAM,IAAI,MAAM,6CAA6C;EAE/D,KAAK,YAAY,QAAQ,KACvB;GAAE,YAAY;GAAmB,MAAM;EAAQ,GAC/C;GACE,YAAY;GACZ,MAAM;EACR,GACA;GACE,YAAY;GACZ,MAAM;EACR,GACA;GACE,YAAY;GACZ,MAAM;EACR,GACA;GAAE,YAAY;GAAyB,MAAM;EAAsB,CACrE;EAEA,OAAO,IAAI;;;;YAIH,aACC,SAAU,KACR,UAAU,IAAI;;2BAEF,KAAK,UAAU,aAAa,MAAM,SAAU,CAAC,EAAE;;sBAEpD,cAAc,OAAO;GACrB,GAAG;GACH,WAAW;GACX,aAAa,MAAM;EACrB,CAAC,EAAE;;;WAIX,EACC,KAAK,KAAK,EAAE;;;;iBAIR,aAAa,UAAU,SAAU,EAAE;;;;;CAKlD;AACF;AAEA,IAAa,wBAAwB;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;;ACpgBA,SAAgB,eACd,WACA,MACe;CACf,MAAM,UAAyB,CAAC;CAChC,IACE,UAAU,UAAU,OACjB,UACC,MAAM,SAAS,wBAAwB,QACvC,MAAM,SAAS,0BAA0B,IAC7C,GAEA,KAAK,MAAM,SAAS,UAAU,UAC5B,IAAI,MAAM,SAAS,wBAAwB,MACzC,QAAQ,KACN,YAAY,OAAO;EACjB,GAAG;EACH,aAAa,UAAU,KAAK,aAAa,MAAM,SAAS;EACxD,YAAY,UACV,KAAK,YACL,MAAM,eAAe,WAAW,KAAK,GAAG,CAC1C;CACF,CAAC,CACH;MAEA,QAAQ,KACN,sBAAsB,OAAO;EAC3B,GAAG;EACH,aAAa,UAAU,KAAK,aAAa,MAAM,SAAS;CAC1D,CAAC,CACH;MAGC,IACL,UAAU,UAAU,OACjB,UAAU,MAAM,SAAS,2BAA2B,IACvD,GAEA,QAAQ,KAAK,YAAY,WAAW,IAAI,CAAC;MACpC,IACL,UAAU,UAAU,MACjB,UACC,MAAM,SAAS,wBAAwB,QACvC,MAAM,SAAS,0BAA0B,QACzC,MAAM,SAAS,2BAA2B,IAC9C,GAEA,MAAM,IAAI,MACR,gEACF;MAEA,QAAQ,KAAK,YAAY,WAAW,IAAI,CAAC;CAE3C,OAAO;AACT;AAEA,SAAS,sBACP,WACA,MACa;CACb,MAAM,iBAAiB,UAAU,SAAU;CAC3C,OAAO,YAAY,gBAAgB;EACjC,GAAG;EACH,aAAa,UAAU,KAAK,aAAa,GAAG;EAC5C,YAAY,UACV,KAAK,YACL,eAAe,eAAe,WAAW,KAAK,GAAG,CACnD;CACF,CAAC;AACH;AAEA,SAAS,YAAY,WAAsB,MAAiC;CAC1E,IACE,UAAU,UAAU,MACjB,UACC,MAAM,SAAS,wBAAwB,QACvC,MAAM,SAAS,0BAA0B,IAC7C,GAEA,MAAM,IAAI,MACR,6DACF;CAGF,IAAI;CACJ,IACE,UAAU,UAAU,OACjB,UAAU,MAAM,SAAS,2BAA2B,IACvD,GAEA,YAAY,UAAU,UAAU,KAAK,cAAc;EACjD,WAAW;EACX,MAAM;GACJ,GAAG;GACH,aAAa,UACX,KAAK,aACL,UAAU,SAAS,SAAU,CAC/B;GACA,YAAY,UACV,KAAK,YACL,SAAS,eAAe,WAAW,KAAK,GAAG,CAC7C;EACF;CACF,EAAE;MACG,IACL,UAAU,UAAU,MACjB,UAAU,MAAM,SAAS,2BAA2B,IACvD,GAEA,MAAM,IAAI,MAAM,wDAAwD;MAExE,YAAY,CAAC;EAAE;EAAW;CAAK,CAAC;CAGlC,OAAO;EAAE;EAAW;EAAM;CAAU;AACtC;;;AC9GA,IAAa,mCAAmC;AAEhD,SAAgB,qBAAqB,WAAsB,MAAoB;CAC7E,MAAM,WAAW,UAAU,KAAK,YAAY,GAAG,UAAU,KAAK,QAAQ;CACtE,IAAI,OAAO,KAAK,MAAM,IAAI,QAAQ;CAClC,IAAI,CAAC,MACH,KAAK,MAAM,IAAI,UAAW,OAAO,OAAO,CAAE;CAE5C,yBAAyB,WAAW;EAClC,eAAe,GAAG,UAAU,UAAU,IAAK,EAAE;EAC7C,GAAG;EACH,aAAa;CACf,CAAC;CACD,sBAAsB,WAAW,IAAI;AACvC;AAEA,SAAS,yBAAyB,WAAsB,MAAoB;CAC1E,MAAM,aAAa,KAAK,iBAAA,SAAiC,WAAW,KAAK,EAAE;CAC3E,MAAM,wBACJ,KAAK,yBAAA;CAEP,KAAK,YAAY,QAAQ,KACvB;EAAE,YAAY;EAAsB,MAAM;CAAgB,GAC1D;EAAE,YAAY;EAAmB,MAAM;CAAiB,GACxD;EAAE,YAAY;EAAyB,MAAM;CAAU,GACvD;EAAE,YAAY;EAAyB,MAAM;CAAU,GACvD;EAAE,YAAY;EAAyB,MAAM;CAAc,GAC3D;EAAE,YAAY;EAAS,MAAM;CAAU,GACvC;EAAE,YAAY,KAAK;EAAgB,MAAM,GAAG,UAAU,KAAK;CAAU,GACrE;EAAE,YAAY,KAAK;EAAgB,MAAM,GAAG,UAAU,KAAK;CAAQ,GACnE;EAAE,YAAY;EAAwB,MAAM;CAAc,GAC1D;EACE,YAAY,KAAK,UAAU,KAAK;EAChC,MAAM,MAAM,UAAU,KAAK;CAC7B,CACF;CAEA,IAAI,oBAAoB;CACxB,IAAI,4BAA4B,IAAI,GAAG;EACrC,KAAK,YAAY,QAAQ,KAAK;GAC5B,YAAY,KAAK,UAAU,KAAK;GAChC,MAAM,GAAG,aAAa,UAAU,IAAK,EAAE;EACzC,CAAC;EACD,oBAAoB,oBAAoB,aAAa,UAAU,IAAK,EAAE;CACxE;CAEA,KAAK,YAAY,aAAa,KAAK,IAAI;sBACnB,UAAU,KAAK;wCACG,UAAU,KAAK;4DACK,sBAAsB;;;;oBAI9D,UAAU,KAAK;;wCAEK,UAAU,KAAK;;;;;;;;gDAQP,UAAU,KAAK;;wCAEvB,UAAU,KAAK;;;;uBAIhC,YAAY,UAAU,IAAK,EAAE;;8CAEN,kBAAkB;2BACrC,UAAU;;;YAGzB,kBAAkB,WAAW,IAAI,EAAE;;;;;;GAM5C;AACH;AAEA,SAAgB,kBACd,WACA,MACA,mBAGc,gBACN;CACR,MAAM,SAAS,eAAe,WAAW,IAAI;CAE7C,IAAI,OAAO,WAAW,KAAK,OAAO,GAAG,KAAK,gBAAgB,KACxD,OAAO,IAAI;QACP,iBAAiB,IAAI,EAAE;;QAEvB,kBAAkB,MAAM,OAAO,EAAE,EAAE;;CAIzC,KAAK,YAAY,QAAQ,KACvB;EAAE,YAAY;EAAyB,MAAM;CAAU,GACvD;EAAE,YAAY;EAAyB,MAAM;CAAiB,CAChE;CAEA,OAAO,IAAI;;QAEL,iBAAiB,MAAM,oBAAoB,EAAE;;QAE7C,OAAO,KAAK,UAAU,cAAc,MAAM,KAAK,CAAC,EAAE,KAAK,MAAM,EAAE;;;AAGvE;AAEA,SAAS,eAAe,MAAoB,gBAAyB;CACnE,KAAK,YAAY,QAAQ,KACvB;EAAE,YAAY;EAAyB,MAAM;CAAS,GACtD;EAAE,YAAY;EAAyB,MAAM;CAAgB,GAC7D;EAAE,YAAY;EAAsB,MAAM;CAAO,GACjD;EAAE,YAAY;EAAsB,MAAM;CAAO,GACjD;EAAE,YAAY;EAA0B,MAAM;CAAW,GACzD;EAAE,YAAY;EAAwB,MAAM;CAAS,CACvD;CAEA,OAAO,IAAI;cACC,iBAAiB,OAAO,eAAe,MAAM,GAAG;;;;;;;;;AAS9D;AAEA,SAAS,cAAc,MAAoB,OAA4B;CACrE,KAAK,YAAY,QAAQ,KAAK;EAC5B,YAAY;EACZ,MAAM;CACR,CAAC;CAED,OAAO,IAAI;mBACM,MAAM,KAAK,YAAY,WAAW,aAAa,MAAM,UAAU,IAAK,EAAE,GACnF,MAAM,UAAU,WAAW,KAC3B,MAAM,cAAc,MAAM,UAAU,GAAG,YACnC,0BACA,GACL;QACG,kBAAkB,MAAM,KAAK,EAAE;;;AAGvC;AAEA,SAAS,kBAAkB,MAAoB,OAAoB;CACjE,KAAK,YAAY,QAAQ,KAAK;EAC5B,YAAY;EACZ,MAAM;CACR,CAAC;CAED,IAAI,sBAAsB;CAC1B,IAAI,MAAM,UAAU,SAAS,GAAG;EAC9B,KAAK,YAAY,QAAQ,KAAK;GAC5B,YAAY;GACZ,MAAM;EACR,CAAC;EACD,sBAAsB;CACxB;CAEA,OAAO,IAAI;iBACI,oBAAoB;QAC7B,MAAM,UAAU,KAAK,aAAa,iBAAiB,MAAM,OAAO,QAAQ,CAAC,EAAE,KAAK,MAAM,EAAE;;;AAGhG;AAEA,SAAS,iBACP,MACA,OACA,UACA;CACA,KAAK,YAAY,QAAQ,KACvB;EAAE,YAAY;EAAyB,MAAM;CAAW,GACxD;EACE,YAAY,KAAK,UACf,SAAS,KAAK,WAAY,MACxB,KAAK,WAAY,UAAU,KAAK,WAAY,SAAS,GAAG,IAAI,IAAI,EAClE,GACA,SAAS,UAAU,IACrB,EAAE;EACF,MAAM,SAAS,UAAU;CAC3B,CACF;CAEA,IAAI,oBAAoB;CACxB,IAAI,4BAA4B,IAAI,KAAK,SAAS,KAAK,gBAAgB,KAAK;EAC1E,KAAK,YAAY,QAAQ,KAAK;GAC5B,YAAY,KAAK,UACf,SAAS,KAAK,WAAY,MACxB,KAAK,WAAY,UAAU,KAAK,WAAY,SAAS,GAAG,IAAI,IAAI,EAClE,GACA,SAAS,UAAU,IACrB,EAAE;GACF,MAAM,GAAG,aAAa,SAAS,UAAU,IAAK,EAAE;EAClD,CAAC;EACD,oBAAoB,mBAAmB,aAAa,SAAS,UAAU,IAAK,EAAE;CAChF;CAEA,MAAM,WACJ,MAAM,cAAc,SAAS,YACzB,KACA,UAAU,SAAS,KAAK,YAAa,MACnC,MAAM,KAAK,YAAa,UACrB,MAAM,KAAK,YAAa,SAAS,GAAG,IAAI,IAAI,EACjD,EAAE;CACR,MAAM,oBACJ,SAAS,KAAK,gBAAgB,MAAM,0BAA0B;CAEhE,OAAO,IAAI;eACE,SAAS,UAAU,aAC5B,SAAS,UAAU,IACrB,EAAE,UAAU,SAAS,UAAU,OAAO,GAAG,YAAY,EAAE,GACrD,oBACC,kBAAkB;SAChB,SAAS,UAAU,KAAM;;;AAGlC;;;;;;ACtPA,SAAgB,mBAAmB,WAAsB,MAAoB;CAC3E,MAAM,UAAU;EACd,eAAe,KAAK,iBAAiB,GAAG,UAAU,UAAU,IAAK,EAAE;EACnE,WAAW,UAAU;CACvB;CAEA,mBACE,MACA,GAAG,UAAU,KAAK,aAClB,oBACA,OACF;AACF;;;;;;ACbA,SAAgB,yBACd,WACA,MACM;CACN,MAAM,UAAU;EACd,aAAa,KAAK;EAClB,WAAW,UAAU;CACvB;CAEA,mBACE,MACA,GAAG,UAAU,KAAK,sBAClB,6BACA,OACF;AACF;;;;;;;;;;;;;;;;;;;;;;;;ACPA,IAAa,gCAAgC;AAC7C,IAAa,yBAAyB;AAEtC,SAAgB,sBACd,WACA,MACA;CACA,MAAM,UAAU;EACd,uBAAuB,KAAK,yBAAyB,KAAK;EAC1D,aAAa,KAAK;EAClB,QAAQ,UAAU,UAAU,IAAK;EACjC,WAAW,YAAY,UAAU,IAAK;EACtC,cAAA;EACA,qBAAqB,KAAK,uBAAuB;EACjD,wBACE,KAAK,0BAA0B,oBAAoB,WAAW,IAAI;EACpE,eAAe,KAAK,iBAAiB,WAAW,SAAS;EACzD,qBACE,KAAK,uBAAA;EACP,eAAe,KAAK,iBAAA;CACtB;CAEA,mBAAmB,MAAM,qBAAqB,2BAAqB,OAAO;CAC1E,mBACE,MACA,uBACA,6BACA,OACF;CACA,mBACE,MACA,6BACA,4BACA,OACF;CACA,gBAAgB,MAAM,oBAAoB,oBAAc;CACxD,mBACE,MACA,2BACA,0BACA,OACF;CACA,IAAI,QAAQ,wBACV,mBACE,MACA,8CACA,2BACA,OACF;CAEF,mBACE,MACA,8BACA,4BACA,OACF;AACF;AAEA,SAAS,oBACP,WACA,MACS;CAET,OADsB,KAAK,eAAe,IAAI,UAAU,IAEtD,GAAe,YAAY,sBAC3B,UAAU,UAAU,MAAM,UAAU,oBAAoB,OAAO,IAAI,CAAC,MAClE;AAEN;AAEA,SAAS,WAAW,WAA+B;CACjD,OACE,CAAC,cAAc,YAAY,EAAE,SAAS,UAAU,IAAI,KACpD,UAAU,UAAU,MAAM,UAAU,WAAW,KAAK,CAAC,MAAM;AAE/D;;;AC3FA,IAAA,2BAAe;;;;;;;;;;;;ACQf,SAAgB,sBACd,YACA,MACA;CAEA,gBAAgB,MAAM,WAAW,qBAAS,EAAE,YAAY,KAAK,CAAC;CAC9D,gBAAgB,MAAM,eAAe,eAAU;CAC/C,gBACE,MACA,qCACA,MAAM,wBAAmB,EAAE,MAAM,QAAQ,IAAI,YAAY,CAAC,CAC5D;CACA,gBACE,MACA,4CACA,sBACF;AACF;;;ACdA,SAAgB,aAAa,WAAsB,MAAoB;CACrE,MAAM,WAAW,UAAU,KAAK,YAAY,UAAU;CACtD,IAAI,OAAO,KAAK,MAAM,IAAI,QAAQ;CAClC,IAAI,CAAC,MACH,KAAK,MAAM,IAAI,UAAW,OAAO,OAAO,CAAE;CAE5C,yBAAyB,WAAW;EAClC,eAAe,GAAG,UAAU,UAAU,IAAK,EAAE;EAC7C,GAAG;EACH,aAAa;CACf,CAAC;AACH;AAEA,SAAS,yBAAyB,WAAsB,MAAoB;CAC1E,KAAK,YAAY,QAAQ,KACvB,EAAE,YAAY,eAAe,GAC7B;EAAE,YAAY;EAAS,MAAM;CAAa,GAC1C;EAAE,YAAY;EAAoB,MAAM;CAAa,GACrD;EACE,YAAY,KAAK;EACjB,MAAM,SAAS,UAAU,KAAK;CAChC,GACA;EACE,YAAY,KAAK,UAAU,KAAK;EAChC,MAAM,GAAG,UAAU,KAAK;CAC1B,GACA;EACE,YAAY,KAAK,UAAU,KAAM;EACjC,MAAM,GAAG,UAAU,KAAM;CAC3B,CACF;CAEA,KAAK,YAAY,aAAa,KAAK,IAAI;;4CAEG,UAAU,UAAU,IAAK,EAAE;;aAE1D,UAAU,KAAK;;wCAEY,UAAU,KAAK;;;;;eAKxC,UAAU,KAAM;cACjB,UAAU,KAAK;;;;GAI1B;AACH;;;;;;;;;;;;ACrDA,SAAgB,oBACd,YACA,MACA;CACA,gBAAgB,MAAM,cAAc,sBAAS;CAC7C,gBAAgB,MAAM,kBAAkB,0BAAa;CACrD,gBAAgB,MAAM,iBAAiB,yBAAY;AACrD;;;;;;ACNA,SAAgB,kBAAkB,WAAsB,MAAoB;CAC1E,MAAM,UAAU;EACd,aAAa,KAAK;EAClB,WAAW,UAAU;CACvB;CAEA,mBACE,MACA,GAAG,UAAU,KAAK,eAClB,sBACA,OACF;AACF;;;;;;ACfA,SAAgB,eAAe,YAAuB,MAAoB;CACxE,gBAAgB,MAAM,cAAc,WAAS;AAC/C;;;;;;;;;;;;;;;;;;;;;;;;;;;ACWA,IAAa,8BAA8B;AAC3C,IAAa,mCAAmC;AAEhD,SAAgB,oBAAoB,WAAsB,MAAoB;CAC5E,MAAM,UAAU;EACd,QAAQ,UAAU,UAAU,IAAK;EACjC,WAAW,UAAU;EACrB,WAAW,YAAY,UAAU,IAAK;EACtC,iBAAA;EACA,cAAA;EACA,oBAAoB,KAAK,MAAA,s7CAA8C;EACvE,yBAAyB,KAAK,UAC5B,KAAK,wBAAwB,SACzB,OACA,IAAI,UAAU,KAAK,oBACzB;EACA,aAAa,KAAK,eAAA;EAClB,kBAAkB,KAAK,oBAAA;EACvB,uBACE,KAAK,yBAAA;CACT;CAEA,mBAAmB,MAAM,0BAA0B,sBAAgB,OAAO;CAC1E,mBACE,MACA,4BACA,wBACA,OACF;CACA,gBAAgB,MAAM,2BAA2B,gBAAY;CAC7D,gBAAgB,MAAM,+BAA+B,oBAAe;CACpE,gBAAgB,MAAM,gCAAgC,qBAAgB;CACtE,gBAAgB,MAAM,8BAA8B,qBAAc;CAClE,mBAAmB,MAAM,wBAAwB,oBAAc,OAAO;CACtE,gBAAgB,MAAM,6BAA6B,YAAO;AAC5D;;;ACnBA,IAAM,iBAAkC,EACtC,YAAY,+BACd;AACA,IAAM,iBAAkC,EACtC,YAAY,+BACd;AACA,IAAM,eAAsC,EAC1C,YAAY,gBACd;AAEA,SAAgB,iBAAiB,EAC/B,OAAO,mBACP,iBAAiB,uBACjB,cAAc;CACZ;CACA;CACA;CACA;CACA,iBAAiB,iBAAiB,cAAc;CAChD,iBAAiB,gBAAgB,cAAc;CAC/C,iBAAiB,mBAAmB,cAAc;CAClD,iBAAiB,0BAA0B,cAAc;CACzD,iBAAiB,oBAAoB,cAAc;CACnD,iBAAiB,mBAAmB,cAAc;CAClD,iBAAiB,cAAc,YAAY;CAC3C,iBAAiB,gBAAgB,YAAY;CAC7C,iBAAiB,sBAAsB,YAAY;CACnD,iBAAiB,oBAAoB,YAAY;CACjD,iBAAiB,iBAAiB,YAAY;CAC9C,iBAAiB,aAAa,YAAY;CAC1C,iBAAiB,wBAAwB,YAAY;AACvD,GACA,mBAAmB,eAAe;CAChC,yBAAyB;CACzB,GAAG,UAAU;AACf,IACA,UACE,qBAAA,UAAA,EAAA,UAAA;CACE,oBAAC,qBAAD,CAAsB,CAAA;CACtB,oBAAC,2BAAD,CAA4B,CAAA;CAC5B,oBAAC,gCAAD,CAAiC,CAAA;AACjC,EAAA,CAAA,GAEJ,UAAA,UACA,GAAG,cACqB;CACxB,OACE,oBAAC,oBAAD;EACQ;EACU;EACH;EACI;EACR;EACA;EACT,GAAI;CACL,CAAA;AAEL"}
|