@archeion/ngx-schema-builder 1.0.0 → 1.0.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archeion-ngx-schema-builder.mjs","sources":["../../../projects/ngx-schema-builder/src/lib/types/json-schema.ts","../../../projects/ngx-schema-builder/src/lib/internal/schema-inference.ts","../../../projects/ngx-schema-builder/src/lib/internal/schema-editor.ts","../../../projects/ngx-schema-builder/src/lib/internal/json-validator.ts","../../../projects/ngx-schema-builder/src/lib/types/validation.ts","../../../projects/ngx-schema-builder/src/lib/i18n/locales/en.ts","../../../projects/ngx-schema-builder/src/lib/i18n/locales/it.ts","../../../projects/ngx-schema-builder/src/lib/tokens/schema-builder-config.token.ts","../../../projects/ngx-schema-builder/src/lib/tokens/ref-suggestions.token.ts","../../../projects/ngx-schema-builder/src/lib/services/translation.service.ts","../../../projects/ngx-schema-builder/src/lib/services/translation-context.service.ts","../../../projects/ngx-schema-builder/src/provide.ts","../../../projects/ngx-schema-builder/src/lib/internal/cn.ts","../../../projects/ngx-schema-builder/src/lib/services/local-definitions.service.ts","../../../projects/ngx-schema-builder/src/lib/components/ui/badge.directive.ts","../../../projects/ngx-schema-builder/src/lib/components/ui/button.directive.ts","../../../projects/ngx-schema-builder/src/lib/components/ui/input.directive.ts","../../../projects/ngx-schema-builder/src/lib/components/ui/label.directive.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-editor-internal/schema-type-selector.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-editor-internal/add-field-button.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-editor-internal/type-dropdown.component.ts","../../../projects/ngx-schema-builder/src/lib/components/ui/switch.component.ts","../../../projects/ngx-schema-builder/src/lib/components/type-editors/array-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/type-editors/boolean-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/type-editors/combinator-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/type-editors/number-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-editor-internal/schema-property-rows.component.ts","../../../projects/ngx-schema-builder/src/lib/components/type-editors/object-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/type-editors/ref-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/type-editors/string-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-editor-internal/type-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-editor-internal/schema-property-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-editor-internal/definitions-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-editor-internal/schema-field-list.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-fields-editor/schema-fields-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/internal/editor.directive.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-json-editor/schema-json-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-builder/schema-builder.component.ts","../../../projects/ngx-schema-builder/src/lib/components/infer-schema-dialog/infer-schema-dialog.component.ts","../../../projects/ngx-schema-builder/src/lib/components/validate-json-dialog/validate-json-dialog.component.ts","../../../projects/ngx-schema-builder/src/archeion-ngx-schema-builder.ts"],"sourcesContent":["import * as z from 'zod/mini';\n\nconst simpleTypes = [\n 'string',\n 'number',\n 'integer',\n 'boolean',\n 'object',\n 'array',\n 'null',\n] as const;\n\nexport const baseSchema = z.object({\n $id: z.optional(z.string()),\n $schema: z.optional(z.string()),\n $ref: z.optional(z.string()),\n $anchor: z.optional(z.string()),\n $dynamicRef: z.optional(z.string()),\n $dynamicAnchor: z.optional(z.string()),\n $vocabulary: z.optional(z.record(z.string(), z.boolean())),\n $comment: z.optional(z.string()),\n title: z.optional(z.string()),\n description: z.optional(z.string()),\n default: z.optional(z.unknown()),\n deprecated: z.optional(z.boolean()),\n readOnly: z.optional(z.boolean()),\n writeOnly: z.optional(z.boolean()),\n examples: z.optional(z.array(z.unknown())),\n type: z.optional(\n z.union([z.enum(simpleTypes), z.array(z.enum(simpleTypes))]),\n ),\n\n // String validations\n minLength: z.optional(z.number().check(z.int(), z.minimum(0))),\n maxLength: z.optional(z.number().check(z.int(), z.minimum(0))),\n pattern: z.optional(z.string()),\n format: z.optional(z.string()),\n contentMediaType: z.optional(z.string()),\n contentEncoding: z.optional(z.string()),\n\n // Number validations\n multipleOf: z.optional(z.number().check(z.positive())),\n minimum: z.optional(z.number()),\n maximum: z.optional(z.number()),\n exclusiveMinimum: z.optional(z.number()),\n exclusiveMaximum: z.optional(z.number()),\n\n // Array validations\n minItems: z.optional(z.number().check(z.int(), z.minimum(0))),\n maxItems: z.optional(z.number().check(z.int(), z.minimum(0))),\n uniqueItems: z.optional(z.boolean()),\n minContains: z.optional(z.number().check(z.int(), z.minimum(0))),\n maxContains: z.optional(z.number().check(z.int(), z.minimum(0))),\n\n // Object validations\n required: z.optional(z.array(z.string())),\n minProperties: z.optional(z.number().check(z.int(), z.minimum(0))),\n maxProperties: z.optional(z.number().check(z.int(), z.minimum(0))),\n dependentRequired: z.optional(z.record(z.string(), z.array(z.string()))),\n\n // Value validations\n const: z.optional(z.unknown()),\n enum: z.optional(z.array(z.unknown())),\n});\n\n/** @public */\nexport type JsonSchema =\n | boolean\n | (z.infer<typeof baseSchema> & {\n $defs?: Record<string, JsonSchema>;\n definitions?: Record<string, JsonSchema>;\n contentSchema?: JsonSchema;\n items?: JsonSchema;\n prefixItems?: JsonSchema[];\n contains?: JsonSchema;\n unevaluatedItems?: JsonSchema;\n properties?: Record<string, JsonSchema>;\n patternProperties?: Record<string, JsonSchema>;\n additionalProperties?: JsonSchema | boolean;\n propertyNames?: JsonSchema;\n dependentSchemas?: Record<string, JsonSchema>;\n unevaluatedProperties?: JsonSchema;\n allOf?: JsonSchema[];\n anyOf?: JsonSchema[];\n oneOf?: JsonSchema[];\n not?: JsonSchema;\n if?: JsonSchema;\n then?: JsonSchema;\n else?: JsonSchema;\n });\n\nexport const jsonSchemaType: z.ZodMiniType<JsonSchema> = z.lazy(() =>\n z.union([\n z.object({\n ...baseSchema.shape,\n $defs: z.optional(z.record(z.string(), jsonSchemaType)),\n definitions: z.optional(z.record(z.string(), jsonSchemaType)),\n contentSchema: z.optional(jsonSchemaType),\n items: z.optional(jsonSchemaType),\n prefixItems: z.optional(z.array(jsonSchemaType)),\n contains: z.optional(jsonSchemaType),\n unevaluatedItems: z.optional(jsonSchemaType),\n properties: z.optional(z.record(z.string(), jsonSchemaType)),\n patternProperties: z.optional(z.record(z.string(), jsonSchemaType)),\n additionalProperties: z.optional(z.union([jsonSchemaType, z.boolean()])),\n propertyNames: z.optional(jsonSchemaType),\n dependentSchemas: z.optional(z.record(z.string(), jsonSchemaType)),\n unevaluatedProperties: z.optional(jsonSchemaType),\n allOf: z.optional(z.array(jsonSchemaType)),\n anyOf: z.optional(z.array(jsonSchemaType)),\n oneOf: z.optional(z.array(jsonSchemaType)),\n not: z.optional(jsonSchemaType),\n if: z.optional(jsonSchemaType),\n then: z.optional(jsonSchemaType),\n else: z.optional(jsonSchemaType),\n }),\n z.boolean(),\n ]),\n);\n\nexport type SchemaType = (typeof simpleTypes)[number];\n\nexport interface NewField {\n name: string;\n type: SchemaEditorType;\n description: string;\n required: boolean;\n validation?: ObjectJsonSchema;\n additionalProperties?: boolean;\n}\n\nexport type ObjectJsonSchema = Exclude<JsonSchema, boolean>;\n\n/** Virtual type used in the editor UI to represent combinator and reference schemas */\nexport type SchemaEditorType =\n | SchemaType\n | 'anyOf'\n | 'oneOf'\n | 'allOf'\n | '$ref';\n\nexport interface RefJsonSchema {\n $ref: string;\n}\n\nexport function isBooleanSchema(schema: JsonSchema): schema is boolean {\n return typeof schema === 'boolean';\n}\n\nexport function isObjectSchema(schema: JsonSchema): schema is ObjectJsonSchema {\n return !isBooleanSchema(schema);\n}\n\nexport function asObjectSchema(schema: JsonSchema): ObjectJsonSchema {\n return isObjectSchema(schema) ? schema : { type: 'null' };\n}\n\nexport function getSchemaDescription(schema: JsonSchema): string {\n return isObjectSchema(schema) ? schema.description || '' : '';\n}\n\nexport function withObjectSchema<T>(\n schema: JsonSchema,\n fn: (schema: ObjectJsonSchema) => T,\n defaultValue: T,\n): T {\n return isObjectSchema(schema) ? fn(schema) : defaultValue;\n}\n\nexport function isAnyOfSchema(schema: JsonSchema): boolean {\n return isObjectSchema(schema) && Array.isArray(schema.anyOf);\n}\n\nexport function isOneOfSchema(schema: JsonSchema): boolean {\n return isObjectSchema(schema) && Array.isArray(schema.oneOf);\n}\n\nexport function isAllOfSchema(schema: JsonSchema): boolean {\n return isObjectSchema(schema) && Array.isArray(schema.allOf);\n}\n\nexport function isRefSchema(\n schema: JsonSchema,\n): schema is ObjectJsonSchema & RefJsonSchema {\n return isObjectSchema(schema) && typeof schema.$ref === 'string';\n}\n\nexport function asRefSchema(schema: JsonSchema): RefJsonSchema {\n return isRefSchema(schema) ? { $ref: schema.$ref } : { $ref: '' };\n}\n\n/**\n * Collapses a schema into the single editor type that drives which type-editor\n * renders. Precedence is lossy and ordered ($ref → anyOf → oneOf → allOf →\n * type): the first match wins for a mixed schema, but the full schema is kept\n * in the data, so the JSON tab round-trips the hidden keywords.\n */\nexport function getEditorType(schema: JsonSchema): SchemaEditorType {\n if (isRefSchema(schema)) return '$ref';\n if (isAnyOfSchema(schema)) return 'anyOf';\n if (isOneOfSchema(schema)) return 'oneOf';\n if (isAllOfSchema(schema)) return 'allOf';\n return withObjectSchema(\n schema,\n (s) => (s.type || 'object') as SchemaType,\n 'object' as SchemaType,\n );\n}\n","import { type JsonSchema, asObjectSchema } from '../types/json-schema';\n\n/**\n * Merges two JSON schemas.\n * If schemas are compatible (e.g., integer and number), attempts to merge.\n * If schemas are identical, returns the first schema.\n * If schemas are incompatible, returns a schema with oneOf.\n */\nfunction mergeSchemas(schema1: JsonSchema, schema2: JsonSchema): JsonSchema {\n const s1 = asObjectSchema(schema1);\n const s2 = asObjectSchema(schema2);\n\n if (JSON.stringify(s1) === JSON.stringify(s2)) {\n return schema1;\n }\n\n if (s1.type === 'integer' && s2.type === 'number') return { type: 'number' };\n if (s1.type === 'number' && s2.type === 'integer') return { type: 'number' };\n\n const existingOneOf = Array.isArray(s1.oneOf) ? s1.oneOf : [s1];\n const newSchemaToAdd = s2;\n\n if (\n !existingOneOf.some(\n (s) => JSON.stringify(s) === JSON.stringify(newSchemaToAdd),\n )\n ) {\n const mergedOneOf = [...existingOneOf, newSchemaToAdd];\n const uniqueSchemas = [\n ...new Map(mergedOneOf.map((s) => [JSON.stringify(s), s])).values(),\n ];\n if (uniqueSchemas.length === 1) {\n return uniqueSchemas[0];\n }\n return { oneOf: uniqueSchemas };\n }\n\n return s1.oneOf ? s1 : { oneOf: [s1] };\n}\n\nfunction inferObjectSchema(obj: Record<string, unknown>): JsonSchema {\n const properties: Record<string, JsonSchema> = {};\n const required: string[] = [];\n\n for (const [key, value] of Object.entries(obj)) {\n properties[key] = inferSchema(value);\n if (value !== undefined && value !== null) {\n required.push(key);\n }\n }\n\n return {\n type: 'object',\n properties,\n required: required.length > 0 ? required.sort() : undefined,\n };\n}\n\nfunction detectEnumsInArrayItems(\n mergedProperties: Record<string, JsonSchema>,\n originalArray: Record<string, unknown>[],\n totalItems: number,\n): Record<string, JsonSchema> {\n if (totalItems < 10 || Object.keys(mergedProperties).length === 0) {\n return mergedProperties;\n }\n\n const valueMap: Record<string, Set<string | number>> = {};\n\n for (const item of originalArray) {\n for (const key in mergedProperties) {\n if (Object.prototype.hasOwnProperty.call(item, key)) {\n const value = item[key];\n if (typeof value === 'string' || typeof value === 'number') {\n if (!valueMap[key]) valueMap[key] = new Set();\n valueMap[key].add(value);\n }\n }\n }\n }\n\n const updatedProperties = { ...mergedProperties };\n for (const key in valueMap) {\n const distinctValues = Array.from(valueMap[key]);\n if (\n distinctValues.length > 1 &&\n distinctValues.length <= 10 &&\n distinctValues.length < totalItems / 2\n ) {\n const currentSchema = asObjectSchema(updatedProperties[key]);\n if (\n currentSchema.type === 'string' ||\n currentSchema.type === 'number' ||\n currentSchema.type === 'integer'\n ) {\n updatedProperties[key] = {\n type: currentSchema.type,\n enum: distinctValues.sort(),\n };\n }\n }\n }\n return updatedProperties;\n}\n\nfunction detectSemanticFormatsInArrayItems(\n mergedProperties: Record<string, JsonSchema>,\n originalArray: Record<string, unknown>[],\n): Record<string, JsonSchema> {\n const updatedProperties = { ...mergedProperties };\n\n for (const key in updatedProperties) {\n const currentSchema = asObjectSchema(updatedProperties[key]);\n\n if (\n /coordinates?|coords?|latLon|lonLat|point/i.test(key) &&\n currentSchema.type === 'array'\n ) {\n const itemsSchema = currentSchema.items\n ? asObjectSchema(currentSchema.items)\n : undefined;\n if (itemsSchema?.type === 'number' || itemsSchema?.type === 'integer') {\n let isValidCoordArray = true;\n let coordLength: number | null = null;\n for (const item of originalArray) {\n if (\n Object.prototype.hasOwnProperty.call(item, key) &&\n Array.isArray(item[key])\n ) {\n const arr = item[key] as unknown[];\n if (coordLength === null) coordLength = arr.length;\n if (\n arr.length !== coordLength ||\n (arr.length !== 2 && arr.length !== 3) ||\n !arr.every((v) => typeof v === 'number')\n ) {\n isValidCoordArray = false;\n break;\n }\n } else if (Object.prototype.hasOwnProperty.call(item, key)) {\n isValidCoordArray = false;\n break;\n }\n }\n if (isValidCoordArray && coordLength !== null) {\n updatedProperties[key] = {\n type: 'array',\n items: { type: 'number' },\n minItems: coordLength,\n maxItems: coordLength,\n };\n }\n }\n }\n\n if (\n /timestamp|createdAt|updatedAt|occurredAt/i.test(key) &&\n currentSchema.type === 'integer'\n ) {\n let isTimestampLike = true;\n const now = Date.now();\n const fiftyYearsAgo = now - 50 * 365 * 24 * 60 * 60 * 1000;\n for (const item of originalArray) {\n if (Object.prototype.hasOwnProperty.call(item, key)) {\n const val = item[key];\n if (\n typeof val !== 'number' ||\n !Number.isInteger(val) ||\n val < fiftyYearsAgo\n ) {\n isTimestampLike = false;\n break;\n }\n }\n }\n if (isTimestampLike) {\n updatedProperties[key] = {\n type: 'integer',\n format: 'unix-timestamp',\n description: 'Unix timestamp (likely milliseconds)',\n };\n }\n }\n }\n return updatedProperties;\n}\n\nfunction processArrayOfObjects(\n itemSchemas: JsonSchema[],\n originalArray: Record<string, unknown>[],\n): JsonSchema {\n let mergedProperties: Record<string, JsonSchema> = {};\n const propertyCounts: Record<string, number> = {};\n const totalItems = itemSchemas.length;\n\n for (const schema of itemSchemas) {\n const objSchema = asObjectSchema(schema);\n if (!objSchema.properties) continue;\n for (const [key, value] of Object.entries(objSchema.properties)) {\n propertyCounts[key] = (propertyCounts[key] || 0) + 1;\n if (key in mergedProperties) {\n mergedProperties[key] = mergeSchemas(mergedProperties[key], value);\n } else {\n mergedProperties[key] = value;\n }\n }\n }\n\n const requiredProps = Object.entries(propertyCounts)\n .filter(([, count]) => count === totalItems)\n .map(([key]) => key);\n\n mergedProperties = detectEnumsInArrayItems(\n mergedProperties,\n originalArray,\n totalItems,\n );\n\n mergedProperties = detectSemanticFormatsInArrayItems(\n mergedProperties,\n originalArray,\n );\n\n return {\n type: 'object',\n properties: mergedProperties,\n required: requiredProps.length > 0 ? requiredProps.sort() : undefined,\n };\n}\n\nfunction inferArraySchema(obj: unknown[]): JsonSchema {\n if (obj.length === 0) return { type: 'array', items: {} };\n\n const itemSchemas = obj.map((item) => inferSchema(item));\n\n const firstItemSchema = asObjectSchema(itemSchemas[0]);\n const allSameType = itemSchemas.every(\n (schema) => asObjectSchema(schema).type === firstItemSchema.type,\n );\n\n if (allSameType) {\n if (firstItemSchema.type === 'object') {\n const itemsSchema = processArrayOfObjects(\n itemSchemas,\n obj as Record<string, unknown>[],\n );\n return {\n type: 'array',\n items: itemsSchema,\n minItems: 0,\n };\n }\n return {\n type: 'array',\n items: itemSchemas[0],\n minItems: 0,\n };\n }\n\n const uniqueSchemas = [\n ...new Map(itemSchemas.map((s) => [JSON.stringify(s), s])).values(),\n ];\n\n if (\n uniqueSchemas.length === 1 &&\n asObjectSchema(uniqueSchemas[0]).type === 'object'\n ) {\n return {\n type: 'array',\n items: uniqueSchemas[0],\n minItems: 0,\n };\n }\n\n return {\n type: 'array',\n items:\n uniqueSchemas.length === 1 ? uniqueSchemas[0] : { oneOf: uniqueSchemas },\n minItems: 0,\n };\n}\n\nfunction inferStringSchema(str: string): JsonSchema {\n const formats: Record<string, RegExp> = {\n date: /^\\d{4}-\\d{2}-\\d{2}$/,\n 'date-time':\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?$/,\n email: /^[^@]+@[^@]+\\.[^@]+$/,\n uuid: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,\n uri: /^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/i,\n };\n\n for (const [format, regex] of Object.entries(formats)) {\n if (regex.test(str)) {\n return { type: 'string', format };\n }\n }\n\n return { type: 'string' };\n}\n\nfunction inferNumberSchema(num: number): JsonSchema {\n return Number.isInteger(num) ? { type: 'integer' } : { type: 'number' };\n}\n\n/**\n * Infers a JSON Schema from a JSON value.\n */\nexport function inferSchema(obj: unknown): JsonSchema {\n if (obj === null) return { type: 'null' };\n\n const type = Array.isArray(obj) ? 'array' : typeof obj;\n\n switch (type) {\n case 'object':\n return inferObjectSchema(obj as Record<string, unknown>);\n case 'array':\n return inferArraySchema(obj as unknown[]);\n case 'string':\n return inferStringSchema(obj as string);\n case 'number':\n return inferNumberSchema(obj as number);\n case 'boolean':\n return { type: 'boolean' };\n default:\n return {};\n }\n}\n\n/**\n * Creates a full JSON Schema document from a JSON value, with $schema/title/description and a normalized root.\n */\nexport function createSchemaFromJson(jsonObject: unknown): JsonSchema {\n const inferredSchema = inferSchema(jsonObject);\n\n const rootSchema = asObjectSchema(inferredSchema);\n const finalSchema: Record<string, unknown> = {\n $schema: 'https://json-schema.org/draft-07/schema',\n title: 'Generated Schema',\n description: 'Generated from JSON data',\n };\n\n if (rootSchema.type === 'object' || rootSchema.properties) {\n finalSchema['type'] = 'object';\n finalSchema['properties'] = rootSchema.properties;\n if (rootSchema.required) finalSchema['required'] = rootSchema.required;\n } else if (rootSchema.type === 'array' || rootSchema.items) {\n finalSchema['type'] = 'array';\n finalSchema['items'] = rootSchema.items;\n if (rootSchema.minItems !== undefined)\n finalSchema['minItems'] = rootSchema.minItems;\n if (rootSchema.maxItems !== undefined)\n finalSchema['maxItems'] = rootSchema.maxItems;\n } else if (rootSchema.type) {\n finalSchema['type'] = 'object';\n finalSchema['properties'] = { value: rootSchema };\n finalSchema['required'] = ['value'];\n finalSchema['title'] = 'Generated Schema (Primitive Root)';\n finalSchema['description'] =\n 'Input was a primitive value, wrapped in an object.';\n } else {\n finalSchema['type'] = 'object';\n }\n\n return finalSchema as JsonSchema;\n}\n","import type {\n JsonSchema,\n NewField,\n ObjectJsonSchema,\n SchemaEditorType,\n} from '../types/json-schema';\nimport { isBooleanSchema, isObjectSchema } from '../types/json-schema';\n\n/** Starting schema for each editor type, used when creating or switching fields. */\nexport const DEFAULT_SCHEMAS: Record<SchemaEditorType, ObjectJsonSchema> = {\n string: { type: 'string' },\n number: { type: 'number' },\n integer: { type: 'integer' },\n boolean: { type: 'boolean' },\n object: { type: 'object' },\n array: { type: 'array' },\n null: { type: 'null' },\n anyOf: { anyOf: [{ type: 'string' }, { type: 'number' }] },\n oneOf: { oneOf: [{ type: 'string' }, { type: 'number' }] },\n allOf: { allOf: [{ type: 'object' }] },\n $ref: { $ref: '' },\n};\n\nexport interface SchemaProperty {\n name: string;\n schema: JsonSchema;\n required: boolean;\n}\n\n/** A local `$defs`/`definitions` entry, ready to use as a `$ref` target. */\nexport interface LocalDefinition {\n /** Definition name as stored under `$defs`/`definitions`. */\n name: string;\n /** JSON Pointer ref to the definition, e.g. `#/$defs/Address`. */\n ref: string;\n}\n\nexport function listLocalDefinitions(\n schema: JsonSchema,\n): readonly LocalDefinition[] {\n if (isBooleanSchema(schema)) return [];\n const key = schema.definitions && !schema.$defs ? 'definitions' : '$defs';\n const source = schema[key];\n if (!source) return [];\n return Object.keys(source).map((name) => ({\n name,\n ref: `#/${key}/${name}`,\n }));\n}\n\nexport function copySchema<T extends JsonSchema>(schema: T): T {\n if (typeof structuredClone === 'function') return structuredClone(schema);\n return JSON.parse(JSON.stringify(schema)) as T;\n}\n\nexport function updateObjectProperty(\n schema: ObjectJsonSchema,\n propertyName: string,\n propertySchema: JsonSchema,\n): ObjectJsonSchema {\n return updateObjectSchemaEntry(\n schema,\n 'properties',\n propertyName,\n propertySchema,\n );\n}\n\nexport function updateObjectPatternProperty(\n schema: ObjectJsonSchema,\n propertyName: string,\n propertySchema: JsonSchema,\n): ObjectJsonSchema {\n return updateObjectSchemaEntry(\n schema,\n 'patternProperties',\n propertyName,\n propertySchema,\n );\n}\n\nfunction updateObjectSchemaEntry(\n schema: ObjectJsonSchema,\n schemaProperty: 'properties' | 'patternProperties',\n propertyName: string,\n propertySchema: JsonSchema,\n): ObjectJsonSchema {\n if (!isObjectSchema(schema)) return schema;\n\n const newSchema = copySchema(schema);\n const entries = { ...(newSchema[schemaProperty] ?? {}) };\n entries[propertyName] = propertySchema;\n newSchema[schemaProperty] = entries;\n return newSchema;\n}\n\nexport function removeObjectProperty(\n schema: ObjectJsonSchema,\n propertyName: string,\n): ObjectJsonSchema {\n const withoutEntry = removeObjectSchemaEntry(\n schema,\n 'properties',\n propertyName,\n );\n\n if (!withoutEntry.required?.includes(propertyName)) return withoutEntry;\n\n // Clone if the helper returned the original, so pruning `required` stays pure.\n const newSchema = withoutEntry === schema ? copySchema(schema) : withoutEntry;\n newSchema.required = newSchema.required?.filter(\n (name) => name !== propertyName,\n );\n\n return newSchema;\n}\n\nexport function removeObjectPatternProperty(\n schema: ObjectJsonSchema,\n propertyName: string,\n): ObjectJsonSchema {\n return removeObjectSchemaEntry(schema, 'patternProperties', propertyName);\n}\n\nfunction removeObjectSchemaEntry(\n schema: ObjectJsonSchema,\n schemaProperty: 'properties' | 'patternProperties',\n propertyName: string,\n): ObjectJsonSchema {\n if (!isObjectSchema(schema) || !schema[schemaProperty]) return schema;\n\n const newSchema = copySchema(schema);\n const entries = newSchema[schemaProperty] ?? {};\n const { [propertyName]: _removed, ...remaining } = entries;\n\n if (Object.keys(remaining).length === 0) {\n delete newSchema[schemaProperty];\n return newSchema;\n }\n\n newSchema[schemaProperty] = remaining;\n return newSchema;\n}\n\nexport function updatePropertyRequired(\n schema: ObjectJsonSchema,\n propertyName: string,\n required: boolean,\n): ObjectJsonSchema {\n if (!isObjectSchema(schema)) return schema;\n\n const newSchema = copySchema(schema);\n const current = newSchema.required ?? [];\n\n if (required) {\n if (!current.includes(propertyName)) {\n newSchema.required = [...current, propertyName];\n } else {\n newSchema.required = current;\n }\n } else {\n newSchema.required = current.filter((name) => name !== propertyName);\n }\n\n return newSchema;\n}\n\nexport function updateArrayItems(\n schema: JsonSchema,\n itemsSchema: JsonSchema,\n): JsonSchema {\n if (isObjectSchema(schema) && schema.type === 'array') {\n return { ...schema, items: itemsSchema };\n }\n return schema;\n}\n\nexport function createFieldSchema(field: NewField): JsonSchema {\n const { type, description, validation, additionalProperties } = field;\n\n if (type === '$ref') {\n const ref =\n validation &&\n isObjectSchema(validation) &&\n typeof validation.$ref === 'string'\n ? validation.$ref\n : '';\n return { $ref: ref };\n }\n\n if (type === 'anyOf' || type === 'oneOf' || type === 'allOf') {\n const schema: ObjectJsonSchema = validation ?? {\n [type]:\n type === 'allOf'\n ? [{ type: 'object' as const }]\n : [{ type: 'string' as const }, { type: 'number' as const }],\n };\n\n return {\n ...schema,\n description: description || undefined,\n };\n }\n\n if (validation && isObjectSchema(validation)) {\n return {\n type,\n description,\n ...validation,\n ...(additionalProperties === false ? { additionalProperties } : {}),\n };\n }\n\n return { type, description };\n}\n\nexport function validateFieldName(name: string): boolean {\n if (!name || name.trim() === '') return false;\n const validNamePattern = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n return validNamePattern.test(name);\n}\n\nexport function getSchemaProperties(schema: JsonSchema): SchemaProperty[] {\n const required = isObjectSchema(schema) ? (schema.required ?? []) : [];\n return getObjectSchemaEntries(schema, 'properties').map((entry) =>\n propertyFromEntry(entry, required),\n );\n}\n\nexport function getSchemaPatternProperties(\n schema: JsonSchema,\n): SchemaProperty[] {\n return getObjectSchemaEntries(schema, 'patternProperties').map((entry) =>\n propertyFromEntry(entry),\n );\n}\n\nfunction getObjectSchemaEntries(\n schema: JsonSchema,\n schemaProperty: 'properties' | 'patternProperties',\n): Array<[string, JsonSchema]> {\n if (!isObjectSchema(schema) || !schema[schemaProperty]) return [];\n return Object.entries(schema[schemaProperty]);\n}\n\nfunction propertyFromEntry(\n [name, propSchema]: [string, JsonSchema],\n required: string[] = [],\n): SchemaProperty {\n return {\n name,\n schema: propSchema,\n required: required.includes(name),\n };\n}\n\nexport function getArrayItemsSchema(schema: JsonSchema): JsonSchema | null {\n if (isBooleanSchema(schema)) return null;\n if (schema.type !== 'array') return null;\n return schema.items ?? null;\n}\n\nexport function renameObjectProperty(\n schema: ObjectJsonSchema,\n oldName: string,\n newName: string,\n): ObjectJsonSchema {\n const renamed = renameObjectSchemaEntry(\n schema,\n 'properties',\n oldName,\n newName,\n );\n\n if (!renamed.required?.includes(oldName)) return renamed;\n\n // Clone if the helper returned the original, so remapping `required` stays pure.\n const newSchema = renamed === schema ? copySchema(schema) : renamed;\n newSchema.required = newSchema.required?.map((field) =>\n field === oldName ? newName : field,\n );\n\n return newSchema;\n}\n\nexport function renameObjectPatternProperty(\n schema: ObjectJsonSchema,\n oldName: string,\n newName: string,\n): ObjectJsonSchema {\n return renameObjectSchemaEntry(schema, 'patternProperties', oldName, newName);\n}\n\nfunction renameObjectSchemaEntry(\n schema: ObjectJsonSchema,\n schemaProperty: 'properties' | 'patternProperties',\n oldName: string,\n newName: string,\n): ObjectJsonSchema {\n if (!isObjectSchema(schema) || !schema[schemaProperty]) return schema;\n\n const newSchema = copySchema(schema);\n const entries = newSchema[schemaProperty] ?? {};\n const renamed: Record<string, JsonSchema> = {};\n\n for (const [key, value] of Object.entries(entries)) {\n renamed[key === oldName ? newName : key] = value;\n }\n\n newSchema[schemaProperty] = renamed;\n return newSchema;\n}\n","import type Ajv from 'ajv';\nimport type { ValidateFunction } from 'ajv';\n\nimport type { JsonSchema } from '../types/json-schema';\n\nexport interface ValidationError {\n path: string;\n message: string;\n line?: number;\n column?: number;\n}\n\nexport interface ValidationResult {\n valid: boolean;\n errors?: ValidationError[];\n}\n\nlet ajvPromise: Promise<Ajv> | null = null;\n\nfunction loadAjv(): Promise<Ajv> {\n if (!ajvPromise) {\n ajvPromise = (async () => {\n const [{ default: AjvCtor }, ajvFormatsModule] = await Promise.all([\n import('ajv'),\n import('ajv-formats'),\n ]);\n const addFormats = (\n ajvFormatsModule as unknown as { default: (a: Ajv) => Ajv }\n ).default;\n const ajv = new AjvCtor({\n allErrors: true,\n strict: false,\n validateSchema: false,\n validateFormats: false,\n });\n addFormats(ajv);\n return ajv;\n })();\n }\n return ajvPromise;\n}\n\nconst MAX_COMPILED_VALIDATORS = 16;\nconst compiledValidators = new Map<string, ValidateFunction>();\n\n// Memoizes compiled validators by serialized schema, bounded as a simple LRU.\nfunction getValidator(ajv: Ajv, schema: JsonSchema): ValidateFunction {\n const key = JSON.stringify(schema);\n const cached = compiledValidators.get(key);\n if (cached) {\n compiledValidators.delete(key);\n compiledValidators.set(key, cached);\n return cached;\n }\n\n const validate = ajv.compile(schema as object);\n compiledValidators.set(key, validate);\n if (compiledValidators.size > MAX_COMPILED_VALIDATORS) {\n const oldest = compiledValidators.keys().next().value;\n if (oldest !== undefined) compiledValidators.delete(oldest);\n }\n return validate;\n}\n\n/**\n * Best-effort line/column for a JSON Pointer path inside a JSON source string.\n * A textual heuristic (not a parser): single-segment paths are matched by key,\n * deeper paths fall back to the last segment. Used only to position editor\n * error markers, so an imperfect match is acceptable.\n */\nexport function findLineNumberForPath(\n jsonStr: string,\n path: string,\n): { line: number; column: number } | undefined {\n try {\n if (path === '/' || path === '') {\n return { line: 1, column: 1 };\n }\n\n const pathSegments = path.split('/').filter(Boolean);\n\n if (pathSegments.length === 0) {\n return { line: 1, column: 1 };\n }\n\n const lines = jsonStr.split('\\n');\n\n if (pathSegments.length === 1) {\n const propName = pathSegments[0];\n const propPattern = new RegExp(`([\\\\s]*)(\"${propName}\")`);\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const match = propPattern.exec(line);\n\n if (match) {\n const columnPos = line.indexOf(`\"${propName}\"`) + 1;\n return { line: i + 1, column: columnPos };\n }\n }\n }\n\n if (pathSegments.length > 1) {\n const lastSegment = pathSegments[pathSegments.length - 1];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (line.includes(`\"${lastSegment}\"`)) {\n const column = line.indexOf(`\"${lastSegment}\"`) + 1;\n return { line: i + 1, column };\n }\n }\n }\n\n return undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function extractErrorPosition(\n error: Error,\n jsonInput: string,\n): { line: number; column: number } {\n let line = 1;\n let column = 1;\n const errorMessage = error.message;\n\n const lineColMatch = errorMessage.match(/at line (\\d+) column (\\d+)/);\n if (lineColMatch?.[1] && lineColMatch?.[2]) {\n line = Number.parseInt(lineColMatch[1], 10);\n column = Number.parseInt(lineColMatch[2], 10);\n } else {\n const positionMatch = errorMessage.match(/position (\\d+)/);\n if (positionMatch?.[1]) {\n const position = Number.parseInt(positionMatch[1], 10);\n const jsonUpToError = jsonInput.substring(0, position);\n const lines = jsonUpToError.split('\\n');\n line = lines.length;\n column = lines[lines.length - 1].length + 1;\n }\n }\n\n return { line, column };\n}\n\n/**\n * Validates a JSON string against a schema using AJV. Lazy-loads AJV on first call.\n */\nexport async function validateJson(\n jsonInput: string,\n schema: JsonSchema,\n): Promise<ValidationResult> {\n if (!jsonInput.trim()) {\n return {\n valid: false,\n errors: [{ path: '/', message: 'Empty JSON input' }],\n };\n }\n\n try {\n const jsonObject = JSON.parse(jsonInput);\n const ajv = await loadAjv();\n const validate = getValidator(ajv, schema);\n const valid = validate(jsonObject);\n\n if (!valid) {\n const errors =\n validate.errors?.map((error) => {\n const path = error.instancePath || '/';\n const position = findLineNumberForPath(jsonInput, path);\n return {\n path,\n message: error.message || 'Unknown error',\n line: position?.line,\n column: position?.column,\n };\n }) || [];\n\n return { valid: false, errors };\n }\n\n return { valid: true, errors: [] };\n } catch (error) {\n if (!(error instanceof Error)) {\n return {\n valid: false,\n errors: [{ path: '/', message: `Unknown error: ${String(error)}` }],\n };\n }\n\n const { line, column } = extractErrorPosition(error, jsonInput);\n\n return {\n valid: false,\n errors: [{ path: '/', message: error.message, line, column }],\n };\n }\n}\n","import * as z from 'zod/mini';\n\nimport type { Translation } from '../i18n/translation-keys';\nimport { type JsonSchema, baseSchema } from './json-schema';\n\nfunction refineRangeConsistency(\n min: number | undefined,\n isMinExclusive: boolean,\n max: number | undefined,\n isMaxExclusive: boolean,\n): boolean {\n if (min === undefined || max === undefined) {\n return true;\n }\n if (min > max) {\n return false;\n }\n if (isMinExclusive && isMaxExclusive && max - min < 2) {\n return false;\n }\n if ((isMinExclusive || isMaxExclusive) && max - min < 1) {\n return false;\n }\n return true;\n}\n\nconst getJsonStringType = (t: Translation) =>\n z\n .object({\n minLength: z.optional(\n z\n .number()\n .check(\n z.int({ error: t.typeValidationErrorIntValue }),\n z.minimum(0, { error: t.typeValidationErrorNegativeLength }),\n ),\n ),\n maxLength: z.optional(\n z\n .number()\n .check(\n z.int({ error: t.typeValidationErrorIntValue }),\n z.minimum(0, { error: t.typeValidationErrorNegativeLength }),\n ),\n ),\n pattern: baseSchema.shape.pattern,\n format: baseSchema.shape.format,\n enum: baseSchema.shape.enum,\n contentMediaType: baseSchema.shape.contentMediaType,\n contentEncoding: baseSchema.shape.contentEncoding,\n })\n .check(\n // If minLength and maxLength are both set, minLength must not be greater than maxLength.\n z.refine(\n ({\n minLength,\n maxLength,\n }: {\n minLength?: number;\n maxLength?: number;\n }) => refineRangeConsistency(minLength, false, maxLength, false),\n {\n error: t.stringValidationErrorLengthRange,\n path: ['length'],\n },\n ),\n );\n\nconst getJsonNumberType = (t: Translation) =>\n z\n .object({\n multipleOf: z.optional(\n z.number().check(z.positive({ error: t.typeValidationErrorPositive })),\n ),\n minimum: baseSchema.shape.minimum,\n maximum: baseSchema.shape.maximum,\n exclusiveMinimum: baseSchema.shape.exclusiveMinimum,\n exclusiveMaximum: baseSchema.shape.exclusiveMaximum,\n enum: baseSchema.shape.enum,\n })\n .check(\n // If both minimum (or exclusiveMinimum) and maximum (or exclusiveMaximum) are set,\n // minimum must not be greater than maximum.\n z.refine(\n ({ minimum, exclusiveMinimum, maximum, exclusiveMaximum }) =>\n refineRangeConsistency(minimum, false, maximum, false) &&\n refineRangeConsistency(minimum, false, exclusiveMaximum, true) &&\n refineRangeConsistency(exclusiveMinimum, true, maximum, false) &&\n refineRangeConsistency(\n exclusiveMinimum,\n true,\n exclusiveMaximum,\n true,\n ),\n {\n error: t.numberValidationErrorMinMax,\n path: ['minMax'],\n },\n ),\n // Cannot set both exclusiveMinimum and minimum.\n z.refine(\n ({ minimum, exclusiveMinimum }) =>\n exclusiveMinimum === undefined || minimum === undefined,\n {\n error: t.numberValidationErrorBothExclusiveAndInclusiveMin,\n path: ['redundantMinimum'],\n },\n ),\n // Cannot set both exclusiveMaximum and maximum.\n z.refine(\n ({ maximum, exclusiveMaximum }) =>\n exclusiveMaximum === undefined || maximum === undefined,\n {\n error: t.numberValidationErrorBothExclusiveAndInclusiveMax,\n path: ['redundantMaximum'],\n },\n ),\n // Check that the enum values are within min/max bounds when set.\n z.refine(\n ({\n enum: enumValues,\n minimum,\n maximum,\n exclusiveMinimum,\n exclusiveMaximum,\n }) => {\n if (!enumValues || enumValues.length === 0) return true;\n return enumValues.every((val) => {\n if (typeof val !== 'number') return false;\n if (minimum !== undefined && val < minimum) return false;\n if (maximum !== undefined && val > maximum) return false;\n if (exclusiveMinimum !== undefined && val <= exclusiveMinimum)\n return false;\n if (exclusiveMaximum !== undefined && val >= exclusiveMaximum)\n return false;\n return true;\n });\n },\n {\n error: t.numberValidationErrorEnumOutOfRange,\n path: ['enum'],\n },\n ),\n );\n\nconst getJsonArrayType = (t: Translation) =>\n z\n .object({\n minItems: z.optional(\n z\n .number()\n .check(\n z.int({ error: t.typeValidationErrorIntValue }),\n z.minimum(0, { error: t.typeValidationErrorNegativeLength }),\n ),\n ),\n maxItems: z.optional(\n z\n .number()\n .check(\n z.int({ error: t.typeValidationErrorIntValue }),\n z.minimum(0, { error: t.typeValidationErrorNegativeLength }),\n ),\n ),\n uniqueItems: z.optional(z.boolean()),\n minContains: z.optional(\n z\n .number()\n .check(\n z.int({ error: t.typeValidationErrorIntValue }),\n z.minimum(0, { error: t.typeValidationErrorNegativeLength }),\n ),\n ),\n maxContains: z.optional(\n z\n .number()\n .check(\n z.int({ error: t.typeValidationErrorIntValue }),\n z.minimum(0, { error: t.typeValidationErrorNegativeLength }),\n ),\n ),\n })\n .check(\n // If both minItems and maxItems are set, minItems must not be greater than maxItems.\n z.refine(\n ({ minItems, maxItems }) =>\n refineRangeConsistency(minItems, false, maxItems, false),\n {\n error: t.arrayValidationErrorMinMax,\n path: ['minmax'],\n },\n ),\n // If both minContains and maxContains are set, minContains must not be greater than maxContains.\n z.refine(\n ({ minContains, maxContains }) =>\n refineRangeConsistency(minContains, false, maxContains, false),\n {\n error: t.arrayValidationErrorContainsMinMax,\n path: ['minmaxContains'],\n },\n ),\n );\n\nconst getJsonObjectType = (t: Translation) =>\n z\n .object({\n minProperties: z.optional(\n z\n .number()\n .check(\n z.int({ error: t.typeValidationErrorIntValue }),\n z.minimum(0, { error: t.typeValidationErrorNegativeLength }),\n ),\n ),\n maxProperties: z.optional(\n z\n .number()\n .check(\n z.int({ error: t.typeValidationErrorIntValue }),\n z.minimum(0, { error: t.typeValidationErrorNegativeLength }),\n ),\n ),\n })\n .check(\n // If both minProperties and maxProperties are set,\n // minProperties must not be greater than maxProperties.\n z.refine(\n ({ minProperties, maxProperties }) =>\n refineRangeConsistency(minProperties, false, maxProperties, false),\n {\n error: t.objectValidationErrorMinMax,\n path: ['minmax'],\n },\n ),\n );\n\nexport function getTypeValidation(type: string, t: Translation) {\n const jsonTypesValidation: Record<string, z.ZodMiniType> = {\n string: getJsonStringType(t),\n number: getJsonNumberType(t),\n array: getJsonArrayType(t),\n object: getJsonObjectType(t),\n };\n\n return jsonTypesValidation[type] || z.unknown();\n}\n\nexport interface TypeValidationResult {\n success: boolean;\n errors?: z.core.$ZodIssue[];\n}\n\nexport function validateSchemaByType(\n schema: unknown,\n type: string,\n t: Translation,\n): TypeValidationResult {\n const zodSchema = getTypeValidation(type, t);\n const result = zodSchema.safeParse(schema);\n if (result.success) {\n return { success: true };\n }\n return { success: false, errors: result.error.issues };\n}\n\nexport interface ValidationTreeNode {\n name: string;\n validation: TypeValidationResult;\n children: Record<string, ValidationTreeNode>;\n /** Total errors in this node and all its descendants. */\n cumulativeChildrenErrors: number;\n}\n\nexport function buildValidationTree(\n schema: JsonSchema,\n t: Translation,\n): ValidationTreeNode {\n // Helper: derive a concrete type string from `schema.type` (string | string[] | undefined).\n const deriveType = (sch: unknown): string | undefined => {\n if (!sch || typeof sch !== 'object') return undefined;\n const declared = (sch as Record<string, unknown>)['type'];\n if (typeof declared === 'string') return declared;\n if (\n Array.isArray(declared) &&\n declared.length > 0 &&\n typeof declared[0] === 'string'\n )\n return declared[0];\n return undefined;\n };\n\n // Boolean schemas: true => always valid, false => always invalid.\n if (typeof schema === 'boolean') {\n const validation: TypeValidationResult =\n schema === true\n ? { success: true }\n : {\n success: false,\n errors: [\n {\n code: 'custom',\n message: t.validatorErrorSchemaValidation,\n path: [],\n } as unknown as z.core.$ZodIssue,\n ],\n };\n\n return {\n name: String(schema),\n validation,\n children: {},\n cumulativeChildrenErrors: validation.success\n ? 0\n : (validation.errors?.length ?? 0),\n };\n }\n\n const sch = schema as Record<string, unknown>;\n const currentType = deriveType(sch) ?? 'object';\n\n const validation = validateSchemaByType(schema, currentType, t);\n\n const children: Record<string, ValidationTreeNode> = {};\n\n if (currentType === 'object') {\n const properties = sch['properties'];\n if (properties && typeof properties === 'object') {\n for (const [propName, propSchema] of Object.entries(\n properties as Record<string, JsonSchema>,\n )) {\n children[propName] = buildValidationTree(propSchema, t);\n }\n }\n if (\n sch['patternProperties'] &&\n typeof sch['patternProperties'] === 'object'\n ) {\n for (const [patternName, patternSchema] of Object.entries(\n sch['patternProperties'] as Record<string, JsonSchema>,\n )) {\n children[`pattern:${patternName}`] = buildValidationTree(\n patternSchema,\n t,\n );\n }\n }\n }\n\n if (currentType === 'array') {\n const items = sch['items'];\n if (Array.isArray(items)) {\n items.forEach((it, idx) => {\n children[`items[${idx}]`] = buildValidationTree(it, t);\n });\n } else if (items) {\n children['items'] = buildValidationTree(items as JsonSchema, t);\n }\n\n if (Array.isArray(sch['prefixItems'])) {\n (sch['prefixItems'] as JsonSchema[]).forEach((it, idx) => {\n children[`prefixItems[${idx}]`] = buildValidationTree(it, t);\n });\n }\n }\n\n const combinators: Array<'allOf' | 'anyOf' | 'oneOf'> = [\n 'allOf',\n 'anyOf',\n 'oneOf',\n ];\n for (const comb of combinators) {\n const arr = sch[comb];\n if (Array.isArray(arr)) {\n arr.forEach((subSchema, idx) => {\n children[[comb, idx].join(':')] = buildValidationTree(\n subSchema as JsonSchema,\n t,\n );\n });\n }\n }\n\n if (sch['not']) {\n children['not'] = buildValidationTree(sch['not'] as JsonSchema, t);\n }\n\n if (sch['$defs'] && typeof sch['$defs'] === 'object') {\n for (const [defName, defSchema] of Object.entries(\n sch['$defs'] as Record<string, JsonSchema>,\n )) {\n children[`$defs:${defName}`] = buildValidationTree(defSchema, t);\n }\n }\n\n // `definitions` is the older name for `$defs`; support both.\n const definitions = (sch as Record<string, unknown>)['definitions'];\n if (definitions && typeof definitions === 'object') {\n for (const [defName, defSchema] of Object.entries(\n definitions as Record<string, JsonSchema>,\n )) {\n children[`definitions:${defName}`] = buildValidationTree(defSchema, t);\n }\n }\n\n const ownErrors = validation.success ? 0 : (validation.errors?.length ?? 0);\n const childrenErrors = Object.values(children).reduce(\n (sum, child) => sum + child.cumulativeChildrenErrors,\n 0,\n );\n\n return {\n name: currentType,\n validation,\n children,\n cumulativeChildrenErrors: ownErrors + childrenErrors,\n };\n}\n","import type { Translation } from '../translation-keys';\n\nexport const en: Translation = {\n collapse: 'Collapse',\n expand: 'Expand',\n\n fieldDescriptionPlaceholder: 'Describe the purpose of this field',\n fieldDelete: 'Delete field',\n fieldDescription: 'Description',\n fieldNameLabel: 'Field Name',\n fieldNamePlaceholder: 'e.g. firstName, age, isActive',\n fieldNameUseRegex: 'Use regular expression',\n fieldNameUseExactName: 'Use exact name',\n fieldNameRegexLabel: 'Regular expression for property names',\n fieldNameRegexPlaceholder: 'e.g. ^S_',\n fieldNameRegexHelp:\n 'Allows any property whose name matches this regular expression. Matching properties must follow this field schema. Use ^ and $ to match the whole name.',\n fieldNameRegexError: 'Enter a valid regular expression.',\n fieldRequiredLabel: 'Required Field',\n fieldType: 'Field Type',\n fieldTypeExample: 'Example:',\n fieldAddNewButton: 'Add Field',\n fieldAddNewBadge: 'Schema Builder',\n fieldAddNewCancel: 'Cancel',\n fieldAddNewConfirm: 'Add Field',\n fieldAddNewDescription: 'Create a new field for your JSON schema',\n fieldAddNewLabel: 'Add New Field',\n\n fieldTypeTextLabel: 'Text',\n fieldTypeTextDescription: 'For text values like names, descriptions, etc.',\n fieldTypeNumberLabel: 'Number',\n fieldTypeNumberDescription: 'For decimal or whole numbers',\n fieldTypeBooleanLabel: 'Yes/No',\n fieldTypeBooleanDescription: 'For true/false values',\n fieldTypeObjectLabel: 'Group',\n fieldTypeObjectDescription: 'For grouping related fields together',\n fieldTypeArrayLabel: 'List',\n fieldTypeArrayDescription: 'For collections of items',\n fieldTypeRefDescription: 'Reference to a definition or external schema',\n\n propertyDescriptionPlaceholder: 'Add description...',\n propertyDescriptionButton: 'Add description...',\n propertyRequired: 'Required',\n propertyNameRegexDescription:\n 'Allows and validates properties whose names match this regular expression.',\n propertyOptional: 'Optional',\n propertyDelete: 'Delete field',\n\n schemaEditorTitle: 'JSON Schema Editor',\n schemaEditorEditModeVisual: 'Visual',\n schemaEditorEditModeJson: 'JSON',\n schemaEditorEditModeBoth: 'Both',\n\n arrayNoConstraint: 'No constraint',\n arrayMinimumLabel: 'Minimum Items',\n arrayMinimumPlaceholder: 'No minimum',\n arrayMaximumLabel: 'Maximum Items',\n arrayMaximumPlaceholder: 'No maximum',\n arrayForceUniqueItemsLabel: 'Force unique items',\n arrayItemTypeLabel: 'Item Type',\n arrayValidationErrorMinMax: \"'minItems' cannot be greater than 'maxItems'.\",\n arrayValidationErrorContainsMinMax:\n \"'minContains' cannot be greater than 'maxContains'.\",\n\n booleanNoConstraint: 'No constraint',\n booleanAllowedValuesLabel: 'Allowed Values',\n booleanAllowFalseLabel: 'Allow false value',\n booleanAllowTrueLabel: 'Allow true value',\n booleanNeitherWarning: 'Warning: You must allow at least one value.',\n\n numberNoConstraint: 'No constraint',\n numberMinimumLabel: 'Minimum Value',\n numberMinimumPlaceholder: 'No minimum',\n numberMaximumLabel: 'Maximum Value',\n numberMaximumPlaceholder: 'No maximum',\n numberExclusiveMinimumLabel: 'Exclusive Minimum',\n numberExclusiveMinimumPlaceholder: 'No exclusive min',\n numberExclusiveMaximumLabel: 'Exclusive Maximum',\n numberExclusiveMaximumPlaceholder: 'No exclusive max',\n numberMultipleOfLabel: 'Multiple Of',\n numberMultipleOfPlaceholder: 'Any',\n numberAllowedValuesEnumLabel: 'Allowed Values (enum)',\n numberAllowedValuesEnumNone: 'No restricted values set',\n numberAllowedValuesEnumAddLabel: 'Add',\n numberAllowedValuesEnumAddPlaceholder: 'Add allowed value...',\n numberValidationErrorMinMax: 'Minimum and maximum values must be consistent.',\n numberValidationErrorBothExclusiveAndInclusiveMin:\n \"Both 'exclusiveMinimum' and 'minimum' cannot be set at the same time.\",\n numberValidationErrorBothExclusiveAndInclusiveMax:\n \"Both 'exclusiveMaximum' and 'maximum' cannot be set at the same time.\",\n numberValidationErrorEnumOutOfRange:\n 'Enum values must be within the defined range.',\n\n objectPropertiesNone: 'No properties defined',\n objectValidationErrorMinMax:\n \"'minProperties' cannot be greater than 'maxProperties'.\",\n\n additionalPropertiesAllow: 'Allow additional properties',\n additionalPropertiesForbid: 'Forbid additional properties',\n\n stringNoConstraint: 'No constraint',\n stringMinimumLengthLabel: 'Minimum Length',\n stringMinimumLengthPlaceholder: 'No minimum',\n stringMaximumLengthLabel: 'Maximum Length',\n stringMaximumLengthPlaceholder: 'No maximum',\n stringPatternLabel: 'Pattern (regex)',\n stringPatternPlaceholder: '^[a-zA-Z]+$',\n stringFormatLabel: 'Format',\n stringFormatNone: 'None',\n stringFormatDateTime: 'Date-Time',\n stringFormatDate: 'Date',\n stringFormatTime: 'Time',\n stringFormatEmail: 'Email',\n stringFormatUri: 'URI',\n stringFormatUuid: 'UUID',\n stringFormatHostname: 'Hostname',\n stringFormatIpv4: 'IPv4 Address',\n stringFormatIpv6: 'IPv6 Address',\n stringAllowedValuesEnumLabel: 'Allowed Values (enum)',\n stringAllowedValuesEnumNone: 'No restricted values set',\n stringAllowedValuesEnumAddPlaceholder: 'Add allowed value...',\n stringAllowedValuesEnumAddLabel: 'Add',\n stringFormatSelectPlaceholder: 'Select format',\n stringValidationErrorLengthRange:\n \"'Minimum Length' cannot be greater than 'Maximum Length'.\",\n\n schemaTypeAnyOf: 'Any Of',\n anyOfAddOption: 'Add Option',\n anyOfRemoveOption: 'Remove option',\n anyOfOptionLabel: 'Option',\n anyOfDescription: 'Value must match at least one of these schemas',\n anyOfNoOptions: 'No options defined',\n\n schemaTypeOneOf: 'One Of',\n oneOfAddOption: 'Add Option',\n oneOfRemoveOption: 'Remove option',\n oneOfOptionLabel: 'Option',\n oneOfDescription: 'Value must match exactly one of these schemas',\n oneOfNoOptions: 'No options defined',\n\n schemaTypeAllOf: 'All Of',\n allOfAddSchema: 'Add Schema',\n allOfRemoveSchema: 'Remove schema',\n allOfSchemaLabel: 'Schema',\n allOfDescription: 'Value must match all of these schemas',\n allOfNoSchemas: 'No schemas defined',\n\n schemaTypeArray: 'List',\n schemaTypeBoolean: 'Yes/No',\n schemaTypeNumber: 'Number',\n schemaTypeObject: 'Object',\n schemaTypeString: 'Text',\n schemaTypeNull: 'Empty',\n\n inferrerTitle: 'Infer JSON Schema',\n inferrerDescription:\n 'Paste your JSON document below to generate a schema from it.',\n inferrerCancel: 'Cancel',\n inferrerGenerate: 'Generate Schema',\n inferrerErrorInvalidJson: 'Invalid JSON format. Please check your input.',\n\n validatorTitle: 'Validate JSON',\n validatorDescription:\n 'Paste your JSON document to validate against the current schema. Validation occurs automatically as you type.',\n validatorCurrentSchema: 'Current Schema:',\n validatorContent: 'Your JSON:',\n validatorValid: 'JSON is valid according to the schema!',\n validatorErrorInvalidSyntax: 'Invalid JSON syntax',\n validatorErrorSchemaValidation: 'Schema validation error',\n validatorErrorCount: '{count} validation errors detected',\n validatorErrorPathRoot: 'Root',\n validatorErrorLocationLineAndColumn: 'Line {line}, Col {column}',\n validatorErrorLocationLineOnly: 'Line {line}',\n validatorClose: 'Close',\n\n visualizerDownloadTitle: 'Download Schema',\n visualizerDownloadFileName: 'schema.json',\n visualizerSource: 'JSON Schema Source',\n\n visualEditorNoFieldsHint1: 'No fields defined yet',\n visualEditorNoFieldsHint2: 'Add your first field to get started',\n\n typeValidationErrorNegativeLength: 'Length values cannot be negative.',\n typeValidationErrorIntValue: 'Value must be an integer.',\n typeValidationErrorPositive: 'Value must be positive.',\n\n schemaTypeRef: 'Reference',\n refUrlLabel: 'Reference URL',\n refUrlPlaceholder: '',\n refPointerLabel: 'JSON Pointer (optional)',\n refPointerPlaceholder: '/properties/address',\n refSuggestionsLabel: 'Suggestions',\n refNoSuggestions: 'No suggestions available',\n refLocalDefinitionsLabel: 'Local definitions',\n\n definitionsPanelTitle: 'Reusable definitions',\n definitionsAddButton: 'Add definition',\n definitionsEmpty: 'No reusable definitions yet',\n definitionsNameLabel: 'Name',\n definitionsNamePlaceholder: 'e.g. LegalEntity',\n definitionsDelete: 'Delete definition',\n\n propertyTitleLabel: 'Title',\n propertyTitlePlaceholder: 'Human-readable title',\n propertyDefaultLabel: 'Default',\n propertyDefaultPlaceholder: 'e.g. \"hello\", 42, true',\n\n propertiesTabLabel: 'Properties',\n definitionsTabLabel: 'Definitions',\n};\n","import type { Translation } from '../translation-keys';\n\nexport const it: Translation = {\n collapse: 'Comprimi',\n expand: 'Espandi',\n\n fieldDescriptionPlaceholder: 'Descrivi lo scopo di questo campo',\n fieldDelete: 'Elimina campo',\n fieldDescription: 'Descrizione',\n fieldNameLabel: 'Nome campo',\n fieldNamePlaceholder: 'es. nome, eta, attivo',\n fieldNameUseRegex: 'Usa espressione regolare',\n fieldNameUseExactName: 'Usa nome esatto',\n fieldNameRegexLabel: 'Espressione regolare per nomi di proprieta',\n fieldNameRegexPlaceholder: 'es. ^S_',\n fieldNameRegexHelp:\n \"Ammette qualsiasi proprieta il cui nome corrisponda a questa espressione regolare. Le proprieta corrispondenti devono seguire questo schema. Usa ^ e $ per identificare l'intero nome.\",\n fieldNameRegexError: \"Inserisci un'espressione regolare valida.\",\n fieldRequiredLabel: 'Campo obbligatorio',\n fieldType: 'Tipo campo',\n fieldTypeExample: 'Esempio:',\n fieldAddNewButton: 'Aggiungi campo',\n fieldAddNewBadge: 'Editor schema',\n fieldAddNewCancel: 'Annulla',\n fieldAddNewConfirm: 'Aggiungi campo',\n fieldAddNewDescription: 'Crea un nuovo campo per il tuo schema JSON',\n fieldAddNewLabel: 'Aggiungi nuovo campo',\n\n fieldTypeTextLabel: 'Testo',\n fieldTypeTextDescription: 'Per valori testuali come nomi, descrizioni, ecc.',\n fieldTypeNumberLabel: 'Numero',\n fieldTypeNumberDescription: 'Per numeri decimali o interi',\n fieldTypeBooleanLabel: 'Si/No',\n fieldTypeBooleanDescription: 'Per valori vero/falso',\n fieldTypeObjectLabel: 'Gruppo',\n fieldTypeObjectDescription: 'Per raggruppare campi correlati',\n fieldTypeArrayLabel: 'Elenco',\n fieldTypeArrayDescription: 'Per collezioni di elementi',\n fieldTypeRefDescription: 'Riferimento a una definizione o schema esterno',\n\n propertyDescriptionPlaceholder: 'Aggiungi descrizione...',\n propertyDescriptionButton: 'Aggiungi descrizione...',\n propertyRequired: 'Obbligatorio',\n propertyNameRegexDescription:\n 'Ammette e convalida proprieta i cui nomi corrispondono a questa espressione regolare.',\n propertyOptional: 'Opzionale',\n propertyDelete: 'Elimina campo',\n\n schemaEditorTitle: 'Editor Schema JSON',\n schemaEditorEditModeVisual: 'Visuale',\n schemaEditorEditModeJson: 'JSON',\n schemaEditorEditModeBoth: 'Entrambi',\n\n arrayNoConstraint: 'Nessun vincolo',\n arrayMinimumLabel: 'Numero minimo di elementi',\n arrayMinimumPlaceholder: 'Nessun minimo',\n arrayMaximumLabel: 'Numero massimo di elementi',\n arrayMaximumPlaceholder: 'Nessun massimo',\n arrayForceUniqueItemsLabel: 'Forza elementi unici',\n arrayItemTypeLabel: 'Tipo elemento',\n arrayValidationErrorMinMax:\n \"'minItems' non puo essere maggiore di 'maxItems'.\",\n arrayValidationErrorContainsMinMax:\n \"'minContains' non puo essere maggiore di 'maxContains'.\",\n\n booleanNoConstraint: 'Nessun vincolo',\n booleanAllowedValuesLabel: 'Valori ammessi',\n booleanAllowFalseLabel: 'Ammetti il valore falso',\n booleanAllowTrueLabel: 'Ammetti il valore vero',\n booleanNeitherWarning: 'Attenzione: devi ammettere almeno un valore.',\n\n numberNoConstraint: 'Nessun vincolo',\n numberMinimumLabel: 'Valore minimo',\n numberMinimumPlaceholder: 'Nessun minimo',\n numberMaximumLabel: 'Valore massimo',\n numberMaximumPlaceholder: 'Nessun massimo',\n numberExclusiveMinimumLabel: 'Minimo esclusivo',\n numberExclusiveMinimumPlaceholder: 'Nessun minimo esclusivo',\n numberExclusiveMaximumLabel: 'Massimo esclusivo',\n numberExclusiveMaximumPlaceholder: 'Nessun massimo esclusivo',\n numberMultipleOfLabel: 'Multiplo di',\n numberMultipleOfPlaceholder: 'Qualsiasi',\n numberAllowedValuesEnumLabel: 'Valori ammessi (enum)',\n numberAllowedValuesEnumNone: 'Nessun valore vincolato impostato',\n numberAllowedValuesEnumAddLabel: 'Aggiungi',\n numberAllowedValuesEnumAddPlaceholder: 'Aggiungi valore ammesso...',\n numberValidationErrorMinMax:\n 'I valori minimo e massimo devono essere coerenti.',\n numberValidationErrorBothExclusiveAndInclusiveMin:\n \"'exclusiveMinimum' e 'minimum' non possono essere impostati contemporaneamente.\",\n numberValidationErrorBothExclusiveAndInclusiveMax:\n \"'exclusiveMaximum' e 'maximum' non possono essere impostati contemporaneamente.\",\n numberValidationErrorEnumOutOfRange:\n \"I valori dell'enum devono rientrare nell'intervallo definito.\",\n\n objectPropertiesNone: 'Nessuna proprieta definita',\n objectValidationErrorMinMax:\n \"'minProperties' non puo essere maggiore di 'maxProperties'.\",\n\n additionalPropertiesAllow: 'Ammetti proprieta aggiuntive',\n additionalPropertiesForbid: 'Vieta proprieta aggiuntive',\n\n stringNoConstraint: 'Nessun vincolo',\n stringMinimumLengthLabel: 'Lunghezza minima',\n stringMinimumLengthPlaceholder: 'Nessun minimo',\n stringMaximumLengthLabel: 'Lunghezza massima',\n stringMaximumLengthPlaceholder: 'Nessun massimo',\n stringPatternLabel: 'Pattern (regex)',\n stringPatternPlaceholder: '^[a-zA-Z]+$',\n stringFormatLabel: 'Formato',\n stringFormatNone: 'Nessuno',\n stringFormatDateTime: 'Data e ora',\n stringFormatDate: 'Data',\n stringFormatTime: 'Ora',\n stringFormatEmail: 'Email',\n stringFormatUri: 'URI',\n stringFormatUuid: 'UUID',\n stringFormatHostname: 'Hostname',\n stringFormatIpv4: 'Indirizzo IPv4',\n stringFormatIpv6: 'Indirizzo IPv6',\n stringAllowedValuesEnumLabel: 'Valori ammessi (enum)',\n stringAllowedValuesEnumNone: 'Nessun valore vincolato impostato',\n stringAllowedValuesEnumAddPlaceholder: 'Aggiungi valore ammesso...',\n stringAllowedValuesEnumAddLabel: 'Aggiungi',\n stringFormatSelectPlaceholder: 'Seleziona formato',\n stringValidationErrorLengthRange:\n \"'Lunghezza minima' non puo essere maggiore di 'Lunghezza massima'.\",\n\n schemaTypeAnyOf: 'Uno qualsiasi',\n anyOfAddOption: 'Aggiungi opzione',\n anyOfRemoveOption: 'Rimuovi opzione',\n anyOfOptionLabel: 'Opzione',\n anyOfDescription:\n 'Il valore deve corrispondere ad almeno uno di questi schemi',\n anyOfNoOptions: 'Nessuna opzione definita',\n\n schemaTypeOneOf: 'Esattamente uno',\n oneOfAddOption: 'Aggiungi opzione',\n oneOfRemoveOption: 'Rimuovi opzione',\n oneOfOptionLabel: 'Opzione',\n oneOfDescription:\n 'Il valore deve corrispondere esattamente a uno di questi schemi',\n oneOfNoOptions: 'Nessuna opzione definita',\n\n schemaTypeAllOf: 'Tutti',\n allOfAddSchema: 'Aggiungi schema',\n allOfRemoveSchema: 'Rimuovi schema',\n allOfSchemaLabel: 'Schema',\n allOfDescription: 'Il valore deve corrispondere a tutti questi schemi',\n allOfNoSchemas: 'Nessuno schema definito',\n\n schemaTypeArray: 'Elenco',\n schemaTypeBoolean: 'Si/No',\n schemaTypeNumber: 'Numero',\n schemaTypeObject: 'Oggetto',\n schemaTypeString: 'Testo',\n schemaTypeNull: 'Vuoto',\n\n inferrerTitle: 'Deduci schema JSON',\n inferrerDescription:\n 'Incolla qui sotto il documento JSON per generarne uno schema.',\n inferrerCancel: 'Annulla',\n inferrerGenerate: 'Genera schema',\n inferrerErrorInvalidJson: 'Formato JSON non valido. Controlla il tuo input.',\n\n validatorTitle: 'Convalida JSON',\n validatorDescription:\n 'Incolla il documento JSON per validarlo contro lo schema corrente. La convalida avviene automaticamente mentre digiti.',\n validatorCurrentSchema: 'Schema corrente:',\n validatorContent: 'Il tuo JSON:',\n validatorValid: 'Il JSON e valido secondo lo schema!',\n validatorErrorInvalidSyntax: 'Sintassi JSON non valida',\n validatorErrorSchemaValidation: 'Errore di convalida dello schema',\n validatorErrorCount: '{count} errori di convalida rilevati',\n validatorErrorPathRoot: 'Radice',\n validatorErrorLocationLineAndColumn: 'Riga {line}, Col {column}',\n validatorErrorLocationLineOnly: 'Riga {line}',\n validatorClose: 'Chiudi',\n\n visualizerDownloadTitle: 'Scarica schema',\n visualizerDownloadFileName: 'schema.json',\n visualizerSource: 'Sorgente schema JSON',\n\n visualEditorNoFieldsHint1: 'Nessun campo definito',\n visualEditorNoFieldsHint2: 'Aggiungi il primo campo per iniziare',\n\n typeValidationErrorNegativeLength:\n 'I valori di lunghezza non possono essere negativi.',\n typeValidationErrorIntValue: 'Il valore deve essere un intero.',\n typeValidationErrorPositive: 'Il valore deve essere positivo.',\n\n schemaTypeRef: 'Riferimento',\n refUrlLabel: 'URL di riferimento',\n refUrlPlaceholder: '',\n refPointerLabel: 'JSON Pointer (opzionale)',\n refPointerPlaceholder: '/properties/indirizzo',\n refSuggestionsLabel: 'Suggerimenti',\n refNoSuggestions: 'Nessun suggerimento disponibile',\n refLocalDefinitionsLabel: 'Definizioni locali',\n\n definitionsPanelTitle: 'Definizioni riutilizzabili',\n definitionsAddButton: 'Aggiungi definizione',\n definitionsEmpty: 'Nessuna definizione riutilizzabile',\n definitionsNameLabel: 'Nome',\n definitionsNamePlaceholder: 'es. LegalEntity',\n definitionsDelete: 'Elimina definizione',\n\n propertyTitleLabel: 'Titolo',\n propertyTitlePlaceholder: 'Titolo leggibile',\n propertyDefaultLabel: 'Valore di default',\n propertyDefaultPlaceholder: 'es. \"ciao\", 42, true',\n\n propertiesTabLabel: 'Campi',\n definitionsTabLabel: 'Definizioni',\n};\n","import { InjectionToken } from '@angular/core';\n\nimport type { SchemaBuilderConfig } from '../interfaces/schema-builder-config.interface';\n\n/**\n * Optional DI token holding the merged {@link SchemaBuilderConfig} provided by\n * {@link provideSchemaBuilder}. Components inject this with `{ optional: true }`\n * and merge it with their own `locale` / `messages` inputs.\n *\n * @public\n */\nexport const SCHEMA_BUILDER_CONFIG = new InjectionToken<SchemaBuilderConfig>(\n 'SCHEMA_BUILDER_CONFIG',\n);\n","import { InjectionToken, type Signal } from '@angular/core';\n\nimport type { RefSuggestion } from '../interfaces/ref-suggestion.interface';\n\nexport const SCHEMA_BUILDER_REF_SUGGESTIONS = new InjectionToken<\n Signal<readonly RefSuggestion[]>\n>('SCHEMA_BUILDER_REF_SUGGESTIONS');\n","import { Injectable, computed, inject } from '@angular/core';\n\nimport { en } from '../i18n/locales/en';\nimport type { Translation } from '../i18n/translation-keys';\nimport { SCHEMA_BUILDER_CONFIG } from '../tokens';\n\n@Injectable({ providedIn: 'root' })\nexport class JsonjoyTranslationService {\n private readonly config = inject(SCHEMA_BUILDER_CONFIG, { optional: true });\n\n /**\n * The merged provider-level locale: `en` baseline overlaid with the\n * provider's `locale` and `messages` (if any).\n */\n readonly providerLocale = computed<Translation>(() => ({\n ...en,\n ...(this.config?.locale ?? {}),\n ...(this.config?.messages ?? {}),\n }));\n\n /**\n * Helper to build a per-component effective locale.\n *\n * @param locale per-component locale override\n * @param messages per-component messages override\n */\n withOverrides(\n locale: () => Translation | undefined,\n messages: () => Partial<Translation> | undefined,\n ) {\n return computed<Translation>(() => ({\n ...this.providerLocale(),\n ...(locale() ?? {}),\n ...(messages() ?? {}),\n }));\n }\n}\n\nexport function formatTranslation(\n template: string,\n values: Record<string, string | number>,\n): string {\n return template.replace(/\\{(\\w+)\\}/g, (_, key) => {\n const value = values[key];\n return value !== undefined ? String(value) : `{${key}}`;\n });\n}\n","import {\n Injectable,\n type Signal,\n computed,\n inject,\n signal,\n} from '@angular/core';\n\nimport type { Translation } from '../i18n/translation-keys';\nimport { JsonjoyTranslationService } from './translation.service';\n\n/**\n * Editor-scoped context that carries the effective translation down to nested\n * editors. Entry components provide it and call {@link setSource}; inner\n * components inject it and read {@link translation}. Falls back to the provider\n * locale until a source is set.\n */\n@Injectable()\nexport class JsonjoyTranslationContextService {\n private readonly fallback = inject(JsonjoyTranslationService).providerLocale;\n private readonly source = signal<Signal<Translation> | null>(null);\n\n readonly translation: Signal<Translation> = computed(() =>\n (this.source() ?? this.fallback)(),\n );\n\n setSource(source: Signal<Translation>): void {\n this.source.set(source);\n }\n}\n","import {\n type EnvironmentProviders,\n type Provider,\n makeEnvironmentProviders,\n} from '@angular/core';\n\nimport type {\n RefSuggestionsFactory,\n SchemaBuilderConfig,\n} from './lib/interfaces';\nimport { JsonjoyTranslationContextService } from './lib/services/translation-context.service';\nimport {\n SCHEMA_BUILDER_CONFIG,\n SCHEMA_BUILDER_REF_SUGGESTIONS,\n} from './lib/tokens';\n\nexport function provideSchemaBuilder(\n config: SchemaBuilderConfig = {},\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: SCHEMA_BUILDER_CONFIG, useValue: config },\n // Root fallback so an inner editor used outside an editor subtree still resolves.\n JsonjoyTranslationContextService,\n ]);\n}\n\nexport function provideSchemaBuilderRefSuggestions(\n factory: RefSuggestionsFactory,\n): Provider[] {\n return [{ provide: SCHEMA_BUILDER_REF_SUGGESTIONS, useFactory: factory }];\n}\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nimport type { Translation } from '../i18n/translation-keys';\nimport type { SchemaEditorType } from '../types/json-schema';\n\n/**\n * Compose Tailwind class names with conflict resolution.\n * 1:1 port of jsonjoy-builder's `lib/utils.ts#cn`.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n\nconst typeColorClasses: Record<SchemaEditorType, string> = {\n string: 'text-blue-500 bg-blue-500/10',\n number: 'text-purple-500 bg-purple-500/10',\n integer: 'text-purple-500 bg-purple-500/10',\n boolean: 'text-green-500 bg-green-500/10',\n object: 'text-orange-500 bg-orange-500/10',\n array: 'text-pink-500 bg-pink-500/10',\n null: 'text-gray-500 bg-gray-500/10',\n anyOf: 'text-teal-500 bg-teal-500/10',\n oneOf: 'text-cyan-500 bg-cyan-500/10',\n allOf: 'text-indigo-500 bg-indigo-500/10',\n $ref: 'text-amber-600 bg-amber-500/10',\n};\n\nexport function getTypeColor(type: SchemaEditorType): string {\n return typeColorClasses[type];\n}\n\nexport function getTypeLabel(t: Translation, type: SchemaEditorType): string {\n switch (type) {\n case 'string':\n return t.schemaTypeString;\n case 'number':\n case 'integer':\n return t.schemaTypeNumber;\n case 'boolean':\n return t.schemaTypeBoolean;\n case 'object':\n return t.schemaTypeObject;\n case 'array':\n return t.schemaTypeArray;\n case 'null':\n return t.schemaTypeNull;\n case 'anyOf':\n return t.schemaTypeAnyOf;\n case 'oneOf':\n return t.schemaTypeOneOf;\n case 'allOf':\n return t.schemaTypeAllOf;\n case '$ref':\n return t.schemaTypeRef;\n }\n}\n","import { Injectable, type Signal, signal } from '@angular/core';\n\nimport type { LocalDefinition } from '../internal/schema-editor';\n\n/**\n * Editor-scoped context carrying the root schema's local `$defs`/`definitions`\n * down to deeply nested `$ref` editors.\n */\n@Injectable()\nexport class LocalDefinitionsContextService {\n private readonly defs = signal<readonly LocalDefinition[]>([]);\n\n readonly definitions: Signal<readonly LocalDefinition[]> =\n this.defs.asReadonly();\n\n set(definitions: readonly LocalDefinition[]): void {\n this.defs.set(definitions);\n }\n}\n","import { Directive, computed, input } from '@angular/core';\n\nimport { cn } from '../../internal/cn';\n\nexport type BadgeVariant = 'default' | 'secondary' | 'destructive' | 'outline';\n\nconst BADGE_BASE =\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2';\n\nconst BADGE_VARIANTS: Record<BadgeVariant, string> = {\n default:\n 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive:\n 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',\n outline: 'text-foreground',\n};\n\nexport function badgeVariants(\n options: { variant?: BadgeVariant; className?: string } = {},\n): string {\n const { variant = 'default', className } = options;\n return cn(BADGE_BASE, BADGE_VARIANTS[variant], className);\n}\n\n@Directive({\n selector: 'div[libJsonjoyBadge], span[libJsonjoyBadge]',\n standalone: true,\n host: { '[class]': 'classes()' },\n})\nexport class BadgeDirective {\n readonly variant = input<BadgeVariant>('default');\n protected readonly classes = computed(() =>\n badgeVariants({ variant: this.variant() }),\n );\n}\n","import { Directive, computed, input } from '@angular/core';\n\nimport { cn } from '../../internal/cn';\n\nexport type ButtonVariant =\n | 'default'\n | 'destructive'\n | 'outline'\n | 'secondary'\n | 'ghost'\n | 'link';\n\nexport type ButtonSize = 'default' | 'sm' | 'lg' | 'icon';\n\nconst BUTTON_BASE =\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-bold ring-offset-background transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0';\n\nconst BUTTON_VARIANTS: Record<ButtonVariant, string> = {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n outline:\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n};\n\nconst BUTTON_SIZES: Record<ButtonSize, string> = {\n default: 'h-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n};\n\n/**\n * Pure helper to compose the button class string. Equivalent of React's\n * `buttonVariants` from `ui/button.tsx`. Exported so non-DOM contexts\n * (e.g. dynamic class assignment) can compute the same string.\n */\nexport function buttonVariants(\n options: {\n variant?: ButtonVariant;\n size?: ButtonSize;\n className?: string;\n } = {},\n): string {\n const { variant = 'default', size = 'default', className } = options;\n return cn(\n BUTTON_BASE,\n BUTTON_VARIANTS[variant],\n BUTTON_SIZES[size],\n className,\n );\n}\n\n/**\n * Applies the jsonjoy button styling to a native `<button>` or `<a>`.\n *\n * Idiomatic usage:\n * ```html\n * <button libJsonjoyButton variant=\"destructive\" size=\"sm\">Delete</button>\n * ```\n *\n * Native attributes (`type`, `disabled`, `form`, `aria-*`) are kept on the\n * host element — this directive only contributes Tailwind classes.\n */\n@Directive({\n selector: 'button[libJsonjoyButton], a[libJsonjoyButton]',\n standalone: true,\n host: {\n '[class]': 'classes()',\n },\n})\nexport class ButtonDirective {\n readonly variant = input<ButtonVariant>('default');\n readonly size = input<ButtonSize>('default');\n\n protected readonly classes = computed(() =>\n buttonVariants({ variant: this.variant(), size: this.size() }),\n );\n}\n","import { Directive } from '@angular/core';\n\nconst INPUT_CLASSES =\n 'flex h-10 w-full rounded-md border border-input bg-[var(--jsonjoy-color-input-bg)] px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm';\n\n/**\n * Applies the jsonjoy text-input styling to a native `<input>`. Mirrors\n * React's `ui/input.tsx` (which is a styled native input). Value binding\n * uses Angular's standard form mechanisms: `[ngModel]`, `[formControl]`,\n * `[value]` + `(input)` — this directive only contributes classes.\n */\n@Directive({\n selector: 'input[libJsonjoyInput]',\n standalone: true,\n host: {\n class: INPUT_CLASSES,\n },\n})\nexport class InputDirective {}\n","import { Directive } from '@angular/core';\n\nconst LABEL_CLASSES =\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70';\n\n/**\n * Applies the jsonjoy label styling to a native `<label>`. Mirrors\n * React's `ui/label.tsx`. Use the standard `for` attribute (Angular\n * template syntax handles it natively) or `for=\"elementId\"` to link\n * to the labelled control.\n */\n@Directive({\n selector: 'label[libJsonjoyLabel]',\n standalone: true,\n host: {\n class: LABEL_CLASSES,\n },\n})\nexport class LabelDirective {}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n model,\n} from '@angular/core';\n\nimport type { Translation } from '../../i18n/translation-keys';\nimport { cn } from '../../internal/cn';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport type { SchemaEditorType } from '../../types/json-schema';\n\ninterface TypeOption {\n readonly id: SchemaEditorType;\n readonly label: keyof Translation;\n readonly description: keyof Translation;\n readonly group: 'basic' | 'composition';\n}\n\nconst TYPE_OPTIONS: readonly TypeOption[] = [\n {\n id: 'string',\n label: 'fieldTypeTextLabel',\n description: 'fieldTypeTextDescription',\n group: 'basic',\n },\n {\n id: 'number',\n label: 'fieldTypeNumberLabel',\n description: 'fieldTypeNumberDescription',\n group: 'basic',\n },\n {\n id: 'boolean',\n label: 'fieldTypeBooleanLabel',\n description: 'fieldTypeBooleanDescription',\n group: 'basic',\n },\n {\n id: 'object',\n label: 'fieldTypeObjectLabel',\n description: 'fieldTypeObjectDescription',\n group: 'basic',\n },\n {\n id: 'array',\n label: 'fieldTypeArrayLabel',\n description: 'fieldTypeArrayDescription',\n group: 'basic',\n },\n {\n id: 'anyOf',\n label: 'schemaTypeAnyOf',\n description: 'anyOfDescription',\n group: 'composition',\n },\n {\n id: 'oneOf',\n label: 'schemaTypeOneOf',\n description: 'oneOfDescription',\n group: 'composition',\n },\n {\n id: 'allOf',\n label: 'schemaTypeAllOf',\n description: 'allOfDescription',\n group: 'composition',\n },\n {\n id: '$ref',\n label: 'schemaTypeRef',\n description: 'fieldTypeRefDescription',\n group: 'composition',\n },\n];\n\n@Component({\n selector: 'lib-jsonjoy-schema-type-selector',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div\n [id]=\"inputId()\"\n class=\"grid grid-cols-1 xs:grid-cols-2 md:grid-cols-3 gap-2\"\n >\n @for (type of typeOptions; track type.id) {\n <button\n type=\"button\"\n [title]=\"t()[type.description]\"\n [class]=\"tileClasses(type)\"\n (click)=\"value.set(type.id)\"\n >\n <div class=\"font-medium text-sm\">{{ t()[type.label] }}</div>\n <div class=\"text-xs text-muted-foreground line-clamp-1\">\n {{ t()[type.description] }}\n </div>\n </button>\n }\n </div>\n `,\n})\nexport class SchemaTypeSelectorComponent {\n readonly inputId = input<string | undefined>(undefined);\n readonly value = model.required<SchemaEditorType>();\n\n protected readonly typeOptions = TYPE_OPTIONS;\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n protected tileClasses(type: TypeOption): string {\n const selected = this.value() === type.id;\n return cn(\n 'p-2.5 rounded-lg border-2 text-left transition-all duration-200',\n selected\n ? 'border-primary bg-primary/5 shadow-xs'\n : type.group === 'composition'\n ? 'border-dashed border-border hover:border-primary/40 hover:bg-secondary'\n : 'border-border hover:border-primary/30 hover:bg-secondary',\n );\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport type { NewField, SchemaEditorType } from '../../types/json-schema';\nimport { BadgeDirective } from '../ui/badge.directive';\nimport { ButtonDirective } from '../ui/button.directive';\nimport { InputDirective } from '../ui/input.directive';\nimport { LabelDirective } from '../ui/label.directive';\nimport { SchemaTypeSelectorComponent } from './schema-type-selector.component';\n\nlet nextAddFieldId = 0;\n\n@Component({\n selector: 'lib-jsonjoy-add-field-button',\n standalone: true,\n imports: [\n BadgeDirective,\n ButtonDirective,\n InputDirective,\n LabelDirective,\n SchemaTypeSelectorComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy inline-block' },\n template: `\n <button\n libJsonjoyButton\n type=\"button\"\n [variant]=\"variant() === 'primary' ? 'default' : 'outline'\"\n size=\"sm\"\n class=\"flex items-center gap-1.5 group\"\n (click)=\"openDialog()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"group-hover:scale-110 transition-transform\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M8 12h8\" />\n <path d=\"M12 8v8\" />\n </svg>\n <span>{{ t().fieldAddNewButton }}</span>\n </button>\n\n <dialog\n #dialogRef\n class=\"md:max-w-[1200px] max-h-[85vh] w-[95vw] m-auto p-4 sm:p-6 jsonjoy rounded-lg border bg-background shadow-lg backdrop:bg-black/40\"\n (close)=\"onDialogClose()\"\n >\n <div class=\"mb-4\">\n <div class=\"text-xl flex flex-wrap items-center gap-2\">\n {{ t().fieldAddNewLabel }}\n <span libJsonjoyBadge variant=\"secondary\" class=\"text-xs\">\n {{ t().fieldAddNewBadge }}\n </span>\n </div>\n <p class=\"text-sm text-muted-foreground\">\n {{ t().fieldAddNewDescription }}\n </p>\n </div>\n\n <form class=\"space-y-6\" [id]=\"formId\" (submit)=\"onSubmit($event)\">\n <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n <div class=\"space-y-4 min-w-[280px]\">\n <div>\n <div class=\"flex items-center justify-between gap-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"fieldNameId\"\n class=\"text-sm font-medium\"\n >\n {{\n useRegex() ? t().fieldNameRegexLabel : t().fieldNameLabel\n }}\n </label>\n <button\n type=\"button\"\n class=\"text-xs text-muted-foreground hover:text-foreground underline shrink-0\"\n (click)=\"useRegex.set(!useRegex())\"\n >\n {{\n useRegex()\n ? t().fieldNameUseExactName\n : t().fieldNameUseRegex\n }}\n </button>\n </div>\n <input\n libJsonjoyInput\n [id]=\"fieldNameId\"\n [value]=\"fieldName()\"\n [placeholder]=\"\n useRegex()\n ? t().fieldNameRegexPlaceholder\n : t().fieldNamePlaceholder\n \"\n class=\"font-mono text-sm w-full mt-1.5\"\n [class.border-destructive]=\"!!regexError()\"\n required\n (input)=\"fieldName.set($any($event.target).value)\"\n />\n @if (regexError()) {\n <p class=\"text-xs text-destructive mt-1\">\n {{ t().fieldNameRegexError }}\n </p>\n } @else if (useRegex()) {\n <p class=\"text-xs text-muted-foreground mt-1\">\n {{ t().fieldNameRegexHelp }}\n </p>\n }\n </div>\n\n <div>\n <label\n libJsonjoyLabel\n [attr.for]=\"fieldDescId\"\n class=\"block text-sm font-medium\"\n >\n {{ t().fieldDescription }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"fieldDescId\"\n [value]=\"fieldDesc()\"\n [placeholder]=\"t().fieldDescriptionPlaceholder\"\n class=\"text-sm w-full mt-1.5\"\n (input)=\"fieldDesc.set($any($event.target).value)\"\n />\n </div>\n\n @if (!useRegex()) {\n <div\n class=\"flex items-center gap-3 p-3 rounded-lg border bg-muted/50\"\n >\n <input\n type=\"checkbox\"\n [id]=\"fieldRequiredId\"\n [checked]=\"fieldRequired()\"\n class=\"rounded border-input shrink-0\"\n (change)=\"fieldRequired.set($any($event.target).checked)\"\n />\n <label\n libJsonjoyLabel\n [attr.for]=\"fieldRequiredId\"\n class=\"text-sm\"\n >\n {{ t().fieldRequiredLabel }}\n </label>\n </div>\n }\n </div>\n\n <div class=\"space-y-4 min-w-[280px]\">\n <div>\n <label\n libJsonjoyLabel\n [attr.for]=\"fieldTypeId\"\n class=\"block text-sm font-medium mb-1.5\"\n >\n {{ t().fieldType }}\n </label>\n <lib-jsonjoy-schema-type-selector\n [inputId]=\"fieldTypeId\"\n [(value)]=\"fieldType\"\n />\n </div>\n </div>\n </div>\n\n <div class=\"mt-6 gap-2 flex flex-wrap justify-end\">\n <button\n libJsonjoyButton\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n (click)=\"closeDialog()\"\n >\n {{ t().fieldAddNewCancel }}\n </button>\n <button\n libJsonjoyButton\n type=\"submit\"\n size=\"sm\"\n [attr.form]=\"formId\"\n [disabled]=\"!canSubmit()\"\n >\n {{ t().fieldAddNewConfirm }}\n </button>\n </div>\n </form>\n </dialog>\n `,\n})\nexport class AddFieldButtonComponent {\n readonly variant = input<'primary' | 'secondary'>('primary');\n readonly autoFocus = input<boolean>(true);\n\n readonly addField = output<NewField>();\n readonly addPatternField = output<NewField>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n private readonly idSeq = ++nextAddFieldId;\n protected readonly fieldNameId = `jjadd-${this.idSeq}-name`;\n protected readonly fieldDescId = `jjadd-${this.idSeq}-desc`;\n protected readonly fieldRequiredId = `jjadd-${this.idSeq}-required`;\n protected readonly fieldTypeId = `jjadd-${this.idSeq}-type`;\n protected readonly formId = `jjadd-${this.idSeq}-form`;\n\n protected readonly fieldName = signal('');\n protected readonly fieldType = signal<SchemaEditorType>('string');\n protected readonly fieldDesc = signal('');\n protected readonly fieldRequired = signal(false);\n protected readonly useRegex = signal(false);\n\n protected readonly regexError = computed(() => {\n if (!this.useRegex()) return false;\n const pattern = this.fieldName().trim();\n if (!pattern) return false;\n try {\n new RegExp(pattern);\n return false;\n } catch {\n return true;\n }\n });\n\n protected readonly canSubmit = computed(\n () => this.fieldName().trim().length > 0 && !this.regexError(),\n );\n\n private readonly dialogRef =\n viewChild<ElementRef<HTMLDialogElement>>('dialogRef');\n\n protected openDialog(): void {\n this.dialogRef()?.nativeElement.showModal();\n }\n\n protected closeDialog(): void {\n this.dialogRef()?.nativeElement.close();\n }\n\n protected onDialogClose(): void {\n this.resetForm();\n }\n\n protected onSubmit(event: Event): void {\n event.preventDefault();\n const name = this.fieldName().trim();\n if (!name) return;\n if (this.useRegex()) {\n if (this.regexError()) return;\n this.addPatternField.emit({\n name,\n type: this.fieldType(),\n description: this.fieldDesc(),\n required: false,\n });\n } else {\n this.addField.emit({\n name,\n type: this.fieldType(),\n description: this.fieldDesc(),\n required: this.fieldRequired(),\n });\n }\n this.closeDialog();\n }\n\n private resetForm(): void {\n this.fieldName.set('');\n this.fieldType.set('string');\n this.fieldDesc.set('');\n this.fieldRequired.set(false);\n this.useRegex.set(false);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\n\nimport { cn, getTypeColor, getTypeLabel } from '../../internal/cn';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport type { SchemaEditorType } from '../../types/json-schema';\n\nconst TYPE_OPTIONS: readonly SchemaEditorType[] = [\n 'string',\n 'number',\n 'boolean',\n 'object',\n 'array',\n 'null',\n 'anyOf',\n 'oneOf',\n 'allOf',\n '$ref',\n] as const;\n\n@Component({\n selector: 'lib-jsonjoy-type-dropdown',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'jsonjoy relative inline-block',\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n <button type=\"button\" [class]=\"triggerClasses()\" (click)=\"toggle($event)\">\n <span>{{ getTypeLabel(t(), value()) }}</span>\n @if (!readOnly()) {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"ml-1\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n }\n </button>\n\n @if (isOpen()) {\n <div\n class=\"absolute z-50 mt-1 w-[140px] rounded-md border bg-popover shadow-lg animate-in fade-in-50 zoom-in-95\"\n >\n <div class=\"py-1\">\n @for (type of typeOptions; track type) {\n <button\n type=\"button\"\n [class]=\"itemClasses(type)\"\n (click)=\"select(type, $event)\"\n >\n <span [class]=\"'px-2 py-0.5 rounded ' + getTypeColor(type)\">\n {{ getTypeLabel(t(), type) }}\n </span>\n @if (value() === type) {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n }\n </button>\n }\n </div>\n </div>\n }\n `,\n})\nexport class TypeDropdownComponent {\n readonly value = model.required<SchemaEditorType>();\n readonly readOnly = input.required<boolean>();\n readonly className = input<string | undefined>(undefined);\n\n protected readonly typeOptions = TYPE_OPTIONS;\n protected readonly getTypeColor = getTypeColor;\n protected readonly getTypeLabel = getTypeLabel;\n\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n protected readonly isOpen = signal(false);\n\n protected readonly triggerClasses = computed(() =>\n cn(\n 'text-xs px-3.5 py-1.5 rounded-md font-medium text-center flex items-center justify-between',\n getTypeColor(this.value()),\n 'hover:shadow-xs hover:ring-1 hover:ring-ring/30 active:scale-95 transition-all',\n this.readOnly() ? '' : 'w-[92px]',\n this.className(),\n ),\n );\n\n protected itemClasses(type: SchemaEditorType): string {\n return cn(\n 'w-full text-left px-3 py-1.5 text-xs flex items-center justify-between',\n 'hover:bg-muted/50 transition-colors',\n this.value() === type && 'font-medium',\n );\n }\n\n protected toggle(event: MouseEvent): void {\n event.stopPropagation();\n if (this.readOnly()) return;\n this.isOpen.update((v) => !v);\n }\n\n protected select(type: SchemaEditorType, event: MouseEvent): void {\n event.stopPropagation();\n this.value.set(type);\n this.isOpen.set(false);\n }\n\n protected onDocumentClick(event: MouseEvent): void {\n if (!this.isOpen()) return;\n const target = event.target as Node | null;\n if (target && !this.elementRef.nativeElement.contains(target)) {\n this.isOpen.set(false);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n} from '@angular/core';\n\n@Component({\n selector: 'lib-jsonjoy-switch',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class:\n 'jsonjoy peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\n role: 'switch',\n tabindex: '0',\n '[attr.aria-checked]': 'checked()',\n '[attr.data-state]': 'dataState()',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.disabled]': 'disabled() ? \"\" : null',\n '(click)': 'onClick()',\n '(keydown.space)': 'onKeydownActivate($event)',\n '(keydown.enter)': 'onKeydownActivate($event)',\n },\n template: `\n <span\n class=\"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\"\n [attr.data-state]=\"dataState()\"\n ></span>\n `,\n})\nexport class SwitchComponent {\n readonly checked = model<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly ariaLabel = input<string | undefined>(undefined);\n\n protected readonly dataState = computed(() =>\n this.checked() ? 'checked' : 'unchecked',\n );\n\n protected onClick(): void {\n if (this.disabled()) return;\n this.checked.update((v) => !v);\n }\n\n protected onKeydownActivate(event: Event): void {\n event.preventDefault();\n this.onClick();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n linkedSignal,\n output,\n} from '@angular/core';\n\nimport { cn } from '../../internal/cn';\nimport { getArrayItemsSchema } from '../../internal/schema-editor';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n type SchemaEditorType,\n asObjectSchema,\n getEditorType,\n isBooleanSchema,\n withObjectSchema,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport { TypeDropdownComponent } from '../schema-editor-internal/type-dropdown.component';\nimport { TypeEditorComponent } from '../schema-editor-internal/type-editor.component';\nimport type { EnumChangeContext } from '../schema-editor-internal/type-editor.component';\nimport { InputDirective } from '../ui/input.directive';\nimport { LabelDirective } from '../ui/label.directive';\nimport { SwitchComponent } from '../ui/switch.component';\n\nlet nextArrayId = 0;\n\n@Component({\n selector: 'lib-jsonjoy-array-editor',\n standalone: true,\n imports: [\n InputDirective,\n LabelDirective,\n SwitchComponent,\n TypeDropdownComponent,\n forwardRef(() => TypeEditorComponent),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div class=\"space-y-6\">\n @if (!readOnly() || !!maxItems() || !!minItems()) {\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n @if (!readOnly() || !!minItems()) {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"minItemsId\"\n [class.text-destructive]=\"!!minMaxError() || !!minItemsError()\"\n >\n {{ t().arrayMinimumLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"minItemsId\"\n type=\"number\"\n min=\"0\"\n [value]=\"minItems() ?? ''\"\n [placeholder]=\"t().arrayMinimumPlaceholder\"\n [class]=\"numberInputClasses(!!minMaxError())\"\n (input)=\"onMinItemsInput($event)\"\n (blur)=\"commitValidation()\"\n />\n </div>\n }\n @if (!readOnly() || !!maxItems()) {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"maxItemsId\"\n [class.text-destructive]=\"!!minMaxError() || !!maxItemsError()\"\n >\n {{ t().arrayMaximumLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"maxItemsId\"\n type=\"number\"\n min=\"0\"\n [value]=\"maxItems() ?? ''\"\n [placeholder]=\"t().arrayMaximumPlaceholder\"\n [class]=\"numberInputClasses(!!minMaxError())\"\n (input)=\"onMaxItemsInput($event)\"\n (blur)=\"commitValidation()\"\n />\n </div>\n }\n @if (!!minMaxError() || !!minItemsError() || !!maxItemsError()) {\n <div\n class=\"text-xs text-destructive italic md:col-span-2 whitespace-pre-line\"\n >\n {{ combinedRangeError() }}\n </div>\n }\n </div>\n }\n\n @if (!readOnly() || uniqueItems()) {\n <div class=\"flex items-center space-x-2\">\n <lib-jsonjoy-switch\n [id]=\"uniqueItemsId\"\n [checked]=\"uniqueItems()\"\n [ariaLabel]=\"t().arrayForceUniqueItemsLabel\"\n (checkedChange)=\"onUniqueItemsChange($event)\"\n />\n <label\n libJsonjoyLabel\n [attr.for]=\"uniqueItemsId\"\n class=\"cursor-pointer\"\n >\n {{ t().arrayForceUniqueItemsLabel }}\n </label>\n </div>\n }\n\n <div [class]=\"itemSectionClasses()\">\n <div class=\"flex items-center justify-between mb-4\">\n <label libJsonjoyLabel>{{ t().arrayItemTypeLabel }}</label>\n <lib-jsonjoy-type-dropdown\n [value]=\"itemType()\"\n [readOnly]=\"readOnly()\"\n (valueChange)=\"onItemTypeChange($event)\"\n />\n </div>\n\n <lib-jsonjoy-type-editor\n [schema]=\"itemsSchema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"itemSchemaKey()\"\n [depth]=\"depth() + 1\"\n (schemaChange)=\"onItemSchemaChange($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n </div>\n </div>\n `,\n})\nexport class ArrayEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly schemaKey = input<string | undefined>(undefined);\n readonly depth = input<number>(0);\n\n readonly schemaChange = output<ObjectJsonSchema>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n private readonly idSeq = ++nextArrayId;\n protected readonly minItemsId = `jjarr-${this.idSeq}-min`;\n protected readonly maxItemsId = `jjarr-${this.idSeq}-max`;\n protected readonly uniqueItemsId = `jjarr-${this.idSeq}-unique`;\n\n protected readonly minItems = linkedSignal<number | undefined>(() =>\n withObjectSchema(this.schema(), (s) => s.minItems, undefined),\n );\n protected readonly maxItems = linkedSignal<number | undefined>(() =>\n withObjectSchema(this.schema(), (s) => s.maxItems, undefined),\n );\n protected readonly uniqueItems = linkedSignal<boolean>(() =>\n withObjectSchema(this.schema(), (s) => s.uniqueItems ?? false, false),\n );\n\n protected readonly itemsSchema = computed<JsonSchema>(\n () => getArrayItemsSchema(this.schema()) ?? { type: 'string' },\n );\n\n protected readonly itemSchemaKey = computed(() => {\n const key = this.schemaKey();\n return key ? `${key}[]` : undefined;\n });\n\n protected readonly itemType = computed<SchemaEditorType>(() =>\n getEditorType(this.itemsSchema()),\n );\n\n private readonly errorsByPath = computed(() => {\n const errors = this.validationNode()?.validation.errors ?? [];\n return errors;\n });\n\n protected readonly minMaxError = computed(\n () => this.errorsByPath().find((err) => err.path[0] === 'minmax')?.message,\n );\n\n protected readonly minItemsError = computed(\n () =>\n this.errorsByPath().find((err) => err.path[0] === 'minItems')?.message,\n );\n\n protected readonly maxItemsError = computed(\n () =>\n this.errorsByPath().find((err) => err.path[0] === 'maxItems')?.message,\n );\n\n protected readonly combinedRangeError = computed(() => {\n const parts = [\n this.minMaxError(),\n this.minItemsError() ?? this.maxItemsError(),\n ].filter(Boolean);\n return parts.join('\\n');\n });\n\n protected readonly itemSectionClasses = computed(() =>\n cn(\n 'space-y-2 pt-4 border-border/40',\n !this.readOnly() ||\n this.minItems() ||\n this.maxItems() ||\n this.uniqueItems()\n ? 'border-t'\n : null,\n ),\n );\n\n protected numberInputClasses(hasMinMaxError: boolean): string {\n return cn('h-8', hasMinMaxError && 'border-destructive');\n }\n\n protected onMinItemsInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n this.minItems.set(raw === '' ? undefined : Number(raw));\n }\n\n protected onMaxItemsInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n this.maxItems.set(raw === '' ? undefined : Number(raw));\n }\n\n protected commitValidation(): void {\n this.schemaChange.emit(this.buildValidationProps());\n }\n\n protected onUniqueItemsChange(value: boolean): void {\n this.uniqueItems.set(value);\n this.schemaChange.emit(this.buildValidationProps({ uniqueItems: value }));\n }\n\n protected onItemSchemaChange(updatedItem: ObjectJsonSchema): void {\n const schema = this.schema();\n const base: ObjectJsonSchema = {\n type: 'array',\n ...(isBooleanSchema(schema) ? {} : schema),\n items: updatedItem,\n };\n this.schemaChange.emit(base);\n }\n\n protected onItemTypeChange(newType: SchemaEditorType): void {\n const items = this.itemsSchema();\n const rest = stripTypeAndCombinators(asObjectSchema(items));\n if (newType === '$ref') {\n this.onItemSchemaChange({ $ref: '' });\n return;\n }\n if (newType === 'anyOf' || newType === 'oneOf' || newType === 'allOf') {\n const initial =\n newType === 'allOf'\n ? { allOf: [{ type: 'object' as const }] }\n : {\n [newType]: [\n { type: 'string' as const },\n { type: 'number' as const },\n ],\n };\n this.onItemSchemaChange({ ...rest, ...initial });\n } else {\n this.onItemSchemaChange({ ...rest, type: newType });\n }\n }\n\n private buildValidationProps(\n overrides: {\n minItems?: number;\n maxItems?: number;\n uniqueItems?: boolean;\n } = {},\n ): ObjectJsonSchema {\n const schema = this.schema();\n const next: ObjectJsonSchema = {\n type: 'array',\n ...(isBooleanSchema(schema) ? {} : schema),\n minItems: overrides.minItems ?? this.minItems(),\n maxItems: overrides.maxItems ?? this.maxItems(),\n uniqueItems: overrides.uniqueItems || undefined,\n };\n\n if (next.items === undefined) {\n next.items = this.itemsSchema();\n }\n\n const cleaned: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(next)) {\n if (value !== undefined) cleaned[key] = value;\n }\n return cleaned as ObjectJsonSchema;\n }\n}\n\nfunction stripTypeAndCombinators(schema: ObjectJsonSchema): ObjectJsonSchema {\n const {\n type: _type,\n $ref: _ref,\n anyOf: _anyOf,\n oneOf: _oneOf,\n allOf: _allOf,\n ...rest\n } = schema;\n return rest as ObjectJsonSchema;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\n\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n isBooleanSchema,\n withObjectSchema,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport type { EnumChangeContext } from '../schema-editor-internal/type-editor.component';\nimport { LabelDirective } from '../ui/label.directive';\nimport { SwitchComponent } from '../ui/switch.component';\n\nlet nextBooleanEditorId = 0;\n\n@Component({\n selector: 'lib-jsonjoy-boolean-editor',\n standalone: true,\n imports: [LabelDirective, SwitchComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div class=\"space-y-4\">\n @if (readOnly() && !hasEnum()) {\n <p class=\"text-sm text-muted-foreground italic\">\n {{ t().booleanNoConstraint }}\n </p>\n }\n\n @if (!readOnly() || !allowsTrue() || !allowsFalse()) {\n <div class=\"space-y-2 pt-2\">\n @if (!readOnly() || hasEnum()) {\n <label libJsonjoyLabel>{{ t().booleanAllowedValuesLabel }}</label>\n\n <div class=\"space-y-3\">\n <div class=\"flex items-center space-x-2\">\n <lib-jsonjoy-switch\n [checked]=\"allowsTrue()\"\n [disabled]=\"readOnly()\"\n [attr.id]=\"allowTrueId\"\n (checkedChange)=\"handleAllowedChange(true, $event)\"\n />\n <label\n libJsonjoyLabel\n [attr.for]=\"allowTrueId\"\n class=\"cursor-pointer\"\n >\n {{ t().booleanAllowTrueLabel }}\n </label>\n </div>\n\n <div class=\"flex items-center space-x-2\">\n <lib-jsonjoy-switch\n [checked]=\"allowsFalse()\"\n [disabled]=\"readOnly()\"\n [attr.id]=\"allowFalseId\"\n (checkedChange)=\"handleAllowedChange(false, $event)\"\n />\n <label\n libJsonjoyLabel\n [attr.for]=\"allowFalseId\"\n class=\"cursor-pointer\"\n >\n {{ t().booleanAllowFalseLabel }}\n </label>\n </div>\n </div>\n }\n\n @if (!allowsTrue() && !allowsFalse()) {\n <p class=\"text-xs text-amber-600 mt-2\">\n {{ t().booleanNeitherWarning }}\n </p>\n }\n </div>\n }\n </div>\n `,\n})\nexport class BooleanEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly schemaKey = input<string | undefined>(undefined);\n readonly depth = input<number>(0);\n\n readonly schemaChange = output<ObjectJsonSchema>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n private readonly idSeq = ++nextBooleanEditorId;\n protected readonly allowTrueId = `jjbe-${this.idSeq}-true`;\n protected readonly allowFalseId = `jjbe-${this.idSeq}-false`;\n\n protected readonly enumValues = computed<readonly boolean[] | null>(() =>\n withObjectSchema(\n this.schema(),\n (s) => (s.enum as boolean[] | undefined) ?? null,\n null,\n ),\n );\n\n protected readonly hasRestrictions = computed(() =>\n Array.isArray(this.enumValues()),\n );\n\n protected readonly allowsTrue = computed(() => {\n const restricted = this.hasRestrictions();\n if (!restricted) return true;\n return this.enumValues()?.includes(true) ?? false;\n });\n\n protected readonly allowsFalse = computed(() => {\n const restricted = this.hasRestrictions();\n if (!restricted) return true;\n return this.enumValues()?.includes(false) ?? false;\n });\n\n protected readonly hasEnum = computed(() => {\n const values = this.enumValues();\n return Array.isArray(values) && values.length > 0;\n });\n\n protected handleAllowedChange(value: boolean, allowed: boolean): void {\n const restricted = this.hasRestrictions();\n const current = this.enumValues();\n let nextEnum: boolean[] | undefined;\n let action: 'add' | 'delete' | null = null;\n\n if (allowed) {\n if (!restricted) return;\n if (current?.includes(value)) return;\n nextEnum = current ? [...current, value] : [value];\n action = 'add';\n if (nextEnum.includes(true) && nextEnum.includes(false)) {\n nextEnum = undefined;\n }\n } else {\n if (restricted && !current?.includes(value)) return;\n nextEnum = [!value];\n action = 'delete';\n }\n\n const currentSchema = this.schema();\n const base: ObjectJsonSchema = isBooleanSchema(currentSchema)\n ? { type: 'boolean' }\n : { ...currentSchema, type: 'boolean' };\n if (nextEnum) {\n this.schemaChange.emit({ ...base, enum: nextEnum });\n } else {\n const { enum: _enum, ...rest } = base;\n this.schemaChange.emit(rest as ObjectJsonSchema);\n }\n\n if (action === 'add' && nextEnum) {\n this.addEnum.emit({\n value,\n index: nextEnum.indexOf(value),\n schemaKey: this.schemaKey(),\n });\n } else if (action === 'add') {\n this.addEnum.emit({\n value,\n index: current?.length ?? 0,\n schemaKey: this.schemaKey(),\n });\n } else if (action === 'delete') {\n const fallbackIndex =\n current?.indexOf(value) ?? [true, false].indexOf(value);\n this.deleteEnum.emit({\n value,\n index: Math.max(fallbackIndex, 0),\n schemaKey: this.schemaKey(),\n });\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n linkedSignal,\n output,\n signal,\n} from '@angular/core';\n\nimport type { Translation } from '../../i18n/translation-keys';\nimport { cn } from '../../internal/cn';\nimport { DEFAULT_SCHEMAS } from '../../internal/schema-editor';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n type SchemaEditorType,\n type SchemaType,\n getEditorType,\n getSchemaDescription,\n isBooleanSchema,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport { TypeDropdownComponent } from '../schema-editor-internal/type-dropdown.component';\nimport { TypeEditorComponent } from '../schema-editor-internal/type-editor.component';\nimport type { EnumChangeContext } from '../schema-editor-internal/type-editor.component';\nimport { InputDirective } from '../ui/input.directive';\n\nexport type CombinatorKind = 'anyOf' | 'oneOf' | 'allOf';\n\ninterface CombinatorStrings {\n description: string;\n addButton: string;\n removeButton: string;\n itemLabel: string;\n noItems: string;\n}\n\nfunction getCombinatorStrings(\n t: Translation,\n combinator: CombinatorKind,\n): CombinatorStrings {\n switch (combinator) {\n case 'anyOf':\n return {\n description: t.anyOfDescription,\n addButton: t.anyOfAddOption,\n removeButton: t.anyOfRemoveOption,\n itemLabel: t.anyOfOptionLabel,\n noItems: t.anyOfNoOptions,\n };\n case 'oneOf':\n return {\n description: t.oneOfDescription,\n addButton: t.oneOfAddOption,\n removeButton: t.oneOfRemoveOption,\n itemLabel: t.oneOfOptionLabel,\n noItems: t.oneOfNoOptions,\n };\n case 'allOf':\n return {\n description: t.allOfDescription,\n addButton: t.allOfAddSchema,\n removeButton: t.allOfRemoveSchema,\n itemLabel: t.allOfSchemaLabel,\n noItems: t.allOfNoSchemas,\n };\n }\n}\n\ninterface OptionRow {\n readonly id: string;\n readonly index: number;\n readonly schema: JsonSchema;\n readonly description: string;\n readonly type: SchemaEditorType;\n readonly isExpanded: boolean;\n readonly isDescFocused: boolean;\n}\n\nlet idCounter = 0;\nconst nextId = () => `combinator-${++idCounter}`;\n\n@Component({\n selector: 'lib-jsonjoy-combinator-editor',\n standalone: true,\n imports: [\n InputDirective,\n TypeDropdownComponent,\n forwardRef(() => TypeEditorComponent),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div class=\"space-y-3\">\n <p class=\"text-xs text-muted-foreground italic\">\n {{ strings().description }}\n </p>\n\n @if (options().length === 0) {\n <div\n class=\"text-sm text-muted-foreground italic p-2 text-center border rounded-md\"\n >\n {{ strings().noItems }}\n </div>\n } @else {\n <div class=\"space-y-2\">\n @for (row of rows(); track row.id) {\n <div [class]=\"rowClasses()\">\n <div\n class=\"flex flex-wrap items-center gap-2 px-3 py-2 sm:flex-nowrap\"\n >\n <button\n type=\"button\"\n class=\"flex shrink-0 items-center gap-2 text-left text-xs font-medium text-muted-foreground transition-colors hover:text-foreground\"\n (click)=\"toggleExpanded(row.id)\"\n >\n @if (row.isExpanded) {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n } @else {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n }\n <span class=\"shrink-0\">\n {{ strings().itemLabel }} {{ row.index + 1 }}\n </span>\n </button>\n\n @if (readOnly()) {\n @if (row.description) {\n <span\n class=\"flex-1 truncate px-2 py-0.5 text-left text-xs text-muted-foreground italic\"\n >\n {{ row.description }}\n </span>\n }\n } @else if (row.isDescFocused) {\n <input\n libJsonjoyInput\n [attr.aria-label]=\"t().propertyDescriptionPlaceholder\"\n class=\"z-10 min-w-40 flex-1 text-xs\"\n [placeholder]=\"t().propertyDescriptionPlaceholder\"\n [value]=\"row.description\"\n [autofocus]=\"true\"\n (focus)=\"selectAll($event)\"\n (input)=\"onDescriptionInput(row.index, $event)\"\n (blur)=\"onDescriptionBlur(row.index, $event)\"\n (keydown.enter)=\"onDescriptionEnter($event)\"\n />\n } @else if (row.description) {\n <button\n type=\"button\"\n class=\"mr-2 min-w-0 flex-1 cursor-text truncate rounded-sm px-2 py-0.5 text-left text-xs text-muted-foreground italic transition-all -mx-0.5 hover:bg-secondary/30 hover:ring-1 hover:ring-ring/20 hover:shadow-xs\"\n (click)=\"focusDescription(row.id)\"\n (keydown.enter)=\"focusDescription(row.id)\"\n >\n {{ row.description }}\n </button>\n } @else {\n <button\n type=\"button\"\n class=\"mr-2 min-w-0 flex-1 cursor-text truncate rounded-sm px-2 py-0.5 text-left text-xs text-muted-foreground/50 italic opacity-0 transition-all -mx-0.5 hover:bg-secondary/30 hover:ring-1 hover:ring-ring/20 hover:shadow-xs group-hover:opacity-100\"\n (click)=\"focusDescription(row.id)\"\n (keydown.enter)=\"focusDescription(row.id)\"\n >\n {{ t().propertyDescriptionButton }}\n </button>\n }\n\n <div class=\"flex shrink-0 items-center gap-2 sm:ml-auto\">\n <lib-jsonjoy-type-dropdown\n [value]=\"row.type\"\n [readOnly]=\"readOnly()\"\n (valueChange)=\"onOptionTypeChange(row.index, $event)\"\n />\n @if (!readOnly()) {\n <button\n type=\"button\"\n class=\"p-1 rounded-md hover:bg-secondary hover:text-destructive transition-colors text-muted-foreground\"\n [attr.aria-label]=\"strings().removeButton\"\n (click)=\"onRemoveOption(row.index)\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n }\n </div>\n </div>\n\n @if (row.isExpanded) {\n <div class=\"pt-1 pb-2 px-3 border-t animate-in\">\n <lib-jsonjoy-type-editor\n [schema]=\"row.schema\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"\n validationNode()?.children?.[childKey(row.index)]\n \"\n [schemaKey]=\"optionSchemaKey(row.index)\"\n [depth]=\"depth() + 1\"\n (schemaChange)=\"onOptionSchemaChange(row.index, $event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n </div>\n }\n </div>\n }\n </div>\n }\n\n @if (!readOnly()) {\n <button\n type=\"button\"\n class=\"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors px-2 py-1 rounded-md hover:bg-secondary\"\n (click)=\"onAddOption()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M8 12h8\" />\n <path d=\"M12 8v8\" />\n </svg>\n {{ strings().addButton }}\n </button>\n }\n </div>\n `,\n})\nexport class CombinatorEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly combinator = input.required<CombinatorKind>();\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly schemaKey = input<string | undefined>(undefined);\n readonly depth = input<number>(0);\n\n readonly schemaChange = output<ObjectJsonSchema>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n protected readonly strings = computed(() =>\n getCombinatorStrings(this.t(), this.combinator()),\n );\n\n protected readonly options = computed<readonly JsonSchema[]>(() => {\n const schema = this.schema();\n if (isBooleanSchema(schema)) return [];\n return schema[this.combinator()] ?? [];\n });\n\n // Stable per-row ids: preserve each slot's id across content edits (so an\n // expanded row stays expanded when its schema changes); only mint a new id\n // for a newly added slot, and drop trailing ids when slots are removed.\n protected readonly ids = linkedSignal<\n readonly JsonSchema[],\n readonly string[]\n >({\n source: this.options,\n computation: (options, previous) =>\n options.map((_, index) => previous?.value[index] ?? nextId()),\n });\n\n protected readonly expandedId = signal<string | null>(null);\n protected readonly descFocusId = signal<string | null>(null);\n\n protected readonly rows = computed<readonly OptionRow[]>(() => {\n const ids = this.ids();\n const expandedId = this.expandedId();\n const descFocusId = this.descFocusId();\n return this.options().map((option, index) => ({\n id: ids[index] ?? `fallback-${index}`,\n index,\n schema: option,\n description: getSchemaDescription(option),\n type: getEditorType(option),\n isExpanded: expandedId === ids[index],\n isDescFocused: descFocusId === ids[index],\n }));\n });\n\n protected readonly rowClasses = computed(() =>\n cn(\n 'group rounded-lg border border-border transition-all duration-200',\n this.depth() > 0 && 'ml-0 sm:ml-4 border-l-2 border-l-border',\n ),\n );\n\n protected childKey(index: number): string {\n return `${this.combinator()}:${index}`;\n }\n\n protected optionSchemaKey(index: number): string {\n const prefix = this.schemaKey();\n const k = this.combinator();\n return prefix ? `${prefix}.${k}[${index}]` : `${k}[${index}]`;\n }\n\n protected toggleExpanded(id: string): void {\n this.expandedId.update((current) => (current === id ? null : id));\n }\n\n protected focusDescription(id: string): void {\n this.descFocusId.set(id);\n }\n\n protected selectAll(event: FocusEvent): void {\n (event.target as HTMLInputElement).select();\n }\n\n protected onDescriptionInput(index: number, event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.applyDescription(index, value);\n }\n\n protected onDescriptionBlur(index: number, event: FocusEvent): void {\n const value = (event.target as HTMLInputElement).value.trim();\n this.applyDescription(index, value);\n this.descFocusId.set(null);\n }\n\n protected onDescriptionEnter(event: Event): void {\n event.preventDefault();\n (event.target as HTMLInputElement).blur();\n }\n\n protected onAddOption(): void {\n const newOptions = [...this.options(), { type: 'string' as const }];\n const newId = nextId();\n this.ids.set([...this.ids(), newId]);\n this.commitOptions(newOptions);\n this.expandedId.set(newId);\n }\n\n protected onRemoveOption(index: number): void {\n const ids = this.ids();\n const removedId = ids[index];\n const newOptions = this.options().filter((_, i) => i !== index);\n this.ids.set(ids.filter((_, i) => i !== index));\n if (this.expandedId() === removedId) {\n this.expandedId.set(null);\n }\n this.commitOptions(newOptions);\n }\n\n protected onOptionTypeChange(index: number, newType: SchemaEditorType): void {\n const options = this.options();\n const prevDesc = getSchemaDescription(options[index]);\n let next: ObjectJsonSchema = DEFAULT_SCHEMAS[newType as SchemaType] ??\n DEFAULT_SCHEMAS[newType] ?? { type: 'string' };\n if (prevDesc !== '') {\n next = { ...next, description: prevDesc };\n }\n const newOptions = [...options];\n newOptions[index] = next;\n this.commitOptions(newOptions);\n }\n\n protected onOptionSchemaChange(\n index: number,\n updated: ObjectJsonSchema,\n ): void {\n const newOptions = [...this.options()];\n newOptions[index] = updated;\n this.commitOptions(newOptions);\n }\n\n private applyDescription(index: number, raw: string): void {\n const description = raw === '' ? undefined : raw;\n const opt = this.options()[index];\n let updated: JsonSchema;\n if (isBooleanSchema(opt)) {\n updated = description !== undefined ? { description } : opt;\n } else {\n const base = { ...opt };\n if (description !== undefined) {\n base.description = description;\n } else {\n delete base.description;\n }\n updated = base;\n }\n const newOptions = [...this.options()];\n newOptions[index] = updated;\n this.commitOptions(newOptions);\n }\n\n private commitOptions(newOptions: readonly JsonSchema[]): void {\n const schema = this.schema();\n const base = isBooleanSchema(schema) ? {} : schema;\n const combinator = this.combinator();\n const {\n [combinator]: _old,\n type: _type,\n ...rest\n } = base as ObjectJsonSchema &\n Record<CombinatorKind, JsonSchema[] | undefined>;\n this.schemaChange.emit({ ...rest, [combinator]: [...newOptions] });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\n\nimport { cn } from '../../internal/cn';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n isBooleanSchema,\n withObjectSchema,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport type { EnumChangeContext } from '../schema-editor-internal/type-editor.component';\nimport { ButtonDirective } from '../ui/button.directive';\nimport { InputDirective } from '../ui/input.directive';\nimport { LabelDirective } from '../ui/label.directive';\n\ntype NumberConstraint =\n | 'minimum'\n | 'maximum'\n | 'exclusiveMinimum'\n | 'exclusiveMaximum'\n | 'multipleOf'\n | 'enum';\n\nlet nextNumberEditorId = 0;\n\n@Component({\n selector: 'lib-jsonjoy-number-editor',\n standalone: true,\n imports: [ButtonDirective, InputDirective, LabelDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div class=\"space-y-4\">\n @if (readOnly() && !hasConstraint()) {\n <p class=\"text-sm text-muted-foreground italic\">\n {{ t().numberNoConstraint }}\n </p>\n }\n\n @if (!readOnly() || hasConstraint()) {\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div class=\"space-y-0 md:col-span-2\">\n @if (minMaxError()) {\n <div class=\"text-xs text-destructive italic\">\n {{ minMaxError() }}\n </div>\n }\n @if (redundantMinError()) {\n <div class=\"text-xs text-destructive italic\">\n {{ redundantMinError() }}\n </div>\n }\n @if (redundantMaxError()) {\n <div class=\"text-xs text-destructive italic\">\n {{ redundantMaxError() }}\n </div>\n }\n @if (enumError()) {\n <div class=\"text-xs text-destructive italic\">\n {{ enumError() }}\n </div>\n }\n </div>\n\n @if (!readOnly() || minimum() !== undefined) {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"minimumId\"\n [class.text-destructive]=\"\n minimum() !== undefined &&\n (!!minMaxError() || !!redundantMinError())\n \"\n >\n {{ t().numberMinimumLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"minimumId\"\n type=\"number\"\n [value]=\"minimum() ?? ''\"\n [disabled]=\"readOnly()\"\n [step]=\"stepAttr\"\n [placeholder]=\"t().numberMinimumPlaceholder\"\n [class]=\"boundClasses('minimum')\"\n (input)=\"onBoundInput('minimum', $event)\"\n />\n </div>\n }\n\n @if (!readOnly() || maximum() !== undefined) {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"maximumId\"\n [class.text-destructive]=\"\n maximum() !== undefined &&\n (!!minMaxError() || !!redundantMaxError())\n \"\n >\n {{ t().numberMaximumLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"maximumId\"\n type=\"number\"\n [value]=\"maximum() ?? ''\"\n [disabled]=\"readOnly()\"\n [step]=\"stepAttr\"\n [placeholder]=\"t().numberMaximumPlaceholder\"\n [class]=\"boundClasses('maximum')\"\n (input)=\"onBoundInput('maximum', $event)\"\n />\n </div>\n }\n </div>\n }\n\n @if (\n !readOnly() ||\n exclusiveMinimum() !== undefined ||\n exclusiveMaximum() !== undefined\n ) {\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n @if (!readOnly() || exclusiveMinimum() !== undefined) {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"exclusiveMinimumId\"\n [class.text-destructive]=\"\n exclusiveMinimum() !== undefined &&\n (!!minMaxError() || !!redundantMinError())\n \"\n >\n {{ t().numberExclusiveMinimumLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"exclusiveMinimumId\"\n type=\"number\"\n [value]=\"exclusiveMinimum() ?? ''\"\n [disabled]=\"readOnly()\"\n [step]=\"stepAttr\"\n [placeholder]=\"t().numberExclusiveMinimumPlaceholder\"\n [class]=\"boundClasses('exclusiveMinimum')\"\n (input)=\"onBoundInput('exclusiveMinimum', $event)\"\n />\n </div>\n }\n\n @if (!readOnly() || exclusiveMaximum() !== undefined) {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"exclusiveMaximumId\"\n [class.text-destructive]=\"\n exclusiveMaximum() !== undefined &&\n (!!minMaxError() || !!redundantMaxError())\n \"\n >\n {{ t().numberExclusiveMaximumLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"exclusiveMaximumId\"\n type=\"number\"\n [value]=\"exclusiveMaximum() ?? ''\"\n [disabled]=\"readOnly()\"\n [step]=\"stepAttr\"\n [placeholder]=\"t().numberExclusiveMaximumPlaceholder\"\n [class]=\"boundClasses('exclusiveMaximum')\"\n (input)=\"onBoundInput('exclusiveMaximum', $event)\"\n />\n </div>\n }\n </div>\n }\n\n @if (!readOnly() || multipleOf() !== undefined) {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"multipleOfId\"\n [class.text-destructive]=\"!!multipleOfError()\"\n >\n {{ t().numberMultipleOfLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"multipleOfId\"\n type=\"number\"\n [value]=\"multipleOf() ?? ''\"\n [disabled]=\"readOnly()\"\n min=\"0\"\n [step]=\"stepAttr\"\n [placeholder]=\"t().numberMultipleOfPlaceholder\"\n [class]=\"multipleOfClasses()\"\n (input)=\"onBoundInput('multipleOf', $event)\"\n />\n @if (multipleOfError()) {\n <div class=\"text-xs text-destructive italic whitespace-pre-line\">\n {{ multipleOfError() }}\n </div>\n }\n </div>\n }\n\n @if (!readOnly() || enumValues().length > 0) {\n <div class=\"space-y-2 pt-2 border-t border-border/40\">\n <label libJsonjoyLabel [class.text-destructive]=\"!!enumError()\">\n {{ t().numberAllowedValuesEnumLabel }}\n </label>\n\n <div class=\"flex flex-wrap gap-2 mb-4\">\n @if (enumValues().length > 0) {\n @for (value of enumValues(); track value) {\n <div\n class=\"flex items-center bg-muted/40 border rounded-md px-2 py-1 text-xs\"\n >\n <span class=\"mr-1\">{{ value }}</span>\n <button\n type=\"button\"\n class=\"text-muted-foreground hover:text-destructive\"\n (click)=\"removeEnumValue(value)\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n </div>\n }\n } @else {\n <p class=\"text-xs text-muted-foreground italic\">\n {{ t().numberAllowedValuesEnumNone }}\n </p>\n }\n </div>\n\n <div class=\"flex items-center gap-2\">\n <input\n libJsonjoyInput\n type=\"number\"\n [value]=\"enumDraft()\"\n [step]=\"stepAttr\"\n [placeholder]=\"t().numberAllowedValuesEnumAddPlaceholder\"\n class=\"h-8 text-xs flex-1\"\n (input)=\"onEnumDraftInput($event)\"\n (keydown.enter)=\"addEnumValue()\"\n />\n <button\n libJsonjoyButton\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n (click)=\"addEnumValue()\"\n >\n {{ t().numberAllowedValuesEnumAddLabel }}\n </button>\n </div>\n </div>\n }\n </div>\n `,\n})\nexport class NumberEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly schemaKey = input<string | undefined>(undefined);\n readonly depth = input<number>(0);\n readonly integer = input<boolean>(false);\n\n readonly schemaChange = output<ObjectJsonSchema>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n private readonly idSeq = ++nextNumberEditorId;\n protected readonly minimumId = `jjne-${this.idSeq}-min`;\n protected readonly maximumId = `jjne-${this.idSeq}-max`;\n protected readonly exclusiveMinimumId = `jjne-${this.idSeq}-emin`;\n protected readonly exclusiveMaximumId = `jjne-${this.idSeq}-emax`;\n protected readonly multipleOfId = `jjne-${this.idSeq}-mof`;\n\n protected readonly enumDraft = signal('');\n\n protected readonly minimum = computed(() =>\n withObjectSchema(this.schema(), (s) => s.minimum, undefined),\n );\n protected readonly maximum = computed(() =>\n withObjectSchema(this.schema(), (s) => s.maximum, undefined),\n );\n protected readonly exclusiveMinimum = computed(() =>\n withObjectSchema(this.schema(), (s) => s.exclusiveMinimum, undefined),\n );\n protected readonly exclusiveMaximum = computed(() =>\n withObjectSchema(this.schema(), (s) => s.exclusiveMaximum, undefined),\n );\n protected readonly multipleOf = computed(() =>\n withObjectSchema(this.schema(), (s) => s.multipleOf, undefined),\n );\n protected readonly enumValues = computed<readonly number[]>(() =>\n withObjectSchema(\n this.schema(),\n (s) => (s.enum as number[] | undefined) ?? [],\n [],\n ),\n );\n\n protected readonly hasConstraint = computed(\n () =>\n this.minimum() !== undefined ||\n this.maximum() !== undefined ||\n this.exclusiveMinimum() !== undefined ||\n this.exclusiveMaximum() !== undefined ||\n this.multipleOf() !== undefined ||\n this.enumValues().length > 0,\n );\n\n protected readonly minMaxError = computed(() => this.errorAt('minMax'));\n protected readonly redundantMinError = computed(() =>\n this.errorAt('redundantMinimum'),\n );\n protected readonly redundantMaxError = computed(() =>\n this.errorAt('redundantMaximum'),\n );\n protected readonly enumError = computed(() => this.errorAt('enum'));\n protected readonly multipleOfError = computed(() =>\n this.errorAt('multipleOf'),\n );\n\n protected get stepAttr(): string {\n return this.integer() ? '1' : 'any';\n }\n\n protected readonly multipleOfClasses = computed(() =>\n cn('h-8', !!this.multipleOfError() && 'border-destructive'),\n );\n\n protected boundClasses(\n field: 'minimum' | 'maximum' | 'exclusiveMinimum' | 'exclusiveMaximum',\n ): string {\n const errored =\n field === 'minimum'\n ? this.minimum() !== undefined &&\n (!!this.minMaxError() || !!this.redundantMinError())\n : field === 'maximum'\n ? this.maximum() !== undefined &&\n (!!this.minMaxError() || !!this.redundantMaxError())\n : field === 'exclusiveMinimum'\n ? this.exclusiveMinimum() !== undefined &&\n (!!this.minMaxError() || !!this.redundantMinError())\n : this.exclusiveMaximum() !== undefined &&\n (!!this.minMaxError() || !!this.redundantMaxError());\n return cn('h-8', errored && 'border-destructive');\n }\n\n protected onBoundInput(\n field:\n | 'minimum'\n | 'maximum'\n | 'exclusiveMinimum'\n | 'exclusiveMaximum'\n | 'multipleOf',\n event: Event,\n ): void {\n const raw = (event.target as HTMLInputElement).value;\n const value = raw === '' ? undefined : Number(raw);\n this.applyValidationChange(field, value);\n }\n\n protected onEnumDraftInput(event: Event): void {\n this.enumDraft.set((event.target as HTMLInputElement).value);\n }\n\n protected addEnumValue(): void {\n const draft = this.enumDraft().trim();\n if (!draft) return;\n const parsed = Number(draft);\n if (Number.isNaN(parsed)) return;\n const value = this.integer() ? Math.floor(parsed) : parsed;\n const current = this.enumValues();\n if (!current.includes(value)) {\n const next = [...current, value];\n this.applyEnumValues(next);\n this.addEnum.emit({\n value,\n index: current.length,\n schemaKey: this.schemaKey(),\n });\n }\n this.enumDraft.set('');\n }\n\n protected removeEnumValue(value: number): void {\n const current = this.enumValues();\n const index = current.indexOf(value);\n if (index < 0) return;\n const next = current.filter((_, i) => i !== index);\n this.applyEnumValues(next);\n this.deleteEnum.emit({ value, index, schemaKey: this.schemaKey() });\n }\n\n private applyEnumValues(values: readonly number[]): void {\n if (values.length === 0) {\n this.applyValidationChange('enum', undefined);\n } else {\n this.applyValidationChange('enum', [...values]);\n }\n }\n\n private applyValidationChange(\n property: NumberConstraint,\n value: unknown,\n ): void {\n const current = this.schema();\n const type: 'integer' | 'number' = this.integer() ? 'integer' : 'number';\n const next: ObjectJsonSchema = isBooleanSchema(current)\n ? { type }\n : { ...current, type };\n\n if (value === undefined) {\n delete next[property];\n } else {\n (next as Record<string, unknown>)[property] = value;\n }\n\n this.schemaChange.emit(next);\n }\n\n private errorAt(pathKey: string): string | undefined {\n const node = this.validationNode();\n if (!node || node.validation.success) return undefined;\n return node.validation.errors?.find((err) => err.path[0] === pathKey)\n ?.message;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n input,\n output,\n} from '@angular/core';\n\nimport type { JsonSchema, ObjectJsonSchema } from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport { SchemaPropertyEditorComponent } from './schema-property-editor.component';\nimport type { EnumChangeContext } from './type-editor.component';\n\ninterface PropertyRow {\n readonly name: string;\n readonly schema: JsonSchema;\n readonly required: boolean;\n}\n\nfunction joinSchemaKey(prefix: string | undefined, name: string): string {\n return prefix ? `${prefix}.${name}` : name;\n}\n\n@Component({\n selector: 'lib-jsonjoy-schema-property-rows',\n standalone: true,\n imports: [forwardRef(() => SchemaPropertyEditorComponent)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy contents' },\n template: `\n @for (property of properties(); track property.name) {\n <lib-jsonjoy-schema-property-editor\n mode=\"property\"\n [name]=\"property.name\"\n [schema]=\"property.schema\"\n [schemaKey]=\"schemaKeyFor(property.name)\"\n [required]=\"property.required\"\n [readOnly]=\"readOnly()\"\n [autoFocus]=\"autoFocus()\"\n [depth]=\"depth()\"\n [validationNode]=\"validationChildren()?.[property.name]\"\n (delete)=\"deleteProperty.emit(property.name)\"\n (nameChange)=\"\n nameChange.emit({ oldName: property.name, newName: $event })\n \"\n (requiredChange)=\"\n requiredChange.emit({ name: property.name, required: $event })\n \"\n (schemaChange)=\"\n schemaChange.emit({ name: property.name, schema: $event })\n \"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @for (property of patternProperties(); track 'pattern:' + property.name) {\n <lib-jsonjoy-schema-property-editor\n mode=\"pattern\"\n [name]=\"property.name\"\n [schema]=\"property.schema\"\n [schemaKey]=\"schemaKeyFor(property.name)\"\n [readOnly]=\"readOnly()\"\n [autoFocus]=\"autoFocus()\"\n [depth]=\"depth()\"\n [validationNode]=\"validationChildren()?.['pattern:' + property.name]\"\n (delete)=\"deletePatternProperty.emit(property.name)\"\n (nameChange)=\"\n patternNameChange.emit({ oldName: property.name, newName: $event })\n \"\n (schemaChange)=\"\n patternSchemaChange.emit({ name: property.name, schema: $event })\n \"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n `,\n})\nexport class SchemaPropertyRowsComponent {\n readonly properties = input.required<readonly PropertyRow[]>();\n readonly patternProperties = input.required<readonly PropertyRow[]>();\n readonly readOnly = input.required<boolean>();\n readonly autoFocus = input<boolean>(true);\n readonly depth = input<number>(0);\n readonly schemaKeyPrefix = input<string | undefined>(undefined);\n readonly validationChildren = input<\n Record<string, ValidationTreeNode> | undefined\n >(undefined);\n\n readonly deleteProperty = output<string>();\n readonly deletePatternProperty = output<string>();\n readonly nameChange = output<{ oldName: string; newName: string }>();\n readonly patternNameChange = output<{ oldName: string; newName: string }>();\n readonly requiredChange = output<{ name: string; required: boolean }>();\n readonly schemaChange = output<{ name: string; schema: ObjectJsonSchema }>();\n readonly patternSchemaChange = output<{\n name: string;\n schema: ObjectJsonSchema;\n }>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected schemaKeyFor(name: string): string {\n return joinSchemaKey(this.schemaKeyPrefix(), name);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n output,\n} from '@angular/core';\n\nimport {\n createFieldSchema,\n getSchemaPatternProperties,\n getSchemaProperties,\n removeObjectPatternProperty,\n removeObjectProperty,\n renameObjectPatternProperty,\n renameObjectProperty,\n updateObjectPatternProperty,\n updateObjectProperty,\n updatePropertyRequired,\n} from '../../internal/schema-editor';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type NewField,\n type ObjectJsonSchema,\n isBooleanSchema,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport { AddFieldButtonComponent } from '../schema-editor-internal/add-field-button.component';\nimport { SchemaPropertyRowsComponent } from '../schema-editor-internal/schema-property-rows.component';\nimport type { EnumChangeContext } from '../schema-editor-internal/type-editor.component';\n\n@Component({\n selector: 'lib-jsonjoy-object-editor',\n standalone: true,\n imports: [\n AddFieldButtonComponent,\n forwardRef(() => SchemaPropertyRowsComponent),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div class=\"space-y-4\">\n @if (properties().length > 0 || patternProperties().length > 0) {\n <div class=\"space-y-2\">\n <lib-jsonjoy-schema-property-rows\n [properties]=\"properties()\"\n [patternProperties]=\"patternProperties()\"\n [readOnly]=\"readOnly()\"\n [depth]=\"depth()\"\n [schemaKeyPrefix]=\"schemaKey()\"\n [validationChildren]=\"validationNode()?.children\"\n (deleteProperty)=\"onDeleteProperty($event)\"\n (deletePatternProperty)=\"onDeletePatternProperty($event)\"\n (nameChange)=\"onPropertyNameChange($event)\"\n (patternNameChange)=\"onPatternPropertyNameChange($event)\"\n (requiredChange)=\"onPropertyRequiredChange($event)\"\n (schemaChange)=\"onPropertySchemaChange($event)\"\n (patternSchemaChange)=\"onPatternPropertySchemaChange($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n </div>\n } @else {\n <div\n class=\"text-sm text-muted-foreground italic p-2 text-center border rounded-md\"\n >\n {{ t().objectPropertiesNone }}\n </div>\n }\n\n @if (!readOnly()) {\n <div class=\"mt-4 flex flex-row gap-x-4\">\n <lib-jsonjoy-add-field-button\n variant=\"secondary\"\n (addField)=\"onAddProperty($event)\"\n (addPatternField)=\"onAddPatternProperty($event)\"\n />\n <button\n type=\"button\"\n [class]=\"additionalPropertiesClasses()\"\n (click)=\"onAdditionalPropertiesToggle()\"\n >\n {{ additionalPropertiesLabel() }}\n </button>\n </div>\n }\n </div>\n `,\n})\nexport class ObjectEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly schemaKey = input<string | undefined>(undefined);\n readonly depth = input<number>(0);\n\n readonly schemaChange = output<ObjectJsonSchema>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n protected readonly properties = computed(() =>\n getSchemaProperties(this.schema()),\n );\n\n protected readonly patternProperties = computed(() =>\n getSchemaPatternProperties(this.schema()),\n );\n\n private readonly normalized = computed<ObjectJsonSchema>(() => {\n const schema = this.schema();\n if (isBooleanSchema(schema)) {\n return { type: 'object', properties: {} };\n }\n return { ...schema, type: 'object', properties: schema.properties ?? {} };\n });\n\n private readonly additionalPropertiesForbidden = computed(\n () => this.normalized().additionalProperties === false,\n );\n\n protected readonly additionalPropertiesLabel = computed(() =>\n this.additionalPropertiesForbidden()\n ? this.t().additionalPropertiesForbid\n : this.t().additionalPropertiesAllow,\n );\n\n protected readonly additionalPropertiesClasses = computed(() => {\n const base = 'text-xs px-3 py-1.5 rounded-md font-medium transition-colors';\n const variant = this.additionalPropertiesForbidden()\n ? 'bg-amber-500/10 text-amber-600 hover:bg-amber-500/20'\n : 'bg-lime-500/10 text-lime-600 hover:bg-lime-500/20';\n return `${base} ${variant}`;\n });\n\n protected onAddProperty(field: NewField): void {\n const fieldSchema = createFieldSchema(field);\n let next = updateObjectProperty(this.normalized(), field.name, fieldSchema);\n if (field.required) {\n next = updatePropertyRequired(next, field.name, true);\n }\n this.schemaChange.emit(next);\n }\n\n protected onAddPatternProperty(field: NewField): void {\n const next = updateObjectPatternProperty(\n this.normalized(),\n field.name,\n createFieldSchema(field),\n );\n this.schemaChange.emit(next);\n }\n\n protected onDeleteProperty(name: string): void {\n this.schemaChange.emit(removeObjectProperty(this.normalized(), name));\n }\n\n protected onDeletePatternProperty(name: string): void {\n this.schemaChange.emit(\n removeObjectPatternProperty(this.normalized(), name),\n );\n }\n\n protected onPropertyNameChange(change: {\n oldName: string;\n newName: string;\n }): void {\n if (change.oldName === change.newName) return;\n this.schemaChange.emit(\n renameObjectProperty(this.normalized(), change.oldName, change.newName),\n );\n }\n\n protected onPatternPropertyNameChange(change: {\n oldName: string;\n newName: string;\n }): void {\n if (change.oldName === change.newName) return;\n this.schemaChange.emit(\n renameObjectPatternProperty(\n this.normalized(),\n change.oldName,\n change.newName,\n ),\n );\n }\n\n protected onPropertyRequiredChange(change: {\n name: string;\n required: boolean;\n }): void {\n this.schemaChange.emit(\n updatePropertyRequired(this.normalized(), change.name, change.required),\n );\n }\n\n protected onPropertySchemaChange(change: {\n name: string;\n schema: ObjectJsonSchema;\n }): void {\n this.schemaChange.emit(\n updateObjectProperty(this.normalized(), change.name, change.schema),\n );\n }\n\n protected onPatternPropertySchemaChange(change: {\n name: string;\n schema: ObjectJsonSchema;\n }): void {\n this.schemaChange.emit(\n updateObjectPatternProperty(\n this.normalized(),\n change.name,\n change.schema,\n ),\n );\n }\n\n protected onAdditionalPropertiesToggle(): void {\n const { additionalProperties, ...rest } = this.normalized();\n this.schemaChange.emit(\n additionalProperties !== false\n ? { ...rest, additionalProperties: false }\n : rest,\n );\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n type Signal,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\n\nimport type { RefSuggestion } from '../../interfaces/ref-suggestion.interface';\nimport type { LocalDefinition } from '../../internal/schema-editor';\nimport { LocalDefinitionsContextService } from '../../services/local-definitions.service';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport { SCHEMA_BUILDER_REF_SUGGESTIONS } from '../../tokens/ref-suggestions.token';\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n asRefSchema,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport { InputDirective } from '../ui/input.directive';\nimport { LabelDirective } from '../ui/label.directive';\n\nlet nextRefEditorId = 0;\n\n@Component({\n selector: 'lib-jsonjoy-ref-editor',\n standalone: true,\n imports: [InputDirective, LabelDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div class=\"space-y-4\">\n <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 items-start\">\n <div class=\"space-y-2 md:col-span-2\">\n <label libJsonjoyLabel [attr.for]=\"urlId\">\n {{ t().refUrlLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"urlId\"\n type=\"url\"\n [value]=\"urlValue()\"\n [disabled]=\"readOnly()\"\n [placeholder]=\"readOnly() ? '' : t().refUrlPlaceholder\"\n (input)=\"onUrlInput($event)\"\n />\n </div>\n\n <div class=\"space-y-2\">\n <label libJsonjoyLabel [attr.for]=\"pointerId\">\n {{ t().refPointerLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"pointerId\"\n type=\"text\"\n [value]=\"pointerValue()\"\n [disabled]=\"readOnly()\"\n [placeholder]=\"readOnly() ? '' : t().refPointerPlaceholder\"\n (input)=\"onPointerInput($event)\"\n />\n </div>\n </div>\n\n @if (!readOnly() && localDefinitions().length > 0) {\n <div class=\"space-y-2\">\n <label libJsonjoyLabel>{{ t().refLocalDefinitionsLabel }}</label>\n <ul\n class=\"flex flex-col gap-1 max-h-48 overflow-y-auto rounded-md border border-border p-1\"\n >\n @for (def of localDefinitions(); track def.ref) {\n <li>\n <button\n type=\"button\"\n class=\"w-full text-left px-2 py-1.5 rounded-sm hover:bg-secondary/50 transition-colors\"\n (click)=\"pickLocalDefinition(def)\"\n >\n <span class=\"block text-sm font-medium\">{{ def.name }}</span>\n <span\n class=\"block text-xs text-muted-foreground font-mono truncate\"\n >{{ def.ref }}</span\n >\n </button>\n </li>\n }\n </ul>\n </div>\n }\n\n @if (!readOnly() && hasSuggestionsProvider) {\n <div class=\"space-y-2\">\n <label libJsonjoyLabel>{{ t().refSuggestionsLabel }}</label>\n @if (filteredSuggestions().length === 0) {\n <p class=\"text-xs text-muted-foreground italic\">\n {{ t().refNoSuggestions }}\n </p>\n } @else {\n <ul\n class=\"flex flex-col gap-1 max-h-48 overflow-y-auto rounded-md border border-border p-1\"\n >\n @for (s of filteredSuggestions(); track s.id) {\n <li>\n <button\n type=\"button\"\n class=\"w-full text-left px-2 py-1.5 rounded-sm hover:bg-secondary/50 transition-colors\"\n (click)=\"pickSuggestion(s)\"\n >\n <span class=\"block text-sm font-medium\">{{ s.label }}</span>\n @if (s.description) {\n <span\n class=\"block text-xs text-muted-foreground truncate\"\n >{{ s.description }}</span\n >\n }\n <span\n class=\"block text-xs text-muted-foreground font-mono truncate\"\n >{{ s.url }}</span\n >\n </button>\n </li>\n }\n </ul>\n }\n </div>\n }\n </div>\n `,\n})\nexport class RefEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly schemaKey = input<string | undefined>(undefined);\n readonly depth = input<number>(0);\n\n readonly schemaChange = output<ObjectJsonSchema>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n private readonly injectedSuggestions = inject(\n SCHEMA_BUILDER_REF_SUGGESTIONS,\n {\n optional: true,\n },\n );\n private readonly suggestionsSignal: Signal<readonly RefSuggestion[]> =\n this.injectedSuggestions ?? computed(() => [] as readonly RefSuggestion[]);\n\n /** The host registered a suggestions provider; gates the suggestions list. */\n protected readonly hasSuggestionsProvider = this.injectedSuggestions !== null;\n\n private readonly localDefinitionsCtx = inject(\n LocalDefinitionsContextService,\n { optional: true },\n );\n protected readonly localDefinitions = computed<readonly LocalDefinition[]>(\n () => this.localDefinitionsCtx?.definitions() ?? [],\n );\n\n private readonly id = ++nextRefEditorId;\n protected readonly urlId = `jsonjoy-ref-url-${this.id}`;\n protected readonly pointerId = `jsonjoy-ref-pointer-${this.id}`;\n\n private readonly currentRef = computed(() => asRefSchema(this.schema()).$ref);\n\n // Local editable state for the two inputs. Mirrors the bound `$ref` only when\n // it changes externally; user edits update these directly so the controlled\n // inputs never fight the round-tripped value (which would otherwise re-split\n // on '#' and concatenate the ref on every keystroke).\n protected readonly urlValue = signal('');\n protected readonly pointerValue = signal('');\n\n /** The last `$ref` this component emitted, to distinguish self vs external\n * changes to `currentRef()` inside the sync effect. */\n private lastEmitted: string | null = null;\n\n constructor() {\n effect(() => {\n const ref = this.currentRef();\n if (ref === this.lastEmitted) return;\n const { url, pointer } = splitRef(ref);\n untracked(() => {\n this.urlValue.set(url);\n this.pointerValue.set(pointer);\n });\n });\n }\n\n protected readonly filteredSuggestions = computed(() => {\n const all = this.suggestionsSignal();\n const query = this.urlValue().toLowerCase().trim();\n if (!query) return all;\n return all.filter(\n (s) =>\n s.url.toLowerCase().includes(query) ||\n s.label.toLowerCase().includes(query),\n );\n });\n\n protected onUrlInput(event: Event): void {\n this.urlValue.set((event.target as HTMLInputElement).value);\n this.emitRef();\n }\n\n protected onPointerInput(event: Event): void {\n this.pointerValue.set((event.target as HTMLInputElement).value);\n this.emitRef();\n }\n\n protected pickSuggestion(suggestion: RefSuggestion): void {\n this.urlValue.set(suggestion.url);\n this.emitRef();\n }\n\n protected pickLocalDefinition(def: LocalDefinition): void {\n // A local def ref is a pure fragment (no URL part), e.g. #/$defs/Address.\n this.urlValue.set('');\n this.pointerValue.set(def.ref.replace(/^#/, ''));\n this.emitRef();\n }\n\n private emitRef(): void {\n const url = this.urlValue();\n const pointer = this.pointerValue().replace(/^#/, '');\n const fullRef = pointer ? `${url}#${pointer}` : url;\n this.lastEmitted = fullRef;\n this.schemaChange.emit({ $ref: fullRef });\n }\n}\n\nfunction splitRef(ref: string): { url: string; pointer: string } {\n const hashIndex = ref.indexOf('#');\n if (hashIndex < 0) return { url: ref, pointer: '' };\n return {\n url: ref.slice(0, hashIndex),\n pointer: ref.slice(hashIndex + 1),\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\n\nimport { cn } from '../../internal/cn';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n isBooleanSchema,\n withObjectSchema,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport type { EnumChangeContext } from '../schema-editor-internal/type-editor.component';\nimport { ButtonDirective } from '../ui/button.directive';\nimport { InputDirective } from '../ui/input.directive';\nimport { LabelDirective } from '../ui/label.directive';\n\ntype StringValidationProperty =\n | 'enum'\n | 'minLength'\n | 'maxLength'\n | 'pattern'\n | 'format';\n\nlet nextStringEditorId = 0;\n\nconst STRING_FORMATS = [\n 'none',\n 'date-time',\n 'date',\n 'time',\n 'email',\n 'uri',\n 'uuid',\n 'hostname',\n 'ipv4',\n 'ipv6',\n] as const;\n\n@Component({\n selector: 'lib-jsonjoy-string-editor',\n standalone: true,\n imports: [ButtonDirective, InputDirective, LabelDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div class=\"space-y-4\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 items-start\">\n @if (readOnly() && !needsDetail()) {\n <p class=\"text-sm text-muted-foreground italic\">\n {{ t().stringNoConstraint }}\n </p>\n }\n\n @if (!readOnly() || minLengthValue() !== '') {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"minLengthId\"\n [class.text-destructive]=\"!!minMaxError() || !!minLengthError()\"\n >\n {{ t().stringMinimumLengthLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"minLengthId\"\n type=\"number\"\n min=\"0\"\n [value]=\"minLengthValue()\"\n [disabled]=\"readOnly()\"\n [placeholder]=\"t().stringMinimumLengthPlaceholder\"\n [class]=\"minMaxInputClasses()\"\n (input)=\"onLengthInput('minLength', $event)\"\n />\n </div>\n }\n\n @if (!readOnly() || maxLengthValue() !== '') {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"maxLengthId\"\n [class.text-destructive]=\"!!minMaxError() || !!maxLengthError()\"\n >\n {{ t().stringMaximumLengthLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"maxLengthId\"\n type=\"number\"\n min=\"0\"\n [value]=\"maxLengthValue()\"\n [disabled]=\"readOnly()\"\n [placeholder]=\"t().stringMaximumLengthPlaceholder\"\n [class]=\"maxMinInputClasses()\"\n (input)=\"onLengthInput('maxLength', $event)\"\n />\n </div>\n }\n\n @if (lengthErrorText()) {\n <div\n class=\"text-xs text-destructive italic md:col-span-2 whitespace-pre-line\"\n >\n {{ lengthErrorText() }}\n </div>\n }\n </div>\n\n @if (!readOnly() || patternValue() !== '') {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"patternId\"\n [class.text-destructive]=\"!!patternError()\"\n >\n {{ t().stringPatternLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"patternId\"\n type=\"text\"\n [value]=\"patternValue()\"\n [disabled]=\"readOnly()\"\n [placeholder]=\"t().stringPatternPlaceholder\"\n class=\"h-8\"\n (input)=\"onPatternInput($event)\"\n />\n </div>\n }\n\n @if (!readOnly() || formatValue() !== 'none') {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"formatId\"\n [class.text-destructive]=\"!!formatError()\"\n >\n {{ t().stringFormatLabel }}\n </label>\n <select\n [id]=\"formatId\"\n class=\"h-8 w-full rounded-md border border-input bg-background px-3 py-1 text-sm ring-offset-background focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n [disabled]=\"readOnly()\"\n [value]=\"formatValue()\"\n (change)=\"onFormatChange($event)\"\n >\n <option value=\"none\">{{ t().stringFormatNone }}</option>\n <option value=\"date-time\">{{ t().stringFormatDateTime }}</option>\n <option value=\"date\">{{ t().stringFormatDate }}</option>\n <option value=\"time\">{{ t().stringFormatTime }}</option>\n <option value=\"email\">{{ t().stringFormatEmail }}</option>\n <option value=\"uri\">{{ t().stringFormatUri }}</option>\n <option value=\"uuid\">{{ t().stringFormatUuid }}</option>\n <option value=\"hostname\">{{ t().stringFormatHostname }}</option>\n <option value=\"ipv4\">{{ t().stringFormatIpv4 }}</option>\n <option value=\"ipv6\">{{ t().stringFormatIpv6 }}</option>\n </select>\n </div>\n }\n\n @if (!readOnly() || enumValues().length > 0) {\n <div class=\"space-y-2 pt-2 border-t border-border/40\">\n <label libJsonjoyLabel>{{ t().stringAllowedValuesEnumLabel }}</label>\n\n <div class=\"flex flex-wrap gap-2 mb-4\">\n @if (enumValues().length > 0) {\n @for (value of enumValues(); track value) {\n <div\n class=\"flex items-center bg-muted/40 border rounded-md px-2 py-1 text-xs\"\n >\n <span class=\"mr-1\">{{ value }}</span>\n <button\n type=\"button\"\n class=\"text-muted-foreground hover:text-destructive\"\n (click)=\"removeEnumValue(value)\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n </div>\n }\n } @else {\n <p class=\"text-xs text-muted-foreground italic\">\n {{ t().stringAllowedValuesEnumNone }}\n </p>\n }\n </div>\n\n <div class=\"flex items-center gap-2\">\n <input\n libJsonjoyInput\n type=\"text\"\n [value]=\"enumDraft()\"\n [placeholder]=\"t().stringAllowedValuesEnumAddPlaceholder\"\n class=\"h-8 text-xs flex-1\"\n (input)=\"onEnumDraftInput($event)\"\n (keydown.enter)=\"addEnumValue()\"\n />\n <button\n libJsonjoyButton\n variant=\"secondary\"\n size=\"sm\"\n type=\"button\"\n (click)=\"addEnumValue()\"\n >\n {{ t().stringAllowedValuesEnumAddLabel }}\n </button>\n </div>\n </div>\n }\n </div>\n `,\n})\nexport class StringEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly schemaKey = input<string | undefined>(undefined);\n readonly depth = input<number>(0);\n\n readonly schemaChange = output<ObjectJsonSchema>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n private readonly idSeq = ++nextStringEditorId;\n protected readonly minLengthId = `jjse-${this.idSeq}-min`;\n protected readonly maxLengthId = `jjse-${this.idSeq}-max`;\n protected readonly patternId = `jjse-${this.idSeq}-pattern`;\n protected readonly formatId = `jjse-${this.idSeq}-format`;\n\n protected readonly enumDraft = signal('');\n\n protected readonly minLength = computed(() =>\n withObjectSchema(this.schema(), (s) => s.minLength, undefined),\n );\n protected readonly maxLength = computed(() =>\n withObjectSchema(this.schema(), (s) => s.maxLength, undefined),\n );\n protected readonly pattern = computed(() =>\n withObjectSchema(this.schema(), (s) => s.pattern, undefined),\n );\n protected readonly format = computed(() =>\n withObjectSchema(this.schema(), (s) => s.format, undefined),\n );\n protected readonly enumValues = computed<readonly string[]>(() =>\n withObjectSchema(\n this.schema(),\n (s) => (s.enum as string[] | undefined) ?? [],\n [],\n ),\n );\n\n protected readonly minLengthValue = computed(() => this.minLength() ?? '');\n protected readonly maxLengthValue = computed(() => this.maxLength() ?? '');\n protected readonly patternValue = computed(() => this.pattern() ?? '');\n protected readonly formatValue = computed(() => this.format() || 'none');\n\n protected readonly needsDetail = computed(() => {\n return (\n !this.readOnly() ||\n this.minLengthValue() !== '' ||\n this.maxLengthValue() !== '' ||\n this.patternValue() !== '' ||\n this.formatValue() !== 'none' ||\n this.enumValues().length > 0\n );\n });\n\n protected readonly minMaxError = computed(() => this.errorAt('length'));\n protected readonly minLengthError = computed(() => this.errorAt('minLength'));\n protected readonly maxLengthError = computed(() => this.errorAt('maxLength'));\n protected readonly patternError = computed(() => this.errorAt('pattern'));\n protected readonly formatError = computed(() => this.errorAt('format'));\n\n protected readonly lengthErrorText = computed(() => {\n const parts = [\n this.minMaxError(),\n this.minLengthError() ?? this.maxLengthError(),\n ].filter(Boolean);\n return parts.length > 0 ? parts.join('\\n') : '';\n });\n\n protected readonly minMaxInputClasses = computed(() =>\n cn(\n 'h-8',\n (!!this.minMaxError() || !!this.minLengthError()) && 'border-destructive',\n ),\n );\n protected readonly maxMinInputClasses = computed(() =>\n cn(\n 'h-8',\n (!!this.minMaxError() || !!this.maxLengthError()) && 'border-destructive',\n ),\n );\n\n protected onLengthInput(\n property: 'minLength' | 'maxLength',\n event: Event,\n ): void {\n const raw = (event.target as HTMLInputElement).value;\n const value = raw === '' ? undefined : Number(raw);\n this.applyValidationChange(property, value);\n }\n\n protected onPatternInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n this.applyValidationChange('pattern', raw === '' ? undefined : raw);\n }\n\n protected onFormatChange(event: Event): void {\n const selected = (event.target as HTMLSelectElement).value;\n const next = STRING_FORMATS.find((f) => f === selected) ?? 'none';\n this.applyValidationChange('format', next === 'none' ? undefined : next);\n }\n\n protected onEnumDraftInput(event: Event): void {\n this.enumDraft.set((event.target as HTMLInputElement).value);\n }\n\n protected addEnumValue(): void {\n const trimmed = this.enumDraft().trim();\n if (!trimmed) return;\n const current = this.enumValues();\n if (!current.includes(trimmed)) {\n const addedIndex = current.length;\n this.applyEnumValues([...current, trimmed]);\n this.addEnum.emit({\n value: trimmed,\n index: addedIndex,\n schemaKey: this.schemaKey(),\n });\n }\n this.enumDraft.set('');\n }\n\n protected removeEnumValue(value: string): void {\n const current = this.enumValues();\n const index = current.indexOf(value);\n if (index < 0) return;\n const next = current.filter((_, i) => i !== index);\n this.applyEnumValues(next);\n this.deleteEnum.emit({ value, index, schemaKey: this.schemaKey() });\n }\n\n private applyValidationChange(\n property: StringValidationProperty,\n value: unknown,\n ): void {\n const current = this.schema();\n const next: ObjectJsonSchema = isBooleanSchema(current)\n ? { type: 'string' }\n : { ...current, type: 'string' };\n if (value === undefined) {\n delete next[property];\n } else {\n (next as Record<string, unknown>)[property] = value;\n }\n this.schemaChange.emit(next);\n }\n\n private applyEnumValues(values: readonly string[]): void {\n const current = this.schema();\n if (values.length > 0) {\n const base: ObjectJsonSchema = isBooleanSchema(current)\n ? { type: 'string' }\n : { ...current };\n this.schemaChange.emit({ ...base, type: 'string', enum: [...values] });\n return;\n }\n if (!isBooleanSchema(current) && 'enum' in current) {\n const { enum: _enum, ...rest } = current;\n this.schemaChange.emit(rest as ObjectJsonSchema);\n return;\n }\n const base: ObjectJsonSchema = isBooleanSchema(current)\n ? { type: 'string' }\n : { ...current };\n this.schemaChange.emit(base);\n }\n\n private errorAt(pathKey: string): string | undefined {\n const node = this.validationNode();\n if (!node || node.validation.success) return undefined;\n const errors = node.validation.errors;\n if (!errors) return undefined;\n const match = errors.find((err) => err.path[0] === pathKey);\n return match?.message;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n output,\n} from '@angular/core';\n\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n getEditorType,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport { ArrayEditorComponent } from '../type-editors/array-editor.component';\nimport { BooleanEditorComponent } from '../type-editors/boolean-editor.component';\nimport {\n CombinatorEditorComponent,\n type CombinatorKind,\n} from '../type-editors/combinator-editor.component';\nimport { NumberEditorComponent } from '../type-editors/number-editor.component';\nimport { ObjectEditorComponent } from '../type-editors/object-editor.component';\nimport { RefEditorComponent } from '../type-editors/ref-editor.component';\nimport { StringEditorComponent } from '../type-editors/string-editor.component';\n\nexport interface EnumChangeContext {\n readonly value: string | number | boolean;\n readonly index: number;\n readonly schemaKey?: string;\n}\n\n@Component({\n selector: 'lib-jsonjoy-type-editor',\n standalone: true,\n // Array/Object/Combinator editors recurse back into this component, so\n // reference them lazily via forwardRef to keep the imports array resilient\n // to module evaluation order (avoids NG0919 when a leaf editor loads first).\n imports: [\n forwardRef(() => ArrayEditorComponent),\n BooleanEditorComponent,\n forwardRef(() => CombinatorEditorComponent),\n NumberEditorComponent,\n forwardRef(() => ObjectEditorComponent),\n RefEditorComponent,\n StringEditorComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n @switch (editorType()) {\n @case ('string') {\n <lib-jsonjoy-string-editor\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('number') {\n <lib-jsonjoy-number-editor\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('integer') {\n <lib-jsonjoy-number-editor\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n [integer]=\"true\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('boolean') {\n <lib-jsonjoy-boolean-editor\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('object') {\n <lib-jsonjoy-object-editor\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('array') {\n <lib-jsonjoy-array-editor\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('anyOf') {\n <lib-jsonjoy-combinator-editor\n combinator=\"anyOf\"\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('oneOf') {\n <lib-jsonjoy-combinator-editor\n combinator=\"oneOf\"\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('allOf') {\n <lib-jsonjoy-combinator-editor\n combinator=\"allOf\"\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('$ref') {\n <lib-jsonjoy-ref-editor\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n />\n }\n <!-- -->\n @case ('null') {}\n @default {\n <p class=\"text-sm text-muted-foreground italic\">\n Unsupported editor type: {{ editorType() }}\n </p>\n }\n }\n `,\n})\nexport class TypeEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly schemaKey = input<string | undefined>(undefined);\n readonly depth = input<number>(0);\n\n readonly schemaChange = output<ObjectJsonSchema>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected readonly editorType = computed(() => getEditorType(this.schema()));\n}\n\nexport type { CombinatorKind };\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\n\nimport { cn } from '../../internal/cn';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n type SchemaEditorType,\n asObjectSchema,\n getEditorType,\n getSchemaDescription,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport { BadgeDirective } from '../ui/badge.directive';\nimport { InputDirective } from '../ui/input.directive';\nimport { LabelDirective } from '../ui/label.directive';\nimport { TypeDropdownComponent } from './type-dropdown.component';\nimport {\n type EnumChangeContext,\n TypeEditorComponent,\n} from './type-editor.component';\n\n@Component({\n selector: 'lib-jsonjoy-schema-property-editor',\n standalone: true,\n imports: [\n BadgeDirective,\n InputDirective,\n LabelDirective,\n TypeDropdownComponent,\n forwardRef(() => TypeEditorComponent),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy block' },\n template: `\n <div [class]=\"rootClasses()\">\n <div\n class=\"relative json-field-row justify-between group flex items-center\"\n >\n <div class=\"flex items-center gap-2 grow min-w-0\">\n <button\n type=\"button\"\n class=\"text-muted-foreground hover:text-foreground transition-colors\"\n [attr.aria-label]=\"expanded() ? t().collapse : t().expand\"\n (click)=\"toggleExpanded()\"\n >\n @if (expanded()) {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n } @else {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n }\n </button>\n\n <div class=\"flex items-center gap-2 grow min-w-0 overflow-visible\">\n <div class=\"flex items-center gap-2 min-w-0 grow overflow-visible\">\n @if (!readOnly() && isEditingName()) {\n <input\n #nameInput\n libJsonjoyInput\n [value]=\"tempName()\"\n class=\"h-8 text-sm font-medium min-w-[120px] max-w-full z-10\"\n (input)=\"onTempNameInput($event)\"\n (blur)=\"submitName()\"\n (keydown.enter)=\"submitName()\"\n (focus)=\"selectAll($event)\"\n />\n } @else {\n <button\n type=\"button\"\n [attr.aria-label]=\"nameAriaLabel()\"\n [attr.title]=\"nameTitle()\"\n [class]=\"nameButtonClasses()\"\n (click)=\"beginEditName()\"\n (keydown.enter)=\"beginEditName()\"\n >\n {{ name() }}\n </button>\n }\n\n @if (!isRef()) {\n @if (!readOnly() && isEditingDesc()) {\n <input\n #descInput\n libJsonjoyInput\n [value]=\"tempDesc()\"\n [placeholder]=\"t().propertyDescriptionPlaceholder\"\n class=\"h-8 text-xs text-muted-foreground italic flex-1 min-w-[150px] z-10\"\n (input)=\"onTempDescInput($event)\"\n (blur)=\"submitDesc()\"\n (keydown.enter)=\"submitDesc()\"\n (focus)=\"selectAll($event)\"\n />\n } @else if (tempDesc()) {\n <button\n type=\"button\"\n class=\"text-xs text-muted-foreground italic cursor-text px-2 py-0.5 -mx-0.5 rounded-sm hover:bg-secondary/30 hover:shadow-xs hover:ring-1 hover:ring-ring/20 transition-all text-left truncate flex-1 max-w-[40%] mr-2\"\n (click)=\"beginEditDesc()\"\n (keydown.enter)=\"beginEditDesc()\"\n >\n {{ tempDesc() }}\n </button>\n } @else {\n <button\n type=\"button\"\n class=\"text-xs text-muted-foreground/50 italic cursor-text px-2 py-0.5 -mx-0.5 rounded-sm hover:bg-secondary/30 hover:shadow-xs hover:ring-1 hover:ring-ring/20 transition-all opacity-0 group-hover:opacity-100 text-left truncate flex-1 max-w-[40%] mr-2\"\n (click)=\"beginEditDesc()\"\n (keydown.enter)=\"beginEditDesc()\"\n >\n {{ t().propertyDescriptionButton }}\n </button>\n }\n }\n </div>\n\n <div class=\"flex items-center gap-2 justify-end shrink-0\">\n <lib-jsonjoy-type-dropdown\n [value]=\"type()\"\n [readOnly]=\"readOnly()\"\n (valueChange)=\"onTypeChange($event)\"\n />\n\n @if (mode() === 'property') {\n <button\n type=\"button\"\n [class]=\"requiredToggleClasses()\"\n (click)=\"toggleRequired()\"\n >\n {{ required() ? t().propertyRequired : t().propertyOptional }}\n </button>\n } @else if (mode() === 'pattern') {\n <span\n class=\"text-xs px-2 py-1 rounded-md font-medium min-w-[80px] text-center whitespace-nowrap bg-secondary text-muted-foreground flex items-center justify-center gap-1\"\n [title]=\"t().propertyNameRegexDescription\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M17 3v10\" />\n <path d=\"m12.67 5.5 8.66 5\" />\n <path d=\"m12.67 10.5 8.66-5\" />\n <path d=\"M9 17a2 2 0 1 0 0 4 2 2 0 0 0 0-4z\" />\n </svg>\n regex\n </span>\n }\n </div>\n </div>\n </div>\n\n @if (errorCount() > 0) {\n <div\n libJsonjoyBadge\n variant=\"destructive\"\n class=\"h-5 min-w-5 rounded-full px-1 font-mono tabular-nums justify-center\"\n >\n {{ errorCount() }}\n </div>\n }\n\n @if (!readOnly()) {\n <div class=\"flex items-center gap-1 text-muted-foreground\">\n <button\n type=\"button\"\n class=\"p-1 rounded-md hover:bg-secondary hover:text-destructive transition-colors opacity-0 group-hover:opacity-100\"\n [attr.aria-label]=\"t().propertyDelete\"\n (click)=\"delete.emit()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n </div>\n }\n </div>\n\n @if (expanded()) {\n <div class=\"pt-1 pb-2 px-2 sm:px-3 animate-in\">\n @if (readOnly() && tempDesc()) {\n <p class=\"pb-2\">{{ tempDesc() }}</p>\n }\n\n @if (!isRef()) {\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3 mb-3\">\n <div class=\"space-y-1\">\n <label libJsonjoyLabel [attr.for]=\"titleId\">{{\n t().propertyTitleLabel\n }}</label>\n <input\n libJsonjoyInput\n [id]=\"titleId\"\n type=\"text\"\n class=\"h-8\"\n [value]=\"tempTitle()\"\n [disabled]=\"readOnly()\"\n [placeholder]=\"readOnly() ? '' : t().propertyTitlePlaceholder\"\n (focus)=\"isEditingTitle.set(true)\"\n (input)=\"onTempTitleInput($event)\"\n (blur)=\"submitTitle()\"\n />\n </div>\n <div class=\"space-y-1\">\n <label libJsonjoyLabel [attr.for]=\"defaultId\">{{\n t().propertyDefaultLabel\n }}</label>\n <input\n libJsonjoyInput\n [id]=\"defaultId\"\n type=\"text\"\n class=\"h-8\"\n [value]=\"tempDefault()\"\n [disabled]=\"readOnly()\"\n [placeholder]=\"\n readOnly() ? '' : t().propertyDefaultPlaceholder\n \"\n (focus)=\"isEditingDefault.set(true)\"\n (input)=\"onTempDefaultInput($event)\"\n (blur)=\"submitDefault()\"\n />\n </div>\n </div>\n }\n\n <lib-jsonjoy-type-editor\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey() ?? name()\"\n [depth]=\"depth() + 1\"\n (schemaChange)=\"onChildSchemaChange($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n </div>\n }\n </div>\n `,\n})\nexport class SchemaPropertyEditorComponent {\n readonly name = input.required<string>();\n readonly schema = input.required<JsonSchema>();\n readonly schemaKey = input<string | undefined>(undefined);\n readonly required = input<boolean>(false);\n readonly readOnly = input.required<boolean>();\n readonly autoFocus = input<boolean>(true);\n readonly depth = input<number>(0);\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly mode = input<'property' | 'pattern' | 'definition'>('property');\n\n readonly delete = output<void>();\n readonly nameChange = output<string>();\n readonly requiredChange = output<boolean>();\n readonly schemaChange = output<ObjectJsonSchema>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n private static nextId = 0;\n private readonly editorId = (SchemaPropertyEditorComponent.nextId += 1);\n protected readonly titleId = `jsonjoy-title-${this.editorId}`;\n protected readonly defaultId = `jsonjoy-default-${this.editorId}`;\n\n protected readonly expanded = signal(false);\n protected readonly isEditingName = signal(false);\n protected readonly isEditingDesc = signal(false);\n protected readonly isEditingTitle = signal(false);\n protected readonly isEditingDefault = signal(false);\n protected readonly tempName = signal('');\n protected readonly tempDesc = signal('');\n protected readonly tempTitle = signal('');\n protected readonly tempDefault = signal('');\n\n protected readonly type = computed(() => getEditorType(this.schema()));\n protected readonly isRef = computed(() => this.type() === '$ref');\n protected readonly errorCount = computed(\n () => this.validationNode()?.cumulativeChildrenErrors ?? 0,\n );\n\n protected readonly rootClasses = computed(() =>\n cn(\n 'mb-2 animate-in rounded-lg border border-border transition-all duration-200',\n this.depth() > 0 && 'ml-0 sm:ml-4 border-l-2 border-l-border',\n ),\n );\n\n protected readonly nameButtonClasses = computed(() =>\n cn(\n 'json-field-label font-medium cursor-text px-2 py-0.5 -mx-0.5 rounded-sm hover:bg-secondary/30 hover:shadow-xs hover:ring-1 hover:ring-ring/20 transition-all text-left truncate min-w-[80px] max-w-[50%]',\n this.mode() === 'pattern' && 'font-mono',\n ),\n );\n\n protected readonly nameAriaLabel = computed(() =>\n this.mode() === 'pattern'\n ? `${this.t().fieldNameRegexLabel}: ${this.name()}`\n : null,\n );\n protected readonly nameTitle = computed(() =>\n this.mode() === 'pattern' ? this.t().propertyNameRegexDescription : null,\n );\n\n protected readonly requiredToggleClasses = computed(() =>\n cn(\n 'text-xs px-2 py-1 rounded-md font-medium min-w-[80px] text-center cursor-pointer hover:shadow-xs hover:ring-2 hover:ring-ring/30 active:scale-95 transition-all whitespace-nowrap',\n this.required()\n ? 'bg-red-500/10 text-red-500'\n : 'bg-secondary text-muted-foreground',\n ),\n );\n\n private readonly nameInput =\n viewChild<ElementRef<HTMLInputElement>>('nameInput');\n private readonly descInput =\n viewChild<ElementRef<HTMLInputElement>>('descInput');\n\n constructor() {\n // Sync the editable buffers from external schema/name changes, but never\n // overwrite a field the user is currently editing (otherwise an external\n // update — e.g. the JSON editor in `both` mode — clobbers their draft).\n effect(() => {\n const name = this.name();\n const schema = this.schema();\n untracked(() => {\n if (!this.isEditingName()) this.tempName.set(name);\n if (!this.isEditingDesc()) {\n this.tempDesc.set(getSchemaDescription(schema));\n }\n const s = asObjectSchema(schema);\n if (!this.isEditingTitle()) {\n this.tempTitle.set(typeof s.title === 'string' ? s.title : '');\n }\n if (!this.isEditingDefault()) {\n this.tempDefault.set(\n s.default === undefined ? '' : formatDefault(s.default),\n );\n }\n });\n });\n\n effect(() => {\n if (this.isEditingName() && this.autoFocus()) {\n queueMicrotask(() => this.nameInput()?.nativeElement.focus());\n }\n });\n\n effect(() => {\n if (this.isEditingDesc() && this.autoFocus()) {\n queueMicrotask(() => this.descInput()?.nativeElement.focus());\n }\n });\n }\n\n protected toggleExpanded(): void {\n this.expanded.update((v) => !v);\n }\n\n protected beginEditName(): void {\n if (this.readOnly()) return;\n this.isEditingName.set(true);\n }\n\n protected beginEditDesc(): void {\n if (this.readOnly()) return;\n this.isEditingDesc.set(true);\n }\n\n protected onTempNameInput(event: Event): void {\n this.tempName.set((event.target as HTMLInputElement).value);\n }\n\n protected onTempDescInput(event: Event): void {\n this.tempDesc.set((event.target as HTMLInputElement).value);\n }\n\n protected submitName(): void {\n const trimmed = this.tempName().trim();\n if (trimmed && trimmed !== this.name()) {\n this.nameChange.emit(trimmed);\n } else {\n this.tempName.set(this.name());\n }\n this.isEditingName.set(false);\n }\n\n protected submitDesc(): void {\n const trimmed = this.tempDesc().trim();\n const currentDesc = getSchemaDescription(this.schema());\n if (trimmed !== currentDesc) {\n this.schemaChange.emit({\n ...asObjectSchema(this.schema()),\n description: trimmed || undefined,\n });\n } else {\n this.tempDesc.set(currentDesc);\n }\n this.isEditingDesc.set(false);\n }\n\n protected onTempTitleInput(event: Event): void {\n this.tempTitle.set((event.target as HTMLInputElement).value);\n }\n\n protected submitTitle(): void {\n this.isEditingTitle.set(false);\n const trimmed = this.tempTitle().trim();\n const base = asObjectSchema(this.schema());\n const current = typeof base.title === 'string' ? base.title : '';\n if (trimmed === current) return;\n const { title: _t, ...rest } = base;\n this.schemaChange.emit(trimmed ? { ...rest, title: trimmed } : rest);\n }\n\n protected onTempDefaultInput(event: Event): void {\n this.tempDefault.set((event.target as HTMLInputElement).value);\n }\n\n protected submitDefault(): void {\n this.isEditingDefault.set(false);\n const raw = this.tempDefault().trim();\n const base = asObjectSchema(this.schema());\n if (!raw) {\n if (base.default === undefined) return;\n const { default: _d, ...rest } = base;\n this.schemaChange.emit(rest);\n return;\n }\n const value = parseDefault(raw);\n if (deepEqual(value, base.default)) return;\n this.schemaChange.emit({ ...base, default: value });\n }\n\n protected toggleRequired(): void {\n if (this.readOnly()) return;\n this.requiredChange.emit(!this.required());\n }\n\n protected selectAll(event: FocusEvent): void {\n (event.target as HTMLInputElement).select();\n }\n\n protected onTypeChange(newType: SchemaEditorType): void {\n const current = asObjectSchema(this.schema());\n if (newType === '$ref') {\n this.schemaChange.emit({ $ref: '' });\n this.expanded.set(true);\n return;\n }\n if (newType === 'anyOf' || newType === 'oneOf' || newType === 'allOf') {\n const {\n type: _type,\n $ref: _r,\n anyOf: _a,\n oneOf: _o,\n allOf: _al,\n ...rest\n } = current;\n const initial =\n newType === 'allOf'\n ? { allOf: [{ type: 'object' as const }] }\n : {\n [newType]: [\n { type: 'string' as const },\n { type: 'number' as const },\n ],\n };\n this.schemaChange.emit({ ...rest, ...initial });\n } else {\n const { $ref: _r, anyOf: _a, oneOf: _o, allOf: _al, ...rest } = current;\n this.schemaChange.emit({ ...rest, type: newType });\n }\n }\n\n protected onChildSchemaChange(updated: ObjectJsonSchema): void {\n if (typeof updated.$ref === 'string') {\n this.schemaChange.emit({ $ref: updated.$ref });\n return;\n }\n const base = asObjectSchema(this.schema());\n const merged: ObjectJsonSchema = { ...updated };\n const desc = getSchemaDescription(this.schema());\n if (desc) merged.description = desc;\n if (typeof base.title === 'string' && base.title) merged.title = base.title;\n if (base.default !== undefined) merged.default = base.default;\n this.schemaChange.emit(merged);\n }\n}\n\nfunction formatDefault(value: unknown): string {\n if (typeof value === 'string') return value;\n try {\n return JSON.stringify(value);\n } catch {\n return '';\n }\n}\n\nfunction parseDefault(raw: string): unknown {\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n}\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n try {\n return JSON.stringify(a) === JSON.stringify(b);\n } catch {\n return false;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n output,\n} from '@angular/core';\n\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n asObjectSchema,\n} from '../../types/json-schema';\nimport { ButtonDirective } from '../ui/button.directive';\nimport { SchemaPropertyEditorComponent } from './schema-property-editor.component';\n\ninterface DefinitionRow {\n readonly name: string;\n readonly schema: JsonSchema;\n}\n\n@Component({\n selector: 'lib-jsonjoy-definitions-editor',\n standalone: true,\n imports: [ButtonDirective, forwardRef(() => SchemaPropertyEditorComponent)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy block grow min-h-0' },\n template: `\n <div class=\"flex flex-col h-full\">\n @if (!readOnly()) {\n <div class=\"mb-4 shrink-0 flex justify-end\">\n <button\n libJsonjoyButton\n type=\"button\"\n variant=\"default\"\n size=\"sm\"\n class=\"flex items-center gap-1.5 group\"\n (click)=\"addDefinition()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"group-hover:scale-110 transition-transform\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M8 12h8\" />\n <path d=\"M12 8v8\" />\n </svg>\n <span>{{ t().definitionsAddButton }}</span>\n </button>\n </div>\n }\n\n @if (rows().length === 0) {\n <div class=\"text-center py-10 text-muted-foreground\">\n <p class=\"text-sm\">{{ t().definitionsEmpty }}</p>\n </div>\n } @else {\n <div class=\"grow overflow-auto\">\n @for (row of rows(); track row.name) {\n <lib-jsonjoy-schema-property-editor\n mode=\"definition\"\n [name]=\"row.name\"\n [schema]=\"row.schema\"\n [readOnly]=\"readOnly()\"\n [depth]=\"0\"\n (nameChange)=\"renameDefinition(row.name, $event)\"\n (schemaChange)=\"updateDefinition(row.name, $event)\"\n (delete)=\"deleteDefinition(row.name)\"\n />\n }\n </div>\n }\n </div>\n `,\n})\nexport class DefinitionsEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n\n readonly schemaChange = output<ObjectJsonSchema>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n protected readonly activeKey = computed<'$defs' | 'definitions'>(() => {\n const s = asObjectSchema(this.schema());\n if (s.definitions && !s.$defs) return 'definitions';\n return '$defs';\n });\n\n protected readonly rows = computed<DefinitionRow[]>(() => {\n const s = asObjectSchema(this.schema());\n const source = s[this.activeKey()] ?? {};\n return Object.entries(source).map(([name, sub]) => ({ name, schema: sub }));\n });\n\n protected addDefinition(): void {\n const base = asObjectSchema(this.schema());\n const key = this.activeKey();\n const existing = base[key] ?? {};\n const baseName = 'NewDefinition';\n let candidate = baseName;\n let i = 1;\n while (candidate in existing) {\n i += 1;\n candidate = `${baseName}${i}`;\n }\n this.schemaChange.emit({\n ...base,\n [key]: { ...existing, [candidate]: { type: 'object' } },\n });\n }\n\n protected renameDefinition(currentName: string, newName: string): void {\n const trimmed = newName.trim();\n if (!trimmed || trimmed === currentName) return;\n const base = asObjectSchema(this.schema());\n const key = this.activeKey();\n const existing = { ...(base[key] ?? {}) };\n if (trimmed in existing) return;\n const value = existing[currentName];\n delete existing[currentName];\n existing[trimmed] = value;\n this.schemaChange.emit({ ...base, [key]: existing });\n }\n\n protected updateDefinition(name: string, updated: ObjectJsonSchema): void {\n const base = asObjectSchema(this.schema());\n const key = this.activeKey();\n const existing = { ...(base[key] ?? {}) };\n existing[name] = updated;\n this.schemaChange.emit({ ...base, [key]: existing });\n }\n\n protected deleteDefinition(name: string): void {\n const base = asObjectSchema(this.schema());\n const key = this.activeKey();\n const existing = { ...(base[key] ?? {}) };\n delete existing[name];\n if (Object.keys(existing).length === 0) {\n const { [key]: _omit, ...rest } = base;\n this.schemaChange.emit(rest);\n return;\n }\n this.schemaChange.emit({ ...base, [key]: existing });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\n\nimport {\n type SchemaProperty,\n getSchemaPatternProperties,\n getSchemaProperties,\n} from '../../internal/schema-editor';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type NewField,\n type ObjectJsonSchema,\n type SchemaEditorType,\n getEditorType,\n} from '../../types/json-schema';\nimport { buildValidationTree } from '../../types/validation';\nimport { SchemaPropertyRowsComponent } from './schema-property-rows.component';\nimport type { EnumChangeContext } from './type-editor.component';\n\nfunction pickValidEditorType(schema: JsonSchema): SchemaEditorType {\n if (typeof schema === 'boolean') return 'object';\n const declared = schema.type;\n if (Array.isArray(declared)) {\n return (declared[0] ?? 'object') as SchemaEditorType;\n }\n return getEditorType(schema);\n}\n\nfunction buildFieldFromProperty(\n property: SchemaProperty,\n overrides: Partial<NewField> = {},\n): NewField {\n const schema = property.schema;\n return {\n name: property.name,\n type: pickValidEditorType(schema),\n description: typeof schema === 'boolean' ? '' : schema.description || '',\n required: property.required,\n validation: typeof schema === 'boolean' ? { type: 'object' } : schema,\n ...overrides,\n };\n}\n\n@Component({\n selector: 'lib-jsonjoy-schema-field-list',\n standalone: true,\n imports: [SchemaPropertyRowsComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy block' },\n template: `\n <div class=\"space-y-2 animate-in\">\n <lib-jsonjoy-schema-property-rows\n [properties]=\"properties()\"\n [patternProperties]=\"patternProperties()\"\n [validationChildren]=\"validationTree().children\"\n [readOnly]=\"readOnly()\"\n [autoFocus]=\"autoFocus()\"\n (deleteProperty)=\"deleteField.emit($event)\"\n (deletePatternProperty)=\"deletePatternField.emit($event)\"\n (nameChange)=\"onPropertyNameChange($event)\"\n (patternNameChange)=\"onPatternNameChange($event)\"\n (requiredChange)=\"onRequiredChange($event)\"\n (schemaChange)=\"onPropertySchemaChange($event)\"\n (patternSchemaChange)=\"onPatternSchemaChange($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n </div>\n `,\n})\nexport class SchemaFieldListComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly autoFocus = input<boolean>(true);\n\n readonly editField = output<{ name: string; field: NewField }>();\n readonly deleteField = output<string>();\n readonly editPatternField = output<{ name: string; field: NewField }>();\n readonly deletePatternField = output<string>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n private readonly t = inject(JsonjoyTranslationContextService).translation;\n\n protected readonly properties = computed(() =>\n getSchemaProperties(this.schema()),\n );\n protected readonly patternProperties = computed(() =>\n getSchemaPatternProperties(this.schema()),\n );\n protected readonly validationTree = computed(() =>\n buildValidationTree(this.schema(), this.t()),\n );\n\n protected onPropertyNameChange(event: {\n oldName: string;\n newName: string;\n }): void {\n this.emitEdit(this.properties(), this.editField, event.oldName, {\n name: event.newName,\n });\n }\n\n protected onPatternNameChange(event: {\n oldName: string;\n newName: string;\n }): void {\n this.emitEdit(\n this.patternProperties(),\n this.editPatternField,\n event.oldName,\n {\n name: event.newName,\n },\n );\n }\n\n protected onRequiredChange(event: { name: string; required: boolean }): void {\n this.emitEdit(this.properties(), this.editField, event.name, {\n required: event.required,\n });\n }\n\n protected onPropertySchemaChange(event: {\n name: string;\n schema: ObjectJsonSchema;\n }): void {\n this.emitEditFromSchema(\n this.properties(),\n this.editField,\n event.name,\n event.schema,\n );\n }\n\n protected onPatternSchemaChange(event: {\n name: string;\n schema: ObjectJsonSchema;\n }): void {\n this.emitEditFromSchema(\n this.patternProperties(),\n this.editPatternField,\n event.name,\n event.schema,\n );\n }\n\n private emitEdit(\n list: readonly SchemaProperty[],\n target: { emit: (value: { name: string; field: NewField }) => void },\n name: string,\n overrides: Partial<NewField>,\n ): void {\n const property = list.find((p) => p.name === name);\n if (!property) return;\n target.emit({ name, field: buildFieldFromProperty(property, overrides) });\n }\n\n private emitEditFromSchema(\n list: readonly SchemaProperty[],\n target: { emit: (value: { name: string; field: NewField }) => void },\n name: string,\n updatedSchema: ObjectJsonSchema,\n ): void {\n const property = list.find((p) => p.name === name);\n if (!property) return;\n const declared = updatedSchema.type ?? 'object';\n const fallback: SchemaEditorType = Array.isArray(declared)\n ? ((declared[0] as SchemaEditorType) ?? 'object')\n : (declared as SchemaEditorType);\n const editorType = getEditorType(updatedSchema) || fallback;\n target.emit({\n name,\n field: buildFieldFromProperty(property, {\n type: editorType,\n description: updatedSchema.description || '',\n validation: updatedSchema,\n }),\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\n\nimport type { Translation } from '../../i18n/translation-keys';\nimport { cn } from '../../internal/cn';\nimport {\n DEFAULT_SCHEMAS,\n createFieldSchema,\n listLocalDefinitions,\n removeObjectPatternProperty,\n removeObjectProperty,\n renameObjectPatternProperty,\n renameObjectProperty,\n updateObjectPatternProperty,\n updateObjectProperty,\n updatePropertyRequired,\n} from '../../internal/schema-editor';\nimport { LocalDefinitionsContextService } from '../../services/local-definitions.service';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport { JsonjoyTranslationService } from '../../services/translation.service';\nimport {\n type JsonSchema,\n type NewField,\n type ObjectJsonSchema,\n type SchemaEditorType,\n asObjectSchema,\n getEditorType,\n isBooleanSchema,\n isObjectSchema,\n} from '../../types/json-schema';\nimport { AddFieldButtonComponent } from '../schema-editor-internal/add-field-button.component';\nimport { DefinitionsEditorComponent } from '../schema-editor-internal/definitions-editor.component';\nimport { SchemaFieldListComponent } from '../schema-editor-internal/schema-field-list.component';\nimport { TypeEditorComponent } from '../schema-editor-internal/type-editor.component';\n\nconst ROOT_TYPE_OPTIONS: readonly {\n id: SchemaEditorType;\n labelKey: keyof Translation;\n}[] = [\n { id: 'object', labelKey: 'fieldTypeObjectLabel' },\n { id: 'string', labelKey: 'fieldTypeTextLabel' },\n { id: 'number', labelKey: 'fieldTypeNumberLabel' },\n { id: 'boolean', labelKey: 'fieldTypeBooleanLabel' },\n { id: 'array', labelKey: 'fieldTypeArrayLabel' },\n { id: 'anyOf', labelKey: 'schemaTypeAnyOf' },\n { id: 'oneOf', labelKey: 'schemaTypeOneOf' },\n { id: 'allOf', labelKey: 'schemaTypeAllOf' },\n { id: '$ref', labelKey: 'schemaTypeRef' },\n { id: 'null', labelKey: 'schemaTypeNull' },\n];\n\n@Component({\n selector: 'lib-jsonjoy-schema-fields-editor',\n standalone: true,\n imports: [\n AddFieldButtonComponent,\n forwardRef(() => DefinitionsEditorComponent),\n SchemaFieldListComponent,\n forwardRef(() => TypeEditorComponent),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [LocalDefinitionsContextService, JsonjoyTranslationContextService],\n host: { class: 'jsonjoy' },\n template: `\n <div [class]=\"rootClasses()\">\n @if (rootType() === 'object') {\n <div\n class=\"mb-4 shrink-0 flex items-center justify-between gap-2 border-b border-border\"\n >\n <div class=\"flex\">\n <button\n type=\"button\"\n [class]=\"tabClasses('properties')\"\n (click)=\"activeTab.set('properties')\"\n >\n {{ t().propertiesTabLabel }}\n </button>\n <button\n type=\"button\"\n [class]=\"tabClasses('definitions')\"\n (click)=\"activeTab.set('definitions')\"\n >\n {{ t().definitionsTabLabel }}\n @if (definitionsCount() > 0) {\n <span class=\"ml-1.5 text-xs text-muted-foreground\"\n >({{ definitionsCount() }})</span\n >\n }\n </button>\n </div>\n\n @if (!readOnly() && activeTab() === 'properties') {\n <div class=\"flex items-center gap-2 pb-2\">\n <label class=\"text-xs text-muted-foreground\">Root type:</label>\n <select\n class=\"text-xs rounded-md border bg-background px-2 py-1 shadow-xs focus:outline-none focus:ring-2 focus:ring-primary/30\"\n (change)=\"onRootTypeChange($event)\"\n >\n @for (option of rootTypeOptions; track option.id) {\n <option\n [value]=\"option.id\"\n [selected]=\"option.id === rootType()\"\n >\n {{ t()[option.labelKey] }}\n </option>\n }\n </select>\n </div>\n }\n </div>\n } @else if (!readOnly()) {\n <div class=\"mb-4 shrink-0 flex items-center gap-2\">\n <label class=\"text-sm font-medium text-muted-foreground\"\n >Root type:</label\n >\n <select\n class=\"text-sm rounded-md border bg-background px-2 py-1 shadow-xs focus:outline-none focus:ring-2 focus:ring-primary/30\"\n (change)=\"onRootTypeChange($event)\"\n >\n @for (option of rootTypeOptions; track option.id) {\n <option [value]=\"option.id\" [selected]=\"option.id === rootType()\">\n {{ t()[option.labelKey] }}\n </option>\n }\n </select>\n </div>\n }\n\n @if (rootType() === 'object') {\n @if (activeTab() === 'properties') {\n @if (!readOnly()) {\n <div class=\"mb-6 shrink-0 flex justify-end\">\n <lib-jsonjoy-add-field-button\n [autoFocus]=\"autoFocus()\"\n (addField)=\"handleAddField($event)\"\n (addPatternField)=\"handleAddPatternField($event)\"\n />\n </div>\n }\n <div class=\"grow overflow-auto\">\n @if (hasFields()) {\n <lib-jsonjoy-schema-field-list\n [schema]=\"value()\"\n [readOnly]=\"readOnly()\"\n [autoFocus]=\"autoFocus()\"\n (editField)=\"handleEditField($event)\"\n (deleteField)=\"handleDeleteField($event)\"\n (editPatternField)=\"handleEditPatternField($event)\"\n (deletePatternField)=\"handleDeletePatternField($event)\"\n />\n } @else {\n <div class=\"text-center py-10 text-muted-foreground\">\n <p class=\"mb-3\">{{ t().visualEditorNoFieldsHint1 }}</p>\n <p class=\"text-sm\">{{ t().visualEditorNoFieldsHint2 }}</p>\n </div>\n }\n </div>\n } @else {\n <lib-jsonjoy-definitions-editor\n [schema]=\"value()\"\n [readOnly]=\"readOnly()\"\n (schemaChange)=\"value.set($event)\"\n />\n }\n } @else {\n <div class=\"grow overflow-auto\">\n <lib-jsonjoy-type-editor\n [schema]=\"value()\"\n [readOnly]=\"readOnly()\"\n (schemaChange)=\"value.set($event)\"\n />\n </div>\n }\n </div>\n `,\n})\nexport class SchemaFieldsEditorComponent {\n readonly value = model<JsonSchema>({ type: 'object' });\n readonly readOnly = input<boolean>(false);\n readonly autoFocus = input<boolean>(true);\n readonly className = input<string | undefined>(undefined);\n readonly locale = input<Translation | undefined>(undefined);\n readonly messages = input<Partial<Translation> | undefined>(undefined);\n\n private readonly localDefinitions = inject(LocalDefinitionsContextService);\n\n constructor() {\n // Thread the effective translation down to the inner editors.\n this.translationContext.setSource(this.t);\n // Keep the $ref editor's local-definition quick-pick in sync with the\n // root schema's $defs/definitions (incl. edits made in the Definitions tab,\n // which flow back through value()).\n effect(() => this.localDefinitions.set(listLocalDefinitions(this.value())));\n }\n\n private readonly translations = inject(JsonjoyTranslationService);\n private readonly translationContext = inject(\n JsonjoyTranslationContextService,\n );\n protected readonly t = this.translations.withOverrides(\n this.locale,\n this.messages,\n );\n\n protected readonly rootClasses = computed(() =>\n cn('p-4 h-full flex flex-col overflow-auto jsonjoy', this.className()),\n );\n\n protected readonly rootTypeOptions = ROOT_TYPE_OPTIONS;\n\n protected readonly rootType = computed<SchemaEditorType>(() =>\n getEditorType(this.value()),\n );\n\n protected onRootTypeChange(event: Event): void {\n const target = event.target as HTMLSelectElement;\n const nextType = target.value as SchemaEditorType;\n const current = this.value();\n const preserved: Partial<ObjectJsonSchema> = isObjectSchema(current)\n ? {\n ...(current.title !== undefined ? { title: current.title } : {}),\n ...(current.description !== undefined\n ? { description: current.description }\n : {}),\n }\n : {};\n const next = { ...DEFAULT_SCHEMAS[nextType], ...preserved };\n this.value.set(next);\n }\n\n protected readonly hasFields = computed(() => {\n const schema = this.value();\n if (isBooleanSchema(schema)) return false;\n const properties = schema.properties;\n const patternProperties = schema.patternProperties;\n return (\n (!!properties && Object.keys(properties).length > 0) ||\n (!!patternProperties && Object.keys(patternProperties).length > 0)\n );\n });\n\n protected readonly hasDefinitions = computed(() => {\n const schema = this.value();\n if (isBooleanSchema(schema)) return false;\n return (\n (!!schema.$defs && Object.keys(schema.$defs).length > 0) ||\n (!!schema.definitions && Object.keys(schema.definitions).length > 0)\n );\n });\n\n protected readonly definitionsCount = computed(() => {\n const schema = this.value();\n if (isBooleanSchema(schema)) return 0;\n return (\n Object.keys(schema.$defs ?? {}).length +\n Object.keys(schema.definitions ?? {}).length\n );\n });\n\n protected readonly activeTab = signal<'properties' | 'definitions'>(\n 'properties',\n );\n\n protected tabClasses(tab: 'properties' | 'definitions'): string {\n return cn(\n 'text-sm font-medium px-4 py-2 -mb-px border-b-2 transition-colors',\n this.activeTab() === tab\n ? 'border-primary text-foreground'\n : 'border-transparent text-muted-foreground hover:text-foreground',\n );\n }\n\n protected handleAddField(field: NewField): void {\n const fieldSchema = createFieldSchema(field);\n let next = updateObjectProperty(\n asObjectSchema(this.value()),\n field.name,\n fieldSchema,\n );\n if (field.required) {\n next = updatePropertyRequired(next, field.name, true);\n }\n this.value.set(next);\n }\n\n protected handleAddPatternField(field: NewField): void {\n this.value.set(\n updateObjectPatternProperty(\n asObjectSchema(this.value()),\n field.name,\n createFieldSchema(field),\n ),\n );\n }\n\n protected handleEditField(event: { name: string; field: NewField }): void {\n const fieldSchema = createFieldSchema(event.field);\n let next = asObjectSchema(this.value());\n\n if (event.name !== event.field.name) {\n next = renameObjectProperty(next, event.name, event.field.name);\n next = updateObjectProperty(next, event.field.name, fieldSchema);\n } else {\n next = updateObjectProperty(next, event.name, fieldSchema);\n }\n\n next = updatePropertyRequired(next, event.field.name, event.field.required);\n this.value.set(next);\n }\n\n protected handleEditPatternField(event: {\n name: string;\n field: NewField;\n }): void {\n const fieldSchema = createFieldSchema(event.field);\n let next = asObjectSchema(this.value());\n\n if (event.name !== event.field.name) {\n next = renameObjectPatternProperty(next, event.name, event.field.name);\n next = updateObjectPatternProperty(next, event.field.name, fieldSchema);\n } else {\n next = updateObjectPatternProperty(next, event.name, fieldSchema);\n }\n\n this.value.set(next);\n }\n\n protected handleDeleteField(name: string): void {\n this.value.set(removeObjectProperty(asObjectSchema(this.value()), name));\n }\n\n protected handleDeletePatternField(name: string): void {\n this.value.set(\n removeObjectPatternProperty(asObjectSchema(this.value()), name),\n );\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n DestroyRef,\n Directive,\n ElementRef,\n PLATFORM_ID,\n afterNextRender,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { indentWithTab } from '@codemirror/commands';\nimport { json, jsonParseLinter } from '@codemirror/lang-json';\nimport {\n HighlightStyle,\n defaultHighlightStyle,\n syntaxHighlighting,\n} from '@codemirror/language';\nimport {\n type Diagnostic,\n forceLinting,\n lintGutter,\n linter,\n} from '@codemirror/lint';\nimport { Annotation, Compartment, EditorState } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { keymap } from '@codemirror/view';\nimport { tags as t } from '@lezer/highlight';\nimport { basicSetup } from 'codemirror';\n\nimport type { JsonSchema } from '../types/json-schema';\nimport { validateJson } from './json-validator';\n\n/**\n * Imperative handle emitted via the `mounted` output once the editor has\n * finished loading. Consumers (e.g. `ValidateJsonDialog`) use this to reveal\n * a line/column without leaking the raw editor instance across the directive\n * boundary.\n */\nexport interface JsonjoyEditorHandle {\n revealError(line: number, column: number): void;\n focus(): void;\n setValue(value: string): void;\n getValue(): string;\n layout(): void;\n}\n\n/** Marks transactions the directive dispatches itself, so the write-back\n * listener can ignore them and avoid echoing programmatic value updates. */\nconst External = Annotation.define<boolean>();\n\n/** Readable JSON syntax colors for the dark surface (default style is light). */\nconst DARK_HIGHLIGHT_STYLE = HighlightStyle.define([\n { tag: [t.propertyName, t.definition(t.propertyName)], color: '#7dd3fc' },\n { tag: [t.string, t.special(t.string)], color: '#86efac' },\n { tag: [t.number, t.bool, t.null], color: '#fca5a5' },\n { tag: [t.keyword, t.operator], color: '#c4b5fd' },\n { tag: [t.punctuation, t.separator, t.bracket], color: '#a3a3a3' },\n { tag: t.comment, color: '#6b7280', fontStyle: 'italic' },\n { tag: t.invalid, color: '#fca5a5' },\n]);\n\n/**\n * CodeMirror 6 JSON editor. Attached to a host element, it creates an editor\n * instance and bridges CodeMirror's imperative API to Angular signals.\n */\n@Directive({\n selector: '[libJsonjoyEditor]',\n exportAs: 'libJsonjoyEditor',\n})\nexport class JsonjoyEditorDirective {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platformId = inject(PLATFORM_ID);\n\n readonly value = model<string>('');\n /** Reserved for future languages; only `json` is currently supported. */\n readonly language = input<string>('json');\n readonly readOnly = input<boolean>(false);\n readonly autoFocus = input<boolean>(false);\n readonly schema = input<JsonSchema | undefined>(undefined);\n\n readonly mounted = output<JsonjoyEditorHandle>();\n\n private readonly _loaded = signal(false);\n readonly loaded = this._loaded.asReadonly();\n\n private view: EditorView | null = null;\n private readonly readOnlyCompartment = new Compartment();\n private readonly themeCompartment = new Compartment();\n private observer: MutationObserver | null = null;\n private readonly _isDark = signal(false);\n\n constructor() {\n if (isPlatformBrowser(this.platformId)) {\n afterNextRender(() => this.bootstrap());\n }\n\n effect(() => {\n const next = this.value();\n const view = this.view;\n if (!view) return;\n if (view.state.doc.toString() === next) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: next },\n annotations: External.of(true),\n });\n });\n\n effect(() => {\n const isReadOnly = this.readOnly();\n this.view?.dispatch({\n effects: this.readOnlyCompartment.reconfigure(\n this.readOnlyExtension(isReadOnly),\n ),\n });\n });\n\n effect(() => {\n // Re-run schema diagnostics whenever the bound schema changes.\n this.schema();\n if (this.view) forceLinting(this.view);\n });\n\n effect(() => {\n const dark = this._isDark();\n this.view?.dispatch({\n effects: this.themeCompartment.reconfigure(this.themeExtension(dark)),\n });\n });\n }\n\n private bootstrap(): void {\n this.detectDark();\n this.observeDark();\n\n const schemaLinter = linter(async (view): Promise<Diagnostic[]> => {\n const schema = this.schema();\n const text = view.state.doc.toString();\n if (!schema || !text.trim()) return [];\n try {\n JSON.parse(text);\n } catch {\n // jsonParseLinter already reports syntax errors.\n return [];\n }\n const result = await validateJson(text, schema);\n if (result.valid) return [];\n const doc = view.state.doc;\n return (result.errors ?? []).map((error) => {\n let from = 0;\n let to = 0;\n if (error.line) {\n const lineObj = doc.line(Math.min(error.line, doc.lines));\n from = Math.min(\n lineObj.from + Math.max(0, (error.column ?? 1) - 1),\n lineObj.to,\n );\n to = lineObj.to;\n }\n return {\n from,\n to: Math.max(from, to),\n severity: 'error' as const,\n message: error.message,\n };\n });\n });\n\n const state = EditorState.create({\n doc: this.value(),\n extensions: [\n basicSetup,\n json(),\n linter(jsonParseLinter()),\n schemaLinter,\n lintGutter(),\n keymap.of([indentWithTab]),\n this.readOnlyCompartment.of(this.readOnlyExtension(this.readOnly())),\n this.themeCompartment.of(this.themeExtension(this._isDark())),\n EditorView.updateListener.of((update) => {\n if (!update.docChanged) return;\n if (update.transactions.some((tr) => tr.annotation(External))) return;\n this.value.set(update.state.doc.toString());\n }),\n ],\n });\n\n this.view = new EditorView({ state, parent: this.host.nativeElement });\n\n if (this.autoFocus()) this.view.focus();\n\n this._loaded.set(true);\n this.mounted.emit(this.buildHandle());\n\n this.destroyRef.onDestroy(() => {\n this.observer?.disconnect();\n this.observer = null;\n this.view?.destroy();\n this.view = null;\n });\n }\n\n private readOnlyExtension(readOnly: boolean) {\n return [\n EditorState.readOnly.of(readOnly),\n EditorView.editable.of(!readOnly),\n ];\n }\n\n private themeExtension(dark: boolean) {\n const base = EditorView.theme(\n {\n '&': {\n height: '100%',\n fontSize: '14px',\n backgroundColor: 'transparent',\n color: 'var(--jsonjoy-color-foreground)',\n },\n '&.cm-focused': { outline: 'none' },\n '.cm-scroller': {\n fontFamily: \"'SF Mono', Monaco, Menlo, Consolas, monospace\",\n overflow: 'auto',\n },\n '.cm-gutters': {\n backgroundColor: 'transparent',\n border: 'none',\n color: 'var(--jsonjoy-color-muted-foreground)',\n },\n '.cm-activeLine, .cm-activeLineGutter': {\n backgroundColor:\n 'color-mix(in srgb, var(--jsonjoy-color-muted) 40%, transparent)',\n },\n },\n { dark },\n );\n // `basicSetup` only ships a light highlight style; swap in a dark one when dark.\n const highlight = dark\n ? syntaxHighlighting(DARK_HIGHLIGHT_STYLE)\n : syntaxHighlighting(defaultHighlightStyle);\n return [base, highlight];\n }\n\n private observeDark(): void {\n if (typeof MutationObserver === 'undefined') return;\n this.observer = new MutationObserver(() => this.detectDark());\n // The dark toggle lives on the document root, so watch only its class.\n this.observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n });\n }\n\n private detectDark(): void {\n const host = this.host.nativeElement;\n const dark =\n host.closest('.dark') !== null ||\n document.documentElement.classList.contains('dark');\n this._isDark.set(dark);\n }\n\n private buildHandle(): JsonjoyEditorHandle {\n return {\n revealError: (line, column) => {\n const view = this.view;\n if (!view) return;\n const doc = view.state.doc;\n const lineNo = Math.max(1, Math.min(line, doc.lines));\n const lineObj = doc.line(lineNo);\n const pos = Math.min(\n lineObj.from + Math.max(0, (column ?? 1) - 1),\n lineObj.to,\n );\n view.dispatch({\n selection: { anchor: pos },\n effects: EditorView.scrollIntoView(pos, { y: 'center' }),\n });\n view.focus();\n },\n focus: () => this.view?.focus(),\n setValue: (value) => {\n const view = this.view;\n if (!view) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: value },\n annotations: External.of(true),\n });\n },\n getValue: () => this.view?.state.doc.toString() ?? '',\n layout: () => this.view?.requestMeasure(),\n };\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n PLATFORM_ID,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\n\nimport type { Translation } from '../../i18n/translation-keys';\nimport { JsonjoyEditorDirective } from '../../internal/editor.directive';\nimport { JsonjoyTranslationService } from '../../services/translation.service';\nimport type { JsonSchema } from '../../types/json-schema';\n\n/**\n * Angular equivalent of React `<SchemaJsonEditor>`. Renders the\n * CodeMirror-backed JSON source editor with a download button.\n */\n@Component({\n selector: 'lib-jsonjoy-schema-json-editor',\n standalone: true,\n imports: [JsonjoyEditorDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div class=\"relative overflow-hidden h-full flex flex-col jsonjoy\">\n <div\n class=\"flex items-center justify-between bg-secondary/80 backdrop-blur-xs px-4 py-2 border-b shrink-0\"\n >\n <div class=\"flex items-center gap-2\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\n />\n <polyline points=\"14 2 14 8 20 8\" />\n <path\n d=\"M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1\"\n />\n <path\n d=\"M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1\"\n />\n </svg>\n <span class=\"font-medium text-sm\">{{ t().visualizerSource }}</span>\n </div>\n <button\n type=\"button\"\n class=\"p-1.5 hover:bg-secondary rounded-md transition-colors\"\n [title]=\"t().visualizerDownloadTitle\"\n (click)=\"onDownload()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"7 10 12 15 17 10\" />\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n </svg>\n </button>\n </div>\n <div class=\"grow flex min-h-0\">\n <div\n #editorHost\n libJsonjoyEditor\n class=\"editor-container w-full h-full\"\n language=\"json\"\n [readOnly]=\"readOnly()\"\n [autoFocus]=\"autoFocus()\"\n [(value)]=\"jsonText\"\n ></div>\n @if (!loaded()) {\n <div\n class=\"absolute inset-x-0 bottom-0 top-12 flex items-center justify-center bg-secondary/30\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"animate-spin\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n </div>\n }\n </div>\n </div>\n `,\n})\nexport class SchemaJsonEditorComponent {\n readonly value = model<JsonSchema>({ type: 'object' });\n readonly readOnly = input<boolean>(false);\n readonly autoFocus = input<boolean>(true);\n readonly locale = input<Translation | undefined>(undefined);\n readonly messages = input<Partial<Translation> | undefined>(undefined);\n\n private readonly translations = inject(JsonjoyTranslationService);\n private readonly platformId = inject(PLATFORM_ID);\n protected readonly t = this.translations.withOverrides(\n this.locale,\n this.messages,\n );\n\n private readonly editorDirective = viewChild.required(JsonjoyEditorDirective);\n\n /**\n * Pretty-printed mirror of the bound schema. Pushed into the editor via the\n * directive's two-way `value`. Updated by `effect()` when `value()` changes\n * externally; the directive writes back to this signal when the user edits.\n */\n protected readonly jsonText = signal(this.stringify(this.value()));\n\n protected readonly loaded = computed(() => this.editorDirective().loaded());\n\n constructor() {\n // value -> text. Reacts only to value(); the current text is read\n // untracked so a user edit (which changes jsonText, then value) does not\n // wake this effect and revert the edit before it is applied. Skips\n // reformatting when the text already represents the same schema, so the\n // caret is not disturbed while typing.\n effect(() => {\n const next = this.stringify(this.value());\n const current = untracked(this.jsonText);\n if (current === next || this.textMatchesValue(current)) return;\n this.jsonText.set(next);\n });\n\n // text -> value. Reacts only to jsonText(); value() is read untracked so\n // an external value change does not re-run this effect.\n effect(() => {\n const raw = this.jsonText();\n if (untracked(this.readOnly)) return;\n try {\n const parsed = JSON.parse(raw) as JsonSchema;\n if (this.jsonEqual(parsed, untracked(this.value))) return;\n this.value.set(parsed);\n } catch {\n // The editor surfaces the parse error inline — silently ignore here.\n }\n });\n }\n\n /** Whether `text` parses to a schema deep-equal to the current `value()`. */\n private textMatchesValue(text: string): boolean {\n try {\n return this.jsonEqual(JSON.parse(text) as JsonSchema, this.value());\n } catch {\n return false;\n }\n }\n\n /** Order-insensitive structural equality for two JSON values. */\n private jsonEqual(a: JsonSchema, b: JsonSchema): boolean {\n return stableStringify(a) === stableStringify(b);\n }\n\n protected onDownload(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n const content = this.stringify(this.value());\n const blob = new Blob([content], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = this.t().visualizerDownloadFileName;\n document.body.appendChild(anchor);\n anchor.click();\n document.body.removeChild(anchor);\n URL.revokeObjectURL(url);\n }\n\n private stringify(value: JsonSchema): string {\n return JSON.stringify(value, null, 2);\n }\n}\n\n/** JSON stringify with object keys sorted recursively, for stable comparison. */\nfunction stableStringify(value: unknown): string {\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(',')}]`;\n }\n if (value && typeof value === 'object') {\n const entries = Object.keys(value as Record<string, unknown>)\n .sort()\n .map(\n (key) =>\n `${JSON.stringify(key)}:${stableStringify(\n (value as Record<string, unknown>)[key],\n )}`,\n );\n return `{${entries.join(',')}}`;\n }\n return JSON.stringify(value) ?? 'null';\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n untracked,\n} from '@angular/core';\n\nimport type { Translation } from '../../i18n/translation-keys';\nimport { cn } from '../../internal/cn';\nimport { JsonjoyTranslationService } from '../../services/translation.service';\nimport type { JsonSchema } from '../../types/json-schema';\nimport { SchemaFieldsEditorComponent } from '../schema-fields-editor/schema-fields-editor.component';\nimport { SchemaJsonEditorComponent } from '../schema-json-editor/schema-json-editor.component';\n\nexport type SchemaBuilderMode = 'visual' | 'json' | 'both';\n\n@Component({\n selector: 'lib-jsonjoy-schema-builder',\n standalone: true,\n imports: [SchemaFieldsEditorComponent, SchemaJsonEditorComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy block' },\n template: `\n <div [class]=\"rootClasses()\">\n <div\n class=\"flex items-center justify-between px-4 py-3 border-b w-full shrink-0\"\n >\n <h3 class=\"font-medium\">{{ t().schemaEditorTitle }}</h3>\n <div\n class=\"grid grid-cols-3 w-[280px] h-9 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground\"\n >\n <button\n type=\"button\"\n [class]=\"toggleButtonClasses(mode() === 'visual')\"\n (click)=\"mode.set('visual')\"\n >\n {{ t().schemaEditorEditModeVisual }}\n </button>\n <button\n type=\"button\"\n [class]=\"toggleButtonClasses(mode() === 'both')\"\n (click)=\"mode.set('both')\"\n >\n {{ t().schemaEditorEditModeBoth }}\n </button>\n <button\n type=\"button\"\n [class]=\"toggleButtonClasses(mode() === 'json')\"\n (click)=\"mode.set('json')\"\n >\n {{ t().schemaEditorEditModeJson }}\n </button>\n </div>\n </div>\n\n <div class=\"flex flex-row w-full h-[600px] min-h-0\">\n @if (mode() !== 'json') {\n <div [class]=\"visualPaneClasses()\">\n <lib-jsonjoy-schema-fields-editor\n [(value)]=\"value\"\n [readOnly]=\"readOnly()\"\n [autoFocus]=\"autoFocus()\"\n [locale]=\"locale()\"\n [messages]=\"messages()\"\n />\n </div>\n }\n @if (mode() === 'both') {\n <div class=\"w-px bg-border shrink-0\"></div>\n }\n @if (mode() !== 'visual') {\n <div [class]=\"jsonPaneClasses()\">\n <lib-jsonjoy-schema-json-editor\n [(value)]=\"value\"\n [readOnly]=\"readOnly()\"\n [autoFocus]=\"autoFocus()\"\n [locale]=\"locale()\"\n [messages]=\"messages()\"\n />\n </div>\n }\n </div>\n </div>\n `,\n})\nexport class SchemaBuilderComponent {\n readonly value = model<JsonSchema>({ type: 'object' });\n readonly defaultValue = input<JsonSchema | undefined>(undefined);\n readonly readOnly = input<boolean>(false);\n readonly autoFocus = input<boolean>(true);\n readonly className = input<string | undefined>(undefined);\n readonly locale = input<Translation | undefined>(undefined);\n readonly messages = input<Partial<Translation> | undefined>(undefined);\n readonly mode = model<SchemaBuilderMode>('both');\n\n private readonly translations = inject(JsonjoyTranslationService);\n protected readonly t = this.translations.withOverrides(\n this.locale,\n this.messages,\n );\n\n protected readonly rootClasses = computed(() =>\n cn('json-editor-container w-full jsonjoy flex flex-col', this.className()),\n );\n\n protected readonly visualPaneClasses = computed(() =>\n this.mode() === 'both' ? 'w-1/2 h-full min-h-0' : 'w-full h-full min-h-0',\n );\n\n protected readonly jsonPaneClasses = computed(() =>\n this.mode() === 'both' ? 'w-1/2 h-full min-h-0' : 'w-full h-full min-h-0',\n );\n\n protected toggleButtonClasses(active: boolean): string {\n return cn(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1 text-sm font-medium transition-all',\n active && 'bg-background text-foreground shadow-xs',\n );\n }\n\n private seededDefault = false;\n\n constructor() {\n // Seed `defaultValue` once, on first run, and only if the consumer hasn't\n // bound a value — so it never clobbers a real binding.\n effect(() => {\n const initial = this.defaultValue();\n if (this.seededDefault || !initial) return;\n untracked(() => {\n this.seededDefault = true;\n if (this.isUnseededDefault(this.value())) {\n this.value.set(initial);\n }\n });\n });\n }\n\n private isUnseededDefault(current: JsonSchema): boolean {\n return (\n typeof current === 'object' &&\n current !== null &&\n !Array.isArray(current) &&\n Object.keys(current).length === 1 &&\n (current as { type?: unknown }).type === 'object'\n );\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n PLATFORM_ID,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport type { Translation } from '../../i18n/translation-keys';\nimport {\n JsonjoyEditorDirective,\n type JsonjoyEditorHandle,\n} from '../../internal/editor.directive';\nimport { createSchemaFromJson } from '../../internal/schema-inference';\nimport { JsonjoyTranslationService } from '../../services/translation.service';\nimport type { JsonSchema } from '../../types/json-schema';\nimport { ButtonDirective } from '../ui/button.directive';\n\n/**\n * Native `<dialog>`-based equivalent of React `<InferSchemaDialog>`. Opens a\n * CodeMirror-backed JSON input pane; on submit, infers a JSON Schema and emits\n * via `inferred`.\n */\n@Component({\n selector: 'lib-jsonjoy-infer-schema-dialog',\n standalone: true,\n imports: [ButtonDirective, JsonjoyEditorDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <dialog\n #dialogRef\n class=\"md:max-w-4xl max-h-[90vh] w-[95vw] m-auto p-4 sm:p-6 jsonjoy rounded-lg border bg-background shadow-lg backdrop:bg-black/40\"\n (close)=\"onDialogClose()\"\n >\n <div class=\"mb-4\">\n <h2 class=\"text-xl font-semibold\">{{ t().inferrerTitle }}</h2>\n <p class=\"text-sm text-muted-foreground\">\n {{ t().inferrerDescription }}\n </p>\n </div>\n\n <div class=\"py-2\">\n <div class=\"border rounded-md overflow-hidden relative h-[450px]\">\n <div\n libJsonjoyEditor\n class=\"absolute inset-0\"\n language=\"json\"\n [autoFocus]=\"autoFocus()\"\n [(value)]=\"jsonInput\"\n (mounted)=\"onEditorMounted($event)\"\n ></div>\n @if (!editorLoaded()) {\n <div\n class=\"absolute inset-0 flex items-center justify-center bg-secondary/30\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"animate-spin\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n </div>\n }\n </div>\n @if (error()) {\n <p class=\"text-sm text-destructive mt-2\">{{ error() }}</p>\n }\n </div>\n\n <div class=\"mt-4 gap-2 flex flex-wrap justify-end\">\n <button\n libJsonjoyButton\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n (click)=\"close()\"\n >\n {{ t().inferrerCancel }}\n </button>\n <button libJsonjoyButton type=\"button\" size=\"sm\" (click)=\"generate()\">\n {{ t().inferrerGenerate }}\n </button>\n </div>\n </dialog>\n `,\n})\nexport class InferSchemaDialogComponent {\n readonly open = model<boolean>(false);\n readonly autoFocus = input<boolean>(true);\n readonly locale = input<Translation | undefined>(undefined);\n readonly messages = input<Partial<Translation> | undefined>(undefined);\n\n readonly inferred = output<JsonSchema>();\n\n private readonly translations = inject(JsonjoyTranslationService);\n private readonly platformId = inject(PLATFORM_ID);\n protected readonly t = this.translations.withOverrides(\n this.locale,\n this.messages,\n );\n\n protected readonly jsonInput = signal('');\n protected readonly error = signal<string | null>(null);\n protected readonly editorLoaded = signal(false);\n\n private readonly dialogRef =\n viewChild<ElementRef<HTMLDialogElement>>('dialogRef');\n private editorHandle: JsonjoyEditorHandle | null = null;\n\n constructor() {\n effect(() => {\n const shouldOpen = this.open();\n const el = this.dialogRef()?.nativeElement;\n if (!el) return;\n if (shouldOpen && !el.open) {\n el.showModal();\n // The editor mounts while the dialog is display:none; re-measure now\n // that the host has real dimensions. `requestAnimationFrame` is\n // browser-only, so skip the re-measure during SSR.\n if (isPlatformBrowser(this.platformId)) {\n requestAnimationFrame(() => {\n this.editorHandle?.layout();\n if (this.autoFocus()) {\n this.editorHandle?.focus();\n }\n });\n }\n } else if (!shouldOpen && el.open) {\n el.close();\n }\n });\n }\n\n protected onEditorMounted(handle: JsonjoyEditorHandle): void {\n this.editorHandle = handle;\n this.editorLoaded.set(true);\n if (this.open()) {\n handle.layout();\n if (this.autoFocus()) {\n handle.focus();\n }\n }\n }\n\n protected generate(): void {\n try {\n const parsed = JSON.parse(this.jsonInput());\n this.error.set(null);\n const inferredSchema = createSchemaFromJson(parsed);\n this.inferred.emit(inferredSchema);\n this.close();\n } catch {\n this.error.set(this.t().inferrerErrorInvalidJson);\n }\n }\n\n protected close(): void {\n this.open.set(false);\n }\n\n protected onDialogClose(): void {\n this.jsonInput.set('');\n this.error.set(null);\n if (this.open()) {\n this.open.set(false);\n }\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n PLATFORM_ID,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport type { Translation } from '../../i18n/translation-keys';\nimport {\n JsonjoyEditorDirective,\n type JsonjoyEditorHandle,\n} from '../../internal/editor.directive';\nimport {\n type ValidationResult,\n validateJson,\n} from '../../internal/json-validator';\nimport {\n JsonjoyTranslationService,\n formatTranslation,\n} from '../../services/translation.service';\nimport type { JsonSchema } from '../../types/json-schema';\nimport { ButtonDirective } from '../ui/button.directive';\n\nconst VALIDATION_DEBOUNCE_MS = 500;\n\n/**\n * Native `<dialog>`-based equivalent of React `<ValidateJsonDialog>`. Two\n * CodeMirror editors side-by-side: writable user JSON validated against the\n * provided schema, and a read-only schema viewer. Validation runs debounced.\n */\n@Component({\n selector: 'lib-jsonjoy-validate-json-dialog',\n standalone: true,\n imports: [ButtonDirective, JsonjoyEditorDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <dialog\n #dialogRef\n class=\"md:max-w-5xl max-h-[90vh] w-[95vw] m-auto p-4 sm:p-6 jsonjoy rounded-lg border bg-background shadow-lg backdrop:bg-black/40\"\n (close)=\"onDialogClose()\"\n >\n <div class=\"mb-4\">\n <h2 class=\"text-xl font-semibold\">{{ t().validatorTitle }}</h2>\n <p class=\"text-sm text-muted-foreground\">\n {{ t().validatorDescription }}\n </p>\n </div>\n\n <div\n class=\"flex-1 flex flex-col md:flex-row gap-4 py-2 overflow-hidden h-[500px]\"\n >\n <div class=\"flex-1 flex flex-col h-full min-w-0\">\n <div class=\"text-sm font-medium mb-2\">{{ t().validatorContent }}</div>\n <div class=\"border rounded-md flex-1 h-full relative overflow-hidden\">\n <div\n libJsonjoyEditor\n class=\"absolute inset-0\"\n language=\"json\"\n [autoFocus]=\"autoFocus()\"\n [schema]=\"schema()\"\n [(value)]=\"jsonInput\"\n (mounted)=\"onJsonEditorMounted($event)\"\n ></div>\n @if (!jsonEditorLoaded()) {\n <div\n class=\"absolute inset-0 flex items-center justify-center bg-secondary/30\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"animate-spin\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n </div>\n }\n </div>\n </div>\n\n <div class=\"flex-1 flex flex-col h-full min-w-0\">\n <div class=\"text-sm font-medium mb-2\">\n {{ t().validatorCurrentSchema }}\n </div>\n <div class=\"border rounded-md flex-1 h-full relative overflow-hidden\">\n <div\n libJsonjoyEditor\n class=\"absolute inset-0\"\n language=\"json\"\n [readOnly]=\"true\"\n [value]=\"schemaText()\"\n (mounted)=\"onSchemaEditorMounted($event)\"\n ></div>\n </div>\n </div>\n </div>\n\n @if (validationResult(); as result) {\n <div [class]=\"resultBannerClasses()\">\n <div class=\"flex items-center\">\n @if (result.valid) {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"text-green-500 mr-2\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n <p class=\"text-green-600 font-medium\">{{ t().validatorValid }}</p>\n } @else {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"text-red-500 mr-2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n <p class=\"text-red-600 font-medium\">{{ headerMessage() }}</p>\n }\n </div>\n\n @if (!result.valid && (result.errors?.length ?? 0) > 0) {\n <div class=\"mt-3 max-h-[200px] overflow-y-auto\">\n <ul class=\"space-y-2\">\n @for (error of result.errors; track $index) {\n <li>\n <button\n type=\"button\"\n class=\"w-full text-left bg-card border border-destructive/30 rounded-md p-3 shadow-xs hover:shadow-md transition-shadow duration-200 cursor-pointer\"\n (click)=\"goToError(error.line, error.column)\"\n >\n <div class=\"flex items-start justify-between\">\n <div class=\"flex-1\">\n <p class=\"text-sm font-medium text-destructive\">\n {{\n error.path === '/'\n ? t().validatorErrorPathRoot\n : error.path\n }}\n </p>\n <p class=\"text-sm text-muted-foreground mt-1\">\n {{ error.message }}\n </p>\n </div>\n @if (error.line) {\n <div\n class=\"text-xs bg-muted px-2 py-1 rounded text-muted-foreground\"\n >\n {{ formatLocation(error.line, error.column) }}\n </div>\n }\n </div>\n </button>\n </li>\n }\n </ul>\n </div>\n }\n </div>\n }\n\n <div class=\"mt-4 gap-2 flex flex-wrap justify-end\">\n <button\n libJsonjoyButton\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n (click)=\"close()\"\n >\n {{ t().validatorClose }}\n </button>\n </div>\n </dialog>\n `,\n})\nexport class ValidateJsonDialogComponent {\n readonly open = model<boolean>(false);\n readonly schema = input.required<JsonSchema>();\n readonly autoFocus = input<boolean>(true);\n readonly locale = input<Translation | undefined>(undefined);\n readonly messages = input<Partial<Translation> | undefined>(undefined);\n\n private readonly translations = inject(JsonjoyTranslationService);\n private readonly platformId = inject(PLATFORM_ID);\n protected readonly t = this.translations.withOverrides(\n this.locale,\n this.messages,\n );\n\n protected readonly jsonInput = signal('');\n protected readonly validationResult = signal<ValidationResult | null>(null);\n protected readonly jsonEditorLoaded = signal(false);\n\n protected readonly schemaText = computed(() =>\n JSON.stringify(this.schema(), null, 2),\n );\n\n protected readonly headerMessage = computed(() => {\n const result = this.validationResult();\n if (!result || result.valid) return '';\n const errors = result.errors ?? [];\n if (errors.length === 1) {\n const messages = this.t();\n return errors[0].path === '/'\n ? messages.validatorErrorInvalidSyntax\n : messages.validatorErrorSchemaValidation;\n }\n return formatTranslation(this.t().validatorErrorCount, {\n count: errors.length,\n });\n });\n\n protected readonly resultBannerClasses = computed(() => {\n const base =\n 'rounded-md p-4 mt-3 border transition-all duration-300 ease-in-out';\n return this.validationResult()?.valid\n ? `${base} border-green-500/30 bg-green-500/10`\n : `${base} border-red-500/30 bg-red-500/10`;\n });\n\n private readonly dialogRef =\n viewChild<ElementRef<HTMLDialogElement>>('dialogRef');\n private jsonEditorHandle: JsonjoyEditorHandle | null = null;\n private schemaEditorHandle: JsonjoyEditorHandle | null = null;\n private validationSeq = 0;\n\n constructor() {\n effect(() => {\n const shouldOpen = this.open();\n const el = this.dialogRef()?.nativeElement;\n if (!el) return;\n if (shouldOpen && !el.open) {\n el.showModal();\n // Re-measure once the dialog has real dimensions. `requestAnimationFrame`\n // is browser-only, so skip the re-measure during SSR.\n if (isPlatformBrowser(this.platformId)) {\n requestAnimationFrame(() => {\n this.jsonEditorHandle?.layout();\n this.schemaEditorHandle?.layout();\n if (this.autoFocus()) {\n this.jsonEditorHandle?.focus();\n }\n });\n }\n } else if (!shouldOpen && el.open) {\n el.close();\n }\n });\n\n effect((onCleanup) => {\n const input = this.jsonInput();\n const schema = this.schema();\n if (!input.trim()) {\n this.validationResult.set(null);\n return;\n }\n\n const seq = ++this.validationSeq;\n const handle = setTimeout(() => {\n void validateJson(input, schema).then((result) => {\n if (seq !== this.validationSeq) return;\n this.validationResult.set(result);\n });\n }, VALIDATION_DEBOUNCE_MS);\n\n onCleanup(() => clearTimeout(handle));\n });\n }\n\n protected onJsonEditorMounted(handle: JsonjoyEditorHandle): void {\n this.jsonEditorHandle = handle;\n this.jsonEditorLoaded.set(true);\n if (this.open()) {\n handle.layout();\n if (this.autoFocus()) {\n handle.focus();\n }\n }\n }\n\n protected onSchemaEditorMounted(handle: JsonjoyEditorHandle): void {\n this.schemaEditorHandle = handle;\n if (this.open()) {\n handle.layout();\n }\n }\n\n protected goToError(\n line: number | undefined,\n column: number | undefined,\n ): void {\n if (!line) return;\n this.jsonEditorHandle?.revealError(line, column ?? 1);\n }\n\n protected formatLocation(line: number, column: number | undefined): string {\n if (column !== undefined) {\n return formatTranslation(this.t().validatorErrorLocationLineAndColumn, {\n line,\n column,\n });\n }\n return formatTranslation(this.t().validatorErrorLocationLineOnly, { line });\n }\n\n protected close(): void {\n this.open.set(false);\n }\n\n protected onDialogClose(): void {\n this.jsonInput.set('');\n this.validationResult.set(null);\n if (this.open()) {\n this.open.set(false);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["TYPE_OPTIONS","t"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"archeion-ngx-schema-builder.mjs","sources":["../../../projects/ngx-schema-builder/src/lib/types/json-schema.ts","../../../projects/ngx-schema-builder/src/lib/internal/schema-inference.ts","../../../projects/ngx-schema-builder/src/lib/internal/schema-editor.ts","../../../projects/ngx-schema-builder/src/lib/internal/json-validator.ts","../../../projects/ngx-schema-builder/src/lib/types/validation.ts","../../../projects/ngx-schema-builder/src/lib/i18n/locales/en.ts","../../../projects/ngx-schema-builder/src/lib/i18n/locales/it.ts","../../../projects/ngx-schema-builder/src/lib/tokens/schema-builder-config.token.ts","../../../projects/ngx-schema-builder/src/lib/tokens/ref-suggestions.token.ts","../../../projects/ngx-schema-builder/src/lib/services/translation.service.ts","../../../projects/ngx-schema-builder/src/lib/services/translation-context.service.ts","../../../projects/ngx-schema-builder/src/provide.ts","../../../projects/ngx-schema-builder/src/lib/internal/cn.ts","../../../projects/ngx-schema-builder/src/lib/services/local-definitions.service.ts","../../../projects/ngx-schema-builder/src/lib/components/ui/badge.directive.ts","../../../projects/ngx-schema-builder/src/lib/components/ui/button.directive.ts","../../../projects/ngx-schema-builder/src/lib/components/ui/input.directive.ts","../../../projects/ngx-schema-builder/src/lib/components/ui/label.directive.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-editor-internal/schema-type-selector.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-editor-internal/add-field-button.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-editor-internal/type-dropdown.component.ts","../../../projects/ngx-schema-builder/src/lib/components/ui/switch.component.ts","../../../projects/ngx-schema-builder/src/lib/components/type-editors/array-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/type-editors/boolean-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/type-editors/combinator-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/type-editors/number-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-editor-internal/schema-property-rows.component.ts","../../../projects/ngx-schema-builder/src/lib/components/type-editors/object-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/type-editors/ref-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/type-editors/string-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-editor-internal/type-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-editor-internal/schema-property-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-editor-internal/definitions-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-editor-internal/schema-field-list.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-fields-editor/schema-fields-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/internal/editor.directive.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-json-editor/schema-json-editor.component.ts","../../../projects/ngx-schema-builder/src/lib/components/schema-builder/schema-builder.component.ts","../../../projects/ngx-schema-builder/src/lib/components/infer-schema-dialog/infer-schema-dialog.component.ts","../../../projects/ngx-schema-builder/src/lib/components/validate-json-dialog/validate-json-dialog.component.ts","../../../projects/ngx-schema-builder/src/archeion-ngx-schema-builder.ts"],"sourcesContent":["import * as z from 'zod/mini';\n\nconst simpleTypes = [\n 'string',\n 'number',\n 'integer',\n 'boolean',\n 'object',\n 'array',\n 'null',\n] as const;\n\nexport const baseSchema = z.object({\n $id: z.optional(z.string()),\n $schema: z.optional(z.string()),\n $ref: z.optional(z.string()),\n $anchor: z.optional(z.string()),\n $dynamicRef: z.optional(z.string()),\n $dynamicAnchor: z.optional(z.string()),\n $vocabulary: z.optional(z.record(z.string(), z.boolean())),\n $comment: z.optional(z.string()),\n title: z.optional(z.string()),\n description: z.optional(z.string()),\n default: z.optional(z.unknown()),\n deprecated: z.optional(z.boolean()),\n readOnly: z.optional(z.boolean()),\n writeOnly: z.optional(z.boolean()),\n examples: z.optional(z.array(z.unknown())),\n type: z.optional(\n z.union([z.enum(simpleTypes), z.array(z.enum(simpleTypes))]),\n ),\n\n // String validations\n minLength: z.optional(z.number().check(z.int(), z.minimum(0))),\n maxLength: z.optional(z.number().check(z.int(), z.minimum(0))),\n pattern: z.optional(z.string()),\n format: z.optional(z.string()),\n contentMediaType: z.optional(z.string()),\n contentEncoding: z.optional(z.string()),\n\n // Number validations\n multipleOf: z.optional(z.number().check(z.positive())),\n minimum: z.optional(z.number()),\n maximum: z.optional(z.number()),\n exclusiveMinimum: z.optional(z.number()),\n exclusiveMaximum: z.optional(z.number()),\n\n // Array validations\n minItems: z.optional(z.number().check(z.int(), z.minimum(0))),\n maxItems: z.optional(z.number().check(z.int(), z.minimum(0))),\n uniqueItems: z.optional(z.boolean()),\n minContains: z.optional(z.number().check(z.int(), z.minimum(0))),\n maxContains: z.optional(z.number().check(z.int(), z.minimum(0))),\n\n // Object validations\n required: z.optional(z.array(z.string())),\n minProperties: z.optional(z.number().check(z.int(), z.minimum(0))),\n maxProperties: z.optional(z.number().check(z.int(), z.minimum(0))),\n dependentRequired: z.optional(z.record(z.string(), z.array(z.string()))),\n\n // Value validations\n const: z.optional(z.unknown()),\n enum: z.optional(z.array(z.unknown())),\n});\n\n/** @public */\nexport type JsonSchema =\n | boolean\n | (z.infer<typeof baseSchema> & {\n $defs?: Record<string, JsonSchema>;\n definitions?: Record<string, JsonSchema>;\n contentSchema?: JsonSchema;\n items?: JsonSchema;\n prefixItems?: JsonSchema[];\n contains?: JsonSchema;\n unevaluatedItems?: JsonSchema;\n properties?: Record<string, JsonSchema>;\n patternProperties?: Record<string, JsonSchema>;\n additionalProperties?: JsonSchema | boolean;\n propertyNames?: JsonSchema;\n dependentSchemas?: Record<string, JsonSchema>;\n unevaluatedProperties?: JsonSchema;\n allOf?: JsonSchema[];\n anyOf?: JsonSchema[];\n oneOf?: JsonSchema[];\n not?: JsonSchema;\n if?: JsonSchema;\n then?: JsonSchema;\n else?: JsonSchema;\n });\n\nexport const jsonSchemaType: z.ZodMiniType<JsonSchema> = z.lazy(() =>\n z.union([\n z.object({\n ...baseSchema.shape,\n $defs: z.optional(z.record(z.string(), jsonSchemaType)),\n definitions: z.optional(z.record(z.string(), jsonSchemaType)),\n contentSchema: z.optional(jsonSchemaType),\n items: z.optional(jsonSchemaType),\n prefixItems: z.optional(z.array(jsonSchemaType)),\n contains: z.optional(jsonSchemaType),\n unevaluatedItems: z.optional(jsonSchemaType),\n properties: z.optional(z.record(z.string(), jsonSchemaType)),\n patternProperties: z.optional(z.record(z.string(), jsonSchemaType)),\n additionalProperties: z.optional(z.union([jsonSchemaType, z.boolean()])),\n propertyNames: z.optional(jsonSchemaType),\n dependentSchemas: z.optional(z.record(z.string(), jsonSchemaType)),\n unevaluatedProperties: z.optional(jsonSchemaType),\n allOf: z.optional(z.array(jsonSchemaType)),\n anyOf: z.optional(z.array(jsonSchemaType)),\n oneOf: z.optional(z.array(jsonSchemaType)),\n not: z.optional(jsonSchemaType),\n if: z.optional(jsonSchemaType),\n then: z.optional(jsonSchemaType),\n else: z.optional(jsonSchemaType),\n }),\n z.boolean(),\n ]),\n);\n\nexport type SchemaType = (typeof simpleTypes)[number];\n\nexport interface NewField {\n name: string;\n type: SchemaEditorType;\n description: string;\n required: boolean;\n validation?: ObjectJsonSchema;\n additionalProperties?: boolean;\n}\n\nexport type ObjectJsonSchema = Exclude<JsonSchema, boolean>;\n\n/** Virtual type used in the editor UI to represent combinator and reference schemas */\nexport type SchemaEditorType =\n | SchemaType\n | 'anyOf'\n | 'oneOf'\n | 'allOf'\n | '$ref';\n\nexport interface RefJsonSchema {\n $ref: string;\n}\n\nexport function isBooleanSchema(schema: JsonSchema): schema is boolean {\n return typeof schema === 'boolean';\n}\n\nexport function isObjectSchema(schema: JsonSchema): schema is ObjectJsonSchema {\n return !isBooleanSchema(schema);\n}\n\nexport function asObjectSchema(schema: JsonSchema): ObjectJsonSchema {\n return isObjectSchema(schema) ? schema : { type: 'null' };\n}\n\nexport function getSchemaDescription(schema: JsonSchema): string {\n return isObjectSchema(schema) ? schema.description || '' : '';\n}\n\nexport function withObjectSchema<T>(\n schema: JsonSchema,\n fn: (schema: ObjectJsonSchema) => T,\n defaultValue: T,\n): T {\n return isObjectSchema(schema) ? fn(schema) : defaultValue;\n}\n\nexport function isAnyOfSchema(schema: JsonSchema): boolean {\n return isObjectSchema(schema) && Array.isArray(schema.anyOf);\n}\n\nexport function isOneOfSchema(schema: JsonSchema): boolean {\n return isObjectSchema(schema) && Array.isArray(schema.oneOf);\n}\n\nexport function isAllOfSchema(schema: JsonSchema): boolean {\n return isObjectSchema(schema) && Array.isArray(schema.allOf);\n}\n\nexport function isRefSchema(\n schema: JsonSchema,\n): schema is ObjectJsonSchema & RefJsonSchema {\n return isObjectSchema(schema) && typeof schema.$ref === 'string';\n}\n\nexport function asRefSchema(schema: JsonSchema): RefJsonSchema {\n return isRefSchema(schema) ? { $ref: schema.$ref } : { $ref: '' };\n}\n\n/**\n * Collapses a schema into the single editor type that drives which type-editor\n * renders. Precedence is lossy and ordered ($ref → anyOf → oneOf → allOf →\n * type): the first match wins for a mixed schema, but the full schema is kept\n * in the data, so the JSON tab round-trips the hidden keywords.\n */\nexport function getEditorType(schema: JsonSchema): SchemaEditorType {\n if (isRefSchema(schema)) return '$ref';\n if (isAnyOfSchema(schema)) return 'anyOf';\n if (isOneOfSchema(schema)) return 'oneOf';\n if (isAllOfSchema(schema)) return 'allOf';\n return withObjectSchema(\n schema,\n (s) => (s.type || 'object') as SchemaType,\n 'object' as SchemaType,\n );\n}\n","import { type JsonSchema, asObjectSchema } from '../types/json-schema';\n\n/**\n * Merges two JSON schemas.\n * If schemas are compatible (e.g., integer and number), attempts to merge.\n * If schemas are identical, returns the first schema.\n * If schemas are incompatible, returns a schema with oneOf.\n */\nfunction mergeSchemas(schema1: JsonSchema, schema2: JsonSchema): JsonSchema {\n const s1 = asObjectSchema(schema1);\n const s2 = asObjectSchema(schema2);\n\n if (JSON.stringify(s1) === JSON.stringify(s2)) {\n return schema1;\n }\n\n if (s1.type === 'integer' && s2.type === 'number') return { type: 'number' };\n if (s1.type === 'number' && s2.type === 'integer') return { type: 'number' };\n\n const existingOneOf = Array.isArray(s1.oneOf) ? s1.oneOf : [s1];\n const newSchemaToAdd = s2;\n\n if (\n !existingOneOf.some(\n (s) => JSON.stringify(s) === JSON.stringify(newSchemaToAdd),\n )\n ) {\n const mergedOneOf = [...existingOneOf, newSchemaToAdd];\n const uniqueSchemas = [\n ...new Map(mergedOneOf.map((s) => [JSON.stringify(s), s])).values(),\n ];\n if (uniqueSchemas.length === 1) {\n return uniqueSchemas[0];\n }\n return { oneOf: uniqueSchemas };\n }\n\n return s1.oneOf ? s1 : { oneOf: [s1] };\n}\n\nfunction inferObjectSchema(obj: Record<string, unknown>): JsonSchema {\n const properties: Record<string, JsonSchema> = {};\n const required: string[] = [];\n\n for (const [key, value] of Object.entries(obj)) {\n properties[key] = inferSchema(value);\n if (value !== undefined && value !== null) {\n required.push(key);\n }\n }\n\n return {\n type: 'object',\n properties,\n required: required.length > 0 ? required.sort() : undefined,\n };\n}\n\nfunction detectEnumsInArrayItems(\n mergedProperties: Record<string, JsonSchema>,\n originalArray: Record<string, unknown>[],\n totalItems: number,\n): Record<string, JsonSchema> {\n if (totalItems < 10 || Object.keys(mergedProperties).length === 0) {\n return mergedProperties;\n }\n\n const valueMap: Record<string, Set<string | number>> = {};\n\n for (const item of originalArray) {\n for (const key in mergedProperties) {\n if (Object.prototype.hasOwnProperty.call(item, key)) {\n const value = item[key];\n if (typeof value === 'string' || typeof value === 'number') {\n if (!valueMap[key]) valueMap[key] = new Set();\n valueMap[key].add(value);\n }\n }\n }\n }\n\n const updatedProperties = { ...mergedProperties };\n for (const key in valueMap) {\n const distinctValues = Array.from(valueMap[key]);\n if (\n distinctValues.length > 1 &&\n distinctValues.length <= 10 &&\n distinctValues.length < totalItems / 2\n ) {\n const currentSchema = asObjectSchema(updatedProperties[key]);\n if (\n currentSchema.type === 'string' ||\n currentSchema.type === 'number' ||\n currentSchema.type === 'integer'\n ) {\n updatedProperties[key] = {\n type: currentSchema.type,\n enum: distinctValues.sort(),\n };\n }\n }\n }\n return updatedProperties;\n}\n\nfunction detectSemanticFormatsInArrayItems(\n mergedProperties: Record<string, JsonSchema>,\n originalArray: Record<string, unknown>[],\n): Record<string, JsonSchema> {\n const updatedProperties = { ...mergedProperties };\n\n for (const key in updatedProperties) {\n const currentSchema = asObjectSchema(updatedProperties[key]);\n\n if (\n /coordinates?|coords?|latLon|lonLat|point/i.test(key) &&\n currentSchema.type === 'array'\n ) {\n const itemsSchema = currentSchema.items\n ? asObjectSchema(currentSchema.items)\n : undefined;\n if (itemsSchema?.type === 'number' || itemsSchema?.type === 'integer') {\n let isValidCoordArray = true;\n let coordLength: number | null = null;\n for (const item of originalArray) {\n if (\n Object.prototype.hasOwnProperty.call(item, key) &&\n Array.isArray(item[key])\n ) {\n const arr = item[key] as unknown[];\n if (coordLength === null) coordLength = arr.length;\n if (\n arr.length !== coordLength ||\n (arr.length !== 2 && arr.length !== 3) ||\n !arr.every((v) => typeof v === 'number')\n ) {\n isValidCoordArray = false;\n break;\n }\n } else if (Object.prototype.hasOwnProperty.call(item, key)) {\n isValidCoordArray = false;\n break;\n }\n }\n if (isValidCoordArray && coordLength !== null) {\n updatedProperties[key] = {\n type: 'array',\n items: { type: 'number' },\n minItems: coordLength,\n maxItems: coordLength,\n };\n }\n }\n }\n\n if (\n /timestamp|createdAt|updatedAt|occurredAt/i.test(key) &&\n currentSchema.type === 'integer'\n ) {\n let isTimestampLike = true;\n const now = Date.now();\n const fiftyYearsAgo = now - 50 * 365 * 24 * 60 * 60 * 1000;\n for (const item of originalArray) {\n if (Object.prototype.hasOwnProperty.call(item, key)) {\n const val = item[key];\n if (\n typeof val !== 'number' ||\n !Number.isInteger(val) ||\n val < fiftyYearsAgo\n ) {\n isTimestampLike = false;\n break;\n }\n }\n }\n if (isTimestampLike) {\n updatedProperties[key] = {\n type: 'integer',\n format: 'unix-timestamp',\n description: 'Unix timestamp (likely milliseconds)',\n };\n }\n }\n }\n return updatedProperties;\n}\n\nfunction processArrayOfObjects(\n itemSchemas: JsonSchema[],\n originalArray: Record<string, unknown>[],\n): JsonSchema {\n let mergedProperties: Record<string, JsonSchema> = {};\n const propertyCounts: Record<string, number> = {};\n const totalItems = itemSchemas.length;\n\n for (const schema of itemSchemas) {\n const objSchema = asObjectSchema(schema);\n if (!objSchema.properties) continue;\n for (const [key, value] of Object.entries(objSchema.properties)) {\n propertyCounts[key] = (propertyCounts[key] || 0) + 1;\n if (key in mergedProperties) {\n mergedProperties[key] = mergeSchemas(mergedProperties[key], value);\n } else {\n mergedProperties[key] = value;\n }\n }\n }\n\n const requiredProps = Object.entries(propertyCounts)\n .filter(([, count]) => count === totalItems)\n .map(([key]) => key);\n\n mergedProperties = detectEnumsInArrayItems(\n mergedProperties,\n originalArray,\n totalItems,\n );\n\n mergedProperties = detectSemanticFormatsInArrayItems(\n mergedProperties,\n originalArray,\n );\n\n return {\n type: 'object',\n properties: mergedProperties,\n required: requiredProps.length > 0 ? requiredProps.sort() : undefined,\n };\n}\n\nfunction inferArraySchema(obj: unknown[]): JsonSchema {\n if (obj.length === 0) return { type: 'array', items: {} };\n\n const itemSchemas = obj.map((item) => inferSchema(item));\n\n const firstItemSchema = asObjectSchema(itemSchemas[0]);\n const allSameType = itemSchemas.every(\n (schema) => asObjectSchema(schema).type === firstItemSchema.type,\n );\n\n if (allSameType) {\n if (firstItemSchema.type === 'object') {\n const itemsSchema = processArrayOfObjects(\n itemSchemas,\n obj as Record<string, unknown>[],\n );\n return {\n type: 'array',\n items: itemsSchema,\n minItems: 0,\n };\n }\n return {\n type: 'array',\n items: itemSchemas[0],\n minItems: 0,\n };\n }\n\n const uniqueSchemas = [\n ...new Map(itemSchemas.map((s) => [JSON.stringify(s), s])).values(),\n ];\n\n if (\n uniqueSchemas.length === 1 &&\n asObjectSchema(uniqueSchemas[0]).type === 'object'\n ) {\n return {\n type: 'array',\n items: uniqueSchemas[0],\n minItems: 0,\n };\n }\n\n return {\n type: 'array',\n items:\n uniqueSchemas.length === 1 ? uniqueSchemas[0] : { oneOf: uniqueSchemas },\n minItems: 0,\n };\n}\n\nfunction inferStringSchema(str: string): JsonSchema {\n const formats: Record<string, RegExp> = {\n date: /^\\d{4}-\\d{2}-\\d{2}$/,\n 'date-time':\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?$/,\n email: /^[^@]+@[^@]+\\.[^@]+$/,\n uuid: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,\n uri: /^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/i,\n };\n\n for (const [format, regex] of Object.entries(formats)) {\n if (regex.test(str)) {\n return { type: 'string', format };\n }\n }\n\n return { type: 'string' };\n}\n\nfunction inferNumberSchema(num: number): JsonSchema {\n return Number.isInteger(num) ? { type: 'integer' } : { type: 'number' };\n}\n\n/**\n * Infers a JSON Schema from a JSON value.\n */\nexport function inferSchema(obj: unknown): JsonSchema {\n if (obj === null) return { type: 'null' };\n\n const type = Array.isArray(obj) ? 'array' : typeof obj;\n\n switch (type) {\n case 'object':\n return inferObjectSchema(obj as Record<string, unknown>);\n case 'array':\n return inferArraySchema(obj as unknown[]);\n case 'string':\n return inferStringSchema(obj as string);\n case 'number':\n return inferNumberSchema(obj as number);\n case 'boolean':\n return { type: 'boolean' };\n default:\n return {};\n }\n}\n\n/**\n * Creates a full JSON Schema document from a JSON value, with $schema/title/description and a normalized root.\n */\nexport function createSchemaFromJson(jsonObject: unknown): JsonSchema {\n const inferredSchema = inferSchema(jsonObject);\n\n const rootSchema = asObjectSchema(inferredSchema);\n const finalSchema: Record<string, unknown> = {\n $schema: 'https://json-schema.org/draft-07/schema',\n title: 'Generated Schema',\n description: 'Generated from JSON data',\n };\n\n if (rootSchema.type === 'object' || rootSchema.properties) {\n finalSchema['type'] = 'object';\n finalSchema['properties'] = rootSchema.properties;\n if (rootSchema.required) finalSchema['required'] = rootSchema.required;\n } else if (rootSchema.type === 'array' || rootSchema.items) {\n finalSchema['type'] = 'array';\n finalSchema['items'] = rootSchema.items;\n if (rootSchema.minItems !== undefined)\n finalSchema['minItems'] = rootSchema.minItems;\n if (rootSchema.maxItems !== undefined)\n finalSchema['maxItems'] = rootSchema.maxItems;\n } else if (rootSchema.type) {\n finalSchema['type'] = 'object';\n finalSchema['properties'] = { value: rootSchema };\n finalSchema['required'] = ['value'];\n finalSchema['title'] = 'Generated Schema (Primitive Root)';\n finalSchema['description'] =\n 'Input was a primitive value, wrapped in an object.';\n } else {\n finalSchema['type'] = 'object';\n }\n\n return finalSchema as JsonSchema;\n}\n","import type {\n JsonSchema,\n NewField,\n ObjectJsonSchema,\n SchemaEditorType,\n} from '../types/json-schema';\nimport { isBooleanSchema, isObjectSchema } from '../types/json-schema';\n\n/** Starting schema for each editor type, used when creating or switching fields. */\nexport const DEFAULT_SCHEMAS: Record<SchemaEditorType, ObjectJsonSchema> = {\n string: { type: 'string' },\n number: { type: 'number' },\n integer: { type: 'integer' },\n boolean: { type: 'boolean' },\n object: { type: 'object' },\n array: { type: 'array' },\n null: { type: 'null' },\n anyOf: { anyOf: [{ type: 'string' }, { type: 'number' }] },\n oneOf: { oneOf: [{ type: 'string' }, { type: 'number' }] },\n allOf: { allOf: [{ type: 'object' }] },\n $ref: { $ref: '' },\n};\n\nexport interface SchemaProperty {\n name: string;\n schema: JsonSchema;\n required: boolean;\n}\n\n/** A local `$defs`/`definitions` entry, ready to use as a `$ref` target. */\nexport interface LocalDefinition {\n /** Definition name as stored under `$defs`/`definitions`. */\n name: string;\n /** JSON Pointer ref to the definition, e.g. `#/$defs/Address`. */\n ref: string;\n}\n\nexport function listLocalDefinitions(\n schema: JsonSchema,\n): readonly LocalDefinition[] {\n if (isBooleanSchema(schema)) return [];\n const key = schema.definitions && !schema.$defs ? 'definitions' : '$defs';\n const source = schema[key];\n if (!source) return [];\n return Object.keys(source).map((name) => ({\n name,\n ref: `#/${key}/${name}`,\n }));\n}\n\nexport function copySchema<T extends JsonSchema>(schema: T): T {\n if (typeof structuredClone === 'function') return structuredClone(schema);\n return JSON.parse(JSON.stringify(schema)) as T;\n}\n\nexport function updateObjectProperty(\n schema: ObjectJsonSchema,\n propertyName: string,\n propertySchema: JsonSchema,\n): ObjectJsonSchema {\n return updateObjectSchemaEntry(\n schema,\n 'properties',\n propertyName,\n propertySchema,\n );\n}\n\nexport function updateObjectPatternProperty(\n schema: ObjectJsonSchema,\n propertyName: string,\n propertySchema: JsonSchema,\n): ObjectJsonSchema {\n return updateObjectSchemaEntry(\n schema,\n 'patternProperties',\n propertyName,\n propertySchema,\n );\n}\n\nfunction updateObjectSchemaEntry(\n schema: ObjectJsonSchema,\n schemaProperty: 'properties' | 'patternProperties',\n propertyName: string,\n propertySchema: JsonSchema,\n): ObjectJsonSchema {\n if (!isObjectSchema(schema)) return schema;\n\n const newSchema = copySchema(schema);\n const entries = { ...(newSchema[schemaProperty] ?? {}) };\n entries[propertyName] = propertySchema;\n newSchema[schemaProperty] = entries;\n return newSchema;\n}\n\nexport function removeObjectProperty(\n schema: ObjectJsonSchema,\n propertyName: string,\n): ObjectJsonSchema {\n const withoutEntry = removeObjectSchemaEntry(\n schema,\n 'properties',\n propertyName,\n );\n\n if (!withoutEntry.required?.includes(propertyName)) return withoutEntry;\n\n // Clone if the helper returned the original, so pruning `required` stays pure.\n const newSchema = withoutEntry === schema ? copySchema(schema) : withoutEntry;\n newSchema.required = newSchema.required?.filter(\n (name) => name !== propertyName,\n );\n\n return newSchema;\n}\n\nexport function removeObjectPatternProperty(\n schema: ObjectJsonSchema,\n propertyName: string,\n): ObjectJsonSchema {\n return removeObjectSchemaEntry(schema, 'patternProperties', propertyName);\n}\n\nfunction removeObjectSchemaEntry(\n schema: ObjectJsonSchema,\n schemaProperty: 'properties' | 'patternProperties',\n propertyName: string,\n): ObjectJsonSchema {\n if (!isObjectSchema(schema) || !schema[schemaProperty]) return schema;\n\n const newSchema = copySchema(schema);\n const entries = newSchema[schemaProperty] ?? {};\n const { [propertyName]: _removed, ...remaining } = entries;\n\n if (Object.keys(remaining).length === 0) {\n delete newSchema[schemaProperty];\n return newSchema;\n }\n\n newSchema[schemaProperty] = remaining;\n return newSchema;\n}\n\nexport function updatePropertyRequired(\n schema: ObjectJsonSchema,\n propertyName: string,\n required: boolean,\n): ObjectJsonSchema {\n if (!isObjectSchema(schema)) return schema;\n\n const newSchema = copySchema(schema);\n const current = newSchema.required ?? [];\n\n if (required) {\n if (!current.includes(propertyName)) {\n newSchema.required = [...current, propertyName];\n } else {\n newSchema.required = current;\n }\n } else {\n newSchema.required = current.filter((name) => name !== propertyName);\n }\n\n return newSchema;\n}\n\nexport function updateArrayItems(\n schema: JsonSchema,\n itemsSchema: JsonSchema,\n): JsonSchema {\n if (isObjectSchema(schema) && schema.type === 'array') {\n return { ...schema, items: itemsSchema };\n }\n return schema;\n}\n\nexport function createFieldSchema(field: NewField): JsonSchema {\n const { type, description, validation, additionalProperties } = field;\n\n if (type === '$ref') {\n const ref =\n validation &&\n isObjectSchema(validation) &&\n typeof validation.$ref === 'string'\n ? validation.$ref\n : '';\n return { $ref: ref };\n }\n\n if (type === 'anyOf' || type === 'oneOf' || type === 'allOf') {\n const schema: ObjectJsonSchema = validation ?? {\n [type]:\n type === 'allOf'\n ? [{ type: 'object' as const }]\n : [{ type: 'string' as const }, { type: 'number' as const }],\n };\n\n return {\n ...schema,\n description: description || undefined,\n };\n }\n\n if (validation && isObjectSchema(validation)) {\n return {\n type,\n description,\n ...validation,\n ...(additionalProperties === false ? { additionalProperties } : {}),\n };\n }\n\n return { type, description };\n}\n\nexport function validateFieldName(name: string): boolean {\n if (!name || name.trim() === '') return false;\n const validNamePattern = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n return validNamePattern.test(name);\n}\n\nexport function getSchemaProperties(schema: JsonSchema): SchemaProperty[] {\n const required = isObjectSchema(schema) ? (schema.required ?? []) : [];\n return getObjectSchemaEntries(schema, 'properties').map((entry) =>\n propertyFromEntry(entry, required),\n );\n}\n\nexport function getSchemaPatternProperties(\n schema: JsonSchema,\n): SchemaProperty[] {\n return getObjectSchemaEntries(schema, 'patternProperties').map((entry) =>\n propertyFromEntry(entry),\n );\n}\n\nfunction getObjectSchemaEntries(\n schema: JsonSchema,\n schemaProperty: 'properties' | 'patternProperties',\n): Array<[string, JsonSchema]> {\n if (!isObjectSchema(schema) || !schema[schemaProperty]) return [];\n return Object.entries(schema[schemaProperty]);\n}\n\nfunction propertyFromEntry(\n [name, propSchema]: [string, JsonSchema],\n required: string[] = [],\n): SchemaProperty {\n return {\n name,\n schema: propSchema,\n required: required.includes(name),\n };\n}\n\nexport function getArrayItemsSchema(schema: JsonSchema): JsonSchema | null {\n if (isBooleanSchema(schema)) return null;\n if (schema.type !== 'array') return null;\n return schema.items ?? null;\n}\n\nexport function renameObjectProperty(\n schema: ObjectJsonSchema,\n oldName: string,\n newName: string,\n): ObjectJsonSchema {\n const renamed = renameObjectSchemaEntry(\n schema,\n 'properties',\n oldName,\n newName,\n );\n\n if (!renamed.required?.includes(oldName)) return renamed;\n\n // Clone if the helper returned the original, so remapping `required` stays pure.\n const newSchema = renamed === schema ? copySchema(schema) : renamed;\n newSchema.required = newSchema.required?.map((field) =>\n field === oldName ? newName : field,\n );\n\n return newSchema;\n}\n\nexport function renameObjectPatternProperty(\n schema: ObjectJsonSchema,\n oldName: string,\n newName: string,\n): ObjectJsonSchema {\n return renameObjectSchemaEntry(schema, 'patternProperties', oldName, newName);\n}\n\nfunction renameObjectSchemaEntry(\n schema: ObjectJsonSchema,\n schemaProperty: 'properties' | 'patternProperties',\n oldName: string,\n newName: string,\n): ObjectJsonSchema {\n if (!isObjectSchema(schema) || !schema[schemaProperty]) return schema;\n\n const newSchema = copySchema(schema);\n const entries = newSchema[schemaProperty] ?? {};\n const renamed: Record<string, JsonSchema> = {};\n\n for (const [key, value] of Object.entries(entries)) {\n renamed[key === oldName ? newName : key] = value;\n }\n\n newSchema[schemaProperty] = renamed;\n return newSchema;\n}\n","import type Ajv from 'ajv';\nimport type { ValidateFunction } from 'ajv';\n\nimport type { JsonSchema } from '../types/json-schema';\n\nexport interface ValidationError {\n path: string;\n message: string;\n line?: number;\n column?: number;\n}\n\nexport interface ValidationResult {\n valid: boolean;\n errors?: ValidationError[];\n}\n\nlet ajvPromise: Promise<Ajv> | null = null;\n\nfunction loadAjv(): Promise<Ajv> {\n if (!ajvPromise) {\n ajvPromise = (async () => {\n const [{ default: AjvCtor }, ajvFormatsModule] = await Promise.all([\n import('ajv'),\n import('ajv-formats'),\n ]);\n const addFormats = (\n ajvFormatsModule as unknown as { default: (a: Ajv) => Ajv }\n ).default;\n const ajv = new AjvCtor({\n allErrors: true,\n strict: false,\n validateSchema: false,\n validateFormats: false,\n });\n addFormats(ajv);\n return ajv;\n })();\n }\n return ajvPromise;\n}\n\nconst MAX_COMPILED_VALIDATORS = 16;\nconst compiledValidators = new Map<string, ValidateFunction>();\n\n// Memoizes compiled validators by serialized schema, bounded as a simple LRU.\nfunction getValidator(ajv: Ajv, schema: JsonSchema): ValidateFunction {\n const key = JSON.stringify(schema);\n const cached = compiledValidators.get(key);\n if (cached) {\n compiledValidators.delete(key);\n compiledValidators.set(key, cached);\n return cached;\n }\n\n const validate = ajv.compile(schema as object);\n compiledValidators.set(key, validate);\n if (compiledValidators.size > MAX_COMPILED_VALIDATORS) {\n const oldest = compiledValidators.keys().next().value;\n if (oldest !== undefined) compiledValidators.delete(oldest);\n }\n return validate;\n}\n\n/**\n * Best-effort line/column for a JSON Pointer path inside a JSON source string.\n * A textual heuristic (not a parser): single-segment paths are matched by key,\n * deeper paths fall back to the last segment. Used only to position editor\n * error markers, so an imperfect match is acceptable.\n */\nexport function findLineNumberForPath(\n jsonStr: string,\n path: string,\n): { line: number; column: number } | undefined {\n try {\n if (path === '/' || path === '') {\n return { line: 1, column: 1 };\n }\n\n const pathSegments = path.split('/').filter(Boolean);\n\n if (pathSegments.length === 0) {\n return { line: 1, column: 1 };\n }\n\n const lines = jsonStr.split('\\n');\n\n if (pathSegments.length === 1) {\n const propName = pathSegments[0];\n const propPattern = new RegExp(`([\\\\s]*)(\"${propName}\")`);\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const match = propPattern.exec(line);\n\n if (match) {\n const columnPos = line.indexOf(`\"${propName}\"`) + 1;\n return { line: i + 1, column: columnPos };\n }\n }\n }\n\n if (pathSegments.length > 1) {\n const lastSegment = pathSegments[pathSegments.length - 1];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (line.includes(`\"${lastSegment}\"`)) {\n const column = line.indexOf(`\"${lastSegment}\"`) + 1;\n return { line: i + 1, column };\n }\n }\n }\n\n return undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function extractErrorPosition(\n error: Error,\n jsonInput: string,\n): { line: number; column: number } {\n let line = 1;\n let column = 1;\n const errorMessage = error.message;\n\n const lineColMatch = errorMessage.match(/at line (\\d+) column (\\d+)/);\n if (lineColMatch?.[1] && lineColMatch?.[2]) {\n line = Number.parseInt(lineColMatch[1], 10);\n column = Number.parseInt(lineColMatch[2], 10);\n } else {\n const positionMatch = errorMessage.match(/position (\\d+)/);\n if (positionMatch?.[1]) {\n const position = Number.parseInt(positionMatch[1], 10);\n const jsonUpToError = jsonInput.substring(0, position);\n const lines = jsonUpToError.split('\\n');\n line = lines.length;\n column = lines[lines.length - 1].length + 1;\n }\n }\n\n return { line, column };\n}\n\n/**\n * Validates a JSON string against a schema using AJV. Lazy-loads AJV on first call.\n */\nexport async function validateJson(\n jsonInput: string,\n schema: JsonSchema,\n): Promise<ValidationResult> {\n if (!jsonInput.trim()) {\n return {\n valid: false,\n errors: [{ path: '/', message: 'Empty JSON input' }],\n };\n }\n\n try {\n const jsonObject = JSON.parse(jsonInput);\n const ajv = await loadAjv();\n const validate = getValidator(ajv, schema);\n const valid = validate(jsonObject);\n\n if (!valid) {\n const errors =\n validate.errors?.map((error) => {\n const path = error.instancePath || '/';\n const position = findLineNumberForPath(jsonInput, path);\n return {\n path,\n message: error.message || 'Unknown error',\n line: position?.line,\n column: position?.column,\n };\n }) || [];\n\n return { valid: false, errors };\n }\n\n return { valid: true, errors: [] };\n } catch (error) {\n if (!(error instanceof Error)) {\n return {\n valid: false,\n errors: [{ path: '/', message: `Unknown error: ${String(error)}` }],\n };\n }\n\n const { line, column } = extractErrorPosition(error, jsonInput);\n\n return {\n valid: false,\n errors: [{ path: '/', message: error.message, line, column }],\n };\n }\n}\n","import * as z from 'zod/mini';\n\nimport type { Translation } from '../i18n/translation-keys';\nimport { type JsonSchema, baseSchema } from './json-schema';\n\nfunction refineRangeConsistency(\n min: number | undefined,\n isMinExclusive: boolean,\n max: number | undefined,\n isMaxExclusive: boolean,\n): boolean {\n if (min === undefined || max === undefined) {\n return true;\n }\n if (min > max) {\n return false;\n }\n if (isMinExclusive && isMaxExclusive && max - min < 2) {\n return false;\n }\n if ((isMinExclusive || isMaxExclusive) && max - min < 1) {\n return false;\n }\n return true;\n}\n\nconst getJsonStringType = (t: Translation) =>\n z\n .object({\n minLength: z.optional(\n z\n .number()\n .check(\n z.int({ error: t.typeValidationErrorIntValue }),\n z.minimum(0, { error: t.typeValidationErrorNegativeLength }),\n ),\n ),\n maxLength: z.optional(\n z\n .number()\n .check(\n z.int({ error: t.typeValidationErrorIntValue }),\n z.minimum(0, { error: t.typeValidationErrorNegativeLength }),\n ),\n ),\n pattern: baseSchema.shape.pattern,\n format: baseSchema.shape.format,\n enum: baseSchema.shape.enum,\n contentMediaType: baseSchema.shape.contentMediaType,\n contentEncoding: baseSchema.shape.contentEncoding,\n })\n .check(\n // If minLength and maxLength are both set, minLength must not be greater than maxLength.\n z.refine(\n ({\n minLength,\n maxLength,\n }: {\n minLength?: number;\n maxLength?: number;\n }) => refineRangeConsistency(minLength, false, maxLength, false),\n {\n error: t.stringValidationErrorLengthRange,\n path: ['length'],\n },\n ),\n );\n\nconst getJsonNumberType = (t: Translation) =>\n z\n .object({\n multipleOf: z.optional(\n z.number().check(z.positive({ error: t.typeValidationErrorPositive })),\n ),\n minimum: baseSchema.shape.minimum,\n maximum: baseSchema.shape.maximum,\n exclusiveMinimum: baseSchema.shape.exclusiveMinimum,\n exclusiveMaximum: baseSchema.shape.exclusiveMaximum,\n enum: baseSchema.shape.enum,\n })\n .check(\n // If both minimum (or exclusiveMinimum) and maximum (or exclusiveMaximum) are set,\n // minimum must not be greater than maximum.\n z.refine(\n ({ minimum, exclusiveMinimum, maximum, exclusiveMaximum }) =>\n refineRangeConsistency(minimum, false, maximum, false) &&\n refineRangeConsistency(minimum, false, exclusiveMaximum, true) &&\n refineRangeConsistency(exclusiveMinimum, true, maximum, false) &&\n refineRangeConsistency(\n exclusiveMinimum,\n true,\n exclusiveMaximum,\n true,\n ),\n {\n error: t.numberValidationErrorMinMax,\n path: ['minMax'],\n },\n ),\n // Cannot set both exclusiveMinimum and minimum.\n z.refine(\n ({ minimum, exclusiveMinimum }) =>\n exclusiveMinimum === undefined || minimum === undefined,\n {\n error: t.numberValidationErrorBothExclusiveAndInclusiveMin,\n path: ['redundantMinimum'],\n },\n ),\n // Cannot set both exclusiveMaximum and maximum.\n z.refine(\n ({ maximum, exclusiveMaximum }) =>\n exclusiveMaximum === undefined || maximum === undefined,\n {\n error: t.numberValidationErrorBothExclusiveAndInclusiveMax,\n path: ['redundantMaximum'],\n },\n ),\n // Check that the enum values are within min/max bounds when set.\n z.refine(\n ({\n enum: enumValues,\n minimum,\n maximum,\n exclusiveMinimum,\n exclusiveMaximum,\n }) => {\n if (!enumValues || enumValues.length === 0) return true;\n return enumValues.every((val) => {\n if (typeof val !== 'number') return false;\n if (minimum !== undefined && val < minimum) return false;\n if (maximum !== undefined && val > maximum) return false;\n if (exclusiveMinimum !== undefined && val <= exclusiveMinimum)\n return false;\n if (exclusiveMaximum !== undefined && val >= exclusiveMaximum)\n return false;\n return true;\n });\n },\n {\n error: t.numberValidationErrorEnumOutOfRange,\n path: ['enum'],\n },\n ),\n );\n\nconst getJsonArrayType = (t: Translation) =>\n z\n .object({\n minItems: z.optional(\n z\n .number()\n .check(\n z.int({ error: t.typeValidationErrorIntValue }),\n z.minimum(0, { error: t.typeValidationErrorNegativeLength }),\n ),\n ),\n maxItems: z.optional(\n z\n .number()\n .check(\n z.int({ error: t.typeValidationErrorIntValue }),\n z.minimum(0, { error: t.typeValidationErrorNegativeLength }),\n ),\n ),\n uniqueItems: z.optional(z.boolean()),\n minContains: z.optional(\n z\n .number()\n .check(\n z.int({ error: t.typeValidationErrorIntValue }),\n z.minimum(0, { error: t.typeValidationErrorNegativeLength }),\n ),\n ),\n maxContains: z.optional(\n z\n .number()\n .check(\n z.int({ error: t.typeValidationErrorIntValue }),\n z.minimum(0, { error: t.typeValidationErrorNegativeLength }),\n ),\n ),\n })\n .check(\n // If both minItems and maxItems are set, minItems must not be greater than maxItems.\n z.refine(\n ({ minItems, maxItems }) =>\n refineRangeConsistency(minItems, false, maxItems, false),\n {\n error: t.arrayValidationErrorMinMax,\n path: ['minmax'],\n },\n ),\n // If both minContains and maxContains are set, minContains must not be greater than maxContains.\n z.refine(\n ({ minContains, maxContains }) =>\n refineRangeConsistency(minContains, false, maxContains, false),\n {\n error: t.arrayValidationErrorContainsMinMax,\n path: ['minmaxContains'],\n },\n ),\n );\n\nconst getJsonObjectType = (t: Translation) =>\n z\n .object({\n minProperties: z.optional(\n z\n .number()\n .check(\n z.int({ error: t.typeValidationErrorIntValue }),\n z.minimum(0, { error: t.typeValidationErrorNegativeLength }),\n ),\n ),\n maxProperties: z.optional(\n z\n .number()\n .check(\n z.int({ error: t.typeValidationErrorIntValue }),\n z.minimum(0, { error: t.typeValidationErrorNegativeLength }),\n ),\n ),\n })\n .check(\n // If both minProperties and maxProperties are set,\n // minProperties must not be greater than maxProperties.\n z.refine(\n ({ minProperties, maxProperties }) =>\n refineRangeConsistency(minProperties, false, maxProperties, false),\n {\n error: t.objectValidationErrorMinMax,\n path: ['minmax'],\n },\n ),\n );\n\nexport function getTypeValidation(type: string, t: Translation) {\n const jsonTypesValidation: Record<string, z.ZodMiniType> = {\n string: getJsonStringType(t),\n number: getJsonNumberType(t),\n array: getJsonArrayType(t),\n object: getJsonObjectType(t),\n };\n\n return jsonTypesValidation[type] || z.unknown();\n}\n\nexport interface TypeValidationResult {\n success: boolean;\n errors?: z.core.$ZodIssue[];\n}\n\nexport function validateSchemaByType(\n schema: unknown,\n type: string,\n t: Translation,\n): TypeValidationResult {\n const zodSchema = getTypeValidation(type, t);\n const result = zodSchema.safeParse(schema);\n if (result.success) {\n return { success: true };\n }\n return { success: false, errors: result.error.issues };\n}\n\nexport interface ValidationTreeNode {\n name: string;\n validation: TypeValidationResult;\n children: Record<string, ValidationTreeNode>;\n /** Total errors in this node and all its descendants. */\n cumulativeChildrenErrors: number;\n}\n\nexport function buildValidationTree(\n schema: JsonSchema,\n t: Translation,\n): ValidationTreeNode {\n // Helper: derive a concrete type string from `schema.type` (string | string[] | undefined).\n const deriveType = (sch: unknown): string | undefined => {\n if (!sch || typeof sch !== 'object') return undefined;\n const declared = (sch as Record<string, unknown>)['type'];\n if (typeof declared === 'string') return declared;\n if (\n Array.isArray(declared) &&\n declared.length > 0 &&\n typeof declared[0] === 'string'\n )\n return declared[0];\n return undefined;\n };\n\n // Boolean schemas: true => always valid, false => always invalid.\n if (typeof schema === 'boolean') {\n const validation: TypeValidationResult =\n schema === true\n ? { success: true }\n : {\n success: false,\n errors: [\n {\n code: 'custom',\n message: t.validatorErrorSchemaValidation,\n path: [],\n } as unknown as z.core.$ZodIssue,\n ],\n };\n\n return {\n name: String(schema),\n validation,\n children: {},\n cumulativeChildrenErrors: validation.success\n ? 0\n : (validation.errors?.length ?? 0),\n };\n }\n\n const sch = schema as Record<string, unknown>;\n const currentType = deriveType(sch) ?? 'object';\n\n const validation = validateSchemaByType(schema, currentType, t);\n\n const children: Record<string, ValidationTreeNode> = {};\n\n if (currentType === 'object') {\n const properties = sch['properties'];\n if (properties && typeof properties === 'object') {\n for (const [propName, propSchema] of Object.entries(\n properties as Record<string, JsonSchema>,\n )) {\n children[propName] = buildValidationTree(propSchema, t);\n }\n }\n if (\n sch['patternProperties'] &&\n typeof sch['patternProperties'] === 'object'\n ) {\n for (const [patternName, patternSchema] of Object.entries(\n sch['patternProperties'] as Record<string, JsonSchema>,\n )) {\n children[`pattern:${patternName}`] = buildValidationTree(\n patternSchema,\n t,\n );\n }\n }\n }\n\n if (currentType === 'array') {\n const items = sch['items'];\n if (Array.isArray(items)) {\n items.forEach((it, idx) => {\n children[`items[${idx}]`] = buildValidationTree(it, t);\n });\n } else if (items) {\n children['items'] = buildValidationTree(items as JsonSchema, t);\n }\n\n if (Array.isArray(sch['prefixItems'])) {\n (sch['prefixItems'] as JsonSchema[]).forEach((it, idx) => {\n children[`prefixItems[${idx}]`] = buildValidationTree(it, t);\n });\n }\n }\n\n const combinators: Array<'allOf' | 'anyOf' | 'oneOf'> = [\n 'allOf',\n 'anyOf',\n 'oneOf',\n ];\n for (const comb of combinators) {\n const arr = sch[comb];\n if (Array.isArray(arr)) {\n arr.forEach((subSchema, idx) => {\n children[[comb, idx].join(':')] = buildValidationTree(\n subSchema as JsonSchema,\n t,\n );\n });\n }\n }\n\n if (sch['not']) {\n children['not'] = buildValidationTree(sch['not'] as JsonSchema, t);\n }\n\n if (sch['$defs'] && typeof sch['$defs'] === 'object') {\n for (const [defName, defSchema] of Object.entries(\n sch['$defs'] as Record<string, JsonSchema>,\n )) {\n children[`$defs:${defName}`] = buildValidationTree(defSchema, t);\n }\n }\n\n // `definitions` is the older name for `$defs`; support both.\n const definitions = (sch as Record<string, unknown>)['definitions'];\n if (definitions && typeof definitions === 'object') {\n for (const [defName, defSchema] of Object.entries(\n definitions as Record<string, JsonSchema>,\n )) {\n children[`definitions:${defName}`] = buildValidationTree(defSchema, t);\n }\n }\n\n const ownErrors = validation.success ? 0 : (validation.errors?.length ?? 0);\n const childrenErrors = Object.values(children).reduce(\n (sum, child) => sum + child.cumulativeChildrenErrors,\n 0,\n );\n\n return {\n name: currentType,\n validation,\n children,\n cumulativeChildrenErrors: ownErrors + childrenErrors,\n };\n}\n","import type { Translation } from '../translation-keys';\n\nexport const en: Translation = {\n collapse: 'Collapse',\n expand: 'Expand',\n\n fieldDescriptionPlaceholder: 'Describe the purpose of this field',\n fieldDelete: 'Delete field',\n fieldDescription: 'Description',\n fieldNameLabel: 'Field Name',\n fieldNamePlaceholder: 'e.g. firstName, age, isActive',\n fieldNameUseRegex: 'Use regular expression',\n fieldNameUseExactName: 'Use exact name',\n fieldNameRegexLabel: 'Regular expression for property names',\n fieldNameRegexPlaceholder: 'e.g. ^S_',\n fieldNameRegexHelp:\n 'Allows any property whose name matches this regular expression. Matching properties must follow this field schema. Use ^ and $ to match the whole name.',\n fieldNameRegexError: 'Enter a valid regular expression.',\n fieldRequiredLabel: 'Required Field',\n fieldType: 'Field Type',\n fieldTypeExample: 'Example:',\n fieldAddNewButton: 'Add Field',\n fieldAddNewBadge: 'Schema Builder',\n fieldAddNewCancel: 'Cancel',\n fieldAddNewConfirm: 'Add Field',\n fieldAddNewDescription: 'Create a new field for your JSON schema',\n fieldAddNewLabel: 'Add New Field',\n\n fieldTypeTextLabel: 'Text',\n fieldTypeTextDescription: 'For text values like names, descriptions, etc.',\n fieldTypeNumberLabel: 'Number',\n fieldTypeNumberDescription: 'For decimal or whole numbers',\n fieldTypeBooleanLabel: 'Yes/No',\n fieldTypeBooleanDescription: 'For true/false values',\n fieldTypeObjectLabel: 'Group',\n fieldTypeObjectDescription: 'For grouping related fields together',\n fieldTypeArrayLabel: 'List',\n fieldTypeArrayDescription: 'For collections of items',\n fieldTypeRefDescription: 'Reference to a definition or external schema',\n\n propertyDescriptionPlaceholder: 'Add description...',\n propertyDescriptionButton: 'Add description...',\n propertyRequired: 'Required',\n propertyNameRegexDescription:\n 'Allows and validates properties whose names match this regular expression.',\n propertyOptional: 'Optional',\n propertyDelete: 'Delete field',\n\n schemaEditorTitle: 'JSON Schema Editor',\n schemaEditorEditModeVisual: 'Visual',\n schemaEditorEditModeJson: 'JSON',\n schemaEditorEditModeBoth: 'Both',\n\n arrayNoConstraint: 'No constraint',\n arrayMinimumLabel: 'Minimum Items',\n arrayMinimumPlaceholder: 'No minimum',\n arrayMaximumLabel: 'Maximum Items',\n arrayMaximumPlaceholder: 'No maximum',\n arrayForceUniqueItemsLabel: 'Force unique items',\n arrayItemTypeLabel: 'Item Type',\n arrayValidationErrorMinMax: \"'minItems' cannot be greater than 'maxItems'.\",\n arrayValidationErrorContainsMinMax:\n \"'minContains' cannot be greater than 'maxContains'.\",\n\n booleanNoConstraint: 'No constraint',\n booleanAllowedValuesLabel: 'Allowed Values',\n booleanAllowFalseLabel: 'Allow false value',\n booleanAllowTrueLabel: 'Allow true value',\n booleanNeitherWarning: 'Warning: You must allow at least one value.',\n\n numberNoConstraint: 'No constraint',\n numberMinimumLabel: 'Minimum Value',\n numberMinimumPlaceholder: 'No minimum',\n numberMaximumLabel: 'Maximum Value',\n numberMaximumPlaceholder: 'No maximum',\n numberExclusiveMinimumLabel: 'Exclusive Minimum',\n numberExclusiveMinimumPlaceholder: 'No exclusive min',\n numberExclusiveMaximumLabel: 'Exclusive Maximum',\n numberExclusiveMaximumPlaceholder: 'No exclusive max',\n numberMultipleOfLabel: 'Multiple Of',\n numberMultipleOfPlaceholder: 'Any',\n numberAllowedValuesEnumLabel: 'Allowed Values (enum)',\n numberAllowedValuesEnumNone: 'No restricted values set',\n numberAllowedValuesEnumAddLabel: 'Add',\n numberAllowedValuesEnumAddPlaceholder: 'Add allowed value...',\n numberValidationErrorMinMax: 'Minimum and maximum values must be consistent.',\n numberValidationErrorBothExclusiveAndInclusiveMin:\n \"Both 'exclusiveMinimum' and 'minimum' cannot be set at the same time.\",\n numberValidationErrorBothExclusiveAndInclusiveMax:\n \"Both 'exclusiveMaximum' and 'maximum' cannot be set at the same time.\",\n numberValidationErrorEnumOutOfRange:\n 'Enum values must be within the defined range.',\n\n objectPropertiesNone: 'No properties defined',\n objectValidationErrorMinMax:\n \"'minProperties' cannot be greater than 'maxProperties'.\",\n\n additionalPropertiesAllow: 'Allow additional properties',\n additionalPropertiesForbid: 'Forbid additional properties',\n\n stringNoConstraint: 'No constraint',\n stringMinimumLengthLabel: 'Minimum Length',\n stringMinimumLengthPlaceholder: 'No minimum',\n stringMaximumLengthLabel: 'Maximum Length',\n stringMaximumLengthPlaceholder: 'No maximum',\n stringPatternLabel: 'Pattern (regex)',\n stringPatternPlaceholder: '^[a-zA-Z]+$',\n stringFormatLabel: 'Format',\n stringFormatNone: 'None',\n stringFormatDateTime: 'Date-Time',\n stringFormatDate: 'Date',\n stringFormatTime: 'Time',\n stringFormatEmail: 'Email',\n stringFormatUri: 'URI',\n stringFormatUuid: 'UUID',\n stringFormatHostname: 'Hostname',\n stringFormatIpv4: 'IPv4 Address',\n stringFormatIpv6: 'IPv6 Address',\n stringAllowedValuesEnumLabel: 'Allowed Values (enum)',\n stringAllowedValuesEnumNone: 'No restricted values set',\n stringAllowedValuesEnumAddPlaceholder: 'Add allowed value...',\n stringAllowedValuesEnumAddLabel: 'Add',\n stringFormatSelectPlaceholder: 'Select format',\n stringValidationErrorLengthRange:\n \"'Minimum Length' cannot be greater than 'Maximum Length'.\",\n\n schemaTypeAnyOf: 'Any Of',\n anyOfAddOption: 'Add Option',\n anyOfRemoveOption: 'Remove option',\n anyOfOptionLabel: 'Option',\n anyOfDescription: 'Value must match at least one of these schemas',\n anyOfNoOptions: 'No options defined',\n\n schemaTypeOneOf: 'One Of',\n oneOfAddOption: 'Add Option',\n oneOfRemoveOption: 'Remove option',\n oneOfOptionLabel: 'Option',\n oneOfDescription: 'Value must match exactly one of these schemas',\n oneOfNoOptions: 'No options defined',\n\n schemaTypeAllOf: 'All Of',\n allOfAddSchema: 'Add Schema',\n allOfRemoveSchema: 'Remove schema',\n allOfSchemaLabel: 'Schema',\n allOfDescription: 'Value must match all of these schemas',\n allOfNoSchemas: 'No schemas defined',\n\n schemaTypeArray: 'List',\n schemaTypeBoolean: 'Yes/No',\n schemaTypeNumber: 'Number',\n schemaTypeObject: 'Object',\n schemaTypeString: 'Text',\n schemaTypeNull: 'Empty',\n\n inferrerTitle: 'Infer JSON Schema',\n inferrerDescription:\n 'Paste your JSON document below to generate a schema from it.',\n inferrerCancel: 'Cancel',\n inferrerGenerate: 'Generate Schema',\n inferrerErrorInvalidJson: 'Invalid JSON format. Please check your input.',\n\n validatorTitle: 'Validate JSON',\n validatorDescription:\n 'Paste your JSON document to validate against the current schema. Validation occurs automatically as you type.',\n validatorCurrentSchema: 'Current Schema:',\n validatorContent: 'Your JSON:',\n validatorValid: 'JSON is valid according to the schema!',\n validatorErrorInvalidSyntax: 'Invalid JSON syntax',\n validatorErrorSchemaValidation: 'Schema validation error',\n validatorErrorCount: '{count} validation errors detected',\n validatorErrorPathRoot: 'Root',\n validatorErrorLocationLineAndColumn: 'Line {line}, Col {column}',\n validatorErrorLocationLineOnly: 'Line {line}',\n validatorClose: 'Close',\n\n visualizerDownloadTitle: 'Download Schema',\n visualizerDownloadFileName: 'schema.json',\n visualizerSource: 'JSON Schema Source',\n\n visualEditorNoFieldsHint1: 'No fields defined yet',\n visualEditorNoFieldsHint2: 'Add your first field to get started',\n\n typeValidationErrorNegativeLength: 'Length values cannot be negative.',\n typeValidationErrorIntValue: 'Value must be an integer.',\n typeValidationErrorPositive: 'Value must be positive.',\n\n schemaTypeRef: 'Reference',\n refUrlLabel: 'Reference URL',\n refUrlPlaceholder: '',\n refPointerLabel: 'JSON Pointer (optional)',\n refPointerPlaceholder: '/properties/address',\n refSuggestionsLabel: 'Suggestions',\n refNoSuggestions: 'No suggestions available',\n refLocalDefinitionsLabel: 'Local definitions',\n\n definitionsPanelTitle: 'Reusable definitions',\n definitionsAddButton: 'Add definition',\n definitionsEmpty: 'No reusable definitions yet',\n definitionsNameLabel: 'Name',\n definitionsNamePlaceholder: 'e.g. LegalEntity',\n definitionsDelete: 'Delete definition',\n\n propertyTitleLabel: 'Title',\n propertyTitlePlaceholder: 'Human-readable title',\n propertyDefaultLabel: 'Default',\n propertyDefaultPlaceholder: 'e.g. \"hello\", 42, true',\n\n propertiesTabLabel: 'Properties',\n definitionsTabLabel: 'Definitions',\n};\n","import type { Translation } from '../translation-keys';\n\nexport const it: Translation = {\n collapse: 'Comprimi',\n expand: 'Espandi',\n\n fieldDescriptionPlaceholder: 'Descrivi lo scopo di questo campo',\n fieldDelete: 'Elimina campo',\n fieldDescription: 'Descrizione',\n fieldNameLabel: 'Nome campo',\n fieldNamePlaceholder: 'es. nome, eta, attivo',\n fieldNameUseRegex: 'Usa espressione regolare',\n fieldNameUseExactName: 'Usa nome esatto',\n fieldNameRegexLabel: 'Espressione regolare per nomi di proprieta',\n fieldNameRegexPlaceholder: 'es. ^S_',\n fieldNameRegexHelp:\n \"Ammette qualsiasi proprieta il cui nome corrisponda a questa espressione regolare. Le proprieta corrispondenti devono seguire questo schema. Usa ^ e $ per identificare l'intero nome.\",\n fieldNameRegexError: \"Inserisci un'espressione regolare valida.\",\n fieldRequiredLabel: 'Campo obbligatorio',\n fieldType: 'Tipo campo',\n fieldTypeExample: 'Esempio:',\n fieldAddNewButton: 'Aggiungi campo',\n fieldAddNewBadge: 'Editor schema',\n fieldAddNewCancel: 'Annulla',\n fieldAddNewConfirm: 'Aggiungi campo',\n fieldAddNewDescription: 'Crea un nuovo campo per il tuo schema JSON',\n fieldAddNewLabel: 'Aggiungi nuovo campo',\n\n fieldTypeTextLabel: 'Testo',\n fieldTypeTextDescription: 'Per valori testuali come nomi, descrizioni, ecc.',\n fieldTypeNumberLabel: 'Numero',\n fieldTypeNumberDescription: 'Per numeri decimali o interi',\n fieldTypeBooleanLabel: 'Si/No',\n fieldTypeBooleanDescription: 'Per valori vero/falso',\n fieldTypeObjectLabel: 'Gruppo',\n fieldTypeObjectDescription: 'Per raggruppare campi correlati',\n fieldTypeArrayLabel: 'Elenco',\n fieldTypeArrayDescription: 'Per collezioni di elementi',\n fieldTypeRefDescription: 'Riferimento a una definizione o schema esterno',\n\n propertyDescriptionPlaceholder: 'Aggiungi descrizione...',\n propertyDescriptionButton: 'Aggiungi descrizione...',\n propertyRequired: 'Obbligatorio',\n propertyNameRegexDescription:\n 'Ammette e convalida proprieta i cui nomi corrispondono a questa espressione regolare.',\n propertyOptional: 'Opzionale',\n propertyDelete: 'Elimina campo',\n\n schemaEditorTitle: 'Editor Schema JSON',\n schemaEditorEditModeVisual: 'Visuale',\n schemaEditorEditModeJson: 'JSON',\n schemaEditorEditModeBoth: 'Entrambi',\n\n arrayNoConstraint: 'Nessun vincolo',\n arrayMinimumLabel: 'Numero minimo di elementi',\n arrayMinimumPlaceholder: 'Nessun minimo',\n arrayMaximumLabel: 'Numero massimo di elementi',\n arrayMaximumPlaceholder: 'Nessun massimo',\n arrayForceUniqueItemsLabel: 'Forza elementi unici',\n arrayItemTypeLabel: 'Tipo elemento',\n arrayValidationErrorMinMax:\n \"'minItems' non puo essere maggiore di 'maxItems'.\",\n arrayValidationErrorContainsMinMax:\n \"'minContains' non puo essere maggiore di 'maxContains'.\",\n\n booleanNoConstraint: 'Nessun vincolo',\n booleanAllowedValuesLabel: 'Valori ammessi',\n booleanAllowFalseLabel: 'Ammetti il valore falso',\n booleanAllowTrueLabel: 'Ammetti il valore vero',\n booleanNeitherWarning: 'Attenzione: devi ammettere almeno un valore.',\n\n numberNoConstraint: 'Nessun vincolo',\n numberMinimumLabel: 'Valore minimo',\n numberMinimumPlaceholder: 'Nessun minimo',\n numberMaximumLabel: 'Valore massimo',\n numberMaximumPlaceholder: 'Nessun massimo',\n numberExclusiveMinimumLabel: 'Minimo esclusivo',\n numberExclusiveMinimumPlaceholder: 'Nessun minimo esclusivo',\n numberExclusiveMaximumLabel: 'Massimo esclusivo',\n numberExclusiveMaximumPlaceholder: 'Nessun massimo esclusivo',\n numberMultipleOfLabel: 'Multiplo di',\n numberMultipleOfPlaceholder: 'Qualsiasi',\n numberAllowedValuesEnumLabel: 'Valori ammessi (enum)',\n numberAllowedValuesEnumNone: 'Nessun valore vincolato impostato',\n numberAllowedValuesEnumAddLabel: 'Aggiungi',\n numberAllowedValuesEnumAddPlaceholder: 'Aggiungi valore ammesso...',\n numberValidationErrorMinMax:\n 'I valori minimo e massimo devono essere coerenti.',\n numberValidationErrorBothExclusiveAndInclusiveMin:\n \"'exclusiveMinimum' e 'minimum' non possono essere impostati contemporaneamente.\",\n numberValidationErrorBothExclusiveAndInclusiveMax:\n \"'exclusiveMaximum' e 'maximum' non possono essere impostati contemporaneamente.\",\n numberValidationErrorEnumOutOfRange:\n \"I valori dell'enum devono rientrare nell'intervallo definito.\",\n\n objectPropertiesNone: 'Nessuna proprieta definita',\n objectValidationErrorMinMax:\n \"'minProperties' non puo essere maggiore di 'maxProperties'.\",\n\n additionalPropertiesAllow: 'Ammetti proprieta aggiuntive',\n additionalPropertiesForbid: 'Vieta proprieta aggiuntive',\n\n stringNoConstraint: 'Nessun vincolo',\n stringMinimumLengthLabel: 'Lunghezza minima',\n stringMinimumLengthPlaceholder: 'Nessun minimo',\n stringMaximumLengthLabel: 'Lunghezza massima',\n stringMaximumLengthPlaceholder: 'Nessun massimo',\n stringPatternLabel: 'Pattern (regex)',\n stringPatternPlaceholder: '^[a-zA-Z]+$',\n stringFormatLabel: 'Formato',\n stringFormatNone: 'Nessuno',\n stringFormatDateTime: 'Data e ora',\n stringFormatDate: 'Data',\n stringFormatTime: 'Ora',\n stringFormatEmail: 'Email',\n stringFormatUri: 'URI',\n stringFormatUuid: 'UUID',\n stringFormatHostname: 'Hostname',\n stringFormatIpv4: 'Indirizzo IPv4',\n stringFormatIpv6: 'Indirizzo IPv6',\n stringAllowedValuesEnumLabel: 'Valori ammessi (enum)',\n stringAllowedValuesEnumNone: 'Nessun valore vincolato impostato',\n stringAllowedValuesEnumAddPlaceholder: 'Aggiungi valore ammesso...',\n stringAllowedValuesEnumAddLabel: 'Aggiungi',\n stringFormatSelectPlaceholder: 'Seleziona formato',\n stringValidationErrorLengthRange:\n \"'Lunghezza minima' non puo essere maggiore di 'Lunghezza massima'.\",\n\n schemaTypeAnyOf: 'Uno qualsiasi',\n anyOfAddOption: 'Aggiungi opzione',\n anyOfRemoveOption: 'Rimuovi opzione',\n anyOfOptionLabel: 'Opzione',\n anyOfDescription:\n 'Il valore deve corrispondere ad almeno uno di questi schemi',\n anyOfNoOptions: 'Nessuna opzione definita',\n\n schemaTypeOneOf: 'Esattamente uno',\n oneOfAddOption: 'Aggiungi opzione',\n oneOfRemoveOption: 'Rimuovi opzione',\n oneOfOptionLabel: 'Opzione',\n oneOfDescription:\n 'Il valore deve corrispondere esattamente a uno di questi schemi',\n oneOfNoOptions: 'Nessuna opzione definita',\n\n schemaTypeAllOf: 'Tutti',\n allOfAddSchema: 'Aggiungi schema',\n allOfRemoveSchema: 'Rimuovi schema',\n allOfSchemaLabel: 'Schema',\n allOfDescription: 'Il valore deve corrispondere a tutti questi schemi',\n allOfNoSchemas: 'Nessuno schema definito',\n\n schemaTypeArray: 'Elenco',\n schemaTypeBoolean: 'Si/No',\n schemaTypeNumber: 'Numero',\n schemaTypeObject: 'Oggetto',\n schemaTypeString: 'Testo',\n schemaTypeNull: 'Vuoto',\n\n inferrerTitle: 'Deduci schema JSON',\n inferrerDescription:\n 'Incolla qui sotto il documento JSON per generarne uno schema.',\n inferrerCancel: 'Annulla',\n inferrerGenerate: 'Genera schema',\n inferrerErrorInvalidJson: 'Formato JSON non valido. Controlla il tuo input.',\n\n validatorTitle: 'Convalida JSON',\n validatorDescription:\n 'Incolla il documento JSON per validarlo contro lo schema corrente. La convalida avviene automaticamente mentre digiti.',\n validatorCurrentSchema: 'Schema corrente:',\n validatorContent: 'Il tuo JSON:',\n validatorValid: 'Il JSON e valido secondo lo schema!',\n validatorErrorInvalidSyntax: 'Sintassi JSON non valida',\n validatorErrorSchemaValidation: 'Errore di convalida dello schema',\n validatorErrorCount: '{count} errori di convalida rilevati',\n validatorErrorPathRoot: 'Radice',\n validatorErrorLocationLineAndColumn: 'Riga {line}, Col {column}',\n validatorErrorLocationLineOnly: 'Riga {line}',\n validatorClose: 'Chiudi',\n\n visualizerDownloadTitle: 'Scarica schema',\n visualizerDownloadFileName: 'schema.json',\n visualizerSource: 'Sorgente schema JSON',\n\n visualEditorNoFieldsHint1: 'Nessun campo definito',\n visualEditorNoFieldsHint2: 'Aggiungi il primo campo per iniziare',\n\n typeValidationErrorNegativeLength:\n 'I valori di lunghezza non possono essere negativi.',\n typeValidationErrorIntValue: 'Il valore deve essere un intero.',\n typeValidationErrorPositive: 'Il valore deve essere positivo.',\n\n schemaTypeRef: 'Riferimento',\n refUrlLabel: 'URL di riferimento',\n refUrlPlaceholder: '',\n refPointerLabel: 'JSON Pointer (opzionale)',\n refPointerPlaceholder: '/properties/indirizzo',\n refSuggestionsLabel: 'Suggerimenti',\n refNoSuggestions: 'Nessun suggerimento disponibile',\n refLocalDefinitionsLabel: 'Definizioni locali',\n\n definitionsPanelTitle: 'Definizioni riutilizzabili',\n definitionsAddButton: 'Aggiungi definizione',\n definitionsEmpty: 'Nessuna definizione riutilizzabile',\n definitionsNameLabel: 'Nome',\n definitionsNamePlaceholder: 'es. LegalEntity',\n definitionsDelete: 'Elimina definizione',\n\n propertyTitleLabel: 'Titolo',\n propertyTitlePlaceholder: 'Titolo leggibile',\n propertyDefaultLabel: 'Valore di default',\n propertyDefaultPlaceholder: 'es. \"ciao\", 42, true',\n\n propertiesTabLabel: 'Campi',\n definitionsTabLabel: 'Definizioni',\n};\n","import { InjectionToken } from '@angular/core';\n\nimport type { SchemaBuilderConfig } from '../interfaces/schema-builder-config.interface';\n\n/**\n * Optional DI token holding the merged {@link SchemaBuilderConfig} provided by\n * {@link provideSchemaBuilder}. Components inject this with `{ optional: true }`\n * and merge it with their own `locale` / `messages` inputs.\n *\n * @public\n */\nexport const SCHEMA_BUILDER_CONFIG = new InjectionToken<SchemaBuilderConfig>(\n 'SCHEMA_BUILDER_CONFIG',\n);\n","import { InjectionToken, type Signal } from '@angular/core';\n\nimport type { RefSuggestion } from '../interfaces/ref-suggestion.interface';\n\nexport const SCHEMA_BUILDER_REF_SUGGESTIONS = new InjectionToken<\n Signal<readonly RefSuggestion[]>\n>('SCHEMA_BUILDER_REF_SUGGESTIONS');\n","import { Injectable, computed, inject } from '@angular/core';\n\nimport { en } from '../i18n/locales/en';\nimport type { Translation } from '../i18n/translation-keys';\nimport { SCHEMA_BUILDER_CONFIG } from '../tokens';\n\n@Injectable({ providedIn: 'root' })\nexport class JsonjoyTranslationService {\n private readonly config = inject(SCHEMA_BUILDER_CONFIG, { optional: true });\n\n /**\n * The merged provider-level locale: `en` baseline overlaid with the\n * provider's `locale` and `messages` (if any).\n */\n readonly providerLocale = computed<Translation>(() => ({\n ...en,\n ...(this.config?.locale ?? {}),\n ...(this.config?.messages ?? {}),\n }));\n\n /**\n * Helper to build a per-component effective locale.\n *\n * @param locale per-component locale override\n * @param messages per-component messages override\n */\n withOverrides(\n locale: () => Translation | undefined,\n messages: () => Partial<Translation> | undefined,\n ) {\n return computed<Translation>(() => ({\n ...this.providerLocale(),\n ...(locale() ?? {}),\n ...(messages() ?? {}),\n }));\n }\n}\n\nexport function formatTranslation(\n template: string,\n values: Record<string, string | number>,\n): string {\n return template.replace(/\\{(\\w+)\\}/g, (_, key) => {\n const value = values[key];\n return value !== undefined ? String(value) : `{${key}}`;\n });\n}\n","import {\n Injectable,\n type Signal,\n computed,\n inject,\n signal,\n} from '@angular/core';\n\nimport type { Translation } from '../i18n/translation-keys';\nimport { JsonjoyTranslationService } from './translation.service';\n\n/**\n * Editor-scoped context that carries the effective translation down to nested\n * editors. Entry components provide it and call {@link setSource}; inner\n * components inject it and read {@link translation}. Falls back to the provider\n * locale until a source is set.\n */\n@Injectable()\nexport class JsonjoyTranslationContextService {\n private readonly fallback = inject(JsonjoyTranslationService).providerLocale;\n private readonly source = signal<Signal<Translation> | null>(null);\n\n readonly translation: Signal<Translation> = computed(() =>\n (this.source() ?? this.fallback)(),\n );\n\n setSource(source: Signal<Translation>): void {\n this.source.set(source);\n }\n}\n","import {\n type EnvironmentProviders,\n type Provider,\n makeEnvironmentProviders,\n} from '@angular/core';\n\nimport type {\n RefSuggestionsFactory,\n SchemaBuilderConfig,\n} from './lib/interfaces';\nimport { JsonjoyTranslationContextService } from './lib/services/translation-context.service';\nimport {\n SCHEMA_BUILDER_CONFIG,\n SCHEMA_BUILDER_REF_SUGGESTIONS,\n} from './lib/tokens';\n\nexport function provideSchemaBuilder(\n config: SchemaBuilderConfig = {},\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: SCHEMA_BUILDER_CONFIG, useValue: config },\n // Root fallback so an inner editor used outside an editor subtree still resolves.\n JsonjoyTranslationContextService,\n ]);\n}\n\nexport function provideSchemaBuilderRefSuggestions(\n factory: RefSuggestionsFactory,\n): Provider[] {\n return [{ provide: SCHEMA_BUILDER_REF_SUGGESTIONS, useFactory: factory }];\n}\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nimport type { Translation } from '../i18n/translation-keys';\nimport type { SchemaEditorType } from '../types/json-schema';\n\n/**\n * Compose Tailwind class names with conflict resolution.\n * 1:1 port of jsonjoy-builder's `lib/utils.ts#cn`.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n\nconst typeColorClasses: Record<SchemaEditorType, string> = {\n string: 'text-blue-500 bg-blue-500/10',\n number: 'text-purple-500 bg-purple-500/10',\n integer: 'text-purple-500 bg-purple-500/10',\n boolean: 'text-green-500 bg-green-500/10',\n object: 'text-orange-500 bg-orange-500/10',\n array: 'text-pink-500 bg-pink-500/10',\n null: 'text-gray-500 bg-gray-500/10',\n anyOf: 'text-teal-500 bg-teal-500/10',\n oneOf: 'text-cyan-500 bg-cyan-500/10',\n allOf: 'text-indigo-500 bg-indigo-500/10',\n $ref: 'text-amber-600 bg-amber-500/10',\n};\n\nexport function getTypeColor(type: SchemaEditorType): string {\n return typeColorClasses[type];\n}\n\nexport function getTypeLabel(t: Translation, type: SchemaEditorType): string {\n switch (type) {\n case 'string':\n return t.schemaTypeString;\n case 'number':\n case 'integer':\n return t.schemaTypeNumber;\n case 'boolean':\n return t.schemaTypeBoolean;\n case 'object':\n return t.schemaTypeObject;\n case 'array':\n return t.schemaTypeArray;\n case 'null':\n return t.schemaTypeNull;\n case 'anyOf':\n return t.schemaTypeAnyOf;\n case 'oneOf':\n return t.schemaTypeOneOf;\n case 'allOf':\n return t.schemaTypeAllOf;\n case '$ref':\n return t.schemaTypeRef;\n }\n}\n","import { Injectable, type Signal, signal } from '@angular/core';\n\nimport type { LocalDefinition } from '../internal/schema-editor';\n\n/**\n * Editor-scoped context carrying the root schema's local `$defs`/`definitions`\n * down to deeply nested `$ref` editors.\n */\n@Injectable()\nexport class LocalDefinitionsContextService {\n private readonly defs = signal<readonly LocalDefinition[]>([]);\n\n readonly definitions: Signal<readonly LocalDefinition[]> =\n this.defs.asReadonly();\n\n set(definitions: readonly LocalDefinition[]): void {\n this.defs.set(definitions);\n }\n}\n","import { Directive, computed, input } from '@angular/core';\n\nimport { cn } from '../../internal/cn';\n\nexport type BadgeVariant = 'default' | 'secondary' | 'destructive' | 'outline';\n\nconst BADGE_BASE =\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2';\n\nconst BADGE_VARIANTS: Record<BadgeVariant, string> = {\n default:\n 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive:\n 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',\n outline: 'text-foreground',\n};\n\nexport function badgeVariants(\n options: { variant?: BadgeVariant; className?: string } = {},\n): string {\n const { variant = 'default', className } = options;\n return cn(BADGE_BASE, BADGE_VARIANTS[variant], className);\n}\n\n@Directive({\n selector: 'div[libJsonjoyBadge], span[libJsonjoyBadge]',\n standalone: true,\n host: { '[class]': 'classes()' },\n})\nexport class BadgeDirective {\n readonly variant = input<BadgeVariant>('default');\n protected readonly classes = computed(() =>\n badgeVariants({ variant: this.variant() }),\n );\n}\n","import { Directive, computed, input } from '@angular/core';\n\nimport { cn } from '../../internal/cn';\n\nexport type ButtonVariant =\n | 'default'\n | 'destructive'\n | 'outline'\n | 'secondary'\n | 'ghost'\n | 'link';\n\nexport type ButtonSize = 'default' | 'sm' | 'lg' | 'icon';\n\nconst BUTTON_BASE =\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-bold ring-offset-background transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0';\n\nconst BUTTON_VARIANTS: Record<ButtonVariant, string> = {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n outline:\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n};\n\nconst BUTTON_SIZES: Record<ButtonSize, string> = {\n default: 'h-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n};\n\n/**\n * Pure helper to compose the button class string. Equivalent of React's\n * `buttonVariants` from `ui/button.tsx`. Exported so non-DOM contexts\n * (e.g. dynamic class assignment) can compute the same string.\n */\nexport function buttonVariants(\n options: {\n variant?: ButtonVariant;\n size?: ButtonSize;\n className?: string;\n } = {},\n): string {\n const { variant = 'default', size = 'default', className } = options;\n return cn(\n BUTTON_BASE,\n BUTTON_VARIANTS[variant],\n BUTTON_SIZES[size],\n className,\n );\n}\n\n/**\n * Applies the jsonjoy button styling to a native `<button>` or `<a>`.\n *\n * Idiomatic usage:\n * ```html\n * <button libJsonjoyButton variant=\"destructive\" size=\"sm\">Delete</button>\n * ```\n *\n * Native attributes (`type`, `disabled`, `form`, `aria-*`) are kept on the\n * host element — this directive only contributes Tailwind classes.\n */\n@Directive({\n selector: 'button[libJsonjoyButton], a[libJsonjoyButton]',\n standalone: true,\n host: {\n '[class]': 'classes()',\n },\n})\nexport class ButtonDirective {\n readonly variant = input<ButtonVariant>('default');\n readonly size = input<ButtonSize>('default');\n\n protected readonly classes = computed(() =>\n buttonVariants({ variant: this.variant(), size: this.size() }),\n );\n}\n","import { Directive } from '@angular/core';\n\nconst INPUT_CLASSES =\n 'flex h-10 w-full rounded-md border border-input bg-[var(--jsonjoy-color-input-bg)] px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm';\n\n/**\n * Applies the jsonjoy text-input styling to a native `<input>`. Mirrors\n * React's `ui/input.tsx` (which is a styled native input). Value binding\n * uses Angular's standard form mechanisms: `[ngModel]`, `[formControl]`,\n * `[value]` + `(input)` — this directive only contributes classes.\n */\n@Directive({\n selector: 'input[libJsonjoyInput]',\n standalone: true,\n host: {\n class: INPUT_CLASSES,\n },\n})\nexport class InputDirective {}\n","import { Directive } from '@angular/core';\n\nconst LABEL_CLASSES =\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70';\n\n/**\n * Applies the jsonjoy label styling to a native `<label>`. Mirrors\n * React's `ui/label.tsx`. Use the standard `for` attribute (Angular\n * template syntax handles it natively) or `for=\"elementId\"` to link\n * to the labelled control.\n */\n@Directive({\n selector: 'label[libJsonjoyLabel]',\n standalone: true,\n host: {\n class: LABEL_CLASSES,\n },\n})\nexport class LabelDirective {}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n model,\n} from '@angular/core';\n\nimport type { Translation } from '../../i18n/translation-keys';\nimport { cn } from '../../internal/cn';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport type { SchemaEditorType } from '../../types/json-schema';\n\ninterface TypeOption {\n readonly id: SchemaEditorType;\n readonly label: keyof Translation;\n readonly description: keyof Translation;\n readonly group: 'basic' | 'composition';\n}\n\nconst TYPE_OPTIONS: readonly TypeOption[] = [\n {\n id: 'string',\n label: 'fieldTypeTextLabel',\n description: 'fieldTypeTextDescription',\n group: 'basic',\n },\n {\n id: 'number',\n label: 'fieldTypeNumberLabel',\n description: 'fieldTypeNumberDescription',\n group: 'basic',\n },\n {\n id: 'boolean',\n label: 'fieldTypeBooleanLabel',\n description: 'fieldTypeBooleanDescription',\n group: 'basic',\n },\n {\n id: 'object',\n label: 'fieldTypeObjectLabel',\n description: 'fieldTypeObjectDescription',\n group: 'basic',\n },\n {\n id: 'array',\n label: 'fieldTypeArrayLabel',\n description: 'fieldTypeArrayDescription',\n group: 'basic',\n },\n {\n id: 'anyOf',\n label: 'schemaTypeAnyOf',\n description: 'anyOfDescription',\n group: 'composition',\n },\n {\n id: 'oneOf',\n label: 'schemaTypeOneOf',\n description: 'oneOfDescription',\n group: 'composition',\n },\n {\n id: 'allOf',\n label: 'schemaTypeAllOf',\n description: 'allOfDescription',\n group: 'composition',\n },\n {\n id: '$ref',\n label: 'schemaTypeRef',\n description: 'fieldTypeRefDescription',\n group: 'composition',\n },\n];\n\n@Component({\n selector: 'lib-jsonjoy-schema-type-selector',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div\n [id]=\"inputId()\"\n class=\"grid grid-cols-1 xs:grid-cols-2 md:grid-cols-3 gap-2\"\n >\n @for (type of typeOptions; track type.id) {\n <button\n type=\"button\"\n [title]=\"t()[type.description]\"\n [class]=\"tileClasses(type)\"\n (click)=\"value.set(type.id)\"\n >\n <div class=\"font-medium text-sm\">{{ t()[type.label] }}</div>\n <div class=\"text-xs text-muted-foreground line-clamp-1\">\n {{ t()[type.description] }}\n </div>\n </button>\n }\n </div>\n `,\n})\nexport class SchemaTypeSelectorComponent {\n readonly inputId = input<string | undefined>(undefined);\n readonly value = model.required<SchemaEditorType>();\n\n protected readonly typeOptions = TYPE_OPTIONS;\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n protected tileClasses(type: TypeOption): string {\n const selected = this.value() === type.id;\n return cn(\n 'p-2.5 rounded-lg border-2 text-left transition-all duration-200',\n selected\n ? 'border-primary bg-primary/5 shadow-xs'\n : type.group === 'composition'\n ? 'border-dashed border-border hover:border-primary/40 hover:bg-secondary'\n : 'border-border hover:border-primary/30 hover:bg-secondary',\n );\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport type { NewField, SchemaEditorType } from '../../types/json-schema';\nimport { BadgeDirective } from '../ui/badge.directive';\nimport { ButtonDirective } from '../ui/button.directive';\nimport { InputDirective } from '../ui/input.directive';\nimport { LabelDirective } from '../ui/label.directive';\nimport { SchemaTypeSelectorComponent } from './schema-type-selector.component';\n\nlet nextAddFieldId = 0;\n\n@Component({\n selector: 'lib-jsonjoy-add-field-button',\n standalone: true,\n imports: [\n BadgeDirective,\n ButtonDirective,\n InputDirective,\n LabelDirective,\n SchemaTypeSelectorComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy inline-block' },\n template: `\n <button\n libJsonjoyButton\n type=\"button\"\n [variant]=\"variant() === 'primary' ? 'default' : 'outline'\"\n size=\"sm\"\n class=\"flex items-center gap-1.5 group\"\n (click)=\"openDialog()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"group-hover:scale-110 transition-transform\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M8 12h8\" />\n <path d=\"M12 8v8\" />\n </svg>\n <span>{{ t().fieldAddNewButton }}</span>\n </button>\n\n <dialog\n #dialogRef\n class=\"md:max-w-[1200px] max-h-[85vh] w-[95vw] m-auto p-4 sm:p-6 jsonjoy rounded-lg border bg-background shadow-lg backdrop:bg-black/40\"\n (close)=\"onDialogClose()\"\n >\n <div class=\"mb-4\">\n <div class=\"text-xl flex flex-wrap items-center gap-2\">\n {{ t().fieldAddNewLabel }}\n <span libJsonjoyBadge variant=\"secondary\" class=\"text-xs\">\n {{ t().fieldAddNewBadge }}\n </span>\n </div>\n <p class=\"text-sm text-muted-foreground\">\n {{ t().fieldAddNewDescription }}\n </p>\n </div>\n\n <form class=\"space-y-6\" [id]=\"formId\" (submit)=\"onSubmit($event)\">\n <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n <div class=\"space-y-4 min-w-[280px]\">\n <div>\n <div class=\"flex items-center justify-between gap-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"fieldNameId\"\n class=\"text-sm font-medium\"\n >\n {{\n useRegex() ? t().fieldNameRegexLabel : t().fieldNameLabel\n }}\n </label>\n <button\n type=\"button\"\n class=\"text-xs text-muted-foreground hover:text-foreground underline shrink-0\"\n (click)=\"useRegex.set(!useRegex())\"\n >\n {{\n useRegex()\n ? t().fieldNameUseExactName\n : t().fieldNameUseRegex\n }}\n </button>\n </div>\n <input\n libJsonjoyInput\n [id]=\"fieldNameId\"\n [value]=\"fieldName()\"\n [placeholder]=\"\n useRegex()\n ? t().fieldNameRegexPlaceholder\n : t().fieldNamePlaceholder\n \"\n class=\"font-mono text-sm w-full mt-1.5\"\n [class.border-destructive]=\"!!regexError()\"\n required\n (input)=\"fieldName.set($any($event.target).value)\"\n />\n @if (regexError()) {\n <p class=\"text-xs text-destructive mt-1\">\n {{ t().fieldNameRegexError }}\n </p>\n } @else if (useRegex()) {\n <p class=\"text-xs text-muted-foreground mt-1\">\n {{ t().fieldNameRegexHelp }}\n </p>\n }\n </div>\n\n <div>\n <label\n libJsonjoyLabel\n [attr.for]=\"fieldDescId\"\n class=\"block text-sm font-medium\"\n >\n {{ t().fieldDescription }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"fieldDescId\"\n [value]=\"fieldDesc()\"\n [placeholder]=\"t().fieldDescriptionPlaceholder\"\n class=\"text-sm w-full mt-1.5\"\n (input)=\"fieldDesc.set($any($event.target).value)\"\n />\n </div>\n\n @if (!useRegex()) {\n <div\n class=\"flex items-center gap-3 p-3 rounded-lg border bg-muted/50\"\n >\n <input\n type=\"checkbox\"\n [id]=\"fieldRequiredId\"\n [checked]=\"fieldRequired()\"\n class=\"rounded border-input shrink-0\"\n (change)=\"fieldRequired.set($any($event.target).checked)\"\n />\n <label\n libJsonjoyLabel\n [attr.for]=\"fieldRequiredId\"\n class=\"text-sm\"\n >\n {{ t().fieldRequiredLabel }}\n </label>\n </div>\n }\n </div>\n\n <div class=\"space-y-4 min-w-[280px]\">\n <div>\n <label\n libJsonjoyLabel\n [attr.for]=\"fieldTypeId\"\n class=\"block text-sm font-medium mb-1.5\"\n >\n {{ t().fieldType }}\n </label>\n <lib-jsonjoy-schema-type-selector\n [inputId]=\"fieldTypeId\"\n [(value)]=\"fieldType\"\n />\n </div>\n </div>\n </div>\n\n <div class=\"mt-6 gap-2 flex flex-wrap justify-end\">\n <button\n libJsonjoyButton\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n (click)=\"closeDialog()\"\n >\n {{ t().fieldAddNewCancel }}\n </button>\n <button\n libJsonjoyButton\n type=\"submit\"\n size=\"sm\"\n [attr.form]=\"formId\"\n [disabled]=\"!canSubmit()\"\n >\n {{ t().fieldAddNewConfirm }}\n </button>\n </div>\n </form>\n </dialog>\n `,\n})\nexport class AddFieldButtonComponent {\n readonly variant = input<'primary' | 'secondary'>('primary');\n readonly autoFocus = input<boolean>(true);\n\n readonly addField = output<NewField>();\n readonly addPatternField = output<NewField>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n private readonly idSeq = ++nextAddFieldId;\n protected readonly fieldNameId = `jjadd-${this.idSeq}-name`;\n protected readonly fieldDescId = `jjadd-${this.idSeq}-desc`;\n protected readonly fieldRequiredId = `jjadd-${this.idSeq}-required`;\n protected readonly fieldTypeId = `jjadd-${this.idSeq}-type`;\n protected readonly formId = `jjadd-${this.idSeq}-form`;\n\n protected readonly fieldName = signal('');\n protected readonly fieldType = signal<SchemaEditorType>('string');\n protected readonly fieldDesc = signal('');\n protected readonly fieldRequired = signal(false);\n protected readonly useRegex = signal(false);\n\n protected readonly regexError = computed(() => {\n if (!this.useRegex()) return false;\n const pattern = this.fieldName().trim();\n if (!pattern) return false;\n try {\n new RegExp(pattern);\n return false;\n } catch {\n return true;\n }\n });\n\n protected readonly canSubmit = computed(\n () => this.fieldName().trim().length > 0 && !this.regexError(),\n );\n\n private readonly dialogRef =\n viewChild<ElementRef<HTMLDialogElement>>('dialogRef');\n\n protected openDialog(): void {\n this.dialogRef()?.nativeElement.showModal();\n }\n\n protected closeDialog(): void {\n this.dialogRef()?.nativeElement.close();\n }\n\n protected onDialogClose(): void {\n this.resetForm();\n }\n\n protected onSubmit(event: Event): void {\n event.preventDefault();\n const name = this.fieldName().trim();\n if (!name) return;\n if (this.useRegex()) {\n if (this.regexError()) return;\n this.addPatternField.emit({\n name,\n type: this.fieldType(),\n description: this.fieldDesc(),\n required: false,\n });\n } else {\n this.addField.emit({\n name,\n type: this.fieldType(),\n description: this.fieldDesc(),\n required: this.fieldRequired(),\n });\n }\n this.closeDialog();\n }\n\n private resetForm(): void {\n this.fieldName.set('');\n this.fieldType.set('string');\n this.fieldDesc.set('');\n this.fieldRequired.set(false);\n this.useRegex.set(false);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\n\nimport { cn, getTypeColor, getTypeLabel } from '../../internal/cn';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport type { SchemaEditorType } from '../../types/json-schema';\n\nconst TYPE_OPTIONS: readonly SchemaEditorType[] = [\n 'string',\n 'number',\n 'boolean',\n 'object',\n 'array',\n 'null',\n 'anyOf',\n 'oneOf',\n 'allOf',\n '$ref',\n] as const;\n\n@Component({\n selector: 'lib-jsonjoy-type-dropdown',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'jsonjoy relative inline-block',\n '(document:click)': 'onDocumentClick($event)',\n },\n template: `\n <button type=\"button\" [class]=\"triggerClasses()\" (click)=\"toggle($event)\">\n <span>{{ getTypeLabel(t(), value()) }}</span>\n @if (!readOnly()) {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"ml-1\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n }\n </button>\n\n @if (isOpen()) {\n <div\n class=\"absolute z-50 mt-1 w-[140px] rounded-md border bg-popover shadow-lg animate-in fade-in-50 zoom-in-95\"\n >\n <div class=\"py-1\">\n @for (type of typeOptions; track type) {\n <button\n type=\"button\"\n [class]=\"itemClasses(type)\"\n (click)=\"select(type, $event)\"\n >\n <span [class]=\"'px-2 py-0.5 rounded ' + getTypeColor(type)\">\n {{ getTypeLabel(t(), type) }}\n </span>\n @if (value() === type) {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n }\n </button>\n }\n </div>\n </div>\n }\n `,\n})\nexport class TypeDropdownComponent {\n readonly value = model.required<SchemaEditorType>();\n readonly readOnly = input.required<boolean>();\n readonly className = input<string | undefined>(undefined);\n\n protected readonly typeOptions = TYPE_OPTIONS;\n protected readonly getTypeColor = getTypeColor;\n protected readonly getTypeLabel = getTypeLabel;\n\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n protected readonly isOpen = signal(false);\n\n protected readonly triggerClasses = computed(() =>\n cn(\n 'text-xs px-3.5 py-1.5 rounded-md font-medium text-center flex items-center justify-between',\n getTypeColor(this.value()),\n 'hover:shadow-xs hover:ring-1 hover:ring-ring/30 active:scale-95 transition-all',\n this.readOnly() ? '' : 'w-[92px]',\n this.className(),\n ),\n );\n\n protected itemClasses(type: SchemaEditorType): string {\n return cn(\n 'w-full text-left px-3 py-1.5 text-xs flex items-center justify-between',\n 'hover:bg-muted/50 transition-colors',\n this.value() === type && 'font-medium',\n );\n }\n\n protected toggle(event: MouseEvent): void {\n event.stopPropagation();\n if (this.readOnly()) return;\n this.isOpen.update((v) => !v);\n }\n\n protected select(type: SchemaEditorType, event: MouseEvent): void {\n event.stopPropagation();\n this.value.set(type);\n this.isOpen.set(false);\n }\n\n protected onDocumentClick(event: MouseEvent): void {\n if (!this.isOpen()) return;\n const target = event.target as Node | null;\n if (target && !this.elementRef.nativeElement.contains(target)) {\n this.isOpen.set(false);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n} from '@angular/core';\n\n@Component({\n selector: 'lib-jsonjoy-switch',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class:\n 'jsonjoy peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\n role: 'switch',\n tabindex: '0',\n '[attr.aria-checked]': 'checked()',\n '[attr.data-state]': 'dataState()',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.disabled]': 'disabled() ? \"\" : null',\n '(click)': 'onClick()',\n '(keydown.space)': 'onKeydownActivate($event)',\n '(keydown.enter)': 'onKeydownActivate($event)',\n },\n template: `\n <span\n class=\"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\"\n [attr.data-state]=\"dataState()\"\n ></span>\n `,\n})\nexport class SwitchComponent {\n readonly checked = model<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly ariaLabel = input<string | undefined>(undefined);\n\n protected readonly dataState = computed(() =>\n this.checked() ? 'checked' : 'unchecked',\n );\n\n protected onClick(): void {\n if (this.disabled()) return;\n this.checked.update((v) => !v);\n }\n\n protected onKeydownActivate(event: Event): void {\n event.preventDefault();\n this.onClick();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n linkedSignal,\n output,\n} from '@angular/core';\n\nimport { cn } from '../../internal/cn';\nimport { getArrayItemsSchema } from '../../internal/schema-editor';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n type SchemaEditorType,\n asObjectSchema,\n getEditorType,\n isBooleanSchema,\n withObjectSchema,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport { TypeDropdownComponent } from '../schema-editor-internal/type-dropdown.component';\nimport { TypeEditorComponent } from '../schema-editor-internal/type-editor.component';\nimport type { EnumChangeContext } from '../schema-editor-internal/type-editor.component';\nimport { InputDirective } from '../ui/input.directive';\nimport { LabelDirective } from '../ui/label.directive';\nimport { SwitchComponent } from '../ui/switch.component';\n\nlet nextArrayId = 0;\n\n@Component({\n selector: 'lib-jsonjoy-array-editor',\n standalone: true,\n imports: [\n InputDirective,\n LabelDirective,\n SwitchComponent,\n TypeDropdownComponent,\n forwardRef(() => TypeEditorComponent),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div class=\"space-y-6\">\n @if (!readOnly() || !!maxItems() || !!minItems()) {\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n @if (!readOnly() || !!minItems()) {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"minItemsId\"\n [class.text-destructive]=\"!!minMaxError() || !!minItemsError()\"\n >\n {{ t().arrayMinimumLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"minItemsId\"\n type=\"number\"\n min=\"0\"\n [value]=\"minItems() ?? ''\"\n [placeholder]=\"t().arrayMinimumPlaceholder\"\n [class]=\"numberInputClasses(!!minMaxError())\"\n (input)=\"onMinItemsInput($event)\"\n (blur)=\"commitValidation()\"\n />\n </div>\n }\n @if (!readOnly() || !!maxItems()) {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"maxItemsId\"\n [class.text-destructive]=\"!!minMaxError() || !!maxItemsError()\"\n >\n {{ t().arrayMaximumLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"maxItemsId\"\n type=\"number\"\n min=\"0\"\n [value]=\"maxItems() ?? ''\"\n [placeholder]=\"t().arrayMaximumPlaceholder\"\n [class]=\"numberInputClasses(!!minMaxError())\"\n (input)=\"onMaxItemsInput($event)\"\n (blur)=\"commitValidation()\"\n />\n </div>\n }\n @if (!!minMaxError() || !!minItemsError() || !!maxItemsError()) {\n <div\n class=\"text-xs text-destructive italic md:col-span-2 whitespace-pre-line\"\n >\n {{ combinedRangeError() }}\n </div>\n }\n </div>\n }\n\n @if (!readOnly() || uniqueItems()) {\n <div class=\"flex items-center space-x-2\">\n <lib-jsonjoy-switch\n [id]=\"uniqueItemsId\"\n [checked]=\"uniqueItems()\"\n [ariaLabel]=\"t().arrayForceUniqueItemsLabel\"\n (checkedChange)=\"onUniqueItemsChange($event)\"\n />\n <label\n libJsonjoyLabel\n [attr.for]=\"uniqueItemsId\"\n class=\"cursor-pointer\"\n >\n {{ t().arrayForceUniqueItemsLabel }}\n </label>\n </div>\n }\n\n <div [class]=\"itemSectionClasses()\">\n <div class=\"flex items-center justify-between mb-4\">\n <label libJsonjoyLabel>{{ t().arrayItemTypeLabel }}</label>\n <lib-jsonjoy-type-dropdown\n [value]=\"itemType()\"\n [readOnly]=\"readOnly()\"\n (valueChange)=\"onItemTypeChange($event)\"\n />\n </div>\n\n <lib-jsonjoy-type-editor\n [schema]=\"itemsSchema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"itemSchemaKey()\"\n [depth]=\"depth() + 1\"\n (schemaChange)=\"onItemSchemaChange($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n </div>\n </div>\n `,\n})\nexport class ArrayEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly schemaKey = input<string | undefined>(undefined);\n readonly depth = input<number>(0);\n\n readonly schemaChange = output<ObjectJsonSchema>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n private readonly idSeq = ++nextArrayId;\n protected readonly minItemsId = `jjarr-${this.idSeq}-min`;\n protected readonly maxItemsId = `jjarr-${this.idSeq}-max`;\n protected readonly uniqueItemsId = `jjarr-${this.idSeq}-unique`;\n\n protected readonly minItems = linkedSignal<number | undefined>(() =>\n withObjectSchema(this.schema(), (s) => s.minItems, undefined),\n );\n protected readonly maxItems = linkedSignal<number | undefined>(() =>\n withObjectSchema(this.schema(), (s) => s.maxItems, undefined),\n );\n protected readonly uniqueItems = linkedSignal<boolean>(() =>\n withObjectSchema(this.schema(), (s) => s.uniqueItems ?? false, false),\n );\n\n protected readonly itemsSchema = computed<JsonSchema>(\n () => getArrayItemsSchema(this.schema()) ?? { type: 'string' },\n );\n\n protected readonly itemSchemaKey = computed(() => {\n const key = this.schemaKey();\n return key ? `${key}[]` : undefined;\n });\n\n protected readonly itemType = computed<SchemaEditorType>(() =>\n getEditorType(this.itemsSchema()),\n );\n\n private readonly errorsByPath = computed(() => {\n const errors = this.validationNode()?.validation.errors ?? [];\n return errors;\n });\n\n protected readonly minMaxError = computed(\n () => this.errorsByPath().find((err) => err.path[0] === 'minmax')?.message,\n );\n\n protected readonly minItemsError = computed(\n () =>\n this.errorsByPath().find((err) => err.path[0] === 'minItems')?.message,\n );\n\n protected readonly maxItemsError = computed(\n () =>\n this.errorsByPath().find((err) => err.path[0] === 'maxItems')?.message,\n );\n\n protected readonly combinedRangeError = computed(() => {\n const parts = [\n this.minMaxError(),\n this.minItemsError() ?? this.maxItemsError(),\n ].filter(Boolean);\n return parts.join('\\n');\n });\n\n protected readonly itemSectionClasses = computed(() =>\n cn(\n 'space-y-2 pt-4 border-border/40',\n !this.readOnly() ||\n this.minItems() ||\n this.maxItems() ||\n this.uniqueItems()\n ? 'border-t'\n : null,\n ),\n );\n\n protected numberInputClasses(hasMinMaxError: boolean): string {\n return cn('h-8', hasMinMaxError && 'border-destructive');\n }\n\n protected onMinItemsInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n this.minItems.set(raw === '' ? undefined : Number(raw));\n }\n\n protected onMaxItemsInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n this.maxItems.set(raw === '' ? undefined : Number(raw));\n }\n\n protected commitValidation(): void {\n this.schemaChange.emit(this.buildValidationProps());\n }\n\n protected onUniqueItemsChange(value: boolean): void {\n this.uniqueItems.set(value);\n this.schemaChange.emit(this.buildValidationProps({ uniqueItems: value }));\n }\n\n protected onItemSchemaChange(updatedItem: ObjectJsonSchema): void {\n const schema = this.schema();\n const base: ObjectJsonSchema = {\n type: 'array',\n ...(isBooleanSchema(schema) ? {} : schema),\n items: updatedItem,\n };\n this.schemaChange.emit(base);\n }\n\n protected onItemTypeChange(newType: SchemaEditorType): void {\n const items = this.itemsSchema();\n const rest = stripTypeAndCombinators(asObjectSchema(items));\n if (newType === '$ref') {\n this.onItemSchemaChange({ $ref: '' });\n return;\n }\n if (newType === 'anyOf' || newType === 'oneOf' || newType === 'allOf') {\n const initial =\n newType === 'allOf'\n ? { allOf: [{ type: 'object' as const }] }\n : {\n [newType]: [\n { type: 'string' as const },\n { type: 'number' as const },\n ],\n };\n this.onItemSchemaChange({ ...rest, ...initial });\n } else {\n this.onItemSchemaChange({ ...rest, type: newType });\n }\n }\n\n private buildValidationProps(\n overrides: {\n minItems?: number;\n maxItems?: number;\n uniqueItems?: boolean;\n } = {},\n ): ObjectJsonSchema {\n const schema = this.schema();\n const next: ObjectJsonSchema = {\n type: 'array',\n ...(isBooleanSchema(schema) ? {} : schema),\n minItems: overrides.minItems ?? this.minItems(),\n maxItems: overrides.maxItems ?? this.maxItems(),\n uniqueItems: overrides.uniqueItems || undefined,\n };\n\n if (next.items === undefined) {\n next.items = this.itemsSchema();\n }\n\n const cleaned: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(next)) {\n if (value !== undefined) cleaned[key] = value;\n }\n return cleaned as ObjectJsonSchema;\n }\n}\n\nfunction stripTypeAndCombinators(schema: ObjectJsonSchema): ObjectJsonSchema {\n const {\n type: _type,\n $ref: _ref,\n anyOf: _anyOf,\n oneOf: _oneOf,\n allOf: _allOf,\n ...rest\n } = schema;\n return rest as ObjectJsonSchema;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\n\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n isBooleanSchema,\n withObjectSchema,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport type { EnumChangeContext } from '../schema-editor-internal/type-editor.component';\nimport { LabelDirective } from '../ui/label.directive';\nimport { SwitchComponent } from '../ui/switch.component';\n\nlet nextBooleanEditorId = 0;\n\n@Component({\n selector: 'lib-jsonjoy-boolean-editor',\n standalone: true,\n imports: [LabelDirective, SwitchComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div class=\"space-y-4\">\n @if (readOnly() && !hasEnum()) {\n <p class=\"text-sm text-muted-foreground italic\">\n {{ t().booleanNoConstraint }}\n </p>\n }\n\n @if (!readOnly() || !allowsTrue() || !allowsFalse()) {\n <div class=\"space-y-2 pt-2\">\n @if (!readOnly() || hasEnum()) {\n <label libJsonjoyLabel>{{ t().booleanAllowedValuesLabel }}</label>\n\n <div class=\"space-y-3\">\n <div class=\"flex items-center space-x-2\">\n <lib-jsonjoy-switch\n [checked]=\"allowsTrue()\"\n [disabled]=\"readOnly()\"\n [attr.id]=\"allowTrueId\"\n (checkedChange)=\"handleAllowedChange(true, $event)\"\n />\n <label\n libJsonjoyLabel\n [attr.for]=\"allowTrueId\"\n class=\"cursor-pointer\"\n >\n {{ t().booleanAllowTrueLabel }}\n </label>\n </div>\n\n <div class=\"flex items-center space-x-2\">\n <lib-jsonjoy-switch\n [checked]=\"allowsFalse()\"\n [disabled]=\"readOnly()\"\n [attr.id]=\"allowFalseId\"\n (checkedChange)=\"handleAllowedChange(false, $event)\"\n />\n <label\n libJsonjoyLabel\n [attr.for]=\"allowFalseId\"\n class=\"cursor-pointer\"\n >\n {{ t().booleanAllowFalseLabel }}\n </label>\n </div>\n </div>\n }\n\n @if (!allowsTrue() && !allowsFalse()) {\n <p class=\"text-xs text-amber-600 mt-2\">\n {{ t().booleanNeitherWarning }}\n </p>\n }\n </div>\n }\n </div>\n `,\n})\nexport class BooleanEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly schemaKey = input<string | undefined>(undefined);\n readonly depth = input<number>(0);\n\n readonly schemaChange = output<ObjectJsonSchema>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n private readonly idSeq = ++nextBooleanEditorId;\n protected readonly allowTrueId = `jjbe-${this.idSeq}-true`;\n protected readonly allowFalseId = `jjbe-${this.idSeq}-false`;\n\n protected readonly enumValues = computed<readonly boolean[] | null>(() =>\n withObjectSchema(\n this.schema(),\n (s) => (s.enum as boolean[] | undefined) ?? null,\n null,\n ),\n );\n\n protected readonly hasRestrictions = computed(() =>\n Array.isArray(this.enumValues()),\n );\n\n protected readonly allowsTrue = computed(() => {\n const restricted = this.hasRestrictions();\n if (!restricted) return true;\n return this.enumValues()?.includes(true) ?? false;\n });\n\n protected readonly allowsFalse = computed(() => {\n const restricted = this.hasRestrictions();\n if (!restricted) return true;\n return this.enumValues()?.includes(false) ?? false;\n });\n\n protected readonly hasEnum = computed(() => {\n const values = this.enumValues();\n return Array.isArray(values) && values.length > 0;\n });\n\n protected handleAllowedChange(value: boolean, allowed: boolean): void {\n const restricted = this.hasRestrictions();\n const current = this.enumValues();\n let nextEnum: boolean[] | undefined;\n let action: 'add' | 'delete' | null = null;\n\n if (allowed) {\n if (!restricted) return;\n if (current?.includes(value)) return;\n nextEnum = current ? [...current, value] : [value];\n action = 'add';\n if (nextEnum.includes(true) && nextEnum.includes(false)) {\n nextEnum = undefined;\n }\n } else {\n if (restricted && !current?.includes(value)) return;\n nextEnum = [!value];\n action = 'delete';\n }\n\n const currentSchema = this.schema();\n const base: ObjectJsonSchema = isBooleanSchema(currentSchema)\n ? { type: 'boolean' }\n : { ...currentSchema, type: 'boolean' };\n if (nextEnum) {\n this.schemaChange.emit({ ...base, enum: nextEnum });\n } else {\n const { enum: _enum, ...rest } = base;\n this.schemaChange.emit(rest as ObjectJsonSchema);\n }\n\n if (action === 'add' && nextEnum) {\n this.addEnum.emit({\n value,\n index: nextEnum.indexOf(value),\n schemaKey: this.schemaKey(),\n });\n } else if (action === 'add') {\n this.addEnum.emit({\n value,\n index: current?.length ?? 0,\n schemaKey: this.schemaKey(),\n });\n } else if (action === 'delete') {\n const fallbackIndex =\n current?.indexOf(value) ?? [true, false].indexOf(value);\n this.deleteEnum.emit({\n value,\n index: Math.max(fallbackIndex, 0),\n schemaKey: this.schemaKey(),\n });\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n linkedSignal,\n output,\n signal,\n} from '@angular/core';\n\nimport type { Translation } from '../../i18n/translation-keys';\nimport { cn } from '../../internal/cn';\nimport { DEFAULT_SCHEMAS } from '../../internal/schema-editor';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n type SchemaEditorType,\n type SchemaType,\n getEditorType,\n getSchemaDescription,\n isBooleanSchema,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport { TypeDropdownComponent } from '../schema-editor-internal/type-dropdown.component';\nimport { TypeEditorComponent } from '../schema-editor-internal/type-editor.component';\nimport type { EnumChangeContext } from '../schema-editor-internal/type-editor.component';\nimport { InputDirective } from '../ui/input.directive';\n\nexport type CombinatorKind = 'anyOf' | 'oneOf' | 'allOf';\n\ninterface CombinatorStrings {\n description: string;\n addButton: string;\n removeButton: string;\n itemLabel: string;\n noItems: string;\n}\n\nfunction getCombinatorStrings(\n t: Translation,\n combinator: CombinatorKind,\n): CombinatorStrings {\n switch (combinator) {\n case 'anyOf':\n return {\n description: t.anyOfDescription,\n addButton: t.anyOfAddOption,\n removeButton: t.anyOfRemoveOption,\n itemLabel: t.anyOfOptionLabel,\n noItems: t.anyOfNoOptions,\n };\n case 'oneOf':\n return {\n description: t.oneOfDescription,\n addButton: t.oneOfAddOption,\n removeButton: t.oneOfRemoveOption,\n itemLabel: t.oneOfOptionLabel,\n noItems: t.oneOfNoOptions,\n };\n case 'allOf':\n return {\n description: t.allOfDescription,\n addButton: t.allOfAddSchema,\n removeButton: t.allOfRemoveSchema,\n itemLabel: t.allOfSchemaLabel,\n noItems: t.allOfNoSchemas,\n };\n }\n}\n\ninterface OptionRow {\n readonly id: string;\n readonly index: number;\n readonly schema: JsonSchema;\n readonly description: string;\n readonly type: SchemaEditorType;\n readonly isExpanded: boolean;\n readonly isDescFocused: boolean;\n}\n\nlet idCounter = 0;\nconst nextId = () => `combinator-${++idCounter}`;\n\n@Component({\n selector: 'lib-jsonjoy-combinator-editor',\n standalone: true,\n imports: [\n InputDirective,\n TypeDropdownComponent,\n forwardRef(() => TypeEditorComponent),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div class=\"space-y-3\">\n <p class=\"text-xs text-muted-foreground italic\">\n {{ strings().description }}\n </p>\n\n @if (options().length === 0) {\n <div\n class=\"text-sm text-muted-foreground italic p-2 text-center border rounded-md\"\n >\n {{ strings().noItems }}\n </div>\n } @else {\n <div class=\"space-y-2\">\n @for (row of rows(); track row.id) {\n <div [class]=\"rowClasses()\">\n <div\n class=\"flex flex-wrap items-center gap-2 px-3 py-2 sm:flex-nowrap\"\n >\n <button\n type=\"button\"\n class=\"flex shrink-0 items-center gap-2 text-left text-xs font-medium text-muted-foreground transition-colors hover:text-foreground\"\n (click)=\"toggleExpanded(row.id)\"\n >\n @if (row.isExpanded) {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n } @else {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n }\n <span class=\"shrink-0\">\n {{ strings().itemLabel }} {{ row.index + 1 }}\n </span>\n </button>\n\n @if (readOnly()) {\n @if (row.description) {\n <span\n class=\"flex-1 truncate px-2 py-0.5 text-left text-xs text-muted-foreground italic\"\n >\n {{ row.description }}\n </span>\n }\n } @else if (row.isDescFocused) {\n <input\n libJsonjoyInput\n [attr.aria-label]=\"t().propertyDescriptionPlaceholder\"\n class=\"z-10 min-w-40 flex-1 text-xs\"\n [placeholder]=\"t().propertyDescriptionPlaceholder\"\n [value]=\"row.description\"\n [autofocus]=\"true\"\n (focus)=\"selectAll($event)\"\n (input)=\"onDescriptionInput(row.index, $event)\"\n (blur)=\"onDescriptionBlur(row.index, $event)\"\n (keydown.enter)=\"onDescriptionEnter($event)\"\n />\n } @else if (row.description) {\n <button\n type=\"button\"\n class=\"mr-2 min-w-0 flex-1 cursor-text truncate rounded-sm px-2 py-0.5 text-left text-xs text-muted-foreground italic transition-all -mx-0.5 hover:bg-secondary/30 hover:ring-1 hover:ring-ring/20 hover:shadow-xs\"\n (click)=\"focusDescription(row.id)\"\n (keydown.enter)=\"focusDescription(row.id)\"\n >\n {{ row.description }}\n </button>\n } @else {\n <button\n type=\"button\"\n class=\"mr-2 min-w-0 flex-1 cursor-text truncate rounded-sm px-2 py-0.5 text-left text-xs text-muted-foreground/50 italic opacity-0 transition-all -mx-0.5 hover:bg-secondary/30 hover:ring-1 hover:ring-ring/20 hover:shadow-xs group-hover:opacity-100\"\n (click)=\"focusDescription(row.id)\"\n (keydown.enter)=\"focusDescription(row.id)\"\n >\n {{ t().propertyDescriptionButton }}\n </button>\n }\n\n <div class=\"flex shrink-0 items-center gap-2 sm:ml-auto\">\n <lib-jsonjoy-type-dropdown\n [value]=\"row.type\"\n [readOnly]=\"readOnly()\"\n (valueChange)=\"onOptionTypeChange(row.index, $event)\"\n />\n @if (!readOnly()) {\n <button\n type=\"button\"\n class=\"p-1 rounded-md hover:bg-secondary hover:text-destructive transition-colors text-muted-foreground\"\n [attr.aria-label]=\"strings().removeButton\"\n (click)=\"onRemoveOption(row.index)\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n }\n </div>\n </div>\n\n @if (row.isExpanded) {\n <div class=\"pt-1 pb-2 px-3 border-t animate-in\">\n <lib-jsonjoy-type-editor\n [schema]=\"row.schema\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"\n validationNode()?.children?.[childKey(row.index)]\n \"\n [schemaKey]=\"optionSchemaKey(row.index)\"\n [depth]=\"depth() + 1\"\n (schemaChange)=\"onOptionSchemaChange(row.index, $event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n </div>\n }\n </div>\n }\n </div>\n }\n\n @if (!readOnly()) {\n <button\n type=\"button\"\n class=\"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors px-2 py-1 rounded-md hover:bg-secondary\"\n (click)=\"onAddOption()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M8 12h8\" />\n <path d=\"M12 8v8\" />\n </svg>\n {{ strings().addButton }}\n </button>\n }\n </div>\n `,\n})\nexport class CombinatorEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly combinator = input.required<CombinatorKind>();\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly schemaKey = input<string | undefined>(undefined);\n readonly depth = input<number>(0);\n\n readonly schemaChange = output<ObjectJsonSchema>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n protected readonly strings = computed(() =>\n getCombinatorStrings(this.t(), this.combinator()),\n );\n\n protected readonly options = computed<readonly JsonSchema[]>(() => {\n const schema = this.schema();\n if (isBooleanSchema(schema)) return [];\n return schema[this.combinator()] ?? [];\n });\n\n // Stable per-row ids: preserve each slot's id across content edits (so an\n // expanded row stays expanded when its schema changes); only mint a new id\n // for a newly added slot, and drop trailing ids when slots are removed.\n protected readonly ids = linkedSignal<\n readonly JsonSchema[],\n readonly string[]\n >({\n source: this.options,\n computation: (options, previous) =>\n options.map((_, index) => previous?.value[index] ?? nextId()),\n });\n\n protected readonly expandedId = signal<string | null>(null);\n protected readonly descFocusId = signal<string | null>(null);\n\n protected readonly rows = computed<readonly OptionRow[]>(() => {\n const ids = this.ids();\n const expandedId = this.expandedId();\n const descFocusId = this.descFocusId();\n return this.options().map((option, index) => ({\n id: ids[index] ?? `fallback-${index}`,\n index,\n schema: option,\n description: getSchemaDescription(option),\n type: getEditorType(option),\n isExpanded: expandedId === ids[index],\n isDescFocused: descFocusId === ids[index],\n }));\n });\n\n protected readonly rowClasses = computed(() =>\n cn(\n 'group rounded-lg border border-border transition-all duration-200',\n this.depth() > 0 && 'ml-0 sm:ml-4 border-l-2 border-l-border',\n ),\n );\n\n protected childKey(index: number): string {\n return `${this.combinator()}:${index}`;\n }\n\n protected optionSchemaKey(index: number): string {\n const prefix = this.schemaKey();\n const k = this.combinator();\n return prefix ? `${prefix}.${k}[${index}]` : `${k}[${index}]`;\n }\n\n protected toggleExpanded(id: string): void {\n this.expandedId.update((current) => (current === id ? null : id));\n }\n\n protected focusDescription(id: string): void {\n this.descFocusId.set(id);\n }\n\n protected selectAll(event: FocusEvent): void {\n (event.target as HTMLInputElement).select();\n }\n\n protected onDescriptionInput(index: number, event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.applyDescription(index, value);\n }\n\n protected onDescriptionBlur(index: number, event: FocusEvent): void {\n const value = (event.target as HTMLInputElement).value.trim();\n this.applyDescription(index, value);\n this.descFocusId.set(null);\n }\n\n protected onDescriptionEnter(event: Event): void {\n event.preventDefault();\n (event.target as HTMLInputElement).blur();\n }\n\n protected onAddOption(): void {\n const newOptions = [...this.options(), { type: 'string' as const }];\n const newId = nextId();\n this.ids.set([...this.ids(), newId]);\n this.commitOptions(newOptions);\n this.expandedId.set(newId);\n }\n\n protected onRemoveOption(index: number): void {\n const ids = this.ids();\n const removedId = ids[index];\n const newOptions = this.options().filter((_, i) => i !== index);\n this.ids.set(ids.filter((_, i) => i !== index));\n if (this.expandedId() === removedId) {\n this.expandedId.set(null);\n }\n this.commitOptions(newOptions);\n }\n\n protected onOptionTypeChange(index: number, newType: SchemaEditorType): void {\n const options = this.options();\n const prevDesc = getSchemaDescription(options[index]);\n let next: ObjectJsonSchema = DEFAULT_SCHEMAS[newType as SchemaType] ??\n DEFAULT_SCHEMAS[newType] ?? { type: 'string' };\n if (prevDesc !== '') {\n next = { ...next, description: prevDesc };\n }\n const newOptions = [...options];\n newOptions[index] = next;\n this.commitOptions(newOptions);\n }\n\n protected onOptionSchemaChange(\n index: number,\n updated: ObjectJsonSchema,\n ): void {\n const newOptions = [...this.options()];\n newOptions[index] = updated;\n this.commitOptions(newOptions);\n }\n\n private applyDescription(index: number, raw: string): void {\n const description = raw === '' ? undefined : raw;\n const opt = this.options()[index];\n let updated: JsonSchema;\n if (isBooleanSchema(opt)) {\n updated = description !== undefined ? { description } : opt;\n } else {\n const base = { ...opt };\n if (description !== undefined) {\n base.description = description;\n } else {\n delete base.description;\n }\n updated = base;\n }\n const newOptions = [...this.options()];\n newOptions[index] = updated;\n this.commitOptions(newOptions);\n }\n\n private commitOptions(newOptions: readonly JsonSchema[]): void {\n const schema = this.schema();\n const base = isBooleanSchema(schema) ? {} : schema;\n const combinator = this.combinator();\n const {\n [combinator]: _old,\n type: _type,\n ...rest\n } = base as ObjectJsonSchema &\n Record<CombinatorKind, JsonSchema[] | undefined>;\n this.schemaChange.emit({ ...rest, [combinator]: [...newOptions] });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\n\nimport { cn } from '../../internal/cn';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n isBooleanSchema,\n withObjectSchema,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport type { EnumChangeContext } from '../schema-editor-internal/type-editor.component';\nimport { ButtonDirective } from '../ui/button.directive';\nimport { InputDirective } from '../ui/input.directive';\nimport { LabelDirective } from '../ui/label.directive';\n\ntype NumberConstraint =\n | 'minimum'\n | 'maximum'\n | 'exclusiveMinimum'\n | 'exclusiveMaximum'\n | 'multipleOf'\n | 'enum';\n\nlet nextNumberEditorId = 0;\n\n@Component({\n selector: 'lib-jsonjoy-number-editor',\n standalone: true,\n imports: [ButtonDirective, InputDirective, LabelDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div class=\"space-y-4\">\n @if (readOnly() && !hasConstraint()) {\n <p class=\"text-sm text-muted-foreground italic\">\n {{ t().numberNoConstraint }}\n </p>\n }\n\n @if (!readOnly() || hasConstraint()) {\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div class=\"space-y-0 md:col-span-2\">\n @if (minMaxError()) {\n <div class=\"text-xs text-destructive italic\">\n {{ minMaxError() }}\n </div>\n }\n @if (redundantMinError()) {\n <div class=\"text-xs text-destructive italic\">\n {{ redundantMinError() }}\n </div>\n }\n @if (redundantMaxError()) {\n <div class=\"text-xs text-destructive italic\">\n {{ redundantMaxError() }}\n </div>\n }\n @if (enumError()) {\n <div class=\"text-xs text-destructive italic\">\n {{ enumError() }}\n </div>\n }\n </div>\n\n @if (!readOnly() || minimum() !== undefined) {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"minimumId\"\n [class.text-destructive]=\"\n minimum() !== undefined &&\n (!!minMaxError() || !!redundantMinError())\n \"\n >\n {{ t().numberMinimumLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"minimumId\"\n type=\"number\"\n [value]=\"minimum() ?? ''\"\n [disabled]=\"readOnly()\"\n [step]=\"stepAttr\"\n [placeholder]=\"t().numberMinimumPlaceholder\"\n [class]=\"boundClasses('minimum')\"\n (input)=\"onBoundInput('minimum', $event)\"\n />\n </div>\n }\n\n @if (!readOnly() || maximum() !== undefined) {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"maximumId\"\n [class.text-destructive]=\"\n maximum() !== undefined &&\n (!!minMaxError() || !!redundantMaxError())\n \"\n >\n {{ t().numberMaximumLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"maximumId\"\n type=\"number\"\n [value]=\"maximum() ?? ''\"\n [disabled]=\"readOnly()\"\n [step]=\"stepAttr\"\n [placeholder]=\"t().numberMaximumPlaceholder\"\n [class]=\"boundClasses('maximum')\"\n (input)=\"onBoundInput('maximum', $event)\"\n />\n </div>\n }\n </div>\n }\n\n @if (\n !readOnly() ||\n exclusiveMinimum() !== undefined ||\n exclusiveMaximum() !== undefined\n ) {\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n @if (!readOnly() || exclusiveMinimum() !== undefined) {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"exclusiveMinimumId\"\n [class.text-destructive]=\"\n exclusiveMinimum() !== undefined &&\n (!!minMaxError() || !!redundantMinError())\n \"\n >\n {{ t().numberExclusiveMinimumLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"exclusiveMinimumId\"\n type=\"number\"\n [value]=\"exclusiveMinimum() ?? ''\"\n [disabled]=\"readOnly()\"\n [step]=\"stepAttr\"\n [placeholder]=\"t().numberExclusiveMinimumPlaceholder\"\n [class]=\"boundClasses('exclusiveMinimum')\"\n (input)=\"onBoundInput('exclusiveMinimum', $event)\"\n />\n </div>\n }\n\n @if (!readOnly() || exclusiveMaximum() !== undefined) {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"exclusiveMaximumId\"\n [class.text-destructive]=\"\n exclusiveMaximum() !== undefined &&\n (!!minMaxError() || !!redundantMaxError())\n \"\n >\n {{ t().numberExclusiveMaximumLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"exclusiveMaximumId\"\n type=\"number\"\n [value]=\"exclusiveMaximum() ?? ''\"\n [disabled]=\"readOnly()\"\n [step]=\"stepAttr\"\n [placeholder]=\"t().numberExclusiveMaximumPlaceholder\"\n [class]=\"boundClasses('exclusiveMaximum')\"\n (input)=\"onBoundInput('exclusiveMaximum', $event)\"\n />\n </div>\n }\n </div>\n }\n\n @if (!readOnly() || multipleOf() !== undefined) {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"multipleOfId\"\n [class.text-destructive]=\"!!multipleOfError()\"\n >\n {{ t().numberMultipleOfLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"multipleOfId\"\n type=\"number\"\n [value]=\"multipleOf() ?? ''\"\n [disabled]=\"readOnly()\"\n min=\"0\"\n [step]=\"stepAttr\"\n [placeholder]=\"t().numberMultipleOfPlaceholder\"\n [class]=\"multipleOfClasses()\"\n (input)=\"onBoundInput('multipleOf', $event)\"\n />\n @if (multipleOfError()) {\n <div class=\"text-xs text-destructive italic whitespace-pre-line\">\n {{ multipleOfError() }}\n </div>\n }\n </div>\n }\n\n @if (!readOnly() || enumValues().length > 0) {\n <div class=\"space-y-2 pt-2 border-t border-border/40\">\n <label libJsonjoyLabel [class.text-destructive]=\"!!enumError()\">\n {{ t().numberAllowedValuesEnumLabel }}\n </label>\n\n <div class=\"flex flex-wrap gap-2 mb-4\">\n @if (enumValues().length > 0) {\n @for (value of enumValues(); track value) {\n <div\n class=\"flex items-center bg-muted/40 border rounded-md px-2 py-1 text-xs\"\n >\n <span class=\"mr-1\">{{ value }}</span>\n <button\n type=\"button\"\n class=\"text-muted-foreground hover:text-destructive\"\n (click)=\"removeEnumValue(value)\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n </div>\n }\n } @else {\n <p class=\"text-xs text-muted-foreground italic\">\n {{ t().numberAllowedValuesEnumNone }}\n </p>\n }\n </div>\n\n <div class=\"flex items-center gap-2\">\n <input\n libJsonjoyInput\n type=\"number\"\n [value]=\"enumDraft()\"\n [step]=\"stepAttr\"\n [placeholder]=\"t().numberAllowedValuesEnumAddPlaceholder\"\n class=\"h-8 text-xs flex-1\"\n (input)=\"onEnumDraftInput($event)\"\n (keydown.enter)=\"addEnumValue()\"\n />\n <button\n libJsonjoyButton\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n (click)=\"addEnumValue()\"\n >\n {{ t().numberAllowedValuesEnumAddLabel }}\n </button>\n </div>\n </div>\n }\n </div>\n `,\n})\nexport class NumberEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly schemaKey = input<string | undefined>(undefined);\n readonly depth = input<number>(0);\n readonly integer = input<boolean>(false);\n\n readonly schemaChange = output<ObjectJsonSchema>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n private readonly idSeq = ++nextNumberEditorId;\n protected readonly minimumId = `jjne-${this.idSeq}-min`;\n protected readonly maximumId = `jjne-${this.idSeq}-max`;\n protected readonly exclusiveMinimumId = `jjne-${this.idSeq}-emin`;\n protected readonly exclusiveMaximumId = `jjne-${this.idSeq}-emax`;\n protected readonly multipleOfId = `jjne-${this.idSeq}-mof`;\n\n protected readonly enumDraft = signal('');\n\n protected readonly minimum = computed(() =>\n withObjectSchema(this.schema(), (s) => s.minimum, undefined),\n );\n protected readonly maximum = computed(() =>\n withObjectSchema(this.schema(), (s) => s.maximum, undefined),\n );\n protected readonly exclusiveMinimum = computed(() =>\n withObjectSchema(this.schema(), (s) => s.exclusiveMinimum, undefined),\n );\n protected readonly exclusiveMaximum = computed(() =>\n withObjectSchema(this.schema(), (s) => s.exclusiveMaximum, undefined),\n );\n protected readonly multipleOf = computed(() =>\n withObjectSchema(this.schema(), (s) => s.multipleOf, undefined),\n );\n protected readonly enumValues = computed<readonly number[]>(() =>\n withObjectSchema(\n this.schema(),\n (s) => (s.enum as number[] | undefined) ?? [],\n [],\n ),\n );\n\n protected readonly hasConstraint = computed(\n () =>\n this.minimum() !== undefined ||\n this.maximum() !== undefined ||\n this.exclusiveMinimum() !== undefined ||\n this.exclusiveMaximum() !== undefined ||\n this.multipleOf() !== undefined ||\n this.enumValues().length > 0,\n );\n\n protected readonly minMaxError = computed(() => this.errorAt('minMax'));\n protected readonly redundantMinError = computed(() =>\n this.errorAt('redundantMinimum'),\n );\n protected readonly redundantMaxError = computed(() =>\n this.errorAt('redundantMaximum'),\n );\n protected readonly enumError = computed(() => this.errorAt('enum'));\n protected readonly multipleOfError = computed(() =>\n this.errorAt('multipleOf'),\n );\n\n protected get stepAttr(): string {\n return this.integer() ? '1' : 'any';\n }\n\n protected readonly multipleOfClasses = computed(() =>\n cn('h-8', !!this.multipleOfError() && 'border-destructive'),\n );\n\n protected boundClasses(\n field: 'minimum' | 'maximum' | 'exclusiveMinimum' | 'exclusiveMaximum',\n ): string {\n const errored =\n field === 'minimum'\n ? this.minimum() !== undefined &&\n (!!this.minMaxError() || !!this.redundantMinError())\n : field === 'maximum'\n ? this.maximum() !== undefined &&\n (!!this.minMaxError() || !!this.redundantMaxError())\n : field === 'exclusiveMinimum'\n ? this.exclusiveMinimum() !== undefined &&\n (!!this.minMaxError() || !!this.redundantMinError())\n : this.exclusiveMaximum() !== undefined &&\n (!!this.minMaxError() || !!this.redundantMaxError());\n return cn('h-8', errored && 'border-destructive');\n }\n\n protected onBoundInput(\n field:\n | 'minimum'\n | 'maximum'\n | 'exclusiveMinimum'\n | 'exclusiveMaximum'\n | 'multipleOf',\n event: Event,\n ): void {\n const raw = (event.target as HTMLInputElement).value;\n const value = raw === '' ? undefined : Number(raw);\n this.applyValidationChange(field, value);\n }\n\n protected onEnumDraftInput(event: Event): void {\n this.enumDraft.set((event.target as HTMLInputElement).value);\n }\n\n protected addEnumValue(): void {\n const draft = this.enumDraft().trim();\n if (!draft) return;\n const parsed = Number(draft);\n if (Number.isNaN(parsed)) return;\n const value = this.integer() ? Math.floor(parsed) : parsed;\n const current = this.enumValues();\n if (!current.includes(value)) {\n const next = [...current, value];\n this.applyEnumValues(next);\n this.addEnum.emit({\n value,\n index: current.length,\n schemaKey: this.schemaKey(),\n });\n }\n this.enumDraft.set('');\n }\n\n protected removeEnumValue(value: number): void {\n const current = this.enumValues();\n const index = current.indexOf(value);\n if (index < 0) return;\n const next = current.filter((_, i) => i !== index);\n this.applyEnumValues(next);\n this.deleteEnum.emit({ value, index, schemaKey: this.schemaKey() });\n }\n\n private applyEnumValues(values: readonly number[]): void {\n if (values.length === 0) {\n this.applyValidationChange('enum', undefined);\n } else {\n this.applyValidationChange('enum', [...values]);\n }\n }\n\n private applyValidationChange(\n property: NumberConstraint,\n value: unknown,\n ): void {\n const current = this.schema();\n const type: 'integer' | 'number' = this.integer() ? 'integer' : 'number';\n const next: ObjectJsonSchema = isBooleanSchema(current)\n ? { type }\n : { ...current, type };\n\n if (value === undefined) {\n delete next[property];\n } else {\n (next as Record<string, unknown>)[property] = value;\n }\n\n this.schemaChange.emit(next);\n }\n\n private errorAt(pathKey: string): string | undefined {\n const node = this.validationNode();\n if (!node || node.validation.success) return undefined;\n return node.validation.errors?.find((err) => err.path[0] === pathKey)\n ?.message;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n input,\n output,\n} from '@angular/core';\n\nimport type { JsonSchema, ObjectJsonSchema } from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport { SchemaPropertyEditorComponent } from './schema-property-editor.component';\nimport type { EnumChangeContext } from './type-editor.component';\n\ninterface PropertyRow {\n readonly name: string;\n readonly schema: JsonSchema;\n readonly required: boolean;\n}\n\nfunction joinSchemaKey(prefix: string | undefined, name: string): string {\n return prefix ? `${prefix}.${name}` : name;\n}\n\n@Component({\n selector: 'lib-jsonjoy-schema-property-rows',\n standalone: true,\n imports: [forwardRef(() => SchemaPropertyEditorComponent)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy contents' },\n template: `\n @for (property of properties(); track property.name) {\n <lib-jsonjoy-schema-property-editor\n mode=\"property\"\n [name]=\"property.name\"\n [schema]=\"property.schema\"\n [schemaKey]=\"schemaKeyFor(property.name)\"\n [required]=\"property.required\"\n [readOnly]=\"readOnly()\"\n [autoFocus]=\"autoFocus()\"\n [depth]=\"depth()\"\n [validationNode]=\"validationChildren()?.[property.name]\"\n (delete)=\"deleteProperty.emit(property.name)\"\n (nameChange)=\"\n nameChange.emit({ oldName: property.name, newName: $event })\n \"\n (requiredChange)=\"\n requiredChange.emit({ name: property.name, required: $event })\n \"\n (schemaChange)=\"\n schemaChange.emit({ name: property.name, schema: $event })\n \"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @for (property of patternProperties(); track 'pattern:' + property.name) {\n <lib-jsonjoy-schema-property-editor\n mode=\"pattern\"\n [name]=\"property.name\"\n [schema]=\"property.schema\"\n [schemaKey]=\"schemaKeyFor(property.name)\"\n [readOnly]=\"readOnly()\"\n [autoFocus]=\"autoFocus()\"\n [depth]=\"depth()\"\n [validationNode]=\"validationChildren()?.['pattern:' + property.name]\"\n (delete)=\"deletePatternProperty.emit(property.name)\"\n (nameChange)=\"\n patternNameChange.emit({ oldName: property.name, newName: $event })\n \"\n (schemaChange)=\"\n patternSchemaChange.emit({ name: property.name, schema: $event })\n \"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n `,\n})\nexport class SchemaPropertyRowsComponent {\n readonly properties = input.required<readonly PropertyRow[]>();\n readonly patternProperties = input.required<readonly PropertyRow[]>();\n readonly readOnly = input.required<boolean>();\n readonly autoFocus = input<boolean>(true);\n readonly depth = input<number>(0);\n readonly schemaKeyPrefix = input<string | undefined>(undefined);\n readonly validationChildren = input<\n Record<string, ValidationTreeNode> | undefined\n >(undefined);\n\n readonly deleteProperty = output<string>();\n readonly deletePatternProperty = output<string>();\n readonly nameChange = output<{ oldName: string; newName: string }>();\n readonly patternNameChange = output<{ oldName: string; newName: string }>();\n readonly requiredChange = output<{ name: string; required: boolean }>();\n readonly schemaChange = output<{ name: string; schema: ObjectJsonSchema }>();\n readonly patternSchemaChange = output<{\n name: string;\n schema: ObjectJsonSchema;\n }>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected schemaKeyFor(name: string): string {\n return joinSchemaKey(this.schemaKeyPrefix(), name);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n output,\n} from '@angular/core';\n\nimport {\n createFieldSchema,\n getSchemaPatternProperties,\n getSchemaProperties,\n removeObjectPatternProperty,\n removeObjectProperty,\n renameObjectPatternProperty,\n renameObjectProperty,\n updateObjectPatternProperty,\n updateObjectProperty,\n updatePropertyRequired,\n} from '../../internal/schema-editor';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type NewField,\n type ObjectJsonSchema,\n isBooleanSchema,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport { AddFieldButtonComponent } from '../schema-editor-internal/add-field-button.component';\nimport { SchemaPropertyRowsComponent } from '../schema-editor-internal/schema-property-rows.component';\nimport type { EnumChangeContext } from '../schema-editor-internal/type-editor.component';\n\n@Component({\n selector: 'lib-jsonjoy-object-editor',\n standalone: true,\n imports: [\n AddFieldButtonComponent,\n forwardRef(() => SchemaPropertyRowsComponent),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div class=\"space-y-4\">\n @if (properties().length > 0 || patternProperties().length > 0) {\n <div class=\"space-y-2\">\n <lib-jsonjoy-schema-property-rows\n [properties]=\"properties()\"\n [patternProperties]=\"patternProperties()\"\n [readOnly]=\"readOnly()\"\n [depth]=\"depth()\"\n [schemaKeyPrefix]=\"schemaKey()\"\n [validationChildren]=\"validationNode()?.children\"\n (deleteProperty)=\"onDeleteProperty($event)\"\n (deletePatternProperty)=\"onDeletePatternProperty($event)\"\n (nameChange)=\"onPropertyNameChange($event)\"\n (patternNameChange)=\"onPatternPropertyNameChange($event)\"\n (requiredChange)=\"onPropertyRequiredChange($event)\"\n (schemaChange)=\"onPropertySchemaChange($event)\"\n (patternSchemaChange)=\"onPatternPropertySchemaChange($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n </div>\n } @else {\n <div\n class=\"text-sm text-muted-foreground italic p-2 text-center border rounded-md\"\n >\n {{ t().objectPropertiesNone }}\n </div>\n }\n\n @if (!readOnly()) {\n <div class=\"mt-4 flex flex-row gap-x-4\">\n <lib-jsonjoy-add-field-button\n variant=\"secondary\"\n (addField)=\"onAddProperty($event)\"\n (addPatternField)=\"onAddPatternProperty($event)\"\n />\n <button\n type=\"button\"\n [class]=\"additionalPropertiesClasses()\"\n (click)=\"onAdditionalPropertiesToggle()\"\n >\n {{ additionalPropertiesLabel() }}\n </button>\n </div>\n }\n </div>\n `,\n})\nexport class ObjectEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly schemaKey = input<string | undefined>(undefined);\n readonly depth = input<number>(0);\n\n readonly schemaChange = output<ObjectJsonSchema>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n protected readonly properties = computed(() =>\n getSchemaProperties(this.schema()),\n );\n\n protected readonly patternProperties = computed(() =>\n getSchemaPatternProperties(this.schema()),\n );\n\n private readonly normalized = computed<ObjectJsonSchema>(() => {\n const schema = this.schema();\n if (isBooleanSchema(schema)) {\n return { type: 'object', properties: {} };\n }\n return { ...schema, type: 'object', properties: schema.properties ?? {} };\n });\n\n private readonly additionalPropertiesForbidden = computed(\n () => this.normalized().additionalProperties === false,\n );\n\n protected readonly additionalPropertiesLabel = computed(() =>\n this.additionalPropertiesForbidden()\n ? this.t().additionalPropertiesForbid\n : this.t().additionalPropertiesAllow,\n );\n\n protected readonly additionalPropertiesClasses = computed(() => {\n const base = 'text-xs px-3 py-1.5 rounded-md font-medium transition-colors';\n const variant = this.additionalPropertiesForbidden()\n ? 'bg-amber-500/10 text-amber-600 hover:bg-amber-500/20'\n : 'bg-lime-500/10 text-lime-600 hover:bg-lime-500/20';\n return `${base} ${variant}`;\n });\n\n protected onAddProperty(field: NewField): void {\n const fieldSchema = createFieldSchema(field);\n let next = updateObjectProperty(this.normalized(), field.name, fieldSchema);\n if (field.required) {\n next = updatePropertyRequired(next, field.name, true);\n }\n this.schemaChange.emit(next);\n }\n\n protected onAddPatternProperty(field: NewField): void {\n const next = updateObjectPatternProperty(\n this.normalized(),\n field.name,\n createFieldSchema(field),\n );\n this.schemaChange.emit(next);\n }\n\n protected onDeleteProperty(name: string): void {\n this.schemaChange.emit(removeObjectProperty(this.normalized(), name));\n }\n\n protected onDeletePatternProperty(name: string): void {\n this.schemaChange.emit(\n removeObjectPatternProperty(this.normalized(), name),\n );\n }\n\n protected onPropertyNameChange(change: {\n oldName: string;\n newName: string;\n }): void {\n if (change.oldName === change.newName) return;\n this.schemaChange.emit(\n renameObjectProperty(this.normalized(), change.oldName, change.newName),\n );\n }\n\n protected onPatternPropertyNameChange(change: {\n oldName: string;\n newName: string;\n }): void {\n if (change.oldName === change.newName) return;\n this.schemaChange.emit(\n renameObjectPatternProperty(\n this.normalized(),\n change.oldName,\n change.newName,\n ),\n );\n }\n\n protected onPropertyRequiredChange(change: {\n name: string;\n required: boolean;\n }): void {\n this.schemaChange.emit(\n updatePropertyRequired(this.normalized(), change.name, change.required),\n );\n }\n\n protected onPropertySchemaChange(change: {\n name: string;\n schema: ObjectJsonSchema;\n }): void {\n this.schemaChange.emit(\n updateObjectProperty(this.normalized(), change.name, change.schema),\n );\n }\n\n protected onPatternPropertySchemaChange(change: {\n name: string;\n schema: ObjectJsonSchema;\n }): void {\n this.schemaChange.emit(\n updateObjectPatternProperty(\n this.normalized(),\n change.name,\n change.schema,\n ),\n );\n }\n\n protected onAdditionalPropertiesToggle(): void {\n const { additionalProperties, ...rest } = this.normalized();\n this.schemaChange.emit(\n additionalProperties !== false\n ? { ...rest, additionalProperties: false }\n : rest,\n );\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n type Signal,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\n\nimport type { RefSuggestion } from '../../interfaces/ref-suggestion.interface';\nimport type { LocalDefinition } from '../../internal/schema-editor';\nimport { LocalDefinitionsContextService } from '../../services/local-definitions.service';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport { SCHEMA_BUILDER_REF_SUGGESTIONS } from '../../tokens/ref-suggestions.token';\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n asRefSchema,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport { InputDirective } from '../ui/input.directive';\nimport { LabelDirective } from '../ui/label.directive';\n\nlet nextRefEditorId = 0;\n\n@Component({\n selector: 'lib-jsonjoy-ref-editor',\n standalone: true,\n imports: [InputDirective, LabelDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div class=\"space-y-4\">\n <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 items-start\">\n <div class=\"space-y-2 md:col-span-2\">\n <label libJsonjoyLabel [attr.for]=\"urlId\">\n {{ t().refUrlLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"urlId\"\n type=\"url\"\n [value]=\"urlValue()\"\n [disabled]=\"readOnly()\"\n [placeholder]=\"readOnly() ? '' : t().refUrlPlaceholder\"\n (input)=\"onUrlInput($event)\"\n />\n </div>\n\n <div class=\"space-y-2\">\n <label libJsonjoyLabel [attr.for]=\"pointerId\">\n {{ t().refPointerLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"pointerId\"\n type=\"text\"\n [value]=\"pointerValue()\"\n [disabled]=\"readOnly()\"\n [placeholder]=\"readOnly() ? '' : t().refPointerPlaceholder\"\n (input)=\"onPointerInput($event)\"\n />\n </div>\n </div>\n\n @if (!readOnly() && localDefinitions().length > 0) {\n <div class=\"space-y-2\">\n <label libJsonjoyLabel>{{ t().refLocalDefinitionsLabel }}</label>\n <ul\n class=\"flex flex-col gap-1 max-h-48 overflow-y-auto rounded-md border border-border p-1\"\n >\n @for (def of localDefinitions(); track def.ref) {\n <li>\n <button\n type=\"button\"\n class=\"w-full text-left px-2 py-1.5 rounded-sm hover:bg-secondary/50 transition-colors\"\n (click)=\"pickLocalDefinition(def)\"\n >\n <span class=\"block text-sm font-medium\">{{ def.name }}</span>\n <span\n class=\"block text-xs text-muted-foreground font-mono truncate\"\n >{{ def.ref }}</span\n >\n </button>\n </li>\n }\n </ul>\n </div>\n }\n\n @if (!readOnly() && hasSuggestionsProvider) {\n <div class=\"space-y-2\">\n <label libJsonjoyLabel>{{ t().refSuggestionsLabel }}</label>\n @if (filteredSuggestions().length === 0) {\n <p class=\"text-xs text-muted-foreground italic\">\n {{ t().refNoSuggestions }}\n </p>\n } @else {\n <ul\n class=\"flex flex-col gap-1 max-h-48 overflow-y-auto rounded-md border border-border p-1\"\n >\n @for (s of filteredSuggestions(); track s.id) {\n <li>\n <button\n type=\"button\"\n class=\"w-full text-left px-2 py-1.5 rounded-sm hover:bg-secondary/50 transition-colors\"\n (click)=\"pickSuggestion(s)\"\n >\n <span class=\"block text-sm font-medium\">{{ s.label }}</span>\n @if (s.description) {\n <span\n class=\"block text-xs text-muted-foreground truncate\"\n >{{ s.description }}</span\n >\n }\n <span\n class=\"block text-xs text-muted-foreground font-mono truncate\"\n >{{ s.url }}</span\n >\n </button>\n </li>\n }\n </ul>\n }\n </div>\n }\n </div>\n `,\n})\nexport class RefEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly schemaKey = input<string | undefined>(undefined);\n readonly depth = input<number>(0);\n\n readonly schemaChange = output<ObjectJsonSchema>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n private readonly injectedSuggestions = inject(\n SCHEMA_BUILDER_REF_SUGGESTIONS,\n {\n optional: true,\n },\n );\n private readonly suggestionsSignal: Signal<readonly RefSuggestion[]> =\n this.injectedSuggestions ?? computed(() => [] as readonly RefSuggestion[]);\n\n /** The host registered a suggestions provider; gates the suggestions list. */\n protected readonly hasSuggestionsProvider = this.injectedSuggestions !== null;\n\n private readonly localDefinitionsCtx = inject(\n LocalDefinitionsContextService,\n { optional: true },\n );\n protected readonly localDefinitions = computed<readonly LocalDefinition[]>(\n () => this.localDefinitionsCtx?.definitions() ?? [],\n );\n\n private readonly id = ++nextRefEditorId;\n protected readonly urlId = `jsonjoy-ref-url-${this.id}`;\n protected readonly pointerId = `jsonjoy-ref-pointer-${this.id}`;\n\n private readonly currentRef = computed(() => asRefSchema(this.schema()).$ref);\n\n // Local editable state for the two inputs. Mirrors the bound `$ref` only when\n // it changes externally; user edits update these directly so the controlled\n // inputs never fight the round-tripped value (which would otherwise re-split\n // on '#' and concatenate the ref on every keystroke).\n protected readonly urlValue = signal('');\n protected readonly pointerValue = signal('');\n\n /** The last `$ref` this component emitted, to distinguish self vs external\n * changes to `currentRef()` inside the sync effect. */\n private lastEmitted: string | null = null;\n\n constructor() {\n effect(() => {\n const ref = this.currentRef();\n if (ref === this.lastEmitted) return;\n const { url, pointer } = splitRef(ref);\n untracked(() => {\n this.urlValue.set(url);\n this.pointerValue.set(pointer);\n });\n });\n }\n\n protected readonly filteredSuggestions = computed(() => {\n const all = this.suggestionsSignal();\n const query = this.urlValue().toLowerCase().trim();\n if (!query) return all;\n return all.filter(\n (s) =>\n s.url.toLowerCase().includes(query) ||\n s.label.toLowerCase().includes(query),\n );\n });\n\n protected onUrlInput(event: Event): void {\n this.urlValue.set((event.target as HTMLInputElement).value);\n this.emitRef();\n }\n\n protected onPointerInput(event: Event): void {\n this.pointerValue.set((event.target as HTMLInputElement).value);\n this.emitRef();\n }\n\n protected pickSuggestion(suggestion: RefSuggestion): void {\n this.urlValue.set(suggestion.url);\n this.emitRef();\n }\n\n protected pickLocalDefinition(def: LocalDefinition): void {\n // A local def ref is a pure fragment (no URL part), e.g. #/$defs/Address.\n this.urlValue.set('');\n this.pointerValue.set(def.ref.replace(/^#/, ''));\n this.emitRef();\n }\n\n private emitRef(): void {\n const url = this.urlValue();\n const pointer = this.pointerValue().replace(/^#/, '');\n const fullRef = pointer ? `${url}#${pointer}` : url;\n this.lastEmitted = fullRef;\n this.schemaChange.emit({ $ref: fullRef });\n }\n}\n\nfunction splitRef(ref: string): { url: string; pointer: string } {\n const hashIndex = ref.indexOf('#');\n if (hashIndex < 0) return { url: ref, pointer: '' };\n return {\n url: ref.slice(0, hashIndex),\n pointer: ref.slice(hashIndex + 1),\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\n\nimport { cn } from '../../internal/cn';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n isBooleanSchema,\n withObjectSchema,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport type { EnumChangeContext } from '../schema-editor-internal/type-editor.component';\nimport { ButtonDirective } from '../ui/button.directive';\nimport { InputDirective } from '../ui/input.directive';\nimport { LabelDirective } from '../ui/label.directive';\n\ntype StringValidationProperty =\n | 'enum'\n | 'minLength'\n | 'maxLength'\n | 'pattern'\n | 'format';\n\nlet nextStringEditorId = 0;\n\nconst STRING_FORMATS = [\n 'none',\n 'date-time',\n 'date',\n 'time',\n 'email',\n 'uri',\n 'uuid',\n 'hostname',\n 'ipv4',\n 'ipv6',\n] as const;\n\n@Component({\n selector: 'lib-jsonjoy-string-editor',\n standalone: true,\n imports: [ButtonDirective, InputDirective, LabelDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div class=\"space-y-4\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 items-start\">\n @if (readOnly() && !needsDetail()) {\n <p class=\"text-sm text-muted-foreground italic\">\n {{ t().stringNoConstraint }}\n </p>\n }\n\n @if (!readOnly() || minLengthValue() !== '') {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"minLengthId\"\n [class.text-destructive]=\"!!minMaxError() || !!minLengthError()\"\n >\n {{ t().stringMinimumLengthLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"minLengthId\"\n type=\"number\"\n min=\"0\"\n [value]=\"minLengthValue()\"\n [disabled]=\"readOnly()\"\n [placeholder]=\"t().stringMinimumLengthPlaceholder\"\n [class]=\"minMaxInputClasses()\"\n (input)=\"onLengthInput('minLength', $event)\"\n />\n </div>\n }\n\n @if (!readOnly() || maxLengthValue() !== '') {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"maxLengthId\"\n [class.text-destructive]=\"!!minMaxError() || !!maxLengthError()\"\n >\n {{ t().stringMaximumLengthLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"maxLengthId\"\n type=\"number\"\n min=\"0\"\n [value]=\"maxLengthValue()\"\n [disabled]=\"readOnly()\"\n [placeholder]=\"t().stringMaximumLengthPlaceholder\"\n [class]=\"maxMinInputClasses()\"\n (input)=\"onLengthInput('maxLength', $event)\"\n />\n </div>\n }\n\n @if (lengthErrorText()) {\n <div\n class=\"text-xs text-destructive italic md:col-span-2 whitespace-pre-line\"\n >\n {{ lengthErrorText() }}\n </div>\n }\n </div>\n\n @if (!readOnly() || patternValue() !== '') {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"patternId\"\n [class.text-destructive]=\"!!patternError()\"\n >\n {{ t().stringPatternLabel }}\n </label>\n <input\n libJsonjoyInput\n [id]=\"patternId\"\n type=\"text\"\n [value]=\"patternValue()\"\n [disabled]=\"readOnly()\"\n [placeholder]=\"t().stringPatternPlaceholder\"\n class=\"h-8\"\n (input)=\"onPatternInput($event)\"\n />\n </div>\n }\n\n @if (!readOnly() || formatValue() !== 'none') {\n <div class=\"space-y-2\">\n <label\n libJsonjoyLabel\n [attr.for]=\"formatId\"\n [class.text-destructive]=\"!!formatError()\"\n >\n {{ t().stringFormatLabel }}\n </label>\n <select\n [id]=\"formatId\"\n class=\"h-8 w-full rounded-md border border-input bg-background px-3 py-1 text-sm ring-offset-background focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n [disabled]=\"readOnly()\"\n [value]=\"formatValue()\"\n (change)=\"onFormatChange($event)\"\n >\n <option value=\"none\">{{ t().stringFormatNone }}</option>\n <option value=\"date-time\">{{ t().stringFormatDateTime }}</option>\n <option value=\"date\">{{ t().stringFormatDate }}</option>\n <option value=\"time\">{{ t().stringFormatTime }}</option>\n <option value=\"email\">{{ t().stringFormatEmail }}</option>\n <option value=\"uri\">{{ t().stringFormatUri }}</option>\n <option value=\"uuid\">{{ t().stringFormatUuid }}</option>\n <option value=\"hostname\">{{ t().stringFormatHostname }}</option>\n <option value=\"ipv4\">{{ t().stringFormatIpv4 }}</option>\n <option value=\"ipv6\">{{ t().stringFormatIpv6 }}</option>\n </select>\n </div>\n }\n\n @if (!readOnly() || enumValues().length > 0) {\n <div class=\"space-y-2 pt-2 border-t border-border/40\">\n <label libJsonjoyLabel>{{ t().stringAllowedValuesEnumLabel }}</label>\n\n <div class=\"flex flex-wrap gap-2 mb-4\">\n @if (enumValues().length > 0) {\n @for (value of enumValues(); track value) {\n <div\n class=\"flex items-center bg-muted/40 border rounded-md px-2 py-1 text-xs\"\n >\n <span class=\"mr-1\">{{ value }}</span>\n <button\n type=\"button\"\n class=\"text-muted-foreground hover:text-destructive\"\n (click)=\"removeEnumValue(value)\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n </div>\n }\n } @else {\n <p class=\"text-xs text-muted-foreground italic\">\n {{ t().stringAllowedValuesEnumNone }}\n </p>\n }\n </div>\n\n <div class=\"flex items-center gap-2\">\n <input\n libJsonjoyInput\n type=\"text\"\n [value]=\"enumDraft()\"\n [placeholder]=\"t().stringAllowedValuesEnumAddPlaceholder\"\n class=\"h-8 text-xs flex-1\"\n (input)=\"onEnumDraftInput($event)\"\n (keydown.enter)=\"addEnumValue()\"\n />\n <button\n libJsonjoyButton\n variant=\"secondary\"\n size=\"sm\"\n type=\"button\"\n (click)=\"addEnumValue()\"\n >\n {{ t().stringAllowedValuesEnumAddLabel }}\n </button>\n </div>\n </div>\n }\n </div>\n `,\n})\nexport class StringEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly schemaKey = input<string | undefined>(undefined);\n readonly depth = input<number>(0);\n\n readonly schemaChange = output<ObjectJsonSchema>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n private readonly idSeq = ++nextStringEditorId;\n protected readonly minLengthId = `jjse-${this.idSeq}-min`;\n protected readonly maxLengthId = `jjse-${this.idSeq}-max`;\n protected readonly patternId = `jjse-${this.idSeq}-pattern`;\n protected readonly formatId = `jjse-${this.idSeq}-format`;\n\n protected readonly enumDraft = signal('');\n\n protected readonly minLength = computed(() =>\n withObjectSchema(this.schema(), (s) => s.minLength, undefined),\n );\n protected readonly maxLength = computed(() =>\n withObjectSchema(this.schema(), (s) => s.maxLength, undefined),\n );\n protected readonly pattern = computed(() =>\n withObjectSchema(this.schema(), (s) => s.pattern, undefined),\n );\n protected readonly format = computed(() =>\n withObjectSchema(this.schema(), (s) => s.format, undefined),\n );\n protected readonly enumValues = computed<readonly string[]>(() =>\n withObjectSchema(\n this.schema(),\n (s) => (s.enum as string[] | undefined) ?? [],\n [],\n ),\n );\n\n protected readonly minLengthValue = computed(() => this.minLength() ?? '');\n protected readonly maxLengthValue = computed(() => this.maxLength() ?? '');\n protected readonly patternValue = computed(() => this.pattern() ?? '');\n protected readonly formatValue = computed(() => this.format() || 'none');\n\n protected readonly needsDetail = computed(() => {\n return (\n !this.readOnly() ||\n this.minLengthValue() !== '' ||\n this.maxLengthValue() !== '' ||\n this.patternValue() !== '' ||\n this.formatValue() !== 'none' ||\n this.enumValues().length > 0\n );\n });\n\n protected readonly minMaxError = computed(() => this.errorAt('length'));\n protected readonly minLengthError = computed(() => this.errorAt('minLength'));\n protected readonly maxLengthError = computed(() => this.errorAt('maxLength'));\n protected readonly patternError = computed(() => this.errorAt('pattern'));\n protected readonly formatError = computed(() => this.errorAt('format'));\n\n protected readonly lengthErrorText = computed(() => {\n const parts = [\n this.minMaxError(),\n this.minLengthError() ?? this.maxLengthError(),\n ].filter(Boolean);\n return parts.length > 0 ? parts.join('\\n') : '';\n });\n\n protected readonly minMaxInputClasses = computed(() =>\n cn(\n 'h-8',\n (!!this.minMaxError() || !!this.minLengthError()) && 'border-destructive',\n ),\n );\n protected readonly maxMinInputClasses = computed(() =>\n cn(\n 'h-8',\n (!!this.minMaxError() || !!this.maxLengthError()) && 'border-destructive',\n ),\n );\n\n protected onLengthInput(\n property: 'minLength' | 'maxLength',\n event: Event,\n ): void {\n const raw = (event.target as HTMLInputElement).value;\n const value = raw === '' ? undefined : Number(raw);\n this.applyValidationChange(property, value);\n }\n\n protected onPatternInput(event: Event): void {\n const raw = (event.target as HTMLInputElement).value;\n this.applyValidationChange('pattern', raw === '' ? undefined : raw);\n }\n\n protected onFormatChange(event: Event): void {\n const selected = (event.target as HTMLSelectElement).value;\n const next = STRING_FORMATS.find((f) => f === selected) ?? 'none';\n this.applyValidationChange('format', next === 'none' ? undefined : next);\n }\n\n protected onEnumDraftInput(event: Event): void {\n this.enumDraft.set((event.target as HTMLInputElement).value);\n }\n\n protected addEnumValue(): void {\n const trimmed = this.enumDraft().trim();\n if (!trimmed) return;\n const current = this.enumValues();\n if (!current.includes(trimmed)) {\n const addedIndex = current.length;\n this.applyEnumValues([...current, trimmed]);\n this.addEnum.emit({\n value: trimmed,\n index: addedIndex,\n schemaKey: this.schemaKey(),\n });\n }\n this.enumDraft.set('');\n }\n\n protected removeEnumValue(value: string): void {\n const current = this.enumValues();\n const index = current.indexOf(value);\n if (index < 0) return;\n const next = current.filter((_, i) => i !== index);\n this.applyEnumValues(next);\n this.deleteEnum.emit({ value, index, schemaKey: this.schemaKey() });\n }\n\n private applyValidationChange(\n property: StringValidationProperty,\n value: unknown,\n ): void {\n const current = this.schema();\n const next: ObjectJsonSchema = isBooleanSchema(current)\n ? { type: 'string' }\n : { ...current, type: 'string' };\n if (value === undefined) {\n delete next[property];\n } else {\n (next as Record<string, unknown>)[property] = value;\n }\n this.schemaChange.emit(next);\n }\n\n private applyEnumValues(values: readonly string[]): void {\n const current = this.schema();\n if (values.length > 0) {\n const base: ObjectJsonSchema = isBooleanSchema(current)\n ? { type: 'string' }\n : { ...current };\n this.schemaChange.emit({ ...base, type: 'string', enum: [...values] });\n return;\n }\n if (!isBooleanSchema(current) && 'enum' in current) {\n const { enum: _enum, ...rest } = current;\n this.schemaChange.emit(rest as ObjectJsonSchema);\n return;\n }\n const base: ObjectJsonSchema = isBooleanSchema(current)\n ? { type: 'string' }\n : { ...current };\n this.schemaChange.emit(base);\n }\n\n private errorAt(pathKey: string): string | undefined {\n const node = this.validationNode();\n if (!node || node.validation.success) return undefined;\n const errors = node.validation.errors;\n if (!errors) return undefined;\n const match = errors.find((err) => err.path[0] === pathKey);\n return match?.message;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n output,\n} from '@angular/core';\n\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n getEditorType,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport { ArrayEditorComponent } from '../type-editors/array-editor.component';\nimport { BooleanEditorComponent } from '../type-editors/boolean-editor.component';\nimport {\n CombinatorEditorComponent,\n type CombinatorKind,\n} from '../type-editors/combinator-editor.component';\nimport { NumberEditorComponent } from '../type-editors/number-editor.component';\nimport { ObjectEditorComponent } from '../type-editors/object-editor.component';\nimport { RefEditorComponent } from '../type-editors/ref-editor.component';\nimport { StringEditorComponent } from '../type-editors/string-editor.component';\n\nexport interface EnumChangeContext {\n readonly value: string | number | boolean;\n readonly index: number;\n readonly schemaKey?: string;\n}\n\n@Component({\n selector: 'lib-jsonjoy-type-editor',\n standalone: true,\n // Array/Object/Combinator editors recurse back into this component, so\n // reference them lazily via forwardRef to keep the imports array resilient\n // to module evaluation order (avoids NG0919 when a leaf editor loads first).\n imports: [\n forwardRef(() => ArrayEditorComponent),\n BooleanEditorComponent,\n forwardRef(() => CombinatorEditorComponent),\n NumberEditorComponent,\n forwardRef(() => ObjectEditorComponent),\n RefEditorComponent,\n StringEditorComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n @switch (editorType()) {\n @case ('string') {\n <lib-jsonjoy-string-editor\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('number') {\n <lib-jsonjoy-number-editor\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('integer') {\n <lib-jsonjoy-number-editor\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n [integer]=\"true\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('boolean') {\n <lib-jsonjoy-boolean-editor\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('object') {\n <lib-jsonjoy-object-editor\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('array') {\n <lib-jsonjoy-array-editor\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('anyOf') {\n <lib-jsonjoy-combinator-editor\n combinator=\"anyOf\"\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('oneOf') {\n <lib-jsonjoy-combinator-editor\n combinator=\"oneOf\"\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('allOf') {\n <lib-jsonjoy-combinator-editor\n combinator=\"allOf\"\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n }\n @case ('$ref') {\n <lib-jsonjoy-ref-editor\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey()\"\n [depth]=\"depth()\"\n (schemaChange)=\"schemaChange.emit($event)\"\n />\n }\n <!-- -->\n @case ('null') {}\n @default {\n <p class=\"text-sm text-muted-foreground italic\">\n Unsupported editor type: {{ editorType() }}\n </p>\n }\n }\n `,\n})\nexport class TypeEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly schemaKey = input<string | undefined>(undefined);\n readonly depth = input<number>(0);\n\n readonly schemaChange = output<ObjectJsonSchema>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected readonly editorType = computed(() => getEditorType(this.schema()));\n}\n\nexport type { CombinatorKind };\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\n\nimport { cn } from '../../internal/cn';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n type SchemaEditorType,\n asObjectSchema,\n getEditorType,\n getSchemaDescription,\n} from '../../types/json-schema';\nimport type { ValidationTreeNode } from '../../types/validation';\nimport { BadgeDirective } from '../ui/badge.directive';\nimport { InputDirective } from '../ui/input.directive';\nimport { LabelDirective } from '../ui/label.directive';\nimport { TypeDropdownComponent } from './type-dropdown.component';\nimport {\n type EnumChangeContext,\n TypeEditorComponent,\n} from './type-editor.component';\n\n@Component({\n selector: 'lib-jsonjoy-schema-property-editor',\n standalone: true,\n imports: [\n BadgeDirective,\n InputDirective,\n LabelDirective,\n TypeDropdownComponent,\n forwardRef(() => TypeEditorComponent),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy block' },\n template: `\n <div [class]=\"rootClasses()\">\n <div\n class=\"relative json-field-row justify-between group flex items-center\"\n >\n <div class=\"flex items-center gap-2 grow min-w-0\">\n <button\n type=\"button\"\n class=\"text-muted-foreground hover:text-foreground transition-colors\"\n [attr.aria-label]=\"expanded() ? t().collapse : t().expand\"\n (click)=\"toggleExpanded()\"\n >\n @if (expanded()) {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n } @else {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n }\n </button>\n\n <div class=\"flex items-center gap-2 grow min-w-0 overflow-visible\">\n <div class=\"flex items-center gap-2 min-w-0 grow overflow-visible\">\n @if (!readOnly() && isEditingName()) {\n <input\n #nameInput\n libJsonjoyInput\n [value]=\"tempName()\"\n class=\"h-8 text-sm font-medium min-w-[120px] max-w-full z-10\"\n (input)=\"onTempNameInput($event)\"\n (blur)=\"submitName()\"\n (keydown.enter)=\"submitName()\"\n (focus)=\"selectAll($event)\"\n />\n } @else {\n <button\n type=\"button\"\n [attr.aria-label]=\"nameAriaLabel()\"\n [attr.title]=\"nameTitle()\"\n [class]=\"nameButtonClasses()\"\n (click)=\"beginEditName()\"\n (keydown.enter)=\"beginEditName()\"\n >\n {{ name() }}\n </button>\n }\n\n @if (!isRef()) {\n @if (!readOnly() && isEditingDesc()) {\n <input\n #descInput\n libJsonjoyInput\n [value]=\"tempDesc()\"\n [placeholder]=\"t().propertyDescriptionPlaceholder\"\n class=\"h-8 text-xs text-muted-foreground italic flex-1 min-w-[150px] z-10\"\n (input)=\"onTempDescInput($event)\"\n (blur)=\"submitDesc()\"\n (keydown.enter)=\"submitDesc()\"\n (focus)=\"selectAll($event)\"\n />\n } @else if (tempDesc()) {\n <button\n type=\"button\"\n class=\"text-xs text-muted-foreground italic cursor-text px-2 py-0.5 -mx-0.5 rounded-sm hover:bg-secondary/30 hover:shadow-xs hover:ring-1 hover:ring-ring/20 transition-all text-left truncate flex-1 max-w-[40%] mr-2\"\n (click)=\"beginEditDesc()\"\n (keydown.enter)=\"beginEditDesc()\"\n >\n {{ tempDesc() }}\n </button>\n } @else {\n <button\n type=\"button\"\n class=\"text-xs text-muted-foreground/50 italic cursor-text px-2 py-0.5 -mx-0.5 rounded-sm hover:bg-secondary/30 hover:shadow-xs hover:ring-1 hover:ring-ring/20 transition-all opacity-0 group-hover:opacity-100 text-left truncate flex-1 max-w-[40%] mr-2\"\n (click)=\"beginEditDesc()\"\n (keydown.enter)=\"beginEditDesc()\"\n >\n {{ t().propertyDescriptionButton }}\n </button>\n }\n }\n </div>\n\n <div class=\"flex items-center gap-2 justify-end shrink-0\">\n <lib-jsonjoy-type-dropdown\n [value]=\"type()\"\n [readOnly]=\"readOnly()\"\n (valueChange)=\"onTypeChange($event)\"\n />\n\n @if (mode() === 'property') {\n <button\n type=\"button\"\n [class]=\"requiredToggleClasses()\"\n (click)=\"toggleRequired()\"\n >\n {{ required() ? t().propertyRequired : t().propertyOptional }}\n </button>\n } @else if (mode() === 'pattern') {\n <span\n class=\"text-xs px-2 py-1 rounded-md font-medium min-w-[80px] text-center whitespace-nowrap bg-secondary text-muted-foreground flex items-center justify-center gap-1\"\n [title]=\"t().propertyNameRegexDescription\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M17 3v10\" />\n <path d=\"m12.67 5.5 8.66 5\" />\n <path d=\"m12.67 10.5 8.66-5\" />\n <path d=\"M9 17a2 2 0 1 0 0 4 2 2 0 0 0 0-4z\" />\n </svg>\n regex\n </span>\n }\n </div>\n </div>\n </div>\n\n @if (errorCount() > 0) {\n <div\n libJsonjoyBadge\n variant=\"destructive\"\n class=\"h-5 min-w-5 rounded-full px-1 font-mono tabular-nums justify-center\"\n >\n {{ errorCount() }}\n </div>\n }\n\n @if (!readOnly()) {\n <div class=\"flex items-center gap-1 text-muted-foreground\">\n <button\n type=\"button\"\n class=\"p-1 rounded-md hover:bg-secondary hover:text-destructive transition-colors opacity-0 group-hover:opacity-100\"\n [attr.aria-label]=\"t().propertyDelete\"\n (click)=\"delete.emit()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n </div>\n }\n </div>\n\n @if (expanded()) {\n <div class=\"pt-1 pb-2 px-2 sm:px-3 animate-in\">\n @if (readOnly() && tempDesc()) {\n <p class=\"pb-2\">{{ tempDesc() }}</p>\n }\n\n @if (!isRef()) {\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3 mb-3\">\n <div class=\"space-y-1\">\n <label libJsonjoyLabel [attr.for]=\"titleId\">{{\n t().propertyTitleLabel\n }}</label>\n <input\n libJsonjoyInput\n [id]=\"titleId\"\n type=\"text\"\n class=\"h-8\"\n [value]=\"tempTitle()\"\n [disabled]=\"readOnly()\"\n [placeholder]=\"readOnly() ? '' : t().propertyTitlePlaceholder\"\n (focus)=\"isEditingTitle.set(true)\"\n (input)=\"onTempTitleInput($event)\"\n (blur)=\"submitTitle()\"\n />\n </div>\n <div class=\"space-y-1\">\n <label libJsonjoyLabel [attr.for]=\"defaultId\">{{\n t().propertyDefaultLabel\n }}</label>\n <input\n libJsonjoyInput\n [id]=\"defaultId\"\n type=\"text\"\n class=\"h-8\"\n [value]=\"tempDefault()\"\n [disabled]=\"readOnly()\"\n [placeholder]=\"\n readOnly() ? '' : t().propertyDefaultPlaceholder\n \"\n (focus)=\"isEditingDefault.set(true)\"\n (input)=\"onTempDefaultInput($event)\"\n (blur)=\"submitDefault()\"\n />\n </div>\n </div>\n }\n\n <lib-jsonjoy-type-editor\n [schema]=\"schema()\"\n [readOnly]=\"readOnly()\"\n [validationNode]=\"validationNode()\"\n [schemaKey]=\"schemaKey() ?? name()\"\n [depth]=\"depth() + 1\"\n (schemaChange)=\"onChildSchemaChange($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n </div>\n }\n </div>\n `,\n})\nexport class SchemaPropertyEditorComponent {\n readonly name = input.required<string>();\n readonly schema = input.required<JsonSchema>();\n readonly schemaKey = input<string | undefined>(undefined);\n readonly required = input<boolean>(false);\n readonly readOnly = input.required<boolean>();\n readonly autoFocus = input<boolean>(true);\n readonly depth = input<number>(0);\n readonly validationNode = input<ValidationTreeNode | undefined>(undefined);\n readonly mode = input<'property' | 'pattern' | 'definition'>('property');\n\n readonly delete = output<void>();\n readonly nameChange = output<string>();\n readonly requiredChange = output<boolean>();\n readonly schemaChange = output<ObjectJsonSchema>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n private static nextId = 0;\n private readonly editorId = (SchemaPropertyEditorComponent.nextId += 1);\n protected readonly titleId = `jsonjoy-title-${this.editorId}`;\n protected readonly defaultId = `jsonjoy-default-${this.editorId}`;\n\n protected readonly expanded = signal(false);\n protected readonly isEditingName = signal(false);\n protected readonly isEditingDesc = signal(false);\n protected readonly isEditingTitle = signal(false);\n protected readonly isEditingDefault = signal(false);\n protected readonly tempName = signal('');\n protected readonly tempDesc = signal('');\n protected readonly tempTitle = signal('');\n protected readonly tempDefault = signal('');\n\n protected readonly type = computed(() => getEditorType(this.schema()));\n protected readonly isRef = computed(() => this.type() === '$ref');\n protected readonly errorCount = computed(\n () => this.validationNode()?.cumulativeChildrenErrors ?? 0,\n );\n\n protected readonly rootClasses = computed(() =>\n cn(\n 'mb-2 animate-in rounded-lg border border-border transition-all duration-200',\n this.depth() > 0 && 'ml-0 sm:ml-4 border-l-2 border-l-border',\n ),\n );\n\n protected readonly nameButtonClasses = computed(() =>\n cn(\n 'json-field-label font-medium cursor-text px-2 py-0.5 -mx-0.5 rounded-sm hover:bg-secondary/30 hover:shadow-xs hover:ring-1 hover:ring-ring/20 transition-all text-left truncate min-w-[80px] max-w-[50%]',\n this.mode() === 'pattern' && 'font-mono',\n ),\n );\n\n protected readonly nameAriaLabel = computed(() =>\n this.mode() === 'pattern'\n ? `${this.t().fieldNameRegexLabel}: ${this.name()}`\n : null,\n );\n protected readonly nameTitle = computed(() =>\n this.mode() === 'pattern' ? this.t().propertyNameRegexDescription : null,\n );\n\n protected readonly requiredToggleClasses = computed(() =>\n cn(\n 'text-xs px-2 py-1 rounded-md font-medium min-w-[80px] text-center cursor-pointer hover:shadow-xs hover:ring-2 hover:ring-ring/30 active:scale-95 transition-all whitespace-nowrap',\n this.required()\n ? 'bg-red-500/10 text-red-500'\n : 'bg-secondary text-muted-foreground',\n ),\n );\n\n private readonly nameInput =\n viewChild<ElementRef<HTMLInputElement>>('nameInput');\n private readonly descInput =\n viewChild<ElementRef<HTMLInputElement>>('descInput');\n\n constructor() {\n // Sync the editable buffers from external schema/name changes, but never\n // overwrite a field the user is currently editing (otherwise an external\n // update — e.g. the JSON editor in `both` mode — clobbers their draft).\n effect(() => {\n const name = this.name();\n const schema = this.schema();\n untracked(() => {\n if (!this.isEditingName()) this.tempName.set(name);\n if (!this.isEditingDesc()) {\n this.tempDesc.set(getSchemaDescription(schema));\n }\n const s = asObjectSchema(schema);\n if (!this.isEditingTitle()) {\n this.tempTitle.set(typeof s.title === 'string' ? s.title : '');\n }\n if (!this.isEditingDefault()) {\n this.tempDefault.set(\n s.default === undefined ? '' : formatDefault(s.default),\n );\n }\n });\n });\n\n effect(() => {\n if (this.isEditingName() && this.autoFocus()) {\n queueMicrotask(() => this.nameInput()?.nativeElement.focus());\n }\n });\n\n effect(() => {\n if (this.isEditingDesc() && this.autoFocus()) {\n queueMicrotask(() => this.descInput()?.nativeElement.focus());\n }\n });\n }\n\n protected toggleExpanded(): void {\n this.expanded.update((v) => !v);\n }\n\n protected beginEditName(): void {\n if (this.readOnly()) return;\n this.isEditingName.set(true);\n }\n\n protected beginEditDesc(): void {\n if (this.readOnly()) return;\n this.isEditingDesc.set(true);\n }\n\n protected onTempNameInput(event: Event): void {\n this.tempName.set((event.target as HTMLInputElement).value);\n }\n\n protected onTempDescInput(event: Event): void {\n this.tempDesc.set((event.target as HTMLInputElement).value);\n }\n\n protected submitName(): void {\n const trimmed = this.tempName().trim();\n if (trimmed && trimmed !== this.name()) {\n this.nameChange.emit(trimmed);\n } else {\n this.tempName.set(this.name());\n }\n this.isEditingName.set(false);\n }\n\n protected submitDesc(): void {\n const trimmed = this.tempDesc().trim();\n const currentDesc = getSchemaDescription(this.schema());\n if (trimmed !== currentDesc) {\n this.schemaChange.emit({\n ...asObjectSchema(this.schema()),\n description: trimmed || undefined,\n });\n } else {\n this.tempDesc.set(currentDesc);\n }\n this.isEditingDesc.set(false);\n }\n\n protected onTempTitleInput(event: Event): void {\n this.tempTitle.set((event.target as HTMLInputElement).value);\n }\n\n protected submitTitle(): void {\n this.isEditingTitle.set(false);\n const trimmed = this.tempTitle().trim();\n const base = asObjectSchema(this.schema());\n const current = typeof base.title === 'string' ? base.title : '';\n if (trimmed === current) return;\n const { title: _t, ...rest } = base;\n this.schemaChange.emit(trimmed ? { ...rest, title: trimmed } : rest);\n }\n\n protected onTempDefaultInput(event: Event): void {\n this.tempDefault.set((event.target as HTMLInputElement).value);\n }\n\n protected submitDefault(): void {\n this.isEditingDefault.set(false);\n const raw = this.tempDefault().trim();\n const base = asObjectSchema(this.schema());\n if (!raw) {\n if (base.default === undefined) return;\n const { default: _d, ...rest } = base;\n this.schemaChange.emit(rest);\n return;\n }\n const value = parseDefault(raw);\n if (deepEqual(value, base.default)) return;\n this.schemaChange.emit({ ...base, default: value });\n }\n\n protected toggleRequired(): void {\n if (this.readOnly()) return;\n this.requiredChange.emit(!this.required());\n }\n\n protected selectAll(event: FocusEvent): void {\n (event.target as HTMLInputElement).select();\n }\n\n protected onTypeChange(newType: SchemaEditorType): void {\n const current = asObjectSchema(this.schema());\n if (newType === '$ref') {\n this.schemaChange.emit({ $ref: '' });\n this.expanded.set(true);\n return;\n }\n if (newType === 'anyOf' || newType === 'oneOf' || newType === 'allOf') {\n const {\n type: _type,\n $ref: _r,\n anyOf: _a,\n oneOf: _o,\n allOf: _al,\n ...rest\n } = current;\n const initial =\n newType === 'allOf'\n ? { allOf: [{ type: 'object' as const }] }\n : {\n [newType]: [\n { type: 'string' as const },\n { type: 'number' as const },\n ],\n };\n this.schemaChange.emit({ ...rest, ...initial });\n } else {\n const { $ref: _r, anyOf: _a, oneOf: _o, allOf: _al, ...rest } = current;\n this.schemaChange.emit({ ...rest, type: newType });\n }\n }\n\n protected onChildSchemaChange(updated: ObjectJsonSchema): void {\n if (typeof updated.$ref === 'string') {\n this.schemaChange.emit({ $ref: updated.$ref });\n return;\n }\n const base = asObjectSchema(this.schema());\n const merged: ObjectJsonSchema = { ...updated };\n const desc = getSchemaDescription(this.schema());\n if (desc) merged.description = desc;\n if (typeof base.title === 'string' && base.title) merged.title = base.title;\n if (base.default !== undefined) merged.default = base.default;\n this.schemaChange.emit(merged);\n }\n}\n\nfunction formatDefault(value: unknown): string {\n if (typeof value === 'string') return value;\n try {\n return JSON.stringify(value);\n } catch {\n return '';\n }\n}\n\nfunction parseDefault(raw: string): unknown {\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n}\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n try {\n return JSON.stringify(a) === JSON.stringify(b);\n } catch {\n return false;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n output,\n} from '@angular/core';\n\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type ObjectJsonSchema,\n asObjectSchema,\n} from '../../types/json-schema';\nimport { ButtonDirective } from '../ui/button.directive';\nimport { SchemaPropertyEditorComponent } from './schema-property-editor.component';\n\ninterface DefinitionRow {\n readonly name: string;\n readonly schema: JsonSchema;\n}\n\n@Component({\n selector: 'lib-jsonjoy-definitions-editor',\n standalone: true,\n imports: [ButtonDirective, forwardRef(() => SchemaPropertyEditorComponent)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy block grow min-h-0' },\n template: `\n <div class=\"flex flex-col h-full\">\n @if (!readOnly()) {\n <div class=\"mb-4 shrink-0 flex\">\n <button\n libJsonjoyButton\n type=\"button\"\n variant=\"default\"\n size=\"sm\"\n class=\"flex items-center gap-1.5 group\"\n (click)=\"addDefinition()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"group-hover:scale-110 transition-transform\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M8 12h8\" />\n <path d=\"M12 8v8\" />\n </svg>\n <span>{{ t().definitionsAddButton }}</span>\n </button>\n </div>\n }\n\n @if (rows().length === 0) {\n <div class=\"text-center py-10 text-muted-foreground\">\n <p class=\"text-sm\">{{ t().definitionsEmpty }}</p>\n </div>\n } @else {\n <div class=\"grow overflow-auto\">\n @for (row of rows(); track row.name) {\n <lib-jsonjoy-schema-property-editor\n mode=\"definition\"\n [name]=\"row.name\"\n [schema]=\"row.schema\"\n [readOnly]=\"readOnly()\"\n [depth]=\"0\"\n (nameChange)=\"renameDefinition(row.name, $event)\"\n (schemaChange)=\"updateDefinition(row.name, $event)\"\n (delete)=\"deleteDefinition(row.name)\"\n />\n }\n </div>\n }\n </div>\n `,\n})\nexport class DefinitionsEditorComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n\n readonly schemaChange = output<ObjectJsonSchema>();\n\n protected readonly t = inject(JsonjoyTranslationContextService).translation;\n\n protected readonly activeKey = computed<'$defs' | 'definitions'>(() => {\n const s = asObjectSchema(this.schema());\n if (s.definitions && !s.$defs) return 'definitions';\n return '$defs';\n });\n\n protected readonly rows = computed<DefinitionRow[]>(() => {\n const s = asObjectSchema(this.schema());\n const source = s[this.activeKey()] ?? {};\n return Object.entries(source).map(([name, sub]) => ({ name, schema: sub }));\n });\n\n protected addDefinition(): void {\n const base = asObjectSchema(this.schema());\n const key = this.activeKey();\n const existing = base[key] ?? {};\n const baseName = 'NewDefinition';\n let candidate = baseName;\n let i = 1;\n while (candidate in existing) {\n i += 1;\n candidate = `${baseName}${i}`;\n }\n this.schemaChange.emit({\n ...base,\n [key]: { ...existing, [candidate]: { type: 'object' } },\n });\n }\n\n protected renameDefinition(currentName: string, newName: string): void {\n const trimmed = newName.trim();\n if (!trimmed || trimmed === currentName) return;\n const base = asObjectSchema(this.schema());\n const key = this.activeKey();\n const existing = { ...(base[key] ?? {}) };\n if (trimmed in existing) return;\n const value = existing[currentName];\n delete existing[currentName];\n existing[trimmed] = value;\n this.schemaChange.emit({ ...base, [key]: existing });\n }\n\n protected updateDefinition(name: string, updated: ObjectJsonSchema): void {\n const base = asObjectSchema(this.schema());\n const key = this.activeKey();\n const existing = { ...(base[key] ?? {}) };\n existing[name] = updated;\n this.schemaChange.emit({ ...base, [key]: existing });\n }\n\n protected deleteDefinition(name: string): void {\n const base = asObjectSchema(this.schema());\n const key = this.activeKey();\n const existing = { ...(base[key] ?? {}) };\n delete existing[name];\n if (Object.keys(existing).length === 0) {\n const { [key]: _omit, ...rest } = base;\n this.schemaChange.emit(rest);\n return;\n }\n this.schemaChange.emit({ ...base, [key]: existing });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\n\nimport {\n type SchemaProperty,\n getSchemaPatternProperties,\n getSchemaProperties,\n} from '../../internal/schema-editor';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport {\n type JsonSchema,\n type NewField,\n type ObjectJsonSchema,\n type SchemaEditorType,\n getEditorType,\n} from '../../types/json-schema';\nimport { buildValidationTree } from '../../types/validation';\nimport { SchemaPropertyRowsComponent } from './schema-property-rows.component';\nimport type { EnumChangeContext } from './type-editor.component';\n\nfunction pickValidEditorType(schema: JsonSchema): SchemaEditorType {\n if (typeof schema === 'boolean') return 'object';\n const declared = schema.type;\n if (Array.isArray(declared)) {\n return (declared[0] ?? 'object') as SchemaEditorType;\n }\n return getEditorType(schema);\n}\n\nfunction buildFieldFromProperty(\n property: SchemaProperty,\n overrides: Partial<NewField> = {},\n): NewField {\n const schema = property.schema;\n return {\n name: property.name,\n type: pickValidEditorType(schema),\n description: typeof schema === 'boolean' ? '' : schema.description || '',\n required: property.required,\n validation: typeof schema === 'boolean' ? { type: 'object' } : schema,\n ...overrides,\n };\n}\n\n@Component({\n selector: 'lib-jsonjoy-schema-field-list',\n standalone: true,\n imports: [SchemaPropertyRowsComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy block' },\n template: `\n <div class=\"space-y-2 animate-in\">\n <lib-jsonjoy-schema-property-rows\n [properties]=\"properties()\"\n [patternProperties]=\"patternProperties()\"\n [validationChildren]=\"validationTree().children\"\n [readOnly]=\"readOnly()\"\n [autoFocus]=\"autoFocus()\"\n (deleteProperty)=\"deleteField.emit($event)\"\n (deletePatternProperty)=\"deletePatternField.emit($event)\"\n (nameChange)=\"onPropertyNameChange($event)\"\n (patternNameChange)=\"onPatternNameChange($event)\"\n (requiredChange)=\"onRequiredChange($event)\"\n (schemaChange)=\"onPropertySchemaChange($event)\"\n (patternSchemaChange)=\"onPatternSchemaChange($event)\"\n (addEnum)=\"addEnum.emit($event)\"\n (deleteEnum)=\"deleteEnum.emit($event)\"\n />\n </div>\n `,\n})\nexport class SchemaFieldListComponent {\n readonly schema = input.required<JsonSchema>();\n readonly readOnly = input.required<boolean>();\n readonly autoFocus = input<boolean>(true);\n\n readonly editField = output<{ name: string; field: NewField }>();\n readonly deleteField = output<string>();\n readonly editPatternField = output<{ name: string; field: NewField }>();\n readonly deletePatternField = output<string>();\n readonly addEnum = output<EnumChangeContext>();\n readonly deleteEnum = output<EnumChangeContext>();\n\n private readonly t = inject(JsonjoyTranslationContextService).translation;\n\n protected readonly properties = computed(() =>\n getSchemaProperties(this.schema()),\n );\n protected readonly patternProperties = computed(() =>\n getSchemaPatternProperties(this.schema()),\n );\n protected readonly validationTree = computed(() =>\n buildValidationTree(this.schema(), this.t()),\n );\n\n protected onPropertyNameChange(event: {\n oldName: string;\n newName: string;\n }): void {\n this.emitEdit(this.properties(), this.editField, event.oldName, {\n name: event.newName,\n });\n }\n\n protected onPatternNameChange(event: {\n oldName: string;\n newName: string;\n }): void {\n this.emitEdit(\n this.patternProperties(),\n this.editPatternField,\n event.oldName,\n {\n name: event.newName,\n },\n );\n }\n\n protected onRequiredChange(event: { name: string; required: boolean }): void {\n this.emitEdit(this.properties(), this.editField, event.name, {\n required: event.required,\n });\n }\n\n protected onPropertySchemaChange(event: {\n name: string;\n schema: ObjectJsonSchema;\n }): void {\n this.emitEditFromSchema(\n this.properties(),\n this.editField,\n event.name,\n event.schema,\n );\n }\n\n protected onPatternSchemaChange(event: {\n name: string;\n schema: ObjectJsonSchema;\n }): void {\n this.emitEditFromSchema(\n this.patternProperties(),\n this.editPatternField,\n event.name,\n event.schema,\n );\n }\n\n private emitEdit(\n list: readonly SchemaProperty[],\n target: { emit: (value: { name: string; field: NewField }) => void },\n name: string,\n overrides: Partial<NewField>,\n ): void {\n const property = list.find((p) => p.name === name);\n if (!property) return;\n target.emit({ name, field: buildFieldFromProperty(property, overrides) });\n }\n\n private emitEditFromSchema(\n list: readonly SchemaProperty[],\n target: { emit: (value: { name: string; field: NewField }) => void },\n name: string,\n updatedSchema: ObjectJsonSchema,\n ): void {\n const property = list.find((p) => p.name === name);\n if (!property) return;\n const declared = updatedSchema.type ?? 'object';\n const fallback: SchemaEditorType = Array.isArray(declared)\n ? ((declared[0] as SchemaEditorType) ?? 'object')\n : (declared as SchemaEditorType);\n const editorType = getEditorType(updatedSchema) || fallback;\n target.emit({\n name,\n field: buildFieldFromProperty(property, {\n type: editorType,\n description: updatedSchema.description || '',\n validation: updatedSchema,\n }),\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\n\nimport type { Translation } from '../../i18n/translation-keys';\nimport { cn } from '../../internal/cn';\nimport {\n DEFAULT_SCHEMAS,\n createFieldSchema,\n listLocalDefinitions,\n removeObjectPatternProperty,\n removeObjectProperty,\n renameObjectPatternProperty,\n renameObjectProperty,\n updateObjectPatternProperty,\n updateObjectProperty,\n updatePropertyRequired,\n} from '../../internal/schema-editor';\nimport { LocalDefinitionsContextService } from '../../services/local-definitions.service';\nimport { JsonjoyTranslationContextService } from '../../services/translation-context.service';\nimport { JsonjoyTranslationService } from '../../services/translation.service';\nimport {\n type JsonSchema,\n type NewField,\n type ObjectJsonSchema,\n type SchemaEditorType,\n asObjectSchema,\n getEditorType,\n isBooleanSchema,\n isObjectSchema,\n} from '../../types/json-schema';\nimport { AddFieldButtonComponent } from '../schema-editor-internal/add-field-button.component';\nimport { DefinitionsEditorComponent } from '../schema-editor-internal/definitions-editor.component';\nimport { SchemaFieldListComponent } from '../schema-editor-internal/schema-field-list.component';\nimport { TypeEditorComponent } from '../schema-editor-internal/type-editor.component';\n\nconst ROOT_TYPE_OPTIONS: readonly {\n id: SchemaEditorType;\n labelKey: keyof Translation;\n}[] = [\n { id: 'object', labelKey: 'fieldTypeObjectLabel' },\n { id: 'string', labelKey: 'fieldTypeTextLabel' },\n { id: 'number', labelKey: 'fieldTypeNumberLabel' },\n { id: 'boolean', labelKey: 'fieldTypeBooleanLabel' },\n { id: 'array', labelKey: 'fieldTypeArrayLabel' },\n { id: 'anyOf', labelKey: 'schemaTypeAnyOf' },\n { id: 'oneOf', labelKey: 'schemaTypeOneOf' },\n { id: 'allOf', labelKey: 'schemaTypeAllOf' },\n { id: '$ref', labelKey: 'schemaTypeRef' },\n { id: 'null', labelKey: 'schemaTypeNull' },\n];\n\n@Component({\n selector: 'lib-jsonjoy-schema-fields-editor',\n standalone: true,\n imports: [\n AddFieldButtonComponent,\n forwardRef(() => DefinitionsEditorComponent),\n SchemaFieldListComponent,\n forwardRef(() => TypeEditorComponent),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [LocalDefinitionsContextService, JsonjoyTranslationContextService],\n host: { class: 'jsonjoy' },\n template: `\n <div [class]=\"rootClasses()\">\n @if (rootType() === 'object') {\n <div\n class=\"mb-4 shrink-0 flex items-center justify-between gap-2 border-b border-border\"\n >\n <div class=\"flex\">\n <button\n type=\"button\"\n [class]=\"tabClasses('properties')\"\n (click)=\"activeTab.set('properties')\"\n >\n {{ t().propertiesTabLabel }}\n </button>\n <button\n type=\"button\"\n [class]=\"tabClasses('definitions')\"\n (click)=\"activeTab.set('definitions')\"\n >\n {{ t().definitionsTabLabel }}\n @if (definitionsCount() > 0) {\n <span class=\"ml-1.5 text-xs text-muted-foreground\"\n >({{ definitionsCount() }})</span\n >\n }\n </button>\n </div>\n\n @if (!readOnly() && activeTab() === 'properties') {\n <div class=\"flex items-center gap-2 pb-2\">\n <label class=\"text-xs text-muted-foreground\">Root type:</label>\n <select\n class=\"text-xs rounded-md border bg-background px-2 py-1 shadow-xs focus:outline-none focus:ring-2 focus:ring-primary/30\"\n (change)=\"onRootTypeChange($event)\"\n >\n @for (option of rootTypeOptions; track option.id) {\n <option\n [value]=\"option.id\"\n [selected]=\"option.id === rootType()\"\n >\n {{ t()[option.labelKey] }}\n </option>\n }\n </select>\n </div>\n }\n </div>\n } @else if (!readOnly()) {\n <div class=\"mb-4 shrink-0 flex items-center gap-2\">\n <label class=\"text-sm font-medium text-muted-foreground\"\n >Root type:</label\n >\n <select\n class=\"text-sm rounded-md border bg-background px-2 py-1 shadow-xs focus:outline-none focus:ring-2 focus:ring-primary/30\"\n (change)=\"onRootTypeChange($event)\"\n >\n @for (option of rootTypeOptions; track option.id) {\n <option [value]=\"option.id\" [selected]=\"option.id === rootType()\">\n {{ t()[option.labelKey] }}\n </option>\n }\n </select>\n </div>\n }\n\n @if (rootType() === 'object') {\n @if (activeTab() === 'properties') {\n @if (!readOnly()) {\n <div class=\"mb-6 shrink-0 flex\">\n <lib-jsonjoy-add-field-button\n [autoFocus]=\"autoFocus()\"\n (addField)=\"handleAddField($event)\"\n (addPatternField)=\"handleAddPatternField($event)\"\n />\n </div>\n }\n <div class=\"grow overflow-auto\">\n @if (hasFields()) {\n <lib-jsonjoy-schema-field-list\n [schema]=\"value()\"\n [readOnly]=\"readOnly()\"\n [autoFocus]=\"autoFocus()\"\n (editField)=\"handleEditField($event)\"\n (deleteField)=\"handleDeleteField($event)\"\n (editPatternField)=\"handleEditPatternField($event)\"\n (deletePatternField)=\"handleDeletePatternField($event)\"\n />\n } @else {\n <div class=\"text-center py-10 text-muted-foreground\">\n <p class=\"mb-3\">{{ t().visualEditorNoFieldsHint1 }}</p>\n <p class=\"text-sm\">{{ t().visualEditorNoFieldsHint2 }}</p>\n </div>\n }\n </div>\n } @else {\n <lib-jsonjoy-definitions-editor\n [schema]=\"value()\"\n [readOnly]=\"readOnly()\"\n (schemaChange)=\"value.set($event)\"\n />\n }\n } @else {\n <div class=\"grow overflow-auto\">\n <lib-jsonjoy-type-editor\n [schema]=\"value()\"\n [readOnly]=\"readOnly()\"\n (schemaChange)=\"value.set($event)\"\n />\n </div>\n }\n </div>\n `,\n})\nexport class SchemaFieldsEditorComponent {\n readonly value = model<JsonSchema>({ type: 'object' });\n readonly readOnly = input<boolean>(false);\n readonly autoFocus = input<boolean>(true);\n readonly className = input<string | undefined>(undefined);\n readonly locale = input<Translation | undefined>(undefined);\n readonly messages = input<Partial<Translation> | undefined>(undefined);\n\n private readonly localDefinitions = inject(LocalDefinitionsContextService);\n\n constructor() {\n // Thread the effective translation down to the inner editors.\n this.translationContext.setSource(this.t);\n // Keep the $ref editor's local-definition quick-pick in sync with the\n // root schema's $defs/definitions (incl. edits made in the Definitions tab,\n // which flow back through value()).\n effect(() => this.localDefinitions.set(listLocalDefinitions(this.value())));\n }\n\n private readonly translations = inject(JsonjoyTranslationService);\n private readonly translationContext = inject(\n JsonjoyTranslationContextService,\n );\n protected readonly t = this.translations.withOverrides(\n this.locale,\n this.messages,\n );\n\n protected readonly rootClasses = computed(() =>\n cn('p-4 h-full flex flex-col overflow-auto jsonjoy', this.className()),\n );\n\n protected readonly rootTypeOptions = ROOT_TYPE_OPTIONS;\n\n protected readonly rootType = computed<SchemaEditorType>(() =>\n getEditorType(this.value()),\n );\n\n protected onRootTypeChange(event: Event): void {\n const target = event.target as HTMLSelectElement;\n const nextType = target.value as SchemaEditorType;\n const current = this.value();\n const preserved: Partial<ObjectJsonSchema> = isObjectSchema(current)\n ? {\n ...(current.title !== undefined ? { title: current.title } : {}),\n ...(current.description !== undefined\n ? { description: current.description }\n : {}),\n }\n : {};\n const next = { ...DEFAULT_SCHEMAS[nextType], ...preserved };\n this.value.set(next);\n }\n\n protected readonly hasFields = computed(() => {\n const schema = this.value();\n if (isBooleanSchema(schema)) return false;\n const properties = schema.properties;\n const patternProperties = schema.patternProperties;\n return (\n (!!properties && Object.keys(properties).length > 0) ||\n (!!patternProperties && Object.keys(patternProperties).length > 0)\n );\n });\n\n protected readonly hasDefinitions = computed(() => {\n const schema = this.value();\n if (isBooleanSchema(schema)) return false;\n return (\n (!!schema.$defs && Object.keys(schema.$defs).length > 0) ||\n (!!schema.definitions && Object.keys(schema.definitions).length > 0)\n );\n });\n\n protected readonly definitionsCount = computed(() => {\n const schema = this.value();\n if (isBooleanSchema(schema)) return 0;\n return (\n Object.keys(schema.$defs ?? {}).length +\n Object.keys(schema.definitions ?? {}).length\n );\n });\n\n protected readonly activeTab = signal<'properties' | 'definitions'>(\n 'properties',\n );\n\n protected tabClasses(tab: 'properties' | 'definitions'): string {\n return cn(\n 'text-sm font-medium px-4 py-2 -mb-px border-b-2 transition-colors',\n this.activeTab() === tab\n ? 'border-primary text-foreground'\n : 'border-transparent text-muted-foreground hover:text-foreground',\n );\n }\n\n protected handleAddField(field: NewField): void {\n const fieldSchema = createFieldSchema(field);\n let next = updateObjectProperty(\n asObjectSchema(this.value()),\n field.name,\n fieldSchema,\n );\n if (field.required) {\n next = updatePropertyRequired(next, field.name, true);\n }\n this.value.set(next);\n }\n\n protected handleAddPatternField(field: NewField): void {\n this.value.set(\n updateObjectPatternProperty(\n asObjectSchema(this.value()),\n field.name,\n createFieldSchema(field),\n ),\n );\n }\n\n protected handleEditField(event: { name: string; field: NewField }): void {\n const fieldSchema = createFieldSchema(event.field);\n let next = asObjectSchema(this.value());\n\n if (event.name !== event.field.name) {\n next = renameObjectProperty(next, event.name, event.field.name);\n next = updateObjectProperty(next, event.field.name, fieldSchema);\n } else {\n next = updateObjectProperty(next, event.name, fieldSchema);\n }\n\n next = updatePropertyRequired(next, event.field.name, event.field.required);\n this.value.set(next);\n }\n\n protected handleEditPatternField(event: {\n name: string;\n field: NewField;\n }): void {\n const fieldSchema = createFieldSchema(event.field);\n let next = asObjectSchema(this.value());\n\n if (event.name !== event.field.name) {\n next = renameObjectPatternProperty(next, event.name, event.field.name);\n next = updateObjectPatternProperty(next, event.field.name, fieldSchema);\n } else {\n next = updateObjectPatternProperty(next, event.name, fieldSchema);\n }\n\n this.value.set(next);\n }\n\n protected handleDeleteField(name: string): void {\n this.value.set(removeObjectProperty(asObjectSchema(this.value()), name));\n }\n\n protected handleDeletePatternField(name: string): void {\n this.value.set(\n removeObjectPatternProperty(asObjectSchema(this.value()), name),\n );\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n DestroyRef,\n Directive,\n ElementRef,\n PLATFORM_ID,\n afterNextRender,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { indentWithTab } from '@codemirror/commands';\nimport { json, jsonParseLinter } from '@codemirror/lang-json';\nimport {\n HighlightStyle,\n defaultHighlightStyle,\n syntaxHighlighting,\n} from '@codemirror/language';\nimport {\n type Diagnostic,\n forceLinting,\n lintGutter,\n linter,\n} from '@codemirror/lint';\nimport { Annotation, Compartment, EditorState } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { keymap } from '@codemirror/view';\nimport { tags as t } from '@lezer/highlight';\nimport { basicSetup } from 'codemirror';\n\nimport type { JsonSchema } from '../types/json-schema';\nimport { validateJson } from './json-validator';\n\n/**\n * Imperative handle emitted via the `mounted` output once the editor has\n * finished loading. Consumers (e.g. `ValidateJsonDialog`) use this to reveal\n * a line/column without leaking the raw editor instance across the directive\n * boundary.\n */\nexport interface JsonjoyEditorHandle {\n revealError(line: number, column: number): void;\n focus(): void;\n setValue(value: string): void;\n getValue(): string;\n layout(): void;\n}\n\n/** Marks transactions the directive dispatches itself, so the write-back\n * listener can ignore them and avoid echoing programmatic value updates. */\nconst External = Annotation.define<boolean>();\n\n/** Readable JSON syntax colors for the dark surface (default style is light). */\nconst DARK_HIGHLIGHT_STYLE = HighlightStyle.define([\n { tag: [t.propertyName, t.definition(t.propertyName)], color: '#7dd3fc' },\n { tag: [t.string, t.special(t.string)], color: '#86efac' },\n { tag: [t.number, t.bool, t.null], color: '#fca5a5' },\n { tag: [t.keyword, t.operator], color: '#c4b5fd' },\n { tag: [t.punctuation, t.separator, t.bracket], color: '#a3a3a3' },\n { tag: t.comment, color: '#6b7280', fontStyle: 'italic' },\n { tag: t.invalid, color: '#fca5a5' },\n]);\n\n/**\n * CodeMirror 6 JSON editor. Attached to a host element, it creates an editor\n * instance and bridges CodeMirror's imperative API to Angular signals.\n */\n@Directive({\n selector: '[libJsonjoyEditor]',\n exportAs: 'libJsonjoyEditor',\n})\nexport class JsonjoyEditorDirective {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platformId = inject(PLATFORM_ID);\n\n readonly value = model<string>('');\n /** Reserved for future languages; only `json` is currently supported. */\n readonly language = input<string>('json');\n readonly readOnly = input<boolean>(false);\n readonly autoFocus = input<boolean>(false);\n readonly schema = input<JsonSchema | undefined>(undefined);\n\n readonly mounted = output<JsonjoyEditorHandle>();\n\n private readonly _loaded = signal(false);\n readonly loaded = this._loaded.asReadonly();\n\n private view: EditorView | null = null;\n private readonly readOnlyCompartment = new Compartment();\n private readonly themeCompartment = new Compartment();\n private observer: MutationObserver | null = null;\n private readonly _isDark = signal(false);\n\n constructor() {\n if (isPlatformBrowser(this.platformId)) {\n afterNextRender(() => this.bootstrap());\n }\n\n effect(() => {\n const next = this.value();\n const view = this.view;\n if (!view) return;\n if (view.state.doc.toString() === next) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: next },\n annotations: External.of(true),\n });\n });\n\n effect(() => {\n const isReadOnly = this.readOnly();\n this.view?.dispatch({\n effects: this.readOnlyCompartment.reconfigure(\n this.readOnlyExtension(isReadOnly),\n ),\n });\n });\n\n effect(() => {\n // Re-run schema diagnostics whenever the bound schema changes.\n this.schema();\n if (this.view) forceLinting(this.view);\n });\n\n effect(() => {\n const dark = this._isDark();\n this.view?.dispatch({\n effects: this.themeCompartment.reconfigure(this.themeExtension(dark)),\n });\n });\n }\n\n private bootstrap(): void {\n this.detectDark();\n this.observeDark();\n\n const schemaLinter = linter(async (view): Promise<Diagnostic[]> => {\n const schema = this.schema();\n const text = view.state.doc.toString();\n if (!schema || !text.trim()) return [];\n try {\n JSON.parse(text);\n } catch {\n // jsonParseLinter already reports syntax errors.\n return [];\n }\n const result = await validateJson(text, schema);\n if (result.valid) return [];\n const doc = view.state.doc;\n return (result.errors ?? []).map((error) => {\n let from = 0;\n let to = 0;\n if (error.line) {\n const lineObj = doc.line(Math.min(error.line, doc.lines));\n from = Math.min(\n lineObj.from + Math.max(0, (error.column ?? 1) - 1),\n lineObj.to,\n );\n to = lineObj.to;\n }\n return {\n from,\n to: Math.max(from, to),\n severity: 'error' as const,\n message: error.message,\n };\n });\n });\n\n const state = EditorState.create({\n doc: this.value(),\n extensions: [\n basicSetup,\n json(),\n linter(jsonParseLinter()),\n schemaLinter,\n lintGutter(),\n keymap.of([indentWithTab]),\n this.readOnlyCompartment.of(this.readOnlyExtension(this.readOnly())),\n this.themeCompartment.of(this.themeExtension(this._isDark())),\n EditorView.updateListener.of((update) => {\n if (!update.docChanged) return;\n if (update.transactions.some((tr) => tr.annotation(External))) return;\n this.value.set(update.state.doc.toString());\n }),\n ],\n });\n\n this.view = new EditorView({ state, parent: this.host.nativeElement });\n\n if (this.autoFocus()) this.view.focus();\n\n this._loaded.set(true);\n this.mounted.emit(this.buildHandle());\n\n this.destroyRef.onDestroy(() => {\n this.observer?.disconnect();\n this.observer = null;\n this.view?.destroy();\n this.view = null;\n });\n }\n\n private readOnlyExtension(readOnly: boolean) {\n return [\n EditorState.readOnly.of(readOnly),\n EditorView.editable.of(!readOnly),\n ];\n }\n\n private themeExtension(dark: boolean) {\n const base = EditorView.theme(\n {\n '&': {\n height: '100%',\n fontSize: '14px',\n backgroundColor: 'transparent',\n color: 'var(--jsonjoy-color-foreground)',\n },\n '&.cm-focused': { outline: 'none' },\n '.cm-scroller': {\n fontFamily: \"'SF Mono', Monaco, Menlo, Consolas, monospace\",\n overflow: 'auto',\n },\n '.cm-gutters': {\n backgroundColor: 'transparent',\n border: 'none',\n color: 'var(--jsonjoy-color-muted-foreground)',\n },\n '.cm-activeLine, .cm-activeLineGutter': {\n backgroundColor:\n 'color-mix(in srgb, var(--jsonjoy-color-muted) 40%, transparent)',\n },\n },\n { dark },\n );\n // `basicSetup` only ships a light highlight style; swap in a dark one when dark.\n const highlight = dark\n ? syntaxHighlighting(DARK_HIGHLIGHT_STYLE)\n : syntaxHighlighting(defaultHighlightStyle);\n return [base, highlight];\n }\n\n private observeDark(): void {\n if (typeof MutationObserver === 'undefined') return;\n this.observer = new MutationObserver(() => this.detectDark());\n // The dark toggle lives on the document root, so watch only its class.\n this.observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n });\n }\n\n private detectDark(): void {\n const host = this.host.nativeElement;\n const dark =\n host.closest('.dark') !== null ||\n document.documentElement.classList.contains('dark');\n this._isDark.set(dark);\n }\n\n private buildHandle(): JsonjoyEditorHandle {\n return {\n revealError: (line, column) => {\n const view = this.view;\n if (!view) return;\n const doc = view.state.doc;\n const lineNo = Math.max(1, Math.min(line, doc.lines));\n const lineObj = doc.line(lineNo);\n const pos = Math.min(\n lineObj.from + Math.max(0, (column ?? 1) - 1),\n lineObj.to,\n );\n view.dispatch({\n selection: { anchor: pos },\n effects: EditorView.scrollIntoView(pos, { y: 'center' }),\n });\n view.focus();\n },\n focus: () => this.view?.focus(),\n setValue: (value) => {\n const view = this.view;\n if (!view) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: value },\n annotations: External.of(true),\n });\n },\n getValue: () => this.view?.state.doc.toString() ?? '',\n layout: () => this.view?.requestMeasure(),\n };\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n PLATFORM_ID,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\n\nimport type { Translation } from '../../i18n/translation-keys';\nimport { JsonjoyEditorDirective } from '../../internal/editor.directive';\nimport { JsonjoyTranslationService } from '../../services/translation.service';\nimport type { JsonSchema } from '../../types/json-schema';\n\n/**\n * Angular equivalent of React `<SchemaJsonEditor>`. Renders the\n * CodeMirror-backed JSON source editor with a download button.\n */\n@Component({\n selector: 'lib-jsonjoy-schema-json-editor',\n standalone: true,\n imports: [JsonjoyEditorDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <div class=\"relative overflow-hidden h-full flex flex-col jsonjoy\">\n <div\n class=\"flex items-center justify-between bg-secondary/80 backdrop-blur-xs px-4 py-2 border-b shrink-0\"\n >\n <div class=\"flex items-center gap-2\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\n />\n <polyline points=\"14 2 14 8 20 8\" />\n <path\n d=\"M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1\"\n />\n <path\n d=\"M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1\"\n />\n </svg>\n <span class=\"font-medium text-sm\">{{ t().visualizerSource }}</span>\n </div>\n <button\n type=\"button\"\n class=\"p-1.5 hover:bg-secondary rounded-md transition-colors\"\n [title]=\"t().visualizerDownloadTitle\"\n (click)=\"onDownload()\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"7 10 12 15 17 10\" />\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n </svg>\n </button>\n </div>\n <div class=\"grow flex min-h-0\">\n <div\n #editorHost\n libJsonjoyEditor\n class=\"editor-container w-full h-full\"\n language=\"json\"\n [readOnly]=\"readOnly()\"\n [autoFocus]=\"autoFocus()\"\n [(value)]=\"jsonText\"\n ></div>\n @if (!loaded()) {\n <div\n class=\"absolute inset-x-0 bottom-0 top-12 flex items-center justify-center bg-secondary/30\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"animate-spin\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n </div>\n }\n </div>\n </div>\n `,\n})\nexport class SchemaJsonEditorComponent {\n readonly value = model<JsonSchema>({ type: 'object' });\n readonly readOnly = input<boolean>(false);\n readonly autoFocus = input<boolean>(true);\n readonly locale = input<Translation | undefined>(undefined);\n readonly messages = input<Partial<Translation> | undefined>(undefined);\n\n private readonly translations = inject(JsonjoyTranslationService);\n private readonly platformId = inject(PLATFORM_ID);\n protected readonly t = this.translations.withOverrides(\n this.locale,\n this.messages,\n );\n\n private readonly editorDirective = viewChild.required(JsonjoyEditorDirective);\n\n /**\n * Pretty-printed mirror of the bound schema. Pushed into the editor via the\n * directive's two-way `value`. Updated by `effect()` when `value()` changes\n * externally; the directive writes back to this signal when the user edits.\n */\n protected readonly jsonText = signal(this.stringify(this.value()));\n\n protected readonly loaded = computed(() => this.editorDirective().loaded());\n\n constructor() {\n // value -> text. Reacts only to value(); the current text is read\n // untracked so a user edit (which changes jsonText, then value) does not\n // wake this effect and revert the edit before it is applied. Skips\n // reformatting when the text already represents the same schema, so the\n // caret is not disturbed while typing.\n effect(() => {\n const next = this.stringify(this.value());\n const current = untracked(this.jsonText);\n if (current === next || this.textMatchesValue(current)) return;\n this.jsonText.set(next);\n });\n\n // text -> value. Reacts only to jsonText(); value() is read untracked so\n // an external value change does not re-run this effect.\n effect(() => {\n const raw = this.jsonText();\n if (untracked(this.readOnly)) return;\n try {\n const parsed = JSON.parse(raw) as JsonSchema;\n if (this.jsonEqual(parsed, untracked(this.value))) return;\n this.value.set(parsed);\n } catch {\n // The editor surfaces the parse error inline — silently ignore here.\n }\n });\n }\n\n /** Whether `text` parses to a schema deep-equal to the current `value()`. */\n private textMatchesValue(text: string): boolean {\n try {\n return this.jsonEqual(JSON.parse(text) as JsonSchema, this.value());\n } catch {\n return false;\n }\n }\n\n /** Order-insensitive structural equality for two JSON values. */\n private jsonEqual(a: JsonSchema, b: JsonSchema): boolean {\n return stableStringify(a) === stableStringify(b);\n }\n\n protected onDownload(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n const content = this.stringify(this.value());\n const blob = new Blob([content], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = this.t().visualizerDownloadFileName;\n document.body.appendChild(anchor);\n anchor.click();\n document.body.removeChild(anchor);\n URL.revokeObjectURL(url);\n }\n\n private stringify(value: JsonSchema): string {\n return JSON.stringify(value, null, 2);\n }\n}\n\n/** JSON stringify with object keys sorted recursively, for stable comparison. */\nfunction stableStringify(value: unknown): string {\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(',')}]`;\n }\n if (value && typeof value === 'object') {\n const entries = Object.keys(value as Record<string, unknown>)\n .sort()\n .map(\n (key) =>\n `${JSON.stringify(key)}:${stableStringify(\n (value as Record<string, unknown>)[key],\n )}`,\n );\n return `{${entries.join(',')}}`;\n }\n return JSON.stringify(value) ?? 'null';\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n untracked,\n} from '@angular/core';\n\nimport type { Translation } from '../../i18n/translation-keys';\nimport { cn } from '../../internal/cn';\nimport { JsonjoyTranslationService } from '../../services/translation.service';\nimport type { JsonSchema } from '../../types/json-schema';\nimport { SchemaFieldsEditorComponent } from '../schema-fields-editor/schema-fields-editor.component';\nimport { SchemaJsonEditorComponent } from '../schema-json-editor/schema-json-editor.component';\n\nexport type SchemaBuilderMode = 'visual' | 'json' | 'both';\n\n@Component({\n selector: 'lib-jsonjoy-schema-builder',\n standalone: true,\n imports: [SchemaFieldsEditorComponent, SchemaJsonEditorComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy block' },\n template: `\n <div [class]=\"rootClasses()\">\n <div\n class=\"flex items-center justify-between px-4 py-3 border-b w-full shrink-0\"\n >\n <h3 class=\"font-medium\">{{ t().schemaEditorTitle }}</h3>\n <div\n class=\"grid grid-cols-3 w-[280px] h-9 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground\"\n >\n <button\n type=\"button\"\n [class]=\"toggleButtonClasses(mode() === 'visual')\"\n (click)=\"mode.set('visual')\"\n >\n {{ t().schemaEditorEditModeVisual }}\n </button>\n <button\n type=\"button\"\n [class]=\"toggleButtonClasses(mode() === 'both')\"\n (click)=\"mode.set('both')\"\n >\n {{ t().schemaEditorEditModeBoth }}\n </button>\n <button\n type=\"button\"\n [class]=\"toggleButtonClasses(mode() === 'json')\"\n (click)=\"mode.set('json')\"\n >\n {{ t().schemaEditorEditModeJson }}\n </button>\n </div>\n </div>\n\n <div class=\"flex flex-row w-full h-[600px] min-h-0\">\n @if (mode() !== 'json') {\n <div [class]=\"visualPaneClasses()\">\n <lib-jsonjoy-schema-fields-editor\n [(value)]=\"value\"\n [readOnly]=\"readOnly()\"\n [autoFocus]=\"autoFocus()\"\n [locale]=\"locale()\"\n [messages]=\"messages()\"\n />\n </div>\n }\n @if (mode() === 'both') {\n <div class=\"w-px bg-border shrink-0\"></div>\n }\n @if (mode() !== 'visual') {\n <div [class]=\"jsonPaneClasses()\">\n <lib-jsonjoy-schema-json-editor\n [(value)]=\"value\"\n [readOnly]=\"readOnly()\"\n [autoFocus]=\"autoFocus()\"\n [locale]=\"locale()\"\n [messages]=\"messages()\"\n />\n </div>\n }\n </div>\n </div>\n `,\n})\nexport class SchemaBuilderComponent {\n readonly value = model<JsonSchema>({ type: 'object' });\n readonly defaultValue = input<JsonSchema | undefined>(undefined);\n readonly readOnly = input<boolean>(false);\n readonly autoFocus = input<boolean>(true);\n readonly className = input<string | undefined>(undefined);\n readonly locale = input<Translation | undefined>(undefined);\n readonly messages = input<Partial<Translation> | undefined>(undefined);\n readonly mode = model<SchemaBuilderMode>('both');\n\n private readonly translations = inject(JsonjoyTranslationService);\n protected readonly t = this.translations.withOverrides(\n this.locale,\n this.messages,\n );\n\n protected readonly rootClasses = computed(() =>\n cn('json-editor-container w-full jsonjoy flex flex-col', this.className()),\n );\n\n protected readonly visualPaneClasses = computed(() =>\n this.mode() === 'both' ? 'w-1/2 h-full min-h-0' : 'w-full h-full min-h-0',\n );\n\n protected readonly jsonPaneClasses = computed(() =>\n this.mode() === 'both' ? 'w-1/2 h-full min-h-0' : 'w-full h-full min-h-0',\n );\n\n protected toggleButtonClasses(active: boolean): string {\n return cn(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1 text-sm font-medium transition-all',\n active && 'bg-background text-foreground shadow-xs',\n );\n }\n\n private seededDefault = false;\n\n constructor() {\n // Seed `defaultValue` once, on first run, and only if the consumer hasn't\n // bound a value — so it never clobbers a real binding.\n effect(() => {\n const initial = this.defaultValue();\n if (this.seededDefault || !initial) return;\n untracked(() => {\n this.seededDefault = true;\n if (this.isUnseededDefault(this.value())) {\n this.value.set(initial);\n }\n });\n });\n }\n\n private isUnseededDefault(current: JsonSchema): boolean {\n return (\n typeof current === 'object' &&\n current !== null &&\n !Array.isArray(current) &&\n Object.keys(current).length === 1 &&\n (current as { type?: unknown }).type === 'object'\n );\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n PLATFORM_ID,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport type { Translation } from '../../i18n/translation-keys';\nimport {\n JsonjoyEditorDirective,\n type JsonjoyEditorHandle,\n} from '../../internal/editor.directive';\nimport { createSchemaFromJson } from '../../internal/schema-inference';\nimport { JsonjoyTranslationService } from '../../services/translation.service';\nimport type { JsonSchema } from '../../types/json-schema';\nimport { ButtonDirective } from '../ui/button.directive';\n\n/**\n * Native `<dialog>`-based equivalent of React `<InferSchemaDialog>`. Opens a\n * CodeMirror-backed JSON input pane; on submit, infers a JSON Schema and emits\n * via `inferred`.\n */\n@Component({\n selector: 'lib-jsonjoy-infer-schema-dialog',\n standalone: true,\n imports: [ButtonDirective, JsonjoyEditorDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <dialog\n #dialogRef\n class=\"md:max-w-4xl max-h-[90vh] w-[95vw] m-auto p-4 sm:p-6 jsonjoy rounded-lg border bg-background shadow-lg backdrop:bg-black/40\"\n (close)=\"onDialogClose()\"\n >\n <div class=\"mb-4\">\n <h2 class=\"text-xl font-semibold\">{{ t().inferrerTitle }}</h2>\n <p class=\"text-sm text-muted-foreground\">\n {{ t().inferrerDescription }}\n </p>\n </div>\n\n <div class=\"py-2\">\n <div class=\"border rounded-md overflow-hidden relative h-[450px]\">\n <div\n libJsonjoyEditor\n class=\"absolute inset-0\"\n language=\"json\"\n [autoFocus]=\"autoFocus()\"\n [(value)]=\"jsonInput\"\n (mounted)=\"onEditorMounted($event)\"\n ></div>\n @if (!editorLoaded()) {\n <div\n class=\"absolute inset-0 flex items-center justify-center bg-secondary/30\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"animate-spin\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n </div>\n }\n </div>\n @if (error()) {\n <p class=\"text-sm text-destructive mt-2\">{{ error() }}</p>\n }\n </div>\n\n <div class=\"mt-4 gap-2 flex flex-wrap justify-end\">\n <button\n libJsonjoyButton\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n (click)=\"close()\"\n >\n {{ t().inferrerCancel }}\n </button>\n <button libJsonjoyButton type=\"button\" size=\"sm\" (click)=\"generate()\">\n {{ t().inferrerGenerate }}\n </button>\n </div>\n </dialog>\n `,\n})\nexport class InferSchemaDialogComponent {\n readonly open = model<boolean>(false);\n readonly autoFocus = input<boolean>(true);\n readonly locale = input<Translation | undefined>(undefined);\n readonly messages = input<Partial<Translation> | undefined>(undefined);\n\n readonly inferred = output<JsonSchema>();\n\n private readonly translations = inject(JsonjoyTranslationService);\n private readonly platformId = inject(PLATFORM_ID);\n protected readonly t = this.translations.withOverrides(\n this.locale,\n this.messages,\n );\n\n protected readonly jsonInput = signal('');\n protected readonly error = signal<string | null>(null);\n protected readonly editorLoaded = signal(false);\n\n private readonly dialogRef =\n viewChild<ElementRef<HTMLDialogElement>>('dialogRef');\n private editorHandle: JsonjoyEditorHandle | null = null;\n\n constructor() {\n effect(() => {\n const shouldOpen = this.open();\n const el = this.dialogRef()?.nativeElement;\n if (!el) return;\n if (shouldOpen && !el.open) {\n el.showModal();\n // The editor mounts while the dialog is display:none; re-measure now\n // that the host has real dimensions. `requestAnimationFrame` is\n // browser-only, so skip the re-measure during SSR.\n if (isPlatformBrowser(this.platformId)) {\n requestAnimationFrame(() => {\n this.editorHandle?.layout();\n if (this.autoFocus()) {\n this.editorHandle?.focus();\n }\n });\n }\n } else if (!shouldOpen && el.open) {\n el.close();\n }\n });\n }\n\n protected onEditorMounted(handle: JsonjoyEditorHandle): void {\n this.editorHandle = handle;\n this.editorLoaded.set(true);\n if (this.open()) {\n handle.layout();\n if (this.autoFocus()) {\n handle.focus();\n }\n }\n }\n\n protected generate(): void {\n try {\n const parsed = JSON.parse(this.jsonInput());\n this.error.set(null);\n const inferredSchema = createSchemaFromJson(parsed);\n this.inferred.emit(inferredSchema);\n this.close();\n } catch {\n this.error.set(this.t().inferrerErrorInvalidJson);\n }\n }\n\n protected close(): void {\n this.open.set(false);\n }\n\n protected onDialogClose(): void {\n this.jsonInput.set('');\n this.error.set(null);\n if (this.open()) {\n this.open.set(false);\n }\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n PLATFORM_ID,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport type { Translation } from '../../i18n/translation-keys';\nimport {\n JsonjoyEditorDirective,\n type JsonjoyEditorHandle,\n} from '../../internal/editor.directive';\nimport {\n type ValidationResult,\n validateJson,\n} from '../../internal/json-validator';\nimport {\n JsonjoyTranslationService,\n formatTranslation,\n} from '../../services/translation.service';\nimport type { JsonSchema } from '../../types/json-schema';\nimport { ButtonDirective } from '../ui/button.directive';\n\nconst VALIDATION_DEBOUNCE_MS = 500;\n\n/**\n * Native `<dialog>`-based equivalent of React `<ValidateJsonDialog>`. Two\n * CodeMirror editors side-by-side: writable user JSON validated against the\n * provided schema, and a read-only schema viewer. Validation runs debounced.\n */\n@Component({\n selector: 'lib-jsonjoy-validate-json-dialog',\n standalone: true,\n imports: [ButtonDirective, JsonjoyEditorDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'jsonjoy' },\n template: `\n <dialog\n #dialogRef\n class=\"md:max-w-5xl max-h-[90vh] w-[95vw] m-auto p-4 sm:p-6 jsonjoy rounded-lg border bg-background shadow-lg backdrop:bg-black/40\"\n (close)=\"onDialogClose()\"\n >\n <div class=\"mb-4\">\n <h2 class=\"text-xl font-semibold\">{{ t().validatorTitle }}</h2>\n <p class=\"text-sm text-muted-foreground\">\n {{ t().validatorDescription }}\n </p>\n </div>\n\n <div\n class=\"flex-1 flex flex-col md:flex-row gap-4 py-2 overflow-hidden h-[500px]\"\n >\n <div class=\"flex-1 flex flex-col h-full min-w-0\">\n <div class=\"text-sm font-medium mb-2\">{{ t().validatorContent }}</div>\n <div class=\"border rounded-md flex-1 h-full relative overflow-hidden\">\n <div\n libJsonjoyEditor\n class=\"absolute inset-0\"\n language=\"json\"\n [autoFocus]=\"autoFocus()\"\n [schema]=\"schema()\"\n [(value)]=\"jsonInput\"\n (mounted)=\"onJsonEditorMounted($event)\"\n ></div>\n @if (!jsonEditorLoaded()) {\n <div\n class=\"absolute inset-0 flex items-center justify-center bg-secondary/30\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"animate-spin\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n </div>\n }\n </div>\n </div>\n\n <div class=\"flex-1 flex flex-col h-full min-w-0\">\n <div class=\"text-sm font-medium mb-2\">\n {{ t().validatorCurrentSchema }}\n </div>\n <div class=\"border rounded-md flex-1 h-full relative overflow-hidden\">\n <div\n libJsonjoyEditor\n class=\"absolute inset-0\"\n language=\"json\"\n [readOnly]=\"true\"\n [value]=\"schemaText()\"\n (mounted)=\"onSchemaEditorMounted($event)\"\n ></div>\n </div>\n </div>\n </div>\n\n @if (validationResult(); as result) {\n <div [class]=\"resultBannerClasses()\">\n <div class=\"flex items-center\">\n @if (result.valid) {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"text-green-500 mr-2\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n <p class=\"text-green-600 font-medium\">{{ t().validatorValid }}</p>\n } @else {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"text-red-500 mr-2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n <p class=\"text-red-600 font-medium\">{{ headerMessage() }}</p>\n }\n </div>\n\n @if (!result.valid && (result.errors?.length ?? 0) > 0) {\n <div class=\"mt-3 max-h-[200px] overflow-y-auto\">\n <ul class=\"space-y-2\">\n @for (error of result.errors; track $index) {\n <li>\n <button\n type=\"button\"\n class=\"w-full text-left bg-card border border-destructive/30 rounded-md p-3 shadow-xs hover:shadow-md transition-shadow duration-200 cursor-pointer\"\n (click)=\"goToError(error.line, error.column)\"\n >\n <div class=\"flex items-start justify-between\">\n <div class=\"flex-1\">\n <p class=\"text-sm font-medium text-destructive\">\n {{\n error.path === '/'\n ? t().validatorErrorPathRoot\n : error.path\n }}\n </p>\n <p class=\"text-sm text-muted-foreground mt-1\">\n {{ error.message }}\n </p>\n </div>\n @if (error.line) {\n <div\n class=\"text-xs bg-muted px-2 py-1 rounded text-muted-foreground\"\n >\n {{ formatLocation(error.line, error.column) }}\n </div>\n }\n </div>\n </button>\n </li>\n }\n </ul>\n </div>\n }\n </div>\n }\n\n <div class=\"mt-4 gap-2 flex flex-wrap justify-end\">\n <button\n libJsonjoyButton\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n (click)=\"close()\"\n >\n {{ t().validatorClose }}\n </button>\n </div>\n </dialog>\n `,\n})\nexport class ValidateJsonDialogComponent {\n readonly open = model<boolean>(false);\n readonly schema = input.required<JsonSchema>();\n readonly autoFocus = input<boolean>(true);\n readonly locale = input<Translation | undefined>(undefined);\n readonly messages = input<Partial<Translation> | undefined>(undefined);\n\n private readonly translations = inject(JsonjoyTranslationService);\n private readonly platformId = inject(PLATFORM_ID);\n protected readonly t = this.translations.withOverrides(\n this.locale,\n this.messages,\n );\n\n protected readonly jsonInput = signal('');\n protected readonly validationResult = signal<ValidationResult | null>(null);\n protected readonly jsonEditorLoaded = signal(false);\n\n protected readonly schemaText = computed(() =>\n JSON.stringify(this.schema(), null, 2),\n );\n\n protected readonly headerMessage = computed(() => {\n const result = this.validationResult();\n if (!result || result.valid) return '';\n const errors = result.errors ?? [];\n if (errors.length === 1) {\n const messages = this.t();\n return errors[0].path === '/'\n ? messages.validatorErrorInvalidSyntax\n : messages.validatorErrorSchemaValidation;\n }\n return formatTranslation(this.t().validatorErrorCount, {\n count: errors.length,\n });\n });\n\n protected readonly resultBannerClasses = computed(() => {\n const base =\n 'rounded-md p-4 mt-3 border transition-all duration-300 ease-in-out';\n return this.validationResult()?.valid\n ? `${base} border-green-500/30 bg-green-500/10`\n : `${base} border-red-500/30 bg-red-500/10`;\n });\n\n private readonly dialogRef =\n viewChild<ElementRef<HTMLDialogElement>>('dialogRef');\n private jsonEditorHandle: JsonjoyEditorHandle | null = null;\n private schemaEditorHandle: JsonjoyEditorHandle | null = null;\n private validationSeq = 0;\n\n constructor() {\n effect(() => {\n const shouldOpen = this.open();\n const el = this.dialogRef()?.nativeElement;\n if (!el) return;\n if (shouldOpen && !el.open) {\n el.showModal();\n // Re-measure once the dialog has real dimensions. `requestAnimationFrame`\n // is browser-only, so skip the re-measure during SSR.\n if (isPlatformBrowser(this.platformId)) {\n requestAnimationFrame(() => {\n this.jsonEditorHandle?.layout();\n this.schemaEditorHandle?.layout();\n if (this.autoFocus()) {\n this.jsonEditorHandle?.focus();\n }\n });\n }\n } else if (!shouldOpen && el.open) {\n el.close();\n }\n });\n\n effect((onCleanup) => {\n const input = this.jsonInput();\n const schema = this.schema();\n if (!input.trim()) {\n this.validationResult.set(null);\n return;\n }\n\n const seq = ++this.validationSeq;\n const handle = setTimeout(() => {\n void validateJson(input, schema).then((result) => {\n if (seq !== this.validationSeq) return;\n this.validationResult.set(result);\n });\n }, VALIDATION_DEBOUNCE_MS);\n\n onCleanup(() => clearTimeout(handle));\n });\n }\n\n protected onJsonEditorMounted(handle: JsonjoyEditorHandle): void {\n this.jsonEditorHandle = handle;\n this.jsonEditorLoaded.set(true);\n if (this.open()) {\n handle.layout();\n if (this.autoFocus()) {\n handle.focus();\n }\n }\n }\n\n protected onSchemaEditorMounted(handle: JsonjoyEditorHandle): void {\n this.schemaEditorHandle = handle;\n if (this.open()) {\n handle.layout();\n }\n }\n\n protected goToError(\n line: number | undefined,\n column: number | undefined,\n ): void {\n if (!line) return;\n this.jsonEditorHandle?.revealError(line, column ?? 1);\n }\n\n protected formatLocation(line: number, column: number | undefined): string {\n if (column !== undefined) {\n return formatTranslation(this.t().validatorErrorLocationLineAndColumn, {\n line,\n column,\n });\n }\n return formatTranslation(this.t().validatorErrorLocationLineOnly, { line });\n }\n\n protected close(): void {\n this.open.set(false);\n }\n\n protected onDialogClose(): void {\n this.jsonInput.set('');\n this.validationResult.set(null);\n if (this.open()) {\n this.open.set(false);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["TYPE_OPTIONS","t"],"mappings":"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"}
|