@elle96/ng-json-schema-manager 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -661,6 +661,10 @@ class NumericInputDirective {
661
661
  }
662
662
  writeValue(value) {
663
663
  this._model = value ?? null;
664
+ // Keep the text being typed when it already means this number ("45," for 45): rewriting it would drop the separator.
665
+ if (typeof value === 'number' && parseNumericText(this._el.nativeElement.value) === value) {
666
+ return;
667
+ }
664
668
  this._show(formatNumeric(value, this.jsmDecimalSeparator));
665
669
  }
666
670
  registerOnChange(fn) {
@@ -1797,6 +1801,8 @@ class JsonSchemaFormComponent {
1797
1801
  /** When true, all field errors are shown regardless of touched/dirty state. */
1798
1802
  showErrors = false;
1799
1803
  valueSub;
1804
+ /** Last value emitted through valueChange (same reference the parent gets back through `data`/`value`). */
1805
+ lastEmitted;
1800
1806
  constructor(schemaService, resolver, validation, cdr, options, stylesService) {
1801
1807
  this.schemaService = schemaService;
1802
1808
  this.resolver = resolver;
@@ -1816,7 +1822,11 @@ class JsonSchemaFormComponent {
1816
1822
  else if ((changes['value'] || changes['data']) && this.form) {
1817
1823
  // Only data changed and form already exists — patch values without rebuilding
1818
1824
  const newData = this.value !== undefined ? this.value : this.data;
1819
- this.form.patchValue(newData, { emitEvent: false });
1825
+ // The parent usually feeds back what valueChange just emitted: patching it would overwrite the text being
1826
+ // typed (e.g. "45," would become "45"), so a round trip of the emitted value is ignored.
1827
+ if (newData !== this.lastEmitted) {
1828
+ this.form.patchValue(newData, { emitEvent: false });
1829
+ }
1820
1830
  }
1821
1831
  else if (changes['value'] || changes['data']) {
1822
1832
  // Form not built yet — build it
@@ -1898,7 +1908,8 @@ class JsonSchemaFormComponent {
1898
1908
  this.updateErrors();
1899
1909
  this.valueSub = this.form.valueChanges.subscribe(() => {
1900
1910
  this.updateErrors();
1901
- this.valueChange.emit(this.resolvedSchema ? normalizeValue(this.resolvedSchema, this.rootControl.value) : this.rootControl.value);
1911
+ this.lastEmitted = this.resolvedSchema ? normalizeValue(this.resolvedSchema, this.rootControl.value) : this.rootControl.value;
1912
+ this.valueChange.emit(this.lastEmitted);
1902
1913
  });
1903
1914
  }
1904
1915
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: JsonSchemaFormComponent, deps: [{ token: JsonSchemaFormService }, { token: JsonSchemaResolverService }, { token: JsonSchemaValidationService }, { token: i0.ChangeDetectorRef }, { token: JsonSchemaFormOptions }, { token: JsonSchemaStylesService }], target: i0.ɵɵFactoryTarget.Component });
@@ -1 +1 @@
1
- {"version":3,"file":"elle96-ng-json-schema-manager.mjs","sources":["../../../projects/ng-json-schema-form/src/lib/json-schema-form.service.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-resolver.service.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-validation.service.ts","../../../projects/ng-json-schema-form/src/lib/numeric-input.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-node.component.ts","../../../projects/ng-json-schema-form/src/lib/normalize-value.ts","../../../projects/ng-json-schema-form/src/lib/jsm-styles.generated.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-styles.service.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-form.component.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-form.module.ts","../../../projects/ng-json-schema-form/src/elle96-ng-json-schema-manager.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport {\n AbstractControl,\n FormArray,\n FormControl,\n FormGroup,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { JsonSchema } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class JsonSchemaFormService {\n buildControl(schema: JsonSchema, value?: unknown, required = false): AbstractControl {\n const effectiveSchema = this.applyCombinators(schema);\n const resolvedType = this.resolveType(effectiveSchema);\n\n if (resolvedType === 'object') {\n const group: Record<string, AbstractControl> = {};\n const properties = effectiveSchema.properties ?? {};\n const requiredFields = new Set(effectiveSchema.required ?? []);\n const valueObject = this.isRecord(value) ? value : {};\n\n for (const [key, propertySchema] of Object.entries(properties)) {\n const childValue = valueObject[key];\n group[key] = this.buildControl(propertySchema, childValue, requiredFields.has(key));\n }\n\n // Include dynamic keys from value (patternProperties/additionalProperties).\n for (const key of Object.keys(valueObject)) {\n if (group[key]) {\n continue;\n }\n const dynamicSchema = this.resolveDynamicSchema(effectiveSchema, key);\n group[key] = this.buildControl(dynamicSchema ?? {}, valueObject[key], false);\n }\n\n const control = new FormGroup(group, {\n validators: this.buildValidators(effectiveSchema, required),\n });\n if (effectiveSchema.readOnly) {\n control.disable({ emitEvent: false });\n }\n return control;\n }\n\n if (resolvedType === 'array') {\n const controls: AbstractControl[] = [];\n const initialItems = Array.isArray(value) ? value : [];\n const minItems = effectiveSchema.minItems ?? 0;\n const prefixItems = effectiveSchema.prefixItems ?? [];\n const tupleLength = Math.max(prefixItems.length, minItems, initialItems.length);\n\n for (let i = 0; i < tupleLength; i += 1) {\n const itemSchema = (prefixItems[i] ?? effectiveSchema.items) as JsonSchema | boolean | undefined;\n if (itemSchema === false) {\n continue;\n }\n const itemValue = initialItems[i];\n controls.push(this.buildControl((itemSchema as JsonSchema) ?? {}, itemValue, false));\n }\n\n const control = new FormArray(controls, {\n validators: this.buildValidators(effectiveSchema, required),\n });\n if (effectiveSchema.readOnly) {\n control.disable({ emitEvent: false });\n }\n return control;\n }\n\n const initialValue = this.resolveInitialValue(effectiveSchema, value);\n const control = new FormControl(initialValue, {\n validators: this.buildValidators(effectiveSchema, required, resolvedType),\n nonNullable: false,\n });\n\n if (effectiveSchema.readOnly || effectiveSchema.const !== undefined) {\n control.disable({ emitEvent: false });\n }\n\n return control;\n }\n\n resolveType(schema: JsonSchema): JsonSchema['type'] | 'enum' {\n if (schema.enum) {\n return 'enum';\n }\n\n if (schema.oneOf?.length) {\n return this.resolveType(schema.oneOf[0]);\n }\n if (schema.anyOf?.length) {\n return this.resolveType(schema.anyOf[0]);\n }\n if (schema.allOf?.length) {\n return this.resolveType(schema.allOf[0]);\n }\n\n if (schema.type) {\n if (Array.isArray(schema.type)) {\n const preferred = schema.type.find((item) => item !== 'null');\n return preferred ?? schema.type[0];\n }\n\n return schema.type;\n }\n\n if (schema.properties || schema.patternProperties || schema.additionalProperties) {\n return 'object';\n }\n\n if (schema.items || schema.prefixItems) {\n return 'array';\n }\n\n return 'string';\n }\n\n private applyCombinators(schema: JsonSchema): JsonSchema {\n let effective = schema;\n if (schema.allOf?.length) {\n effective = this.mergeSchemas([schema, ...schema.allOf]);\n }\n if (schema.oneOf?.length) {\n effective = schema.oneOf[0];\n }\n if (schema.anyOf?.length) {\n effective = schema.anyOf[0];\n }\n return effective;\n }\n\n resolveDynamicSchema(schema: JsonSchema, key: string): JsonSchema | undefined {\n const patternSchemas = schema.patternProperties ?? {};\n for (const [pattern, patternSchema] of Object.entries(patternSchemas)) {\n try {\n const regex = new RegExp(pattern);\n if (regex.test(key)) {\n return patternSchema;\n }\n } catch {\n // ignore invalid regex\n }\n }\n\n if (schema.additionalProperties === true || schema.additionalProperties === undefined) {\n return {};\n }\n\n if (schema.additionalProperties && typeof schema.additionalProperties === 'object') {\n return schema.additionalProperties;\n }\n\n if (schema.unevaluatedProperties && typeof schema.unevaluatedProperties === 'object') {\n return schema.unevaluatedProperties;\n }\n if (schema.unevaluatedProperties === true) {\n return {};\n }\n\n return undefined;\n }\n\n private resolveInitialValue(schema: JsonSchema, value?: unknown): unknown {\n if (value !== undefined) {\n return value;\n }\n\n if (schema.const !== undefined) {\n return schema.const;\n }\n\n if (schema.default !== undefined) {\n return schema.default;\n }\n\n if (schema.enum && schema.enum.length > 0) {\n return schema.enum[0];\n }\n\n if (schema.type === 'boolean') {\n return false;\n }\n\n if (schema.type === 'array') {\n return [];\n }\n\n if (schema.type === 'object') {\n return {};\n }\n\n return null;\n }\n\n private buildValidators(\n schema: JsonSchema,\n required: boolean,\n resolvedType?: JsonSchema['type'] | 'enum'\n ): ValidatorFn[] {\n const validators: ValidatorFn[] = [];\n\n if (required) {\n validators.push(Validators.required);\n }\n\n if (schema.minLength !== undefined) {\n validators.push(Validators.minLength(schema.minLength));\n }\n\n if (schema.maxLength !== undefined) {\n validators.push(Validators.maxLength(schema.maxLength));\n }\n\n if (schema.minimum !== undefined) {\n validators.push(Validators.min(schema.minimum));\n }\n\n if (schema.maximum !== undefined) {\n validators.push(Validators.max(schema.maximum));\n }\n\n if (schema.exclusiveMinimum !== undefined) {\n validators.push((control) =>\n control.value === null || control.value === undefined || control.value === ''\n ? null\n : Number(control.value) > schema.exclusiveMinimum!\n ? null\n : { exclusiveMinimum: true }\n );\n }\n\n if (schema.exclusiveMaximum !== undefined) {\n validators.push((control) =>\n control.value === null || control.value === undefined || control.value === ''\n ? null\n : Number(control.value) < schema.exclusiveMaximum!\n ? null\n : { exclusiveMaximum: true }\n );\n }\n\n if (schema.multipleOf !== undefined) {\n validators.push((control) => {\n if (control.value === null || control.value === undefined || control.value === '') {\n return null;\n }\n const numericValue = Number(control.value);\n return numericValue % schema.multipleOf! === 0 ? null : { multipleOf: true };\n });\n }\n\n if (schema.pattern) {\n validators.push(Validators.pattern(schema.pattern));\n }\n\n if (schema.format === 'email') {\n validators.push(Validators.email);\n }\n\n if (schema.minItems !== undefined) {\n validators.push((control) =>\n Array.isArray(control.value) && control.value.length < schema.minItems!\n ? { minItems: true }\n : null\n );\n }\n\n if (schema.maxItems !== undefined) {\n validators.push((control) =>\n Array.isArray(control.value) && control.value.length > schema.maxItems!\n ? { maxItems: true }\n : null\n );\n }\n\n if (schema.uniqueItems) {\n validators.push((control) => {\n if (!Array.isArray(control.value)) {\n return null;\n }\n const unique = new Set(control.value.map((item) => JSON.stringify(item)));\n return unique.size === control.value.length ? null : { uniqueItems: true };\n });\n }\n\n if (schema.minProperties !== undefined) {\n validators.push((control) => {\n if (!control.value || typeof control.value !== 'object') {\n return null;\n }\n return Object.keys(control.value).length < schema.minProperties!\n ? { minProperties: true }\n : null;\n });\n }\n\n if (schema.maxProperties !== undefined) {\n validators.push((control) => {\n if (!control.value || typeof control.value !== 'object') {\n return null;\n }\n return Object.keys(control.value).length > schema.maxProperties!\n ? { maxProperties: true }\n : null;\n });\n }\n\n if (resolvedType === 'integer') {\n validators.push((control) => {\n if (control.value === null || control.value === undefined || control.value === '') {\n return null;\n }\n\n const numericValue = Number(control.value);\n return Number.isInteger(numericValue) ? null : { integer: true };\n });\n }\n\n return validators;\n }\n\n private isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n }\n\n private mergeSchemas(schemas: JsonSchema[]): JsonSchema {\n return schemas.reduce((acc, schema) => {\n const merged: JsonSchema = {\n ...acc,\n ...schema,\n properties: { ...(acc.properties ?? {}), ...(schema.properties ?? {}) },\n patternProperties: { ...(acc.patternProperties ?? {}), ...(schema.patternProperties ?? {}) },\n required: Array.from(new Set([...(acc.required ?? []), ...(schema.required ?? [])])),\n };\n return merged;\n }, {} as JsonSchema);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { JsonSchema } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class JsonSchemaResolverService {\n async resolve(schema: JsonSchema, baseUri?: string): Promise<JsonSchema> {\n const rootBase = baseUri ?? schema.$id ?? '';\n const localCache = new Map<string, JsonSchema>();\n const externalCache = new Map<string, JsonSchema>();\n return this.resolveRefs(schema, schema, rootBase, localCache, externalCache);\n }\n\n private async resolveRefs(\n current: JsonSchema,\n root: JsonSchema,\n baseUri: string,\n localCache: Map<string, JsonSchema>,\n externalCache: Map<string, JsonSchema>\n ): Promise<JsonSchema> {\n if (!current || typeof current !== 'object') {\n return current;\n }\n\n if (current.$ref) {\n const ref = current.$ref;\n if (ref.startsWith('#/')) {\n if (localCache.has(ref)) {\n return localCache.get(ref)!;\n }\n const resolved = this.resolvePointer(root, ref);\n if (resolved) {\n localCache.set(ref, resolved);\n return this.resolveRefs(resolved, root, baseUri, localCache, externalCache);\n }\n } else {\n const resolved = await this.resolveExternalRef(ref, baseUri, externalCache, localCache);\n if (resolved) {\n return resolved;\n }\n }\n }\n\n const next: JsonSchema = { ...current };\n\n if (next.properties) {\n const entries = await Promise.all(\n Object.entries(next.properties).map(async ([key, value]) => [\n key,\n await this.resolveRefs(value, root, baseUri, localCache, externalCache),\n ])\n );\n next.properties = Object.fromEntries(entries);\n }\n\n if (next.patternProperties) {\n const entries = await Promise.all(\n Object.entries(next.patternProperties).map(async ([key, value]) => [\n key,\n await this.resolveRefs(value, root, baseUri, localCache, externalCache),\n ])\n );\n next.patternProperties = Object.fromEntries(entries);\n }\n\n if (next.items && typeof next.items === 'object') {\n next.items = await this.resolveRefs(next.items as JsonSchema, root, baseUri, localCache, externalCache);\n }\n\n if (next.prefixItems) {\n next.prefixItems = await Promise.all(\n next.prefixItems.map((item) => this.resolveRefs(item, root, baseUri, localCache, externalCache))\n );\n }\n\n if (next.additionalProperties && typeof next.additionalProperties === 'object') {\n next.additionalProperties = await this.resolveRefs(\n next.additionalProperties,\n root,\n baseUri,\n localCache,\n externalCache\n );\n }\n\n if (next.additionalItems && typeof next.additionalItems === 'object') {\n next.additionalItems = await this.resolveRefs(\n next.additionalItems,\n root,\n baseUri,\n localCache,\n externalCache\n );\n }\n\n if (next.unevaluatedProperties && typeof next.unevaluatedProperties === 'object') {\n next.unevaluatedProperties = await this.resolveRefs(\n next.unevaluatedProperties,\n root,\n baseUri,\n localCache,\n externalCache\n );\n }\n\n if (next.unevaluatedItems && typeof next.unevaluatedItems === 'object') {\n next.unevaluatedItems = await this.resolveRefs(next.unevaluatedItems, root, baseUri, localCache, externalCache);\n }\n\n if (next.contains) {\n next.contains = await this.resolveRefs(next.contains, root, baseUri, localCache, externalCache);\n }\n\n if (next.oneOf) {\n next.oneOf = await Promise.all(\n next.oneOf.map((item) => this.resolveRefs(item, root, baseUri, localCache, externalCache))\n );\n }\n\n if (next.anyOf) {\n next.anyOf = await Promise.all(\n next.anyOf.map((item) => this.resolveRefs(item, root, baseUri, localCache, externalCache))\n );\n }\n\n if (next.allOf) {\n next.allOf = await Promise.all(\n next.allOf.map((item) => this.resolveRefs(item, root, baseUri, localCache, externalCache))\n );\n }\n\n if (next.not) {\n next.not = await this.resolveRefs(next.not, root, baseUri, localCache, externalCache);\n }\n\n if (next.if) {\n next.if = await this.resolveRefs(next.if, root, baseUri, localCache, externalCache);\n }\n\n if (next.then) {\n next.then = await this.resolveRefs(next.then, root, baseUri, localCache, externalCache);\n }\n\n if (next.else) {\n next.else = await this.resolveRefs(next.else, root, baseUri, localCache, externalCache);\n }\n\n if (next.dependencies) {\n const entries = await Promise.all(\n Object.entries(next.dependencies).map(async ([key, value]) => {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return [key, await this.resolveRefs(value as JsonSchema, root, baseUri, localCache, externalCache)];\n }\n return [key, value];\n })\n );\n next.dependencies = Object.fromEntries(entries);\n }\n\n if (next.dependentSchemas) {\n const entries = await Promise.all(\n Object.entries(next.dependentSchemas).map(async ([key, value]) => [\n key,\n await this.resolveRefs(value, root, baseUri, localCache, externalCache),\n ])\n );\n next.dependentSchemas = Object.fromEntries(entries);\n }\n\n if (next.$defs) {\n const entries = await Promise.all(\n Object.entries(next.$defs).map(async ([key, value]) => [\n key,\n await this.resolveRefs(value, root, baseUri, localCache, externalCache),\n ])\n );\n next.$defs = Object.fromEntries(entries);\n }\n\n if (next.definitions) {\n const entries = await Promise.all(\n Object.entries(next.definitions).map(async ([key, value]) => [\n key,\n await this.resolveRefs(value, root, baseUri, localCache, externalCache),\n ])\n );\n next.definitions = Object.fromEntries(entries);\n }\n\n return next;\n }\n\n private async resolveExternalRef(\n ref: string,\n baseUri: string,\n externalCache: Map<string, JsonSchema>,\n localCache: Map<string, JsonSchema>\n ): Promise<JsonSchema | null> {\n try {\n const url = new URL(ref, baseUri || window.location.href).toString();\n if (externalCache.has(url)) {\n return externalCache.get(url)!;\n }\n\n const { schema, fragment } = await this.fetchSchema(url);\n if (!schema) {\n return null;\n }\n\n const target = fragment ? this.resolvePointer(schema, fragment) : schema;\n if (!target) {\n return null;\n }\n\n const resolved = await this.resolveRefs(target, schema, schema.$id ?? url, localCache, externalCache);\n externalCache.set(url, resolved);\n return resolved;\n } catch {\n return null;\n }\n }\n\n private async fetchSchema(url: string): Promise<{ schema: JsonSchema | null; fragment: string | null }> {\n const [base, hash] = url.split('#');\n const fragment = hash ? `#/${hash.replace(/^\\//, '')}` : null;\n const response = await fetch(base, { headers: { Accept: 'application/json' } });\n if (!response.ok) {\n return { schema: null, fragment: null };\n }\n const schema = (await response.json()) as JsonSchema;\n return { schema, fragment };\n }\n\n private resolvePointer(root: JsonSchema, ref: string): JsonSchema | null {\n const pointer = ref.replace(/^#\\//, '');\n const parts = pointer.split('/').map((part) => part.replace(/~1/g, '/').replace(/~0/g, '~'));\n let current: any = root;\n for (const part of parts) {\n if (current && typeof current === 'object' && part in current) {\n current = current[part];\n } else {\n return null;\n }\n }\n return current as JsonSchema;\n }\n}\n","import { Injectable } from '@angular/core';\nimport Ajv, { ErrorObject } from 'ajv';\nimport Ajv2019 from 'ajv/dist/2019';\nimport Ajv2020 from 'ajv/dist/2020';\nimport addFormats from 'ajv-formats';\nimport AjvDraft04 from 'ajv-draft-04';\nimport { JsonSchema, SchemaError } from './types';\n\nexport type JsonSchemaDraft = 'draft4' | 'draft6' | 'draft7' | 'draft2019' | 'draft2020';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class JsonSchemaValidationService {\n private readonly ajvCache = new Map<JsonSchemaDraft, Ajv>();\n\n validate(schema: JsonSchema, value: unknown): ErrorObject[] {\n const draft = this.detectDraft(schema);\n const ajv = this.getAjv(draft);\n const validate = ajv.compile(schema as object);\n const valid = validate(value);\n if (valid) {\n return [];\n }\n return validate.errors ?? [];\n }\n\n /**\n * Validates the schema itself against its JSON Schema meta-schema.\n * Returns a list of SchemaError describing what is wrong in the schema definition.\n */\n validateSchema(schema: JsonSchema): SchemaError[] {\n const draft = this.detectDraft(schema);\n const ajv = this.getAjv(draft);\n\n try {\n const valid = ajv.validateSchema(schema as object);\n if (valid) return [];\n return (ajv.errors ?? []).map((e) => ({\n path: e.instancePath || '/',\n message: e.message ?? e.keyword,\n keyword: e.keyword,\n }));\n } catch (e) {\n // ajv.validateSchema throws when the schema is so broken it cannot be compiled.\n // The error message contains comma-separated individual violations — split them.\n const raw = e instanceof Error ? e.message : String(e);\n // Strip the \"schema is invalid: \" prefix if present\n const body = raw.replace(/^schema is invalid:\\s*/i, '');\n // Each violation looks like \"data/some/path must ...\" — extract path and message\n return body.split(', ').map((msg) => {\n const trimmed = msg.trim();\n const match = trimmed.match(/^(data[^\\s]*)\\s+(.+)$/);\n return match\n ? { path: match[1].replace(/^data/, '') || '/', message: match[2], keyword: 'schema' }\n : { path: '/', message: trimmed, keyword: 'schema' };\n });\n }\n }\n\n detectDraft(schema: JsonSchema): JsonSchemaDraft {\n const schemaId = schema.$schema ?? '';\n if (schemaId.includes('draft-04')) {\n return 'draft4';\n }\n if (schemaId.includes('draft-06')) {\n return 'draft6';\n }\n if (schemaId.includes('draft-07')) {\n return 'draft7';\n }\n if (schemaId.includes('2019-09')) {\n return 'draft2019';\n }\n if (schemaId.includes('2020-12')) {\n return 'draft2020';\n }\n\n if (schema.$defs) {\n return 'draft2020';\n }\n if (schema.definitions) {\n return 'draft7';\n }\n\n return 'draft2020';\n }\n\n private getAjv(draft: JsonSchemaDraft): Ajv {\n if (this.ajvCache.has(draft)) {\n return this.ajvCache.get(draft)!;\n }\n\n let ajv: Ajv;\n switch (draft) {\n case 'draft4':\n ajv = new AjvDraft04({\n strict: false,\n allErrors: true,\n allowUnionTypes: true,\n });\n break;\n case 'draft2019':\n ajv = new Ajv2019({\n strict: false,\n allErrors: true,\n allowUnionTypes: true,\n });\n break;\n case 'draft6':\n case 'draft7':\n ajv = new Ajv({\n strict: false,\n allErrors: true,\n allowUnionTypes: true,\n });\n break;\n case 'draft2020':\n default:\n ajv = new Ajv2020({\n strict: false,\n allErrors: true,\n allowUnionTypes: true,\n });\n }\n\n addFormats(ajv);\n this.ajvCache.set(draft, ajv);\n return ajv;\n }\n}\n","import { Directive, ElementRef, forwardRef, Injectable, Input, OnChanges, Renderer2, SimpleChanges } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/** Character shown between the integer and decimal part of a number. */\nexport type DecimalSeparator = '.' | ',';\n\n/**\n * Options shared by every node of a form. Provided by `jsm-json-schema-form`, so each form instance has its own.\n */\n@Injectable()\nexport class JsonSchemaFormOptions {\n decimalSeparator: DecimalSeparator = '.';\n}\n\nconst COMPLETE_NUMBER = /^-?(\\d+[.,]?\\d*|[.,]\\d+)$/;\n\n/**\n * Keeps digits, a leading minus and a single decimal separator (written with `separator`);\n * `,` and `.` are both accepted as input.\n */\nexport function sanitizeNumericText(text: string, separator: DecimalSeparator): string {\n let result = '';\n let hasDecimal = false;\n for (const char of text) {\n if (char >= '0' && char <= '9') {\n result += char;\n } else if (char === '-' && result === '') {\n result += char;\n } else if ((char === ',' || char === '.') && !hasDecimal) {\n hasDecimal = true;\n result += separator;\n }\n }\n return result;\n}\n\n/** Text → model: empty → `null`, a complete number → number, anything else stays a string (validation reports it). */\nexport function parseNumericText(text: string): number | string | null {\n const trimmed = text.trim();\n if (trimmed === '') {\n return null;\n }\n if (COMPLETE_NUMBER.test(trimmed)) {\n return Number(trimmed.replace(',', '.'));\n }\n return trimmed;\n}\n\n/** Model → text shown in the input. */\nexport function formatNumeric(value: unknown, separator: DecimalSeparator): string {\n if (value === null || value === undefined) {\n return '';\n }\n return typeof value === 'number' ? String(value).replace('.', separator) : String(value);\n}\n\n/** Shows decimals with the configured separator inside messages (\"must be >= 0.1\" → \"must be >= 0,1\"). */\nexport function localizeNumbers(message: string, separator: DecimalSeparator): string {\n return separator === ',' ? message.replace(/(\\d)\\.(\\d)/g, '$1,$2') : message;\n}\n\nconst toParsed = (value: unknown): unknown => (typeof value === 'string' ? parseNumericText(value) : (value ?? null));\n\n/**\n * `ControlValueAccessor` for `number`/`integer` fields. The input is a text field (`inputmode=\"decimal\"`), so the\n * decimal comma is accepted, and the model always holds a JSON number once the text is a complete number.\n * It never writes to the control while rendering or when the text is unchanged.\n */\n@Directive({\n selector: 'input[jsmNumeric]',\n standalone: true,\n host: { '(input)': 'onInput()', '(blur)': 'onBlur()' },\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NumericInputDirective), multi: true }],\n})\nexport class NumericInputDirective implements ControlValueAccessor, OnChanges {\n @Input() jsmDecimalSeparator: DecimalSeparator = '.';\n\n private _model: unknown = null;\n private _onChange: (value: unknown) => void = () => undefined;\n private _onTouched: () => void = () => undefined;\n\n constructor(\n private readonly _el: ElementRef<HTMLInputElement>,\n private readonly _renderer: Renderer2,\n ) {}\n\n private _show(text: string): void {\n this._renderer.setProperty(this._el.nativeElement, 'value', text);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['jsmDecimalSeparator'] && !changes['jsmDecimalSeparator'].firstChange && typeof this._model === 'number') {\n this._show(formatNumeric(this._model, this.jsmDecimalSeparator));\n }\n }\n\n writeValue(value: unknown): void {\n this._model = value ?? null;\n this._show(formatNumeric(value, this.jsmDecimalSeparator));\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._el.nativeElement, 'disabled', isDisabled);\n }\n\n onInput(): void {\n const input = this._el.nativeElement;\n const raw = input.value;\n const cleaned = sanitizeNumericText(raw, this.jsmDecimalSeparator);\n if (cleaned !== raw) {\n const caret = Math.max(0, (input.selectionStart ?? raw.length) - (raw.length - cleaned.length));\n input.value = cleaned;\n input.setSelectionRange(caret, caret);\n }\n this._model = parseNumericText(cleaned);\n this._onChange(this._model);\n }\n\n onBlur(): void {\n const input = this._el.nativeElement;\n let text = input.value.trim();\n if (text.endsWith(',') || text.endsWith('.')) {\n text = text.slice(0, -1);\n }\n if (text === '-') {\n text = '';\n }\n const parsed = parseNumericText(text);\n this._show(typeof parsed === 'number' ? formatNumeric(parsed, this.jsmDecimalSeparator) : text);\n // Update the model only when the value really changed (\"13\" and 13 are the same value).\n if (parsed !== toParsed(this._model)) {\n this._model = parsed;\n this._onChange(parsed);\n }\n this._onTouched();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Optional,\n Output,\n OnInit,\n OnDestroy,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, FormArray, FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { JsonSchema, JsonSchemaType } from './types';\nimport { JsonSchemaFormService } from './json-schema-form.service';\nimport { JsonSchemaValidationService } from './json-schema-validation.service';\nimport { Subscription } from 'rxjs';\nimport { DecimalSeparator, JsonSchemaFormOptions, localizeNumbers, NumericInputDirective } from './numeric-input';\n\n@Component({\n selector: 'jsm-schema-node',\n standalone: true,\n imports: [CommonModule, FormsModule, ReactiveFormsModule, NumericInputDirective],\n encapsulation: ViewEncapsulation.None,\n styles: [`\n /* ── Layout ── */\n .jsm-field { display:flex; flex-direction:column; gap:.375rem; }\n .jsm-field-label { display:block; font-size:.8125rem; font-weight:600; color:#374151; }\n .jsm-field-hint { font-size:.75rem; color:#6b7280; margin:0; line-height:1.4; }\n .jsm-required { color:#ef4444; margin-left:.125rem; }\n .jsm-example { font-size:.6875rem; color:#9ca3af; }\n\n /* ── Inputs ── */\n .jsm-input, .jsm-textarea, .jsm-select {\n width:100%; border-radius:.5rem; border:1.5px solid #d1d5db;\n background:Canvas; padding:.5rem .75rem; font-size:.875rem; color:CanvasText;\n outline:none; box-shadow:0 1px 2px rgba(0,0,0,.04);\n transition:border-color .15s, box-shadow .15s;\n font-family:inherit; box-sizing:border-box;\n }\n .jsm-input:hover, .jsm-textarea:hover, .jsm-select:hover { border-color:#9ca3af; }\n .jsm-input:focus, .jsm-textarea:focus, .jsm-select:focus {\n border-color:#6366f1; box-shadow:0 0 0 3px rgba(99,102,241,.15);\n }\n .jsm-input--error, .jsm-textarea--error, .jsm-select--error {\n border-color:#f87171 !important; background:#fff5f5;\n }\n .jsm-input--error:focus, .jsm-textarea--error:focus, .jsm-select--error:focus {\n box-shadow:0 0 0 3px rgba(248,113,113,.2) !important;\n }\n .jsm-textarea { resize:vertical; min-height:6rem; }\n\n /* ── Select wrapper ── */\n .jsm-select-wrap { position:relative; }\n .jsm-select { appearance:none; padding-right:2.25rem; cursor:pointer; }\n .jsm-select-chevron {\n position:absolute; right:.625rem; top:50%; transform:translateY(-50%);\n width:1rem; height:1rem; color:#9ca3af; pointer-events:none;\n }\n\n /* ── Toggle switch ── */\n .jsm-toggle-label { display:inline-flex; align-items:center; gap:.625rem; cursor:pointer; user-select:none; }\n .jsm-toggle-track {\n position:relative; display:inline-flex; align-items:center;\n width:2.25rem; height:1.25rem; border-radius:9999px; flex-shrink:0;\n background:#d1d5db; transition:background .2s;\n }\n .jsm-toggle-track.jsm-on { background:#4f46e5; }\n .jsm-toggle-thumb {\n display:inline-block; width:1rem; height:1rem; border-radius:9999px;\n background:#fff; box-shadow:0 1px 3px rgba(0,0,0,.2);\n transform:translateX(.125rem); transition:transform .2s;\n }\n .jsm-toggle-track.jsm-on .jsm-toggle-thumb { transform:translateX(1.125rem); }\n .jsm-toggle-text { font-size:.875rem; font-weight:500; color:#374151; }\n\n /* ── Buttons ── */\n .jsm-btn-primary {\n display:inline-flex; align-items:center; gap:.25rem;\n padding:.375rem .75rem; border-radius:.5rem; font-size:.8125rem;\n font-weight:600; background:#4f46e5; color:#fff; border:none;\n cursor:pointer; box-shadow:0 1px 2px rgba(79,70,229,.3);\n transition:background .15s, transform .1s, box-shadow .15s;\n white-space:nowrap; font-family:inherit;\n }\n .jsm-btn-primary:hover { background:#4338ca; transform:translateY(-1px); box-shadow:0 3px 8px rgba(79,70,229,.3); }\n .jsm-btn-primary:active { transform:translateY(0); }\n .jsm-btn-primary:disabled { opacity:.45; cursor:not-allowed; transform:none; }\n .jsm-btn-danger {\n display:inline-flex; align-items:center; gap:.25rem;\n padding:.25rem .5rem; border-radius:.375rem; font-size:.75rem;\n font-weight:600; background:transparent; color:#dc2626;\n border:1.5px solid #fca5a5; cursor:pointer;\n transition:background .15s, border-color .15s; font-family:inherit;\n }\n .jsm-btn-danger:hover { background:#fee2e2; border-color:#f87171; }\n\n /* ── Errors ── */\n .jsm-error-list { display:flex; flex-direction:column; gap:.25rem; margin-top:.25rem; }\n .jsm-error-msg { display:flex; align-items:center; gap:.375rem; font-size:.75rem; color:#dc2626; font-weight:500; }\n .jsm-error-icon { width:.875rem; height:.875rem; flex-shrink:0; }\n\n /* ── Badges ── */\n .jsm-badge-row { display:flex; flex-wrap:wrap; gap:.375rem; }\n .jsm-badge {\n display:inline-flex; align-items:center; border-radius:9999px;\n padding:.125rem .5rem; font-size:.6875rem; font-weight:600;\n letter-spacing:.02em; text-transform:uppercase;\n }\n .jsm-badge--deprecated { background:#fef3c7; color:#92400e; }\n .jsm-badge--readonly { background:#f1f5f9; color:#475569; }\n .jsm-badge--writeonly { background:#dbeafe; color:#1e40af; }\n .jsm-badge--not { background:#fee2e2; color:#991b1b; }\n .jsm-badge--nullable { background:#f3f4f6; color:#6b7280; }\n\n /* ── Object fieldset ── */\n .jsm-fieldset {\n border:1.5px solid #e5e7eb; border-radius:.875rem; padding:1.25rem;\n background:transparent; box-shadow:0 1px 3px rgba(0,0,0,.06);\n transition:box-shadow .2s; box-sizing:border-box;\n }\n .jsm-fieldset:focus-within { border-color:#c7d2fe; box-shadow:0 0 0 3px rgba(99,102,241,.08),0 1px 3px rgba(0,0,0,.06); }\n .jsm-legend { display:inline-flex; align-items:center; gap:.375rem; padding:0 .5rem; font-size:.875rem; font-weight:700; color:#1f2937; }\n .jsm-obj-grid { display:grid; grid-template-columns:1fr; gap:1rem; }\n @media(min-width:640px){ .jsm-obj-grid { grid-template-columns:repeat(2,1fr); } }\n .jsm-obj-complex { display:flex; flex-direction:column; gap:1rem; margin-top:1rem; }\n .jsm-dynamic-key-header {\n display:flex; align-items:center; justify-content:space-between;\n padding:.25rem .5rem; background:#f9fafb; border-radius:.375rem;\n border:1px dashed #d1d5db; margin-bottom:.25rem;\n }\n .jsm-dynamic-key-label { font-size:.75rem; font-weight:600; color:#6b7280; font-family:monospace; }\n .jsm-add-prop {\n margin-top:1rem; padding:.875rem; background:#f9fafb;\n border-radius:.625rem; border:1.5px dashed #d1d5db;\n display:flex; flex-direction:column; gap:.5rem;\n }\n .jsm-add-prop-label { font-size:.75rem; font-weight:600; color:#6b7280; text-transform:uppercase; letter-spacing:.04em; }\n .jsm-add-prop-row { display:flex; gap:.5rem; align-items:center; }\n .jsm-input--sm { padding:.375rem .625rem; font-size:.8125rem; }\n\n /* ── Array ── */\n .jsm-array-block { display:flex; flex-direction:column; gap:.75rem; }\n .jsm-array-header { display:flex; align-items:flex-start; justify-content:space-between; gap:.5rem; }\n .jsm-array-title { font-size:.875rem; font-weight:700; color:#1f2937; display:flex; align-items:center; gap:.375rem; }\n .jsm-array-items { display:flex; flex-direction:column; gap:.75rem; }\n .jsm-array-item {\n border:1.5px solid #e5e7eb; border-radius:.75rem; padding:.875rem;\n background:transparent; box-shadow:0 1px 2px rgba(0,0,0,.04);\n transition:border-color .15s, box-shadow .15s;\n }\n .jsm-array-item:focus-within { border-color:#c7d2fe; box-shadow:0 0 0 3px rgba(99,102,241,.08); }\n .jsm-array-item-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:.75rem; }\n .jsm-array-index {\n display:inline-flex; align-items:center; justify-content:center;\n width:1.5rem; height:1.5rem; border-radius:9999px;\n background:#eef2ff; color:#4f46e5; font-size:.6875rem; font-weight:700;\n }\n .jsm-empty-array {\n display:flex; flex-direction:column; align-items:center; gap:.5rem;\n padding:2rem 1rem; border:1.5px dashed #e5e7eb; border-radius:.75rem;\n color:#9ca3af; font-size:.8125rem; text-align:center;\n }\n .jsm-contains-hint {\n display:flex; align-items:center; gap:.375rem; font-size:.75rem;\n color:#6366f1; background:#eef2ff; border-radius:.375rem; padding:.375rem .625rem;\n }\n\n /* ── Combinators ── */\n .jsm-combinator { border:1.5px solid #e5e7eb; border-radius:.875rem; overflow:hidden; background:transparent; box-shadow:0 1px 3px rgba(0,0,0,.06); }\n .jsm-combinator-header { display:flex; align-items:flex-start; justify-content:space-between; padding:.875rem 1rem; background:rgba(0,0,0,.03); border-bottom:1.5px solid #e5e7eb; }\n .jsm-combinator-title { font-size:.875rem; font-weight:700; color:#1f2937; }\n .jsm-combinator-body { padding:1rem; }\n .jsm-combinator-hint { font-size:.75rem; color:#6b7280; margin:.25rem 0 0; }\n .jsm-oneof-tabs { display:flex; overflow-x:auto; border-bottom:1.5px solid #e5e7eb; }\n .jsm-tab {\n padding:.5rem 1rem; font-size:.8125rem; font-weight:500; color:#6b7280;\n border:none; background:transparent; cursor:pointer;\n border-bottom:2px solid transparent; margin-bottom:-1.5px;\n transition:color .15s, border-color .15s; white-space:nowrap; font-family:inherit;\n }\n .jsm-tab:hover { color:#4f46e5; }\n .jsm-tab--active { color:#4f46e5; border-bottom-color:#4f46e5; font-weight:600; }\n .jsm-anyof-options { display:flex; flex-wrap:wrap; gap:.5rem; padding:.75rem 1rem; border-bottom:1.5px solid #e5e7eb; }\n .jsm-anyof-option {\n display:inline-flex; align-items:center; gap:.375rem; padding:.375rem .75rem;\n border-radius:9999px; border:1.5px solid #e5e7eb; font-size:.8125rem;\n font-weight:500; color:#6b7280; cursor:pointer; transition:all .15s; background:transparent;\n }\n .jsm-anyof-option:hover { border-color:#a5b4fc; color:#4f46e5; }\n .jsm-anyof-option--active { border-color:#6366f1; background:#eef2ff; color:#4f46e5; }\n .jsm-allof-section { border-left:3px solid #e0e7ff; padding-left:1rem; }\n .jsm-combinator-badge {\n display:inline-flex; align-items:center; border-radius:9999px;\n padding:.125rem .5rem; font-size:.6875rem; font-weight:700;\n text-transform:uppercase; letter-spacing:.04em; flex-shrink:0; margin-left:.75rem;\n }\n .jsm-badge--oneof { background:#dbeafe; color:#1e40af; }\n .jsm-badge--anyof { background:#ede9fe; color:#5b21b6; }\n .jsm-badge--allof { background:#ccfbf1; color:#065f46; }\n\n /* ── Dark mode ── */\n .dark .jsm-field-label { color:#d1d5db; }\n .dark .jsm-field-hint { color:#9ca3af; }\n .dark .jsm-toggle-track { background:#475569; }\n .dark .jsm-toggle-track.jsm-on { background:#4f46e5; }\n .dark .jsm-toggle-text { color:#d1d5db; }\n .dark .jsm-input, .dark .jsm-textarea, .dark .jsm-select {\n border-color:#475569; color:#f1f5f9;\n }\n .dark .jsm-input:focus, .dark .jsm-textarea:focus, .dark .jsm-select:focus {\n border-color:#6366f1; box-shadow:0 0 0 3px rgba(99,102,241,.2);\n }\n .dark .jsm-input--error, .dark .jsm-textarea--error, .dark .jsm-select--error {\n border-color:#f87171 !important; background:rgba(248,113,113,.1);\n }\n .dark .jsm-fieldset { border-color:#334155; }\n .dark .jsm-fieldset:focus-within { border-color:#6366f1; }\n .dark .jsm-legend { color:#f1f5f9; }\n .dark .jsm-combinator { border-color:#334155; }\n .dark .jsm-combinator-header { background:rgba(255,255,255,.04); border-color:#334155; }\n .dark .jsm-combinator-title { color:#f1f5f9; }\n .dark .jsm-oneof-tabs { border-color:#334155; }\n .dark .jsm-tab { color:#94a3b8; }\n .dark .jsm-tab--active { color:#818cf8; border-bottom-color:#818cf8; }\n .dark .jsm-anyof-options { border-color:#334155; }\n .dark .jsm-anyof-option { border-color:#334155; color:#94a3b8; background:#0f172a; }\n .dark .jsm-anyof-option--active { border-color:#6366f1; background:rgba(99,102,241,.15); color:#818cf8; }\n .dark .jsm-allof-section { border-left-color:#3730a3; }\n .dark .jsm-array-item { border-color:#334155; }\n .dark .jsm-array-item:focus-within { border-color:#6366f1; }\n .dark .jsm-array-index { background:rgba(99,102,241,.2); color:#818cf8; }\n .dark .jsm-empty-array { border-color:#334155; color:#64748b; }\n .dark .jsm-contains-hint { background:rgba(99,102,241,.15); color:#818cf8; }\n .dark .jsm-add-prop { background:rgba(30,41,59,.4); border-color:#475569; }\n .dark .jsm-add-prop-label { color:#64748b; }\n .dark .jsm-dynamic-key-header { background:rgba(30,41,59,.5); border-color:#475569; }\n .dark .jsm-dynamic-key-label { color:#94a3b8; }\n .dark .jsm-error-msg { color:#f87171; }\n .dark .jsm-array-title { color:#f1f5f9; }\n .dark .jsm-badge--deprecated { background:rgba(217,119,6,.2); color:#fbbf24; }\n .dark .jsm-badge--readonly { background:#1e293b; color:#94a3b8; }\n .dark .jsm-badge--writeonly { background:rgba(37,99,235,.2); color:#60a5fa; }\n .dark .jsm-badge--not { background:rgba(220,38,38,.2); color:#f87171; }\n .dark .jsm-badge--nullable { background:#1e293b; color:#94a3b8; }\n .dark .jsm-select-chevron { color:#64748b; }\n `],\n template: `\n <ng-container [ngSwitch]=\"nodeKind\">\n\n <!-- ═══ oneOf ═══ -->\n <div *ngSwitchCase=\"'oneOf'\" class=\"jsm-combinator\">\n <div class=\"jsm-combinator-header\">\n <div>\n <p class=\"jsm-combinator-title\">{{ schema.title || label }}</p>\n <p *ngIf=\"schema.description\" class=\"jsm-combinator-hint\">{{ schema.description }}</p>\n </div>\n <span class=\"jsm-combinator-badge jsm-badge--oneof\">oneOf</span>\n </div>\n <div class=\"jsm-oneof-tabs\">\n <button *ngFor=\"let option of schema.oneOf; let i = index\" type=\"button\"\n class=\"jsm-tab\" [class.jsm-tab--active]=\"selectedOneOf === i\"\n (click)=\"selectedOneOf = i; onOneOfChange()\">\n {{ option.title || ('Option ' + (i + 1)) }}\n </button>\n </div>\n <div class=\"jsm-combinator-body\" *ngIf=\"activeVariant\">\n <jsm-schema-node [schema]=\"activeVariant\" [control]=\"control\" [parent]=\"parent\" [controlKey]=\"controlKey\"\n [path]=\"path\" [errorsMap]=\"errorsMap\" [label]=\"label\" [required]=\"required\"\n [allowAdditionalProperties]=\"allowAdditionalProperties\" [showErrors]=\"showErrors\"\n (controlReplaced)=\"controlReplaced.emit($event)\"></jsm-schema-node>\n </div>\n </div>\n\n <!-- ═══ anyOf ═══ -->\n <div *ngSwitchCase=\"'anyOf'\" class=\"jsm-combinator\">\n <div class=\"jsm-combinator-header\">\n <div>\n <p class=\"jsm-combinator-title\">{{ schema.title || label }}</p>\n <p *ngIf=\"schema.description\" class=\"jsm-combinator-hint\">{{ schema.description }}</p>\n </div>\n <span class=\"jsm-combinator-badge jsm-badge--anyof\">anyOf</span>\n </div>\n <div class=\"jsm-anyof-options\">\n <label *ngFor=\"let option of schema.anyOf; let i = index\"\n class=\"jsm-anyof-option\" [class.jsm-anyof-option--active]=\"selectedAnyOf.has(i)\">\n <input type=\"checkbox\" class=\"sr-only\" [checked]=\"selectedAnyOf.has(i)\" (change)=\"toggleAnyOf(i)\" />\n {{ option.title || ('Option ' + (i + 1)) }}\n </label>\n </div>\n <div class=\"jsm-combinator-body\" *ngIf=\"activeVariant\">\n <jsm-schema-node [schema]=\"activeVariant\" [control]=\"control\" [parent]=\"parent\" [controlKey]=\"controlKey\"\n [path]=\"path\" [errorsMap]=\"errorsMap\" [label]=\"label\" [required]=\"required\"\n [allowAdditionalProperties]=\"allowAdditionalProperties\" [showErrors]=\"showErrors\"\n (controlReplaced)=\"controlReplaced.emit($event)\"></jsm-schema-node>\n </div>\n </div>\n\n <!-- ═══ allOf ═══ -->\n <div *ngSwitchCase=\"'allOf'\" class=\"jsm-combinator\">\n <div class=\"jsm-combinator-header\">\n <div>\n <p class=\"jsm-combinator-title\">{{ schema.title || label }}</p>\n <p *ngIf=\"schema.description\" class=\"jsm-combinator-hint\">{{ schema.description }}</p>\n </div>\n <span class=\"jsm-combinator-badge jsm-badge--allof\">allOf</span>\n </div>\n <div class=\"jsm-combinator-body\">\n <div *ngFor=\"let subSchema of mergedAllOf; let i = index\" class=\"jsm-allof-section\">\n <jsm-schema-node [schema]=\"subSchema\" [control]=\"control\" [parent]=\"parent\" [controlKey]=\"controlKey\"\n [path]=\"path\" [errorsMap]=\"errorsMap\" [label]=\"subSchema.title || ('Section ' + (i + 1))\" [required]=\"required\"\n [allowAdditionalProperties]=\"allowAdditionalProperties\" [showErrors]=\"showErrors\"\n (controlReplaced)=\"controlReplaced.emit($event)\"></jsm-schema-node>\n </div>\n </div>\n </div>\n\n <!-- ═══ object ═══ -->\n <fieldset *ngSwitchCase=\"'object'\" class=\"jsm-fieldset\">\n <legend class=\"jsm-legend\">{{ schema.title || label }}</legend>\n <p *ngIf=\"schema.description\" class=\"jsm-field-hint\" style=\"margin-bottom:.75rem;margin-top:.25rem;\">{{ schema.description }}</p>\n\n <div *ngIf=\"metaBadges.length\" class=\"jsm-badge-row\" style=\"margin-bottom:.75rem;\">\n <span *ngFor=\"let badge of metaBadges\" class=\"jsm-badge\" [ngClass]=\"badgeClass(badge)\">{{ badge }}</span>\n </div>\n\n <div class=\"jsm-obj-grid\" [formGroup]=\"controlAsGroup\">\n <ng-container *ngFor=\"let key of simpleKeys\">\n <div style=\"display:flex;flex-direction:column;gap:.25rem;\">\n <div *ngIf=\"isDynamicKey(key)\" class=\"jsm-dynamic-key-header\">\n <span class=\"jsm-dynamic-key-label\">{{ key }}</span>\n <button type=\"button\" class=\"jsm-btn-danger\" (click)=\"removeDynamicKey(key)\">Remove</button>\n </div>\n <jsm-schema-node [schema]=\"schemaForKey(key)\" [control]=\"childControl(key)\" [parent]=\"controlAsGroup\"\n [controlKey]=\"key\" [path]=\"pathForChild(key)\" [errorsMap]=\"errorsMap\" [label]=\"key\"\n [required]=\"isRequired(key)\" [allowAdditionalProperties]=\"allowAdditionalProperties\" [showErrors]=\"showErrors\"\n (controlReplaced)=\"controlReplaced.emit($event)\"></jsm-schema-node>\n </div>\n </ng-container>\n </div>\n\n <div class=\"jsm-obj-complex\" *ngIf=\"complexKeys.length > 0\" [formGroup]=\"controlAsGroup\">\n <ng-container *ngFor=\"let key of complexKeys\">\n <div style=\"display:flex;flex-direction:column;gap:.25rem;\">\n <div *ngIf=\"isDynamicKey(key)\" class=\"jsm-dynamic-key-header\">\n <span class=\"jsm-dynamic-key-label\">{{ key }}</span>\n <button type=\"button\" class=\"jsm-btn-danger\" (click)=\"removeDynamicKey(key)\">Remove</button>\n </div>\n <jsm-schema-node [schema]=\"schemaForKey(key)\" [control]=\"childControl(key)\" [parent]=\"controlAsGroup\"\n [controlKey]=\"key\" [path]=\"pathForChild(key)\" [errorsMap]=\"errorsMap\" [label]=\"key\"\n [required]=\"isRequired(key)\" [allowAdditionalProperties]=\"allowAdditionalProperties\" [showErrors]=\"showErrors\"\n (controlReplaced)=\"controlReplaced.emit($event)\"></jsm-schema-node>\n </div>\n </ng-container>\n </div>\n\n <div *ngIf=\"canAddProperty\" class=\"jsm-add-prop\">\n <p class=\"jsm-add-prop-label\">Add property</p>\n <div class=\"jsm-add-prop-row\">\n <input class=\"jsm-input jsm-input--sm\" style=\"flex:1;\" [(ngModel)]=\"newPropertyKey\" placeholder=\"propertyName\" />\n <button type=\"button\" class=\"jsm-btn-primary\" (click)=\"addDynamicProperty()\">Add</button>\n </div>\n <p *ngIf=\"propertyError\" class=\"jsm-error-msg\">\n <svg class=\"jsm-error-icon\" viewBox=\"0 0 16 16\" fill=\"none\"><circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" stroke-width=\"1.5\"/><path d=\"M8 5v3.5M8 11v.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>\n {{ propertyError }}\n </p>\n </div>\n\n <div *ngIf=\"errorsForPath.length\" class=\"jsm-error-list\" style=\"margin-top:.75rem;\">\n <p *ngFor=\"let error of errorsForPath\" class=\"jsm-error-msg\">\n <svg class=\"jsm-error-icon\" viewBox=\"0 0 16 16\" fill=\"none\"><circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" stroke-width=\"1.5\"/><path d=\"M8 5v3.5M8 11v.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>\n {{ error }}\n </p>\n </div>\n </fieldset>\n\n <!-- ═══ array ═══ -->\n <div *ngSwitchCase=\"'array'\" class=\"jsm-array-block\">\n <div class=\"jsm-array-header\">\n <div>\n <p class=\"jsm-array-title\">\n {{ schema.title || label }}<span *ngIf=\"required\" style=\"color:#ef4444;margin-left:.125rem;\">*</span>\n </p>\n <p *ngIf=\"schema.description\" class=\"jsm-field-hint\">{{ schema.description }}</p>\n </div>\n <button type=\"button\" class=\"jsm-btn-primary\" (click)=\"addArrayItem()\" [disabled]=\"!canAddArrayItem\">\n <svg style=\"width:.875rem;height:.875rem;flex-shrink:0;\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M8 3v10M3 8h10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>\n Add item\n </button>\n </div>\n\n <div *ngIf=\"effectiveSchema.contains\" class=\"jsm-contains-hint\">\n Must contain matching item(s)\n <span *ngIf=\"effectiveSchema.minContains\"> · min {{ effectiveSchema.minContains }}</span>\n <span *ngIf=\"effectiveSchema.maxContains\"> · max {{ effectiveSchema.maxContains }}</span>\n </div>\n\n <div *ngIf=\"metaBadges.length\" class=\"jsm-badge-row\">\n <span *ngFor=\"let badge of metaBadges\" class=\"jsm-badge\" [ngClass]=\"badgeClass(badge)\">{{ badge }}</span>\n </div>\n\n <div class=\"jsm-array-items\" *ngIf=\"arrayControls.length > 0; else emptyArray\">\n <div *ngFor=\"let item of arrayControls; let i = index\" class=\"jsm-array-item\">\n <div class=\"jsm-array-item-header\">\n <span class=\"jsm-array-index\">{{ i + 1 }}</span>\n <button type=\"button\" class=\"jsm-btn-danger\" (click)=\"removeArrayItem(i)\">Remove</button>\n </div>\n <jsm-schema-node [schema]=\"schemaForIndex(i)\" [control]=\"item\" [parent]=\"controlAsArray\"\n [controlKey]=\"i\" [path]=\"pathForChild(i)\" [errorsMap]=\"errorsMap\" [label]=\"label + ' item'\"\n [allowAdditionalProperties]=\"allowAdditionalProperties\" [showErrors]=\"showErrors\"\n (controlReplaced)=\"controlReplaced.emit($event)\"></jsm-schema-node>\n </div>\n </div>\n\n <ng-template #emptyArray>\n <div class=\"jsm-empty-array\">No items yet — click \"Add item\" to start.</div>\n </ng-template>\n\n <div *ngIf=\"errorsForPath.length\" class=\"jsm-error-list\">\n <p *ngFor=\"let error of errorsForPath\" class=\"jsm-error-msg\">\n <svg class=\"jsm-error-icon\" viewBox=\"0 0 16 16\" fill=\"none\"><circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" stroke-width=\"1.5\"/><path d=\"M8 5v3.5M8 11v.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>\n {{ error }}\n </p>\n </div>\n </div>\n\n <!-- ═══ primitive ═══ -->\n <div *ngSwitchDefault class=\"jsm-field\">\n <ng-container *ngIf=\"inputKind !== 'checkbox'\">\n <label class=\"jsm-field-label\">\n {{ schema.title || label }}<span *ngIf=\"required\" class=\"jsm-required\">*</span>\n </label>\n <p *ngIf=\"schema.description\" class=\"jsm-field-hint\">{{ schema.description }}</p>\n </ng-container>\n\n <div *ngIf=\"metaBadges.length\" class=\"jsm-badge-row\">\n <span *ngFor=\"let badge of metaBadges\" class=\"jsm-badge\" [ngClass]=\"badgeClass(badge)\">{{ badge }}</span>\n </div>\n\n <ng-container>\n <input *ngIf=\"inputKind === 'number'\" jsmNumeric type=\"text\" inputmode=\"decimal\" class=\"jsm-input\"\n [class.jsm-input--error]=\"controlAsFormControl.invalid && (controlAsFormControl.dirty || isTouched || showErrors)\"\n [jsmDecimalSeparator]=\"decimalSeparator\" [attr.data-step]=\"numericStep\"\n [attr.placeholder]=\"schema.title || label\"\n [formControl]=\"controlAsFormControl\"\n (blur)=\"onBlur()\" />\n\n <input *ngIf=\"inputKind === 'text'\" class=\"jsm-input\"\n [class.jsm-input--error]=\"controlAsFormControl.invalid && (controlAsFormControl.dirty || isTouched || showErrors)\"\n [attr.type]=\"inputType\" [attr.placeholder]=\"schema.title || label\"\n [formControl]=\"controlAsFormControl\"\n (blur)=\"onBlur()\" />\n\n <textarea *ngIf=\"inputKind === 'textarea'\" rows=\"4\" class=\"jsm-textarea\"\n [class.jsm-textarea--error]=\"controlAsFormControl.invalid && (controlAsFormControl.dirty || isTouched || showErrors)\"\n [attr.placeholder]=\"schema.title || label\"\n [formControl]=\"controlAsFormControl\"\n (blur)=\"onBlur()\"></textarea>\n\n <div *ngIf=\"inputKind === 'select'\" class=\"jsm-select-wrap\">\n <select class=\"jsm-select\"\n [class.jsm-select--error]=\"controlAsFormControl.invalid && (controlAsFormControl.dirty || isTouched || showErrors)\"\n [formControl]=\"controlAsFormControl\"\n (blur)=\"onBlur()\">\n <option *ngFor=\"let option of effectiveSchema.enum\" [ngValue]=\"option\">{{ option }}</option>\n </select>\n <svg class=\"jsm-select-chevron\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 6l4 4 4-4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n <label *ngIf=\"inputKind === 'checkbox'\" class=\"jsm-toggle-label\">\n <span class=\"jsm-toggle-track\" [class.jsm-on]=\"controlAsFormControl.value\">\n <input type=\"checkbox\" class=\"sr-only\" [formControl]=\"controlAsFormControl\" />\n <span class=\"jsm-toggle-thumb\"></span>\n </span>\n <span class=\"jsm-toggle-text\">\n {{ schema.title || label }}<span *ngIf=\"required\" class=\"jsm-required\">*</span>\n </span>\n </label>\n </ng-container>\n\n <p *ngIf=\"inputKind === 'checkbox' && schema.description\" class=\"jsm-field-hint\">{{ schema.description }}</p>\n <p *ngIf=\"effectiveSchema.examples?.length\" class=\"jsm-example\">e.g. {{ effectiveSchema.examples?.[0] }}</p>\n <p *ngIf=\"effectiveSchema.contentMediaType\" class=\"jsm-example\">\n {{ effectiveSchema.contentMediaType }}<span *ngIf=\"effectiveSchema.contentEncoding\"> ({{ effectiveSchema.contentEncoding }})</span>\n </p>\n\n <div *ngIf=\"allErrors.length && (controlAsFormControl.dirty || isTouched || showErrors)\" class=\"jsm-error-list\">\n <p *ngFor=\"let error of allErrors\" class=\"jsm-error-msg\">\n <svg class=\"jsm-error-icon\" viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M8 5v3.5M8 11v.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n {{ error }}\n </p>\n </div>\n </div>\n\n </ng-container>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class JsonSchemaNodeComponent implements OnInit, OnDestroy {\n @Input({ required: true }) schema!: JsonSchema;\n @Input({ required: true }) control!: AbstractControl;\n @Input() label = '';\n @Input() required = false;\n @Input() path = '';\n @Input() errorsMap = new Map<string, string[]>();\n @Input() parent?: FormGroup | FormArray;\n @Input() controlKey?: string | number;\n @Input() allowAdditionalProperties = false;\n /** When true, errors are shown regardless of touched/dirty state (e.g. triggered by an external save button). */\n @Input() showErrors = false;\n\n @Output() controlReplaced = new EventEmitter<AbstractControl>();\n\n selectedOneOf = 0;\n selectedAnyOf = new Set<number>();\n newPropertyKey = '';\n propertyError = '';\n /** Tracks whether this primitive control has been touched (for OnPush CD). */\n isTouched = false;\n\n private valueSub?: Subscription;\n\n constructor(\n private readonly schemaService: JsonSchemaFormService,\n private readonly validation: JsonSchemaValidationService,\n private readonly cdr: ChangeDetectorRef,\n @Optional() private readonly options: JsonSchemaFormOptions | null,\n ) {}\n\n ngOnInit(): void {\n if (this.schema.anyOf?.length) this.selectedAnyOf.add(0);\n // markForCheck is enough for value changes — Angular will re-render in the next CD cycle\n // without recreating DOM nodes, so the focused input keeps its focus.\n this.valueSub = this.control.valueChanges.subscribe(() => this.cdr.markForCheck());\n }\n\n ngOnDestroy(): void {\n this.valueSub?.unsubscribe();\n }\n\n /** Called on blur of primitive inputs to trigger CD after Angular marks the control as touched. */\n onBlur(): void {\n this.isTouched = true;\n this.cdr.markForCheck();\n }\n\n isSimpleChild(key: string): boolean {\n const s = this.schemaForKey(key);\n if (s.oneOf?.length || s.anyOf?.length || s.allOf?.length) return false;\n const t = this.schemaService.resolveType(s);\n return t !== 'object' && t !== 'array';\n }\n\n badgeClass(badge: string): string {\n if (badge === 'Deprecated') return 'jsm-badge--deprecated';\n if (badge === 'Read-only' || badge === 'Nullable') return 'jsm-badge--readonly';\n if (badge === 'Write-only') return 'jsm-badge--writeonly';\n if (badge === 'Not constraint') return 'jsm-badge--not';\n return 'jsm-badge--nullable';\n }\n\n get nodeKind(): 'oneOf' | 'anyOf' | 'allOf' | 'object' | 'array' | 'primitive' {\n if (this.schema.oneOf?.length) return 'oneOf';\n if (this.schema.anyOf?.length) return 'anyOf';\n if (this.schema.allOf?.length) return 'allOf';\n const r = this.resolvedType;\n if (r === 'object') return 'object';\n if (r === 'array') return 'array';\n return 'primitive';\n }\n\n get resolvedType(): JsonSchema['type'] | 'enum' {\n return this.schemaService.resolveType(this.effectiveSchema) ?? 'string';\n }\n\n get decimalSeparator(): DecimalSeparator {\n return this.options?.decimalSeparator ?? '.';\n }\n\n /** `multipleOf` of this node's own schema, exposed as step metadata. */\n get numericStep(): string {\n return this.effectiveSchema.multipleOf ? String(this.effectiveSchema.multipleOf) : 'any';\n }\n\n get inputKind(): 'text' | 'number' | 'textarea' | 'select' | 'checkbox' {\n if (this.effectiveSchema.enum) return 'select';\n if (this.resolvedType === 'boolean') return 'checkbox';\n if (this.resolvedType === 'number' || this.resolvedType === 'integer') return 'number';\n if (this.effectiveSchema.format === 'textarea' || (this.effectiveSchema.maxLength ?? 0) > 200) return 'textarea';\n return 'text';\n }\n\n get inputType(): string {\n if (this.effectiveSchema.format === 'email') return 'email';\n if (this.effectiveSchema.format === 'date') return 'date';\n if (this.effectiveSchema.format === 'time') return 'time';\n if (this.effectiveSchema.format === 'date-time') return 'datetime-local';\n if (this.resolvedType === 'number' || this.resolvedType === 'integer') return 'number';\n if (this.effectiveSchema.format === 'password') return 'password';\n return 'text';\n }\n\n get controlAsGroup(): FormGroup { return this.control as FormGroup; }\n get controlAsFormControl(): FormControl { return this.control as FormControl; }\n get controlAsArray(): FormArray { return this.control as FormArray; }\n get arrayControls(): AbstractControl[] { return this.controlAsArray.controls; }\n get objectKeys(): string[] { return Object.keys(this.controlAsGroup.controls); }\n get simpleKeys(): string[] { return this.objectKeys.filter(k => this.isSimpleChild(k)); }\n get complexKeys(): string[] { return this.objectKeys.filter(k => !this.isSimpleChild(k)); }\n get canAddProperty(): boolean {\n if (!this.allowAdditionalProperties) return false;\n return this.effectiveSchema.additionalProperties !== false || !!this.effectiveSchema.patternProperties;\n }\n get errorsForPath(): string[] { return this.errorsMap.get(this.path) ?? []; }\n\n /** Combined errors: Ajv errors from errorsMap + Angular validator errors on the control. */\n get allErrors(): string[] {\n const ajvErrors = this.errorsForPath;\n const ctrl = this.control;\n if (!ctrl.errors) return ajvErrors;\n const angularErrors: string[] = [];\n const errs = ctrl.errors;\n if (errs['required']) angularErrors.push('This field is required');\n if (errs['minlength']) angularErrors.push(`Minimum length is ${errs['minlength'].requiredLength}`);\n if (errs['maxlength']) angularErrors.push(`Maximum length is ${errs['maxlength'].requiredLength}`);\n if (errs['min']) angularErrors.push(`Minimum value is ${errs['min'].min}`);\n if (errs['max']) angularErrors.push(`Maximum value is ${errs['max'].max}`);\n if (errs['email']) angularErrors.push('Invalid email address');\n if (errs['pattern']) angularErrors.push('Value does not match the required pattern');\n if (errs['integer']) angularErrors.push('Value must be an integer');\n if (errs['exclusiveMinimum']) angularErrors.push('Value must be greater than the minimum');\n if (errs['exclusiveMaximum']) angularErrors.push('Value must be less than the maximum');\n if (errs['multipleOf']) angularErrors.push('Value must be a multiple of the required number');\n if (errs['minItems']) angularErrors.push(`Minimum ${errs['minItems'].requiredLength ?? ''} items required`);\n if (errs['maxItems']) angularErrors.push(`Maximum ${errs['maxItems'].requiredLength ?? ''} items allowed`);\n if (errs['uniqueItems']) angularErrors.push('Items must be unique');\n // Merge: prefer Ajv messages, fall back to Angular messages for errors not covered by Ajv\n const messages = ajvErrors.length > 0 ? ajvErrors : angularErrors;\n return messages.map((message) => localizeNumbers(message, this.decimalSeparator));\n }\n get metaBadges(): string[] {\n const b: string[] = [];\n if (this.effectiveSchema.deprecated) b.push('Deprecated');\n if (this.effectiveSchema.readOnly) b.push('Read-only');\n if (this.effectiveSchema.writeOnly) b.push('Write-only');\n if (this.effectiveSchema.nullable) b.push('Nullable');\n if (this.effectiveSchema.not) b.push('Not constraint');\n return b;\n }\n\n get activeVariant(): JsonSchema | null {\n if (this.schema.oneOf?.length) return this.schema.oneOf[this.selectedOneOf] ?? null;\n if (this.schema.anyOf?.length) {\n const sel = Array.from(this.selectedAnyOf).map(i => this.schema.anyOf![i]);\n return sel.length ? this.mergeSchemas(sel) : this.schema.anyOf[0] ?? null;\n }\n if (this.schema.allOf?.length) return this.mergeSchemas([this.schema, ...this.schema.allOf]);\n return this.effectiveSchema;\n }\n\n get mergedAllOf(): JsonSchema[] {\n return this.schema.allOf?.length ? [this.schema, ...this.schema.allOf] : [this.schema];\n }\n\n isRequired(key: string): boolean { return this.effectiveSchema.required?.includes(key) ?? false; }\n\n schemaForKey(key: string): JsonSchema {\n return this.effectiveSchema.properties?.[key] ?? this.schemaService.resolveDynamicSchema(this.effectiveSchema, key) ?? {};\n }\n\n isDynamicKey(key: string): boolean { return !this.effectiveSchema.properties?.[key]; }\n\n pathForChild(key: string | number): string {\n return this.path === '' ? `/${key}` : `${this.path}/${key}`;\n }\n\n addDynamicProperty(): void {\n this.propertyError = '';\n const key = this.newPropertyKey.trim();\n if (!key) { this.propertyError = 'Property name is required.'; return; }\n if (this.effectiveSchema.propertyNames) {\n if (this.validation.validate(this.effectiveSchema.propertyNames, key).length) {\n this.propertyError = 'Property name does not match schema constraints.'; return;\n }\n }\n if (this.controlAsGroup.contains(key)) { this.propertyError = 'Property already exists.'; return; }\n const s = this.schemaService.resolveDynamicSchema(this.effectiveSchema, key);\n if (!s) { this.propertyError = 'This property is not allowed by the schema.'; return; }\n this.controlAsGroup.addControl(key, this.schemaService.buildControl(s, undefined, false));\n this.newPropertyKey = '';\n }\n\n removeDynamicKey(key: string): void { this.controlAsGroup.removeControl(key); }\n\n schemaForIndex(index: number): JsonSchema {\n const p = this.effectiveSchema.prefixItems ?? [];\n if (p[index]) return p[index];\n if (this.effectiveSchema.items && this.effectiveSchema.items !== true) return this.effectiveSchema.items as JsonSchema;\n if (this.effectiveSchema.additionalItems && this.effectiveSchema.additionalItems !== true) return this.effectiveSchema.additionalItems as JsonSchema;\n if (this.effectiveSchema.unevaluatedItems && this.effectiveSchema.unevaluatedItems !== true) return this.effectiveSchema.unevaluatedItems as JsonSchema;\n return {};\n }\n\n get canAddArrayItem(): boolean {\n return !(this.effectiveSchema.items === false || this.effectiveSchema.additionalItems === false || this.effectiveSchema.unevaluatedItems === false);\n }\n\n addArrayItem(): void {\n if (!this.canAddArrayItem) return;\n const fa = this.controlAsArray;\n fa.push(this.schemaService.buildControl(this.schemaForIndex(fa.length), undefined, false));\n fa.markAsDirty();\n }\n\n removeArrayItem(index: number): void {\n this.controlAsArray.removeAt(index);\n this.controlAsArray.markAsDirty();\n }\n\n onOneOfChange(): void {\n if (!this.activeVariant) return;\n this.replaceControl(this.schemaService.buildControl(this.activeVariant, this.control.value, this.required));\n }\n\n toggleAnyOf(index: number): void {\n if (this.selectedAnyOf.has(index)) this.selectedAnyOf.delete(index);\n else this.selectedAnyOf.add(index);\n const v = this.activeVariant;\n if (v) this.replaceControl(this.schemaService.buildControl(v, this.control.value, this.required));\n }\n\n private replaceControl(control: AbstractControl): void {\n if (this.parent) {\n if (this.parent instanceof FormGroup && typeof this.controlKey === 'string') this.parent.setControl(this.controlKey, control);\n if (this.parent instanceof FormArray && typeof this.controlKey === 'number') this.parent.setControl(this.controlKey, control);\n this.control = control; return;\n }\n this.control = control;\n this.controlReplaced.emit(control);\n }\n\n childControl(key: string): AbstractControl { return this.controlAsGroup.get(key) as AbstractControl; }\n\n get effectiveSchema(): JsonSchema {\n let s = this.schema;\n if (s.allOf?.length) s = this.mergeSchemas([s, ...s.allOf]);\n s = this.applyConditional(s);\n s = this.applyDependencies(s);\n return s;\n }\n\n private applyConditional(schema: JsonSchema): JsonSchema {\n if (!schema.if) return schema;\n const errors = this.validation.validate(schema.if, this.control.value);\n const branch = errors.length === 0 ? schema.then : schema.else;\n if (!branch) return schema;\n return this.mergeSchemas([schema, branch]);\n }\n\n private applyDependencies(schema: JsonSchema): JsonSchema {\n const value = this.control.value;\n if (!value || typeof value !== 'object' || Array.isArray(value)) return schema;\n let merged = { ...schema } as JsonSchema;\n const keys = Object.keys(value as Record<string, unknown>);\n if (schema.dependentRequired) {\n for (const k of keys) { const r = schema.dependentRequired[k]; if (r?.length) merged = this.mergeSchemas([merged, { required: r }]); }\n }\n if (schema.dependentSchemas) {\n for (const k of keys) { const d = schema.dependentSchemas[k]; if (d) merged = this.mergeSchemas([merged, d]); }\n }\n if (schema.dependencies) {\n for (const k of keys) {\n const d = schema.dependencies[k];\n if (Array.isArray(d)) merged = this.mergeSchemas([merged, { required: d }]);\n else if (d) merged = this.mergeSchemas([merged, d]);\n }\n }\n return merged;\n }\n\n private mergeSchemas(schemas: JsonSchema[]): JsonSchema {\n return schemas.reduce((acc, s) => ({\n ...acc, ...s,\n properties: { ...(acc.properties ?? {}), ...(s.properties ?? {}) },\n patternProperties: { ...(acc.patternProperties ?? {}), ...(s.patternProperties ?? {}) },\n required: Array.from(new Set([...(acc.required ?? []), ...(s.required ?? [])])),\n ...(acc.type && s.type ? {\n type: Array.from(new Set([\n ...(Array.isArray(acc.type) ? acc.type : [acc.type]),\n ...(Array.isArray(s.type) ? s.type : [s.type]),\n ])) as JsonSchemaType[]\n } : {}),\n }), {} as JsonSchema);\n }\n}\n","import { JsonSchema } from './types';\n\nconst OMIT = Symbol('omit');\n\n/** Complete decimal numbers only: \"13\", \"-0.5\", \"0,5\", \"3,\" (comma or dot as separator). */\nconst NUMERIC_STRING = /^[+-]?(\\d+([.,]\\d*)?|[.,]\\d+)$/;\n\ntype SchemaLike = JsonSchema | boolean | undefined;\n\nconst isSchema = (schema: SchemaLike): schema is JsonSchema => !!schema && typeof schema === 'object';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === 'object' && !Array.isArray(value);\n\nconst primaryType = (schema: JsonSchema): string | undefined => {\n const type = schema.type;\n if (Array.isArray(type)) {\n return type.find((item) => item !== 'null') ?? type[0];\n }\n return type;\n};\n\nconst isNumericType = (type: string | undefined): boolean => type === 'number' || type === 'integer';\n\n/** Converts a numeric string to a number; empty values are omitted; anything else is left as typed. */\nfunction normalizeNumber(value: unknown): unknown {\n if (value === null || value === undefined) {\n return OMIT;\n }\n if (typeof value !== 'string') {\n return value;\n }\n const text = value.trim();\n if (text === '') {\n return OMIT;\n }\n if (NUMERIC_STRING.test(text)) {\n return Number(text.replace(',', '.'));\n }\n return value;\n}\n\n/** Picks the oneOf/anyOf variant that declares the most of the object's keys. */\nfunction pickVariant(variants: JsonSchema[], value: Record<string, unknown>): JsonSchema | undefined {\n let best: JsonSchema | undefined;\n let bestScore = 0;\n for (const variant of variants) {\n const declared = Object.keys(variant.properties ?? {});\n const score = declared.filter((key) => key in value).length;\n if (score > bestScore) {\n best = variant;\n bestScore = score;\n }\n }\n return best;\n}\n\nfunction normalizeObject(schema: JsonSchema, value: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = { ...value };\n const patterns = Object.entries(schema.patternProperties ?? {}).map(\n ([pattern, sub]) => [new RegExp(pattern), sub] as const\n );\n\n for (const key of Object.keys(result)) {\n let sub: SchemaLike = schema.properties?.[key];\n if (sub === undefined) {\n sub = patterns.find(([regex]) => regex.test(key))?.[1];\n }\n if (sub === undefined && isSchema(schema.additionalProperties as SchemaLike)) {\n sub = schema.additionalProperties as JsonSchema;\n }\n if (sub === undefined) {\n continue;\n }\n const next = normalizeNode(sub, result[key]);\n if (next === OMIT) {\n delete result[key];\n } else {\n result[key] = next;\n }\n }\n return result;\n}\n\nfunction normalizeArray(schema: JsonSchema, value: Array<unknown>): Array<unknown> {\n const prefixItems = schema.prefixItems ?? [];\n return value.map((item, index) => {\n const sub = (prefixItems[index] ?? schema.items) as SchemaLike;\n const next = normalizeNode(sub, item);\n // Array positions cannot be dropped without shifting the others.\n return next === OMIT ? null : next;\n });\n}\n\nfunction normalizeNode(schema: SchemaLike, value: unknown): unknown {\n if (!isSchema(schema)) {\n return value;\n }\n\n const type = primaryType(schema);\n if (isNumericType(type)) {\n return normalizeNumber(value);\n }\n\n let result: unknown = value;\n\n for (const sub of schema.allOf ?? []) {\n if (result === OMIT) {\n return OMIT;\n }\n result = normalizeNode(sub, result);\n }\n if (result === OMIT) {\n return OMIT;\n }\n\n const variants = [...(schema.oneOf ?? []), ...(schema.anyOf ?? [])];\n if (variants.length > 0 && type === undefined) {\n if (isRecord(result)) {\n const variant = pickVariant(variants, result);\n if (variant) {\n result = normalizeNode(variant, result);\n }\n } else if (!Array.isArray(result)) {\n // Primitive: convert only when the variants are numeric and none accepts a string.\n const types = variants.map((variant) => primaryType(variant));\n if (types.some(isNumericType) && !types.includes('string')) {\n result = normalizeNumber(result);\n }\n }\n }\n\n if (isRecord(result)) {\n return normalizeObject(schema, result);\n }\n if (Array.isArray(result)) {\n return normalizeArray(schema, result);\n }\n return result;\n}\n\n/**\n * Coerces values to the types declared by the schema so that the emitted value respects it:\n * - `number`/`integer` numeric strings become JSON numbers (comma or dot as separator);\n * - empty numeric values (`\"\"`, whitespace, `null`) leave the key absent, never `\"\"` or `0`;\n * - integers with decimals are converted to their number but never truncated (validation reports them);\n * - non-numeric strings are left unchanged (validation reports them).\n * Descends into properties, patternProperties, additionalProperties, items, prefixItems and combinators.\n * The same function feeds both the Ajv validation and the emitted value.\n */\nexport function normalizeValue(schema: JsonSchema, value: unknown): unknown {\n const normalized = normalizeNode(schema, value);\n return normalized === OMIT ? null : normalized;\n}\n","// AUTO-GENERATED — do not edit manually. Run: node scripts/generate-lib-styles.mjs\nexport const JSM_CSS: string = \"/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\\n@layer properties;\\n@layer theme, base, components, utilities;\\n@layer theme {\\n :root, :host {\\n --font-sans: ui-sans-serif, system-ui, sans-serif, \\\"Apple Color Emoji\\\",\\n \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Noto Color Emoji\\\";\\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\",\\n \\\"Courier New\\\", monospace;\\n --color-red-50: oklch(97.1% 0.013 17.38);\\n --color-red-300: oklch(80.8% 0.114 19.571);\\n --color-red-700: oklch(50.5% 0.213 27.518);\\n --color-red-900: oklch(39.6% 0.141 25.723);\\n --color-amber-50: oklch(98.7% 0.022 95.277);\\n --color-amber-200: oklch(92.4% 0.12 95.746);\\n --color-amber-300: oklch(87.9% 0.169 91.605);\\n --color-amber-400: oklch(82.8% 0.189 84.429);\\n --color-amber-600: oklch(66.6% 0.179 58.318);\\n --color-amber-700: oklch(55.5% 0.163 48.998);\\n --color-amber-800: oklch(47.3% 0.137 46.201);\\n --color-amber-900: oklch(41.4% 0.112 45.904);\\n --color-emerald-50: oklch(97.9% 0.021 166.113);\\n --color-emerald-400: oklch(76.5% 0.177 163.223);\\n --color-emerald-700: oklch(50.8% 0.118 165.612);\\n --color-emerald-900: oklch(37.8% 0.077 168.94);\\n --color-indigo-100: oklch(93% 0.034 272.788);\\n --color-indigo-300: oklch(78.5% 0.115 274.713);\\n --color-indigo-400: oklch(67.3% 0.182 276.935);\\n --color-indigo-500: oklch(58.5% 0.233 277.117);\\n --color-indigo-600: oklch(51.1% 0.262 276.966);\\n --color-indigo-700: oklch(45.7% 0.24 277.023);\\n --color-indigo-900: oklch(35.9% 0.144 278.697);\\n --color-rose-50: oklch(96.9% 0.015 12.422);\\n --color-rose-400: oklch(71.2% 0.194 13.428);\\n --color-rose-500: oklch(64.5% 0.246 16.439);\\n --color-rose-600: oklch(58.6% 0.253 17.585);\\n --color-rose-700: oklch(51.4% 0.222 16.935);\\n --color-rose-900: oklch(41% 0.159 10.272);\\n --color-slate-50: oklch(98.4% 0.003 247.858);\\n --color-slate-100: oklch(96.8% 0.007 247.896);\\n --color-slate-200: oklch(92.9% 0.013 255.508);\\n --color-slate-300: oklch(86.9% 0.022 252.894);\\n --color-slate-400: oklch(70.4% 0.04 256.788);\\n --color-slate-500: oklch(55.4% 0.046 257.417);\\n --color-slate-600: oklch(44.6% 0.043 257.281);\\n --color-slate-700: oklch(37.2% 0.044 257.287);\\n --color-slate-800: oklch(27.9% 0.041 260.031);\\n --color-slate-900: oklch(20.8% 0.042 265.755);\\n --color-slate-950: oklch(12.9% 0.042 264.695);\\n --color-white: #fff;\\n --spacing: 0.25rem;\\n --container-2xl: 42rem;\\n --container-3xl: 48rem;\\n --container-6xl: 72rem;\\n --text-xs: 0.75rem;\\n --text-xs--line-height: calc(1 / 0.75);\\n --text-sm: 0.875rem;\\n --text-sm--line-height: calc(1.25 / 0.875);\\n --text-lg: 1.125rem;\\n --text-lg--line-height: calc(1.75 / 1.125);\\n --text-xl: 1.25rem;\\n --text-xl--line-height: calc(1.75 / 1.25);\\n --text-3xl: 1.875rem;\\n --text-3xl--line-height: calc(2.25 / 1.875);\\n --text-4xl: 2.25rem;\\n --text-4xl--line-height: calc(2.5 / 2.25);\\n --font-weight-medium: 500;\\n --font-weight-semibold: 600;\\n --font-weight-bold: 700;\\n --tracking-tight: -0.025em;\\n --tracking-wide: 0.025em;\\n --radius-lg: 0.5rem;\\n --radius-xl: 0.75rem;\\n --radius-2xl: 1rem;\\n --animate-spin: spin 1s linear infinite;\\n --default-transition-duration: 150ms;\\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n --default-font-family: var(--font-sans);\\n --default-mono-font-family: var(--font-mono);\\n }\\n}\\n@layer base {\\n *, ::after, ::before, ::backdrop, ::file-selector-button {\\n box-sizing: border-box;\\n margin: 0;\\n padding: 0;\\n border: 0 solid;\\n }\\n html, :host {\\n line-height: 1.5;\\n -webkit-text-size-adjust: 100%;\\n tab-size: 4;\\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Noto Color Emoji\\\");\\n font-feature-settings: var(--default-font-feature-settings, normal);\\n font-variation-settings: var(--default-font-variation-settings, normal);\\n -webkit-tap-highlight-color: transparent;\\n }\\n hr {\\n height: 0;\\n color: inherit;\\n border-top-width: 1px;\\n }\\n abbr:where([title]) {\\n -webkit-text-decoration: underline dotted;\\n text-decoration: underline dotted;\\n }\\n h1, h2, h3, h4, h5, h6 {\\n font-size: inherit;\\n font-weight: inherit;\\n }\\n a {\\n color: inherit;\\n -webkit-text-decoration: inherit;\\n text-decoration: inherit;\\n }\\n b, strong {\\n font-weight: bolder;\\n }\\n code, kbd, samp, pre {\\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace);\\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\\n font-size: 1em;\\n }\\n small {\\n font-size: 80%;\\n }\\n sub, sup {\\n font-size: 75%;\\n line-height: 0;\\n position: relative;\\n vertical-align: baseline;\\n }\\n sub {\\n bottom: -0.25em;\\n }\\n sup {\\n top: -0.5em;\\n }\\n table {\\n text-indent: 0;\\n border-color: inherit;\\n border-collapse: collapse;\\n }\\n :-moz-focusring {\\n outline: auto;\\n }\\n progress {\\n vertical-align: baseline;\\n }\\n summary {\\n display: list-item;\\n }\\n ol, ul, menu {\\n list-style: none;\\n }\\n img, svg, video, canvas, audio, iframe, embed, object {\\n display: block;\\n vertical-align: middle;\\n }\\n img, video {\\n max-width: 100%;\\n height: auto;\\n }\\n button, input, select, optgroup, textarea, ::file-selector-button {\\n font: inherit;\\n font-feature-settings: inherit;\\n font-variation-settings: inherit;\\n letter-spacing: inherit;\\n color: inherit;\\n border-radius: 0;\\n background-color: transparent;\\n opacity: 1;\\n }\\n :where(select:is([multiple], [size])) optgroup {\\n font-weight: bolder;\\n }\\n :where(select:is([multiple], [size])) optgroup option {\\n padding-inline-start: 20px;\\n }\\n ::file-selector-button {\\n margin-inline-end: 4px;\\n }\\n ::placeholder {\\n opacity: 1;\\n }\\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\\n ::placeholder {\\n color: currentcolor;\\n @supports (color: color-mix(in lab, red, red)) {\\n color: color-mix(in oklab, currentcolor 50%, transparent);\\n }\\n }\\n }\\n textarea {\\n resize: vertical;\\n }\\n ::-webkit-search-decoration {\\n -webkit-appearance: none;\\n }\\n ::-webkit-date-and-time-value {\\n min-height: 1lh;\\n text-align: inherit;\\n }\\n ::-webkit-datetime-edit {\\n display: inline-flex;\\n }\\n ::-webkit-datetime-edit-fields-wrapper {\\n padding: 0;\\n }\\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\\n padding-block: 0;\\n }\\n ::-webkit-calendar-picker-indicator {\\n line-height: 1;\\n }\\n :-moz-ui-invalid {\\n box-shadow: none;\\n }\\n button, input:where([type=\\\"button\\\"], [type=\\\"reset\\\"], [type=\\\"submit\\\"]), ::file-selector-button {\\n appearance: button;\\n }\\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\\n height: auto;\\n }\\n [hidden]:where(:not([hidden=\\\"until-found\\\"])) {\\n display: none !important;\\n }\\n}\\n@layer utilities {\\n .sr-only {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n margin: -1px;\\n overflow: hidden;\\n clip-path: inset(50%);\\n white-space: nowrap;\\n border-width: 0;\\n }\\n .relative {\\n position: relative;\\n }\\n .col-span-2 {\\n grid-column: span 2 / span 2;\\n }\\n .mx-auto {\\n margin-inline: auto;\\n }\\n .mb-2 {\\n margin-bottom: calc(var(--spacing) * 2);\\n }\\n .mb-4 {\\n margin-bottom: calc(var(--spacing) * 4);\\n }\\n .contents {\\n display: contents;\\n }\\n .flex {\\n display: flex;\\n }\\n .grid {\\n display: grid;\\n }\\n .inline {\\n display: inline;\\n }\\n .inline-block {\\n display: inline-block;\\n }\\n .inline-flex {\\n display: inline-flex;\\n }\\n .table {\\n display: table;\\n }\\n .h-3 {\\n height: calc(var(--spacing) * 3);\\n }\\n .h-3\\\\.5 {\\n height: calc(var(--spacing) * 3.5);\\n }\\n .h-4 {\\n height: calc(var(--spacing) * 4);\\n }\\n .h-5 {\\n height: calc(var(--spacing) * 5);\\n }\\n .h-40 {\\n height: calc(var(--spacing) * 40);\\n }\\n .h-56 {\\n height: calc(var(--spacing) * 56);\\n }\\n .min-h-screen {\\n min-height: 100vh;\\n }\\n .w-3 {\\n width: calc(var(--spacing) * 3);\\n }\\n .w-3\\\\.5 {\\n width: calc(var(--spacing) * 3.5);\\n }\\n .w-4 {\\n width: calc(var(--spacing) * 4);\\n }\\n .w-9 {\\n width: calc(var(--spacing) * 9);\\n }\\n .w-full {\\n width: 100%;\\n }\\n .max-w-2xl {\\n max-width: var(--container-2xl);\\n }\\n .max-w-3xl {\\n max-width: var(--container-3xl);\\n }\\n .max-w-6xl {\\n max-width: var(--container-6xl);\\n }\\n .flex-shrink {\\n flex-shrink: 1;\\n }\\n .shrink-0 {\\n flex-shrink: 0;\\n }\\n .border-collapse {\\n border-collapse: collapse;\\n }\\n .translate-x-0 {\\n --tw-translate-x: calc(var(--spacing) * 0);\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n .translate-x-0\\\\.5 {\\n --tw-translate-x: calc(var(--spacing) * 0.5);\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n .translate-x-4 {\\n --tw-translate-x: calc(var(--spacing) * 4);\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n .transform {\\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\\n }\\n .animate-spin {\\n animation: var(--animate-spin);\\n }\\n .cursor-pointer {\\n cursor: pointer;\\n }\\n .resize {\\n resize: both;\\n }\\n .grid-cols-1 {\\n grid-template-columns: repeat(1, minmax(0, 1fr));\\n }\\n .flex-col {\\n flex-direction: column;\\n }\\n .items-center {\\n align-items: center;\\n }\\n .justify-between {\\n justify-content: space-between;\\n }\\n .justify-center {\\n justify-content: center;\\n }\\n .gap-2 {\\n gap: calc(var(--spacing) * 2);\\n }\\n .gap-3 {\\n gap: calc(var(--spacing) * 3);\\n }\\n .gap-4 {\\n gap: calc(var(--spacing) * 4);\\n }\\n .gap-6 {\\n gap: calc(var(--spacing) * 6);\\n }\\n .space-y-0 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-0\\\\.5 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 0.5) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 0.5) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-1 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-2 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-3 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-4 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-5 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-6 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-10 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .rounded {\\n border-radius: 0.25rem;\\n }\\n .rounded-2xl {\\n border-radius: var(--radius-2xl);\\n }\\n .rounded-full {\\n border-radius: calc(infinity * 1px);\\n }\\n .rounded-lg {\\n border-radius: var(--radius-lg);\\n }\\n .rounded-xl {\\n border-radius: var(--radius-xl);\\n }\\n .border {\\n border-style: var(--tw-border-style);\\n border-width: 1px;\\n }\\n .border-2 {\\n border-style: var(--tw-border-style);\\n border-width: 2px;\\n }\\n .border-amber-200 {\\n border-color: var(--color-amber-200);\\n }\\n .border-amber-300 {\\n border-color: var(--color-amber-300);\\n }\\n .border-red-300 {\\n border-color: var(--color-red-300);\\n }\\n .border-red-700 {\\n border-color: var(--color-red-700);\\n }\\n .border-slate-100 {\\n border-color: var(--color-slate-100);\\n }\\n .border-slate-200 {\\n border-color: var(--color-slate-200);\\n }\\n .border-slate-300 {\\n border-color: var(--color-slate-300);\\n }\\n .border-t-slate-900 {\\n border-top-color: var(--color-slate-900);\\n }\\n .bg-amber-50 {\\n background-color: var(--color-amber-50);\\n }\\n .bg-emerald-50 {\\n background-color: var(--color-emerald-50);\\n }\\n .bg-indigo-600 {\\n background-color: var(--color-indigo-600);\\n }\\n .bg-red-50 {\\n background-color: var(--color-red-50);\\n }\\n .bg-red-900 {\\n background-color: var(--color-red-900);\\n }\\n .bg-red-900\\\\/20 {\\n background-color: color-mix(in srgb, oklch(39.6% 0.141 25.723) 20%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-red-900) 20%, transparent);\\n }\\n }\\n .bg-rose-50 {\\n background-color: var(--color-rose-50);\\n }\\n .bg-slate-50 {\\n background-color: var(--color-slate-50);\\n }\\n .bg-slate-300 {\\n background-color: var(--color-slate-300);\\n }\\n .bg-slate-900 {\\n background-color: var(--color-slate-900);\\n }\\n .bg-white {\\n background-color: var(--color-white);\\n }\\n .bg-white\\\\/70 {\\n background-color: color-mix(in srgb, #fff 70%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-white) 70%, transparent);\\n }\\n }\\n .bg-white\\\\/90 {\\n background-color: color-mix(in srgb, #fff 90%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-white) 90%, transparent);\\n }\\n }\\n .p-3 {\\n padding: calc(var(--spacing) * 3);\\n }\\n .p-4 {\\n padding: calc(var(--spacing) * 4);\\n }\\n .p-5 {\\n padding: calc(var(--spacing) * 5);\\n }\\n .p-6 {\\n padding: calc(var(--spacing) * 6);\\n }\\n .px-2 {\\n padding-inline: calc(var(--spacing) * 2);\\n }\\n .px-3 {\\n padding-inline: calc(var(--spacing) * 3);\\n }\\n .px-6 {\\n padding-inline: calc(var(--spacing) * 6);\\n }\\n .py-1 {\\n padding-block: calc(var(--spacing) * 1);\\n }\\n .py-1\\\\.5 {\\n padding-block: calc(var(--spacing) * 1.5);\\n }\\n .py-2 {\\n padding-block: calc(var(--spacing) * 2);\\n }\\n .py-2\\\\.5 {\\n padding-block: calc(var(--spacing) * 2.5);\\n }\\n .py-6 {\\n padding-block: calc(var(--spacing) * 6);\\n }\\n .py-8 {\\n padding-block: calc(var(--spacing) * 8);\\n }\\n .py-10 {\\n padding-block: calc(var(--spacing) * 10);\\n }\\n .font-mono {\\n font-family: var(--font-mono);\\n }\\n .text-3xl {\\n font-size: var(--text-3xl);\\n line-height: var(--tw-leading, var(--text-3xl--line-height));\\n }\\n .text-lg {\\n font-size: var(--text-lg);\\n line-height: var(--tw-leading, var(--text-lg--line-height));\\n }\\n .text-sm {\\n font-size: var(--text-sm);\\n line-height: var(--tw-leading, var(--text-sm--line-height));\\n }\\n .text-xl {\\n font-size: var(--text-xl);\\n line-height: var(--tw-leading, var(--text-xl--line-height));\\n }\\n .text-xs {\\n font-size: var(--text-xs);\\n line-height: var(--tw-leading, var(--text-xs--line-height));\\n }\\n .text-\\\\[10px\\\\] {\\n font-size: 10px;\\n }\\n .text-\\\\[11px\\\\] {\\n font-size: 11px;\\n }\\n .font-bold {\\n --tw-font-weight: var(--font-weight-bold);\\n font-weight: var(--font-weight-bold);\\n }\\n .font-medium {\\n --tw-font-weight: var(--font-weight-medium);\\n font-weight: var(--font-weight-medium);\\n }\\n .font-semibold {\\n --tw-font-weight: var(--font-weight-semibold);\\n font-weight: var(--font-weight-semibold);\\n }\\n .tracking-\\\\[0\\\\.2em\\\\] {\\n --tw-tracking: 0.2em;\\n letter-spacing: 0.2em;\\n }\\n .tracking-tight {\\n --tw-tracking: var(--tracking-tight);\\n letter-spacing: var(--tracking-tight);\\n }\\n .tracking-wide {\\n --tw-tracking: var(--tracking-wide);\\n letter-spacing: var(--tracking-wide);\\n }\\n .whitespace-pre-wrap {\\n white-space: pre-wrap;\\n }\\n .text-amber-600 {\\n color: var(--color-amber-600);\\n }\\n .text-amber-700 {\\n color: var(--color-amber-700);\\n }\\n .text-amber-800 {\\n color: var(--color-amber-800);\\n }\\n .text-emerald-700 {\\n color: var(--color-emerald-700);\\n }\\n .text-indigo-500 {\\n color: var(--color-indigo-500);\\n }\\n .text-rose-500 {\\n color: var(--color-rose-500);\\n }\\n .text-rose-600 {\\n color: var(--color-rose-600);\\n }\\n .text-rose-700 {\\n color: var(--color-rose-700);\\n }\\n .text-slate-400 {\\n color: var(--color-slate-400);\\n }\\n .text-slate-500 {\\n color: var(--color-slate-500);\\n }\\n .text-slate-600 {\\n color: var(--color-slate-600);\\n }\\n .text-slate-700 {\\n color: var(--color-slate-700);\\n }\\n .text-slate-800 {\\n color: var(--color-slate-800);\\n }\\n .text-slate-900 {\\n color: var(--color-slate-900);\\n }\\n .text-white {\\n color: var(--color-white);\\n }\\n .uppercase {\\n text-transform: uppercase;\\n }\\n .italic {\\n font-style: italic;\\n }\\n .underline {\\n text-decoration-line: underline;\\n }\\n .opacity-25 {\\n opacity: 25%;\\n }\\n .opacity-75 {\\n opacity: 75%;\\n }\\n .shadow {\\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n .shadow-sm {\\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n .outline {\\n outline-style: var(--tw-outline-style);\\n outline-width: 1px;\\n }\\n .backdrop-blur {\\n --tw-backdrop-blur: blur(8px);\\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\\n }\\n .backdrop-filter {\\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\\n }\\n .transition {\\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\\n transition-duration: var(--tw-duration, var(--default-transition-duration));\\n }\\n .transition-all {\\n transition-property: all;\\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\\n transition-duration: var(--tw-duration, var(--default-transition-duration));\\n }\\n .transition-colors {\\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\\n transition-duration: var(--tw-duration, var(--default-transition-duration));\\n }\\n .transition-transform {\\n transition-property: transform, translate, scale, rotate;\\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\\n transition-duration: var(--tw-duration, var(--default-transition-duration));\\n }\\n .duration-200 {\\n --tw-duration: 200ms;\\n transition-duration: 200ms;\\n }\\n .focus-within\\\\:border-indigo-300 {\\n &:focus-within {\\n border-color: var(--color-indigo-300);\\n }\\n }\\n .focus-within\\\\:ring-2 {\\n &:focus-within {\\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n }\\n .hover\\\\:-translate-y-0\\\\.5 {\\n &:hover {\\n @media (hover: hover) {\\n --tw-translate-y: calc(var(--spacing) * -0.5);\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n }\\n }\\n .hover\\\\:border-slate-300 {\\n &:hover {\\n @media (hover: hover) {\\n border-color: var(--color-slate-300);\\n }\\n }\\n }\\n .hover\\\\:border-slate-400 {\\n &:hover {\\n @media (hover: hover) {\\n border-color: var(--color-slate-400);\\n }\\n }\\n }\\n .hover\\\\:bg-slate-50 {\\n &:hover {\\n @media (hover: hover) {\\n background-color: var(--color-slate-50);\\n }\\n }\\n }\\n .hover\\\\:bg-slate-800 {\\n &:hover {\\n @media (hover: hover) {\\n background-color: var(--color-slate-800);\\n }\\n }\\n }\\n .hover\\\\:text-rose-700 {\\n &:hover {\\n @media (hover: hover) {\\n color: var(--color-rose-700);\\n }\\n }\\n }\\n .hover\\\\:shadow {\\n &:hover {\\n @media (hover: hover) {\\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n }\\n }\\n .hover\\\\:shadow-lg {\\n &:hover {\\n @media (hover: hover) {\\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n }\\n }\\n .hover\\\\:shadow-md {\\n &:hover {\\n @media (hover: hover) {\\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n }\\n }\\n .focus\\\\:border-indigo-400 {\\n &:focus {\\n border-color: var(--color-indigo-400);\\n }\\n }\\n .focus\\\\:ring-2 {\\n &:focus {\\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n }\\n .focus\\\\:ring-indigo-100 {\\n &:focus {\\n --tw-ring-color: var(--color-indigo-100);\\n }\\n }\\n .focus\\\\:ring-indigo-500 {\\n &:focus {\\n --tw-ring-color: var(--color-indigo-500);\\n }\\n }\\n .focus\\\\:ring-slate-900 {\\n &:focus {\\n --tw-ring-color: var(--color-slate-900);\\n }\\n }\\n .focus\\\\:outline-none {\\n &:focus {\\n --tw-outline-style: none;\\n outline-style: none;\\n }\\n }\\n .sm\\\\:grid-cols-2 {\\n @media (width >= 40rem) {\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n }\\n }\\n .md\\\\:grid-cols-2 {\\n @media (width >= 48rem) {\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n }\\n }\\n .md\\\\:flex-row {\\n @media (width >= 48rem) {\\n flex-direction: row;\\n }\\n }\\n .md\\\\:items-center {\\n @media (width >= 48rem) {\\n align-items: center;\\n }\\n }\\n .md\\\\:justify-between {\\n @media (width >= 48rem) {\\n justify-content: space-between;\\n }\\n }\\n .md\\\\:p-6 {\\n @media (width >= 48rem) {\\n padding: calc(var(--spacing) * 6);\\n }\\n }\\n .md\\\\:text-4xl {\\n @media (width >= 48rem) {\\n font-size: var(--text-4xl);\\n line-height: var(--tw-leading, var(--text-4xl--line-height));\\n }\\n }\\n .lg\\\\:grid-cols-\\\\[360px\\\\,1fr\\\\] {\\n @media (width >= 64rem) {\\n grid-template-columns: 360px,1fr;\\n }\\n }\\n .dark\\\\:border-amber-700 {\\n &:where(.dark, .dark *) {\\n border-color: var(--color-amber-700);\\n }\\n }\\n .dark\\\\:border-amber-800 {\\n &:where(.dark, .dark *) {\\n border-color: var(--color-amber-800);\\n }\\n }\\n .dark\\\\:border-slate-600 {\\n &:where(.dark, .dark *) {\\n border-color: var(--color-slate-600);\\n }\\n }\\n .dark\\\\:border-slate-700 {\\n &:where(.dark, .dark *) {\\n border-color: var(--color-slate-700);\\n }\\n }\\n .dark\\\\:border-t-indigo-400 {\\n &:where(.dark, .dark *) {\\n border-top-color: var(--color-indigo-400);\\n }\\n }\\n .dark\\\\:bg-amber-900\\\\/20 {\\n &:where(.dark, .dark *) {\\n background-color: color-mix(in srgb, oklch(41.4% 0.112 45.904) 20%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-amber-900) 20%, transparent);\\n }\\n }\\n }\\n .dark\\\\:bg-emerald-900\\\\/30 {\\n &:where(.dark, .dark *) {\\n background-color: color-mix(in srgb, oklch(37.8% 0.077 168.94) 30%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-emerald-900) 30%, transparent);\\n }\\n }\\n }\\n .dark\\\\:bg-indigo-600 {\\n &:where(.dark, .dark *) {\\n background-color: var(--color-indigo-600);\\n }\\n }\\n .dark\\\\:bg-rose-900\\\\/30 {\\n &:where(.dark, .dark *) {\\n background-color: color-mix(in srgb, oklch(41% 0.159 10.272) 30%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-rose-900) 30%, transparent);\\n }\\n }\\n }\\n .dark\\\\:bg-slate-600 {\\n &:where(.dark, .dark *) {\\n background-color: var(--color-slate-600);\\n }\\n }\\n .dark\\\\:bg-slate-700 {\\n &:where(.dark, .dark *) {\\n background-color: var(--color-slate-700);\\n }\\n }\\n .dark\\\\:bg-slate-800 {\\n &:where(.dark, .dark *) {\\n background-color: var(--color-slate-800);\\n }\\n }\\n .dark\\\\:bg-slate-800\\\\/50 {\\n &:where(.dark, .dark *) {\\n background-color: color-mix(in srgb, oklch(27.9% 0.041 260.031) 50%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-slate-800) 50%, transparent);\\n }\\n }\\n }\\n .dark\\\\:bg-slate-800\\\\/60 {\\n &:where(.dark, .dark *) {\\n background-color: color-mix(in srgb, oklch(27.9% 0.041 260.031) 60%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-slate-800) 60%, transparent);\\n }\\n }\\n }\\n .dark\\\\:bg-slate-900 {\\n &:where(.dark, .dark *) {\\n background-color: var(--color-slate-900);\\n }\\n }\\n .dark\\\\:bg-slate-900\\\\/90 {\\n &:where(.dark, .dark *) {\\n background-color: color-mix(in srgb, oklch(20.8% 0.042 265.755) 90%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-slate-900) 90%, transparent);\\n }\\n }\\n }\\n .dark\\\\:bg-slate-950 {\\n &:where(.dark, .dark *) {\\n background-color: var(--color-slate-950);\\n }\\n }\\n .dark\\\\:text-amber-300 {\\n &:where(.dark, .dark *) {\\n color: var(--color-amber-300);\\n }\\n }\\n .dark\\\\:text-amber-400 {\\n &:where(.dark, .dark *) {\\n color: var(--color-amber-400);\\n }\\n }\\n .dark\\\\:text-emerald-400 {\\n &:where(.dark, .dark *) {\\n color: var(--color-emerald-400);\\n }\\n }\\n .dark\\\\:text-indigo-400 {\\n &:where(.dark, .dark *) {\\n color: var(--color-indigo-400);\\n }\\n }\\n .dark\\\\:text-rose-400 {\\n &:where(.dark, .dark *) {\\n color: var(--color-rose-400);\\n }\\n }\\n .dark\\\\:text-slate-100 {\\n &:where(.dark, .dark *) {\\n color: var(--color-slate-100);\\n }\\n }\\n .dark\\\\:text-slate-200 {\\n &:where(.dark, .dark *) {\\n color: var(--color-slate-200);\\n }\\n }\\n .dark\\\\:text-slate-300 {\\n &:where(.dark, .dark *) {\\n color: var(--color-slate-300);\\n }\\n }\\n .dark\\\\:text-slate-400 {\\n &:where(.dark, .dark *) {\\n color: var(--color-slate-400);\\n }\\n }\\n .dark\\\\:text-slate-500 {\\n &:where(.dark, .dark *) {\\n color: var(--color-slate-500);\\n }\\n }\\n .dark\\\\:text-white {\\n &:where(.dark, .dark *) {\\n color: var(--color-white);\\n }\\n }\\n .dark\\\\:hover\\\\:border-slate-500 {\\n &:where(.dark, .dark *) {\\n &:hover {\\n @media (hover: hover) {\\n border-color: var(--color-slate-500);\\n }\\n }\\n }\\n }\\n .dark\\\\:hover\\\\:bg-indigo-700 {\\n &:where(.dark, .dark *) {\\n &:hover {\\n @media (hover: hover) {\\n background-color: var(--color-indigo-700);\\n }\\n }\\n }\\n }\\n .dark\\\\:hover\\\\:bg-slate-700 {\\n &:where(.dark, .dark *) {\\n &:hover {\\n @media (hover: hover) {\\n background-color: var(--color-slate-700);\\n }\\n }\\n }\\n }\\n .dark\\\\:focus\\\\:ring-indigo-900\\\\/40 {\\n &:where(.dark, .dark *) {\\n &:focus {\\n --tw-ring-color: color-mix(in srgb, oklch(35.9% 0.144 278.697) 40%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n --tw-ring-color: color-mix(in oklab, var(--color-indigo-900) 40%, transparent);\\n }\\n }\\n }\\n }\\n}\\n@property --tw-translate-x {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-translate-y {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-translate-z {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-rotate-x {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-rotate-y {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-rotate-z {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-skew-x {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-skew-y {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-space-y-reverse {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-border-style {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: solid;\\n}\\n@property --tw-font-weight {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-tracking {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-shadow {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0 0 #0000;\\n}\\n@property --tw-shadow-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-shadow-alpha {\\n syntax: \\\"<percentage>\\\";\\n inherits: false;\\n initial-value: 100%;\\n}\\n@property --tw-inset-shadow {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0 0 #0000;\\n}\\n@property --tw-inset-shadow-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-inset-shadow-alpha {\\n syntax: \\\"<percentage>\\\";\\n inherits: false;\\n initial-value: 100%;\\n}\\n@property --tw-ring-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-ring-shadow {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0 0 #0000;\\n}\\n@property --tw-inset-ring-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-inset-ring-shadow {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0 0 #0000;\\n}\\n@property --tw-ring-inset {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-ring-offset-width {\\n syntax: \\\"<length>\\\";\\n inherits: false;\\n initial-value: 0px;\\n}\\n@property --tw-ring-offset-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: #fff;\\n}\\n@property --tw-ring-offset-shadow {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0 0 #0000;\\n}\\n@property --tw-outline-style {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: solid;\\n}\\n@property --tw-backdrop-blur {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-backdrop-brightness {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-backdrop-contrast {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-backdrop-grayscale {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-backdrop-hue-rotate {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-backdrop-invert {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-backdrop-opacity {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-backdrop-saturate {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-backdrop-sepia {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-duration {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@keyframes spin {\\n to {\\n transform: rotate(360deg);\\n }\\n}\\n@layer properties {\\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\\n *, ::before, ::after, ::backdrop {\\n --tw-translate-x: 0;\\n --tw-translate-y: 0;\\n --tw-translate-z: 0;\\n --tw-rotate-x: initial;\\n --tw-rotate-y: initial;\\n --tw-rotate-z: initial;\\n --tw-skew-x: initial;\\n --tw-skew-y: initial;\\n --tw-space-y-reverse: 0;\\n --tw-border-style: solid;\\n --tw-font-weight: initial;\\n --tw-tracking: initial;\\n --tw-shadow: 0 0 #0000;\\n --tw-shadow-color: initial;\\n --tw-shadow-alpha: 100%;\\n --tw-inset-shadow: 0 0 #0000;\\n --tw-inset-shadow-color: initial;\\n --tw-inset-shadow-alpha: 100%;\\n --tw-ring-color: initial;\\n --tw-ring-shadow: 0 0 #0000;\\n --tw-inset-ring-color: initial;\\n --tw-inset-ring-shadow: 0 0 #0000;\\n --tw-ring-inset: initial;\\n --tw-ring-offset-width: 0px;\\n --tw-ring-offset-color: #fff;\\n --tw-ring-offset-shadow: 0 0 #0000;\\n --tw-outline-style: solid;\\n --tw-backdrop-blur: initial;\\n --tw-backdrop-brightness: initial;\\n --tw-backdrop-contrast: initial;\\n --tw-backdrop-grayscale: initial;\\n --tw-backdrop-hue-rotate: initial;\\n --tw-backdrop-invert: initial;\\n --tw-backdrop-opacity: initial;\\n --tw-backdrop-saturate: initial;\\n --tw-backdrop-sepia: initial;\\n --tw-duration: initial;\\n }\\n }\\n}\\n\";\n","import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { JSM_CSS } from './jsm-styles.generated';\n\nconst STYLE_ID = 'jsm-tailwind-styles';\n\n@Injectable({ providedIn: 'root' })\nexport class JsonSchemaStylesService {\n private injected = false;\n\n constructor(@Inject(PLATFORM_ID) private platformId: object) {}\n\n inject(): void {\n if (this.injected || !isPlatformBrowser(this.platformId)) return;\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) { this.injected = true; return; }\n\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = JSM_CSS;\n document.head.appendChild(style);\n this.injected = true;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { JsonSchemaFormService } from './json-schema-form.service';\nimport { JsonSchema, SchemaError } from './types';\nimport { JsonSchemaNodeComponent } from './json-schema-node.component';\nimport { JsonSchemaResolverService } from './json-schema-resolver.service';\nimport { JsonSchemaValidationService } from './json-schema-validation.service';\nimport { JsonSchemaStylesService } from './json-schema-styles.service';\nimport { normalizeValue } from './normalize-value';\nimport { DecimalSeparator, JsonSchemaFormOptions, localizeNumbers } from './numeric-input';\n\n@Component({\n selector: 'jsm-json-schema-form',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, JsonSchemaNodeComponent],\n providers: [JsonSchemaFormOptions],\n encapsulation: ViewEncapsulation.None,\n styles: [`\n .jsm-root *, .jsm-root *::before, .jsm-root *::after { box-sizing: border-box; }\n .jsm-root input, .jsm-root textarea, .jsm-root select, .jsm-root button {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n }\n .jsm-root input[type=\"number\"]::-webkit-inner-spin-button,\n .jsm-root input[type=\"number\"]::-webkit-outer-spin-button { opacity: 1; }\n /* Force border visibility against host resets */\n .jsm-root input:not([type=\"checkbox\"]):not([type=\"radio\"]):not(.sr-only),\n .jsm-root textarea,\n .jsm-root select {\n border-width: 1.5px !important;\n border-style: solid !important;\n }\n `],\n template: `\n <div class=\"jsm-root\">\n <form class=\"w-full space-y-5\">\n <div *ngIf=\"resolvedSchema?.title || resolvedSchema?.description\" class=\"space-y-0.5\">\n <h2 class=\"text-lg font-bold tracking-tight text-slate-900 dark:text-white\">{{ resolvedSchema?.title || 'Form' }}</h2>\n <p *ngIf=\"resolvedSchema?.description\" class=\"text-sm text-slate-500 dark:text-slate-400\">{{ resolvedSchema?.description }}</p>\n </div>\n\n <div *ngIf=\"loading\" class=\"flex items-center gap-2 py-6 text-sm text-slate-500 dark:text-slate-400\" aria-live=\"polite\">\n <svg class=\"h-4 w-4 animate-spin text-indigo-500 dark:text-indigo-400\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"/>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z\"/>\n </svg>\n Resolving schema&hellip;\n </div>\n\n <!-- schema structural errors panel -->\n <div *ngIf=\"schemaErrorList.length > 0 && !loading\"\n class=\"rounded-xl border border-amber-300 dark:border-amber-700 bg-amber-50 dark:bg-amber-900/20 p-4 space-y-3\"\n role=\"alert\">\n <div class=\"flex items-center gap-2\">\n <svg class=\"w-4 h-4 shrink-0 text-amber-600 dark:text-amber-400\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8 2L1.5 13.5h13L8 2z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/>\n <path d=\"M8 6v3.5M8 11.5v.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n <span class=\"text-sm font-semibold text-amber-800 dark:text-amber-300\">\n Schema errors ({{ schemaErrorList.length }})\n </span>\n </div>\n <p class=\"text-xs text-amber-700 dark:text-amber-400\">\n The schema has structural issues. Fix them to get a valid form.\n </p>\n <div class=\"space-y-2\">\n <div *ngFor=\"let err of schemaErrorList\"\n class=\"rounded-lg border border-amber-200 dark:border-amber-800 bg-white dark:bg-slate-900 px-3 py-2 space-y-0.5\">\n <p class=\"font-mono text-[11px] font-semibold text-amber-700 dark:text-amber-400\">{{ err.path }}</p>\n <p class=\"text-xs text-slate-700 dark:text-slate-300\">{{ err.message }}</p>\n <p class=\"text-[10px] uppercase tracking-wide text-slate-400 dark:text-slate-500\">keyword: {{ err.keyword }}</p>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"form && resolvedSchema && !loading\" class=\"space-y-5\" [formGroup]=\"form\">\n <jsm-schema-node\n [schema]=\"resolvedSchema\"\n [control]=\"rootControl\"\n [path]=\"''\"\n [errorsMap]=\"errorsMap\"\n [allowAdditionalProperties]=\"allowAdditionalProperties\"\n [showErrors]=\"showErrors\"\n label=\"Root\"\n (controlReplaced)=\"onRootReplaced($event)\"\n ></jsm-schema-node>\n </div>\n </form>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class JsonSchemaFormComponent implements OnChanges, OnDestroy {\n @Input({ required: true }) schema!: JsonSchema;\n @Input() value?: unknown;\n @Input() data?: unknown;\n @Input() allowAdditionalProperties = false;\n /**\n * Decimal separator of number/integer fields. `,` shows and accepts `0,5` (both `,` and `.` are accepted as input\n * either way); the emitted value is always a JSON number.\n */\n @Input() decimalSeparator: DecimalSeparator = '.';\n\n @Output() formReady = new EventEmitter<FormGroup>();\n @Output() valueChange = new EventEmitter<unknown>();\n @Output() schemaReady = new EventEmitter<JsonSchema>();\n @Output() schemaErrors = new EventEmitter<SchemaError[]>();\n\n form!: FormGroup;\n rootControl!: AbstractControl;\n resolvedSchema?: JsonSchema;\n errorsMap = new Map<string, string[]>();\n schemaErrorList: SchemaError[] = [];\n loading = false;\n /** When true, all field errors are shown regardless of touched/dirty state. */\n showErrors = false;\n\n private valueSub?: Subscription;\n\n constructor(\n private readonly schemaService: JsonSchemaFormService,\n private readonly resolver: JsonSchemaResolverService,\n private readonly validation: JsonSchemaValidationService,\n private readonly cdr: ChangeDetectorRef,\n private readonly options: JsonSchemaFormOptions,\n stylesService: JsonSchemaStylesService,\n ) {\n stylesService.inject();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['decimalSeparator']) {\n this.options.decimalSeparator = this.decimalSeparator;\n }\n if (changes['schema']) {\n // Schema changed — full rebuild required\n void this.buildForm();\n } else if ((changes['value'] || changes['data']) && this.form) {\n // Only data changed and form already exists — patch values without rebuilding\n const newData = this.value !== undefined ? this.value : this.data;\n this.form.patchValue(newData as Record<string, unknown>, { emitEvent: false });\n } else if (changes['value'] || changes['data']) {\n // Form not built yet — build it\n void this.buildForm();\n }\n }\n\n ngOnDestroy(): void {\n this.valueSub?.unsubscribe();\n }\n\n /**\n * Marks all fields as touched and forces error display across the entire form.\n * Call this from an external \"Save\" or \"Submit\" button to show all validation errors at once.\n * Returns true if the form is valid, false otherwise.\n */\n validate(): boolean {\n if (!this.form) return false;\n this.form.markAllAsTouched();\n this.showErrors = true;\n this.updateErrors();\n this.cdr.detectChanges();\n return this.form.valid;\n }\n\n private async buildForm(): Promise<void> {\n this.valueSub?.unsubscribe();\n this.loading = true;\n this.resolvedSchema = await this.resolver.resolve(this.schema, this.schema?.$id);\n\n // Validate the schema itself and emit any structural errors\n const schemaErrs = this.validation.validateSchema(this.resolvedSchema);\n this.schemaErrorList = schemaErrs;\n this.schemaErrors.emit(schemaErrs);\n\n this.schemaReady.emit(this.resolvedSchema);\n\n // If the schema has structural errors, stop here — don't try to build the form\n if (schemaErrs.length > 0) {\n this.form = undefined!;\n this.loading = false;\n return;\n }\n const initialData = this.value !== undefined ? this.value : this.data;\n this.rootControl = this.schemaService.buildControl(this.resolvedSchema, initialData);\n this.form = this.rootControl instanceof FormGroup ? this.rootControl : new FormGroup({ value: this.rootControl });\n this.formReady.emit(this.form);\n this.loading = false;\n\n this.attachValueSub();\n }\n\n private updateErrors(): void {\n if (!this.resolvedSchema) {\n this.errorsMap = new Map();\n return;\n }\n\n const normalized = normalizeValue(this.resolvedSchema, this.rootControl.value);\n const errors = this.validation.validate(this.resolvedSchema, normalized);\n const map = new Map<string, string[]>();\n\n for (const error of errors) {\n const path = error.instancePath ?? '';\n const messages = map.get(path) ?? [];\n messages.push(localizeNumbers(error.message ?? error.keyword, this.decimalSeparator));\n map.set(path, messages);\n }\n\n this.errorsMap = map;\n }\n\n onRootReplaced(control: AbstractControl): void {\n this.rootControl = control;\n if (control instanceof FormGroup) {\n this.form = control;\n } else {\n if (!(this.form instanceof FormGroup) || !this.form.contains('value')) {\n this.form = new FormGroup({ value: control });\n } else {\n this.form.setControl('value', control);\n }\n }\n this.attachValueSub();\n }\n\n private attachValueSub(): void {\n this.valueSub?.unsubscribe();\n this.updateErrors();\n this.valueSub = this.form.valueChanges.subscribe(() => {\n this.updateErrors();\n this.valueChange.emit(this.resolvedSchema ? normalizeValue(this.resolvedSchema, this.rootControl.value) : this.rootControl.value);\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { JsonSchemaFormComponent } from './json-schema-form.component';\nimport { JsonSchemaNodeComponent } from './json-schema-node.component';\n\n@NgModule({\n imports: [JsonSchemaFormComponent, JsonSchemaNodeComponent],\n exports: [JsonSchemaFormComponent, JsonSchemaNodeComponent],\n})\nexport class JsonSchemaFormModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.JsonSchemaFormService","i2.JsonSchemaValidationService","i3.JsonSchemaFormOptions","i2.JsonSchemaResolverService","i3.JsonSchemaValidationService","i4.JsonSchemaFormOptions","i5.JsonSchemaStylesService","i6","i7"],"mappings":"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"}
1
+ {"version":3,"file":"elle96-ng-json-schema-manager.mjs","sources":["../../../projects/ng-json-schema-form/src/lib/json-schema-form.service.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-resolver.service.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-validation.service.ts","../../../projects/ng-json-schema-form/src/lib/numeric-input.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-node.component.ts","../../../projects/ng-json-schema-form/src/lib/normalize-value.ts","../../../projects/ng-json-schema-form/src/lib/jsm-styles.generated.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-styles.service.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-form.component.ts","../../../projects/ng-json-schema-form/src/lib/json-schema-form.module.ts","../../../projects/ng-json-schema-form/src/elle96-ng-json-schema-manager.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport {\n AbstractControl,\n FormArray,\n FormControl,\n FormGroup,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { JsonSchema } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class JsonSchemaFormService {\n buildControl(schema: JsonSchema, value?: unknown, required = false): AbstractControl {\n const effectiveSchema = this.applyCombinators(schema);\n const resolvedType = this.resolveType(effectiveSchema);\n\n if (resolvedType === 'object') {\n const group: Record<string, AbstractControl> = {};\n const properties = effectiveSchema.properties ?? {};\n const requiredFields = new Set(effectiveSchema.required ?? []);\n const valueObject = this.isRecord(value) ? value : {};\n\n for (const [key, propertySchema] of Object.entries(properties)) {\n const childValue = valueObject[key];\n group[key] = this.buildControl(propertySchema, childValue, requiredFields.has(key));\n }\n\n // Include dynamic keys from value (patternProperties/additionalProperties).\n for (const key of Object.keys(valueObject)) {\n if (group[key]) {\n continue;\n }\n const dynamicSchema = this.resolveDynamicSchema(effectiveSchema, key);\n group[key] = this.buildControl(dynamicSchema ?? {}, valueObject[key], false);\n }\n\n const control = new FormGroup(group, {\n validators: this.buildValidators(effectiveSchema, required),\n });\n if (effectiveSchema.readOnly) {\n control.disable({ emitEvent: false });\n }\n return control;\n }\n\n if (resolvedType === 'array') {\n const controls: AbstractControl[] = [];\n const initialItems = Array.isArray(value) ? value : [];\n const minItems = effectiveSchema.minItems ?? 0;\n const prefixItems = effectiveSchema.prefixItems ?? [];\n const tupleLength = Math.max(prefixItems.length, minItems, initialItems.length);\n\n for (let i = 0; i < tupleLength; i += 1) {\n const itemSchema = (prefixItems[i] ?? effectiveSchema.items) as JsonSchema | boolean | undefined;\n if (itemSchema === false) {\n continue;\n }\n const itemValue = initialItems[i];\n controls.push(this.buildControl((itemSchema as JsonSchema) ?? {}, itemValue, false));\n }\n\n const control = new FormArray(controls, {\n validators: this.buildValidators(effectiveSchema, required),\n });\n if (effectiveSchema.readOnly) {\n control.disable({ emitEvent: false });\n }\n return control;\n }\n\n const initialValue = this.resolveInitialValue(effectiveSchema, value);\n const control = new FormControl(initialValue, {\n validators: this.buildValidators(effectiveSchema, required, resolvedType),\n nonNullable: false,\n });\n\n if (effectiveSchema.readOnly || effectiveSchema.const !== undefined) {\n control.disable({ emitEvent: false });\n }\n\n return control;\n }\n\n resolveType(schema: JsonSchema): JsonSchema['type'] | 'enum' {\n if (schema.enum) {\n return 'enum';\n }\n\n if (schema.oneOf?.length) {\n return this.resolveType(schema.oneOf[0]);\n }\n if (schema.anyOf?.length) {\n return this.resolveType(schema.anyOf[0]);\n }\n if (schema.allOf?.length) {\n return this.resolveType(schema.allOf[0]);\n }\n\n if (schema.type) {\n if (Array.isArray(schema.type)) {\n const preferred = schema.type.find((item) => item !== 'null');\n return preferred ?? schema.type[0];\n }\n\n return schema.type;\n }\n\n if (schema.properties || schema.patternProperties || schema.additionalProperties) {\n return 'object';\n }\n\n if (schema.items || schema.prefixItems) {\n return 'array';\n }\n\n return 'string';\n }\n\n private applyCombinators(schema: JsonSchema): JsonSchema {\n let effective = schema;\n if (schema.allOf?.length) {\n effective = this.mergeSchemas([schema, ...schema.allOf]);\n }\n if (schema.oneOf?.length) {\n effective = schema.oneOf[0];\n }\n if (schema.anyOf?.length) {\n effective = schema.anyOf[0];\n }\n return effective;\n }\n\n resolveDynamicSchema(schema: JsonSchema, key: string): JsonSchema | undefined {\n const patternSchemas = schema.patternProperties ?? {};\n for (const [pattern, patternSchema] of Object.entries(patternSchemas)) {\n try {\n const regex = new RegExp(pattern);\n if (regex.test(key)) {\n return patternSchema;\n }\n } catch {\n // ignore invalid regex\n }\n }\n\n if (schema.additionalProperties === true || schema.additionalProperties === undefined) {\n return {};\n }\n\n if (schema.additionalProperties && typeof schema.additionalProperties === 'object') {\n return schema.additionalProperties;\n }\n\n if (schema.unevaluatedProperties && typeof schema.unevaluatedProperties === 'object') {\n return schema.unevaluatedProperties;\n }\n if (schema.unevaluatedProperties === true) {\n return {};\n }\n\n return undefined;\n }\n\n private resolveInitialValue(schema: JsonSchema, value?: unknown): unknown {\n if (value !== undefined) {\n return value;\n }\n\n if (schema.const !== undefined) {\n return schema.const;\n }\n\n if (schema.default !== undefined) {\n return schema.default;\n }\n\n if (schema.enum && schema.enum.length > 0) {\n return schema.enum[0];\n }\n\n if (schema.type === 'boolean') {\n return false;\n }\n\n if (schema.type === 'array') {\n return [];\n }\n\n if (schema.type === 'object') {\n return {};\n }\n\n return null;\n }\n\n private buildValidators(\n schema: JsonSchema,\n required: boolean,\n resolvedType?: JsonSchema['type'] | 'enum'\n ): ValidatorFn[] {\n const validators: ValidatorFn[] = [];\n\n if (required) {\n validators.push(Validators.required);\n }\n\n if (schema.minLength !== undefined) {\n validators.push(Validators.minLength(schema.minLength));\n }\n\n if (schema.maxLength !== undefined) {\n validators.push(Validators.maxLength(schema.maxLength));\n }\n\n if (schema.minimum !== undefined) {\n validators.push(Validators.min(schema.minimum));\n }\n\n if (schema.maximum !== undefined) {\n validators.push(Validators.max(schema.maximum));\n }\n\n if (schema.exclusiveMinimum !== undefined) {\n validators.push((control) =>\n control.value === null || control.value === undefined || control.value === ''\n ? null\n : Number(control.value) > schema.exclusiveMinimum!\n ? null\n : { exclusiveMinimum: true }\n );\n }\n\n if (schema.exclusiveMaximum !== undefined) {\n validators.push((control) =>\n control.value === null || control.value === undefined || control.value === ''\n ? null\n : Number(control.value) < schema.exclusiveMaximum!\n ? null\n : { exclusiveMaximum: true }\n );\n }\n\n if (schema.multipleOf !== undefined) {\n validators.push((control) => {\n if (control.value === null || control.value === undefined || control.value === '') {\n return null;\n }\n const numericValue = Number(control.value);\n return numericValue % schema.multipleOf! === 0 ? null : { multipleOf: true };\n });\n }\n\n if (schema.pattern) {\n validators.push(Validators.pattern(schema.pattern));\n }\n\n if (schema.format === 'email') {\n validators.push(Validators.email);\n }\n\n if (schema.minItems !== undefined) {\n validators.push((control) =>\n Array.isArray(control.value) && control.value.length < schema.minItems!\n ? { minItems: true }\n : null\n );\n }\n\n if (schema.maxItems !== undefined) {\n validators.push((control) =>\n Array.isArray(control.value) && control.value.length > schema.maxItems!\n ? { maxItems: true }\n : null\n );\n }\n\n if (schema.uniqueItems) {\n validators.push((control) => {\n if (!Array.isArray(control.value)) {\n return null;\n }\n const unique = new Set(control.value.map((item) => JSON.stringify(item)));\n return unique.size === control.value.length ? null : { uniqueItems: true };\n });\n }\n\n if (schema.minProperties !== undefined) {\n validators.push((control) => {\n if (!control.value || typeof control.value !== 'object') {\n return null;\n }\n return Object.keys(control.value).length < schema.minProperties!\n ? { minProperties: true }\n : null;\n });\n }\n\n if (schema.maxProperties !== undefined) {\n validators.push((control) => {\n if (!control.value || typeof control.value !== 'object') {\n return null;\n }\n return Object.keys(control.value).length > schema.maxProperties!\n ? { maxProperties: true }\n : null;\n });\n }\n\n if (resolvedType === 'integer') {\n validators.push((control) => {\n if (control.value === null || control.value === undefined || control.value === '') {\n return null;\n }\n\n const numericValue = Number(control.value);\n return Number.isInteger(numericValue) ? null : { integer: true };\n });\n }\n\n return validators;\n }\n\n private isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n }\n\n private mergeSchemas(schemas: JsonSchema[]): JsonSchema {\n return schemas.reduce((acc, schema) => {\n const merged: JsonSchema = {\n ...acc,\n ...schema,\n properties: { ...(acc.properties ?? {}), ...(schema.properties ?? {}) },\n patternProperties: { ...(acc.patternProperties ?? {}), ...(schema.patternProperties ?? {}) },\n required: Array.from(new Set([...(acc.required ?? []), ...(schema.required ?? [])])),\n };\n return merged;\n }, {} as JsonSchema);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { JsonSchema } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class JsonSchemaResolverService {\n async resolve(schema: JsonSchema, baseUri?: string): Promise<JsonSchema> {\n const rootBase = baseUri ?? schema.$id ?? '';\n const localCache = new Map<string, JsonSchema>();\n const externalCache = new Map<string, JsonSchema>();\n return this.resolveRefs(schema, schema, rootBase, localCache, externalCache);\n }\n\n private async resolveRefs(\n current: JsonSchema,\n root: JsonSchema,\n baseUri: string,\n localCache: Map<string, JsonSchema>,\n externalCache: Map<string, JsonSchema>\n ): Promise<JsonSchema> {\n if (!current || typeof current !== 'object') {\n return current;\n }\n\n if (current.$ref) {\n const ref = current.$ref;\n if (ref.startsWith('#/')) {\n if (localCache.has(ref)) {\n return localCache.get(ref)!;\n }\n const resolved = this.resolvePointer(root, ref);\n if (resolved) {\n localCache.set(ref, resolved);\n return this.resolveRefs(resolved, root, baseUri, localCache, externalCache);\n }\n } else {\n const resolved = await this.resolveExternalRef(ref, baseUri, externalCache, localCache);\n if (resolved) {\n return resolved;\n }\n }\n }\n\n const next: JsonSchema = { ...current };\n\n if (next.properties) {\n const entries = await Promise.all(\n Object.entries(next.properties).map(async ([key, value]) => [\n key,\n await this.resolveRefs(value, root, baseUri, localCache, externalCache),\n ])\n );\n next.properties = Object.fromEntries(entries);\n }\n\n if (next.patternProperties) {\n const entries = await Promise.all(\n Object.entries(next.patternProperties).map(async ([key, value]) => [\n key,\n await this.resolveRefs(value, root, baseUri, localCache, externalCache),\n ])\n );\n next.patternProperties = Object.fromEntries(entries);\n }\n\n if (next.items && typeof next.items === 'object') {\n next.items = await this.resolveRefs(next.items as JsonSchema, root, baseUri, localCache, externalCache);\n }\n\n if (next.prefixItems) {\n next.prefixItems = await Promise.all(\n next.prefixItems.map((item) => this.resolveRefs(item, root, baseUri, localCache, externalCache))\n );\n }\n\n if (next.additionalProperties && typeof next.additionalProperties === 'object') {\n next.additionalProperties = await this.resolveRefs(\n next.additionalProperties,\n root,\n baseUri,\n localCache,\n externalCache\n );\n }\n\n if (next.additionalItems && typeof next.additionalItems === 'object') {\n next.additionalItems = await this.resolveRefs(\n next.additionalItems,\n root,\n baseUri,\n localCache,\n externalCache\n );\n }\n\n if (next.unevaluatedProperties && typeof next.unevaluatedProperties === 'object') {\n next.unevaluatedProperties = await this.resolveRefs(\n next.unevaluatedProperties,\n root,\n baseUri,\n localCache,\n externalCache\n );\n }\n\n if (next.unevaluatedItems && typeof next.unevaluatedItems === 'object') {\n next.unevaluatedItems = await this.resolveRefs(next.unevaluatedItems, root, baseUri, localCache, externalCache);\n }\n\n if (next.contains) {\n next.contains = await this.resolveRefs(next.contains, root, baseUri, localCache, externalCache);\n }\n\n if (next.oneOf) {\n next.oneOf = await Promise.all(\n next.oneOf.map((item) => this.resolveRefs(item, root, baseUri, localCache, externalCache))\n );\n }\n\n if (next.anyOf) {\n next.anyOf = await Promise.all(\n next.anyOf.map((item) => this.resolveRefs(item, root, baseUri, localCache, externalCache))\n );\n }\n\n if (next.allOf) {\n next.allOf = await Promise.all(\n next.allOf.map((item) => this.resolveRefs(item, root, baseUri, localCache, externalCache))\n );\n }\n\n if (next.not) {\n next.not = await this.resolveRefs(next.not, root, baseUri, localCache, externalCache);\n }\n\n if (next.if) {\n next.if = await this.resolveRefs(next.if, root, baseUri, localCache, externalCache);\n }\n\n if (next.then) {\n next.then = await this.resolveRefs(next.then, root, baseUri, localCache, externalCache);\n }\n\n if (next.else) {\n next.else = await this.resolveRefs(next.else, root, baseUri, localCache, externalCache);\n }\n\n if (next.dependencies) {\n const entries = await Promise.all(\n Object.entries(next.dependencies).map(async ([key, value]) => {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return [key, await this.resolveRefs(value as JsonSchema, root, baseUri, localCache, externalCache)];\n }\n return [key, value];\n })\n );\n next.dependencies = Object.fromEntries(entries);\n }\n\n if (next.dependentSchemas) {\n const entries = await Promise.all(\n Object.entries(next.dependentSchemas).map(async ([key, value]) => [\n key,\n await this.resolveRefs(value, root, baseUri, localCache, externalCache),\n ])\n );\n next.dependentSchemas = Object.fromEntries(entries);\n }\n\n if (next.$defs) {\n const entries = await Promise.all(\n Object.entries(next.$defs).map(async ([key, value]) => [\n key,\n await this.resolveRefs(value, root, baseUri, localCache, externalCache),\n ])\n );\n next.$defs = Object.fromEntries(entries);\n }\n\n if (next.definitions) {\n const entries = await Promise.all(\n Object.entries(next.definitions).map(async ([key, value]) => [\n key,\n await this.resolveRefs(value, root, baseUri, localCache, externalCache),\n ])\n );\n next.definitions = Object.fromEntries(entries);\n }\n\n return next;\n }\n\n private async resolveExternalRef(\n ref: string,\n baseUri: string,\n externalCache: Map<string, JsonSchema>,\n localCache: Map<string, JsonSchema>\n ): Promise<JsonSchema | null> {\n try {\n const url = new URL(ref, baseUri || window.location.href).toString();\n if (externalCache.has(url)) {\n return externalCache.get(url)!;\n }\n\n const { schema, fragment } = await this.fetchSchema(url);\n if (!schema) {\n return null;\n }\n\n const target = fragment ? this.resolvePointer(schema, fragment) : schema;\n if (!target) {\n return null;\n }\n\n const resolved = await this.resolveRefs(target, schema, schema.$id ?? url, localCache, externalCache);\n externalCache.set(url, resolved);\n return resolved;\n } catch {\n return null;\n }\n }\n\n private async fetchSchema(url: string): Promise<{ schema: JsonSchema | null; fragment: string | null }> {\n const [base, hash] = url.split('#');\n const fragment = hash ? `#/${hash.replace(/^\\//, '')}` : null;\n const response = await fetch(base, { headers: { Accept: 'application/json' } });\n if (!response.ok) {\n return { schema: null, fragment: null };\n }\n const schema = (await response.json()) as JsonSchema;\n return { schema, fragment };\n }\n\n private resolvePointer(root: JsonSchema, ref: string): JsonSchema | null {\n const pointer = ref.replace(/^#\\//, '');\n const parts = pointer.split('/').map((part) => part.replace(/~1/g, '/').replace(/~0/g, '~'));\n let current: any = root;\n for (const part of parts) {\n if (current && typeof current === 'object' && part in current) {\n current = current[part];\n } else {\n return null;\n }\n }\n return current as JsonSchema;\n }\n}\n","import { Injectable } from '@angular/core';\nimport Ajv, { ErrorObject } from 'ajv';\nimport Ajv2019 from 'ajv/dist/2019';\nimport Ajv2020 from 'ajv/dist/2020';\nimport addFormats from 'ajv-formats';\nimport AjvDraft04 from 'ajv-draft-04';\nimport { JsonSchema, SchemaError } from './types';\n\nexport type JsonSchemaDraft = 'draft4' | 'draft6' | 'draft7' | 'draft2019' | 'draft2020';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class JsonSchemaValidationService {\n private readonly ajvCache = new Map<JsonSchemaDraft, Ajv>();\n\n validate(schema: JsonSchema, value: unknown): ErrorObject[] {\n const draft = this.detectDraft(schema);\n const ajv = this.getAjv(draft);\n const validate = ajv.compile(schema as object);\n const valid = validate(value);\n if (valid) {\n return [];\n }\n return validate.errors ?? [];\n }\n\n /**\n * Validates the schema itself against its JSON Schema meta-schema.\n * Returns a list of SchemaError describing what is wrong in the schema definition.\n */\n validateSchema(schema: JsonSchema): SchemaError[] {\n const draft = this.detectDraft(schema);\n const ajv = this.getAjv(draft);\n\n try {\n const valid = ajv.validateSchema(schema as object);\n if (valid) return [];\n return (ajv.errors ?? []).map((e) => ({\n path: e.instancePath || '/',\n message: e.message ?? e.keyword,\n keyword: e.keyword,\n }));\n } catch (e) {\n // ajv.validateSchema throws when the schema is so broken it cannot be compiled.\n // The error message contains comma-separated individual violations — split them.\n const raw = e instanceof Error ? e.message : String(e);\n // Strip the \"schema is invalid: \" prefix if present\n const body = raw.replace(/^schema is invalid:\\s*/i, '');\n // Each violation looks like \"data/some/path must ...\" — extract path and message\n return body.split(', ').map((msg) => {\n const trimmed = msg.trim();\n const match = trimmed.match(/^(data[^\\s]*)\\s+(.+)$/);\n return match\n ? { path: match[1].replace(/^data/, '') || '/', message: match[2], keyword: 'schema' }\n : { path: '/', message: trimmed, keyword: 'schema' };\n });\n }\n }\n\n detectDraft(schema: JsonSchema): JsonSchemaDraft {\n const schemaId = schema.$schema ?? '';\n if (schemaId.includes('draft-04')) {\n return 'draft4';\n }\n if (schemaId.includes('draft-06')) {\n return 'draft6';\n }\n if (schemaId.includes('draft-07')) {\n return 'draft7';\n }\n if (schemaId.includes('2019-09')) {\n return 'draft2019';\n }\n if (schemaId.includes('2020-12')) {\n return 'draft2020';\n }\n\n if (schema.$defs) {\n return 'draft2020';\n }\n if (schema.definitions) {\n return 'draft7';\n }\n\n return 'draft2020';\n }\n\n private getAjv(draft: JsonSchemaDraft): Ajv {\n if (this.ajvCache.has(draft)) {\n return this.ajvCache.get(draft)!;\n }\n\n let ajv: Ajv;\n switch (draft) {\n case 'draft4':\n ajv = new AjvDraft04({\n strict: false,\n allErrors: true,\n allowUnionTypes: true,\n });\n break;\n case 'draft2019':\n ajv = new Ajv2019({\n strict: false,\n allErrors: true,\n allowUnionTypes: true,\n });\n break;\n case 'draft6':\n case 'draft7':\n ajv = new Ajv({\n strict: false,\n allErrors: true,\n allowUnionTypes: true,\n });\n break;\n case 'draft2020':\n default:\n ajv = new Ajv2020({\n strict: false,\n allErrors: true,\n allowUnionTypes: true,\n });\n }\n\n addFormats(ajv);\n this.ajvCache.set(draft, ajv);\n return ajv;\n }\n}\n","import { Directive, ElementRef, forwardRef, Injectable, Input, OnChanges, Renderer2, SimpleChanges } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/** Character shown between the integer and decimal part of a number. */\nexport type DecimalSeparator = '.' | ',';\n\n/**\n * Options shared by every node of a form. Provided by `jsm-json-schema-form`, so each form instance has its own.\n */\n@Injectable()\nexport class JsonSchemaFormOptions {\n decimalSeparator: DecimalSeparator = '.';\n}\n\nconst COMPLETE_NUMBER = /^-?(\\d+[.,]?\\d*|[.,]\\d+)$/;\n\n/**\n * Keeps digits, a leading minus and a single decimal separator (written with `separator`);\n * `,` and `.` are both accepted as input.\n */\nexport function sanitizeNumericText(text: string, separator: DecimalSeparator): string {\n let result = '';\n let hasDecimal = false;\n for (const char of text) {\n if (char >= '0' && char <= '9') {\n result += char;\n } else if (char === '-' && result === '') {\n result += char;\n } else if ((char === ',' || char === '.') && !hasDecimal) {\n hasDecimal = true;\n result += separator;\n }\n }\n return result;\n}\n\n/** Text → model: empty → `null`, a complete number → number, anything else stays a string (validation reports it). */\nexport function parseNumericText(text: string): number | string | null {\n const trimmed = text.trim();\n if (trimmed === '') {\n return null;\n }\n if (COMPLETE_NUMBER.test(trimmed)) {\n return Number(trimmed.replace(',', '.'));\n }\n return trimmed;\n}\n\n/** Model → text shown in the input. */\nexport function formatNumeric(value: unknown, separator: DecimalSeparator): string {\n if (value === null || value === undefined) {\n return '';\n }\n return typeof value === 'number' ? String(value).replace('.', separator) : String(value);\n}\n\n/** Shows decimals with the configured separator inside messages (\"must be >= 0.1\" → \"must be >= 0,1\"). */\nexport function localizeNumbers(message: string, separator: DecimalSeparator): string {\n return separator === ',' ? message.replace(/(\\d)\\.(\\d)/g, '$1,$2') : message;\n}\n\nconst toParsed = (value: unknown): unknown => (typeof value === 'string' ? parseNumericText(value) : (value ?? null));\n\n/**\n * `ControlValueAccessor` for `number`/`integer` fields. The input is a text field (`inputmode=\"decimal\"`), so the\n * decimal comma is accepted, and the model always holds a JSON number once the text is a complete number.\n * It never writes to the control while rendering or when the text is unchanged.\n */\n@Directive({\n selector: 'input[jsmNumeric]',\n standalone: true,\n host: { '(input)': 'onInput()', '(blur)': 'onBlur()' },\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NumericInputDirective), multi: true }],\n})\nexport class NumericInputDirective implements ControlValueAccessor, OnChanges {\n @Input() jsmDecimalSeparator: DecimalSeparator = '.';\n\n private _model: unknown = null;\n private _onChange: (value: unknown) => void = () => undefined;\n private _onTouched: () => void = () => undefined;\n\n constructor(\n private readonly _el: ElementRef<HTMLInputElement>,\n private readonly _renderer: Renderer2,\n ) {}\n\n private _show(text: string): void {\n this._renderer.setProperty(this._el.nativeElement, 'value', text);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['jsmDecimalSeparator'] && !changes['jsmDecimalSeparator'].firstChange && typeof this._model === 'number') {\n this._show(formatNumeric(this._model, this.jsmDecimalSeparator));\n }\n }\n\n writeValue(value: unknown): void {\n this._model = value ?? null;\n // Keep the text being typed when it already means this number (\"45,\" for 45): rewriting it would drop the separator.\n if (typeof value === 'number' && parseNumericText(this._el.nativeElement.value) === value) {\n return;\n }\n this._show(formatNumeric(value, this.jsmDecimalSeparator));\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._renderer.setProperty(this._el.nativeElement, 'disabled', isDisabled);\n }\n\n onInput(): void {\n const input = this._el.nativeElement;\n const raw = input.value;\n const cleaned = sanitizeNumericText(raw, this.jsmDecimalSeparator);\n if (cleaned !== raw) {\n const caret = Math.max(0, (input.selectionStart ?? raw.length) - (raw.length - cleaned.length));\n input.value = cleaned;\n input.setSelectionRange(caret, caret);\n }\n this._model = parseNumericText(cleaned);\n this._onChange(this._model);\n }\n\n onBlur(): void {\n const input = this._el.nativeElement;\n let text = input.value.trim();\n if (text.endsWith(',') || text.endsWith('.')) {\n text = text.slice(0, -1);\n }\n if (text === '-') {\n text = '';\n }\n const parsed = parseNumericText(text);\n this._show(typeof parsed === 'number' ? formatNumeric(parsed, this.jsmDecimalSeparator) : text);\n // Update the model only when the value really changed (\"13\" and 13 are the same value).\n if (parsed !== toParsed(this._model)) {\n this._model = parsed;\n this._onChange(parsed);\n }\n this._onTouched();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Optional,\n Output,\n OnInit,\n OnDestroy,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, FormArray, FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { JsonSchema, JsonSchemaType } from './types';\nimport { JsonSchemaFormService } from './json-schema-form.service';\nimport { JsonSchemaValidationService } from './json-schema-validation.service';\nimport { Subscription } from 'rxjs';\nimport { DecimalSeparator, JsonSchemaFormOptions, localizeNumbers, NumericInputDirective } from './numeric-input';\n\n@Component({\n selector: 'jsm-schema-node',\n standalone: true,\n imports: [CommonModule, FormsModule, ReactiveFormsModule, NumericInputDirective],\n encapsulation: ViewEncapsulation.None,\n styles: [`\n /* ── Layout ── */\n .jsm-field { display:flex; flex-direction:column; gap:.375rem; }\n .jsm-field-label { display:block; font-size:.8125rem; font-weight:600; color:#374151; }\n .jsm-field-hint { font-size:.75rem; color:#6b7280; margin:0; line-height:1.4; }\n .jsm-required { color:#ef4444; margin-left:.125rem; }\n .jsm-example { font-size:.6875rem; color:#9ca3af; }\n\n /* ── Inputs ── */\n .jsm-input, .jsm-textarea, .jsm-select {\n width:100%; border-radius:.5rem; border:1.5px solid #d1d5db;\n background:Canvas; padding:.5rem .75rem; font-size:.875rem; color:CanvasText;\n outline:none; box-shadow:0 1px 2px rgba(0,0,0,.04);\n transition:border-color .15s, box-shadow .15s;\n font-family:inherit; box-sizing:border-box;\n }\n .jsm-input:hover, .jsm-textarea:hover, .jsm-select:hover { border-color:#9ca3af; }\n .jsm-input:focus, .jsm-textarea:focus, .jsm-select:focus {\n border-color:#6366f1; box-shadow:0 0 0 3px rgba(99,102,241,.15);\n }\n .jsm-input--error, .jsm-textarea--error, .jsm-select--error {\n border-color:#f87171 !important; background:#fff5f5;\n }\n .jsm-input--error:focus, .jsm-textarea--error:focus, .jsm-select--error:focus {\n box-shadow:0 0 0 3px rgba(248,113,113,.2) !important;\n }\n .jsm-textarea { resize:vertical; min-height:6rem; }\n\n /* ── Select wrapper ── */\n .jsm-select-wrap { position:relative; }\n .jsm-select { appearance:none; padding-right:2.25rem; cursor:pointer; }\n .jsm-select-chevron {\n position:absolute; right:.625rem; top:50%; transform:translateY(-50%);\n width:1rem; height:1rem; color:#9ca3af; pointer-events:none;\n }\n\n /* ── Toggle switch ── */\n .jsm-toggle-label { display:inline-flex; align-items:center; gap:.625rem; cursor:pointer; user-select:none; }\n .jsm-toggle-track {\n position:relative; display:inline-flex; align-items:center;\n width:2.25rem; height:1.25rem; border-radius:9999px; flex-shrink:0;\n background:#d1d5db; transition:background .2s;\n }\n .jsm-toggle-track.jsm-on { background:#4f46e5; }\n .jsm-toggle-thumb {\n display:inline-block; width:1rem; height:1rem; border-radius:9999px;\n background:#fff; box-shadow:0 1px 3px rgba(0,0,0,.2);\n transform:translateX(.125rem); transition:transform .2s;\n }\n .jsm-toggle-track.jsm-on .jsm-toggle-thumb { transform:translateX(1.125rem); }\n .jsm-toggle-text { font-size:.875rem; font-weight:500; color:#374151; }\n\n /* ── Buttons ── */\n .jsm-btn-primary {\n display:inline-flex; align-items:center; gap:.25rem;\n padding:.375rem .75rem; border-radius:.5rem; font-size:.8125rem;\n font-weight:600; background:#4f46e5; color:#fff; border:none;\n cursor:pointer; box-shadow:0 1px 2px rgba(79,70,229,.3);\n transition:background .15s, transform .1s, box-shadow .15s;\n white-space:nowrap; font-family:inherit;\n }\n .jsm-btn-primary:hover { background:#4338ca; transform:translateY(-1px); box-shadow:0 3px 8px rgba(79,70,229,.3); }\n .jsm-btn-primary:active { transform:translateY(0); }\n .jsm-btn-primary:disabled { opacity:.45; cursor:not-allowed; transform:none; }\n .jsm-btn-danger {\n display:inline-flex; align-items:center; gap:.25rem;\n padding:.25rem .5rem; border-radius:.375rem; font-size:.75rem;\n font-weight:600; background:transparent; color:#dc2626;\n border:1.5px solid #fca5a5; cursor:pointer;\n transition:background .15s, border-color .15s; font-family:inherit;\n }\n .jsm-btn-danger:hover { background:#fee2e2; border-color:#f87171; }\n\n /* ── Errors ── */\n .jsm-error-list { display:flex; flex-direction:column; gap:.25rem; margin-top:.25rem; }\n .jsm-error-msg { display:flex; align-items:center; gap:.375rem; font-size:.75rem; color:#dc2626; font-weight:500; }\n .jsm-error-icon { width:.875rem; height:.875rem; flex-shrink:0; }\n\n /* ── Badges ── */\n .jsm-badge-row { display:flex; flex-wrap:wrap; gap:.375rem; }\n .jsm-badge {\n display:inline-flex; align-items:center; border-radius:9999px;\n padding:.125rem .5rem; font-size:.6875rem; font-weight:600;\n letter-spacing:.02em; text-transform:uppercase;\n }\n .jsm-badge--deprecated { background:#fef3c7; color:#92400e; }\n .jsm-badge--readonly { background:#f1f5f9; color:#475569; }\n .jsm-badge--writeonly { background:#dbeafe; color:#1e40af; }\n .jsm-badge--not { background:#fee2e2; color:#991b1b; }\n .jsm-badge--nullable { background:#f3f4f6; color:#6b7280; }\n\n /* ── Object fieldset ── */\n .jsm-fieldset {\n border:1.5px solid #e5e7eb; border-radius:.875rem; padding:1.25rem;\n background:transparent; box-shadow:0 1px 3px rgba(0,0,0,.06);\n transition:box-shadow .2s; box-sizing:border-box;\n }\n .jsm-fieldset:focus-within { border-color:#c7d2fe; box-shadow:0 0 0 3px rgba(99,102,241,.08),0 1px 3px rgba(0,0,0,.06); }\n .jsm-legend { display:inline-flex; align-items:center; gap:.375rem; padding:0 .5rem; font-size:.875rem; font-weight:700; color:#1f2937; }\n .jsm-obj-grid { display:grid; grid-template-columns:1fr; gap:1rem; }\n @media(min-width:640px){ .jsm-obj-grid { grid-template-columns:repeat(2,1fr); } }\n .jsm-obj-complex { display:flex; flex-direction:column; gap:1rem; margin-top:1rem; }\n .jsm-dynamic-key-header {\n display:flex; align-items:center; justify-content:space-between;\n padding:.25rem .5rem; background:#f9fafb; border-radius:.375rem;\n border:1px dashed #d1d5db; margin-bottom:.25rem;\n }\n .jsm-dynamic-key-label { font-size:.75rem; font-weight:600; color:#6b7280; font-family:monospace; }\n .jsm-add-prop {\n margin-top:1rem; padding:.875rem; background:#f9fafb;\n border-radius:.625rem; border:1.5px dashed #d1d5db;\n display:flex; flex-direction:column; gap:.5rem;\n }\n .jsm-add-prop-label { font-size:.75rem; font-weight:600; color:#6b7280; text-transform:uppercase; letter-spacing:.04em; }\n .jsm-add-prop-row { display:flex; gap:.5rem; align-items:center; }\n .jsm-input--sm { padding:.375rem .625rem; font-size:.8125rem; }\n\n /* ── Array ── */\n .jsm-array-block { display:flex; flex-direction:column; gap:.75rem; }\n .jsm-array-header { display:flex; align-items:flex-start; justify-content:space-between; gap:.5rem; }\n .jsm-array-title { font-size:.875rem; font-weight:700; color:#1f2937; display:flex; align-items:center; gap:.375rem; }\n .jsm-array-items { display:flex; flex-direction:column; gap:.75rem; }\n .jsm-array-item {\n border:1.5px solid #e5e7eb; border-radius:.75rem; padding:.875rem;\n background:transparent; box-shadow:0 1px 2px rgba(0,0,0,.04);\n transition:border-color .15s, box-shadow .15s;\n }\n .jsm-array-item:focus-within { border-color:#c7d2fe; box-shadow:0 0 0 3px rgba(99,102,241,.08); }\n .jsm-array-item-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:.75rem; }\n .jsm-array-index {\n display:inline-flex; align-items:center; justify-content:center;\n width:1.5rem; height:1.5rem; border-radius:9999px;\n background:#eef2ff; color:#4f46e5; font-size:.6875rem; font-weight:700;\n }\n .jsm-empty-array {\n display:flex; flex-direction:column; align-items:center; gap:.5rem;\n padding:2rem 1rem; border:1.5px dashed #e5e7eb; border-radius:.75rem;\n color:#9ca3af; font-size:.8125rem; text-align:center;\n }\n .jsm-contains-hint {\n display:flex; align-items:center; gap:.375rem; font-size:.75rem;\n color:#6366f1; background:#eef2ff; border-radius:.375rem; padding:.375rem .625rem;\n }\n\n /* ── Combinators ── */\n .jsm-combinator { border:1.5px solid #e5e7eb; border-radius:.875rem; overflow:hidden; background:transparent; box-shadow:0 1px 3px rgba(0,0,0,.06); }\n .jsm-combinator-header { display:flex; align-items:flex-start; justify-content:space-between; padding:.875rem 1rem; background:rgba(0,0,0,.03); border-bottom:1.5px solid #e5e7eb; }\n .jsm-combinator-title { font-size:.875rem; font-weight:700; color:#1f2937; }\n .jsm-combinator-body { padding:1rem; }\n .jsm-combinator-hint { font-size:.75rem; color:#6b7280; margin:.25rem 0 0; }\n .jsm-oneof-tabs { display:flex; overflow-x:auto; border-bottom:1.5px solid #e5e7eb; }\n .jsm-tab {\n padding:.5rem 1rem; font-size:.8125rem; font-weight:500; color:#6b7280;\n border:none; background:transparent; cursor:pointer;\n border-bottom:2px solid transparent; margin-bottom:-1.5px;\n transition:color .15s, border-color .15s; white-space:nowrap; font-family:inherit;\n }\n .jsm-tab:hover { color:#4f46e5; }\n .jsm-tab--active { color:#4f46e5; border-bottom-color:#4f46e5; font-weight:600; }\n .jsm-anyof-options { display:flex; flex-wrap:wrap; gap:.5rem; padding:.75rem 1rem; border-bottom:1.5px solid #e5e7eb; }\n .jsm-anyof-option {\n display:inline-flex; align-items:center; gap:.375rem; padding:.375rem .75rem;\n border-radius:9999px; border:1.5px solid #e5e7eb; font-size:.8125rem;\n font-weight:500; color:#6b7280; cursor:pointer; transition:all .15s; background:transparent;\n }\n .jsm-anyof-option:hover { border-color:#a5b4fc; color:#4f46e5; }\n .jsm-anyof-option--active { border-color:#6366f1; background:#eef2ff; color:#4f46e5; }\n .jsm-allof-section { border-left:3px solid #e0e7ff; padding-left:1rem; }\n .jsm-combinator-badge {\n display:inline-flex; align-items:center; border-radius:9999px;\n padding:.125rem .5rem; font-size:.6875rem; font-weight:700;\n text-transform:uppercase; letter-spacing:.04em; flex-shrink:0; margin-left:.75rem;\n }\n .jsm-badge--oneof { background:#dbeafe; color:#1e40af; }\n .jsm-badge--anyof { background:#ede9fe; color:#5b21b6; }\n .jsm-badge--allof { background:#ccfbf1; color:#065f46; }\n\n /* ── Dark mode ── */\n .dark .jsm-field-label { color:#d1d5db; }\n .dark .jsm-field-hint { color:#9ca3af; }\n .dark .jsm-toggle-track { background:#475569; }\n .dark .jsm-toggle-track.jsm-on { background:#4f46e5; }\n .dark .jsm-toggle-text { color:#d1d5db; }\n .dark .jsm-input, .dark .jsm-textarea, .dark .jsm-select {\n border-color:#475569; color:#f1f5f9;\n }\n .dark .jsm-input:focus, .dark .jsm-textarea:focus, .dark .jsm-select:focus {\n border-color:#6366f1; box-shadow:0 0 0 3px rgba(99,102,241,.2);\n }\n .dark .jsm-input--error, .dark .jsm-textarea--error, .dark .jsm-select--error {\n border-color:#f87171 !important; background:rgba(248,113,113,.1);\n }\n .dark .jsm-fieldset { border-color:#334155; }\n .dark .jsm-fieldset:focus-within { border-color:#6366f1; }\n .dark .jsm-legend { color:#f1f5f9; }\n .dark .jsm-combinator { border-color:#334155; }\n .dark .jsm-combinator-header { background:rgba(255,255,255,.04); border-color:#334155; }\n .dark .jsm-combinator-title { color:#f1f5f9; }\n .dark .jsm-oneof-tabs { border-color:#334155; }\n .dark .jsm-tab { color:#94a3b8; }\n .dark .jsm-tab--active { color:#818cf8; border-bottom-color:#818cf8; }\n .dark .jsm-anyof-options { border-color:#334155; }\n .dark .jsm-anyof-option { border-color:#334155; color:#94a3b8; background:#0f172a; }\n .dark .jsm-anyof-option--active { border-color:#6366f1; background:rgba(99,102,241,.15); color:#818cf8; }\n .dark .jsm-allof-section { border-left-color:#3730a3; }\n .dark .jsm-array-item { border-color:#334155; }\n .dark .jsm-array-item:focus-within { border-color:#6366f1; }\n .dark .jsm-array-index { background:rgba(99,102,241,.2); color:#818cf8; }\n .dark .jsm-empty-array { border-color:#334155; color:#64748b; }\n .dark .jsm-contains-hint { background:rgba(99,102,241,.15); color:#818cf8; }\n .dark .jsm-add-prop { background:rgba(30,41,59,.4); border-color:#475569; }\n .dark .jsm-add-prop-label { color:#64748b; }\n .dark .jsm-dynamic-key-header { background:rgba(30,41,59,.5); border-color:#475569; }\n .dark .jsm-dynamic-key-label { color:#94a3b8; }\n .dark .jsm-error-msg { color:#f87171; }\n .dark .jsm-array-title { color:#f1f5f9; }\n .dark .jsm-badge--deprecated { background:rgba(217,119,6,.2); color:#fbbf24; }\n .dark .jsm-badge--readonly { background:#1e293b; color:#94a3b8; }\n .dark .jsm-badge--writeonly { background:rgba(37,99,235,.2); color:#60a5fa; }\n .dark .jsm-badge--not { background:rgba(220,38,38,.2); color:#f87171; }\n .dark .jsm-badge--nullable { background:#1e293b; color:#94a3b8; }\n .dark .jsm-select-chevron { color:#64748b; }\n `],\n template: `\n <ng-container [ngSwitch]=\"nodeKind\">\n\n <!-- ═══ oneOf ═══ -->\n <div *ngSwitchCase=\"'oneOf'\" class=\"jsm-combinator\">\n <div class=\"jsm-combinator-header\">\n <div>\n <p class=\"jsm-combinator-title\">{{ schema.title || label }}</p>\n <p *ngIf=\"schema.description\" class=\"jsm-combinator-hint\">{{ schema.description }}</p>\n </div>\n <span class=\"jsm-combinator-badge jsm-badge--oneof\">oneOf</span>\n </div>\n <div class=\"jsm-oneof-tabs\">\n <button *ngFor=\"let option of schema.oneOf; let i = index\" type=\"button\"\n class=\"jsm-tab\" [class.jsm-tab--active]=\"selectedOneOf === i\"\n (click)=\"selectedOneOf = i; onOneOfChange()\">\n {{ option.title || ('Option ' + (i + 1)) }}\n </button>\n </div>\n <div class=\"jsm-combinator-body\" *ngIf=\"activeVariant\">\n <jsm-schema-node [schema]=\"activeVariant\" [control]=\"control\" [parent]=\"parent\" [controlKey]=\"controlKey\"\n [path]=\"path\" [errorsMap]=\"errorsMap\" [label]=\"label\" [required]=\"required\"\n [allowAdditionalProperties]=\"allowAdditionalProperties\" [showErrors]=\"showErrors\"\n (controlReplaced)=\"controlReplaced.emit($event)\"></jsm-schema-node>\n </div>\n </div>\n\n <!-- ═══ anyOf ═══ -->\n <div *ngSwitchCase=\"'anyOf'\" class=\"jsm-combinator\">\n <div class=\"jsm-combinator-header\">\n <div>\n <p class=\"jsm-combinator-title\">{{ schema.title || label }}</p>\n <p *ngIf=\"schema.description\" class=\"jsm-combinator-hint\">{{ schema.description }}</p>\n </div>\n <span class=\"jsm-combinator-badge jsm-badge--anyof\">anyOf</span>\n </div>\n <div class=\"jsm-anyof-options\">\n <label *ngFor=\"let option of schema.anyOf; let i = index\"\n class=\"jsm-anyof-option\" [class.jsm-anyof-option--active]=\"selectedAnyOf.has(i)\">\n <input type=\"checkbox\" class=\"sr-only\" [checked]=\"selectedAnyOf.has(i)\" (change)=\"toggleAnyOf(i)\" />\n {{ option.title || ('Option ' + (i + 1)) }}\n </label>\n </div>\n <div class=\"jsm-combinator-body\" *ngIf=\"activeVariant\">\n <jsm-schema-node [schema]=\"activeVariant\" [control]=\"control\" [parent]=\"parent\" [controlKey]=\"controlKey\"\n [path]=\"path\" [errorsMap]=\"errorsMap\" [label]=\"label\" [required]=\"required\"\n [allowAdditionalProperties]=\"allowAdditionalProperties\" [showErrors]=\"showErrors\"\n (controlReplaced)=\"controlReplaced.emit($event)\"></jsm-schema-node>\n </div>\n </div>\n\n <!-- ═══ allOf ═══ -->\n <div *ngSwitchCase=\"'allOf'\" class=\"jsm-combinator\">\n <div class=\"jsm-combinator-header\">\n <div>\n <p class=\"jsm-combinator-title\">{{ schema.title || label }}</p>\n <p *ngIf=\"schema.description\" class=\"jsm-combinator-hint\">{{ schema.description }}</p>\n </div>\n <span class=\"jsm-combinator-badge jsm-badge--allof\">allOf</span>\n </div>\n <div class=\"jsm-combinator-body\">\n <div *ngFor=\"let subSchema of mergedAllOf; let i = index\" class=\"jsm-allof-section\">\n <jsm-schema-node [schema]=\"subSchema\" [control]=\"control\" [parent]=\"parent\" [controlKey]=\"controlKey\"\n [path]=\"path\" [errorsMap]=\"errorsMap\" [label]=\"subSchema.title || ('Section ' + (i + 1))\" [required]=\"required\"\n [allowAdditionalProperties]=\"allowAdditionalProperties\" [showErrors]=\"showErrors\"\n (controlReplaced)=\"controlReplaced.emit($event)\"></jsm-schema-node>\n </div>\n </div>\n </div>\n\n <!-- ═══ object ═══ -->\n <fieldset *ngSwitchCase=\"'object'\" class=\"jsm-fieldset\">\n <legend class=\"jsm-legend\">{{ schema.title || label }}</legend>\n <p *ngIf=\"schema.description\" class=\"jsm-field-hint\" style=\"margin-bottom:.75rem;margin-top:.25rem;\">{{ schema.description }}</p>\n\n <div *ngIf=\"metaBadges.length\" class=\"jsm-badge-row\" style=\"margin-bottom:.75rem;\">\n <span *ngFor=\"let badge of metaBadges\" class=\"jsm-badge\" [ngClass]=\"badgeClass(badge)\">{{ badge }}</span>\n </div>\n\n <div class=\"jsm-obj-grid\" [formGroup]=\"controlAsGroup\">\n <ng-container *ngFor=\"let key of simpleKeys\">\n <div style=\"display:flex;flex-direction:column;gap:.25rem;\">\n <div *ngIf=\"isDynamicKey(key)\" class=\"jsm-dynamic-key-header\">\n <span class=\"jsm-dynamic-key-label\">{{ key }}</span>\n <button type=\"button\" class=\"jsm-btn-danger\" (click)=\"removeDynamicKey(key)\">Remove</button>\n </div>\n <jsm-schema-node [schema]=\"schemaForKey(key)\" [control]=\"childControl(key)\" [parent]=\"controlAsGroup\"\n [controlKey]=\"key\" [path]=\"pathForChild(key)\" [errorsMap]=\"errorsMap\" [label]=\"key\"\n [required]=\"isRequired(key)\" [allowAdditionalProperties]=\"allowAdditionalProperties\" [showErrors]=\"showErrors\"\n (controlReplaced)=\"controlReplaced.emit($event)\"></jsm-schema-node>\n </div>\n </ng-container>\n </div>\n\n <div class=\"jsm-obj-complex\" *ngIf=\"complexKeys.length > 0\" [formGroup]=\"controlAsGroup\">\n <ng-container *ngFor=\"let key of complexKeys\">\n <div style=\"display:flex;flex-direction:column;gap:.25rem;\">\n <div *ngIf=\"isDynamicKey(key)\" class=\"jsm-dynamic-key-header\">\n <span class=\"jsm-dynamic-key-label\">{{ key }}</span>\n <button type=\"button\" class=\"jsm-btn-danger\" (click)=\"removeDynamicKey(key)\">Remove</button>\n </div>\n <jsm-schema-node [schema]=\"schemaForKey(key)\" [control]=\"childControl(key)\" [parent]=\"controlAsGroup\"\n [controlKey]=\"key\" [path]=\"pathForChild(key)\" [errorsMap]=\"errorsMap\" [label]=\"key\"\n [required]=\"isRequired(key)\" [allowAdditionalProperties]=\"allowAdditionalProperties\" [showErrors]=\"showErrors\"\n (controlReplaced)=\"controlReplaced.emit($event)\"></jsm-schema-node>\n </div>\n </ng-container>\n </div>\n\n <div *ngIf=\"canAddProperty\" class=\"jsm-add-prop\">\n <p class=\"jsm-add-prop-label\">Add property</p>\n <div class=\"jsm-add-prop-row\">\n <input class=\"jsm-input jsm-input--sm\" style=\"flex:1;\" [(ngModel)]=\"newPropertyKey\" placeholder=\"propertyName\" />\n <button type=\"button\" class=\"jsm-btn-primary\" (click)=\"addDynamicProperty()\">Add</button>\n </div>\n <p *ngIf=\"propertyError\" class=\"jsm-error-msg\">\n <svg class=\"jsm-error-icon\" viewBox=\"0 0 16 16\" fill=\"none\"><circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" stroke-width=\"1.5\"/><path d=\"M8 5v3.5M8 11v.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>\n {{ propertyError }}\n </p>\n </div>\n\n <div *ngIf=\"errorsForPath.length\" class=\"jsm-error-list\" style=\"margin-top:.75rem;\">\n <p *ngFor=\"let error of errorsForPath\" class=\"jsm-error-msg\">\n <svg class=\"jsm-error-icon\" viewBox=\"0 0 16 16\" fill=\"none\"><circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" stroke-width=\"1.5\"/><path d=\"M8 5v3.5M8 11v.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>\n {{ error }}\n </p>\n </div>\n </fieldset>\n\n <!-- ═══ array ═══ -->\n <div *ngSwitchCase=\"'array'\" class=\"jsm-array-block\">\n <div class=\"jsm-array-header\">\n <div>\n <p class=\"jsm-array-title\">\n {{ schema.title || label }}<span *ngIf=\"required\" style=\"color:#ef4444;margin-left:.125rem;\">*</span>\n </p>\n <p *ngIf=\"schema.description\" class=\"jsm-field-hint\">{{ schema.description }}</p>\n </div>\n <button type=\"button\" class=\"jsm-btn-primary\" (click)=\"addArrayItem()\" [disabled]=\"!canAddArrayItem\">\n <svg style=\"width:.875rem;height:.875rem;flex-shrink:0;\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M8 3v10M3 8h10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>\n Add item\n </button>\n </div>\n\n <div *ngIf=\"effectiveSchema.contains\" class=\"jsm-contains-hint\">\n Must contain matching item(s)\n <span *ngIf=\"effectiveSchema.minContains\"> · min {{ effectiveSchema.minContains }}</span>\n <span *ngIf=\"effectiveSchema.maxContains\"> · max {{ effectiveSchema.maxContains }}</span>\n </div>\n\n <div *ngIf=\"metaBadges.length\" class=\"jsm-badge-row\">\n <span *ngFor=\"let badge of metaBadges\" class=\"jsm-badge\" [ngClass]=\"badgeClass(badge)\">{{ badge }}</span>\n </div>\n\n <div class=\"jsm-array-items\" *ngIf=\"arrayControls.length > 0; else emptyArray\">\n <div *ngFor=\"let item of arrayControls; let i = index\" class=\"jsm-array-item\">\n <div class=\"jsm-array-item-header\">\n <span class=\"jsm-array-index\">{{ i + 1 }}</span>\n <button type=\"button\" class=\"jsm-btn-danger\" (click)=\"removeArrayItem(i)\">Remove</button>\n </div>\n <jsm-schema-node [schema]=\"schemaForIndex(i)\" [control]=\"item\" [parent]=\"controlAsArray\"\n [controlKey]=\"i\" [path]=\"pathForChild(i)\" [errorsMap]=\"errorsMap\" [label]=\"label + ' item'\"\n [allowAdditionalProperties]=\"allowAdditionalProperties\" [showErrors]=\"showErrors\"\n (controlReplaced)=\"controlReplaced.emit($event)\"></jsm-schema-node>\n </div>\n </div>\n\n <ng-template #emptyArray>\n <div class=\"jsm-empty-array\">No items yet — click \"Add item\" to start.</div>\n </ng-template>\n\n <div *ngIf=\"errorsForPath.length\" class=\"jsm-error-list\">\n <p *ngFor=\"let error of errorsForPath\" class=\"jsm-error-msg\">\n <svg class=\"jsm-error-icon\" viewBox=\"0 0 16 16\" fill=\"none\"><circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" stroke-width=\"1.5\"/><path d=\"M8 5v3.5M8 11v.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>\n {{ error }}\n </p>\n </div>\n </div>\n\n <!-- ═══ primitive ═══ -->\n <div *ngSwitchDefault class=\"jsm-field\">\n <ng-container *ngIf=\"inputKind !== 'checkbox'\">\n <label class=\"jsm-field-label\">\n {{ schema.title || label }}<span *ngIf=\"required\" class=\"jsm-required\">*</span>\n </label>\n <p *ngIf=\"schema.description\" class=\"jsm-field-hint\">{{ schema.description }}</p>\n </ng-container>\n\n <div *ngIf=\"metaBadges.length\" class=\"jsm-badge-row\">\n <span *ngFor=\"let badge of metaBadges\" class=\"jsm-badge\" [ngClass]=\"badgeClass(badge)\">{{ badge }}</span>\n </div>\n\n <ng-container>\n <input *ngIf=\"inputKind === 'number'\" jsmNumeric type=\"text\" inputmode=\"decimal\" class=\"jsm-input\"\n [class.jsm-input--error]=\"controlAsFormControl.invalid && (controlAsFormControl.dirty || isTouched || showErrors)\"\n [jsmDecimalSeparator]=\"decimalSeparator\" [attr.data-step]=\"numericStep\"\n [attr.placeholder]=\"schema.title || label\"\n [formControl]=\"controlAsFormControl\"\n (blur)=\"onBlur()\" />\n\n <input *ngIf=\"inputKind === 'text'\" class=\"jsm-input\"\n [class.jsm-input--error]=\"controlAsFormControl.invalid && (controlAsFormControl.dirty || isTouched || showErrors)\"\n [attr.type]=\"inputType\" [attr.placeholder]=\"schema.title || label\"\n [formControl]=\"controlAsFormControl\"\n (blur)=\"onBlur()\" />\n\n <textarea *ngIf=\"inputKind === 'textarea'\" rows=\"4\" class=\"jsm-textarea\"\n [class.jsm-textarea--error]=\"controlAsFormControl.invalid && (controlAsFormControl.dirty || isTouched || showErrors)\"\n [attr.placeholder]=\"schema.title || label\"\n [formControl]=\"controlAsFormControl\"\n (blur)=\"onBlur()\"></textarea>\n\n <div *ngIf=\"inputKind === 'select'\" class=\"jsm-select-wrap\">\n <select class=\"jsm-select\"\n [class.jsm-select--error]=\"controlAsFormControl.invalid && (controlAsFormControl.dirty || isTouched || showErrors)\"\n [formControl]=\"controlAsFormControl\"\n (blur)=\"onBlur()\">\n <option *ngFor=\"let option of effectiveSchema.enum\" [ngValue]=\"option\">{{ option }}</option>\n </select>\n <svg class=\"jsm-select-chevron\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 6l4 4 4-4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n <label *ngIf=\"inputKind === 'checkbox'\" class=\"jsm-toggle-label\">\n <span class=\"jsm-toggle-track\" [class.jsm-on]=\"controlAsFormControl.value\">\n <input type=\"checkbox\" class=\"sr-only\" [formControl]=\"controlAsFormControl\" />\n <span class=\"jsm-toggle-thumb\"></span>\n </span>\n <span class=\"jsm-toggle-text\">\n {{ schema.title || label }}<span *ngIf=\"required\" class=\"jsm-required\">*</span>\n </span>\n </label>\n </ng-container>\n\n <p *ngIf=\"inputKind === 'checkbox' && schema.description\" class=\"jsm-field-hint\">{{ schema.description }}</p>\n <p *ngIf=\"effectiveSchema.examples?.length\" class=\"jsm-example\">e.g. {{ effectiveSchema.examples?.[0] }}</p>\n <p *ngIf=\"effectiveSchema.contentMediaType\" class=\"jsm-example\">\n {{ effectiveSchema.contentMediaType }}<span *ngIf=\"effectiveSchema.contentEncoding\"> ({{ effectiveSchema.contentEncoding }})</span>\n </p>\n\n <div *ngIf=\"allErrors.length && (controlAsFormControl.dirty || isTouched || showErrors)\" class=\"jsm-error-list\">\n <p *ngFor=\"let error of allErrors\" class=\"jsm-error-msg\">\n <svg class=\"jsm-error-icon\" viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M8 5v3.5M8 11v.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n {{ error }}\n </p>\n </div>\n </div>\n\n </ng-container>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class JsonSchemaNodeComponent implements OnInit, OnDestroy {\n @Input({ required: true }) schema!: JsonSchema;\n @Input({ required: true }) control!: AbstractControl;\n @Input() label = '';\n @Input() required = false;\n @Input() path = '';\n @Input() errorsMap = new Map<string, string[]>();\n @Input() parent?: FormGroup | FormArray;\n @Input() controlKey?: string | number;\n @Input() allowAdditionalProperties = false;\n /** When true, errors are shown regardless of touched/dirty state (e.g. triggered by an external save button). */\n @Input() showErrors = false;\n\n @Output() controlReplaced = new EventEmitter<AbstractControl>();\n\n selectedOneOf = 0;\n selectedAnyOf = new Set<number>();\n newPropertyKey = '';\n propertyError = '';\n /** Tracks whether this primitive control has been touched (for OnPush CD). */\n isTouched = false;\n\n private valueSub?: Subscription;\n\n constructor(\n private readonly schemaService: JsonSchemaFormService,\n private readonly validation: JsonSchemaValidationService,\n private readonly cdr: ChangeDetectorRef,\n @Optional() private readonly options: JsonSchemaFormOptions | null,\n ) {}\n\n ngOnInit(): void {\n if (this.schema.anyOf?.length) this.selectedAnyOf.add(0);\n // markForCheck is enough for value changes — Angular will re-render in the next CD cycle\n // without recreating DOM nodes, so the focused input keeps its focus.\n this.valueSub = this.control.valueChanges.subscribe(() => this.cdr.markForCheck());\n }\n\n ngOnDestroy(): void {\n this.valueSub?.unsubscribe();\n }\n\n /** Called on blur of primitive inputs to trigger CD after Angular marks the control as touched. */\n onBlur(): void {\n this.isTouched = true;\n this.cdr.markForCheck();\n }\n\n isSimpleChild(key: string): boolean {\n const s = this.schemaForKey(key);\n if (s.oneOf?.length || s.anyOf?.length || s.allOf?.length) return false;\n const t = this.schemaService.resolveType(s);\n return t !== 'object' && t !== 'array';\n }\n\n badgeClass(badge: string): string {\n if (badge === 'Deprecated') return 'jsm-badge--deprecated';\n if (badge === 'Read-only' || badge === 'Nullable') return 'jsm-badge--readonly';\n if (badge === 'Write-only') return 'jsm-badge--writeonly';\n if (badge === 'Not constraint') return 'jsm-badge--not';\n return 'jsm-badge--nullable';\n }\n\n get nodeKind(): 'oneOf' | 'anyOf' | 'allOf' | 'object' | 'array' | 'primitive' {\n if (this.schema.oneOf?.length) return 'oneOf';\n if (this.schema.anyOf?.length) return 'anyOf';\n if (this.schema.allOf?.length) return 'allOf';\n const r = this.resolvedType;\n if (r === 'object') return 'object';\n if (r === 'array') return 'array';\n return 'primitive';\n }\n\n get resolvedType(): JsonSchema['type'] | 'enum' {\n return this.schemaService.resolveType(this.effectiveSchema) ?? 'string';\n }\n\n get decimalSeparator(): DecimalSeparator {\n return this.options?.decimalSeparator ?? '.';\n }\n\n /** `multipleOf` of this node's own schema, exposed as step metadata. */\n get numericStep(): string {\n return this.effectiveSchema.multipleOf ? String(this.effectiveSchema.multipleOf) : 'any';\n }\n\n get inputKind(): 'text' | 'number' | 'textarea' | 'select' | 'checkbox' {\n if (this.effectiveSchema.enum) return 'select';\n if (this.resolvedType === 'boolean') return 'checkbox';\n if (this.resolvedType === 'number' || this.resolvedType === 'integer') return 'number';\n if (this.effectiveSchema.format === 'textarea' || (this.effectiveSchema.maxLength ?? 0) > 200) return 'textarea';\n return 'text';\n }\n\n get inputType(): string {\n if (this.effectiveSchema.format === 'email') return 'email';\n if (this.effectiveSchema.format === 'date') return 'date';\n if (this.effectiveSchema.format === 'time') return 'time';\n if (this.effectiveSchema.format === 'date-time') return 'datetime-local';\n if (this.resolvedType === 'number' || this.resolvedType === 'integer') return 'number';\n if (this.effectiveSchema.format === 'password') return 'password';\n return 'text';\n }\n\n get controlAsGroup(): FormGroup { return this.control as FormGroup; }\n get controlAsFormControl(): FormControl { return this.control as FormControl; }\n get controlAsArray(): FormArray { return this.control as FormArray; }\n get arrayControls(): AbstractControl[] { return this.controlAsArray.controls; }\n get objectKeys(): string[] { return Object.keys(this.controlAsGroup.controls); }\n get simpleKeys(): string[] { return this.objectKeys.filter(k => this.isSimpleChild(k)); }\n get complexKeys(): string[] { return this.objectKeys.filter(k => !this.isSimpleChild(k)); }\n get canAddProperty(): boolean {\n if (!this.allowAdditionalProperties) return false;\n return this.effectiveSchema.additionalProperties !== false || !!this.effectiveSchema.patternProperties;\n }\n get errorsForPath(): string[] { return this.errorsMap.get(this.path) ?? []; }\n\n /** Combined errors: Ajv errors from errorsMap + Angular validator errors on the control. */\n get allErrors(): string[] {\n const ajvErrors = this.errorsForPath;\n const ctrl = this.control;\n if (!ctrl.errors) return ajvErrors;\n const angularErrors: string[] = [];\n const errs = ctrl.errors;\n if (errs['required']) angularErrors.push('This field is required');\n if (errs['minlength']) angularErrors.push(`Minimum length is ${errs['minlength'].requiredLength}`);\n if (errs['maxlength']) angularErrors.push(`Maximum length is ${errs['maxlength'].requiredLength}`);\n if (errs['min']) angularErrors.push(`Minimum value is ${errs['min'].min}`);\n if (errs['max']) angularErrors.push(`Maximum value is ${errs['max'].max}`);\n if (errs['email']) angularErrors.push('Invalid email address');\n if (errs['pattern']) angularErrors.push('Value does not match the required pattern');\n if (errs['integer']) angularErrors.push('Value must be an integer');\n if (errs['exclusiveMinimum']) angularErrors.push('Value must be greater than the minimum');\n if (errs['exclusiveMaximum']) angularErrors.push('Value must be less than the maximum');\n if (errs['multipleOf']) angularErrors.push('Value must be a multiple of the required number');\n if (errs['minItems']) angularErrors.push(`Minimum ${errs['minItems'].requiredLength ?? ''} items required`);\n if (errs['maxItems']) angularErrors.push(`Maximum ${errs['maxItems'].requiredLength ?? ''} items allowed`);\n if (errs['uniqueItems']) angularErrors.push('Items must be unique');\n // Merge: prefer Ajv messages, fall back to Angular messages for errors not covered by Ajv\n const messages = ajvErrors.length > 0 ? ajvErrors : angularErrors;\n return messages.map((message) => localizeNumbers(message, this.decimalSeparator));\n }\n get metaBadges(): string[] {\n const b: string[] = [];\n if (this.effectiveSchema.deprecated) b.push('Deprecated');\n if (this.effectiveSchema.readOnly) b.push('Read-only');\n if (this.effectiveSchema.writeOnly) b.push('Write-only');\n if (this.effectiveSchema.nullable) b.push('Nullable');\n if (this.effectiveSchema.not) b.push('Not constraint');\n return b;\n }\n\n get activeVariant(): JsonSchema | null {\n if (this.schema.oneOf?.length) return this.schema.oneOf[this.selectedOneOf] ?? null;\n if (this.schema.anyOf?.length) {\n const sel = Array.from(this.selectedAnyOf).map(i => this.schema.anyOf![i]);\n return sel.length ? this.mergeSchemas(sel) : this.schema.anyOf[0] ?? null;\n }\n if (this.schema.allOf?.length) return this.mergeSchemas([this.schema, ...this.schema.allOf]);\n return this.effectiveSchema;\n }\n\n get mergedAllOf(): JsonSchema[] {\n return this.schema.allOf?.length ? [this.schema, ...this.schema.allOf] : [this.schema];\n }\n\n isRequired(key: string): boolean { return this.effectiveSchema.required?.includes(key) ?? false; }\n\n schemaForKey(key: string): JsonSchema {\n return this.effectiveSchema.properties?.[key] ?? this.schemaService.resolveDynamicSchema(this.effectiveSchema, key) ?? {};\n }\n\n isDynamicKey(key: string): boolean { return !this.effectiveSchema.properties?.[key]; }\n\n pathForChild(key: string | number): string {\n return this.path === '' ? `/${key}` : `${this.path}/${key}`;\n }\n\n addDynamicProperty(): void {\n this.propertyError = '';\n const key = this.newPropertyKey.trim();\n if (!key) { this.propertyError = 'Property name is required.'; return; }\n if (this.effectiveSchema.propertyNames) {\n if (this.validation.validate(this.effectiveSchema.propertyNames, key).length) {\n this.propertyError = 'Property name does not match schema constraints.'; return;\n }\n }\n if (this.controlAsGroup.contains(key)) { this.propertyError = 'Property already exists.'; return; }\n const s = this.schemaService.resolveDynamicSchema(this.effectiveSchema, key);\n if (!s) { this.propertyError = 'This property is not allowed by the schema.'; return; }\n this.controlAsGroup.addControl(key, this.schemaService.buildControl(s, undefined, false));\n this.newPropertyKey = '';\n }\n\n removeDynamicKey(key: string): void { this.controlAsGroup.removeControl(key); }\n\n schemaForIndex(index: number): JsonSchema {\n const p = this.effectiveSchema.prefixItems ?? [];\n if (p[index]) return p[index];\n if (this.effectiveSchema.items && this.effectiveSchema.items !== true) return this.effectiveSchema.items as JsonSchema;\n if (this.effectiveSchema.additionalItems && this.effectiveSchema.additionalItems !== true) return this.effectiveSchema.additionalItems as JsonSchema;\n if (this.effectiveSchema.unevaluatedItems && this.effectiveSchema.unevaluatedItems !== true) return this.effectiveSchema.unevaluatedItems as JsonSchema;\n return {};\n }\n\n get canAddArrayItem(): boolean {\n return !(this.effectiveSchema.items === false || this.effectiveSchema.additionalItems === false || this.effectiveSchema.unevaluatedItems === false);\n }\n\n addArrayItem(): void {\n if (!this.canAddArrayItem) return;\n const fa = this.controlAsArray;\n fa.push(this.schemaService.buildControl(this.schemaForIndex(fa.length), undefined, false));\n fa.markAsDirty();\n }\n\n removeArrayItem(index: number): void {\n this.controlAsArray.removeAt(index);\n this.controlAsArray.markAsDirty();\n }\n\n onOneOfChange(): void {\n if (!this.activeVariant) return;\n this.replaceControl(this.schemaService.buildControl(this.activeVariant, this.control.value, this.required));\n }\n\n toggleAnyOf(index: number): void {\n if (this.selectedAnyOf.has(index)) this.selectedAnyOf.delete(index);\n else this.selectedAnyOf.add(index);\n const v = this.activeVariant;\n if (v) this.replaceControl(this.schemaService.buildControl(v, this.control.value, this.required));\n }\n\n private replaceControl(control: AbstractControl): void {\n if (this.parent) {\n if (this.parent instanceof FormGroup && typeof this.controlKey === 'string') this.parent.setControl(this.controlKey, control);\n if (this.parent instanceof FormArray && typeof this.controlKey === 'number') this.parent.setControl(this.controlKey, control);\n this.control = control; return;\n }\n this.control = control;\n this.controlReplaced.emit(control);\n }\n\n childControl(key: string): AbstractControl { return this.controlAsGroup.get(key) as AbstractControl; }\n\n get effectiveSchema(): JsonSchema {\n let s = this.schema;\n if (s.allOf?.length) s = this.mergeSchemas([s, ...s.allOf]);\n s = this.applyConditional(s);\n s = this.applyDependencies(s);\n return s;\n }\n\n private applyConditional(schema: JsonSchema): JsonSchema {\n if (!schema.if) return schema;\n const errors = this.validation.validate(schema.if, this.control.value);\n const branch = errors.length === 0 ? schema.then : schema.else;\n if (!branch) return schema;\n return this.mergeSchemas([schema, branch]);\n }\n\n private applyDependencies(schema: JsonSchema): JsonSchema {\n const value = this.control.value;\n if (!value || typeof value !== 'object' || Array.isArray(value)) return schema;\n let merged = { ...schema } as JsonSchema;\n const keys = Object.keys(value as Record<string, unknown>);\n if (schema.dependentRequired) {\n for (const k of keys) { const r = schema.dependentRequired[k]; if (r?.length) merged = this.mergeSchemas([merged, { required: r }]); }\n }\n if (schema.dependentSchemas) {\n for (const k of keys) { const d = schema.dependentSchemas[k]; if (d) merged = this.mergeSchemas([merged, d]); }\n }\n if (schema.dependencies) {\n for (const k of keys) {\n const d = schema.dependencies[k];\n if (Array.isArray(d)) merged = this.mergeSchemas([merged, { required: d }]);\n else if (d) merged = this.mergeSchemas([merged, d]);\n }\n }\n return merged;\n }\n\n private mergeSchemas(schemas: JsonSchema[]): JsonSchema {\n return schemas.reduce((acc, s) => ({\n ...acc, ...s,\n properties: { ...(acc.properties ?? {}), ...(s.properties ?? {}) },\n patternProperties: { ...(acc.patternProperties ?? {}), ...(s.patternProperties ?? {}) },\n required: Array.from(new Set([...(acc.required ?? []), ...(s.required ?? [])])),\n ...(acc.type && s.type ? {\n type: Array.from(new Set([\n ...(Array.isArray(acc.type) ? acc.type : [acc.type]),\n ...(Array.isArray(s.type) ? s.type : [s.type]),\n ])) as JsonSchemaType[]\n } : {}),\n }), {} as JsonSchema);\n }\n}\n","import { JsonSchema } from './types';\n\nconst OMIT = Symbol('omit');\n\n/** Complete decimal numbers only: \"13\", \"-0.5\", \"0,5\", \"3,\" (comma or dot as separator). */\nconst NUMERIC_STRING = /^[+-]?(\\d+([.,]\\d*)?|[.,]\\d+)$/;\n\ntype SchemaLike = JsonSchema | boolean | undefined;\n\nconst isSchema = (schema: SchemaLike): schema is JsonSchema => !!schema && typeof schema === 'object';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === 'object' && !Array.isArray(value);\n\nconst primaryType = (schema: JsonSchema): string | undefined => {\n const type = schema.type;\n if (Array.isArray(type)) {\n return type.find((item) => item !== 'null') ?? type[0];\n }\n return type;\n};\n\nconst isNumericType = (type: string | undefined): boolean => type === 'number' || type === 'integer';\n\n/** Converts a numeric string to a number; empty values are omitted; anything else is left as typed. */\nfunction normalizeNumber(value: unknown): unknown {\n if (value === null || value === undefined) {\n return OMIT;\n }\n if (typeof value !== 'string') {\n return value;\n }\n const text = value.trim();\n if (text === '') {\n return OMIT;\n }\n if (NUMERIC_STRING.test(text)) {\n return Number(text.replace(',', '.'));\n }\n return value;\n}\n\n/** Picks the oneOf/anyOf variant that declares the most of the object's keys. */\nfunction pickVariant(variants: JsonSchema[], value: Record<string, unknown>): JsonSchema | undefined {\n let best: JsonSchema | undefined;\n let bestScore = 0;\n for (const variant of variants) {\n const declared = Object.keys(variant.properties ?? {});\n const score = declared.filter((key) => key in value).length;\n if (score > bestScore) {\n best = variant;\n bestScore = score;\n }\n }\n return best;\n}\n\nfunction normalizeObject(schema: JsonSchema, value: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = { ...value };\n const patterns = Object.entries(schema.patternProperties ?? {}).map(\n ([pattern, sub]) => [new RegExp(pattern), sub] as const\n );\n\n for (const key of Object.keys(result)) {\n let sub: SchemaLike = schema.properties?.[key];\n if (sub === undefined) {\n sub = patterns.find(([regex]) => regex.test(key))?.[1];\n }\n if (sub === undefined && isSchema(schema.additionalProperties as SchemaLike)) {\n sub = schema.additionalProperties as JsonSchema;\n }\n if (sub === undefined) {\n continue;\n }\n const next = normalizeNode(sub, result[key]);\n if (next === OMIT) {\n delete result[key];\n } else {\n result[key] = next;\n }\n }\n return result;\n}\n\nfunction normalizeArray(schema: JsonSchema, value: Array<unknown>): Array<unknown> {\n const prefixItems = schema.prefixItems ?? [];\n return value.map((item, index) => {\n const sub = (prefixItems[index] ?? schema.items) as SchemaLike;\n const next = normalizeNode(sub, item);\n // Array positions cannot be dropped without shifting the others.\n return next === OMIT ? null : next;\n });\n}\n\nfunction normalizeNode(schema: SchemaLike, value: unknown): unknown {\n if (!isSchema(schema)) {\n return value;\n }\n\n const type = primaryType(schema);\n if (isNumericType(type)) {\n return normalizeNumber(value);\n }\n\n let result: unknown = value;\n\n for (const sub of schema.allOf ?? []) {\n if (result === OMIT) {\n return OMIT;\n }\n result = normalizeNode(sub, result);\n }\n if (result === OMIT) {\n return OMIT;\n }\n\n const variants = [...(schema.oneOf ?? []), ...(schema.anyOf ?? [])];\n if (variants.length > 0 && type === undefined) {\n if (isRecord(result)) {\n const variant = pickVariant(variants, result);\n if (variant) {\n result = normalizeNode(variant, result);\n }\n } else if (!Array.isArray(result)) {\n // Primitive: convert only when the variants are numeric and none accepts a string.\n const types = variants.map((variant) => primaryType(variant));\n if (types.some(isNumericType) && !types.includes('string')) {\n result = normalizeNumber(result);\n }\n }\n }\n\n if (isRecord(result)) {\n return normalizeObject(schema, result);\n }\n if (Array.isArray(result)) {\n return normalizeArray(schema, result);\n }\n return result;\n}\n\n/**\n * Coerces values to the types declared by the schema so that the emitted value respects it:\n * - `number`/`integer` numeric strings become JSON numbers (comma or dot as separator);\n * - empty numeric values (`\"\"`, whitespace, `null`) leave the key absent, never `\"\"` or `0`;\n * - integers with decimals are converted to their number but never truncated (validation reports them);\n * - non-numeric strings are left unchanged (validation reports them).\n * Descends into properties, patternProperties, additionalProperties, items, prefixItems and combinators.\n * The same function feeds both the Ajv validation and the emitted value.\n */\nexport function normalizeValue(schema: JsonSchema, value: unknown): unknown {\n const normalized = normalizeNode(schema, value);\n return normalized === OMIT ? null : normalized;\n}\n","// AUTO-GENERATED — do not edit manually. Run: node scripts/generate-lib-styles.mjs\nexport const JSM_CSS: string = \"/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\\n@layer properties;\\n@layer theme, base, components, utilities;\\n@layer theme {\\n :root, :host {\\n --font-sans: ui-sans-serif, system-ui, sans-serif, \\\"Apple Color Emoji\\\",\\n \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Noto Color Emoji\\\";\\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\",\\n \\\"Courier New\\\", monospace;\\n --color-red-50: oklch(97.1% 0.013 17.38);\\n --color-red-300: oklch(80.8% 0.114 19.571);\\n --color-red-700: oklch(50.5% 0.213 27.518);\\n --color-red-900: oklch(39.6% 0.141 25.723);\\n --color-amber-50: oklch(98.7% 0.022 95.277);\\n --color-amber-200: oklch(92.4% 0.12 95.746);\\n --color-amber-300: oklch(87.9% 0.169 91.605);\\n --color-amber-400: oklch(82.8% 0.189 84.429);\\n --color-amber-600: oklch(66.6% 0.179 58.318);\\n --color-amber-700: oklch(55.5% 0.163 48.998);\\n --color-amber-800: oklch(47.3% 0.137 46.201);\\n --color-amber-900: oklch(41.4% 0.112 45.904);\\n --color-emerald-50: oklch(97.9% 0.021 166.113);\\n --color-emerald-400: oklch(76.5% 0.177 163.223);\\n --color-emerald-700: oklch(50.8% 0.118 165.612);\\n --color-emerald-900: oklch(37.8% 0.077 168.94);\\n --color-indigo-100: oklch(93% 0.034 272.788);\\n --color-indigo-300: oklch(78.5% 0.115 274.713);\\n --color-indigo-400: oklch(67.3% 0.182 276.935);\\n --color-indigo-500: oklch(58.5% 0.233 277.117);\\n --color-indigo-600: oklch(51.1% 0.262 276.966);\\n --color-indigo-700: oklch(45.7% 0.24 277.023);\\n --color-indigo-900: oklch(35.9% 0.144 278.697);\\n --color-rose-50: oklch(96.9% 0.015 12.422);\\n --color-rose-400: oklch(71.2% 0.194 13.428);\\n --color-rose-500: oklch(64.5% 0.246 16.439);\\n --color-rose-600: oklch(58.6% 0.253 17.585);\\n --color-rose-700: oklch(51.4% 0.222 16.935);\\n --color-rose-900: oklch(41% 0.159 10.272);\\n --color-slate-50: oklch(98.4% 0.003 247.858);\\n --color-slate-100: oklch(96.8% 0.007 247.896);\\n --color-slate-200: oklch(92.9% 0.013 255.508);\\n --color-slate-300: oklch(86.9% 0.022 252.894);\\n --color-slate-400: oklch(70.4% 0.04 256.788);\\n --color-slate-500: oklch(55.4% 0.046 257.417);\\n --color-slate-600: oklch(44.6% 0.043 257.281);\\n --color-slate-700: oklch(37.2% 0.044 257.287);\\n --color-slate-800: oklch(27.9% 0.041 260.031);\\n --color-slate-900: oklch(20.8% 0.042 265.755);\\n --color-slate-950: oklch(12.9% 0.042 264.695);\\n --color-white: #fff;\\n --spacing: 0.25rem;\\n --container-2xl: 42rem;\\n --container-3xl: 48rem;\\n --container-6xl: 72rem;\\n --text-xs: 0.75rem;\\n --text-xs--line-height: calc(1 / 0.75);\\n --text-sm: 0.875rem;\\n --text-sm--line-height: calc(1.25 / 0.875);\\n --text-lg: 1.125rem;\\n --text-lg--line-height: calc(1.75 / 1.125);\\n --text-xl: 1.25rem;\\n --text-xl--line-height: calc(1.75 / 1.25);\\n --text-3xl: 1.875rem;\\n --text-3xl--line-height: calc(2.25 / 1.875);\\n --text-4xl: 2.25rem;\\n --text-4xl--line-height: calc(2.5 / 2.25);\\n --font-weight-medium: 500;\\n --font-weight-semibold: 600;\\n --font-weight-bold: 700;\\n --tracking-tight: -0.025em;\\n --tracking-wide: 0.025em;\\n --radius-lg: 0.5rem;\\n --radius-xl: 0.75rem;\\n --radius-2xl: 1rem;\\n --animate-spin: spin 1s linear infinite;\\n --default-transition-duration: 150ms;\\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\\n --default-font-family: var(--font-sans);\\n --default-mono-font-family: var(--font-mono);\\n }\\n}\\n@layer base {\\n *, ::after, ::before, ::backdrop, ::file-selector-button {\\n box-sizing: border-box;\\n margin: 0;\\n padding: 0;\\n border: 0 solid;\\n }\\n html, :host {\\n line-height: 1.5;\\n -webkit-text-size-adjust: 100%;\\n tab-size: 4;\\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Noto Color Emoji\\\");\\n font-feature-settings: var(--default-font-feature-settings, normal);\\n font-variation-settings: var(--default-font-variation-settings, normal);\\n -webkit-tap-highlight-color: transparent;\\n }\\n hr {\\n height: 0;\\n color: inherit;\\n border-top-width: 1px;\\n }\\n abbr:where([title]) {\\n -webkit-text-decoration: underline dotted;\\n text-decoration: underline dotted;\\n }\\n h1, h2, h3, h4, h5, h6 {\\n font-size: inherit;\\n font-weight: inherit;\\n }\\n a {\\n color: inherit;\\n -webkit-text-decoration: inherit;\\n text-decoration: inherit;\\n }\\n b, strong {\\n font-weight: bolder;\\n }\\n code, kbd, samp, pre {\\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace);\\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\\n font-size: 1em;\\n }\\n small {\\n font-size: 80%;\\n }\\n sub, sup {\\n font-size: 75%;\\n line-height: 0;\\n position: relative;\\n vertical-align: baseline;\\n }\\n sub {\\n bottom: -0.25em;\\n }\\n sup {\\n top: -0.5em;\\n }\\n table {\\n text-indent: 0;\\n border-color: inherit;\\n border-collapse: collapse;\\n }\\n :-moz-focusring {\\n outline: auto;\\n }\\n progress {\\n vertical-align: baseline;\\n }\\n summary {\\n display: list-item;\\n }\\n ol, ul, menu {\\n list-style: none;\\n }\\n img, svg, video, canvas, audio, iframe, embed, object {\\n display: block;\\n vertical-align: middle;\\n }\\n img, video {\\n max-width: 100%;\\n height: auto;\\n }\\n button, input, select, optgroup, textarea, ::file-selector-button {\\n font: inherit;\\n font-feature-settings: inherit;\\n font-variation-settings: inherit;\\n letter-spacing: inherit;\\n color: inherit;\\n border-radius: 0;\\n background-color: transparent;\\n opacity: 1;\\n }\\n :where(select:is([multiple], [size])) optgroup {\\n font-weight: bolder;\\n }\\n :where(select:is([multiple], [size])) optgroup option {\\n padding-inline-start: 20px;\\n }\\n ::file-selector-button {\\n margin-inline-end: 4px;\\n }\\n ::placeholder {\\n opacity: 1;\\n }\\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\\n ::placeholder {\\n color: currentcolor;\\n @supports (color: color-mix(in lab, red, red)) {\\n color: color-mix(in oklab, currentcolor 50%, transparent);\\n }\\n }\\n }\\n textarea {\\n resize: vertical;\\n }\\n ::-webkit-search-decoration {\\n -webkit-appearance: none;\\n }\\n ::-webkit-date-and-time-value {\\n min-height: 1lh;\\n text-align: inherit;\\n }\\n ::-webkit-datetime-edit {\\n display: inline-flex;\\n }\\n ::-webkit-datetime-edit-fields-wrapper {\\n padding: 0;\\n }\\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\\n padding-block: 0;\\n }\\n ::-webkit-calendar-picker-indicator {\\n line-height: 1;\\n }\\n :-moz-ui-invalid {\\n box-shadow: none;\\n }\\n button, input:where([type=\\\"button\\\"], [type=\\\"reset\\\"], [type=\\\"submit\\\"]), ::file-selector-button {\\n appearance: button;\\n }\\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\\n height: auto;\\n }\\n [hidden]:where(:not([hidden=\\\"until-found\\\"])) {\\n display: none !important;\\n }\\n}\\n@layer utilities {\\n .sr-only {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n margin: -1px;\\n overflow: hidden;\\n clip-path: inset(50%);\\n white-space: nowrap;\\n border-width: 0;\\n }\\n .relative {\\n position: relative;\\n }\\n .col-span-2 {\\n grid-column: span 2 / span 2;\\n }\\n .mx-auto {\\n margin-inline: auto;\\n }\\n .mb-2 {\\n margin-bottom: calc(var(--spacing) * 2);\\n }\\n .mb-4 {\\n margin-bottom: calc(var(--spacing) * 4);\\n }\\n .contents {\\n display: contents;\\n }\\n .flex {\\n display: flex;\\n }\\n .grid {\\n display: grid;\\n }\\n .inline {\\n display: inline;\\n }\\n .inline-block {\\n display: inline-block;\\n }\\n .inline-flex {\\n display: inline-flex;\\n }\\n .table {\\n display: table;\\n }\\n .h-3 {\\n height: calc(var(--spacing) * 3);\\n }\\n .h-3\\\\.5 {\\n height: calc(var(--spacing) * 3.5);\\n }\\n .h-4 {\\n height: calc(var(--spacing) * 4);\\n }\\n .h-5 {\\n height: calc(var(--spacing) * 5);\\n }\\n .h-40 {\\n height: calc(var(--spacing) * 40);\\n }\\n .h-56 {\\n height: calc(var(--spacing) * 56);\\n }\\n .min-h-screen {\\n min-height: 100vh;\\n }\\n .w-3 {\\n width: calc(var(--spacing) * 3);\\n }\\n .w-3\\\\.5 {\\n width: calc(var(--spacing) * 3.5);\\n }\\n .w-4 {\\n width: calc(var(--spacing) * 4);\\n }\\n .w-9 {\\n width: calc(var(--spacing) * 9);\\n }\\n .w-full {\\n width: 100%;\\n }\\n .max-w-2xl {\\n max-width: var(--container-2xl);\\n }\\n .max-w-3xl {\\n max-width: var(--container-3xl);\\n }\\n .max-w-6xl {\\n max-width: var(--container-6xl);\\n }\\n .flex-shrink {\\n flex-shrink: 1;\\n }\\n .shrink-0 {\\n flex-shrink: 0;\\n }\\n .border-collapse {\\n border-collapse: collapse;\\n }\\n .translate-x-0 {\\n --tw-translate-x: calc(var(--spacing) * 0);\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n .translate-x-0\\\\.5 {\\n --tw-translate-x: calc(var(--spacing) * 0.5);\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n .translate-x-4 {\\n --tw-translate-x: calc(var(--spacing) * 4);\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n .transform {\\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\\n }\\n .animate-spin {\\n animation: var(--animate-spin);\\n }\\n .cursor-pointer {\\n cursor: pointer;\\n }\\n .resize {\\n resize: both;\\n }\\n .grid-cols-1 {\\n grid-template-columns: repeat(1, minmax(0, 1fr));\\n }\\n .flex-col {\\n flex-direction: column;\\n }\\n .items-center {\\n align-items: center;\\n }\\n .justify-between {\\n justify-content: space-between;\\n }\\n .justify-center {\\n justify-content: center;\\n }\\n .gap-2 {\\n gap: calc(var(--spacing) * 2);\\n }\\n .gap-3 {\\n gap: calc(var(--spacing) * 3);\\n }\\n .gap-4 {\\n gap: calc(var(--spacing) * 4);\\n }\\n .gap-6 {\\n gap: calc(var(--spacing) * 6);\\n }\\n .space-y-0 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-0\\\\.5 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 0.5) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 0.5) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-1 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-2 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-3 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-4 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-5 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-6 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .space-y-10 {\\n :where(& > :not(:last-child)) {\\n --tw-space-y-reverse: 0;\\n margin-block-start: calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));\\n margin-block-end: calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)));\\n }\\n }\\n .rounded {\\n border-radius: 0.25rem;\\n }\\n .rounded-2xl {\\n border-radius: var(--radius-2xl);\\n }\\n .rounded-full {\\n border-radius: calc(infinity * 1px);\\n }\\n .rounded-lg {\\n border-radius: var(--radius-lg);\\n }\\n .rounded-xl {\\n border-radius: var(--radius-xl);\\n }\\n .border {\\n border-style: var(--tw-border-style);\\n border-width: 1px;\\n }\\n .border-2 {\\n border-style: var(--tw-border-style);\\n border-width: 2px;\\n }\\n .border-amber-200 {\\n border-color: var(--color-amber-200);\\n }\\n .border-amber-300 {\\n border-color: var(--color-amber-300);\\n }\\n .border-red-300 {\\n border-color: var(--color-red-300);\\n }\\n .border-red-700 {\\n border-color: var(--color-red-700);\\n }\\n .border-slate-100 {\\n border-color: var(--color-slate-100);\\n }\\n .border-slate-200 {\\n border-color: var(--color-slate-200);\\n }\\n .border-slate-300 {\\n border-color: var(--color-slate-300);\\n }\\n .border-t-slate-900 {\\n border-top-color: var(--color-slate-900);\\n }\\n .bg-amber-50 {\\n background-color: var(--color-amber-50);\\n }\\n .bg-emerald-50 {\\n background-color: var(--color-emerald-50);\\n }\\n .bg-indigo-600 {\\n background-color: var(--color-indigo-600);\\n }\\n .bg-red-50 {\\n background-color: var(--color-red-50);\\n }\\n .bg-red-900 {\\n background-color: var(--color-red-900);\\n }\\n .bg-red-900\\\\/20 {\\n background-color: color-mix(in srgb, oklch(39.6% 0.141 25.723) 20%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-red-900) 20%, transparent);\\n }\\n }\\n .bg-rose-50 {\\n background-color: var(--color-rose-50);\\n }\\n .bg-slate-50 {\\n background-color: var(--color-slate-50);\\n }\\n .bg-slate-300 {\\n background-color: var(--color-slate-300);\\n }\\n .bg-slate-900 {\\n background-color: var(--color-slate-900);\\n }\\n .bg-white {\\n background-color: var(--color-white);\\n }\\n .bg-white\\\\/70 {\\n background-color: color-mix(in srgb, #fff 70%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-white) 70%, transparent);\\n }\\n }\\n .bg-white\\\\/90 {\\n background-color: color-mix(in srgb, #fff 90%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-white) 90%, transparent);\\n }\\n }\\n .p-3 {\\n padding: calc(var(--spacing) * 3);\\n }\\n .p-4 {\\n padding: calc(var(--spacing) * 4);\\n }\\n .p-5 {\\n padding: calc(var(--spacing) * 5);\\n }\\n .p-6 {\\n padding: calc(var(--spacing) * 6);\\n }\\n .px-2 {\\n padding-inline: calc(var(--spacing) * 2);\\n }\\n .px-3 {\\n padding-inline: calc(var(--spacing) * 3);\\n }\\n .px-6 {\\n padding-inline: calc(var(--spacing) * 6);\\n }\\n .py-1 {\\n padding-block: calc(var(--spacing) * 1);\\n }\\n .py-1\\\\.5 {\\n padding-block: calc(var(--spacing) * 1.5);\\n }\\n .py-2 {\\n padding-block: calc(var(--spacing) * 2);\\n }\\n .py-2\\\\.5 {\\n padding-block: calc(var(--spacing) * 2.5);\\n }\\n .py-6 {\\n padding-block: calc(var(--spacing) * 6);\\n }\\n .py-8 {\\n padding-block: calc(var(--spacing) * 8);\\n }\\n .py-10 {\\n padding-block: calc(var(--spacing) * 10);\\n }\\n .font-mono {\\n font-family: var(--font-mono);\\n }\\n .text-3xl {\\n font-size: var(--text-3xl);\\n line-height: var(--tw-leading, var(--text-3xl--line-height));\\n }\\n .text-lg {\\n font-size: var(--text-lg);\\n line-height: var(--tw-leading, var(--text-lg--line-height));\\n }\\n .text-sm {\\n font-size: var(--text-sm);\\n line-height: var(--tw-leading, var(--text-sm--line-height));\\n }\\n .text-xl {\\n font-size: var(--text-xl);\\n line-height: var(--tw-leading, var(--text-xl--line-height));\\n }\\n .text-xs {\\n font-size: var(--text-xs);\\n line-height: var(--tw-leading, var(--text-xs--line-height));\\n }\\n .text-\\\\[10px\\\\] {\\n font-size: 10px;\\n }\\n .text-\\\\[11px\\\\] {\\n font-size: 11px;\\n }\\n .font-bold {\\n --tw-font-weight: var(--font-weight-bold);\\n font-weight: var(--font-weight-bold);\\n }\\n .font-medium {\\n --tw-font-weight: var(--font-weight-medium);\\n font-weight: var(--font-weight-medium);\\n }\\n .font-semibold {\\n --tw-font-weight: var(--font-weight-semibold);\\n font-weight: var(--font-weight-semibold);\\n }\\n .tracking-\\\\[0\\\\.2em\\\\] {\\n --tw-tracking: 0.2em;\\n letter-spacing: 0.2em;\\n }\\n .tracking-tight {\\n --tw-tracking: var(--tracking-tight);\\n letter-spacing: var(--tracking-tight);\\n }\\n .tracking-wide {\\n --tw-tracking: var(--tracking-wide);\\n letter-spacing: var(--tracking-wide);\\n }\\n .whitespace-pre-wrap {\\n white-space: pre-wrap;\\n }\\n .text-amber-600 {\\n color: var(--color-amber-600);\\n }\\n .text-amber-700 {\\n color: var(--color-amber-700);\\n }\\n .text-amber-800 {\\n color: var(--color-amber-800);\\n }\\n .text-emerald-700 {\\n color: var(--color-emerald-700);\\n }\\n .text-indigo-500 {\\n color: var(--color-indigo-500);\\n }\\n .text-rose-500 {\\n color: var(--color-rose-500);\\n }\\n .text-rose-600 {\\n color: var(--color-rose-600);\\n }\\n .text-rose-700 {\\n color: var(--color-rose-700);\\n }\\n .text-slate-400 {\\n color: var(--color-slate-400);\\n }\\n .text-slate-500 {\\n color: var(--color-slate-500);\\n }\\n .text-slate-600 {\\n color: var(--color-slate-600);\\n }\\n .text-slate-700 {\\n color: var(--color-slate-700);\\n }\\n .text-slate-800 {\\n color: var(--color-slate-800);\\n }\\n .text-slate-900 {\\n color: var(--color-slate-900);\\n }\\n .text-white {\\n color: var(--color-white);\\n }\\n .uppercase {\\n text-transform: uppercase;\\n }\\n .italic {\\n font-style: italic;\\n }\\n .underline {\\n text-decoration-line: underline;\\n }\\n .opacity-25 {\\n opacity: 25%;\\n }\\n .opacity-75 {\\n opacity: 75%;\\n }\\n .shadow {\\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n .shadow-sm {\\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n .outline {\\n outline-style: var(--tw-outline-style);\\n outline-width: 1px;\\n }\\n .backdrop-blur {\\n --tw-backdrop-blur: blur(8px);\\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\\n }\\n .backdrop-filter {\\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\\n }\\n .transition {\\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\\n transition-duration: var(--tw-duration, var(--default-transition-duration));\\n }\\n .transition-all {\\n transition-property: all;\\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\\n transition-duration: var(--tw-duration, var(--default-transition-duration));\\n }\\n .transition-colors {\\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\\n transition-duration: var(--tw-duration, var(--default-transition-duration));\\n }\\n .transition-transform {\\n transition-property: transform, translate, scale, rotate;\\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\\n transition-duration: var(--tw-duration, var(--default-transition-duration));\\n }\\n .duration-200 {\\n --tw-duration: 200ms;\\n transition-duration: 200ms;\\n }\\n .focus-within\\\\:border-indigo-300 {\\n &:focus-within {\\n border-color: var(--color-indigo-300);\\n }\\n }\\n .focus-within\\\\:ring-2 {\\n &:focus-within {\\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n }\\n .hover\\\\:-translate-y-0\\\\.5 {\\n &:hover {\\n @media (hover: hover) {\\n --tw-translate-y: calc(var(--spacing) * -0.5);\\n translate: var(--tw-translate-x) var(--tw-translate-y);\\n }\\n }\\n }\\n .hover\\\\:border-slate-300 {\\n &:hover {\\n @media (hover: hover) {\\n border-color: var(--color-slate-300);\\n }\\n }\\n }\\n .hover\\\\:border-slate-400 {\\n &:hover {\\n @media (hover: hover) {\\n border-color: var(--color-slate-400);\\n }\\n }\\n }\\n .hover\\\\:bg-slate-50 {\\n &:hover {\\n @media (hover: hover) {\\n background-color: var(--color-slate-50);\\n }\\n }\\n }\\n .hover\\\\:bg-slate-800 {\\n &:hover {\\n @media (hover: hover) {\\n background-color: var(--color-slate-800);\\n }\\n }\\n }\\n .hover\\\\:text-rose-700 {\\n &:hover {\\n @media (hover: hover) {\\n color: var(--color-rose-700);\\n }\\n }\\n }\\n .hover\\\\:shadow {\\n &:hover {\\n @media (hover: hover) {\\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n }\\n }\\n .hover\\\\:shadow-lg {\\n &:hover {\\n @media (hover: hover) {\\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n }\\n }\\n .hover\\\\:shadow-md {\\n &:hover {\\n @media (hover: hover) {\\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n }\\n }\\n .focus\\\\:border-indigo-400 {\\n &:focus {\\n border-color: var(--color-indigo-400);\\n }\\n }\\n .focus\\\\:ring-2 {\\n &:focus {\\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\\n }\\n }\\n .focus\\\\:ring-indigo-100 {\\n &:focus {\\n --tw-ring-color: var(--color-indigo-100);\\n }\\n }\\n .focus\\\\:ring-indigo-500 {\\n &:focus {\\n --tw-ring-color: var(--color-indigo-500);\\n }\\n }\\n .focus\\\\:ring-slate-900 {\\n &:focus {\\n --tw-ring-color: var(--color-slate-900);\\n }\\n }\\n .focus\\\\:outline-none {\\n &:focus {\\n --tw-outline-style: none;\\n outline-style: none;\\n }\\n }\\n .sm\\\\:grid-cols-2 {\\n @media (width >= 40rem) {\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n }\\n }\\n .md\\\\:grid-cols-2 {\\n @media (width >= 48rem) {\\n grid-template-columns: repeat(2, minmax(0, 1fr));\\n }\\n }\\n .md\\\\:flex-row {\\n @media (width >= 48rem) {\\n flex-direction: row;\\n }\\n }\\n .md\\\\:items-center {\\n @media (width >= 48rem) {\\n align-items: center;\\n }\\n }\\n .md\\\\:justify-between {\\n @media (width >= 48rem) {\\n justify-content: space-between;\\n }\\n }\\n .md\\\\:p-6 {\\n @media (width >= 48rem) {\\n padding: calc(var(--spacing) * 6);\\n }\\n }\\n .md\\\\:text-4xl {\\n @media (width >= 48rem) {\\n font-size: var(--text-4xl);\\n line-height: var(--tw-leading, var(--text-4xl--line-height));\\n }\\n }\\n .lg\\\\:grid-cols-\\\\[360px\\\\,1fr\\\\] {\\n @media (width >= 64rem) {\\n grid-template-columns: 360px,1fr;\\n }\\n }\\n .dark\\\\:border-amber-700 {\\n &:where(.dark, .dark *) {\\n border-color: var(--color-amber-700);\\n }\\n }\\n .dark\\\\:border-amber-800 {\\n &:where(.dark, .dark *) {\\n border-color: var(--color-amber-800);\\n }\\n }\\n .dark\\\\:border-slate-600 {\\n &:where(.dark, .dark *) {\\n border-color: var(--color-slate-600);\\n }\\n }\\n .dark\\\\:border-slate-700 {\\n &:where(.dark, .dark *) {\\n border-color: var(--color-slate-700);\\n }\\n }\\n .dark\\\\:border-t-indigo-400 {\\n &:where(.dark, .dark *) {\\n border-top-color: var(--color-indigo-400);\\n }\\n }\\n .dark\\\\:bg-amber-900\\\\/20 {\\n &:where(.dark, .dark *) {\\n background-color: color-mix(in srgb, oklch(41.4% 0.112 45.904) 20%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-amber-900) 20%, transparent);\\n }\\n }\\n }\\n .dark\\\\:bg-emerald-900\\\\/30 {\\n &:where(.dark, .dark *) {\\n background-color: color-mix(in srgb, oklch(37.8% 0.077 168.94) 30%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-emerald-900) 30%, transparent);\\n }\\n }\\n }\\n .dark\\\\:bg-indigo-600 {\\n &:where(.dark, .dark *) {\\n background-color: var(--color-indigo-600);\\n }\\n }\\n .dark\\\\:bg-rose-900\\\\/30 {\\n &:where(.dark, .dark *) {\\n background-color: color-mix(in srgb, oklch(41% 0.159 10.272) 30%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-rose-900) 30%, transparent);\\n }\\n }\\n }\\n .dark\\\\:bg-slate-600 {\\n &:where(.dark, .dark *) {\\n background-color: var(--color-slate-600);\\n }\\n }\\n .dark\\\\:bg-slate-700 {\\n &:where(.dark, .dark *) {\\n background-color: var(--color-slate-700);\\n }\\n }\\n .dark\\\\:bg-slate-800 {\\n &:where(.dark, .dark *) {\\n background-color: var(--color-slate-800);\\n }\\n }\\n .dark\\\\:bg-slate-800\\\\/50 {\\n &:where(.dark, .dark *) {\\n background-color: color-mix(in srgb, oklch(27.9% 0.041 260.031) 50%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-slate-800) 50%, transparent);\\n }\\n }\\n }\\n .dark\\\\:bg-slate-800\\\\/60 {\\n &:where(.dark, .dark *) {\\n background-color: color-mix(in srgb, oklch(27.9% 0.041 260.031) 60%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-slate-800) 60%, transparent);\\n }\\n }\\n }\\n .dark\\\\:bg-slate-900 {\\n &:where(.dark, .dark *) {\\n background-color: var(--color-slate-900);\\n }\\n }\\n .dark\\\\:bg-slate-900\\\\/90 {\\n &:where(.dark, .dark *) {\\n background-color: color-mix(in srgb, oklch(20.8% 0.042 265.755) 90%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n background-color: color-mix(in oklab, var(--color-slate-900) 90%, transparent);\\n }\\n }\\n }\\n .dark\\\\:bg-slate-950 {\\n &:where(.dark, .dark *) {\\n background-color: var(--color-slate-950);\\n }\\n }\\n .dark\\\\:text-amber-300 {\\n &:where(.dark, .dark *) {\\n color: var(--color-amber-300);\\n }\\n }\\n .dark\\\\:text-amber-400 {\\n &:where(.dark, .dark *) {\\n color: var(--color-amber-400);\\n }\\n }\\n .dark\\\\:text-emerald-400 {\\n &:where(.dark, .dark *) {\\n color: var(--color-emerald-400);\\n }\\n }\\n .dark\\\\:text-indigo-400 {\\n &:where(.dark, .dark *) {\\n color: var(--color-indigo-400);\\n }\\n }\\n .dark\\\\:text-rose-400 {\\n &:where(.dark, .dark *) {\\n color: var(--color-rose-400);\\n }\\n }\\n .dark\\\\:text-slate-100 {\\n &:where(.dark, .dark *) {\\n color: var(--color-slate-100);\\n }\\n }\\n .dark\\\\:text-slate-200 {\\n &:where(.dark, .dark *) {\\n color: var(--color-slate-200);\\n }\\n }\\n .dark\\\\:text-slate-300 {\\n &:where(.dark, .dark *) {\\n color: var(--color-slate-300);\\n }\\n }\\n .dark\\\\:text-slate-400 {\\n &:where(.dark, .dark *) {\\n color: var(--color-slate-400);\\n }\\n }\\n .dark\\\\:text-slate-500 {\\n &:where(.dark, .dark *) {\\n color: var(--color-slate-500);\\n }\\n }\\n .dark\\\\:text-white {\\n &:where(.dark, .dark *) {\\n color: var(--color-white);\\n }\\n }\\n .dark\\\\:hover\\\\:border-slate-500 {\\n &:where(.dark, .dark *) {\\n &:hover {\\n @media (hover: hover) {\\n border-color: var(--color-slate-500);\\n }\\n }\\n }\\n }\\n .dark\\\\:hover\\\\:bg-indigo-700 {\\n &:where(.dark, .dark *) {\\n &:hover {\\n @media (hover: hover) {\\n background-color: var(--color-indigo-700);\\n }\\n }\\n }\\n }\\n .dark\\\\:hover\\\\:bg-slate-700 {\\n &:where(.dark, .dark *) {\\n &:hover {\\n @media (hover: hover) {\\n background-color: var(--color-slate-700);\\n }\\n }\\n }\\n }\\n .dark\\\\:focus\\\\:ring-indigo-900\\\\/40 {\\n &:where(.dark, .dark *) {\\n &:focus {\\n --tw-ring-color: color-mix(in srgb, oklch(35.9% 0.144 278.697) 40%, transparent);\\n @supports (color: color-mix(in lab, red, red)) {\\n --tw-ring-color: color-mix(in oklab, var(--color-indigo-900) 40%, transparent);\\n }\\n }\\n }\\n }\\n}\\n@property --tw-translate-x {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-translate-y {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-translate-z {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-rotate-x {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-rotate-y {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-rotate-z {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-skew-x {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-skew-y {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-space-y-reverse {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0;\\n}\\n@property --tw-border-style {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: solid;\\n}\\n@property --tw-font-weight {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-tracking {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-shadow {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0 0 #0000;\\n}\\n@property --tw-shadow-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-shadow-alpha {\\n syntax: \\\"<percentage>\\\";\\n inherits: false;\\n initial-value: 100%;\\n}\\n@property --tw-inset-shadow {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0 0 #0000;\\n}\\n@property --tw-inset-shadow-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-inset-shadow-alpha {\\n syntax: \\\"<percentage>\\\";\\n inherits: false;\\n initial-value: 100%;\\n}\\n@property --tw-ring-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-ring-shadow {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0 0 #0000;\\n}\\n@property --tw-inset-ring-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-inset-ring-shadow {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0 0 #0000;\\n}\\n@property --tw-ring-inset {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-ring-offset-width {\\n syntax: \\\"<length>\\\";\\n inherits: false;\\n initial-value: 0px;\\n}\\n@property --tw-ring-offset-color {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: #fff;\\n}\\n@property --tw-ring-offset-shadow {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: 0 0 #0000;\\n}\\n@property --tw-outline-style {\\n syntax: \\\"*\\\";\\n inherits: false;\\n initial-value: solid;\\n}\\n@property --tw-backdrop-blur {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-backdrop-brightness {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-backdrop-contrast {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-backdrop-grayscale {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-backdrop-hue-rotate {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-backdrop-invert {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-backdrop-opacity {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-backdrop-saturate {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-backdrop-sepia {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@property --tw-duration {\\n syntax: \\\"*\\\";\\n inherits: false;\\n}\\n@keyframes spin {\\n to {\\n transform: rotate(360deg);\\n }\\n}\\n@layer properties {\\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\\n *, ::before, ::after, ::backdrop {\\n --tw-translate-x: 0;\\n --tw-translate-y: 0;\\n --tw-translate-z: 0;\\n --tw-rotate-x: initial;\\n --tw-rotate-y: initial;\\n --tw-rotate-z: initial;\\n --tw-skew-x: initial;\\n --tw-skew-y: initial;\\n --tw-space-y-reverse: 0;\\n --tw-border-style: solid;\\n --tw-font-weight: initial;\\n --tw-tracking: initial;\\n --tw-shadow: 0 0 #0000;\\n --tw-shadow-color: initial;\\n --tw-shadow-alpha: 100%;\\n --tw-inset-shadow: 0 0 #0000;\\n --tw-inset-shadow-color: initial;\\n --tw-inset-shadow-alpha: 100%;\\n --tw-ring-color: initial;\\n --tw-ring-shadow: 0 0 #0000;\\n --tw-inset-ring-color: initial;\\n --tw-inset-ring-shadow: 0 0 #0000;\\n --tw-ring-inset: initial;\\n --tw-ring-offset-width: 0px;\\n --tw-ring-offset-color: #fff;\\n --tw-ring-offset-shadow: 0 0 #0000;\\n --tw-outline-style: solid;\\n --tw-backdrop-blur: initial;\\n --tw-backdrop-brightness: initial;\\n --tw-backdrop-contrast: initial;\\n --tw-backdrop-grayscale: initial;\\n --tw-backdrop-hue-rotate: initial;\\n --tw-backdrop-invert: initial;\\n --tw-backdrop-opacity: initial;\\n --tw-backdrop-saturate: initial;\\n --tw-backdrop-sepia: initial;\\n --tw-duration: initial;\\n }\\n }\\n}\\n\";\n","import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { JSM_CSS } from './jsm-styles.generated';\n\nconst STYLE_ID = 'jsm-tailwind-styles';\n\n@Injectable({ providedIn: 'root' })\nexport class JsonSchemaStylesService {\n private injected = false;\n\n constructor(@Inject(PLATFORM_ID) private platformId: object) {}\n\n inject(): void {\n if (this.injected || !isPlatformBrowser(this.platformId)) return;\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) { this.injected = true; return; }\n\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = JSM_CSS;\n document.head.appendChild(style);\n this.injected = true;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { JsonSchemaFormService } from './json-schema-form.service';\nimport { JsonSchema, SchemaError } from './types';\nimport { JsonSchemaNodeComponent } from './json-schema-node.component';\nimport { JsonSchemaResolverService } from './json-schema-resolver.service';\nimport { JsonSchemaValidationService } from './json-schema-validation.service';\nimport { JsonSchemaStylesService } from './json-schema-styles.service';\nimport { normalizeValue } from './normalize-value';\nimport { DecimalSeparator, JsonSchemaFormOptions, localizeNumbers } from './numeric-input';\n\n@Component({\n selector: 'jsm-json-schema-form',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, JsonSchemaNodeComponent],\n providers: [JsonSchemaFormOptions],\n encapsulation: ViewEncapsulation.None,\n styles: [`\n .jsm-root *, .jsm-root *::before, .jsm-root *::after { box-sizing: border-box; }\n .jsm-root input, .jsm-root textarea, .jsm-root select, .jsm-root button {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n }\n .jsm-root input[type=\"number\"]::-webkit-inner-spin-button,\n .jsm-root input[type=\"number\"]::-webkit-outer-spin-button { opacity: 1; }\n /* Force border visibility against host resets */\n .jsm-root input:not([type=\"checkbox\"]):not([type=\"radio\"]):not(.sr-only),\n .jsm-root textarea,\n .jsm-root select {\n border-width: 1.5px !important;\n border-style: solid !important;\n }\n `],\n template: `\n <div class=\"jsm-root\">\n <form class=\"w-full space-y-5\">\n <div *ngIf=\"resolvedSchema?.title || resolvedSchema?.description\" class=\"space-y-0.5\">\n <h2 class=\"text-lg font-bold tracking-tight text-slate-900 dark:text-white\">{{ resolvedSchema?.title || 'Form' }}</h2>\n <p *ngIf=\"resolvedSchema?.description\" class=\"text-sm text-slate-500 dark:text-slate-400\">{{ resolvedSchema?.description }}</p>\n </div>\n\n <div *ngIf=\"loading\" class=\"flex items-center gap-2 py-6 text-sm text-slate-500 dark:text-slate-400\" aria-live=\"polite\">\n <svg class=\"h-4 w-4 animate-spin text-indigo-500 dark:text-indigo-400\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"/>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z\"/>\n </svg>\n Resolving schema&hellip;\n </div>\n\n <!-- schema structural errors panel -->\n <div *ngIf=\"schemaErrorList.length > 0 && !loading\"\n class=\"rounded-xl border border-amber-300 dark:border-amber-700 bg-amber-50 dark:bg-amber-900/20 p-4 space-y-3\"\n role=\"alert\">\n <div class=\"flex items-center gap-2\">\n <svg class=\"w-4 h-4 shrink-0 text-amber-600 dark:text-amber-400\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8 2L1.5 13.5h13L8 2z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/>\n <path d=\"M8 6v3.5M8 11.5v.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n <span class=\"text-sm font-semibold text-amber-800 dark:text-amber-300\">\n Schema errors ({{ schemaErrorList.length }})\n </span>\n </div>\n <p class=\"text-xs text-amber-700 dark:text-amber-400\">\n The schema has structural issues. Fix them to get a valid form.\n </p>\n <div class=\"space-y-2\">\n <div *ngFor=\"let err of schemaErrorList\"\n class=\"rounded-lg border border-amber-200 dark:border-amber-800 bg-white dark:bg-slate-900 px-3 py-2 space-y-0.5\">\n <p class=\"font-mono text-[11px] font-semibold text-amber-700 dark:text-amber-400\">{{ err.path }}</p>\n <p class=\"text-xs text-slate-700 dark:text-slate-300\">{{ err.message }}</p>\n <p class=\"text-[10px] uppercase tracking-wide text-slate-400 dark:text-slate-500\">keyword: {{ err.keyword }}</p>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"form && resolvedSchema && !loading\" class=\"space-y-5\" [formGroup]=\"form\">\n <jsm-schema-node\n [schema]=\"resolvedSchema\"\n [control]=\"rootControl\"\n [path]=\"''\"\n [errorsMap]=\"errorsMap\"\n [allowAdditionalProperties]=\"allowAdditionalProperties\"\n [showErrors]=\"showErrors\"\n label=\"Root\"\n (controlReplaced)=\"onRootReplaced($event)\"\n ></jsm-schema-node>\n </div>\n </form>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class JsonSchemaFormComponent implements OnChanges, OnDestroy {\n @Input({ required: true }) schema!: JsonSchema;\n @Input() value?: unknown;\n @Input() data?: unknown;\n @Input() allowAdditionalProperties = false;\n /**\n * Decimal separator of number/integer fields. `,` shows and accepts `0,5` (both `,` and `.` are accepted as input\n * either way); the emitted value is always a JSON number.\n */\n @Input() decimalSeparator: DecimalSeparator = '.';\n\n @Output() formReady = new EventEmitter<FormGroup>();\n @Output() valueChange = new EventEmitter<unknown>();\n @Output() schemaReady = new EventEmitter<JsonSchema>();\n @Output() schemaErrors = new EventEmitter<SchemaError[]>();\n\n form!: FormGroup;\n rootControl!: AbstractControl;\n resolvedSchema?: JsonSchema;\n errorsMap = new Map<string, string[]>();\n schemaErrorList: SchemaError[] = [];\n loading = false;\n /** When true, all field errors are shown regardless of touched/dirty state. */\n showErrors = false;\n\n private valueSub?: Subscription;\n /** Last value emitted through valueChange (same reference the parent gets back through `data`/`value`). */\n private lastEmitted: unknown;\n\n constructor(\n private readonly schemaService: JsonSchemaFormService,\n private readonly resolver: JsonSchemaResolverService,\n private readonly validation: JsonSchemaValidationService,\n private readonly cdr: ChangeDetectorRef,\n private readonly options: JsonSchemaFormOptions,\n stylesService: JsonSchemaStylesService,\n ) {\n stylesService.inject();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['decimalSeparator']) {\n this.options.decimalSeparator = this.decimalSeparator;\n }\n if (changes['schema']) {\n // Schema changed — full rebuild required\n void this.buildForm();\n } else if ((changes['value'] || changes['data']) && this.form) {\n // Only data changed and form already exists — patch values without rebuilding\n const newData = this.value !== undefined ? this.value : this.data;\n // The parent usually feeds back what valueChange just emitted: patching it would overwrite the text being\n // typed (e.g. \"45,\" would become \"45\"), so a round trip of the emitted value is ignored.\n if (newData !== this.lastEmitted) {\n this.form.patchValue(newData as Record<string, unknown>, { emitEvent: false });\n }\n } else if (changes['value'] || changes['data']) {\n // Form not built yet — build it\n void this.buildForm();\n }\n }\n\n ngOnDestroy(): void {\n this.valueSub?.unsubscribe();\n }\n\n /**\n * Marks all fields as touched and forces error display across the entire form.\n * Call this from an external \"Save\" or \"Submit\" button to show all validation errors at once.\n * Returns true if the form is valid, false otherwise.\n */\n validate(): boolean {\n if (!this.form) return false;\n this.form.markAllAsTouched();\n this.showErrors = true;\n this.updateErrors();\n this.cdr.detectChanges();\n return this.form.valid;\n }\n\n private async buildForm(): Promise<void> {\n this.valueSub?.unsubscribe();\n this.loading = true;\n this.resolvedSchema = await this.resolver.resolve(this.schema, this.schema?.$id);\n\n // Validate the schema itself and emit any structural errors\n const schemaErrs = this.validation.validateSchema(this.resolvedSchema);\n this.schemaErrorList = schemaErrs;\n this.schemaErrors.emit(schemaErrs);\n\n this.schemaReady.emit(this.resolvedSchema);\n\n // If the schema has structural errors, stop here — don't try to build the form\n if (schemaErrs.length > 0) {\n this.form = undefined!;\n this.loading = false;\n return;\n }\n const initialData = this.value !== undefined ? this.value : this.data;\n this.rootControl = this.schemaService.buildControl(this.resolvedSchema, initialData);\n this.form = this.rootControl instanceof FormGroup ? this.rootControl : new FormGroup({ value: this.rootControl });\n this.formReady.emit(this.form);\n this.loading = false;\n\n this.attachValueSub();\n }\n\n private updateErrors(): void {\n if (!this.resolvedSchema) {\n this.errorsMap = new Map();\n return;\n }\n\n const normalized = normalizeValue(this.resolvedSchema, this.rootControl.value);\n const errors = this.validation.validate(this.resolvedSchema, normalized);\n const map = new Map<string, string[]>();\n\n for (const error of errors) {\n const path = error.instancePath ?? '';\n const messages = map.get(path) ?? [];\n messages.push(localizeNumbers(error.message ?? error.keyword, this.decimalSeparator));\n map.set(path, messages);\n }\n\n this.errorsMap = map;\n }\n\n onRootReplaced(control: AbstractControl): void {\n this.rootControl = control;\n if (control instanceof FormGroup) {\n this.form = control;\n } else {\n if (!(this.form instanceof FormGroup) || !this.form.contains('value')) {\n this.form = new FormGroup({ value: control });\n } else {\n this.form.setControl('value', control);\n }\n }\n this.attachValueSub();\n }\n\n private attachValueSub(): void {\n this.valueSub?.unsubscribe();\n this.updateErrors();\n this.valueSub = this.form.valueChanges.subscribe(() => {\n this.updateErrors();\n this.lastEmitted = this.resolvedSchema ? normalizeValue(this.resolvedSchema, this.rootControl.value) : this.rootControl.value;\n this.valueChange.emit(this.lastEmitted);\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { JsonSchemaFormComponent } from './json-schema-form.component';\nimport { JsonSchemaNodeComponent } from './json-schema-node.component';\n\n@NgModule({\n imports: [JsonSchemaFormComponent, JsonSchemaNodeComponent],\n exports: [JsonSchemaFormComponent, JsonSchemaNodeComponent],\n})\nexport class JsonSchemaFormModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.JsonSchemaFormService","i2.JsonSchemaValidationService","i3.JsonSchemaFormOptions","i2.JsonSchemaResolverService","i3.JsonSchemaValidationService","i4.JsonSchemaFormOptions","i5.JsonSchemaStylesService","i6","i7"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -206,6 +206,8 @@ declare class JsonSchemaFormComponent implements OnChanges, OnDestroy {
206
206
  /** When true, all field errors are shown regardless of touched/dirty state. */
207
207
  showErrors: boolean;
208
208
  private valueSub?;
209
+ /** Last value emitted through valueChange (same reference the parent gets back through `data`/`value`). */
210
+ private lastEmitted;
209
211
  constructor(schemaService: JsonSchemaFormService, resolver: JsonSchemaResolverService, validation: JsonSchemaValidationService, cdr: ChangeDetectorRef, options: JsonSchemaFormOptions, stylesService: JsonSchemaStylesService);
210
212
  ngOnChanges(changes: SimpleChanges): void;
211
213
  ngOnDestroy(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elle96/ng-json-schema-manager",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Angular JSON Schema form renderer with Tailwind styling, external $ref support, and reactive forms.",
5
5
  "homepage": "https://luigiellebalotta.github.io/json-schema-manager/",
6
6
  "repository": {