jsonforms-nuxt-ui-renderers 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -40,8 +40,8 @@ This package is intentionally small and opinionated: it ships a **single** rende
40
40
  - **String**: JSON Schema `type: "string"` → `UInput`
41
41
  - **Multiline string**: JSONForms “multiline” control (e.g. `uischema.options.multi: true`) → `UTextarea`
42
42
  - **Password**: JSON Schema `type: "string"` + `format: "password"` → `UInput type="password"` with show/hide toggle button
43
- - **Number**: JSON Schema `type: "number"` → `UInput type="number"` (parses to `number`, empty becomes `undefined`)
44
- - **Integer**: JSON Schema `type: "integer"` → `UInput type="number" step="1"` (parses to `integer`, empty becomes `undefined`)
43
+ - **Number**: JSON Schema `type: "number"` → **native** `<input type="number">` inside `UFormField` (parses to `number`, empty becomes `undefined`). Native inputs are used so each `input` event updates JsonForms core immediately; `UInput` alone could leave parent `:data` stale in some form-field setups.
44
+ - **Integer**: JSON Schema `type: "integer"` → **native** `<input type="number" inputmode="numeric" step="1">` (parses to `integer`, empty becomes `undefined`). Same rationale as number.
45
45
  - **Boolean**: JSON Schema `type: "boolean"` → `USwitch`
46
46
  - **Enum (single-select)**: JSON Schema `enum: [...]` (or `oneOf: [{ const, title? }, ...]`) → `USelectMenu`
47
47
  - **Enum (multi-select)**: JSON Schema `type: "array"` with `items` being an enum schema (supports `$ref`’d `items`) → `USelectMenu multiple`
package/dist/index.cjs CHANGED
@@ -496,8 +496,8 @@ var NuxtUiIntegerControl = (0, import_vue12.defineComponent)({
496
496
  const v = control.value.data;
497
497
  return v === null || v === void 0 ? "" : String(v);
498
498
  });
499
- function onUpdate(raw) {
500
- const trimmed = String(raw ?? "").trim();
499
+ function applyRawString(raw) {
500
+ const trimmed = raw.trim();
501
501
  if (trimmed === "") {
502
502
  handleChange(control.value.path, void 0);
503
503
  return;
@@ -508,7 +508,6 @@ var NuxtUiIntegerControl = (0, import_vue12.defineComponent)({
508
508
  return () => {
509
509
  if (!control.value.visible) return null;
510
510
  const UFormField = (0, import_vue12.resolveComponent)("UFormField");
511
- const UInput = (0, import_vue12.resolveComponent)("UInput");
512
511
  const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms);
513
512
  return (0, import_vue12.h)(
514
513
  "div",
@@ -522,16 +521,21 @@ var NuxtUiIntegerControl = (0, import_vue12.defineComponent)({
522
521
  error: errorMessage.value
523
522
  },
524
523
  {
525
- default: () => (0, import_vue12.h)(UInput, {
524
+ default: () => (0, import_vue12.h)("input", {
526
525
  type: "number",
527
526
  inputmode: "numeric",
528
527
  step: "1",
529
- modelValue: modelValue.value,
528
+ class: [
529
+ "jf-input-native",
530
+ errorMessage.value ? "jf-input-native--error" : ""
531
+ ].filter(Boolean).join(" "),
532
+ value: modelValue.value,
530
533
  readonly,
531
534
  disabled,
532
- color: errorMessage.value ? "error" : void 0,
533
535
  "aria-invalid": Boolean(errorMessage.value),
534
- "onUpdate:modelValue": onUpdate
536
+ onInput: (e) => {
537
+ applyRawString(e.target.value);
538
+ }
535
539
  })
536
540
  }
537
541
  )
@@ -636,8 +640,8 @@ var NuxtUiNumberControl = (0, import_vue16.defineComponent)({
636
640
  const v = control.value.data;
637
641
  return v === null || v === void 0 ? "" : String(v);
638
642
  });
639
- function onUpdate(raw) {
640
- const trimmed = String(raw ?? "").trim();
643
+ function applyRawString(raw) {
644
+ const trimmed = raw.trim();
641
645
  if (trimmed === "") {
642
646
  handleChange(control.value.path, void 0);
643
647
  return;
@@ -648,7 +652,6 @@ var NuxtUiNumberControl = (0, import_vue16.defineComponent)({
648
652
  return () => {
649
653
  if (!control.value.visible) return null;
650
654
  const UFormField = (0, import_vue16.resolveComponent)("UFormField");
651
- const UInput = (0, import_vue16.resolveComponent)("UInput");
652
655
  const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms);
653
656
  return (0, import_vue16.h)(
654
657
  "div",
@@ -662,15 +665,20 @@ var NuxtUiNumberControl = (0, import_vue16.defineComponent)({
662
665
  error: errorMessage.value
663
666
  },
664
667
  {
665
- default: () => (0, import_vue16.h)(UInput, {
668
+ default: () => (0, import_vue16.h)("input", {
666
669
  type: "number",
667
670
  inputmode: "decimal",
668
- modelValue: modelValue.value,
671
+ class: [
672
+ "jf-input-native",
673
+ errorMessage.value ? "jf-input-native--error" : ""
674
+ ].filter(Boolean).join(" "),
675
+ value: modelValue.value,
669
676
  readonly,
670
677
  disabled,
671
- color: errorMessage.value ? "error" : void 0,
672
678
  "aria-invalid": Boolean(errorMessage.value),
673
- "onUpdate:modelValue": onUpdate
679
+ onInput: (e) => {
680
+ applyRawString(e.target.value);
681
+ }
674
682
  })
675
683
  }
676
684
  )
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/nuxtUiRenderers.ts","../src/renderers/complex/NuxtUiArrayListRenderer.ts","../src/renderers/util.ts","../src/renderers/complex/NuxtUiObjectRenderer.ts","../src/renderers/controls/NuxtUiBooleanControl.ts","../src/renderers/controls/NuxtUiEnumControl.ts","../src/renderers/controls/NuxtUiIntegerControl.ts","../src/renderers/controls/NuxtUiMultiEnumControl.ts","../src/renderers/controls/NuxtUiNumberControl.ts","../src/renderers/controls/NuxtUiPasswordControl.ts","../src/renderers/controls/NuxtUiStringControl.ts","../src/renderers/controls/NuxtUiTextareaControl.ts","../src/renderers/layouts/NuxtUiCategorizationRenderer.ts","../src/renderers/layouts/NuxtUiCategoryRenderer.ts","../src/renderers/layouts/NuxtUiGroupRenderer.ts","../src/renderers/layouts/NuxtUiHorizontalLayoutRenderer.ts","../src/renderers/layouts/NuxtUiLabelRenderer.ts","../src/renderers/layouts/NuxtUiVerticalLayoutRenderer.ts","../src/renderers/theme.ts"],"sourcesContent":["export {\n createNuxtUiRenderers,\n nuxtUiRenderers,\n} from './nuxtUiRenderers'\nexport type { CreateNuxtUiRenderersOptions } from './nuxtUiRenderers'\nexport { controlDescription, getDocsPathFromSchema } from './renderers/util'\nexport type { JsonFormsRendererRegistryEntry } from '@jsonforms/core'\nexport {\n defaultTheme,\n mergeTheme,\n type NuxtUiRenderersTheme,\n} from './renderers/theme'\n","import type { JsonFormsRendererRegistryEntry } from '@jsonforms/core'\nimport {\n and,\n formatIs,\n isBooleanControl,\n isEnumControl,\n isEnumSchema,\n isIntegerControl,\n isMultiLineControl,\n isNumberControl,\n isObjectControl,\n isStringControl,\n rankWith,\n Resolve,\n schemaTypeIs,\n uiTypeIs,\n} from '@jsonforms/core'\nimport { markRaw } from 'vue'\n\nimport { createNuxtUiArrayListRenderer } from './renderers/complex/NuxtUiArrayListRenderer'\nimport { NuxtUiObjectRenderer } from './renderers/complex/NuxtUiObjectRenderer'\nimport { createNuxtUiBooleanControl } from './renderers/controls/NuxtUiBooleanControl'\nimport { NuxtUiEnumControl } from './renderers/controls/NuxtUiEnumControl'\nimport { NuxtUiIntegerControl } from './renderers/controls/NuxtUiIntegerControl'\nimport { NuxtUiMultiEnumControl } from './renderers/controls/NuxtUiMultiEnumControl'\nimport { NuxtUiNumberControl } from './renderers/controls/NuxtUiNumberControl'\nimport { NuxtUiPasswordControl } from './renderers/controls/NuxtUiPasswordControl'\nimport { createNuxtUiStringControl } from './renderers/controls/NuxtUiStringControl'\nimport { NuxtUiTextareaControl } from './renderers/controls/NuxtUiTextareaControl'\nimport { createNuxtUiCategorizationRenderer } from './renderers/layouts/NuxtUiCategorizationRenderer'\nimport { createNuxtUiCategoryRenderer } from './renderers/layouts/NuxtUiCategoryRenderer'\nimport { createNuxtUiGroupRenderer } from './renderers/layouts/NuxtUiGroupRenderer'\nimport { createNuxtUiHorizontalLayoutRenderer } from './renderers/layouts/NuxtUiHorizontalLayoutRenderer'\nimport { createNuxtUiLabelRenderer } from './renderers/layouts/NuxtUiLabelRenderer'\nimport { createNuxtUiVerticalLayoutRenderer } from './renderers/layouts/NuxtUiVerticalLayoutRenderer'\nimport {\n mergeTheme,\n type NuxtUiRenderersTheme,\n} from './renderers/theme'\n\n// Intentionally rank higher than typical defaults.\nconst RANK = 10\nconst ENUM_RANK = RANK + 1\nconst PASSWORD_RANK = ENUM_RANK + 1\n\nconst isMultiEnumControl = (\n uischema: unknown,\n schema: unknown,\n context: unknown,\n): boolean => {\n if (!uiTypeIs('Control')(uischema as any, schema as any, context as any)) {\n return false\n }\n\n const scope = (uischema as any)?.scope\n if (typeof scope !== 'string') return false\n\n // JSONForms passes the root schema into testers, but different call sites can\n // vary. Resolve against whatever we have, preferring the provided rootSchema.\n const rootSchema = (context as any)?.rootSchema ?? (schema as any)\n let resolved: any\n try {\n resolved = Resolve.schema(schema as any, scope, rootSchema)\n } catch {\n return false\n }\n\n if (resolved?.type !== 'array') return false\n\n const items = resolved?.items\n if (!items) return false\n\n // JSON Schema `items` can be a schema or an array of schemas.\n if (Array.isArray(items)) return false\n if (typeof items !== 'object' || items === null) return false\n\n const resolvedItems =\n '$ref' in items && typeof (items as any).$ref === 'string'\n ? Resolve.schema(rootSchema, (items as any).$ref, rootSchema)\n : items\n\n return isEnumSchema(resolvedItems as any)\n}\n\n/** Matches oneOf: [{ const, title? }, ...] - enum-like schema with display labels. */\nconst isOneOfEnumControl = (\n uischema: unknown,\n schema: unknown,\n context: unknown,\n): boolean => {\n if (!uiTypeIs('Control')(uischema as any, schema as any, context as any)) {\n return false\n }\n\n const scope = (uischema as any)?.scope\n if (typeof scope !== 'string') return false\n\n const rootSchema = (context as any)?.rootSchema ?? (schema as any)\n let resolved: any\n try {\n resolved = Resolve.schema(schema as any, scope, rootSchema)\n } catch {\n return false\n }\n\n const oneOf = resolved?.oneOf\n if (!Array.isArray(oneOf) || oneOf.length === 0) return false\n\n for (const entry of oneOf) {\n if (typeof entry !== 'object' || entry === null) continue\n if (!('const' in (entry as Record<string, unknown>))) return false\n }\n return true\n}\n\nexport interface CreateNuxtUiRenderersOptions {\n /** Override theme classes. Use semantic jf-* or custom (Tailwind, etc.). */\n theme?: Partial<NuxtUiRenderersTheme>\n /**\n * Build full docs URL from schema x-docs-path.\n * When provided, controls with x-docs-path show a docs link next to the label.\n */\n docsUrl?: (path: string) => string\n}\n\nexport function createNuxtUiRenderers(\n options?: CreateNuxtUiRenderersOptions,\n): JsonFormsRendererRegistryEntry[] {\n const theme = mergeTheme(options?.theme)\n const docsUrl = options?.docsUrl\n\n return [\n // Layouts\n {\n tester: rankWith(RANK, uiTypeIs('VerticalLayout')),\n renderer: markRaw(createNuxtUiVerticalLayoutRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('HorizontalLayout')),\n renderer: markRaw(createNuxtUiHorizontalLayoutRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('Group')),\n renderer: markRaw(createNuxtUiGroupRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('Categorization')),\n renderer: markRaw(createNuxtUiCategorizationRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('Category')),\n renderer: markRaw(createNuxtUiCategoryRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('Label')),\n renderer: markRaw(createNuxtUiLabelRenderer(theme)),\n },\n\n // Complex schemas\n {\n tester: rankWith(RANK, schemaTypeIs('array')),\n renderer: markRaw(createNuxtUiArrayListRenderer(theme)),\n },\n {\n tester: rankWith(RANK, isObjectControl),\n renderer: markRaw(NuxtUiObjectRenderer),\n },\n\n // Primitive controls\n {\n tester: rankWith(RANK, isMultiLineControl),\n renderer: markRaw(NuxtUiTextareaControl),\n },\n {\n tester: rankWith(RANK, isNumberControl),\n renderer: markRaw(NuxtUiNumberControl),\n },\n {\n tester: rankWith(RANK, isIntegerControl),\n renderer: markRaw(NuxtUiIntegerControl),\n },\n {\n tester: rankWith(RANK, isBooleanControl),\n renderer: markRaw(createNuxtUiBooleanControl(theme)),\n },\n {\n // Multi-enum must outrank generic array renderer and string renderer.\n tester: rankWith(ENUM_RANK, isMultiEnumControl),\n renderer: markRaw(NuxtUiMultiEnumControl),\n },\n {\n // oneOf with const+title (display labels) - same as enum for rendering.\n tester: rankWith(ENUM_RANK, isOneOfEnumControl),\n renderer: markRaw(NuxtUiEnumControl),\n },\n {\n // Enum must outrank the generic string control, otherwise enums render\n // as freeform text inputs.\n tester: rankWith(ENUM_RANK, isEnumControl),\n renderer: markRaw(NuxtUiEnumControl),\n },\n {\n tester: rankWith(PASSWORD_RANK, and(isStringControl, formatIs('password'))),\n renderer: markRaw(NuxtUiPasswordControl),\n },\n {\n tester: rankWith(RANK, isStringControl),\n renderer: markRaw(createNuxtUiStringControl(docsUrl)),\n },\n ]\n}\n\n/** Default renderers with semantic theme. Import styles.css for default styling. */\nexport const nuxtUiRenderers: JsonFormsRendererRegistryEntry[] =\n createNuxtUiRenderers()\n","import type { ControlElement, JsonSchema, UISchemaElement } from '@jsonforms/core'\nimport {\n Resolve,\n composePaths,\n createDefaultValue,\n findUISchema,\n getFirstPrimitiveProp,\n} from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsArrayControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, resolveComponent } from 'vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { trimmedOrUndefined } from '../util'\n\nexport function createNuxtUiArrayListRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiArrayListRenderer',\n components: { DispatchRenderer },\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, addItem, removeItems, moveUp, moveDown } =\n useJsonFormsArrayControl(\n props as unknown as Parameters<typeof useJsonFormsArrayControl>[0],\n )\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n const items = computed<unknown[]>(() =>\n Array.isArray(control.value.data) ? control.value.data : [],\n )\n\n const arraySchema = computed<JsonSchema | undefined>(() => {\n try {\n return Resolve.schema(\n props.schema,\n control.value.uischema.scope,\n control.value.rootSchema,\n )\n } catch {\n return undefined\n }\n })\n\n const maxItemsReached = computed(() => {\n const max = arraySchema.value?.maxItems\n return typeof max === 'number' ? items.value.length >= max : false\n })\n\n const minItemsReached = computed(() => {\n const min = arraySchema.value?.minItems\n return typeof min === 'number' ? items.value.length <= min : false\n })\n\n const childUiSchema = computed<UISchemaElement>(() =>\n findUISchema(\n control.value.uischemas,\n control.value.schema,\n control.value.uischema.scope,\n control.value.path,\n undefined,\n control.value.uischema,\n control.value.rootSchema,\n ),\n )\n\n function childLabelForIndex(index: number): string {\n const childLabelProp =\n getChildLabelPropFromUiSchemaOptions(control.value.uischema.options) ??\n getFirstPrimitiveProp(control.value.schema)\n\n if (!childLabelProp) return `${index}`\n\n const labelValue = Resolve.data(\n control.value.data,\n composePaths(`${index}`, childLabelProp),\n )\n if (\n labelValue === undefined ||\n labelValue === null ||\n Number.isNaN(labelValue as any)\n ) {\n return ''\n }\n return String(labelValue)\n }\n\n function getChildLabelPropFromUiSchemaOptions(\n options: unknown,\n ): string | undefined {\n if (!options || typeof options !== 'object') return undefined\n const value = (options as Record<string, unknown>).childLabelProp\n return typeof value === 'string' ? value : undefined\n }\n\n function addButtonClick() {\n addItem(\n control.value.path,\n createDefaultValue(control.value.schema, control.value.rootSchema),\n )()\n }\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UButton = resolveComponent('UButton')\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: control.value.description,\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h('div', { class: theme.layoutVertical }, [\n h('div', { class: theme.flexBetween }, [\n h(\n 'div',\n { class: theme.textMutedXs },\n `${items.value.length} items`,\n ),\n h(\n UButton as any,\n {\n type: 'button',\n size: 'xs',\n variant: 'soft',\n color: 'neutral',\n disabled:\n !control.value.enabled || maxItemsReached.value,\n onClick: addButtonClick,\n },\n { default: () => 'Add' },\n ),\n ]),\n\n items.value.length === 0\n ? h('div', { class: theme.textMuted }, 'No items.')\n : null,\n\n ...items.value.map((_item, index) =>\n h(\n 'div',\n {\n key: `${control.value.path}-${index}`,\n class: theme.panel,\n },\n [\n h(\n 'div',\n { class: theme.arrayItemToolbar },\n [\n h('div', { class: 'jf-min-w-0' }, [\n h(\n 'div',\n { class: theme.textItemTitle },\n [\n `Item ${index + 1}`,\n childLabelForIndex(index)\n ? h(\n 'span',\n { class: theme.textItemSuffix },\n ` — ${childLabelForIndex(index)}`,\n )\n : null,\n ],\n ),\n ]),\n h('div', { class: theme.flexActions }, [\n h(\n UButton as any,\n {\n type: 'button',\n size: 'xs',\n variant: 'ghost',\n color: 'neutral',\n disabled:\n !control.value.enabled || index === 0,\n onClick: () =>\n moveUp?.(control.value.path, index)(),\n },\n { default: () => 'Up' },\n ),\n h(\n UButton as any,\n {\n type: 'button',\n size: 'xs',\n variant: 'ghost',\n color: 'neutral',\n disabled:\n !control.value.enabled ||\n index >= items.value.length - 1,\n onClick: () =>\n moveDown?.(control.value.path, index)(),\n },\n { default: () => 'Down' },\n ),\n h(\n UButton as any,\n {\n type: 'button',\n size: 'xs',\n variant: 'ghost',\n color: 'error',\n disabled:\n !control.value.enabled ||\n minItemsReached.value,\n onClick: () =>\n removeItems?.(control.value.path, [\n index,\n ])(),\n },\n { default: () => 'Remove' },\n ),\n ]),\n ],\n ),\n\n h(DispatchRenderer as any, {\n schema: control.value.schema,\n uischema: childUiSchema.value,\n path: composePaths(control.value.path, `${index}`),\n enabled: control.value.enabled,\n renderers: control.value.renderers,\n cells: control.value.cells,\n }),\n ],\n ),\n ),\n ]),\n },\n ),\n )\n }\n },\n })\n}\n","import type { ControlElement } from '@jsonforms/core'\nimport { hasEnableRule } from '@jsonforms/core'\nimport type { VNode } from 'vue'\nimport { h } from 'vue'\nimport { computed, type ComputedRef } from 'vue'\n\n/**\n * Extract x-docs-path from a JSON Schema property.\n * Returns the path when present and valid (starts with /), otherwise null.\n */\nexport function getDocsPathFromSchema(schema: unknown): string | null {\n if (!schema || typeof schema !== 'object' || Array.isArray(schema))\n return null\n const s = schema as Record<string, unknown>\n const path = s['x-docs-path']\n if (typeof path === 'string' && path.startsWith('/')) return path\n return null\n}\n\n/**\n * Render a docs link hint for UFormField when schema has x-docs-path.\n * Returns a slot render function or undefined when no docs URL.\n */\nexport function renderDocsHintSlot(\n schema: unknown,\n label: string,\n docsUrl: ((path: string) => string) | undefined,\n resolveComponent: (name: string) => unknown,\n): (() => VNode) | undefined {\n const path = getDocsPathFromSchema(schema)\n if (!path || !docsUrl) return undefined\n const ULink = resolveComponent('ULink')\n const UIcon = resolveComponent('UIcon')\n if (!ULink || !UIcon) return undefined\n const href = docsUrl(path)\n return () =>\n h(\n ULink as any,\n {\n href,\n target: '_blank',\n rel: 'noopener noreferrer',\n class: 'inline-flex items-center text-muted hover:text-primary',\n 'aria-label': `${label} docs`,\n title: `${label} docs`,\n },\n () => h(UIcon as any, { name: 'i-heroicons-information-circle' }),\n )\n}\n\nexport function trimmedOrUndefined(input: string | undefined): string | undefined {\n const v = input?.trim()\n return v ? v : undefined\n}\n\n/**\n * Resolves the control's description for the label/field.\n * Uses control.description when set, otherwise falls back to schema.description.\n */\nexport function controlDescription(control: {\n description?: string\n schema?: { description?: string }\n}): string | undefined {\n const d = control.description?.trim()\n if (d) return d\n const sd = (control.schema as { description?: string } | undefined)?.description\n return typeof sd === 'string' && sd.trim() ? sd.trim() : undefined\n}\n\nexport function errorFromControl(\n control: ComputedRef<{ errors: string }>,\n): ComputedRef<string | undefined> {\n return computed(() => trimmedOrUndefined(control.value.errors))\n}\n\n/** True when the resolved control schema marks the field read-only (JSON Schema `readOnly`). */\nexport function isSchemaReadOnly(schema: unknown): boolean {\n if (!schema || typeof schema !== 'object' || Array.isArray(schema)) return false\n return (schema as { readOnly?: unknown }).readOnly === true\n}\n\ntype JsonformsInjected = { readonly?: boolean } | undefined\n\ntype ControlForInputAttrs = {\n enabled: boolean\n schema?: unknown\n uischema?: ControlElement\n config?: { readonly?: boolean; readOnly?: boolean }\n}\n\n/**\n * Nuxt UI text inputs: use native `readonly` only when JSON Schema `readOnly` is why the control\n * is not enabled. Other causes (global JsonForms readonly, UI schema / config readonly, enable\n * rules, etc.) keep `disabled` so behavior stays unchanged.\n */\nexport function controlTextInputAttrs(\n control: ControlForInputAttrs,\n jsonforms: JsonformsInjected,\n): { readonly: boolean; disabled: boolean } {\n const schemaRO = isSchemaReadOnly(control.schema)\n if (!schemaRO) {\n return { readonly: false, disabled: !control.enabled }\n }\n\n if (jsonforms?.readonly === true) {\n return { readonly: false, disabled: !control.enabled }\n }\n\n const ui = control.uischema\n if (typeof ui?.options?.readonly === 'boolean' && ui.options.readonly) {\n return { readonly: false, disabled: !control.enabled }\n }\n if (typeof ui?.options?.readOnly === 'boolean' && ui.options.readOnly) {\n return { readonly: false, disabled: !control.enabled }\n }\n\n const cfg = control.config\n if (typeof cfg?.readonly === 'boolean' && cfg.readonly) {\n return { readonly: false, disabled: !control.enabled }\n }\n if (typeof cfg?.readOnly === 'boolean' && cfg.readOnly) {\n return { readonly: false, disabled: !control.enabled }\n }\n\n if (ui && hasEnableRule(ui) && !control.enabled) {\n return { readonly: false, disabled: true }\n }\n\n return { readonly: true, disabled: false }\n}\n\n","import type { ControlElement, GroupLayout, UISchemaElement } from '@jsonforms/core'\nimport { Generate, findUISchema } from '@jsonforms/core'\nimport {\n DispatchRenderer,\n rendererProps,\n useJsonFormsControlWithDetail,\n} from '@jsonforms/vue'\nimport { computed, defineComponent, h } from 'vue'\n\nexport const NuxtUiObjectRenderer = defineComponent({\n name: 'NuxtUiObjectRenderer',\n components: { DispatchRenderer },\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control } = useJsonFormsControlWithDetail(\n props as unknown as Parameters<typeof useJsonFormsControlWithDetail>[0],\n )\n\n const detailUiSchema = computed<UISchemaElement>(() => {\n const uiSchemaGenerator = () => {\n const uiSchema = Generate.uiSchema(\n control.value.schema,\n 'Group',\n undefined,\n control.value.rootSchema,\n )\n\n if (!control.value.path) {\n uiSchema.type = 'VerticalLayout'\n } else {\n ;(uiSchema as GroupLayout).label = control.value.label\n }\n return uiSchema\n }\n\n return findUISchema(\n control.value.uischemas,\n control.value.schema,\n control.value.uischema.scope,\n control.value.path,\n uiSchemaGenerator,\n control.value.uischema,\n control.value.rootSchema,\n )\n })\n\n return () => {\n if (!control.value.visible) return null\n\n return h(DispatchRenderer as any, {\n visible: control.value.visible,\n enabled: control.value.enabled,\n schema: control.value.schema,\n uischema: detailUiSchema.value,\n path: control.value.path,\n renderers: control.value.renderers,\n cells: control.value.cells,\n })\n }\n },\n})\n\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { computed, defineComponent, h, resolveComponent } from 'vue'\n\nimport { controlDescription, trimmedOrUndefined } from '../util'\n\nexport function createNuxtUiBooleanControl(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiBooleanControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n const modelValue = computed<boolean>({\n get: () => Boolean(control.value.data),\n set: (v: boolean) => handleChange(control.value.path, v),\n })\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const USwitch = resolveComponent('USwitch')\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(\n 'div',\n { class: theme.flexBetween },\n h(USwitch as any, {\n modelValue: modelValue.value,\n disabled: !control.value.enabled,\n 'aria-invalid': Boolean(errorMessage.value),\n 'onUpdate:modelValue': (v: boolean) => {\n modelValue.value = v\n },\n }),\n ),\n },\n ),\n )\n }\n },\n })\n}\n","import type { ControlElement, JsonSchema } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, resolveComponent } from 'vue'\n\nimport { controlDescription, trimmedOrUndefined } from '../util'\n\ntype EnumOption = { label: string; value: unknown }\n\nfunction schemaEnumOptions(schema: JsonSchema | undefined): EnumOption[] {\n if (!schema) return []\n\n if (Array.isArray(schema.enum)) {\n return schema.enum.map((v) => ({ label: String(v), value: v }))\n }\n\n const oneOf = (schema as unknown as { oneOf?: unknown }).oneOf\n if (!Array.isArray(oneOf)) return []\n\n const out: EnumOption[] = []\n for (const entry of oneOf) {\n if (typeof entry !== 'object' || entry === null) continue\n const maybe = entry as Record<string, unknown>\n if (!('const' in maybe)) continue\n out.push({\n value: maybe.const,\n label:\n typeof maybe.title === 'string' && maybe.title.trim()\n ? maybe.title\n : String(maybe.const),\n })\n }\n return out\n}\n\nexport const NuxtUiEnumControl = defineComponent({\n name: 'NuxtUiEnumControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n const options = computed<EnumOption[]>(() => schemaEnumOptions(control.value.schema))\n\n const selectedValue = computed<unknown>({\n get: () => control.value.data,\n set: (v: unknown) => handleChange(control.value.path, v),\n })\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const USelectMenu = resolveComponent('USelectMenu')\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(USelectMenu as any, {\n modelValue: selectedValue.value,\n items: options.value,\n valueKey: 'value',\n labelKey: 'label',\n disabled: !control.value.enabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n placeholder: 'Select...',\n 'onUpdate:modelValue': (v: unknown) => {\n selectedValue.value = v\n },\n }),\n },\n ),\n )\n }\n },\n})\n\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, inject, resolveComponent } from 'vue'\n\nimport { controlDescription, controlTextInputAttrs, trimmedOrUndefined } from '../util'\n\nexport const NuxtUiIntegerControl = defineComponent({\n name: 'NuxtUiIntegerControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n const modelValue = computed(() => {\n const v = control.value.data\n return v === null || v === undefined ? '' : String(v)\n })\n\n function onUpdate(raw: unknown) {\n const trimmed = String(raw ?? '').trim()\n if (trimmed === '') {\n handleChange(control.value.path, undefined)\n return\n }\n\n const parsed = Number.parseInt(trimmed, 10)\n handleChange(control.value.path, Number.isFinite(parsed) ? parsed : undefined)\n }\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UInput = resolveComponent('UInput')\n const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms)\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(UInput as any, {\n type: 'number',\n inputmode: 'numeric',\n step: '1',\n modelValue: modelValue.value,\n readonly,\n disabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n 'onUpdate:modelValue': onUpdate,\n }),\n },\n ),\n )\n }\n },\n})\n\n","import type { ControlElement, JsonSchema } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, resolveComponent } from 'vue'\n\nimport { controlDescription, trimmedOrUndefined } from '../util'\n\ntype EnumOption = { label: string; value: unknown }\n\nfunction schemaEnumOptions(schema: JsonSchema | undefined): EnumOption[] {\n if (!schema) return []\n\n if (Array.isArray(schema.enum)) {\n return schema.enum.map((v) => ({ label: String(v), value: v }))\n }\n\n const oneOf = (schema as unknown as { oneOf?: unknown }).oneOf\n if (!Array.isArray(oneOf)) return []\n\n const out: EnumOption[] = []\n for (const entry of oneOf) {\n if (typeof entry !== 'object' || entry === null) continue\n const maybe = entry as Record<string, unknown>\n if (!('const' in maybe)) continue\n out.push({\n value: maybe.const,\n label:\n typeof maybe.title === 'string' && maybe.title.trim()\n ? maybe.title\n : String(maybe.const),\n })\n }\n return out\n}\n\nfunction arrayItemsSchema(schema: JsonSchema | undefined): JsonSchema | undefined {\n if (!schema) return undefined\n const items = (schema as unknown as { items?: unknown }).items\n if (typeof items !== 'object' || items === null) return undefined\n return items as JsonSchema\n}\n\nexport const NuxtUiMultiEnumControl = defineComponent({\n name: 'NuxtUiMultiEnumControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n const options = computed<EnumOption[]>(() =>\n schemaEnumOptions(arrayItemsSchema(control.value.schema)),\n )\n\n const selectedValues = computed<unknown[]>({\n get: () => (Array.isArray(control.value.data) ? control.value.data : []),\n set: (v: unknown[]) => handleChange(control.value.path, v),\n })\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const USelectMenu = resolveComponent('USelectMenu')\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(USelectMenu as any, {\n multiple: true,\n modelValue: selectedValues.value,\n items: options.value,\n valueKey: 'value',\n labelKey: 'label',\n disabled: !control.value.enabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n placeholder: 'Select...',\n 'onUpdate:modelValue': (v: unknown) => {\n selectedValues.value = Array.isArray(v) ? v : []\n },\n }),\n },\n ),\n )\n }\n },\n})\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, inject, resolveComponent } from 'vue'\n\nimport { controlDescription, controlTextInputAttrs, trimmedOrUndefined } from '../util'\n\nexport const NuxtUiNumberControl = defineComponent({\n name: 'NuxtUiNumberControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n const modelValue = computed(() => {\n const v = control.value.data\n return v === null || v === undefined ? '' : String(v)\n })\n\n function onUpdate(raw: unknown) {\n const trimmed = String(raw ?? '').trim()\n if (trimmed === '') {\n handleChange(control.value.path, undefined)\n return\n }\n const parsed = Number(trimmed)\n handleChange(control.value.path, Number.isFinite(parsed) ? parsed : undefined)\n }\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UInput = resolveComponent('UInput')\n const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms)\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(UInput as any, {\n type: 'number',\n inputmode: 'decimal',\n modelValue: modelValue.value,\n readonly,\n disabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n 'onUpdate:modelValue': onUpdate,\n }),\n },\n ),\n )\n }\n },\n})\n\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, inject, ref, resolveComponent } from 'vue'\n\nimport { controlDescription, controlTextInputAttrs, trimmedOrUndefined } from '../util'\n\nexport const NuxtUiPasswordControl = defineComponent({\n name: 'NuxtUiPasswordControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n const showPassword = ref(false)\n\n const inputType = computed(() => (showPassword.value ? 'text' : 'password'))\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UInput = resolveComponent('UInput')\n const UButton = resolveComponent('UButton')\n const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms)\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(\n UInput as any,\n {\n modelValue: control.value.data ?? '',\n class: 'w-full',\n type: inputType.value,\n autocomplete: 'current-password',\n readonly,\n disabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n 'onUpdate:modelValue': (v: unknown) =>\n handleChange(control.value.path, v),\n },\n {\n trailing: () =>\n h(UButton as any, {\n type: 'button',\n color: 'neutral',\n variant: 'ghost',\n square: true,\n icon: showPassword.value\n ? 'i-heroicons-eye-slash'\n : 'i-heroicons-eye',\n 'aria-pressed': showPassword.value,\n 'aria-label': showPassword.value\n ? 'Hide password'\n : 'Show password',\n disabled,\n onClick: () => {\n showPassword.value = !showPassword.value\n },\n }),\n },\n ),\n },\n ),\n )\n }\n },\n})\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport {\n computed,\n defineComponent,\n h,\n inject,\n resolveComponent,\n} from 'vue'\n\nimport {\n controlDescription,\n controlTextInputAttrs,\n renderDocsHintSlot,\n trimmedOrUndefined,\n} from '../util'\n\nexport function createNuxtUiStringControl(\n docsUrl?: (path: string) => string,\n) {\n return defineComponent({\n name: 'NuxtUiStringControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() =>\n trimmedOrUndefined(control.value.errors),\n )\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UInput = resolveComponent('UInput')\n const { readonly, disabled } = controlTextInputAttrs(\n control.value,\n jsonforms,\n )\n\n const slots: Record<string, () => ReturnType<typeof h>> = {\n default: () =>\n h(UInput as any, {\n modelValue: control.value.data ?? '',\n class: 'w-full',\n readonly,\n disabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n 'onUpdate:modelValue': (v: unknown) =>\n handleChange(control.value.path, v),\n }),\n }\n const hintSlot = renderDocsHintSlot(\n control.value.schema,\n control.value.label ?? '',\n docsUrl,\n resolveComponent,\n )\n if (hintSlot) slots.hint = hintSlot\n\n return h(\n 'div',\n {},\n h(UFormField as any, {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n }, slots),\n )\n }\n },\n })\n}\n\n\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, inject, resolveComponent } from 'vue'\n\nimport { controlDescription, controlTextInputAttrs, trimmedOrUndefined } from '../util'\n\nexport const NuxtUiTextareaControl = defineComponent({\n name: 'NuxtUiTextareaControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UTextarea = resolveComponent('UTextarea')\n const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms)\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(UTextarea as any, {\n modelValue: control.value.data ?? '',\n class: 'w-full',\n readonly,\n disabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n rows: 5,\n 'onUpdate:modelValue': (v: unknown) =>\n handleChange(control.value.path, v),\n }),\n },\n ),\n )\n }\n },\n})\n\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsCategorization } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiCategorizationRenderer(\n theme: NuxtUiRenderersTheme,\n) {\n return defineComponent({\n name: 'NuxtUiCategorizationRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout, categories } = useJsonFormsCategorization(\n props as unknown as Parameters<typeof useJsonFormsCategorization>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n return h(\n 'div',\n { class: theme.layoutVerticalWide },\n categories.map((categoryRef, catIndex) => {\n const category = categoryRef.value\n const elements = category.uischema.elements ?? []\n\n return h(\n 'div',\n {\n key: `${layout.value.path}-cat-${catIndex}`,\n class: theme.layoutVertical,\n },\n [\n category.label\n ? h('div', { class: theme.labelSection }, category.label)\n : null,\n h(\n 'div',\n { class: theme.layoutVertical },\n elements.map((element, index) =>\n h(\n 'div',\n { key: `${category.path}-${index}` },\n h(DispatchRenderer as any, {\n schema: category.schema,\n uischema: element,\n path: category.path,\n enabled: category.enabled,\n renderers: category.renderers,\n cells: category.cells,\n }),\n ),\n ),\n ),\n ],\n )\n }),\n )\n }\n },\n })\n}\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsLayout } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiCategoryRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiCategoryRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout } = useJsonFormsLayout(\n props as unknown as Parameters<typeof useJsonFormsLayout>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n const elements = layout.value.uischema.elements ?? []\n\n return h('div', { class: theme.layoutVertical }, [\n layout.value.label\n ? h('div', { class: theme.labelSection }, layout.value.label)\n : null,\n h(\n 'div',\n { class: theme.layoutVertical },\n elements.map((element, index) =>\n h(\n 'div',\n { key: `${layout.value.path}-${index}` },\n h(DispatchRenderer as any, {\n schema: layout.value.schema,\n uischema: element,\n path: layout.value.path,\n enabled: layout.value.enabled,\n renderers: layout.value.renderers,\n cells: layout.value.cells,\n }),\n ),\n ),\n ),\n ])\n }\n },\n })\n}\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsLayout } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiGroupRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiGroupRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout } = useJsonFormsLayout(\n props as unknown as Parameters<typeof useJsonFormsLayout>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n const elements = layout.value.uischema.elements ?? []\n const isNested = layout.value.path?.includes('.') ?? false\n const containerClass = isNested ? theme.groupNested : theme.panel\n\n return h(\n 'div',\n { class: containerClass },\n [\n layout.value.label\n ? h('div', { class: theme.labelSectionSpaced }, layout.value.label)\n : null,\n h(\n 'div',\n { class: theme.layoutVertical },\n elements.map((element, index) =>\n h(\n 'div',\n { key: `${layout.value.path}-${index}` },\n h(DispatchRenderer as any, {\n schema: layout.value.schema,\n uischema: element,\n path: layout.value.path,\n enabled: layout.value.enabled,\n renderers: layout.value.renderers,\n cells: layout.value.cells,\n }),\n ),\n ),\n ),\n ],\n )\n }\n },\n })\n}\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsLayout } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiHorizontalLayoutRenderer(\n theme: NuxtUiRenderersTheme,\n) {\n return defineComponent({\n name: 'NuxtUiHorizontalLayoutRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout } = useJsonFormsLayout(\n props as unknown as Parameters<typeof useJsonFormsLayout>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n const elements = layout.value.uischema.elements ?? []\n\n return h(\n 'div',\n { class: theme.layoutHorizontal },\n elements.map((element, index) =>\n h(\n 'div',\n {\n key: `${layout.value.path}-${index}`,\n class: theme.layoutHorizontalItem,\n },\n h(DispatchRenderer as any, {\n schema: layout.value.schema,\n uischema: element,\n path: layout.value.path,\n enabled: layout.value.enabled,\n renderers: layout.value.renderers,\n cells: layout.value.cells,\n }),\n ),\n ),\n )\n }\n },\n })\n}\n","import type { LabelElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsLabel } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiLabelRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiLabelRenderer',\n props: rendererProps<LabelElement>(),\n setup(props) {\n const { label } = useJsonFormsLabel(\n props as unknown as Parameters<typeof useJsonFormsLabel>[0],\n )\n\n return () => {\n if (!label.value.visible) return null\n return h('div', { class: theme.textLabel }, label.value.text)\n }\n },\n })\n}\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsLayout } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiVerticalLayoutRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiVerticalLayoutRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout } = useJsonFormsLayout(\n props as unknown as Parameters<typeof useJsonFormsLayout>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n const elements = layout.value.uischema.elements ?? []\n\n return h(\n 'div',\n { class: theme.layoutVertical },\n elements.map((element, index) =>\n h(\n 'div',\n { key: `${layout.value.path}-${index}` },\n h(DispatchRenderer as any, {\n schema: layout.value.schema,\n uischema: element,\n path: layout.value.path,\n enabled: layout.value.enabled,\n renderers: layout.value.renderers,\n cells: layout.value.cells,\n }),\n ),\n ),\n )\n }\n },\n })\n}\n","/**\n * Theme for JSONForms Nuxt UI renderers.\n * Uses semantic class names (jf-*) - styled by default styles.css.\n * Consumers can override any role with custom classes (Tailwind, Bootstrap, etc.).\n */\n\nexport interface NuxtUiRenderersTheme {\n /** Bordered panel (top-level groups, array items). */\n panel: string\n /** Nested group container (no border, padding only). */\n groupNested: string\n /** Vertical stack layout. */\n layoutVertical: string\n /** Vertical stack with wider gap (categorization). */\n layoutVerticalWide: string\n /** Horizontal layout, responsive. */\n layoutHorizontal: string\n /** Child of horizontal layout (flex grow, min-width). */\n layoutHorizontalItem: string\n /** Array item toolbar (flex + margin). */\n arrayItemToolbar: string\n /** Section/category label. */\n labelSection: string\n /** Section label with bottom margin. */\n labelSectionSpaced: string\n /** Muted secondary text. */\n textMuted: string\n /** Muted secondary text, smaller. */\n textMutedXs: string\n /** Array item title. */\n textItemTitle: string\n /** Suffix after item title. */\n textItemSuffix: string\n /** Plain label. */\n textLabel: string\n /** Flex row: centered, space between. */\n flexBetween: string\n /** Flex row: start-aligned, space between. */\n flexBetweenStart: string\n /** Compact flex row for action buttons. */\n flexActions: string\n}\n\n/** Semantic class defaults - styled by styles.css. No Tailwind/CSS framework dependency. */\nexport const defaultTheme: NuxtUiRenderersTheme = {\n panel: 'jf-panel',\n groupNested: 'jf-group',\n layoutVertical: 'jf-layout-vertical',\n layoutVerticalWide: 'jf-layout-vertical-wide',\n layoutHorizontal: 'jf-layout-horizontal',\n layoutHorizontalItem: 'jf-layout-horizontal-item',\n arrayItemToolbar: 'jf-array-item-toolbar',\n labelSection: 'jf-label-section',\n labelSectionSpaced: 'jf-label-section-spaced',\n textMuted: 'jf-text-muted',\n textMutedXs: 'jf-text-muted-xs',\n textItemTitle: 'jf-text-item-title',\n textItemSuffix: 'jf-text-item-suffix',\n textLabel: 'jf-text-label',\n flexBetween: 'jf-flex-between',\n flexBetweenStart: 'jf-flex-between-start',\n flexActions: 'jf-flex-actions',\n}\n\nexport function mergeTheme(\n overrides?: Partial<NuxtUiRenderersTheme>,\n): NuxtUiRenderersTheme {\n return overrides ? { ...defaultTheme, ...overrides } : { ...defaultTheme }\n}\n"],"mappings":"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","names":["import_core","import_vue","import_core","import_vue","import_vue","resolveComponent","import_core","import_vue","import_vue","import_vue","import_vue","import_vue","schemaEnumOptions","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/nuxtUiRenderers.ts","../src/renderers/complex/NuxtUiArrayListRenderer.ts","../src/renderers/util.ts","../src/renderers/complex/NuxtUiObjectRenderer.ts","../src/renderers/controls/NuxtUiBooleanControl.ts","../src/renderers/controls/NuxtUiEnumControl.ts","../src/renderers/controls/NuxtUiIntegerControl.ts","../src/renderers/controls/NuxtUiMultiEnumControl.ts","../src/renderers/controls/NuxtUiNumberControl.ts","../src/renderers/controls/NuxtUiPasswordControl.ts","../src/renderers/controls/NuxtUiStringControl.ts","../src/renderers/controls/NuxtUiTextareaControl.ts","../src/renderers/layouts/NuxtUiCategorizationRenderer.ts","../src/renderers/layouts/NuxtUiCategoryRenderer.ts","../src/renderers/layouts/NuxtUiGroupRenderer.ts","../src/renderers/layouts/NuxtUiHorizontalLayoutRenderer.ts","../src/renderers/layouts/NuxtUiLabelRenderer.ts","../src/renderers/layouts/NuxtUiVerticalLayoutRenderer.ts","../src/renderers/theme.ts"],"sourcesContent":["export {\n createNuxtUiRenderers,\n nuxtUiRenderers,\n} from './nuxtUiRenderers'\nexport type { CreateNuxtUiRenderersOptions } from './nuxtUiRenderers'\nexport { controlDescription, getDocsPathFromSchema } from './renderers/util'\nexport type { JsonFormsRendererRegistryEntry } from '@jsonforms/core'\nexport {\n defaultTheme,\n mergeTheme,\n type NuxtUiRenderersTheme,\n} from './renderers/theme'\n","import type { JsonFormsRendererRegistryEntry } from '@jsonforms/core'\nimport {\n and,\n formatIs,\n isBooleanControl,\n isEnumControl,\n isEnumSchema,\n isIntegerControl,\n isMultiLineControl,\n isNumberControl,\n isObjectControl,\n isStringControl,\n rankWith,\n Resolve,\n schemaTypeIs,\n uiTypeIs,\n} from '@jsonforms/core'\nimport { markRaw } from 'vue'\n\nimport { createNuxtUiArrayListRenderer } from './renderers/complex/NuxtUiArrayListRenderer'\nimport { NuxtUiObjectRenderer } from './renderers/complex/NuxtUiObjectRenderer'\nimport { createNuxtUiBooleanControl } from './renderers/controls/NuxtUiBooleanControl'\nimport { NuxtUiEnumControl } from './renderers/controls/NuxtUiEnumControl'\nimport { NuxtUiIntegerControl } from './renderers/controls/NuxtUiIntegerControl'\nimport { NuxtUiMultiEnumControl } from './renderers/controls/NuxtUiMultiEnumControl'\nimport { NuxtUiNumberControl } from './renderers/controls/NuxtUiNumberControl'\nimport { NuxtUiPasswordControl } from './renderers/controls/NuxtUiPasswordControl'\nimport { createNuxtUiStringControl } from './renderers/controls/NuxtUiStringControl'\nimport { NuxtUiTextareaControl } from './renderers/controls/NuxtUiTextareaControl'\nimport { createNuxtUiCategorizationRenderer } from './renderers/layouts/NuxtUiCategorizationRenderer'\nimport { createNuxtUiCategoryRenderer } from './renderers/layouts/NuxtUiCategoryRenderer'\nimport { createNuxtUiGroupRenderer } from './renderers/layouts/NuxtUiGroupRenderer'\nimport { createNuxtUiHorizontalLayoutRenderer } from './renderers/layouts/NuxtUiHorizontalLayoutRenderer'\nimport { createNuxtUiLabelRenderer } from './renderers/layouts/NuxtUiLabelRenderer'\nimport { createNuxtUiVerticalLayoutRenderer } from './renderers/layouts/NuxtUiVerticalLayoutRenderer'\nimport {\n mergeTheme,\n type NuxtUiRenderersTheme,\n} from './renderers/theme'\n\n// Intentionally rank higher than typical defaults.\nconst RANK = 10\nconst ENUM_RANK = RANK + 1\nconst PASSWORD_RANK = ENUM_RANK + 1\n\nconst isMultiEnumControl = (\n uischema: unknown,\n schema: unknown,\n context: unknown,\n): boolean => {\n if (!uiTypeIs('Control')(uischema as any, schema as any, context as any)) {\n return false\n }\n\n const scope = (uischema as any)?.scope\n if (typeof scope !== 'string') return false\n\n // JSONForms passes the root schema into testers, but different call sites can\n // vary. Resolve against whatever we have, preferring the provided rootSchema.\n const rootSchema = (context as any)?.rootSchema ?? (schema as any)\n let resolved: any\n try {\n resolved = Resolve.schema(schema as any, scope, rootSchema)\n } catch {\n return false\n }\n\n if (resolved?.type !== 'array') return false\n\n const items = resolved?.items\n if (!items) return false\n\n // JSON Schema `items` can be a schema or an array of schemas.\n if (Array.isArray(items)) return false\n if (typeof items !== 'object' || items === null) return false\n\n const resolvedItems =\n '$ref' in items && typeof (items as any).$ref === 'string'\n ? Resolve.schema(rootSchema, (items as any).$ref, rootSchema)\n : items\n\n return isEnumSchema(resolvedItems as any)\n}\n\n/** Matches oneOf: [{ const, title? }, ...] - enum-like schema with display labels. */\nconst isOneOfEnumControl = (\n uischema: unknown,\n schema: unknown,\n context: unknown,\n): boolean => {\n if (!uiTypeIs('Control')(uischema as any, schema as any, context as any)) {\n return false\n }\n\n const scope = (uischema as any)?.scope\n if (typeof scope !== 'string') return false\n\n const rootSchema = (context as any)?.rootSchema ?? (schema as any)\n let resolved: any\n try {\n resolved = Resolve.schema(schema as any, scope, rootSchema)\n } catch {\n return false\n }\n\n const oneOf = resolved?.oneOf\n if (!Array.isArray(oneOf) || oneOf.length === 0) return false\n\n for (const entry of oneOf) {\n if (typeof entry !== 'object' || entry === null) continue\n if (!('const' in (entry as Record<string, unknown>))) return false\n }\n return true\n}\n\nexport interface CreateNuxtUiRenderersOptions {\n /** Override theme classes. Use semantic jf-* or custom (Tailwind, etc.). */\n theme?: Partial<NuxtUiRenderersTheme>\n /**\n * Build full docs URL from schema x-docs-path.\n * When provided, controls with x-docs-path show a docs link next to the label.\n */\n docsUrl?: (path: string) => string\n}\n\nexport function createNuxtUiRenderers(\n options?: CreateNuxtUiRenderersOptions,\n): JsonFormsRendererRegistryEntry[] {\n const theme = mergeTheme(options?.theme)\n const docsUrl = options?.docsUrl\n\n return [\n // Layouts\n {\n tester: rankWith(RANK, uiTypeIs('VerticalLayout')),\n renderer: markRaw(createNuxtUiVerticalLayoutRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('HorizontalLayout')),\n renderer: markRaw(createNuxtUiHorizontalLayoutRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('Group')),\n renderer: markRaw(createNuxtUiGroupRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('Categorization')),\n renderer: markRaw(createNuxtUiCategorizationRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('Category')),\n renderer: markRaw(createNuxtUiCategoryRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('Label')),\n renderer: markRaw(createNuxtUiLabelRenderer(theme)),\n },\n\n // Complex schemas\n {\n tester: rankWith(RANK, schemaTypeIs('array')),\n renderer: markRaw(createNuxtUiArrayListRenderer(theme)),\n },\n {\n tester: rankWith(RANK, isObjectControl),\n renderer: markRaw(NuxtUiObjectRenderer),\n },\n\n // Primitive controls\n {\n tester: rankWith(RANK, isMultiLineControl),\n renderer: markRaw(NuxtUiTextareaControl),\n },\n {\n tester: rankWith(RANK, isNumberControl),\n renderer: markRaw(NuxtUiNumberControl),\n },\n {\n tester: rankWith(RANK, isIntegerControl),\n renderer: markRaw(NuxtUiIntegerControl),\n },\n {\n tester: rankWith(RANK, isBooleanControl),\n renderer: markRaw(createNuxtUiBooleanControl(theme)),\n },\n {\n // Multi-enum must outrank generic array renderer and string renderer.\n tester: rankWith(ENUM_RANK, isMultiEnumControl),\n renderer: markRaw(NuxtUiMultiEnumControl),\n },\n {\n // oneOf with const+title (display labels) - same as enum for rendering.\n tester: rankWith(ENUM_RANK, isOneOfEnumControl),\n renderer: markRaw(NuxtUiEnumControl),\n },\n {\n // Enum must outrank the generic string control, otherwise enums render\n // as freeform text inputs.\n tester: rankWith(ENUM_RANK, isEnumControl),\n renderer: markRaw(NuxtUiEnumControl),\n },\n {\n tester: rankWith(PASSWORD_RANK, and(isStringControl, formatIs('password'))),\n renderer: markRaw(NuxtUiPasswordControl),\n },\n {\n tester: rankWith(RANK, isStringControl),\n renderer: markRaw(createNuxtUiStringControl(docsUrl)),\n },\n ]\n}\n\n/** Default renderers with semantic theme. Import styles.css for default styling. */\nexport const nuxtUiRenderers: JsonFormsRendererRegistryEntry[] =\n createNuxtUiRenderers()\n","import type { ControlElement, JsonSchema, UISchemaElement } from '@jsonforms/core'\nimport {\n Resolve,\n composePaths,\n createDefaultValue,\n findUISchema,\n getFirstPrimitiveProp,\n} from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsArrayControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, resolveComponent } from 'vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { trimmedOrUndefined } from '../util'\n\nexport function createNuxtUiArrayListRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiArrayListRenderer',\n components: { DispatchRenderer },\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, addItem, removeItems, moveUp, moveDown } =\n useJsonFormsArrayControl(\n props as unknown as Parameters<typeof useJsonFormsArrayControl>[0],\n )\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n const items = computed<unknown[]>(() =>\n Array.isArray(control.value.data) ? control.value.data : [],\n )\n\n const arraySchema = computed<JsonSchema | undefined>(() => {\n try {\n return Resolve.schema(\n props.schema,\n control.value.uischema.scope,\n control.value.rootSchema,\n )\n } catch {\n return undefined\n }\n })\n\n const maxItemsReached = computed(() => {\n const max = arraySchema.value?.maxItems\n return typeof max === 'number' ? items.value.length >= max : false\n })\n\n const minItemsReached = computed(() => {\n const min = arraySchema.value?.minItems\n return typeof min === 'number' ? items.value.length <= min : false\n })\n\n const childUiSchema = computed<UISchemaElement>(() =>\n findUISchema(\n control.value.uischemas,\n control.value.schema,\n control.value.uischema.scope,\n control.value.path,\n undefined,\n control.value.uischema,\n control.value.rootSchema,\n ),\n )\n\n function childLabelForIndex(index: number): string {\n const childLabelProp =\n getChildLabelPropFromUiSchemaOptions(control.value.uischema.options) ??\n getFirstPrimitiveProp(control.value.schema)\n\n if (!childLabelProp) return `${index}`\n\n const labelValue = Resolve.data(\n control.value.data,\n composePaths(`${index}`, childLabelProp),\n )\n if (\n labelValue === undefined ||\n labelValue === null ||\n Number.isNaN(labelValue as any)\n ) {\n return ''\n }\n return String(labelValue)\n }\n\n function getChildLabelPropFromUiSchemaOptions(\n options: unknown,\n ): string | undefined {\n if (!options || typeof options !== 'object') return undefined\n const value = (options as Record<string, unknown>).childLabelProp\n return typeof value === 'string' ? value : undefined\n }\n\n function addButtonClick() {\n addItem(\n control.value.path,\n createDefaultValue(control.value.schema, control.value.rootSchema),\n )()\n }\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UButton = resolveComponent('UButton')\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: control.value.description,\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h('div', { class: theme.layoutVertical }, [\n h('div', { class: theme.flexBetween }, [\n h(\n 'div',\n { class: theme.textMutedXs },\n `${items.value.length} items`,\n ),\n h(\n UButton as any,\n {\n type: 'button',\n size: 'xs',\n variant: 'soft',\n color: 'neutral',\n disabled:\n !control.value.enabled || maxItemsReached.value,\n onClick: addButtonClick,\n },\n { default: () => 'Add' },\n ),\n ]),\n\n items.value.length === 0\n ? h('div', { class: theme.textMuted }, 'No items.')\n : null,\n\n ...items.value.map((_item, index) =>\n h(\n 'div',\n {\n key: `${control.value.path}-${index}`,\n class: theme.panel,\n },\n [\n h(\n 'div',\n { class: theme.arrayItemToolbar },\n [\n h('div', { class: 'jf-min-w-0' }, [\n h(\n 'div',\n { class: theme.textItemTitle },\n [\n `Item ${index + 1}`,\n childLabelForIndex(index)\n ? h(\n 'span',\n { class: theme.textItemSuffix },\n ` — ${childLabelForIndex(index)}`,\n )\n : null,\n ],\n ),\n ]),\n h('div', { class: theme.flexActions }, [\n h(\n UButton as any,\n {\n type: 'button',\n size: 'xs',\n variant: 'ghost',\n color: 'neutral',\n disabled:\n !control.value.enabled || index === 0,\n onClick: () =>\n moveUp?.(control.value.path, index)(),\n },\n { default: () => 'Up' },\n ),\n h(\n UButton as any,\n {\n type: 'button',\n size: 'xs',\n variant: 'ghost',\n color: 'neutral',\n disabled:\n !control.value.enabled ||\n index >= items.value.length - 1,\n onClick: () =>\n moveDown?.(control.value.path, index)(),\n },\n { default: () => 'Down' },\n ),\n h(\n UButton as any,\n {\n type: 'button',\n size: 'xs',\n variant: 'ghost',\n color: 'error',\n disabled:\n !control.value.enabled ||\n minItemsReached.value,\n onClick: () =>\n removeItems?.(control.value.path, [\n index,\n ])(),\n },\n { default: () => 'Remove' },\n ),\n ]),\n ],\n ),\n\n h(DispatchRenderer as any, {\n schema: control.value.schema,\n uischema: childUiSchema.value,\n path: composePaths(control.value.path, `${index}`),\n enabled: control.value.enabled,\n renderers: control.value.renderers,\n cells: control.value.cells,\n }),\n ],\n ),\n ),\n ]),\n },\n ),\n )\n }\n },\n })\n}\n","import type { ControlElement } from '@jsonforms/core'\nimport { hasEnableRule } from '@jsonforms/core'\nimport type { VNode } from 'vue'\nimport { h } from 'vue'\nimport { computed, type ComputedRef } from 'vue'\n\n/**\n * Extract x-docs-path from a JSON Schema property.\n * Returns the path when present and valid (starts with /), otherwise null.\n */\nexport function getDocsPathFromSchema(schema: unknown): string | null {\n if (!schema || typeof schema !== 'object' || Array.isArray(schema))\n return null\n const s = schema as Record<string, unknown>\n const path = s['x-docs-path']\n if (typeof path === 'string' && path.startsWith('/')) return path\n return null\n}\n\n/**\n * Render a docs link hint for UFormField when schema has x-docs-path.\n * Returns a slot render function or undefined when no docs URL.\n */\nexport function renderDocsHintSlot(\n schema: unknown,\n label: string,\n docsUrl: ((path: string) => string) | undefined,\n resolveComponent: (name: string) => unknown,\n): (() => VNode) | undefined {\n const path = getDocsPathFromSchema(schema)\n if (!path || !docsUrl) return undefined\n const ULink = resolveComponent('ULink')\n const UIcon = resolveComponent('UIcon')\n if (!ULink || !UIcon) return undefined\n const href = docsUrl(path)\n return () =>\n h(\n ULink as any,\n {\n href,\n target: '_blank',\n rel: 'noopener noreferrer',\n class: 'inline-flex items-center text-muted hover:text-primary',\n 'aria-label': `${label} docs`,\n title: `${label} docs`,\n },\n () => h(UIcon as any, { name: 'i-heroicons-information-circle' }),\n )\n}\n\nexport function trimmedOrUndefined(input: string | undefined): string | undefined {\n const v = input?.trim()\n return v ? v : undefined\n}\n\n/**\n * Resolves the control's description for the label/field.\n * Uses control.description when set, otherwise falls back to schema.description.\n */\nexport function controlDescription(control: {\n description?: string\n schema?: { description?: string }\n}): string | undefined {\n const d = control.description?.trim()\n if (d) return d\n const sd = (control.schema as { description?: string } | undefined)?.description\n return typeof sd === 'string' && sd.trim() ? sd.trim() : undefined\n}\n\nexport function errorFromControl(\n control: ComputedRef<{ errors: string }>,\n): ComputedRef<string | undefined> {\n return computed(() => trimmedOrUndefined(control.value.errors))\n}\n\n/** True when the resolved control schema marks the field read-only (JSON Schema `readOnly`). */\nexport function isSchemaReadOnly(schema: unknown): boolean {\n if (!schema || typeof schema !== 'object' || Array.isArray(schema)) return false\n return (schema as { readOnly?: unknown }).readOnly === true\n}\n\ntype JsonformsInjected = { readonly?: boolean } | undefined\n\ntype ControlForInputAttrs = {\n enabled: boolean\n schema?: unknown\n uischema?: ControlElement\n config?: { readonly?: boolean; readOnly?: boolean }\n}\n\n/**\n * Nuxt UI text inputs: use native `readonly` only when JSON Schema `readOnly` is why the control\n * is not enabled. Other causes (global JsonForms readonly, UI schema / config readonly, enable\n * rules, etc.) keep `disabled` so behavior stays unchanged.\n */\nexport function controlTextInputAttrs(\n control: ControlForInputAttrs,\n jsonforms: JsonformsInjected,\n): { readonly: boolean; disabled: boolean } {\n const schemaRO = isSchemaReadOnly(control.schema)\n if (!schemaRO) {\n return { readonly: false, disabled: !control.enabled }\n }\n\n if (jsonforms?.readonly === true) {\n return { readonly: false, disabled: !control.enabled }\n }\n\n const ui = control.uischema\n if (typeof ui?.options?.readonly === 'boolean' && ui.options.readonly) {\n return { readonly: false, disabled: !control.enabled }\n }\n if (typeof ui?.options?.readOnly === 'boolean' && ui.options.readOnly) {\n return { readonly: false, disabled: !control.enabled }\n }\n\n const cfg = control.config\n if (typeof cfg?.readonly === 'boolean' && cfg.readonly) {\n return { readonly: false, disabled: !control.enabled }\n }\n if (typeof cfg?.readOnly === 'boolean' && cfg.readOnly) {\n return { readonly: false, disabled: !control.enabled }\n }\n\n if (ui && hasEnableRule(ui) && !control.enabled) {\n return { readonly: false, disabled: true }\n }\n\n return { readonly: true, disabled: false }\n}\n\n","import type { ControlElement, GroupLayout, UISchemaElement } from '@jsonforms/core'\nimport { Generate, findUISchema } from '@jsonforms/core'\nimport {\n DispatchRenderer,\n rendererProps,\n useJsonFormsControlWithDetail,\n} from '@jsonforms/vue'\nimport { computed, defineComponent, h } from 'vue'\n\nexport const NuxtUiObjectRenderer = defineComponent({\n name: 'NuxtUiObjectRenderer',\n components: { DispatchRenderer },\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control } = useJsonFormsControlWithDetail(\n props as unknown as Parameters<typeof useJsonFormsControlWithDetail>[0],\n )\n\n const detailUiSchema = computed<UISchemaElement>(() => {\n const uiSchemaGenerator = () => {\n const uiSchema = Generate.uiSchema(\n control.value.schema,\n 'Group',\n undefined,\n control.value.rootSchema,\n )\n\n if (!control.value.path) {\n uiSchema.type = 'VerticalLayout'\n } else {\n ;(uiSchema as GroupLayout).label = control.value.label\n }\n return uiSchema\n }\n\n return findUISchema(\n control.value.uischemas,\n control.value.schema,\n control.value.uischema.scope,\n control.value.path,\n uiSchemaGenerator,\n control.value.uischema,\n control.value.rootSchema,\n )\n })\n\n return () => {\n if (!control.value.visible) return null\n\n return h(DispatchRenderer as any, {\n visible: control.value.visible,\n enabled: control.value.enabled,\n schema: control.value.schema,\n uischema: detailUiSchema.value,\n path: control.value.path,\n renderers: control.value.renderers,\n cells: control.value.cells,\n })\n }\n },\n})\n\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { computed, defineComponent, h, resolveComponent } from 'vue'\n\nimport { controlDescription, trimmedOrUndefined } from '../util'\n\nexport function createNuxtUiBooleanControl(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiBooleanControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n const modelValue = computed<boolean>({\n get: () => Boolean(control.value.data),\n set: (v: boolean) => handleChange(control.value.path, v),\n })\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const USwitch = resolveComponent('USwitch')\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(\n 'div',\n { class: theme.flexBetween },\n h(USwitch as any, {\n modelValue: modelValue.value,\n disabled: !control.value.enabled,\n 'aria-invalid': Boolean(errorMessage.value),\n 'onUpdate:modelValue': (v: boolean) => {\n modelValue.value = v\n },\n }),\n ),\n },\n ),\n )\n }\n },\n })\n}\n","import type { ControlElement, JsonSchema } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, resolveComponent } from 'vue'\n\nimport { controlDescription, trimmedOrUndefined } from '../util'\n\ntype EnumOption = { label: string; value: unknown }\n\nfunction schemaEnumOptions(schema: JsonSchema | undefined): EnumOption[] {\n if (!schema) return []\n\n if (Array.isArray(schema.enum)) {\n return schema.enum.map((v) => ({ label: String(v), value: v }))\n }\n\n const oneOf = (schema as unknown as { oneOf?: unknown }).oneOf\n if (!Array.isArray(oneOf)) return []\n\n const out: EnumOption[] = []\n for (const entry of oneOf) {\n if (typeof entry !== 'object' || entry === null) continue\n const maybe = entry as Record<string, unknown>\n if (!('const' in maybe)) continue\n out.push({\n value: maybe.const,\n label:\n typeof maybe.title === 'string' && maybe.title.trim()\n ? maybe.title\n : String(maybe.const),\n })\n }\n return out\n}\n\nexport const NuxtUiEnumControl = defineComponent({\n name: 'NuxtUiEnumControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n const options = computed<EnumOption[]>(() => schemaEnumOptions(control.value.schema))\n\n const selectedValue = computed<unknown>({\n get: () => control.value.data,\n set: (v: unknown) => handleChange(control.value.path, v),\n })\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const USelectMenu = resolveComponent('USelectMenu')\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(USelectMenu as any, {\n modelValue: selectedValue.value,\n items: options.value,\n valueKey: 'value',\n labelKey: 'label',\n disabled: !control.value.enabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n placeholder: 'Select...',\n 'onUpdate:modelValue': (v: unknown) => {\n selectedValue.value = v\n },\n }),\n },\n ),\n )\n }\n },\n})\n\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, inject, resolveComponent } from 'vue'\n\nimport { controlDescription, controlTextInputAttrs, trimmedOrUndefined } from '../util'\n\n/**\n * Native `<input type=\"number\">` (not `UInput`) so every `input` event dispatches to JsonForms\n * immediately. Nuxt UI’s `UInput` integrates with `useFormField` / debounced form events; relying\n * only on `update:modelValue` can leave parent `:data` out of sync until blur in some setups.\n */\nexport const NuxtUiIntegerControl = defineComponent({\n name: 'NuxtUiIntegerControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n const modelValue = computed(() => {\n const v = control.value.data\n return v === null || v === undefined ? '' : String(v)\n })\n\n function applyRawString(raw: string) {\n const trimmed = raw.trim()\n if (trimmed === '') {\n handleChange(control.value.path, undefined)\n return\n }\n\n const parsed = Number.parseInt(trimmed, 10)\n handleChange(control.value.path, Number.isFinite(parsed) ? parsed : undefined)\n }\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms)\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h('input', {\n type: 'number',\n inputmode: 'numeric',\n step: '1',\n class: [\n 'jf-input-native',\n errorMessage.value ? 'jf-input-native--error' : '',\n ]\n .filter(Boolean)\n .join(' '),\n value: modelValue.value,\n readonly,\n disabled,\n 'aria-invalid': Boolean(errorMessage.value),\n onInput: (e: Event) => {\n applyRawString((e.target as HTMLInputElement).value)\n },\n }),\n },\n ),\n )\n }\n },\n})\n\n","import type { ControlElement, JsonSchema } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, resolveComponent } from 'vue'\n\nimport { controlDescription, trimmedOrUndefined } from '../util'\n\ntype EnumOption = { label: string; value: unknown }\n\nfunction schemaEnumOptions(schema: JsonSchema | undefined): EnumOption[] {\n if (!schema) return []\n\n if (Array.isArray(schema.enum)) {\n return schema.enum.map((v) => ({ label: String(v), value: v }))\n }\n\n const oneOf = (schema as unknown as { oneOf?: unknown }).oneOf\n if (!Array.isArray(oneOf)) return []\n\n const out: EnumOption[] = []\n for (const entry of oneOf) {\n if (typeof entry !== 'object' || entry === null) continue\n const maybe = entry as Record<string, unknown>\n if (!('const' in maybe)) continue\n out.push({\n value: maybe.const,\n label:\n typeof maybe.title === 'string' && maybe.title.trim()\n ? maybe.title\n : String(maybe.const),\n })\n }\n return out\n}\n\nfunction arrayItemsSchema(schema: JsonSchema | undefined): JsonSchema | undefined {\n if (!schema) return undefined\n const items = (schema as unknown as { items?: unknown }).items\n if (typeof items !== 'object' || items === null) return undefined\n return items as JsonSchema\n}\n\nexport const NuxtUiMultiEnumControl = defineComponent({\n name: 'NuxtUiMultiEnumControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n const options = computed<EnumOption[]>(() =>\n schemaEnumOptions(arrayItemsSchema(control.value.schema)),\n )\n\n const selectedValues = computed<unknown[]>({\n get: () => (Array.isArray(control.value.data) ? control.value.data : []),\n set: (v: unknown[]) => handleChange(control.value.path, v),\n })\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const USelectMenu = resolveComponent('USelectMenu')\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(USelectMenu as any, {\n multiple: true,\n modelValue: selectedValues.value,\n items: options.value,\n valueKey: 'value',\n labelKey: 'label',\n disabled: !control.value.enabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n placeholder: 'Select...',\n 'onUpdate:modelValue': (v: unknown) => {\n selectedValues.value = Array.isArray(v) ? v : []\n },\n }),\n },\n ),\n )\n }\n },\n})\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, inject, resolveComponent } from 'vue'\n\nimport { controlDescription, controlTextInputAttrs, trimmedOrUndefined } from '../util'\n\n/** See {@link NuxtUiIntegerControl}: native input so each `input` event updates JsonForms core. */\nexport const NuxtUiNumberControl = defineComponent({\n name: 'NuxtUiNumberControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n const modelValue = computed(() => {\n const v = control.value.data\n return v === null || v === undefined ? '' : String(v)\n })\n\n function applyRawString(raw: string) {\n const trimmed = raw.trim()\n if (trimmed === '') {\n handleChange(control.value.path, undefined)\n return\n }\n const parsed = Number(trimmed)\n handleChange(control.value.path, Number.isFinite(parsed) ? parsed : undefined)\n }\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms)\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h('input', {\n type: 'number',\n inputmode: 'decimal',\n class: [\n 'jf-input-native',\n errorMessage.value ? 'jf-input-native--error' : '',\n ]\n .filter(Boolean)\n .join(' '),\n value: modelValue.value,\n readonly,\n disabled,\n 'aria-invalid': Boolean(errorMessage.value),\n onInput: (e: Event) => {\n applyRawString((e.target as HTMLInputElement).value)\n },\n }),\n },\n ),\n )\n }\n },\n})\n\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, inject, ref, resolveComponent } from 'vue'\n\nimport { controlDescription, controlTextInputAttrs, trimmedOrUndefined } from '../util'\n\nexport const NuxtUiPasswordControl = defineComponent({\n name: 'NuxtUiPasswordControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n const showPassword = ref(false)\n\n const inputType = computed(() => (showPassword.value ? 'text' : 'password'))\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UInput = resolveComponent('UInput')\n const UButton = resolveComponent('UButton')\n const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms)\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(\n UInput as any,\n {\n modelValue: control.value.data ?? '',\n class: 'w-full',\n type: inputType.value,\n autocomplete: 'current-password',\n readonly,\n disabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n 'onUpdate:modelValue': (v: unknown) =>\n handleChange(control.value.path, v),\n },\n {\n trailing: () =>\n h(UButton as any, {\n type: 'button',\n color: 'neutral',\n variant: 'ghost',\n square: true,\n icon: showPassword.value\n ? 'i-heroicons-eye-slash'\n : 'i-heroicons-eye',\n 'aria-pressed': showPassword.value,\n 'aria-label': showPassword.value\n ? 'Hide password'\n : 'Show password',\n disabled,\n onClick: () => {\n showPassword.value = !showPassword.value\n },\n }),\n },\n ),\n },\n ),\n )\n }\n },\n})\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport {\n computed,\n defineComponent,\n h,\n inject,\n resolveComponent,\n} from 'vue'\n\nimport {\n controlDescription,\n controlTextInputAttrs,\n renderDocsHintSlot,\n trimmedOrUndefined,\n} from '../util'\n\nexport function createNuxtUiStringControl(\n docsUrl?: (path: string) => string,\n) {\n return defineComponent({\n name: 'NuxtUiStringControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() =>\n trimmedOrUndefined(control.value.errors),\n )\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UInput = resolveComponent('UInput')\n const { readonly, disabled } = controlTextInputAttrs(\n control.value,\n jsonforms,\n )\n\n const slots: Record<string, () => ReturnType<typeof h>> = {\n default: () =>\n h(UInput as any, {\n modelValue: control.value.data ?? '',\n class: 'w-full',\n readonly,\n disabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n 'onUpdate:modelValue': (v: unknown) =>\n handleChange(control.value.path, v),\n }),\n }\n const hintSlot = renderDocsHintSlot(\n control.value.schema,\n control.value.label ?? '',\n docsUrl,\n resolveComponent,\n )\n if (hintSlot) slots.hint = hintSlot\n\n return h(\n 'div',\n {},\n h(UFormField as any, {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n }, slots),\n )\n }\n },\n })\n}\n\n\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, inject, resolveComponent } from 'vue'\n\nimport { controlDescription, controlTextInputAttrs, trimmedOrUndefined } from '../util'\n\nexport const NuxtUiTextareaControl = defineComponent({\n name: 'NuxtUiTextareaControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UTextarea = resolveComponent('UTextarea')\n const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms)\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(UTextarea as any, {\n modelValue: control.value.data ?? '',\n class: 'w-full',\n readonly,\n disabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n rows: 5,\n 'onUpdate:modelValue': (v: unknown) =>\n handleChange(control.value.path, v),\n }),\n },\n ),\n )\n }\n },\n})\n\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsCategorization } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiCategorizationRenderer(\n theme: NuxtUiRenderersTheme,\n) {\n return defineComponent({\n name: 'NuxtUiCategorizationRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout, categories } = useJsonFormsCategorization(\n props as unknown as Parameters<typeof useJsonFormsCategorization>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n return h(\n 'div',\n { class: theme.layoutVerticalWide },\n categories.map((categoryRef, catIndex) => {\n const category = categoryRef.value\n const elements = category.uischema.elements ?? []\n\n return h(\n 'div',\n {\n key: `${layout.value.path}-cat-${catIndex}`,\n class: theme.layoutVertical,\n },\n [\n category.label\n ? h('div', { class: theme.labelSection }, category.label)\n : null,\n h(\n 'div',\n { class: theme.layoutVertical },\n elements.map((element, index) =>\n h(\n 'div',\n { key: `${category.path}-${index}` },\n h(DispatchRenderer as any, {\n schema: category.schema,\n uischema: element,\n path: category.path,\n enabled: category.enabled,\n renderers: category.renderers,\n cells: category.cells,\n }),\n ),\n ),\n ),\n ],\n )\n }),\n )\n }\n },\n })\n}\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsLayout } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiCategoryRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiCategoryRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout } = useJsonFormsLayout(\n props as unknown as Parameters<typeof useJsonFormsLayout>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n const elements = layout.value.uischema.elements ?? []\n\n return h('div', { class: theme.layoutVertical }, [\n layout.value.label\n ? h('div', { class: theme.labelSection }, layout.value.label)\n : null,\n h(\n 'div',\n { class: theme.layoutVertical },\n elements.map((element, index) =>\n h(\n 'div',\n { key: `${layout.value.path}-${index}` },\n h(DispatchRenderer as any, {\n schema: layout.value.schema,\n uischema: element,\n path: layout.value.path,\n enabled: layout.value.enabled,\n renderers: layout.value.renderers,\n cells: layout.value.cells,\n }),\n ),\n ),\n ),\n ])\n }\n },\n })\n}\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsLayout } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiGroupRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiGroupRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout } = useJsonFormsLayout(\n props as unknown as Parameters<typeof useJsonFormsLayout>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n const elements = layout.value.uischema.elements ?? []\n const isNested = layout.value.path?.includes('.') ?? false\n const containerClass = isNested ? theme.groupNested : theme.panel\n\n return h(\n 'div',\n { class: containerClass },\n [\n layout.value.label\n ? h('div', { class: theme.labelSectionSpaced }, layout.value.label)\n : null,\n h(\n 'div',\n { class: theme.layoutVertical },\n elements.map((element, index) =>\n h(\n 'div',\n { key: `${layout.value.path}-${index}` },\n h(DispatchRenderer as any, {\n schema: layout.value.schema,\n uischema: element,\n path: layout.value.path,\n enabled: layout.value.enabled,\n renderers: layout.value.renderers,\n cells: layout.value.cells,\n }),\n ),\n ),\n ),\n ],\n )\n }\n },\n })\n}\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsLayout } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiHorizontalLayoutRenderer(\n theme: NuxtUiRenderersTheme,\n) {\n return defineComponent({\n name: 'NuxtUiHorizontalLayoutRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout } = useJsonFormsLayout(\n props as unknown as Parameters<typeof useJsonFormsLayout>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n const elements = layout.value.uischema.elements ?? []\n\n return h(\n 'div',\n { class: theme.layoutHorizontal },\n elements.map((element, index) =>\n h(\n 'div',\n {\n key: `${layout.value.path}-${index}`,\n class: theme.layoutHorizontalItem,\n },\n h(DispatchRenderer as any, {\n schema: layout.value.schema,\n uischema: element,\n path: layout.value.path,\n enabled: layout.value.enabled,\n renderers: layout.value.renderers,\n cells: layout.value.cells,\n }),\n ),\n ),\n )\n }\n },\n })\n}\n","import type { LabelElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsLabel } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiLabelRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiLabelRenderer',\n props: rendererProps<LabelElement>(),\n setup(props) {\n const { label } = useJsonFormsLabel(\n props as unknown as Parameters<typeof useJsonFormsLabel>[0],\n )\n\n return () => {\n if (!label.value.visible) return null\n return h('div', { class: theme.textLabel }, label.value.text)\n }\n },\n })\n}\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsLayout } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiVerticalLayoutRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiVerticalLayoutRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout } = useJsonFormsLayout(\n props as unknown as Parameters<typeof useJsonFormsLayout>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n const elements = layout.value.uischema.elements ?? []\n\n return h(\n 'div',\n { class: theme.layoutVertical },\n elements.map((element, index) =>\n h(\n 'div',\n { key: `${layout.value.path}-${index}` },\n h(DispatchRenderer as any, {\n schema: layout.value.schema,\n uischema: element,\n path: layout.value.path,\n enabled: layout.value.enabled,\n renderers: layout.value.renderers,\n cells: layout.value.cells,\n }),\n ),\n ),\n )\n }\n },\n })\n}\n","/**\n * Theme for JSONForms Nuxt UI renderers.\n * Uses semantic class names (jf-*) - styled by default styles.css.\n * Consumers can override any role with custom classes (Tailwind, Bootstrap, etc.).\n */\n\nexport interface NuxtUiRenderersTheme {\n /** Bordered panel (top-level groups, array items). */\n panel: string\n /** Nested group container (no border, padding only). */\n groupNested: string\n /** Vertical stack layout. */\n layoutVertical: string\n /** Vertical stack with wider gap (categorization). */\n layoutVerticalWide: string\n /** Horizontal layout, responsive. */\n layoutHorizontal: string\n /** Child of horizontal layout (flex grow, min-width). */\n layoutHorizontalItem: string\n /** Array item toolbar (flex + margin). */\n arrayItemToolbar: string\n /** Section/category label. */\n labelSection: string\n /** Section label with bottom margin. */\n labelSectionSpaced: string\n /** Muted secondary text. */\n textMuted: string\n /** Muted secondary text, smaller. */\n textMutedXs: string\n /** Array item title. */\n textItemTitle: string\n /** Suffix after item title. */\n textItemSuffix: string\n /** Plain label. */\n textLabel: string\n /** Flex row: centered, space between. */\n flexBetween: string\n /** Flex row: start-aligned, space between. */\n flexBetweenStart: string\n /** Compact flex row for action buttons. */\n flexActions: string\n}\n\n/** Semantic class defaults - styled by styles.css. No Tailwind/CSS framework dependency. */\nexport const defaultTheme: NuxtUiRenderersTheme = {\n panel: 'jf-panel',\n groupNested: 'jf-group',\n layoutVertical: 'jf-layout-vertical',\n layoutVerticalWide: 'jf-layout-vertical-wide',\n layoutHorizontal: 'jf-layout-horizontal',\n layoutHorizontalItem: 'jf-layout-horizontal-item',\n arrayItemToolbar: 'jf-array-item-toolbar',\n labelSection: 'jf-label-section',\n labelSectionSpaced: 'jf-label-section-spaced',\n textMuted: 'jf-text-muted',\n textMutedXs: 'jf-text-muted-xs',\n textItemTitle: 'jf-text-item-title',\n textItemSuffix: 'jf-text-item-suffix',\n textLabel: 'jf-text-label',\n flexBetween: 'jf-flex-between',\n flexBetweenStart: 'jf-flex-between-start',\n flexActions: 'jf-flex-actions',\n}\n\nexport function mergeTheme(\n overrides?: Partial<NuxtUiRenderersTheme>,\n): NuxtUiRenderersTheme {\n return overrides ? { ...defaultTheme, ...overrides } : { ...defaultTheme }\n}\n"],"mappings":"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","names":["import_core","import_vue","import_core","import_vue","import_vue","resolveComponent","import_core","import_vue","import_vue","import_vue","import_vue","import_vue","schemaEnumOptions","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue"]}
package/dist/index.js CHANGED
@@ -490,8 +490,8 @@ var NuxtUiIntegerControl = defineComponent5({
490
490
  const v = control.value.data;
491
491
  return v === null || v === void 0 ? "" : String(v);
492
492
  });
493
- function onUpdate(raw) {
494
- const trimmed = String(raw ?? "").trim();
493
+ function applyRawString(raw) {
494
+ const trimmed = raw.trim();
495
495
  if (trimmed === "") {
496
496
  handleChange(control.value.path, void 0);
497
497
  return;
@@ -502,7 +502,6 @@ var NuxtUiIntegerControl = defineComponent5({
502
502
  return () => {
503
503
  if (!control.value.visible) return null;
504
504
  const UFormField = resolveComponent4("UFormField");
505
- const UInput = resolveComponent4("UInput");
506
505
  const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms);
507
506
  return h6(
508
507
  "div",
@@ -516,16 +515,21 @@ var NuxtUiIntegerControl = defineComponent5({
516
515
  error: errorMessage.value
517
516
  },
518
517
  {
519
- default: () => h6(UInput, {
518
+ default: () => h6("input", {
520
519
  type: "number",
521
520
  inputmode: "numeric",
522
521
  step: "1",
523
- modelValue: modelValue.value,
522
+ class: [
523
+ "jf-input-native",
524
+ errorMessage.value ? "jf-input-native--error" : ""
525
+ ].filter(Boolean).join(" "),
526
+ value: modelValue.value,
524
527
  readonly,
525
528
  disabled,
526
- color: errorMessage.value ? "error" : void 0,
527
529
  "aria-invalid": Boolean(errorMessage.value),
528
- "onUpdate:modelValue": onUpdate
530
+ onInput: (e) => {
531
+ applyRawString(e.target.value);
532
+ }
529
533
  })
530
534
  }
531
535
  )
@@ -630,8 +634,8 @@ var NuxtUiNumberControl = defineComponent7({
630
634
  const v = control.value.data;
631
635
  return v === null || v === void 0 ? "" : String(v);
632
636
  });
633
- function onUpdate(raw) {
634
- const trimmed = String(raw ?? "").trim();
637
+ function applyRawString(raw) {
638
+ const trimmed = raw.trim();
635
639
  if (trimmed === "") {
636
640
  handleChange(control.value.path, void 0);
637
641
  return;
@@ -642,7 +646,6 @@ var NuxtUiNumberControl = defineComponent7({
642
646
  return () => {
643
647
  if (!control.value.visible) return null;
644
648
  const UFormField = resolveComponent6("UFormField");
645
- const UInput = resolveComponent6("UInput");
646
649
  const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms);
647
650
  return h8(
648
651
  "div",
@@ -656,15 +659,20 @@ var NuxtUiNumberControl = defineComponent7({
656
659
  error: errorMessage.value
657
660
  },
658
661
  {
659
- default: () => h8(UInput, {
662
+ default: () => h8("input", {
660
663
  type: "number",
661
664
  inputmode: "decimal",
662
- modelValue: modelValue.value,
665
+ class: [
666
+ "jf-input-native",
667
+ errorMessage.value ? "jf-input-native--error" : ""
668
+ ].filter(Boolean).join(" "),
669
+ value: modelValue.value,
663
670
  readonly,
664
671
  disabled,
665
- color: errorMessage.value ? "error" : void 0,
666
672
  "aria-invalid": Boolean(errorMessage.value),
667
- "onUpdate:modelValue": onUpdate
673
+ onInput: (e) => {
674
+ applyRawString(e.target.value);
675
+ }
668
676
  })
669
677
  }
670
678
  )
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/nuxtUiRenderers.ts","../src/renderers/complex/NuxtUiArrayListRenderer.ts","../src/renderers/util.ts","../src/renderers/complex/NuxtUiObjectRenderer.ts","../src/renderers/controls/NuxtUiBooleanControl.ts","../src/renderers/controls/NuxtUiEnumControl.ts","../src/renderers/controls/NuxtUiIntegerControl.ts","../src/renderers/controls/NuxtUiMultiEnumControl.ts","../src/renderers/controls/NuxtUiNumberControl.ts","../src/renderers/controls/NuxtUiPasswordControl.ts","../src/renderers/controls/NuxtUiStringControl.ts","../src/renderers/controls/NuxtUiTextareaControl.ts","../src/renderers/layouts/NuxtUiCategorizationRenderer.ts","../src/renderers/layouts/NuxtUiCategoryRenderer.ts","../src/renderers/layouts/NuxtUiGroupRenderer.ts","../src/renderers/layouts/NuxtUiHorizontalLayoutRenderer.ts","../src/renderers/layouts/NuxtUiLabelRenderer.ts","../src/renderers/layouts/NuxtUiVerticalLayoutRenderer.ts","../src/renderers/theme.ts"],"sourcesContent":["import type { JsonFormsRendererRegistryEntry } from '@jsonforms/core'\nimport {\n and,\n formatIs,\n isBooleanControl,\n isEnumControl,\n isEnumSchema,\n isIntegerControl,\n isMultiLineControl,\n isNumberControl,\n isObjectControl,\n isStringControl,\n rankWith,\n Resolve,\n schemaTypeIs,\n uiTypeIs,\n} from '@jsonforms/core'\nimport { markRaw } from 'vue'\n\nimport { createNuxtUiArrayListRenderer } from './renderers/complex/NuxtUiArrayListRenderer'\nimport { NuxtUiObjectRenderer } from './renderers/complex/NuxtUiObjectRenderer'\nimport { createNuxtUiBooleanControl } from './renderers/controls/NuxtUiBooleanControl'\nimport { NuxtUiEnumControl } from './renderers/controls/NuxtUiEnumControl'\nimport { NuxtUiIntegerControl } from './renderers/controls/NuxtUiIntegerControl'\nimport { NuxtUiMultiEnumControl } from './renderers/controls/NuxtUiMultiEnumControl'\nimport { NuxtUiNumberControl } from './renderers/controls/NuxtUiNumberControl'\nimport { NuxtUiPasswordControl } from './renderers/controls/NuxtUiPasswordControl'\nimport { createNuxtUiStringControl } from './renderers/controls/NuxtUiStringControl'\nimport { NuxtUiTextareaControl } from './renderers/controls/NuxtUiTextareaControl'\nimport { createNuxtUiCategorizationRenderer } from './renderers/layouts/NuxtUiCategorizationRenderer'\nimport { createNuxtUiCategoryRenderer } from './renderers/layouts/NuxtUiCategoryRenderer'\nimport { createNuxtUiGroupRenderer } from './renderers/layouts/NuxtUiGroupRenderer'\nimport { createNuxtUiHorizontalLayoutRenderer } from './renderers/layouts/NuxtUiHorizontalLayoutRenderer'\nimport { createNuxtUiLabelRenderer } from './renderers/layouts/NuxtUiLabelRenderer'\nimport { createNuxtUiVerticalLayoutRenderer } from './renderers/layouts/NuxtUiVerticalLayoutRenderer'\nimport {\n mergeTheme,\n type NuxtUiRenderersTheme,\n} from './renderers/theme'\n\n// Intentionally rank higher than typical defaults.\nconst RANK = 10\nconst ENUM_RANK = RANK + 1\nconst PASSWORD_RANK = ENUM_RANK + 1\n\nconst isMultiEnumControl = (\n uischema: unknown,\n schema: unknown,\n context: unknown,\n): boolean => {\n if (!uiTypeIs('Control')(uischema as any, schema as any, context as any)) {\n return false\n }\n\n const scope = (uischema as any)?.scope\n if (typeof scope !== 'string') return false\n\n // JSONForms passes the root schema into testers, but different call sites can\n // vary. Resolve against whatever we have, preferring the provided rootSchema.\n const rootSchema = (context as any)?.rootSchema ?? (schema as any)\n let resolved: any\n try {\n resolved = Resolve.schema(schema as any, scope, rootSchema)\n } catch {\n return false\n }\n\n if (resolved?.type !== 'array') return false\n\n const items = resolved?.items\n if (!items) return false\n\n // JSON Schema `items` can be a schema or an array of schemas.\n if (Array.isArray(items)) return false\n if (typeof items !== 'object' || items === null) return false\n\n const resolvedItems =\n '$ref' in items && typeof (items as any).$ref === 'string'\n ? Resolve.schema(rootSchema, (items as any).$ref, rootSchema)\n : items\n\n return isEnumSchema(resolvedItems as any)\n}\n\n/** Matches oneOf: [{ const, title? }, ...] - enum-like schema with display labels. */\nconst isOneOfEnumControl = (\n uischema: unknown,\n schema: unknown,\n context: unknown,\n): boolean => {\n if (!uiTypeIs('Control')(uischema as any, schema as any, context as any)) {\n return false\n }\n\n const scope = (uischema as any)?.scope\n if (typeof scope !== 'string') return false\n\n const rootSchema = (context as any)?.rootSchema ?? (schema as any)\n let resolved: any\n try {\n resolved = Resolve.schema(schema as any, scope, rootSchema)\n } catch {\n return false\n }\n\n const oneOf = resolved?.oneOf\n if (!Array.isArray(oneOf) || oneOf.length === 0) return false\n\n for (const entry of oneOf) {\n if (typeof entry !== 'object' || entry === null) continue\n if (!('const' in (entry as Record<string, unknown>))) return false\n }\n return true\n}\n\nexport interface CreateNuxtUiRenderersOptions {\n /** Override theme classes. Use semantic jf-* or custom (Tailwind, etc.). */\n theme?: Partial<NuxtUiRenderersTheme>\n /**\n * Build full docs URL from schema x-docs-path.\n * When provided, controls with x-docs-path show a docs link next to the label.\n */\n docsUrl?: (path: string) => string\n}\n\nexport function createNuxtUiRenderers(\n options?: CreateNuxtUiRenderersOptions,\n): JsonFormsRendererRegistryEntry[] {\n const theme = mergeTheme(options?.theme)\n const docsUrl = options?.docsUrl\n\n return [\n // Layouts\n {\n tester: rankWith(RANK, uiTypeIs('VerticalLayout')),\n renderer: markRaw(createNuxtUiVerticalLayoutRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('HorizontalLayout')),\n renderer: markRaw(createNuxtUiHorizontalLayoutRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('Group')),\n renderer: markRaw(createNuxtUiGroupRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('Categorization')),\n renderer: markRaw(createNuxtUiCategorizationRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('Category')),\n renderer: markRaw(createNuxtUiCategoryRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('Label')),\n renderer: markRaw(createNuxtUiLabelRenderer(theme)),\n },\n\n // Complex schemas\n {\n tester: rankWith(RANK, schemaTypeIs('array')),\n renderer: markRaw(createNuxtUiArrayListRenderer(theme)),\n },\n {\n tester: rankWith(RANK, isObjectControl),\n renderer: markRaw(NuxtUiObjectRenderer),\n },\n\n // Primitive controls\n {\n tester: rankWith(RANK, isMultiLineControl),\n renderer: markRaw(NuxtUiTextareaControl),\n },\n {\n tester: rankWith(RANK, isNumberControl),\n renderer: markRaw(NuxtUiNumberControl),\n },\n {\n tester: rankWith(RANK, isIntegerControl),\n renderer: markRaw(NuxtUiIntegerControl),\n },\n {\n tester: rankWith(RANK, isBooleanControl),\n renderer: markRaw(createNuxtUiBooleanControl(theme)),\n },\n {\n // Multi-enum must outrank generic array renderer and string renderer.\n tester: rankWith(ENUM_RANK, isMultiEnumControl),\n renderer: markRaw(NuxtUiMultiEnumControl),\n },\n {\n // oneOf with const+title (display labels) - same as enum for rendering.\n tester: rankWith(ENUM_RANK, isOneOfEnumControl),\n renderer: markRaw(NuxtUiEnumControl),\n },\n {\n // Enum must outrank the generic string control, otherwise enums render\n // as freeform text inputs.\n tester: rankWith(ENUM_RANK, isEnumControl),\n renderer: markRaw(NuxtUiEnumControl),\n },\n {\n tester: rankWith(PASSWORD_RANK, and(isStringControl, formatIs('password'))),\n renderer: markRaw(NuxtUiPasswordControl),\n },\n {\n tester: rankWith(RANK, isStringControl),\n renderer: markRaw(createNuxtUiStringControl(docsUrl)),\n },\n ]\n}\n\n/** Default renderers with semantic theme. Import styles.css for default styling. */\nexport const nuxtUiRenderers: JsonFormsRendererRegistryEntry[] =\n createNuxtUiRenderers()\n","import type { ControlElement, JsonSchema, UISchemaElement } from '@jsonforms/core'\nimport {\n Resolve,\n composePaths,\n createDefaultValue,\n findUISchema,\n getFirstPrimitiveProp,\n} from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsArrayControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, resolveComponent } from 'vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { trimmedOrUndefined } from '../util'\n\nexport function createNuxtUiArrayListRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiArrayListRenderer',\n components: { DispatchRenderer },\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, addItem, removeItems, moveUp, moveDown } =\n useJsonFormsArrayControl(\n props as unknown as Parameters<typeof useJsonFormsArrayControl>[0],\n )\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n const items = computed<unknown[]>(() =>\n Array.isArray(control.value.data) ? control.value.data : [],\n )\n\n const arraySchema = computed<JsonSchema | undefined>(() => {\n try {\n return Resolve.schema(\n props.schema,\n control.value.uischema.scope,\n control.value.rootSchema,\n )\n } catch {\n return undefined\n }\n })\n\n const maxItemsReached = computed(() => {\n const max = arraySchema.value?.maxItems\n return typeof max === 'number' ? items.value.length >= max : false\n })\n\n const minItemsReached = computed(() => {\n const min = arraySchema.value?.minItems\n return typeof min === 'number' ? items.value.length <= min : false\n })\n\n const childUiSchema = computed<UISchemaElement>(() =>\n findUISchema(\n control.value.uischemas,\n control.value.schema,\n control.value.uischema.scope,\n control.value.path,\n undefined,\n control.value.uischema,\n control.value.rootSchema,\n ),\n )\n\n function childLabelForIndex(index: number): string {\n const childLabelProp =\n getChildLabelPropFromUiSchemaOptions(control.value.uischema.options) ??\n getFirstPrimitiveProp(control.value.schema)\n\n if (!childLabelProp) return `${index}`\n\n const labelValue = Resolve.data(\n control.value.data,\n composePaths(`${index}`, childLabelProp),\n )\n if (\n labelValue === undefined ||\n labelValue === null ||\n Number.isNaN(labelValue as any)\n ) {\n return ''\n }\n return String(labelValue)\n }\n\n function getChildLabelPropFromUiSchemaOptions(\n options: unknown,\n ): string | undefined {\n if (!options || typeof options !== 'object') return undefined\n const value = (options as Record<string, unknown>).childLabelProp\n return typeof value === 'string' ? value : undefined\n }\n\n function addButtonClick() {\n addItem(\n control.value.path,\n createDefaultValue(control.value.schema, control.value.rootSchema),\n )()\n }\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UButton = resolveComponent('UButton')\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: control.value.description,\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h('div', { class: theme.layoutVertical }, [\n h('div', { class: theme.flexBetween }, [\n h(\n 'div',\n { class: theme.textMutedXs },\n `${items.value.length} items`,\n ),\n h(\n UButton as any,\n {\n type: 'button',\n size: 'xs',\n variant: 'soft',\n color: 'neutral',\n disabled:\n !control.value.enabled || maxItemsReached.value,\n onClick: addButtonClick,\n },\n { default: () => 'Add' },\n ),\n ]),\n\n items.value.length === 0\n ? h('div', { class: theme.textMuted }, 'No items.')\n : null,\n\n ...items.value.map((_item, index) =>\n h(\n 'div',\n {\n key: `${control.value.path}-${index}`,\n class: theme.panel,\n },\n [\n h(\n 'div',\n { class: theme.arrayItemToolbar },\n [\n h('div', { class: 'jf-min-w-0' }, [\n h(\n 'div',\n { class: theme.textItemTitle },\n [\n `Item ${index + 1}`,\n childLabelForIndex(index)\n ? h(\n 'span',\n { class: theme.textItemSuffix },\n ` — ${childLabelForIndex(index)}`,\n )\n : null,\n ],\n ),\n ]),\n h('div', { class: theme.flexActions }, [\n h(\n UButton as any,\n {\n type: 'button',\n size: 'xs',\n variant: 'ghost',\n color: 'neutral',\n disabled:\n !control.value.enabled || index === 0,\n onClick: () =>\n moveUp?.(control.value.path, index)(),\n },\n { default: () => 'Up' },\n ),\n h(\n UButton as any,\n {\n type: 'button',\n size: 'xs',\n variant: 'ghost',\n color: 'neutral',\n disabled:\n !control.value.enabled ||\n index >= items.value.length - 1,\n onClick: () =>\n moveDown?.(control.value.path, index)(),\n },\n { default: () => 'Down' },\n ),\n h(\n UButton as any,\n {\n type: 'button',\n size: 'xs',\n variant: 'ghost',\n color: 'error',\n disabled:\n !control.value.enabled ||\n minItemsReached.value,\n onClick: () =>\n removeItems?.(control.value.path, [\n index,\n ])(),\n },\n { default: () => 'Remove' },\n ),\n ]),\n ],\n ),\n\n h(DispatchRenderer as any, {\n schema: control.value.schema,\n uischema: childUiSchema.value,\n path: composePaths(control.value.path, `${index}`),\n enabled: control.value.enabled,\n renderers: control.value.renderers,\n cells: control.value.cells,\n }),\n ],\n ),\n ),\n ]),\n },\n ),\n )\n }\n },\n })\n}\n","import type { ControlElement } from '@jsonforms/core'\nimport { hasEnableRule } from '@jsonforms/core'\nimport type { VNode } from 'vue'\nimport { h } from 'vue'\nimport { computed, type ComputedRef } from 'vue'\n\n/**\n * Extract x-docs-path from a JSON Schema property.\n * Returns the path when present and valid (starts with /), otherwise null.\n */\nexport function getDocsPathFromSchema(schema: unknown): string | null {\n if (!schema || typeof schema !== 'object' || Array.isArray(schema))\n return null\n const s = schema as Record<string, unknown>\n const path = s['x-docs-path']\n if (typeof path === 'string' && path.startsWith('/')) return path\n return null\n}\n\n/**\n * Render a docs link hint for UFormField when schema has x-docs-path.\n * Returns a slot render function or undefined when no docs URL.\n */\nexport function renderDocsHintSlot(\n schema: unknown,\n label: string,\n docsUrl: ((path: string) => string) | undefined,\n resolveComponent: (name: string) => unknown,\n): (() => VNode) | undefined {\n const path = getDocsPathFromSchema(schema)\n if (!path || !docsUrl) return undefined\n const ULink = resolveComponent('ULink')\n const UIcon = resolveComponent('UIcon')\n if (!ULink || !UIcon) return undefined\n const href = docsUrl(path)\n return () =>\n h(\n ULink as any,\n {\n href,\n target: '_blank',\n rel: 'noopener noreferrer',\n class: 'inline-flex items-center text-muted hover:text-primary',\n 'aria-label': `${label} docs`,\n title: `${label} docs`,\n },\n () => h(UIcon as any, { name: 'i-heroicons-information-circle' }),\n )\n}\n\nexport function trimmedOrUndefined(input: string | undefined): string | undefined {\n const v = input?.trim()\n return v ? v : undefined\n}\n\n/**\n * Resolves the control's description for the label/field.\n * Uses control.description when set, otherwise falls back to schema.description.\n */\nexport function controlDescription(control: {\n description?: string\n schema?: { description?: string }\n}): string | undefined {\n const d = control.description?.trim()\n if (d) return d\n const sd = (control.schema as { description?: string } | undefined)?.description\n return typeof sd === 'string' && sd.trim() ? sd.trim() : undefined\n}\n\nexport function errorFromControl(\n control: ComputedRef<{ errors: string }>,\n): ComputedRef<string | undefined> {\n return computed(() => trimmedOrUndefined(control.value.errors))\n}\n\n/** True when the resolved control schema marks the field read-only (JSON Schema `readOnly`). */\nexport function isSchemaReadOnly(schema: unknown): boolean {\n if (!schema || typeof schema !== 'object' || Array.isArray(schema)) return false\n return (schema as { readOnly?: unknown }).readOnly === true\n}\n\ntype JsonformsInjected = { readonly?: boolean } | undefined\n\ntype ControlForInputAttrs = {\n enabled: boolean\n schema?: unknown\n uischema?: ControlElement\n config?: { readonly?: boolean; readOnly?: boolean }\n}\n\n/**\n * Nuxt UI text inputs: use native `readonly` only when JSON Schema `readOnly` is why the control\n * is not enabled. Other causes (global JsonForms readonly, UI schema / config readonly, enable\n * rules, etc.) keep `disabled` so behavior stays unchanged.\n */\nexport function controlTextInputAttrs(\n control: ControlForInputAttrs,\n jsonforms: JsonformsInjected,\n): { readonly: boolean; disabled: boolean } {\n const schemaRO = isSchemaReadOnly(control.schema)\n if (!schemaRO) {\n return { readonly: false, disabled: !control.enabled }\n }\n\n if (jsonforms?.readonly === true) {\n return { readonly: false, disabled: !control.enabled }\n }\n\n const ui = control.uischema\n if (typeof ui?.options?.readonly === 'boolean' && ui.options.readonly) {\n return { readonly: false, disabled: !control.enabled }\n }\n if (typeof ui?.options?.readOnly === 'boolean' && ui.options.readOnly) {\n return { readonly: false, disabled: !control.enabled }\n }\n\n const cfg = control.config\n if (typeof cfg?.readonly === 'boolean' && cfg.readonly) {\n return { readonly: false, disabled: !control.enabled }\n }\n if (typeof cfg?.readOnly === 'boolean' && cfg.readOnly) {\n return { readonly: false, disabled: !control.enabled }\n }\n\n if (ui && hasEnableRule(ui) && !control.enabled) {\n return { readonly: false, disabled: true }\n }\n\n return { readonly: true, disabled: false }\n}\n\n","import type { ControlElement, GroupLayout, UISchemaElement } from '@jsonforms/core'\nimport { Generate, findUISchema } from '@jsonforms/core'\nimport {\n DispatchRenderer,\n rendererProps,\n useJsonFormsControlWithDetail,\n} from '@jsonforms/vue'\nimport { computed, defineComponent, h } from 'vue'\n\nexport const NuxtUiObjectRenderer = defineComponent({\n name: 'NuxtUiObjectRenderer',\n components: { DispatchRenderer },\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control } = useJsonFormsControlWithDetail(\n props as unknown as Parameters<typeof useJsonFormsControlWithDetail>[0],\n )\n\n const detailUiSchema = computed<UISchemaElement>(() => {\n const uiSchemaGenerator = () => {\n const uiSchema = Generate.uiSchema(\n control.value.schema,\n 'Group',\n undefined,\n control.value.rootSchema,\n )\n\n if (!control.value.path) {\n uiSchema.type = 'VerticalLayout'\n } else {\n ;(uiSchema as GroupLayout).label = control.value.label\n }\n return uiSchema\n }\n\n return findUISchema(\n control.value.uischemas,\n control.value.schema,\n control.value.uischema.scope,\n control.value.path,\n uiSchemaGenerator,\n control.value.uischema,\n control.value.rootSchema,\n )\n })\n\n return () => {\n if (!control.value.visible) return null\n\n return h(DispatchRenderer as any, {\n visible: control.value.visible,\n enabled: control.value.enabled,\n schema: control.value.schema,\n uischema: detailUiSchema.value,\n path: control.value.path,\n renderers: control.value.renderers,\n cells: control.value.cells,\n })\n }\n },\n})\n\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { computed, defineComponent, h, resolveComponent } from 'vue'\n\nimport { controlDescription, trimmedOrUndefined } from '../util'\n\nexport function createNuxtUiBooleanControl(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiBooleanControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n const modelValue = computed<boolean>({\n get: () => Boolean(control.value.data),\n set: (v: boolean) => handleChange(control.value.path, v),\n })\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const USwitch = resolveComponent('USwitch')\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(\n 'div',\n { class: theme.flexBetween },\n h(USwitch as any, {\n modelValue: modelValue.value,\n disabled: !control.value.enabled,\n 'aria-invalid': Boolean(errorMessage.value),\n 'onUpdate:modelValue': (v: boolean) => {\n modelValue.value = v\n },\n }),\n ),\n },\n ),\n )\n }\n },\n })\n}\n","import type { ControlElement, JsonSchema } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, resolveComponent } from 'vue'\n\nimport { controlDescription, trimmedOrUndefined } from '../util'\n\ntype EnumOption = { label: string; value: unknown }\n\nfunction schemaEnumOptions(schema: JsonSchema | undefined): EnumOption[] {\n if (!schema) return []\n\n if (Array.isArray(schema.enum)) {\n return schema.enum.map((v) => ({ label: String(v), value: v }))\n }\n\n const oneOf = (schema as unknown as { oneOf?: unknown }).oneOf\n if (!Array.isArray(oneOf)) return []\n\n const out: EnumOption[] = []\n for (const entry of oneOf) {\n if (typeof entry !== 'object' || entry === null) continue\n const maybe = entry as Record<string, unknown>\n if (!('const' in maybe)) continue\n out.push({\n value: maybe.const,\n label:\n typeof maybe.title === 'string' && maybe.title.trim()\n ? maybe.title\n : String(maybe.const),\n })\n }\n return out\n}\n\nexport const NuxtUiEnumControl = defineComponent({\n name: 'NuxtUiEnumControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n const options = computed<EnumOption[]>(() => schemaEnumOptions(control.value.schema))\n\n const selectedValue = computed<unknown>({\n get: () => control.value.data,\n set: (v: unknown) => handleChange(control.value.path, v),\n })\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const USelectMenu = resolveComponent('USelectMenu')\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(USelectMenu as any, {\n modelValue: selectedValue.value,\n items: options.value,\n valueKey: 'value',\n labelKey: 'label',\n disabled: !control.value.enabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n placeholder: 'Select...',\n 'onUpdate:modelValue': (v: unknown) => {\n selectedValue.value = v\n },\n }),\n },\n ),\n )\n }\n },\n})\n\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, inject, resolveComponent } from 'vue'\n\nimport { controlDescription, controlTextInputAttrs, trimmedOrUndefined } from '../util'\n\nexport const NuxtUiIntegerControl = defineComponent({\n name: 'NuxtUiIntegerControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n const modelValue = computed(() => {\n const v = control.value.data\n return v === null || v === undefined ? '' : String(v)\n })\n\n function onUpdate(raw: unknown) {\n const trimmed = String(raw ?? '').trim()\n if (trimmed === '') {\n handleChange(control.value.path, undefined)\n return\n }\n\n const parsed = Number.parseInt(trimmed, 10)\n handleChange(control.value.path, Number.isFinite(parsed) ? parsed : undefined)\n }\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UInput = resolveComponent('UInput')\n const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms)\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(UInput as any, {\n type: 'number',\n inputmode: 'numeric',\n step: '1',\n modelValue: modelValue.value,\n readonly,\n disabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n 'onUpdate:modelValue': onUpdate,\n }),\n },\n ),\n )\n }\n },\n})\n\n","import type { ControlElement, JsonSchema } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, resolveComponent } from 'vue'\n\nimport { controlDescription, trimmedOrUndefined } from '../util'\n\ntype EnumOption = { label: string; value: unknown }\n\nfunction schemaEnumOptions(schema: JsonSchema | undefined): EnumOption[] {\n if (!schema) return []\n\n if (Array.isArray(schema.enum)) {\n return schema.enum.map((v) => ({ label: String(v), value: v }))\n }\n\n const oneOf = (schema as unknown as { oneOf?: unknown }).oneOf\n if (!Array.isArray(oneOf)) return []\n\n const out: EnumOption[] = []\n for (const entry of oneOf) {\n if (typeof entry !== 'object' || entry === null) continue\n const maybe = entry as Record<string, unknown>\n if (!('const' in maybe)) continue\n out.push({\n value: maybe.const,\n label:\n typeof maybe.title === 'string' && maybe.title.trim()\n ? maybe.title\n : String(maybe.const),\n })\n }\n return out\n}\n\nfunction arrayItemsSchema(schema: JsonSchema | undefined): JsonSchema | undefined {\n if (!schema) return undefined\n const items = (schema as unknown as { items?: unknown }).items\n if (typeof items !== 'object' || items === null) return undefined\n return items as JsonSchema\n}\n\nexport const NuxtUiMultiEnumControl = defineComponent({\n name: 'NuxtUiMultiEnumControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n const options = computed<EnumOption[]>(() =>\n schemaEnumOptions(arrayItemsSchema(control.value.schema)),\n )\n\n const selectedValues = computed<unknown[]>({\n get: () => (Array.isArray(control.value.data) ? control.value.data : []),\n set: (v: unknown[]) => handleChange(control.value.path, v),\n })\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const USelectMenu = resolveComponent('USelectMenu')\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(USelectMenu as any, {\n multiple: true,\n modelValue: selectedValues.value,\n items: options.value,\n valueKey: 'value',\n labelKey: 'label',\n disabled: !control.value.enabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n placeholder: 'Select...',\n 'onUpdate:modelValue': (v: unknown) => {\n selectedValues.value = Array.isArray(v) ? v : []\n },\n }),\n },\n ),\n )\n }\n },\n})\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, inject, resolveComponent } from 'vue'\n\nimport { controlDescription, controlTextInputAttrs, trimmedOrUndefined } from '../util'\n\nexport const NuxtUiNumberControl = defineComponent({\n name: 'NuxtUiNumberControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n const modelValue = computed(() => {\n const v = control.value.data\n return v === null || v === undefined ? '' : String(v)\n })\n\n function onUpdate(raw: unknown) {\n const trimmed = String(raw ?? '').trim()\n if (trimmed === '') {\n handleChange(control.value.path, undefined)\n return\n }\n const parsed = Number(trimmed)\n handleChange(control.value.path, Number.isFinite(parsed) ? parsed : undefined)\n }\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UInput = resolveComponent('UInput')\n const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms)\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(UInput as any, {\n type: 'number',\n inputmode: 'decimal',\n modelValue: modelValue.value,\n readonly,\n disabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n 'onUpdate:modelValue': onUpdate,\n }),\n },\n ),\n )\n }\n },\n})\n\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, inject, ref, resolveComponent } from 'vue'\n\nimport { controlDescription, controlTextInputAttrs, trimmedOrUndefined } from '../util'\n\nexport const NuxtUiPasswordControl = defineComponent({\n name: 'NuxtUiPasswordControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n const showPassword = ref(false)\n\n const inputType = computed(() => (showPassword.value ? 'text' : 'password'))\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UInput = resolveComponent('UInput')\n const UButton = resolveComponent('UButton')\n const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms)\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(\n UInput as any,\n {\n modelValue: control.value.data ?? '',\n class: 'w-full',\n type: inputType.value,\n autocomplete: 'current-password',\n readonly,\n disabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n 'onUpdate:modelValue': (v: unknown) =>\n handleChange(control.value.path, v),\n },\n {\n trailing: () =>\n h(UButton as any, {\n type: 'button',\n color: 'neutral',\n variant: 'ghost',\n square: true,\n icon: showPassword.value\n ? 'i-heroicons-eye-slash'\n : 'i-heroicons-eye',\n 'aria-pressed': showPassword.value,\n 'aria-label': showPassword.value\n ? 'Hide password'\n : 'Show password',\n disabled,\n onClick: () => {\n showPassword.value = !showPassword.value\n },\n }),\n },\n ),\n },\n ),\n )\n }\n },\n})\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport {\n computed,\n defineComponent,\n h,\n inject,\n resolveComponent,\n} from 'vue'\n\nimport {\n controlDescription,\n controlTextInputAttrs,\n renderDocsHintSlot,\n trimmedOrUndefined,\n} from '../util'\n\nexport function createNuxtUiStringControl(\n docsUrl?: (path: string) => string,\n) {\n return defineComponent({\n name: 'NuxtUiStringControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() =>\n trimmedOrUndefined(control.value.errors),\n )\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UInput = resolveComponent('UInput')\n const { readonly, disabled } = controlTextInputAttrs(\n control.value,\n jsonforms,\n )\n\n const slots: Record<string, () => ReturnType<typeof h>> = {\n default: () =>\n h(UInput as any, {\n modelValue: control.value.data ?? '',\n class: 'w-full',\n readonly,\n disabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n 'onUpdate:modelValue': (v: unknown) =>\n handleChange(control.value.path, v),\n }),\n }\n const hintSlot = renderDocsHintSlot(\n control.value.schema,\n control.value.label ?? '',\n docsUrl,\n resolveComponent,\n )\n if (hintSlot) slots.hint = hintSlot\n\n return h(\n 'div',\n {},\n h(UFormField as any, {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n }, slots),\n )\n }\n },\n })\n}\n\n\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, inject, resolveComponent } from 'vue'\n\nimport { controlDescription, controlTextInputAttrs, trimmedOrUndefined } from '../util'\n\nexport const NuxtUiTextareaControl = defineComponent({\n name: 'NuxtUiTextareaControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UTextarea = resolveComponent('UTextarea')\n const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms)\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(UTextarea as any, {\n modelValue: control.value.data ?? '',\n class: 'w-full',\n readonly,\n disabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n rows: 5,\n 'onUpdate:modelValue': (v: unknown) =>\n handleChange(control.value.path, v),\n }),\n },\n ),\n )\n }\n },\n})\n\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsCategorization } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiCategorizationRenderer(\n theme: NuxtUiRenderersTheme,\n) {\n return defineComponent({\n name: 'NuxtUiCategorizationRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout, categories } = useJsonFormsCategorization(\n props as unknown as Parameters<typeof useJsonFormsCategorization>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n return h(\n 'div',\n { class: theme.layoutVerticalWide },\n categories.map((categoryRef, catIndex) => {\n const category = categoryRef.value\n const elements = category.uischema.elements ?? []\n\n return h(\n 'div',\n {\n key: `${layout.value.path}-cat-${catIndex}`,\n class: theme.layoutVertical,\n },\n [\n category.label\n ? h('div', { class: theme.labelSection }, category.label)\n : null,\n h(\n 'div',\n { class: theme.layoutVertical },\n elements.map((element, index) =>\n h(\n 'div',\n { key: `${category.path}-${index}` },\n h(DispatchRenderer as any, {\n schema: category.schema,\n uischema: element,\n path: category.path,\n enabled: category.enabled,\n renderers: category.renderers,\n cells: category.cells,\n }),\n ),\n ),\n ),\n ],\n )\n }),\n )\n }\n },\n })\n}\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsLayout } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiCategoryRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiCategoryRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout } = useJsonFormsLayout(\n props as unknown as Parameters<typeof useJsonFormsLayout>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n const elements = layout.value.uischema.elements ?? []\n\n return h('div', { class: theme.layoutVertical }, [\n layout.value.label\n ? h('div', { class: theme.labelSection }, layout.value.label)\n : null,\n h(\n 'div',\n { class: theme.layoutVertical },\n elements.map((element, index) =>\n h(\n 'div',\n { key: `${layout.value.path}-${index}` },\n h(DispatchRenderer as any, {\n schema: layout.value.schema,\n uischema: element,\n path: layout.value.path,\n enabled: layout.value.enabled,\n renderers: layout.value.renderers,\n cells: layout.value.cells,\n }),\n ),\n ),\n ),\n ])\n }\n },\n })\n}\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsLayout } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiGroupRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiGroupRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout } = useJsonFormsLayout(\n props as unknown as Parameters<typeof useJsonFormsLayout>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n const elements = layout.value.uischema.elements ?? []\n const isNested = layout.value.path?.includes('.') ?? false\n const containerClass = isNested ? theme.groupNested : theme.panel\n\n return h(\n 'div',\n { class: containerClass },\n [\n layout.value.label\n ? h('div', { class: theme.labelSectionSpaced }, layout.value.label)\n : null,\n h(\n 'div',\n { class: theme.layoutVertical },\n elements.map((element, index) =>\n h(\n 'div',\n { key: `${layout.value.path}-${index}` },\n h(DispatchRenderer as any, {\n schema: layout.value.schema,\n uischema: element,\n path: layout.value.path,\n enabled: layout.value.enabled,\n renderers: layout.value.renderers,\n cells: layout.value.cells,\n }),\n ),\n ),\n ),\n ],\n )\n }\n },\n })\n}\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsLayout } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiHorizontalLayoutRenderer(\n theme: NuxtUiRenderersTheme,\n) {\n return defineComponent({\n name: 'NuxtUiHorizontalLayoutRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout } = useJsonFormsLayout(\n props as unknown as Parameters<typeof useJsonFormsLayout>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n const elements = layout.value.uischema.elements ?? []\n\n return h(\n 'div',\n { class: theme.layoutHorizontal },\n elements.map((element, index) =>\n h(\n 'div',\n {\n key: `${layout.value.path}-${index}`,\n class: theme.layoutHorizontalItem,\n },\n h(DispatchRenderer as any, {\n schema: layout.value.schema,\n uischema: element,\n path: layout.value.path,\n enabled: layout.value.enabled,\n renderers: layout.value.renderers,\n cells: layout.value.cells,\n }),\n ),\n ),\n )\n }\n },\n })\n}\n","import type { LabelElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsLabel } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiLabelRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiLabelRenderer',\n props: rendererProps<LabelElement>(),\n setup(props) {\n const { label } = useJsonFormsLabel(\n props as unknown as Parameters<typeof useJsonFormsLabel>[0],\n )\n\n return () => {\n if (!label.value.visible) return null\n return h('div', { class: theme.textLabel }, label.value.text)\n }\n },\n })\n}\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsLayout } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiVerticalLayoutRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiVerticalLayoutRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout } = useJsonFormsLayout(\n props as unknown as Parameters<typeof useJsonFormsLayout>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n const elements = layout.value.uischema.elements ?? []\n\n return h(\n 'div',\n { class: theme.layoutVertical },\n elements.map((element, index) =>\n h(\n 'div',\n { key: `${layout.value.path}-${index}` },\n h(DispatchRenderer as any, {\n schema: layout.value.schema,\n uischema: element,\n path: layout.value.path,\n enabled: layout.value.enabled,\n renderers: layout.value.renderers,\n cells: layout.value.cells,\n }),\n ),\n ),\n )\n }\n },\n })\n}\n","/**\n * Theme for JSONForms Nuxt UI renderers.\n * Uses semantic class names (jf-*) - styled by default styles.css.\n * Consumers can override any role with custom classes (Tailwind, Bootstrap, etc.).\n */\n\nexport interface NuxtUiRenderersTheme {\n /** Bordered panel (top-level groups, array items). */\n panel: string\n /** Nested group container (no border, padding only). */\n groupNested: string\n /** Vertical stack layout. */\n layoutVertical: string\n /** Vertical stack with wider gap (categorization). */\n layoutVerticalWide: string\n /** Horizontal layout, responsive. */\n layoutHorizontal: string\n /** Child of horizontal layout (flex grow, min-width). */\n layoutHorizontalItem: string\n /** Array item toolbar (flex + margin). */\n arrayItemToolbar: string\n /** Section/category label. */\n labelSection: string\n /** Section label with bottom margin. */\n labelSectionSpaced: string\n /** Muted secondary text. */\n textMuted: string\n /** Muted secondary text, smaller. */\n textMutedXs: string\n /** Array item title. */\n textItemTitle: string\n /** Suffix after item title. */\n textItemSuffix: string\n /** Plain label. */\n textLabel: string\n /** Flex row: centered, space between. */\n flexBetween: string\n /** Flex row: start-aligned, space between. */\n flexBetweenStart: string\n /** Compact flex row for action buttons. */\n flexActions: string\n}\n\n/** Semantic class defaults - styled by styles.css. No Tailwind/CSS framework dependency. */\nexport const defaultTheme: NuxtUiRenderersTheme = {\n panel: 'jf-panel',\n groupNested: 'jf-group',\n layoutVertical: 'jf-layout-vertical',\n layoutVerticalWide: 'jf-layout-vertical-wide',\n layoutHorizontal: 'jf-layout-horizontal',\n layoutHorizontalItem: 'jf-layout-horizontal-item',\n arrayItemToolbar: 'jf-array-item-toolbar',\n labelSection: 'jf-label-section',\n labelSectionSpaced: 'jf-label-section-spaced',\n textMuted: 'jf-text-muted',\n textMutedXs: 'jf-text-muted-xs',\n textItemTitle: 'jf-text-item-title',\n textItemSuffix: 'jf-text-item-suffix',\n textLabel: 'jf-text-label',\n flexBetween: 'jf-flex-between',\n flexBetweenStart: 'jf-flex-between-start',\n flexActions: 'jf-flex-actions',\n}\n\nexport function mergeTheme(\n overrides?: Partial<NuxtUiRenderersTheme>,\n): NuxtUiRenderersTheme {\n return overrides ? { ...defaultTheme, ...overrides } : { ...defaultTheme }\n}\n"],"mappings":"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","names":["Resolve","computed","h","resolveComponent","computed","h","findUISchema","DispatchRenderer","rendererProps","computed","defineComponent","h","rendererProps","computed","defineComponent","h","resolveComponent","defineComponent","rendererProps","computed","resolveComponent","h","rendererProps","useJsonFormsControl","computed","defineComponent","h","resolveComponent","defineComponent","rendererProps","useJsonFormsControl","computed","resolveComponent","h","rendererProps","useJsonFormsControl","computed","defineComponent","h","resolveComponent","defineComponent","rendererProps","useJsonFormsControl","computed","resolveComponent","h","rendererProps","useJsonFormsControl","computed","defineComponent","h","resolveComponent","schemaEnumOptions","defineComponent","rendererProps","useJsonFormsControl","computed","resolveComponent","h","rendererProps","useJsonFormsControl","computed","defineComponent","h","inject","resolveComponent","defineComponent","rendererProps","useJsonFormsControl","inject","computed","resolveComponent","h","rendererProps","useJsonFormsControl","computed","defineComponent","h","inject","resolveComponent","defineComponent","rendererProps","useJsonFormsControl","inject","computed","resolveComponent","h","rendererProps","useJsonFormsControl","computed","defineComponent","h","inject","resolveComponent","defineComponent","rendererProps","useJsonFormsControl","inject","computed","resolveComponent","h","rendererProps","useJsonFormsControl","computed","defineComponent","h","inject","resolveComponent","defineComponent","rendererProps","useJsonFormsControl","inject","computed","resolveComponent","h","DispatchRenderer","rendererProps","defineComponent","h","DispatchRenderer","rendererProps","defineComponent","h","DispatchRenderer","rendererProps","useJsonFormsLayout","defineComponent","h","DispatchRenderer","rendererProps","useJsonFormsLayout","defineComponent","h","rendererProps","defineComponent","h","DispatchRenderer","rendererProps","useJsonFormsLayout","defineComponent","h","Resolve"]}
1
+ {"version":3,"sources":["../src/nuxtUiRenderers.ts","../src/renderers/complex/NuxtUiArrayListRenderer.ts","../src/renderers/util.ts","../src/renderers/complex/NuxtUiObjectRenderer.ts","../src/renderers/controls/NuxtUiBooleanControl.ts","../src/renderers/controls/NuxtUiEnumControl.ts","../src/renderers/controls/NuxtUiIntegerControl.ts","../src/renderers/controls/NuxtUiMultiEnumControl.ts","../src/renderers/controls/NuxtUiNumberControl.ts","../src/renderers/controls/NuxtUiPasswordControl.ts","../src/renderers/controls/NuxtUiStringControl.ts","../src/renderers/controls/NuxtUiTextareaControl.ts","../src/renderers/layouts/NuxtUiCategorizationRenderer.ts","../src/renderers/layouts/NuxtUiCategoryRenderer.ts","../src/renderers/layouts/NuxtUiGroupRenderer.ts","../src/renderers/layouts/NuxtUiHorizontalLayoutRenderer.ts","../src/renderers/layouts/NuxtUiLabelRenderer.ts","../src/renderers/layouts/NuxtUiVerticalLayoutRenderer.ts","../src/renderers/theme.ts"],"sourcesContent":["import type { JsonFormsRendererRegistryEntry } from '@jsonforms/core'\nimport {\n and,\n formatIs,\n isBooleanControl,\n isEnumControl,\n isEnumSchema,\n isIntegerControl,\n isMultiLineControl,\n isNumberControl,\n isObjectControl,\n isStringControl,\n rankWith,\n Resolve,\n schemaTypeIs,\n uiTypeIs,\n} from '@jsonforms/core'\nimport { markRaw } from 'vue'\n\nimport { createNuxtUiArrayListRenderer } from './renderers/complex/NuxtUiArrayListRenderer'\nimport { NuxtUiObjectRenderer } from './renderers/complex/NuxtUiObjectRenderer'\nimport { createNuxtUiBooleanControl } from './renderers/controls/NuxtUiBooleanControl'\nimport { NuxtUiEnumControl } from './renderers/controls/NuxtUiEnumControl'\nimport { NuxtUiIntegerControl } from './renderers/controls/NuxtUiIntegerControl'\nimport { NuxtUiMultiEnumControl } from './renderers/controls/NuxtUiMultiEnumControl'\nimport { NuxtUiNumberControl } from './renderers/controls/NuxtUiNumberControl'\nimport { NuxtUiPasswordControl } from './renderers/controls/NuxtUiPasswordControl'\nimport { createNuxtUiStringControl } from './renderers/controls/NuxtUiStringControl'\nimport { NuxtUiTextareaControl } from './renderers/controls/NuxtUiTextareaControl'\nimport { createNuxtUiCategorizationRenderer } from './renderers/layouts/NuxtUiCategorizationRenderer'\nimport { createNuxtUiCategoryRenderer } from './renderers/layouts/NuxtUiCategoryRenderer'\nimport { createNuxtUiGroupRenderer } from './renderers/layouts/NuxtUiGroupRenderer'\nimport { createNuxtUiHorizontalLayoutRenderer } from './renderers/layouts/NuxtUiHorizontalLayoutRenderer'\nimport { createNuxtUiLabelRenderer } from './renderers/layouts/NuxtUiLabelRenderer'\nimport { createNuxtUiVerticalLayoutRenderer } from './renderers/layouts/NuxtUiVerticalLayoutRenderer'\nimport {\n mergeTheme,\n type NuxtUiRenderersTheme,\n} from './renderers/theme'\n\n// Intentionally rank higher than typical defaults.\nconst RANK = 10\nconst ENUM_RANK = RANK + 1\nconst PASSWORD_RANK = ENUM_RANK + 1\n\nconst isMultiEnumControl = (\n uischema: unknown,\n schema: unknown,\n context: unknown,\n): boolean => {\n if (!uiTypeIs('Control')(uischema as any, schema as any, context as any)) {\n return false\n }\n\n const scope = (uischema as any)?.scope\n if (typeof scope !== 'string') return false\n\n // JSONForms passes the root schema into testers, but different call sites can\n // vary. Resolve against whatever we have, preferring the provided rootSchema.\n const rootSchema = (context as any)?.rootSchema ?? (schema as any)\n let resolved: any\n try {\n resolved = Resolve.schema(schema as any, scope, rootSchema)\n } catch {\n return false\n }\n\n if (resolved?.type !== 'array') return false\n\n const items = resolved?.items\n if (!items) return false\n\n // JSON Schema `items` can be a schema or an array of schemas.\n if (Array.isArray(items)) return false\n if (typeof items !== 'object' || items === null) return false\n\n const resolvedItems =\n '$ref' in items && typeof (items as any).$ref === 'string'\n ? Resolve.schema(rootSchema, (items as any).$ref, rootSchema)\n : items\n\n return isEnumSchema(resolvedItems as any)\n}\n\n/** Matches oneOf: [{ const, title? }, ...] - enum-like schema with display labels. */\nconst isOneOfEnumControl = (\n uischema: unknown,\n schema: unknown,\n context: unknown,\n): boolean => {\n if (!uiTypeIs('Control')(uischema as any, schema as any, context as any)) {\n return false\n }\n\n const scope = (uischema as any)?.scope\n if (typeof scope !== 'string') return false\n\n const rootSchema = (context as any)?.rootSchema ?? (schema as any)\n let resolved: any\n try {\n resolved = Resolve.schema(schema as any, scope, rootSchema)\n } catch {\n return false\n }\n\n const oneOf = resolved?.oneOf\n if (!Array.isArray(oneOf) || oneOf.length === 0) return false\n\n for (const entry of oneOf) {\n if (typeof entry !== 'object' || entry === null) continue\n if (!('const' in (entry as Record<string, unknown>))) return false\n }\n return true\n}\n\nexport interface CreateNuxtUiRenderersOptions {\n /** Override theme classes. Use semantic jf-* or custom (Tailwind, etc.). */\n theme?: Partial<NuxtUiRenderersTheme>\n /**\n * Build full docs URL from schema x-docs-path.\n * When provided, controls with x-docs-path show a docs link next to the label.\n */\n docsUrl?: (path: string) => string\n}\n\nexport function createNuxtUiRenderers(\n options?: CreateNuxtUiRenderersOptions,\n): JsonFormsRendererRegistryEntry[] {\n const theme = mergeTheme(options?.theme)\n const docsUrl = options?.docsUrl\n\n return [\n // Layouts\n {\n tester: rankWith(RANK, uiTypeIs('VerticalLayout')),\n renderer: markRaw(createNuxtUiVerticalLayoutRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('HorizontalLayout')),\n renderer: markRaw(createNuxtUiHorizontalLayoutRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('Group')),\n renderer: markRaw(createNuxtUiGroupRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('Categorization')),\n renderer: markRaw(createNuxtUiCategorizationRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('Category')),\n renderer: markRaw(createNuxtUiCategoryRenderer(theme)),\n },\n {\n tester: rankWith(RANK, uiTypeIs('Label')),\n renderer: markRaw(createNuxtUiLabelRenderer(theme)),\n },\n\n // Complex schemas\n {\n tester: rankWith(RANK, schemaTypeIs('array')),\n renderer: markRaw(createNuxtUiArrayListRenderer(theme)),\n },\n {\n tester: rankWith(RANK, isObjectControl),\n renderer: markRaw(NuxtUiObjectRenderer),\n },\n\n // Primitive controls\n {\n tester: rankWith(RANK, isMultiLineControl),\n renderer: markRaw(NuxtUiTextareaControl),\n },\n {\n tester: rankWith(RANK, isNumberControl),\n renderer: markRaw(NuxtUiNumberControl),\n },\n {\n tester: rankWith(RANK, isIntegerControl),\n renderer: markRaw(NuxtUiIntegerControl),\n },\n {\n tester: rankWith(RANK, isBooleanControl),\n renderer: markRaw(createNuxtUiBooleanControl(theme)),\n },\n {\n // Multi-enum must outrank generic array renderer and string renderer.\n tester: rankWith(ENUM_RANK, isMultiEnumControl),\n renderer: markRaw(NuxtUiMultiEnumControl),\n },\n {\n // oneOf with const+title (display labels) - same as enum for rendering.\n tester: rankWith(ENUM_RANK, isOneOfEnumControl),\n renderer: markRaw(NuxtUiEnumControl),\n },\n {\n // Enum must outrank the generic string control, otherwise enums render\n // as freeform text inputs.\n tester: rankWith(ENUM_RANK, isEnumControl),\n renderer: markRaw(NuxtUiEnumControl),\n },\n {\n tester: rankWith(PASSWORD_RANK, and(isStringControl, formatIs('password'))),\n renderer: markRaw(NuxtUiPasswordControl),\n },\n {\n tester: rankWith(RANK, isStringControl),\n renderer: markRaw(createNuxtUiStringControl(docsUrl)),\n },\n ]\n}\n\n/** Default renderers with semantic theme. Import styles.css for default styling. */\nexport const nuxtUiRenderers: JsonFormsRendererRegistryEntry[] =\n createNuxtUiRenderers()\n","import type { ControlElement, JsonSchema, UISchemaElement } from '@jsonforms/core'\nimport {\n Resolve,\n composePaths,\n createDefaultValue,\n findUISchema,\n getFirstPrimitiveProp,\n} from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsArrayControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, resolveComponent } from 'vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { trimmedOrUndefined } from '../util'\n\nexport function createNuxtUiArrayListRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiArrayListRenderer',\n components: { DispatchRenderer },\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, addItem, removeItems, moveUp, moveDown } =\n useJsonFormsArrayControl(\n props as unknown as Parameters<typeof useJsonFormsArrayControl>[0],\n )\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n const items = computed<unknown[]>(() =>\n Array.isArray(control.value.data) ? control.value.data : [],\n )\n\n const arraySchema = computed<JsonSchema | undefined>(() => {\n try {\n return Resolve.schema(\n props.schema,\n control.value.uischema.scope,\n control.value.rootSchema,\n )\n } catch {\n return undefined\n }\n })\n\n const maxItemsReached = computed(() => {\n const max = arraySchema.value?.maxItems\n return typeof max === 'number' ? items.value.length >= max : false\n })\n\n const minItemsReached = computed(() => {\n const min = arraySchema.value?.minItems\n return typeof min === 'number' ? items.value.length <= min : false\n })\n\n const childUiSchema = computed<UISchemaElement>(() =>\n findUISchema(\n control.value.uischemas,\n control.value.schema,\n control.value.uischema.scope,\n control.value.path,\n undefined,\n control.value.uischema,\n control.value.rootSchema,\n ),\n )\n\n function childLabelForIndex(index: number): string {\n const childLabelProp =\n getChildLabelPropFromUiSchemaOptions(control.value.uischema.options) ??\n getFirstPrimitiveProp(control.value.schema)\n\n if (!childLabelProp) return `${index}`\n\n const labelValue = Resolve.data(\n control.value.data,\n composePaths(`${index}`, childLabelProp),\n )\n if (\n labelValue === undefined ||\n labelValue === null ||\n Number.isNaN(labelValue as any)\n ) {\n return ''\n }\n return String(labelValue)\n }\n\n function getChildLabelPropFromUiSchemaOptions(\n options: unknown,\n ): string | undefined {\n if (!options || typeof options !== 'object') return undefined\n const value = (options as Record<string, unknown>).childLabelProp\n return typeof value === 'string' ? value : undefined\n }\n\n function addButtonClick() {\n addItem(\n control.value.path,\n createDefaultValue(control.value.schema, control.value.rootSchema),\n )()\n }\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UButton = resolveComponent('UButton')\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: control.value.description,\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h('div', { class: theme.layoutVertical }, [\n h('div', { class: theme.flexBetween }, [\n h(\n 'div',\n { class: theme.textMutedXs },\n `${items.value.length} items`,\n ),\n h(\n UButton as any,\n {\n type: 'button',\n size: 'xs',\n variant: 'soft',\n color: 'neutral',\n disabled:\n !control.value.enabled || maxItemsReached.value,\n onClick: addButtonClick,\n },\n { default: () => 'Add' },\n ),\n ]),\n\n items.value.length === 0\n ? h('div', { class: theme.textMuted }, 'No items.')\n : null,\n\n ...items.value.map((_item, index) =>\n h(\n 'div',\n {\n key: `${control.value.path}-${index}`,\n class: theme.panel,\n },\n [\n h(\n 'div',\n { class: theme.arrayItemToolbar },\n [\n h('div', { class: 'jf-min-w-0' }, [\n h(\n 'div',\n { class: theme.textItemTitle },\n [\n `Item ${index + 1}`,\n childLabelForIndex(index)\n ? h(\n 'span',\n { class: theme.textItemSuffix },\n ` — ${childLabelForIndex(index)}`,\n )\n : null,\n ],\n ),\n ]),\n h('div', { class: theme.flexActions }, [\n h(\n UButton as any,\n {\n type: 'button',\n size: 'xs',\n variant: 'ghost',\n color: 'neutral',\n disabled:\n !control.value.enabled || index === 0,\n onClick: () =>\n moveUp?.(control.value.path, index)(),\n },\n { default: () => 'Up' },\n ),\n h(\n UButton as any,\n {\n type: 'button',\n size: 'xs',\n variant: 'ghost',\n color: 'neutral',\n disabled:\n !control.value.enabled ||\n index >= items.value.length - 1,\n onClick: () =>\n moveDown?.(control.value.path, index)(),\n },\n { default: () => 'Down' },\n ),\n h(\n UButton as any,\n {\n type: 'button',\n size: 'xs',\n variant: 'ghost',\n color: 'error',\n disabled:\n !control.value.enabled ||\n minItemsReached.value,\n onClick: () =>\n removeItems?.(control.value.path, [\n index,\n ])(),\n },\n { default: () => 'Remove' },\n ),\n ]),\n ],\n ),\n\n h(DispatchRenderer as any, {\n schema: control.value.schema,\n uischema: childUiSchema.value,\n path: composePaths(control.value.path, `${index}`),\n enabled: control.value.enabled,\n renderers: control.value.renderers,\n cells: control.value.cells,\n }),\n ],\n ),\n ),\n ]),\n },\n ),\n )\n }\n },\n })\n}\n","import type { ControlElement } from '@jsonforms/core'\nimport { hasEnableRule } from '@jsonforms/core'\nimport type { VNode } from 'vue'\nimport { h } from 'vue'\nimport { computed, type ComputedRef } from 'vue'\n\n/**\n * Extract x-docs-path from a JSON Schema property.\n * Returns the path when present and valid (starts with /), otherwise null.\n */\nexport function getDocsPathFromSchema(schema: unknown): string | null {\n if (!schema || typeof schema !== 'object' || Array.isArray(schema))\n return null\n const s = schema as Record<string, unknown>\n const path = s['x-docs-path']\n if (typeof path === 'string' && path.startsWith('/')) return path\n return null\n}\n\n/**\n * Render a docs link hint for UFormField when schema has x-docs-path.\n * Returns a slot render function or undefined when no docs URL.\n */\nexport function renderDocsHintSlot(\n schema: unknown,\n label: string,\n docsUrl: ((path: string) => string) | undefined,\n resolveComponent: (name: string) => unknown,\n): (() => VNode) | undefined {\n const path = getDocsPathFromSchema(schema)\n if (!path || !docsUrl) return undefined\n const ULink = resolveComponent('ULink')\n const UIcon = resolveComponent('UIcon')\n if (!ULink || !UIcon) return undefined\n const href = docsUrl(path)\n return () =>\n h(\n ULink as any,\n {\n href,\n target: '_blank',\n rel: 'noopener noreferrer',\n class: 'inline-flex items-center text-muted hover:text-primary',\n 'aria-label': `${label} docs`,\n title: `${label} docs`,\n },\n () => h(UIcon as any, { name: 'i-heroicons-information-circle' }),\n )\n}\n\nexport function trimmedOrUndefined(input: string | undefined): string | undefined {\n const v = input?.trim()\n return v ? v : undefined\n}\n\n/**\n * Resolves the control's description for the label/field.\n * Uses control.description when set, otherwise falls back to schema.description.\n */\nexport function controlDescription(control: {\n description?: string\n schema?: { description?: string }\n}): string | undefined {\n const d = control.description?.trim()\n if (d) return d\n const sd = (control.schema as { description?: string } | undefined)?.description\n return typeof sd === 'string' && sd.trim() ? sd.trim() : undefined\n}\n\nexport function errorFromControl(\n control: ComputedRef<{ errors: string }>,\n): ComputedRef<string | undefined> {\n return computed(() => trimmedOrUndefined(control.value.errors))\n}\n\n/** True when the resolved control schema marks the field read-only (JSON Schema `readOnly`). */\nexport function isSchemaReadOnly(schema: unknown): boolean {\n if (!schema || typeof schema !== 'object' || Array.isArray(schema)) return false\n return (schema as { readOnly?: unknown }).readOnly === true\n}\n\ntype JsonformsInjected = { readonly?: boolean } | undefined\n\ntype ControlForInputAttrs = {\n enabled: boolean\n schema?: unknown\n uischema?: ControlElement\n config?: { readonly?: boolean; readOnly?: boolean }\n}\n\n/**\n * Nuxt UI text inputs: use native `readonly` only when JSON Schema `readOnly` is why the control\n * is not enabled. Other causes (global JsonForms readonly, UI schema / config readonly, enable\n * rules, etc.) keep `disabled` so behavior stays unchanged.\n */\nexport function controlTextInputAttrs(\n control: ControlForInputAttrs,\n jsonforms: JsonformsInjected,\n): { readonly: boolean; disabled: boolean } {\n const schemaRO = isSchemaReadOnly(control.schema)\n if (!schemaRO) {\n return { readonly: false, disabled: !control.enabled }\n }\n\n if (jsonforms?.readonly === true) {\n return { readonly: false, disabled: !control.enabled }\n }\n\n const ui = control.uischema\n if (typeof ui?.options?.readonly === 'boolean' && ui.options.readonly) {\n return { readonly: false, disabled: !control.enabled }\n }\n if (typeof ui?.options?.readOnly === 'boolean' && ui.options.readOnly) {\n return { readonly: false, disabled: !control.enabled }\n }\n\n const cfg = control.config\n if (typeof cfg?.readonly === 'boolean' && cfg.readonly) {\n return { readonly: false, disabled: !control.enabled }\n }\n if (typeof cfg?.readOnly === 'boolean' && cfg.readOnly) {\n return { readonly: false, disabled: !control.enabled }\n }\n\n if (ui && hasEnableRule(ui) && !control.enabled) {\n return { readonly: false, disabled: true }\n }\n\n return { readonly: true, disabled: false }\n}\n\n","import type { ControlElement, GroupLayout, UISchemaElement } from '@jsonforms/core'\nimport { Generate, findUISchema } from '@jsonforms/core'\nimport {\n DispatchRenderer,\n rendererProps,\n useJsonFormsControlWithDetail,\n} from '@jsonforms/vue'\nimport { computed, defineComponent, h } from 'vue'\n\nexport const NuxtUiObjectRenderer = defineComponent({\n name: 'NuxtUiObjectRenderer',\n components: { DispatchRenderer },\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control } = useJsonFormsControlWithDetail(\n props as unknown as Parameters<typeof useJsonFormsControlWithDetail>[0],\n )\n\n const detailUiSchema = computed<UISchemaElement>(() => {\n const uiSchemaGenerator = () => {\n const uiSchema = Generate.uiSchema(\n control.value.schema,\n 'Group',\n undefined,\n control.value.rootSchema,\n )\n\n if (!control.value.path) {\n uiSchema.type = 'VerticalLayout'\n } else {\n ;(uiSchema as GroupLayout).label = control.value.label\n }\n return uiSchema\n }\n\n return findUISchema(\n control.value.uischemas,\n control.value.schema,\n control.value.uischema.scope,\n control.value.path,\n uiSchemaGenerator,\n control.value.uischema,\n control.value.rootSchema,\n )\n })\n\n return () => {\n if (!control.value.visible) return null\n\n return h(DispatchRenderer as any, {\n visible: control.value.visible,\n enabled: control.value.enabled,\n schema: control.value.schema,\n uischema: detailUiSchema.value,\n path: control.value.path,\n renderers: control.value.renderers,\n cells: control.value.cells,\n })\n }\n },\n})\n\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { computed, defineComponent, h, resolveComponent } from 'vue'\n\nimport { controlDescription, trimmedOrUndefined } from '../util'\n\nexport function createNuxtUiBooleanControl(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiBooleanControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n const modelValue = computed<boolean>({\n get: () => Boolean(control.value.data),\n set: (v: boolean) => handleChange(control.value.path, v),\n })\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const USwitch = resolveComponent('USwitch')\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(\n 'div',\n { class: theme.flexBetween },\n h(USwitch as any, {\n modelValue: modelValue.value,\n disabled: !control.value.enabled,\n 'aria-invalid': Boolean(errorMessage.value),\n 'onUpdate:modelValue': (v: boolean) => {\n modelValue.value = v\n },\n }),\n ),\n },\n ),\n )\n }\n },\n })\n}\n","import type { ControlElement, JsonSchema } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, resolveComponent } from 'vue'\n\nimport { controlDescription, trimmedOrUndefined } from '../util'\n\ntype EnumOption = { label: string; value: unknown }\n\nfunction schemaEnumOptions(schema: JsonSchema | undefined): EnumOption[] {\n if (!schema) return []\n\n if (Array.isArray(schema.enum)) {\n return schema.enum.map((v) => ({ label: String(v), value: v }))\n }\n\n const oneOf = (schema as unknown as { oneOf?: unknown }).oneOf\n if (!Array.isArray(oneOf)) return []\n\n const out: EnumOption[] = []\n for (const entry of oneOf) {\n if (typeof entry !== 'object' || entry === null) continue\n const maybe = entry as Record<string, unknown>\n if (!('const' in maybe)) continue\n out.push({\n value: maybe.const,\n label:\n typeof maybe.title === 'string' && maybe.title.trim()\n ? maybe.title\n : String(maybe.const),\n })\n }\n return out\n}\n\nexport const NuxtUiEnumControl = defineComponent({\n name: 'NuxtUiEnumControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n const options = computed<EnumOption[]>(() => schemaEnumOptions(control.value.schema))\n\n const selectedValue = computed<unknown>({\n get: () => control.value.data,\n set: (v: unknown) => handleChange(control.value.path, v),\n })\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const USelectMenu = resolveComponent('USelectMenu')\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(USelectMenu as any, {\n modelValue: selectedValue.value,\n items: options.value,\n valueKey: 'value',\n labelKey: 'label',\n disabled: !control.value.enabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n placeholder: 'Select...',\n 'onUpdate:modelValue': (v: unknown) => {\n selectedValue.value = v\n },\n }),\n },\n ),\n )\n }\n },\n})\n\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, inject, resolveComponent } from 'vue'\n\nimport { controlDescription, controlTextInputAttrs, trimmedOrUndefined } from '../util'\n\n/**\n * Native `<input type=\"number\">` (not `UInput`) so every `input` event dispatches to JsonForms\n * immediately. Nuxt UI’s `UInput` integrates with `useFormField` / debounced form events; relying\n * only on `update:modelValue` can leave parent `:data` out of sync until blur in some setups.\n */\nexport const NuxtUiIntegerControl = defineComponent({\n name: 'NuxtUiIntegerControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n const modelValue = computed(() => {\n const v = control.value.data\n return v === null || v === undefined ? '' : String(v)\n })\n\n function applyRawString(raw: string) {\n const trimmed = raw.trim()\n if (trimmed === '') {\n handleChange(control.value.path, undefined)\n return\n }\n\n const parsed = Number.parseInt(trimmed, 10)\n handleChange(control.value.path, Number.isFinite(parsed) ? parsed : undefined)\n }\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms)\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h('input', {\n type: 'number',\n inputmode: 'numeric',\n step: '1',\n class: [\n 'jf-input-native',\n errorMessage.value ? 'jf-input-native--error' : '',\n ]\n .filter(Boolean)\n .join(' '),\n value: modelValue.value,\n readonly,\n disabled,\n 'aria-invalid': Boolean(errorMessage.value),\n onInput: (e: Event) => {\n applyRawString((e.target as HTMLInputElement).value)\n },\n }),\n },\n ),\n )\n }\n },\n})\n\n","import type { ControlElement, JsonSchema } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, resolveComponent } from 'vue'\n\nimport { controlDescription, trimmedOrUndefined } from '../util'\n\ntype EnumOption = { label: string; value: unknown }\n\nfunction schemaEnumOptions(schema: JsonSchema | undefined): EnumOption[] {\n if (!schema) return []\n\n if (Array.isArray(schema.enum)) {\n return schema.enum.map((v) => ({ label: String(v), value: v }))\n }\n\n const oneOf = (schema as unknown as { oneOf?: unknown }).oneOf\n if (!Array.isArray(oneOf)) return []\n\n const out: EnumOption[] = []\n for (const entry of oneOf) {\n if (typeof entry !== 'object' || entry === null) continue\n const maybe = entry as Record<string, unknown>\n if (!('const' in maybe)) continue\n out.push({\n value: maybe.const,\n label:\n typeof maybe.title === 'string' && maybe.title.trim()\n ? maybe.title\n : String(maybe.const),\n })\n }\n return out\n}\n\nfunction arrayItemsSchema(schema: JsonSchema | undefined): JsonSchema | undefined {\n if (!schema) return undefined\n const items = (schema as unknown as { items?: unknown }).items\n if (typeof items !== 'object' || items === null) return undefined\n return items as JsonSchema\n}\n\nexport const NuxtUiMultiEnumControl = defineComponent({\n name: 'NuxtUiMultiEnumControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n const options = computed<EnumOption[]>(() =>\n schemaEnumOptions(arrayItemsSchema(control.value.schema)),\n )\n\n const selectedValues = computed<unknown[]>({\n get: () => (Array.isArray(control.value.data) ? control.value.data : []),\n set: (v: unknown[]) => handleChange(control.value.path, v),\n })\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const USelectMenu = resolveComponent('USelectMenu')\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(USelectMenu as any, {\n multiple: true,\n modelValue: selectedValues.value,\n items: options.value,\n valueKey: 'value',\n labelKey: 'label',\n disabled: !control.value.enabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n placeholder: 'Select...',\n 'onUpdate:modelValue': (v: unknown) => {\n selectedValues.value = Array.isArray(v) ? v : []\n },\n }),\n },\n ),\n )\n }\n },\n})\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, inject, resolveComponent } from 'vue'\n\nimport { controlDescription, controlTextInputAttrs, trimmedOrUndefined } from '../util'\n\n/** See {@link NuxtUiIntegerControl}: native input so each `input` event updates JsonForms core. */\nexport const NuxtUiNumberControl = defineComponent({\n name: 'NuxtUiNumberControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n const modelValue = computed(() => {\n const v = control.value.data\n return v === null || v === undefined ? '' : String(v)\n })\n\n function applyRawString(raw: string) {\n const trimmed = raw.trim()\n if (trimmed === '') {\n handleChange(control.value.path, undefined)\n return\n }\n const parsed = Number(trimmed)\n handleChange(control.value.path, Number.isFinite(parsed) ? parsed : undefined)\n }\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms)\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h('input', {\n type: 'number',\n inputmode: 'decimal',\n class: [\n 'jf-input-native',\n errorMessage.value ? 'jf-input-native--error' : '',\n ]\n .filter(Boolean)\n .join(' '),\n value: modelValue.value,\n readonly,\n disabled,\n 'aria-invalid': Boolean(errorMessage.value),\n onInput: (e: Event) => {\n applyRawString((e.target as HTMLInputElement).value)\n },\n }),\n },\n ),\n )\n }\n },\n})\n\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, inject, ref, resolveComponent } from 'vue'\n\nimport { controlDescription, controlTextInputAttrs, trimmedOrUndefined } from '../util'\n\nexport const NuxtUiPasswordControl = defineComponent({\n name: 'NuxtUiPasswordControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n const showPassword = ref(false)\n\n const inputType = computed(() => (showPassword.value ? 'text' : 'password'))\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UInput = resolveComponent('UInput')\n const UButton = resolveComponent('UButton')\n const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms)\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(\n UInput as any,\n {\n modelValue: control.value.data ?? '',\n class: 'w-full',\n type: inputType.value,\n autocomplete: 'current-password',\n readonly,\n disabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n 'onUpdate:modelValue': (v: unknown) =>\n handleChange(control.value.path, v),\n },\n {\n trailing: () =>\n h(UButton as any, {\n type: 'button',\n color: 'neutral',\n variant: 'ghost',\n square: true,\n icon: showPassword.value\n ? 'i-heroicons-eye-slash'\n : 'i-heroicons-eye',\n 'aria-pressed': showPassword.value,\n 'aria-label': showPassword.value\n ? 'Hide password'\n : 'Show password',\n disabled,\n onClick: () => {\n showPassword.value = !showPassword.value\n },\n }),\n },\n ),\n },\n ),\n )\n }\n },\n})\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport {\n computed,\n defineComponent,\n h,\n inject,\n resolveComponent,\n} from 'vue'\n\nimport {\n controlDescription,\n controlTextInputAttrs,\n renderDocsHintSlot,\n trimmedOrUndefined,\n} from '../util'\n\nexport function createNuxtUiStringControl(\n docsUrl?: (path: string) => string,\n) {\n return defineComponent({\n name: 'NuxtUiStringControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() =>\n trimmedOrUndefined(control.value.errors),\n )\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UInput = resolveComponent('UInput')\n const { readonly, disabled } = controlTextInputAttrs(\n control.value,\n jsonforms,\n )\n\n const slots: Record<string, () => ReturnType<typeof h>> = {\n default: () =>\n h(UInput as any, {\n modelValue: control.value.data ?? '',\n class: 'w-full',\n readonly,\n disabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n 'onUpdate:modelValue': (v: unknown) =>\n handleChange(control.value.path, v),\n }),\n }\n const hintSlot = renderDocsHintSlot(\n control.value.schema,\n control.value.label ?? '',\n docsUrl,\n resolveComponent,\n )\n if (hintSlot) slots.hint = hintSlot\n\n return h(\n 'div',\n {},\n h(UFormField as any, {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n }, slots),\n )\n }\n },\n })\n}\n\n\n","import type { ControlElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsControl } from '@jsonforms/vue'\nimport { computed, defineComponent, h, inject, resolveComponent } from 'vue'\n\nimport { controlDescription, controlTextInputAttrs, trimmedOrUndefined } from '../util'\n\nexport const NuxtUiTextareaControl = defineComponent({\n name: 'NuxtUiTextareaControl',\n props: rendererProps<ControlElement>(),\n setup(props) {\n const { control, handleChange } = useJsonFormsControl(\n props as unknown as Parameters<typeof useJsonFormsControl>[0],\n )\n const jsonforms = inject<{ readonly?: boolean }>('jsonforms')\n\n const errorMessage = computed(() => trimmedOrUndefined(control.value.errors))\n\n return () => {\n if (!control.value.visible) return null\n\n const UFormField = resolveComponent('UFormField')\n const UTextarea = resolveComponent('UTextarea')\n const { readonly, disabled } = controlTextInputAttrs(control.value, jsonforms)\n\n return h(\n 'div',\n {},\n h(\n UFormField as any,\n {\n label: control.value.label,\n description: controlDescription(control.value),\n required: control.value.required,\n error: errorMessage.value,\n },\n {\n default: () =>\n h(UTextarea as any, {\n modelValue: control.value.data ?? '',\n class: 'w-full',\n readonly,\n disabled,\n color: errorMessage.value ? 'error' : undefined,\n 'aria-invalid': Boolean(errorMessage.value),\n rows: 5,\n 'onUpdate:modelValue': (v: unknown) =>\n handleChange(control.value.path, v),\n }),\n },\n ),\n )\n }\n },\n})\n\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsCategorization } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiCategorizationRenderer(\n theme: NuxtUiRenderersTheme,\n) {\n return defineComponent({\n name: 'NuxtUiCategorizationRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout, categories } = useJsonFormsCategorization(\n props as unknown as Parameters<typeof useJsonFormsCategorization>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n return h(\n 'div',\n { class: theme.layoutVerticalWide },\n categories.map((categoryRef, catIndex) => {\n const category = categoryRef.value\n const elements = category.uischema.elements ?? []\n\n return h(\n 'div',\n {\n key: `${layout.value.path}-cat-${catIndex}`,\n class: theme.layoutVertical,\n },\n [\n category.label\n ? h('div', { class: theme.labelSection }, category.label)\n : null,\n h(\n 'div',\n { class: theme.layoutVertical },\n elements.map((element, index) =>\n h(\n 'div',\n { key: `${category.path}-${index}` },\n h(DispatchRenderer as any, {\n schema: category.schema,\n uischema: element,\n path: category.path,\n enabled: category.enabled,\n renderers: category.renderers,\n cells: category.cells,\n }),\n ),\n ),\n ),\n ],\n )\n }),\n )\n }\n },\n })\n}\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsLayout } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiCategoryRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiCategoryRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout } = useJsonFormsLayout(\n props as unknown as Parameters<typeof useJsonFormsLayout>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n const elements = layout.value.uischema.elements ?? []\n\n return h('div', { class: theme.layoutVertical }, [\n layout.value.label\n ? h('div', { class: theme.labelSection }, layout.value.label)\n : null,\n h(\n 'div',\n { class: theme.layoutVertical },\n elements.map((element, index) =>\n h(\n 'div',\n { key: `${layout.value.path}-${index}` },\n h(DispatchRenderer as any, {\n schema: layout.value.schema,\n uischema: element,\n path: layout.value.path,\n enabled: layout.value.enabled,\n renderers: layout.value.renderers,\n cells: layout.value.cells,\n }),\n ),\n ),\n ),\n ])\n }\n },\n })\n}\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsLayout } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiGroupRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiGroupRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout } = useJsonFormsLayout(\n props as unknown as Parameters<typeof useJsonFormsLayout>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n const elements = layout.value.uischema.elements ?? []\n const isNested = layout.value.path?.includes('.') ?? false\n const containerClass = isNested ? theme.groupNested : theme.panel\n\n return h(\n 'div',\n { class: containerClass },\n [\n layout.value.label\n ? h('div', { class: theme.labelSectionSpaced }, layout.value.label)\n : null,\n h(\n 'div',\n { class: theme.layoutVertical },\n elements.map((element, index) =>\n h(\n 'div',\n { key: `${layout.value.path}-${index}` },\n h(DispatchRenderer as any, {\n schema: layout.value.schema,\n uischema: element,\n path: layout.value.path,\n enabled: layout.value.enabled,\n renderers: layout.value.renderers,\n cells: layout.value.cells,\n }),\n ),\n ),\n ),\n ],\n )\n }\n },\n })\n}\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsLayout } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiHorizontalLayoutRenderer(\n theme: NuxtUiRenderersTheme,\n) {\n return defineComponent({\n name: 'NuxtUiHorizontalLayoutRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout } = useJsonFormsLayout(\n props as unknown as Parameters<typeof useJsonFormsLayout>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n const elements = layout.value.uischema.elements ?? []\n\n return h(\n 'div',\n { class: theme.layoutHorizontal },\n elements.map((element, index) =>\n h(\n 'div',\n {\n key: `${layout.value.path}-${index}`,\n class: theme.layoutHorizontalItem,\n },\n h(DispatchRenderer as any, {\n schema: layout.value.schema,\n uischema: element,\n path: layout.value.path,\n enabled: layout.value.enabled,\n renderers: layout.value.renderers,\n cells: layout.value.cells,\n }),\n ),\n ),\n )\n }\n },\n })\n}\n","import type { LabelElement } from '@jsonforms/core'\nimport { rendererProps, useJsonFormsLabel } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiLabelRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiLabelRenderer',\n props: rendererProps<LabelElement>(),\n setup(props) {\n const { label } = useJsonFormsLabel(\n props as unknown as Parameters<typeof useJsonFormsLabel>[0],\n )\n\n return () => {\n if (!label.value.visible) return null\n return h('div', { class: theme.textLabel }, label.value.text)\n }\n },\n })\n}\n","import type { Layout } from '@jsonforms/core'\nimport { DispatchRenderer, rendererProps, useJsonFormsLayout } from '@jsonforms/vue'\nimport type { NuxtUiRenderersTheme } from '../theme'\nimport { defineComponent, h } from 'vue'\n\nexport function createNuxtUiVerticalLayoutRenderer(theme: NuxtUiRenderersTheme) {\n return defineComponent({\n name: 'NuxtUiVerticalLayoutRenderer',\n components: { DispatchRenderer },\n props: rendererProps<Layout>(),\n setup(props) {\n const { layout } = useJsonFormsLayout(\n props as unknown as Parameters<typeof useJsonFormsLayout>[0],\n )\n\n return () => {\n if (!layout.value.visible) return null\n\n const elements = layout.value.uischema.elements ?? []\n\n return h(\n 'div',\n { class: theme.layoutVertical },\n elements.map((element, index) =>\n h(\n 'div',\n { key: `${layout.value.path}-${index}` },\n h(DispatchRenderer as any, {\n schema: layout.value.schema,\n uischema: element,\n path: layout.value.path,\n enabled: layout.value.enabled,\n renderers: layout.value.renderers,\n cells: layout.value.cells,\n }),\n ),\n ),\n )\n }\n },\n })\n}\n","/**\n * Theme for JSONForms Nuxt UI renderers.\n * Uses semantic class names (jf-*) - styled by default styles.css.\n * Consumers can override any role with custom classes (Tailwind, Bootstrap, etc.).\n */\n\nexport interface NuxtUiRenderersTheme {\n /** Bordered panel (top-level groups, array items). */\n panel: string\n /** Nested group container (no border, padding only). */\n groupNested: string\n /** Vertical stack layout. */\n layoutVertical: string\n /** Vertical stack with wider gap (categorization). */\n layoutVerticalWide: string\n /** Horizontal layout, responsive. */\n layoutHorizontal: string\n /** Child of horizontal layout (flex grow, min-width). */\n layoutHorizontalItem: string\n /** Array item toolbar (flex + margin). */\n arrayItemToolbar: string\n /** Section/category label. */\n labelSection: string\n /** Section label with bottom margin. */\n labelSectionSpaced: string\n /** Muted secondary text. */\n textMuted: string\n /** Muted secondary text, smaller. */\n textMutedXs: string\n /** Array item title. */\n textItemTitle: string\n /** Suffix after item title. */\n textItemSuffix: string\n /** Plain label. */\n textLabel: string\n /** Flex row: centered, space between. */\n flexBetween: string\n /** Flex row: start-aligned, space between. */\n flexBetweenStart: string\n /** Compact flex row for action buttons. */\n flexActions: string\n}\n\n/** Semantic class defaults - styled by styles.css. No Tailwind/CSS framework dependency. */\nexport const defaultTheme: NuxtUiRenderersTheme = {\n panel: 'jf-panel',\n groupNested: 'jf-group',\n layoutVertical: 'jf-layout-vertical',\n layoutVerticalWide: 'jf-layout-vertical-wide',\n layoutHorizontal: 'jf-layout-horizontal',\n layoutHorizontalItem: 'jf-layout-horizontal-item',\n arrayItemToolbar: 'jf-array-item-toolbar',\n labelSection: 'jf-label-section',\n labelSectionSpaced: 'jf-label-section-spaced',\n textMuted: 'jf-text-muted',\n textMutedXs: 'jf-text-muted-xs',\n textItemTitle: 'jf-text-item-title',\n textItemSuffix: 'jf-text-item-suffix',\n textLabel: 'jf-text-label',\n flexBetween: 'jf-flex-between',\n flexBetweenStart: 'jf-flex-between-start',\n flexActions: 'jf-flex-actions',\n}\n\nexport function mergeTheme(\n overrides?: Partial<NuxtUiRenderersTheme>,\n): NuxtUiRenderersTheme {\n return overrides ? { ...defaultTheme, ...overrides } : { ...defaultTheme }\n}\n"],"mappings":";AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAAA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,eAAe;;;AChBxB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,kBAAkB,eAAe,gCAAgC;AAC1E,SAAS,YAAAC,WAAU,iBAAiB,KAAAC,IAAG,wBAAwB;;;ACR/D,SAAS,qBAAqB;AAE9B,SAAS,SAAS;AAClB,SAAS,gBAAkC;AAMpC,SAAS,sBAAsB,QAAgC;AACpE,MAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM;AAC/D,WAAO;AACT,QAAM,IAAI;AACV,QAAM,OAAO,EAAE,aAAa;AAC5B,MAAI,OAAO,SAAS,YAAY,KAAK,WAAW,GAAG,EAAG,QAAO;AAC7D,SAAO;AACT;AAMO,SAAS,mBACd,QACA,OACA,SACAC,oBAC2B;AAC3B,QAAM,OAAO,sBAAsB,MAAM;AACzC,MAAI,CAAC,QAAQ,CAAC,QAAS,QAAO;AAC9B,QAAM,QAAQA,mBAAiB,OAAO;AACtC,QAAM,QAAQA,mBAAiB,OAAO;AACtC,MAAI,CAAC,SAAS,CAAC,MAAO,QAAO;AAC7B,QAAM,OAAO,QAAQ,IAAI;AACzB,SAAO,MACL;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,OAAO;AAAA,MACP,cAAc,GAAG,KAAK;AAAA,MACtB,OAAO,GAAG,KAAK;AAAA,IACjB;AAAA,IACA,MAAM,EAAE,OAAc,EAAE,MAAM,iCAAiC,CAAC;AAAA,EAClE;AACJ;AAEO,SAAS,mBAAmB,OAA+C;AAChF,QAAM,IAAI,OAAO,KAAK;AACtB,SAAO,IAAI,IAAI;AACjB;AAMO,SAAS,mBAAmB,SAGZ;AACrB,QAAM,IAAI,QAAQ,aAAa,KAAK;AACpC,MAAI,EAAG,QAAO;AACd,QAAM,KAAM,QAAQ,QAAiD;AACrE,SAAO,OAAO,OAAO,YAAY,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI;AAC3D;AASO,SAAS,iBAAiB,QAA0B;AACzD,MAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,EAAG,QAAO;AAC3E,SAAQ,OAAkC,aAAa;AACzD;AAgBO,SAAS,sBACd,SACA,WAC0C;AAC1C,QAAM,WAAW,iBAAiB,QAAQ,MAAM;AAChD,MAAI,CAAC,UAAU;AACb,WAAO,EAAE,UAAU,OAAO,UAAU,CAAC,QAAQ,QAAQ;AAAA,EACvD;AAEA,MAAI,WAAW,aAAa,MAAM;AAChC,WAAO,EAAE,UAAU,OAAO,UAAU,CAAC,QAAQ,QAAQ;AAAA,EACvD;AAEA,QAAM,KAAK,QAAQ;AACnB,MAAI,OAAO,IAAI,SAAS,aAAa,aAAa,GAAG,QAAQ,UAAU;AACrE,WAAO,EAAE,UAAU,OAAO,UAAU,CAAC,QAAQ,QAAQ;AAAA,EACvD;AACA,MAAI,OAAO,IAAI,SAAS,aAAa,aAAa,GAAG,QAAQ,UAAU;AACrE,WAAO,EAAE,UAAU,OAAO,UAAU,CAAC,QAAQ,QAAQ;AAAA,EACvD;AAEA,QAAM,MAAM,QAAQ;AACpB,MAAI,OAAO,KAAK,aAAa,aAAa,IAAI,UAAU;AACtD,WAAO,EAAE,UAAU,OAAO,UAAU,CAAC,QAAQ,QAAQ;AAAA,EACvD;AACA,MAAI,OAAO,KAAK,aAAa,aAAa,IAAI,UAAU;AACtD,WAAO,EAAE,UAAU,OAAO,UAAU,CAAC,QAAQ,QAAQ;AAAA,EACvD;AAEA,MAAI,MAAM,cAAc,EAAE,KAAK,CAAC,QAAQ,SAAS;AAC/C,WAAO,EAAE,UAAU,OAAO,UAAU,KAAK;AAAA,EAC3C;AAEA,SAAO,EAAE,UAAU,MAAM,UAAU,MAAM;AAC3C;;;ADpHO,SAAS,8BAA8B,OAA6B;AACzE,SAAO,gBAAgB;AAAA,IACrB,MAAM;AAAA,IACN,YAAY,EAAE,iBAAiB;AAAA,IAC/B,OAAO,cAA8B;AAAA,IACrC,MAAM,OAAO;AACX,YAAM,EAAE,SAAS,SAAS,aAAa,QAAQ,SAAS,IACtD;AAAA,QACE;AAAA,MACF;AAEF,YAAM,eAAeC,UAAS,MAAM,mBAAmB,QAAQ,MAAM,MAAM,CAAC;AAE5E,YAAM,QAAQA;AAAA,QAAoB,MAChC,MAAM,QAAQ,QAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,OAAO,CAAC;AAAA,MAC5D;AAEA,YAAM,cAAcA,UAAiC,MAAM;AACzD,YAAI;AACF,iBAAO,QAAQ;AAAA,YACb,MAAM;AAAA,YACN,QAAQ,MAAM,SAAS;AAAA,YACvB,QAAQ,MAAM;AAAA,UAChB;AAAA,QACF,QAAQ;AACN,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AAED,YAAM,kBAAkBA,UAAS,MAAM;AACrC,cAAM,MAAM,YAAY,OAAO;AAC/B,eAAO,OAAO,QAAQ,WAAW,MAAM,MAAM,UAAU,MAAM;AAAA,MAC/D,CAAC;AAED,YAAM,kBAAkBA,UAAS,MAAM;AACrC,cAAM,MAAM,YAAY,OAAO;AAC/B,eAAO,OAAO,QAAQ,WAAW,MAAM,MAAM,UAAU,MAAM;AAAA,MAC/D,CAAC;AAED,YAAM,gBAAgBA;AAAA,QAA0B,MAC9C;AAAA,UACE,QAAQ,MAAM;AAAA,UACd,QAAQ,MAAM;AAAA,UACd,QAAQ,MAAM,SAAS;AAAA,UACvB,QAAQ,MAAM;AAAA,UACd;AAAA,UACA,QAAQ,MAAM;AAAA,UACd,QAAQ,MAAM;AAAA,QAChB;AAAA,MACF;AAEA,eAAS,mBAAmB,OAAuB;AACjD,cAAM,iBACJ,qCAAqC,QAAQ,MAAM,SAAS,OAAO,KACnE,sBAAsB,QAAQ,MAAM,MAAM;AAE5C,YAAI,CAAC,eAAgB,QAAO,GAAG,KAAK;AAEpC,cAAM,aAAa,QAAQ;AAAA,UACzB,QAAQ,MAAM;AAAA,UACd,aAAa,GAAG,KAAK,IAAI,cAAc;AAAA,QACzC;AACA,YACE,eAAe,UACf,eAAe,QACf,OAAO,MAAM,UAAiB,GAC9B;AACA,iBAAO;AAAA,QACT;AACA,eAAO,OAAO,UAAU;AAAA,MAC1B;AAEA,eAAS,qCACP,SACoB;AACpB,YAAI,CAAC,WAAW,OAAO,YAAY,SAAU,QAAO;AACpD,cAAM,QAAS,QAAoC;AACnD,eAAO,OAAO,UAAU,WAAW,QAAQ;AAAA,MAC7C;AAEA,eAAS,iBAAiB;AACxB;AAAA,UACE,QAAQ,MAAM;AAAA,UACd,mBAAmB,QAAQ,MAAM,QAAQ,QAAQ,MAAM,UAAU;AAAA,QACnE,EAAE;AAAA,MACJ;AAEA,aAAO,MAAM;AACX,YAAI,CAAC,QAAQ,MAAM,QAAS,QAAO;AAEnC,cAAM,aAAa,iBAAiB,YAAY;AAChD,cAAM,UAAU,iBAAiB,SAAS;AAE1C,eAAOC;AAAA,UACL;AAAA,UACA,CAAC;AAAA,UACDA;AAAA,YACE;AAAA,YACA;AAAA,cACE,OAAO,QAAQ,MAAM;AAAA,cACrB,aAAa,QAAQ,MAAM;AAAA,cAC3B,UAAU,QAAQ,MAAM;AAAA,cACxB,OAAO,aAAa;AAAA,YACtB;AAAA,YACA;AAAA,cACE,SAAS,MACPA,GAAE,OAAO,EAAE,OAAO,MAAM,eAAe,GAAG;AAAA,gBACxCA,GAAE,OAAO,EAAE,OAAO,MAAM,YAAY,GAAG;AAAA,kBACrCA;AAAA,oBACE;AAAA,oBACA,EAAE,OAAO,MAAM,YAAY;AAAA,oBAC3B,GAAG,MAAM,MAAM,MAAM;AAAA,kBACvB;AAAA,kBACAA;AAAA,oBACE;AAAA,oBACA;AAAA,sBACE,MAAM;AAAA,sBACN,MAAM;AAAA,sBACN,SAAS;AAAA,sBACT,OAAO;AAAA,sBACP,UACE,CAAC,QAAQ,MAAM,WAAW,gBAAgB;AAAA,sBAC5C,SAAS;AAAA,oBACX;AAAA,oBACA,EAAE,SAAS,MAAM,MAAM;AAAA,kBACzB;AAAA,gBACF,CAAC;AAAA,gBAED,MAAM,MAAM,WAAW,IACnBA,GAAE,OAAO,EAAE,OAAO,MAAM,UAAU,GAAG,WAAW,IAChD;AAAA,gBAEJ,GAAG,MAAM,MAAM;AAAA,kBAAI,CAAC,OAAO,UACzBA;AAAA,oBACE;AAAA,oBACA;AAAA,sBACE,KAAK,GAAG,QAAQ,MAAM,IAAI,IAAI,KAAK;AAAA,sBACnC,OAAO,MAAM;AAAA,oBACf;AAAA,oBACA;AAAA,sBACEA;AAAA,wBACE;AAAA,wBACA,EAAE,OAAO,MAAM,iBAAiB;AAAA,wBAChC;AAAA,0BACEA,GAAE,OAAO,EAAE,OAAO,aAAa,GAAG;AAAA,4BAChCA;AAAA,8BACE;AAAA,8BACA,EAAE,OAAO,MAAM,cAAc;AAAA,8BAC7B;AAAA,gCACE,QAAQ,QAAQ,CAAC;AAAA,gCACjB,mBAAmB,KAAK,IACpBA;AAAA,kCACE;AAAA,kCACA,EAAE,OAAO,MAAM,eAAe;AAAA,kCAC9B,WAAM,mBAAmB,KAAK,CAAC;AAAA,gCACjC,IACA;AAAA,8BACN;AAAA,4BACF;AAAA,0BACF,CAAC;AAAA,0BACDA,GAAE,OAAO,EAAE,OAAO,MAAM,YAAY,GAAG;AAAA,4BACrCA;AAAA,8BACE;AAAA,8BACA;AAAA,gCACE,MAAM;AAAA,gCACN,MAAM;AAAA,gCACN,SAAS;AAAA,gCACT,OAAO;AAAA,gCACP,UACE,CAAC,QAAQ,MAAM,WAAW,UAAU;AAAA,gCACtC,SAAS,MACP,SAAS,QAAQ,MAAM,MAAM,KAAK,EAAE;AAAA,8BACxC;AAAA,8BACA,EAAE,SAAS,MAAM,KAAK;AAAA,4BACxB;AAAA,4BACAA;AAAA,8BACE;AAAA,8BACA;AAAA,gCACE,MAAM;AAAA,gCACN,MAAM;AAAA,gCACN,SAAS;AAAA,gCACT,OAAO;AAAA,gCACP,UACE,CAAC,QAAQ,MAAM,WACf,SAAS,MAAM,MAAM,SAAS;AAAA,gCAChC,SAAS,MACP,WAAW,QAAQ,MAAM,MAAM,KAAK,EAAE;AAAA,8BAC1C;AAAA,8BACA,EAAE,SAAS,MAAM,OAAO;AAAA,4BAC1B;AAAA,4BACAA;AAAA,8BACE;AAAA,8BACA;AAAA,gCACE,MAAM;AAAA,gCACN,MAAM;AAAA,gCACN,SAAS;AAAA,gCACT,OAAO;AAAA,gCACP,UACE,CAAC,QAAQ,MAAM,WACf,gBAAgB;AAAA,gCAClB,SAAS,MACP,cAAc,QAAQ,MAAM,MAAM;AAAA,kCAChC;AAAA,gCACF,CAAC,EAAE;AAAA,8BACP;AAAA,8BACA,EAAE,SAAS,MAAM,SAAS;AAAA,4BAC5B;AAAA,0BACF,CAAC;AAAA,wBACH;AAAA,sBACF;AAAA,sBAEAA,GAAE,kBAAyB;AAAA,wBACzB,QAAQ,QAAQ,MAAM;AAAA,wBACtB,UAAU,cAAc;AAAA,wBACxB,MAAM,aAAa,QAAQ,MAAM,MAAM,GAAG,KAAK,EAAE;AAAA,wBACjD,SAAS,QAAQ,MAAM;AAAA,wBACvB,WAAW,QAAQ,MAAM;AAAA,wBACzB,OAAO,QAAQ,MAAM;AAAA,sBACvB,CAAC;AAAA,oBACH;AAAA,kBACF;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AEjPA,SAAS,UAAU,gBAAAC,qBAAoB;AACvC;AAAA,EACE,oBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA;AAAA,OACK;AACP,SAAS,YAAAC,WAAU,mBAAAC,kBAAiB,KAAAC,UAAS;AAEtC,IAAM,uBAAuBD,iBAAgB;AAAA,EAClD,MAAM;AAAA,EACN,YAAY,EAAE,kBAAAH,kBAAiB;AAAA,EAC/B,OAAOC,eAA8B;AAAA,EACrC,MAAM,OAAO;AACX,UAAM,EAAE,QAAQ,IAAI;AAAA,MAClB;AAAA,IACF;AAEA,UAAM,iBAAiBC,UAA0B,MAAM;AACrD,YAAM,oBAAoB,MAAM;AAC9B,cAAM,WAAW,SAAS;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd;AAAA,UACA;AAAA,UACA,QAAQ,MAAM;AAAA,QAChB;AAEA,YAAI,CAAC,QAAQ,MAAM,MAAM;AACvB,mBAAS,OAAO;AAAA,QAClB,OAAO;AACL;AAAC,UAAC,SAAyB,QAAQ,QAAQ,MAAM;AAAA,QACnD;AACA,eAAO;AAAA,MACT;AAEA,aAAOH;AAAA,QACL,QAAQ,MAAM;AAAA,QACd,QAAQ,MAAM;AAAA,QACd,QAAQ,MAAM,SAAS;AAAA,QACvB,QAAQ,MAAM;AAAA,QACd;AAAA,QACA,QAAQ,MAAM;AAAA,QACd,QAAQ,MAAM;AAAA,MAChB;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,UAAI,CAAC,QAAQ,MAAM,QAAS,QAAO;AAEnC,aAAOK,GAAEJ,mBAAyB;AAAA,QAChC,SAAS,QAAQ,MAAM;AAAA,QACvB,SAAS,QAAQ,MAAM;AAAA,QACvB,QAAQ,QAAQ,MAAM;AAAA,QACtB,UAAU,eAAe;AAAA,QACzB,MAAM,QAAQ,MAAM;AAAA,QACpB,WAAW,QAAQ,MAAM;AAAA,QACzB,OAAO,QAAQ,MAAM;AAAA,MACvB,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC;;;AC3DD,SAAS,iBAAAK,gBAAe,2BAA2B;AAEnD,SAAS,YAAAC,WAAU,mBAAAC,kBAAiB,KAAAC,IAAG,oBAAAC,yBAAwB;AAIxD,SAAS,2BAA2B,OAA6B;AACtE,SAAOC,iBAAgB;AAAA,IACrB,MAAM;AAAA,IACN,OAAOC,eAA8B;AAAA,IACrC,MAAM,OAAO;AACX,YAAM,EAAE,SAAS,aAAa,IAAI;AAAA,QAChC;AAAA,MACF;AAEA,YAAM,eAAeC,UAAS,MAAM,mBAAmB,QAAQ,MAAM,MAAM,CAAC;AAE5E,YAAM,aAAaA,UAAkB;AAAA,QACnC,KAAK,MAAM,QAAQ,QAAQ,MAAM,IAAI;AAAA,QACrC,KAAK,CAAC,MAAe,aAAa,QAAQ,MAAM,MAAM,CAAC;AAAA,MACzD,CAAC;AAED,aAAO,MAAM;AACX,YAAI,CAAC,QAAQ,MAAM,QAAS,QAAO;AAEnC,cAAM,aAAaC,kBAAiB,YAAY;AAChD,cAAM,UAAUA,kBAAiB,SAAS;AAE1C,eAAOC;AAAA,UACL;AAAA,UACA,CAAC;AAAA,UACDA;AAAA,YACE;AAAA,YACA;AAAA,cACE,OAAO,QAAQ,MAAM;AAAA,cACrB,aAAa,mBAAmB,QAAQ,KAAK;AAAA,cAC7C,UAAU,QAAQ,MAAM;AAAA,cACxB,OAAO,aAAa;AAAA,YACtB;AAAA,YACA;AAAA,cACE,SAAS,MACPA;AAAA,gBACE;AAAA,gBACA,EAAE,OAAO,MAAM,YAAY;AAAA,gBAC3BA,GAAE,SAAgB;AAAA,kBAChB,YAAY,WAAW;AAAA,kBACvB,UAAU,CAAC,QAAQ,MAAM;AAAA,kBACzB,gBAAgB,QAAQ,aAAa,KAAK;AAAA,kBAC1C,uBAAuB,CAAC,MAAe;AACrC,+BAAW,QAAQ;AAAA,kBACrB;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACJ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC3DA,SAAS,iBAAAC,gBAAe,uBAAAC,4BAA2B;AACnD,SAAS,YAAAC,WAAU,mBAAAC,kBAAiB,KAAAC,IAAG,oBAAAC,yBAAwB;AAM/D,SAAS,kBAAkB,QAA8C;AACvE,MAAI,CAAC,OAAQ,QAAO,CAAC;AAErB,MAAI,MAAM,QAAQ,OAAO,IAAI,GAAG;AAC9B,WAAO,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,OAAO,OAAO,CAAC,GAAG,OAAO,EAAE,EAAE;AAAA,EAChE;AAEA,QAAM,QAAS,OAA0C;AACzD,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO,CAAC;AAEnC,QAAM,MAAoB,CAAC;AAC3B,aAAW,SAAS,OAAO;AACzB,QAAI,OAAO,UAAU,YAAY,UAAU,KAAM;AACjD,UAAM,QAAQ;AACd,QAAI,EAAE,WAAW,OAAQ;AACzB,QAAI,KAAK;AAAA,MACP,OAAO,MAAM;AAAA,MACb,OACE,OAAO,MAAM,UAAU,YAAY,MAAM,MAAM,KAAK,IAChD,MAAM,QACN,OAAO,MAAM,KAAK;AAAA,IAC1B,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEO,IAAM,oBAAoBC,iBAAgB;AAAA,EAC/C,MAAM;AAAA,EACN,OAAOC,eAA8B;AAAA,EACrC,MAAM,OAAO;AACX,UAAM,EAAE,SAAS,aAAa,IAAIC;AAAA,MAChC;AAAA,IACF;AAEA,UAAM,eAAeC,UAAS,MAAM,mBAAmB,QAAQ,MAAM,MAAM,CAAC;AAC5E,UAAM,UAAUA,UAAuB,MAAM,kBAAkB,QAAQ,MAAM,MAAM,CAAC;AAEpF,UAAM,gBAAgBA,UAAkB;AAAA,MACtC,KAAK,MAAM,QAAQ,MAAM;AAAA,MACzB,KAAK,CAAC,MAAe,aAAa,QAAQ,MAAM,MAAM,CAAC;AAAA,IACzD,CAAC;AAED,WAAO,MAAM;AACX,UAAI,CAAC,QAAQ,MAAM,QAAS,QAAO;AAEnC,YAAM,aAAaC,kBAAiB,YAAY;AAChD,YAAM,cAAcA,kBAAiB,aAAa;AAElD,aAAOC;AAAA,QACL;AAAA,QACA,CAAC;AAAA,QACDA;AAAA,UACE;AAAA,UACA;AAAA,YACE,OAAO,QAAQ,MAAM;AAAA,YACrB,aAAa,mBAAmB,QAAQ,KAAK;AAAA,YAC7C,UAAU,QAAQ,MAAM;AAAA,YACxB,OAAO,aAAa;AAAA,UACtB;AAAA,UACA;AAAA,YACE,SAAS,MACPA,GAAE,aAAoB;AAAA,cACpB,YAAY,cAAc;AAAA,cAC1B,OAAO,QAAQ;AAAA,cACf,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU,CAAC,QAAQ,MAAM;AAAA,cACzB,OAAO,aAAa,QAAQ,UAAU;AAAA,cACtC,gBAAgB,QAAQ,aAAa,KAAK;AAAA,cAC1C,aAAa;AAAA,cACb,uBAAuB,CAAC,MAAe;AACrC,8BAAc,QAAQ;AAAA,cACxB;AAAA,YACF,CAAC;AAAA,UACL;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;;;ACtFD,SAAS,iBAAAC,gBAAe,uBAAAC,4BAA2B;AACnD,SAAS,YAAAC,WAAU,mBAAAC,kBAAiB,KAAAC,IAAG,QAAQ,oBAAAC,yBAAwB;AAShE,IAAM,uBAAuBC,iBAAgB;AAAA,EAClD,MAAM;AAAA,EACN,OAAOC,eAA8B;AAAA,EACrC,MAAM,OAAO;AACX,UAAM,EAAE,SAAS,aAAa,IAAIC;AAAA,MAChC;AAAA,IACF;AACA,UAAM,YAAY,OAA+B,WAAW;AAE5D,UAAM,eAAeC,UAAS,MAAM,mBAAmB,QAAQ,MAAM,MAAM,CAAC;AAE5E,UAAM,aAAaA,UAAS,MAAM;AAChC,YAAM,IAAI,QAAQ,MAAM;AACxB,aAAO,MAAM,QAAQ,MAAM,SAAY,KAAK,OAAO,CAAC;AAAA,IACtD,CAAC;AAED,aAAS,eAAe,KAAa;AACnC,YAAM,UAAU,IAAI,KAAK;AACzB,UAAI,YAAY,IAAI;AAClB,qBAAa,QAAQ,MAAM,MAAM,MAAS;AAC1C;AAAA,MACF;AAEA,YAAM,SAAS,OAAO,SAAS,SAAS,EAAE;AAC1C,mBAAa,QAAQ,MAAM,MAAM,OAAO,SAAS,MAAM,IAAI,SAAS,MAAS;AAAA,IAC/E;AAEA,WAAO,MAAM;AACX,UAAI,CAAC,QAAQ,MAAM,QAAS,QAAO;AAEnC,YAAM,aAAaC,kBAAiB,YAAY;AAChD,YAAM,EAAE,UAAU,SAAS,IAAI,sBAAsB,QAAQ,OAAO,SAAS;AAE7E,aAAOC;AAAA,QACL;AAAA,QACA,CAAC;AAAA,QACDA;AAAA,UACE;AAAA,UACA;AAAA,YACE,OAAO,QAAQ,MAAM;AAAA,YACrB,aAAa,mBAAmB,QAAQ,KAAK;AAAA,YAC7C,UAAU,QAAQ,MAAM;AAAA,YACxB,OAAO,aAAa;AAAA,UACtB;AAAA,UACA;AAAA,YACE,SAAS,MACPA,GAAE,SAAS;AAAA,cACT,MAAM;AAAA,cACN,WAAW;AAAA,cACX,MAAM;AAAA,cACN,OAAO;AAAA,gBACL;AAAA,gBACA,aAAa,QAAQ,2BAA2B;AAAA,cAClD,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,cACX,OAAO,WAAW;AAAA,cAClB;AAAA,cACA;AAAA,cACA,gBAAgB,QAAQ,aAAa,KAAK;AAAA,cAC1C,SAAS,CAAC,MAAa;AACrB,+BAAgB,EAAE,OAA4B,KAAK;AAAA,cACrD;AAAA,YACF,CAAC;AAAA,UACL;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;;;AC/ED,SAAS,iBAAAC,gBAAe,uBAAAC,4BAA2B;AACnD,SAAS,YAAAC,WAAU,mBAAAC,kBAAiB,KAAAC,IAAG,oBAAAC,yBAAwB;AAM/D,SAASC,mBAAkB,QAA8C;AACvE,MAAI,CAAC,OAAQ,QAAO,CAAC;AAErB,MAAI,MAAM,QAAQ,OAAO,IAAI,GAAG;AAC9B,WAAO,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,OAAO,OAAO,CAAC,GAAG,OAAO,EAAE,EAAE;AAAA,EAChE;AAEA,QAAM,QAAS,OAA0C;AACzD,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO,CAAC;AAEnC,QAAM,MAAoB,CAAC;AAC3B,aAAW,SAAS,OAAO;AACzB,QAAI,OAAO,UAAU,YAAY,UAAU,KAAM;AACjD,UAAM,QAAQ;AACd,QAAI,EAAE,WAAW,OAAQ;AACzB,QAAI,KAAK;AAAA,MACP,OAAO,MAAM;AAAA,MACb,OACE,OAAO,MAAM,UAAU,YAAY,MAAM,MAAM,KAAK,IAChD,MAAM,QACN,OAAO,MAAM,KAAK;AAAA,IAC1B,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,QAAwD;AAChF,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,QAAS,OAA0C;AACzD,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,SAAO;AACT;AAEO,IAAM,yBAAyBC,iBAAgB;AAAA,EACpD,MAAM;AAAA,EACN,OAAOC,eAA8B;AAAA,EACrC,MAAM,OAAO;AACX,UAAM,EAAE,SAAS,aAAa,IAAIC;AAAA,MAChC;AAAA,IACF;AAEA,UAAM,eAAeC,UAAS,MAAM,mBAAmB,QAAQ,MAAM,MAAM,CAAC;AAC5E,UAAM,UAAUA;AAAA,MAAuB,MACrCJ,mBAAkB,iBAAiB,QAAQ,MAAM,MAAM,CAAC;AAAA,IAC1D;AAEA,UAAM,iBAAiBI,UAAoB;AAAA,MACzC,KAAK,MAAO,MAAM,QAAQ,QAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,OAAO,CAAC;AAAA,MACtE,KAAK,CAAC,MAAiB,aAAa,QAAQ,MAAM,MAAM,CAAC;AAAA,IAC3D,CAAC;AAED,WAAO,MAAM;AACX,UAAI,CAAC,QAAQ,MAAM,QAAS,QAAO;AAEnC,YAAM,aAAaC,kBAAiB,YAAY;AAChD,YAAM,cAAcA,kBAAiB,aAAa;AAElD,aAAOC;AAAA,QACL;AAAA,QACA,CAAC;AAAA,QACDA;AAAA,UACE;AAAA,UACA;AAAA,YACE,OAAO,QAAQ,MAAM;AAAA,YACrB,aAAa,mBAAmB,QAAQ,KAAK;AAAA,YAC7C,UAAU,QAAQ,MAAM;AAAA,YACxB,OAAO,aAAa;AAAA,UACtB;AAAA,UACA;AAAA,YACE,SAAS,MACPA,GAAE,aAAoB;AAAA,cACpB,UAAU;AAAA,cACV,YAAY,eAAe;AAAA,cAC3B,OAAO,QAAQ;AAAA,cACf,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU,CAAC,QAAQ,MAAM;AAAA,cACzB,OAAO,aAAa,QAAQ,UAAU;AAAA,cACtC,gBAAgB,QAAQ,aAAa,KAAK;AAAA,cAC1C,aAAa;AAAA,cACb,uBAAuB,CAAC,MAAe;AACrC,+BAAe,QAAQ,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC;AAAA,cACjD;AAAA,YACF,CAAC;AAAA,UACL;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;;;AChGD,SAAS,iBAAAC,gBAAe,uBAAAC,4BAA2B;AACnD,SAAS,YAAAC,WAAU,mBAAAC,kBAAiB,KAAAC,IAAG,UAAAC,SAAQ,oBAAAC,yBAAwB;AAKhE,IAAM,sBAAsBC,iBAAgB;AAAA,EACjD,MAAM;AAAA,EACN,OAAOC,eAA8B;AAAA,EACrC,MAAM,OAAO;AACX,UAAM,EAAE,SAAS,aAAa,IAAIC;AAAA,MAChC;AAAA,IACF;AACA,UAAM,YAAYC,QAA+B,WAAW;AAE5D,UAAM,eAAeC,UAAS,MAAM,mBAAmB,QAAQ,MAAM,MAAM,CAAC;AAE5E,UAAM,aAAaA,UAAS,MAAM;AAChC,YAAM,IAAI,QAAQ,MAAM;AACxB,aAAO,MAAM,QAAQ,MAAM,SAAY,KAAK,OAAO,CAAC;AAAA,IACtD,CAAC;AAED,aAAS,eAAe,KAAa;AACnC,YAAM,UAAU,IAAI,KAAK;AACzB,UAAI,YAAY,IAAI;AAClB,qBAAa,QAAQ,MAAM,MAAM,MAAS;AAC1C;AAAA,MACF;AACA,YAAM,SAAS,OAAO,OAAO;AAC7B,mBAAa,QAAQ,MAAM,MAAM,OAAO,SAAS,MAAM,IAAI,SAAS,MAAS;AAAA,IAC/E;AAEA,WAAO,MAAM;AACX,UAAI,CAAC,QAAQ,MAAM,QAAS,QAAO;AAEnC,YAAM,aAAaC,kBAAiB,YAAY;AAChD,YAAM,EAAE,UAAU,SAAS,IAAI,sBAAsB,QAAQ,OAAO,SAAS;AAE7E,aAAOC;AAAA,QACL;AAAA,QACA,CAAC;AAAA,QACDA;AAAA,UACE;AAAA,UACA;AAAA,YACE,OAAO,QAAQ,MAAM;AAAA,YACrB,aAAa,mBAAmB,QAAQ,KAAK;AAAA,YAC7C,UAAU,QAAQ,MAAM;AAAA,YACxB,OAAO,aAAa;AAAA,UACtB;AAAA,UACA;AAAA,YACE,SAAS,MACPA,GAAE,SAAS;AAAA,cACT,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,gBACL;AAAA,gBACA,aAAa,QAAQ,2BAA2B;AAAA,cAClD,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,cACX,OAAO,WAAW;AAAA,cAClB;AAAA,cACA;AAAA,cACA,gBAAgB,QAAQ,aAAa,KAAK;AAAA,cAC1C,SAAS,CAAC,MAAa;AACrB,+BAAgB,EAAE,OAA4B,KAAK;AAAA,cACrD;AAAA,YACF,CAAC;AAAA,UACL;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;;;ACzED,SAAS,iBAAAC,gBAAe,uBAAAC,4BAA2B;AACnD,SAAS,YAAAC,WAAU,mBAAAC,kBAAiB,KAAAC,IAAG,UAAAC,SAAQ,KAAK,oBAAAC,yBAAwB;AAIrE,IAAM,wBAAwBC,iBAAgB;AAAA,EACnD,MAAM;AAAA,EACN,OAAOC,eAA8B;AAAA,EACrC,MAAM,OAAO;AACX,UAAM,EAAE,SAAS,aAAa,IAAIC;AAAA,MAChC;AAAA,IACF;AACA,UAAM,YAAYC,QAA+B,WAAW;AAE5D,UAAM,eAAeC,UAAS,MAAM,mBAAmB,QAAQ,MAAM,MAAM,CAAC;AAC5E,UAAM,eAAe,IAAI,KAAK;AAE9B,UAAM,YAAYA,UAAS,MAAO,aAAa,QAAQ,SAAS,UAAW;AAE3E,WAAO,MAAM;AACX,UAAI,CAAC,QAAQ,MAAM,QAAS,QAAO;AAEnC,YAAM,aAAaC,kBAAiB,YAAY;AAChD,YAAM,SAASA,kBAAiB,QAAQ;AACxC,YAAM,UAAUA,kBAAiB,SAAS;AAC1C,YAAM,EAAE,UAAU,SAAS,IAAI,sBAAsB,QAAQ,OAAO,SAAS;AAE7E,aAAOC;AAAA,QACL;AAAA,QACA,CAAC;AAAA,QACDA;AAAA,UACE;AAAA,UACA;AAAA,YACE,OAAO,QAAQ,MAAM;AAAA,YACrB,aAAa,mBAAmB,QAAQ,KAAK;AAAA,YAC7C,UAAU,QAAQ,MAAM;AAAA,YACxB,OAAO,aAAa;AAAA,UACtB;AAAA,UACA;AAAA,YACE,SAAS,MACPA;AAAA,cACE;AAAA,cACA;AAAA,gBACE,YAAY,QAAQ,MAAM,QAAQ;AAAA,gBAClC,OAAO;AAAA,gBACP,MAAM,UAAU;AAAA,gBAChB,cAAc;AAAA,gBACd;AAAA,gBACA;AAAA,gBACA,OAAO,aAAa,QAAQ,UAAU;AAAA,gBACtC,gBAAgB,QAAQ,aAAa,KAAK;AAAA,gBAC1C,uBAAuB,CAAC,MACtB,aAAa,QAAQ,MAAM,MAAM,CAAC;AAAA,cACtC;AAAA,cACA;AAAA,gBACE,UAAU,MACRA,GAAE,SAAgB;AAAA,kBAChB,MAAM;AAAA,kBACN,OAAO;AAAA,kBACP,SAAS;AAAA,kBACT,QAAQ;AAAA,kBACR,MAAM,aAAa,QACf,0BACA;AAAA,kBACJ,gBAAgB,aAAa;AAAA,kBAC7B,cAAc,aAAa,QACvB,kBACA;AAAA,kBACJ;AAAA,kBACA,SAAS,MAAM;AACb,iCAAa,QAAQ,CAAC,aAAa;AAAA,kBACrC;AAAA,gBACF,CAAC;AAAA,cACL;AAAA,YACF;AAAA,UACJ;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;;;AChFD,SAAS,iBAAAC,gBAAe,uBAAAC,4BAA2B;AACnD;AAAA,EACE,YAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,KAAAC;AAAA,EACA,UAAAC;AAAA,EACA,oBAAAC;AAAA,OACK;AASA,SAAS,0BACd,SACA;AACA,SAAOC,iBAAgB;AAAA,IACrB,MAAM;AAAA,IACN,OAAOC,eAA8B;AAAA,IACrC,MAAM,OAAO;AACX,YAAM,EAAE,SAAS,aAAa,IAAIC;AAAA,QAChC;AAAA,MACF;AACA,YAAM,YAAYC,QAA+B,WAAW;AAE5D,YAAM,eAAeC;AAAA,QAAS,MAC5B,mBAAmB,QAAQ,MAAM,MAAM;AAAA,MACzC;AAEA,aAAO,MAAM;AACX,YAAI,CAAC,QAAQ,MAAM,QAAS,QAAO;AAEnC,cAAM,aAAaC,kBAAiB,YAAY;AAChD,cAAM,SAASA,kBAAiB,QAAQ;AACxC,cAAM,EAAE,UAAU,SAAS,IAAI;AAAA,UAC7B,QAAQ;AAAA,UACR;AAAA,QACF;AAEA,cAAM,QAAoD;AAAA,UACxD,SAAS,MACPC,IAAE,QAAe;AAAA,YACf,YAAY,QAAQ,MAAM,QAAQ;AAAA,YAClC,OAAO;AAAA,YACP;AAAA,YACA;AAAA,YACA,OAAO,aAAa,QAAQ,UAAU;AAAA,YACtC,gBAAgB,QAAQ,aAAa,KAAK;AAAA,YAC1C,uBAAuB,CAAC,MACtB,aAAa,QAAQ,MAAM,MAAM,CAAC;AAAA,UACtC,CAAC;AAAA,QACL;AACA,cAAM,WAAW;AAAA,UACf,QAAQ,MAAM;AAAA,UACd,QAAQ,MAAM,SAAS;AAAA,UACvB;AAAA,UACAD;AAAA,QACF;AACA,YAAI,SAAU,OAAM,OAAO;AAE3B,eAAOC;AAAA,UACL;AAAA,UACA,CAAC;AAAA,UACDA,IAAE,YAAmB;AAAA,YACnB,OAAO,QAAQ,MAAM;AAAA,YACrB,aAAa,mBAAmB,QAAQ,KAAK;AAAA,YAC7C,UAAU,QAAQ,MAAM;AAAA,YACxB,OAAO,aAAa;AAAA,UACtB,GAAG,KAAK;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC5EA,SAAS,iBAAAC,iBAAe,uBAAAC,4BAA2B;AACnD,SAAS,YAAAC,YAAU,mBAAAC,mBAAiB,KAAAC,KAAG,UAAAC,SAAQ,oBAAAC,yBAAwB;AAIhE,IAAM,wBAAwBC,kBAAgB;AAAA,EACnD,MAAM;AAAA,EACN,OAAOC,gBAA8B;AAAA,EACrC,MAAM,OAAO;AACX,UAAM,EAAE,SAAS,aAAa,IAAIC;AAAA,MAChC;AAAA,IACF;AACA,UAAM,YAAYC,QAA+B,WAAW;AAE5D,UAAM,eAAeC,WAAS,MAAM,mBAAmB,QAAQ,MAAM,MAAM,CAAC;AAE5E,WAAO,MAAM;AACX,UAAI,CAAC,QAAQ,MAAM,QAAS,QAAO;AAEnC,YAAM,aAAaC,kBAAiB,YAAY;AAChD,YAAM,YAAYA,kBAAiB,WAAW;AAC9C,YAAM,EAAE,UAAU,SAAS,IAAI,sBAAsB,QAAQ,OAAO,SAAS;AAE7E,aAAOC;AAAA,QACL;AAAA,QACA,CAAC;AAAA,QACDA;AAAA,UACE;AAAA,UACA;AAAA,YACE,OAAO,QAAQ,MAAM;AAAA,YACrB,aAAa,mBAAmB,QAAQ,KAAK;AAAA,YAC7C,UAAU,QAAQ,MAAM;AAAA,YACxB,OAAO,aAAa;AAAA,UACtB;AAAA,UACA;AAAA,YACE,SAAS,MACPA,IAAE,WAAkB;AAAA,cAClB,YAAY,QAAQ,MAAM,QAAQ;AAAA,cAClC,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,OAAO,aAAa,QAAQ,UAAU;AAAA,cACtC,gBAAgB,QAAQ,aAAa,KAAK;AAAA,cAC1C,MAAM;AAAA,cACN,uBAAuB,CAAC,MACtB,aAAa,QAAQ,MAAM,MAAM,CAAC;AAAA,YACtC,CAAC;AAAA,UACL;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;;;ACpDD,SAAS,oBAAAC,mBAAkB,iBAAAC,iBAAe,kCAAkC;AAE5E,SAAS,mBAAAC,mBAAiB,KAAAC,WAAS;AAE5B,SAAS,mCACd,OACA;AACA,SAAOD,kBAAgB;AAAA,IACrB,MAAM;AAAA,IACN,YAAY,EAAE,kBAAAF,kBAAiB;AAAA,IAC/B,OAAOC,gBAAsB;AAAA,IAC7B,MAAM,OAAO;AACX,YAAM,EAAE,QAAQ,WAAW,IAAI;AAAA,QAC7B;AAAA,MACF;AAEA,aAAO,MAAM;AACX,YAAI,CAAC,OAAO,MAAM,QAAS,QAAO;AAElC,eAAOE;AAAA,UACL;AAAA,UACA,EAAE,OAAO,MAAM,mBAAmB;AAAA,UAClC,WAAW,IAAI,CAAC,aAAa,aAAa;AACxC,kBAAM,WAAW,YAAY;AAC7B,kBAAM,WAAW,SAAS,SAAS,YAAY,CAAC;AAEhD,mBAAOA;AAAA,cACL;AAAA,cACA;AAAA,gBACE,KAAK,GAAG,OAAO,MAAM,IAAI,QAAQ,QAAQ;AAAA,gBACzC,OAAO,MAAM;AAAA,cACf;AAAA,cACA;AAAA,gBACE,SAAS,QACLA,IAAE,OAAO,EAAE,OAAO,MAAM,aAAa,GAAG,SAAS,KAAK,IACtD;AAAA,gBACJA;AAAA,kBACE;AAAA,kBACA,EAAE,OAAO,MAAM,eAAe;AAAA,kBAC9B,SAAS;AAAA,oBAAI,CAAC,SAAS,UACrBA;AAAA,sBACE;AAAA,sBACA,EAAE,KAAK,GAAG,SAAS,IAAI,IAAI,KAAK,GAAG;AAAA,sBACnCA,IAAEH,mBAAyB;AAAA,wBACzB,QAAQ,SAAS;AAAA,wBACjB,UAAU;AAAA,wBACV,MAAM,SAAS;AAAA,wBACf,SAAS,SAAS;AAAA,wBAClB,WAAW,SAAS;AAAA,wBACpB,OAAO,SAAS;AAAA,sBAClB,CAAC;AAAA,oBACH;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC7DA,SAAS,oBAAAI,mBAAkB,iBAAAC,iBAAe,0BAA0B;AAEpE,SAAS,mBAAAC,mBAAiB,KAAAC,WAAS;AAE5B,SAAS,6BAA6B,OAA6B;AACxE,SAAOD,kBAAgB;AAAA,IACrB,MAAM;AAAA,IACN,YAAY,EAAE,kBAAAF,kBAAiB;AAAA,IAC/B,OAAOC,gBAAsB;AAAA,IAC7B,MAAM,OAAO;AACX,YAAM,EAAE,OAAO,IAAI;AAAA,QACjB;AAAA,MACF;AAEA,aAAO,MAAM;AACX,YAAI,CAAC,OAAO,MAAM,QAAS,QAAO;AAElC,cAAM,WAAW,OAAO,MAAM,SAAS,YAAY,CAAC;AAEpD,eAAOE,IAAE,OAAO,EAAE,OAAO,MAAM,eAAe,GAAG;AAAA,UAC/C,OAAO,MAAM,QACTA,IAAE,OAAO,EAAE,OAAO,MAAM,aAAa,GAAG,OAAO,MAAM,KAAK,IAC1D;AAAA,UACJA;AAAA,YACE;AAAA,YACA,EAAE,OAAO,MAAM,eAAe;AAAA,YAC9B,SAAS;AAAA,cAAI,CAAC,SAAS,UACrBA;AAAA,gBACE;AAAA,gBACA,EAAE,KAAK,GAAG,OAAO,MAAM,IAAI,IAAI,KAAK,GAAG;AAAA,gBACvCA,IAAEH,mBAAyB;AAAA,kBACzB,QAAQ,OAAO,MAAM;AAAA,kBACrB,UAAU;AAAA,kBACV,MAAM,OAAO,MAAM;AAAA,kBACnB,SAAS,OAAO,MAAM;AAAA,kBACtB,WAAW,OAAO,MAAM;AAAA,kBACxB,OAAO,OAAO,MAAM;AAAA,gBACtB,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC7CA,SAAS,oBAAAI,mBAAkB,iBAAAC,iBAAe,sBAAAC,2BAA0B;AAEpE,SAAS,mBAAAC,mBAAiB,KAAAC,WAAS;AAE5B,SAAS,0BAA0B,OAA6B;AACrE,SAAOD,kBAAgB;AAAA,IACrB,MAAM;AAAA,IACN,YAAY,EAAE,kBAAAH,kBAAiB;AAAA,IAC/B,OAAOC,gBAAsB;AAAA,IAC7B,MAAM,OAAO;AACX,YAAM,EAAE,OAAO,IAAIC;AAAA,QACjB;AAAA,MACF;AAEA,aAAO,MAAM;AACX,YAAI,CAAC,OAAO,MAAM,QAAS,QAAO;AAElC,cAAM,WAAW,OAAO,MAAM,SAAS,YAAY,CAAC;AACpD,cAAM,WAAW,OAAO,MAAM,MAAM,SAAS,GAAG,KAAK;AACrD,cAAM,iBAAiB,WAAW,MAAM,cAAc,MAAM;AAE5D,eAAOE;AAAA,UACL;AAAA,UACA,EAAE,OAAO,eAAe;AAAA,UACxB;AAAA,YACE,OAAO,MAAM,QACTA,IAAE,OAAO,EAAE,OAAO,MAAM,mBAAmB,GAAG,OAAO,MAAM,KAAK,IAChE;AAAA,YACJA;AAAA,cACE;AAAA,cACA,EAAE,OAAO,MAAM,eAAe;AAAA,cAC9B,SAAS;AAAA,gBAAI,CAAC,SAAS,UACrBA;AAAA,kBACE;AAAA,kBACA,EAAE,KAAK,GAAG,OAAO,MAAM,IAAI,IAAI,KAAK,GAAG;AAAA,kBACvCA,IAAEJ,mBAAyB;AAAA,oBACzB,QAAQ,OAAO,MAAM;AAAA,oBACrB,UAAU;AAAA,oBACV,MAAM,OAAO,MAAM;AAAA,oBACnB,SAAS,OAAO,MAAM;AAAA,oBACtB,WAAW,OAAO,MAAM;AAAA,oBACxB,OAAO,OAAO,MAAM;AAAA,kBACtB,CAAC;AAAA,gBACH;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACnDA,SAAS,oBAAAK,mBAAkB,iBAAAC,iBAAe,sBAAAC,2BAA0B;AAEpE,SAAS,mBAAAC,mBAAiB,KAAAC,WAAS;AAE5B,SAAS,qCACd,OACA;AACA,SAAOD,kBAAgB;AAAA,IACrB,MAAM;AAAA,IACN,YAAY,EAAE,kBAAAH,kBAAiB;AAAA,IAC/B,OAAOC,gBAAsB;AAAA,IAC7B,MAAM,OAAO;AACX,YAAM,EAAE,OAAO,IAAIC;AAAA,QACjB;AAAA,MACF;AAEA,aAAO,MAAM;AACX,YAAI,CAAC,OAAO,MAAM,QAAS,QAAO;AAElC,cAAM,WAAW,OAAO,MAAM,SAAS,YAAY,CAAC;AAEpD,eAAOE;AAAA,UACL;AAAA,UACA,EAAE,OAAO,MAAM,iBAAiB;AAAA,UAChC,SAAS;AAAA,YAAI,CAAC,SAAS,UACrBA;AAAA,cACE;AAAA,cACA;AAAA,gBACE,KAAK,GAAG,OAAO,MAAM,IAAI,IAAI,KAAK;AAAA,gBAClC,OAAO,MAAM;AAAA,cACf;AAAA,cACAA,IAAEJ,mBAAyB;AAAA,gBACzB,QAAQ,OAAO,MAAM;AAAA,gBACrB,UAAU;AAAA,gBACV,MAAM,OAAO,MAAM;AAAA,gBACnB,SAAS,OAAO,MAAM;AAAA,gBACtB,WAAW,OAAO,MAAM;AAAA,gBACxB,OAAO,OAAO,MAAM;AAAA,cACtB,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC7CA,SAAS,iBAAAK,iBAAe,yBAAyB;AAEjD,SAAS,mBAAAC,mBAAiB,KAAAC,WAAS;AAE5B,SAAS,0BAA0B,OAA6B;AACrE,SAAOD,kBAAgB;AAAA,IACrB,MAAM;AAAA,IACN,OAAOD,gBAA4B;AAAA,IACnC,MAAM,OAAO;AACX,YAAM,EAAE,MAAM,IAAI;AAAA,QAChB;AAAA,MACF;AAEA,aAAO,MAAM;AACX,YAAI,CAAC,MAAM,MAAM,QAAS,QAAO;AACjC,eAAOE,IAAE,OAAO,EAAE,OAAO,MAAM,UAAU,GAAG,MAAM,MAAM,IAAI;AAAA,MAC9D;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACnBA,SAAS,oBAAAC,mBAAkB,iBAAAC,iBAAe,sBAAAC,2BAA0B;AAEpE,SAAS,mBAAAC,mBAAiB,KAAAC,WAAS;AAE5B,SAAS,mCAAmC,OAA6B;AAC9E,SAAOD,kBAAgB;AAAA,IACrB,MAAM;AAAA,IACN,YAAY,EAAE,kBAAAH,kBAAiB;AAAA,IAC/B,OAAOC,gBAAsB;AAAA,IAC7B,MAAM,OAAO;AACX,YAAM,EAAE,OAAO,IAAIC;AAAA,QACjB;AAAA,MACF;AAEA,aAAO,MAAM;AACX,YAAI,CAAC,OAAO,MAAM,QAAS,QAAO;AAElC,cAAM,WAAW,OAAO,MAAM,SAAS,YAAY,CAAC;AAEpD,eAAOE;AAAA,UACL;AAAA,UACA,EAAE,OAAO,MAAM,eAAe;AAAA,UAC9B,SAAS;AAAA,YAAI,CAAC,SAAS,UACrBA;AAAA,cACE;AAAA,cACA,EAAE,KAAK,GAAG,OAAO,MAAM,IAAI,IAAI,KAAK,GAAG;AAAA,cACvCA,IAAEJ,mBAAyB;AAAA,gBACzB,QAAQ,OAAO,MAAM;AAAA,gBACrB,UAAU;AAAA,gBACV,MAAM,OAAO,MAAM;AAAA,gBACnB,SAAS,OAAO,MAAM;AAAA,gBACtB,WAAW,OAAO,MAAM;AAAA,gBACxB,OAAO,OAAO,MAAM;AAAA,cACtB,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACGO,IAAM,eAAqC;AAAA,EAChD,OAAO;AAAA,EACP,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,sBAAsB;AAAA,EACtB,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,WAAW;AAAA,EACX,aAAa;AAAA,EACb,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,aAAa;AACf;AAEO,SAAS,WACd,WACsB;AACtB,SAAO,YAAY,EAAE,GAAG,cAAc,GAAG,UAAU,IAAI,EAAE,GAAG,aAAa;AAC3E;;;AlB3BA,IAAM,OAAO;AACb,IAAM,YAAY,OAAO;AACzB,IAAM,gBAAgB,YAAY;AAElC,IAAM,qBAAqB,CACzB,UACA,QACA,YACY;AACZ,MAAI,CAAC,SAAS,SAAS,EAAE,UAAiB,QAAe,OAAc,GAAG;AACxE,WAAO;AAAA,EACT;AAEA,QAAM,QAAS,UAAkB;AACjC,MAAI,OAAO,UAAU,SAAU,QAAO;AAItC,QAAM,aAAc,SAAiB,cAAe;AACpD,MAAI;AACJ,MAAI;AACF,eAAWK,SAAQ,OAAO,QAAe,OAAO,UAAU;AAAA,EAC5D,QAAQ;AACN,WAAO;AAAA,EACT;AAEA,MAAI,UAAU,SAAS,QAAS,QAAO;AAEvC,QAAM,QAAQ,UAAU;AACxB,MAAI,CAAC,MAAO,QAAO;AAGnB,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AACjC,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AAExD,QAAM,gBACJ,UAAU,SAAS,OAAQ,MAAc,SAAS,WAC9CA,SAAQ,OAAO,YAAa,MAAc,MAAM,UAAU,IAC1D;AAEN,SAAO,aAAa,aAAoB;AAC1C;AAGA,IAAM,qBAAqB,CACzB,UACA,QACA,YACY;AACZ,MAAI,CAAC,SAAS,SAAS,EAAE,UAAiB,QAAe,OAAc,GAAG;AACxE,WAAO;AAAA,EACT;AAEA,QAAM,QAAS,UAAkB;AACjC,MAAI,OAAO,UAAU,SAAU,QAAO;AAEtC,QAAM,aAAc,SAAiB,cAAe;AACpD,MAAI;AACJ,MAAI;AACF,eAAWA,SAAQ,OAAO,QAAe,OAAO,UAAU;AAAA,EAC5D,QAAQ;AACN,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,UAAU;AACxB,MAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,EAAG,QAAO;AAExD,aAAW,SAAS,OAAO;AACzB,QAAI,OAAO,UAAU,YAAY,UAAU,KAAM;AACjD,QAAI,EAAE,WAAY,OAAoC,QAAO;AAAA,EAC/D;AACA,SAAO;AACT;AAYO,SAAS,sBACd,SACkC;AAClC,QAAM,QAAQ,WAAW,SAAS,KAAK;AACvC,QAAM,UAAU,SAAS;AAEzB,SAAO;AAAA;AAAA,IAEL;AAAA,MACE,QAAQ,SAAS,MAAM,SAAS,gBAAgB,CAAC;AAAA,MACjD,UAAU,QAAQ,mCAAmC,KAAK,CAAC;AAAA,IAC7D;AAAA,IACA;AAAA,MACE,QAAQ,SAAS,MAAM,SAAS,kBAAkB,CAAC;AAAA,MACnD,UAAU,QAAQ,qCAAqC,KAAK,CAAC;AAAA,IAC/D;AAAA,IACA;AAAA,MACE,QAAQ,SAAS,MAAM,SAAS,OAAO,CAAC;AAAA,MACxC,UAAU,QAAQ,0BAA0B,KAAK,CAAC;AAAA,IACpD;AAAA,IACA;AAAA,MACE,QAAQ,SAAS,MAAM,SAAS,gBAAgB,CAAC;AAAA,MACjD,UAAU,QAAQ,mCAAmC,KAAK,CAAC;AAAA,IAC7D;AAAA,IACA;AAAA,MACE,QAAQ,SAAS,MAAM,SAAS,UAAU,CAAC;AAAA,MAC3C,UAAU,QAAQ,6BAA6B,KAAK,CAAC;AAAA,IACvD;AAAA,IACA;AAAA,MACE,QAAQ,SAAS,MAAM,SAAS,OAAO,CAAC;AAAA,MACxC,UAAU,QAAQ,0BAA0B,KAAK,CAAC;AAAA,IACpD;AAAA;AAAA,IAGA;AAAA,MACE,QAAQ,SAAS,MAAM,aAAa,OAAO,CAAC;AAAA,MAC5C,UAAU,QAAQ,8BAA8B,KAAK,CAAC;AAAA,IACxD;AAAA,IACA;AAAA,MACE,QAAQ,SAAS,MAAM,eAAe;AAAA,MACtC,UAAU,QAAQ,oBAAoB;AAAA,IACxC;AAAA;AAAA,IAGA;AAAA,MACE,QAAQ,SAAS,MAAM,kBAAkB;AAAA,MACzC,UAAU,QAAQ,qBAAqB;AAAA,IACzC;AAAA,IACA;AAAA,MACE,QAAQ,SAAS,MAAM,eAAe;AAAA,MACtC,UAAU,QAAQ,mBAAmB;AAAA,IACvC;AAAA,IACA;AAAA,MACE,QAAQ,SAAS,MAAM,gBAAgB;AAAA,MACvC,UAAU,QAAQ,oBAAoB;AAAA,IACxC;AAAA,IACA;AAAA,MACE,QAAQ,SAAS,MAAM,gBAAgB;AAAA,MACvC,UAAU,QAAQ,2BAA2B,KAAK,CAAC;AAAA,IACrD;AAAA,IACA;AAAA;AAAA,MAEE,QAAQ,SAAS,WAAW,kBAAkB;AAAA,MAC9C,UAAU,QAAQ,sBAAsB;AAAA,IAC1C;AAAA,IACA;AAAA;AAAA,MAEE,QAAQ,SAAS,WAAW,kBAAkB;AAAA,MAC9C,UAAU,QAAQ,iBAAiB;AAAA,IACrC;AAAA,IACA;AAAA;AAAA;AAAA,MAGE,QAAQ,SAAS,WAAW,aAAa;AAAA,MACzC,UAAU,QAAQ,iBAAiB;AAAA,IACrC;AAAA,IACA;AAAA,MACE,QAAQ,SAAS,eAAe,IAAI,iBAAiB,SAAS,UAAU,CAAC,CAAC;AAAA,MAC1E,UAAU,QAAQ,qBAAqB;AAAA,IACzC;AAAA,IACA;AAAA,MACE,QAAQ,SAAS,MAAM,eAAe;AAAA,MACtC,UAAU,QAAQ,0BAA0B,OAAO,CAAC;AAAA,IACtD;AAAA,EACF;AACF;AAGO,IAAM,kBACX,sBAAsB;","names":["Resolve","computed","h","resolveComponent","computed","h","findUISchema","DispatchRenderer","rendererProps","computed","defineComponent","h","rendererProps","computed","defineComponent","h","resolveComponent","defineComponent","rendererProps","computed","resolveComponent","h","rendererProps","useJsonFormsControl","computed","defineComponent","h","resolveComponent","defineComponent","rendererProps","useJsonFormsControl","computed","resolveComponent","h","rendererProps","useJsonFormsControl","computed","defineComponent","h","resolveComponent","defineComponent","rendererProps","useJsonFormsControl","computed","resolveComponent","h","rendererProps","useJsonFormsControl","computed","defineComponent","h","resolveComponent","schemaEnumOptions","defineComponent","rendererProps","useJsonFormsControl","computed","resolveComponent","h","rendererProps","useJsonFormsControl","computed","defineComponent","h","inject","resolveComponent","defineComponent","rendererProps","useJsonFormsControl","inject","computed","resolveComponent","h","rendererProps","useJsonFormsControl","computed","defineComponent","h","inject","resolveComponent","defineComponent","rendererProps","useJsonFormsControl","inject","computed","resolveComponent","h","rendererProps","useJsonFormsControl","computed","defineComponent","h","inject","resolveComponent","defineComponent","rendererProps","useJsonFormsControl","inject","computed","resolveComponent","h","rendererProps","useJsonFormsControl","computed","defineComponent","h","inject","resolveComponent","defineComponent","rendererProps","useJsonFormsControl","inject","computed","resolveComponent","h","DispatchRenderer","rendererProps","defineComponent","h","DispatchRenderer","rendererProps","defineComponent","h","DispatchRenderer","rendererProps","useJsonFormsLayout","defineComponent","h","DispatchRenderer","rendererProps","useJsonFormsLayout","defineComponent","h","rendererProps","defineComponent","h","DispatchRenderer","rendererProps","useJsonFormsLayout","defineComponent","h","Resolve"]}
package/dist/styles.css CHANGED
@@ -13,10 +13,17 @@
13
13
  --jf-text-item-title-color-dark: rgb(229 231 235);
14
14
  --jf-text-label-color: rgb(75 85 99);
15
15
  --jf-text-label-color-dark: rgb(209 213 219);
16
+ --jf-input-border: 1px solid rgba(0, 0, 0, 0.12);
17
+ --jf-input-border-error: 1px solid rgb(220 38 38);
18
+ --jf-input-radius: 0.375rem;
19
+ --jf-input-padding-x: 0.625rem;
20
+ --jf-input-padding-y: 0.375rem;
21
+ --jf-input-bg: transparent;
16
22
  }
17
23
  @media (prefers-color-scheme: dark) {
18
24
  :root {
19
25
  --jf-panel-border: 1px solid rgba(255, 255, 255, 0.08);
26
+ --jf-input-border: 1px solid rgba(255, 255, 255, 0.14);
20
27
  }
21
28
  }
22
29
  .jf-panel {
@@ -135,4 +142,27 @@
135
142
  align-items: center;
136
143
  gap: 0.25rem;
137
144
  }
145
+ .jf-input-native {
146
+ box-sizing: border-box;
147
+ width: 100%;
148
+ min-width: 0;
149
+ border: var(--jf-input-border);
150
+ border-radius: var(--jf-input-radius);
151
+ background: var(--jf-input-bg);
152
+ padding: var(--jf-input-padding-y) var(--jf-input-padding-x);
153
+ font: inherit;
154
+ line-height: 1.5;
155
+ outline: none;
156
+ }
157
+ .jf-input-native:focus-visible {
158
+ outline: 2px solid rgb(59 130 246);
159
+ outline-offset: 0;
160
+ }
161
+ .jf-input-native:disabled {
162
+ opacity: 0.6;
163
+ cursor: not-allowed;
164
+ }
165
+ .jf-input-native--error {
166
+ border: var(--jf-input-border-error);
167
+ }
138
168
  /*# sourceMappingURL=styles.css.map */
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/styles.css"],"sourcesContent":["/**\n * Default styles for jsonforms-nuxt-ui-renderers.\n * Uses semantic class names (jf-*). Override CSS variables to customize.\n *\n * Usage: import 'jsonforms-nuxt-ui-renderers/styles.css'\n * Or use your own styles targeting .jf-* classes.\n */\n\n:root {\n --jf-panel-border: 1px solid rgba(0, 0, 0, 0.06);\n --jf-panel-border-radius: 0.25rem;\n --jf-panel-padding: 0.75rem;\n --jf-gap: 0.75rem;\n --jf-gap-wide: 1.5rem;\n --jf-label-section-size: 0.875rem;\n --jf-label-section-weight: 600;\n --jf-text-muted-color: rgb(107 114 128);\n --jf-text-muted-color-dark: rgb(156 163 175);\n --jf-text-item-title-color: rgb(55 65 81);\n --jf-text-item-title-color-dark: rgb(229 231 235);\n --jf-text-label-color: rgb(75 85 99);\n --jf-text-label-color-dark: rgb(209 213 219);\n}\n\n@media (prefers-color-scheme: dark) {\n :root {\n --jf-panel-border: 1px solid rgba(255, 255, 255, 0.08);\n }\n}\n\n/* Panel - bordered container */\n.jf-panel {\n border: var(--jf-panel-border);\n border-radius: var(--jf-panel-border-radius);\n padding: var(--jf-panel-padding);\n}\n\n/* Nested group - padding only */\n.jf-group {\n padding: var(--jf-panel-padding);\n}\n\n/* Layouts */\n.jf-layout-vertical {\n display: flex;\n flex-direction: column;\n gap: var(--jf-gap);\n}\n\n.jf-layout-vertical-wide {\n display: flex;\n flex-direction: column;\n gap: var(--jf-gap-wide);\n}\n\n.jf-layout-horizontal {\n display: flex;\n flex-direction: column;\n gap: var(--jf-gap);\n}\n\n@media (min-width: 768px) {\n .jf-layout-horizontal {\n flex-direction: row;\n flex-wrap: wrap;\n }\n}\n\n.jf-layout-horizontal-item {\n min-width: 0;\n flex: 1 1 0%;\n}\n\n.jf-min-w-0 {\n min-width: 0;\n}\n\n.jf-array-item-toolbar {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--jf-gap);\n margin-bottom: var(--jf-gap);\n}\n\n/* Labels */\n.jf-label-section {\n font-size: var(--jf-label-section-size);\n font-weight: var(--jf-label-section-weight);\n}\n\n.jf-label-section-spaced {\n font-size: var(--jf-label-section-size);\n font-weight: var(--jf-label-section-weight);\n margin-bottom: var(--jf-gap);\n}\n\n/* Text */\n.jf-text-muted {\n font-size: var(--jf-label-section-size);\n color: var(--jf-text-muted-color);\n}\n\n@media (prefers-color-scheme: dark) {\n .jf-text-muted {\n color: var(--jf-text-muted-color-dark);\n }\n}\n\n.jf-text-muted-xs {\n font-size: 0.75rem;\n color: var(--jf-text-muted-color);\n}\n\n@media (prefers-color-scheme: dark) {\n .jf-text-muted-xs {\n color: var(--jf-text-muted-color-dark);\n }\n}\n\n.jf-text-item-title {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--jf-text-item-title-color);\n}\n\n@media (prefers-color-scheme: dark) {\n .jf-text-item-title {\n color: var(--jf-text-item-title-color-dark);\n }\n}\n\n.jf-text-item-suffix {\n font-weight: 400;\n color: var(--jf-text-muted-color);\n}\n\n@media (prefers-color-scheme: dark) {\n .jf-text-item-suffix {\n color: var(--jf-text-muted-color-dark);\n }\n}\n\n.jf-text-label {\n font-size: var(--jf-label-section-size);\n color: var(--jf-text-label-color);\n}\n\n@media (prefers-color-scheme: dark) {\n .jf-text-label {\n color: var(--jf-text-label-color-dark);\n }\n}\n\n/* Flex */\n.jf-flex-between {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--jf-gap);\n}\n\n.jf-flex-between-start {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--jf-gap);\n}\n\n.jf-flex-actions {\n display: flex;\n flex: none;\n align-items: center;\n gap: 0.25rem;\n}\n"],"mappings":";AAQA;AACE,qBAAmB,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC3C,4BAA0B;AAC1B,sBAAoB;AACpB,YAAU;AACV,iBAAe;AACf,2BAAyB;AACzB,6BAA2B;AAC3B,yBAAuB,IAAI,IAAI,IAAI;AACnC,8BAA4B,IAAI,IAAI,IAAI;AACxC,8BAA4B,IAAI,GAAG,GAAG;AACtC,mCAAiC,IAAI,IAAI,IAAI;AAC7C,yBAAuB,IAAI,GAAG,GAAG;AACjC,8BAA4B,IAAI,IAAI,IAAI;AAC1C;AAEA,QAAO,sBAAuB;AAC5B;AACE,uBAAmB,IAAI,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACnD;AACF;AAGA,CAAC;AACC,UAAQ,IAAI;AACZ,iBAAe,IAAI;AACnB,WAAS,IAAI;AACf;AAGA,CAAC;AACC,WAAS,IAAI;AACf;AAGA,CAAC;AACC,WAAS;AACT,kBAAgB;AAChB,OAAK,IAAI;AACX;AAEA,CAAC;AACC,WAAS;AACT,kBAAgB;AAChB,OAAK,IAAI;AACX;AAEA,CAAC;AACC,WAAS;AACT,kBAAgB;AAChB,OAAK,IAAI;AACX;AAEA,QAAO,WAAY;AACjB,GAPD;AAQG,oBAAgB;AAChB,eAAW;AACb;AACF;AAEA,CAAC;AACC,aAAW;AACX,QAAM,EAAE,EAAE;AACZ;AAEA,CAAC;AACC,aAAW;AACb;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,OAAK,IAAI;AACT,iBAAe,IAAI;AACrB;AAGA,CAAC;AACC,aAAW,IAAI;AACf,eAAa,IAAI;AACnB;AAEA,CAAC;AACC,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,iBAAe,IAAI;AACrB;AAGA,CAAC;AACC,aAAW,IAAI;AACf,SAAO,IAAI;AACb;AAEA,QAAO,sBAAuB;AAC5B,GAND;AAOG,WAAO,IAAI;AACb;AACF;AAEA,CAAC;AACC,aAAW;AACX,SAAO,IAAI;AACb;AAEA,QAAO,sBAAuB;AAC5B,GAND;AAOG,WAAO,IAAI;AACb;AACF;AAEA,CAAC;AACC,aAAW;AACX,eAAa;AACb,SAAO,IAAI;AACb;AAEA,QAAO,sBAAuB;AAC5B,GAPD;AAQG,WAAO,IAAI;AACb;AACF;AAEA,CAAC;AACC,eAAa;AACb,SAAO,IAAI;AACb;AAEA,QAAO,sBAAuB;AAC5B,GAND;AAOG,WAAO,IAAI;AACb;AACF;AAEA,CAAC;AACC,aAAW,IAAI;AACf,SAAO,IAAI;AACb;AAEA,QAAO,sBAAuB;AAC5B,GAND;AAOG,WAAO,IAAI;AACb;AACF;AAGA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,OAAK,IAAI;AACX;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,OAAK,IAAI;AACX;AAEA,CAAC;AACC,WAAS;AACT,QAAM;AACN,eAAa;AACb,OAAK;AACP;","names":[]}
1
+ {"version":3,"sources":["../src/styles.css"],"sourcesContent":["/**\n * Default styles for jsonforms-nuxt-ui-renderers.\n * Uses semantic class names (jf-*). Override CSS variables to customize.\n *\n * Usage: import 'jsonforms-nuxt-ui-renderers/styles.css'\n * Or use your own styles targeting .jf-* classes.\n */\n\n:root {\n --jf-panel-border: 1px solid rgba(0, 0, 0, 0.06);\n --jf-panel-border-radius: 0.25rem;\n --jf-panel-padding: 0.75rem;\n --jf-gap: 0.75rem;\n --jf-gap-wide: 1.5rem;\n --jf-label-section-size: 0.875rem;\n --jf-label-section-weight: 600;\n --jf-text-muted-color: rgb(107 114 128);\n --jf-text-muted-color-dark: rgb(156 163 175);\n --jf-text-item-title-color: rgb(55 65 81);\n --jf-text-item-title-color-dark: rgb(229 231 235);\n --jf-text-label-color: rgb(75 85 99);\n --jf-text-label-color-dark: rgb(209 213 219);\n /* Native number inputs (integer / number controls) — match typical Nuxt UI field density */\n --jf-input-border: 1px solid rgba(0, 0, 0, 0.12);\n --jf-input-border-error: 1px solid rgb(220 38 38);\n --jf-input-radius: 0.375rem;\n --jf-input-padding-x: 0.625rem;\n --jf-input-padding-y: 0.375rem;\n --jf-input-bg: transparent;\n}\n\n@media (prefers-color-scheme: dark) {\n :root {\n --jf-panel-border: 1px solid rgba(255, 255, 255, 0.08);\n --jf-input-border: 1px solid rgba(255, 255, 255, 0.14);\n }\n}\n\n/* Panel - bordered container */\n.jf-panel {\n border: var(--jf-panel-border);\n border-radius: var(--jf-panel-border-radius);\n padding: var(--jf-panel-padding);\n}\n\n/* Nested group - padding only */\n.jf-group {\n padding: var(--jf-panel-padding);\n}\n\n/* Layouts */\n.jf-layout-vertical {\n display: flex;\n flex-direction: column;\n gap: var(--jf-gap);\n}\n\n.jf-layout-vertical-wide {\n display: flex;\n flex-direction: column;\n gap: var(--jf-gap-wide);\n}\n\n.jf-layout-horizontal {\n display: flex;\n flex-direction: column;\n gap: var(--jf-gap);\n}\n\n@media (min-width: 768px) {\n .jf-layout-horizontal {\n flex-direction: row;\n flex-wrap: wrap;\n }\n}\n\n.jf-layout-horizontal-item {\n min-width: 0;\n flex: 1 1 0%;\n}\n\n.jf-min-w-0 {\n min-width: 0;\n}\n\n.jf-array-item-toolbar {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--jf-gap);\n margin-bottom: var(--jf-gap);\n}\n\n/* Labels */\n.jf-label-section {\n font-size: var(--jf-label-section-size);\n font-weight: var(--jf-label-section-weight);\n}\n\n.jf-label-section-spaced {\n font-size: var(--jf-label-section-size);\n font-weight: var(--jf-label-section-weight);\n margin-bottom: var(--jf-gap);\n}\n\n/* Text */\n.jf-text-muted {\n font-size: var(--jf-label-section-size);\n color: var(--jf-text-muted-color);\n}\n\n@media (prefers-color-scheme: dark) {\n .jf-text-muted {\n color: var(--jf-text-muted-color-dark);\n }\n}\n\n.jf-text-muted-xs {\n font-size: 0.75rem;\n color: var(--jf-text-muted-color);\n}\n\n@media (prefers-color-scheme: dark) {\n .jf-text-muted-xs {\n color: var(--jf-text-muted-color-dark);\n }\n}\n\n.jf-text-item-title {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--jf-text-item-title-color);\n}\n\n@media (prefers-color-scheme: dark) {\n .jf-text-item-title {\n color: var(--jf-text-item-title-color-dark);\n }\n}\n\n.jf-text-item-suffix {\n font-weight: 400;\n color: var(--jf-text-muted-color);\n}\n\n@media (prefers-color-scheme: dark) {\n .jf-text-item-suffix {\n color: var(--jf-text-muted-color-dark);\n }\n}\n\n.jf-text-label {\n font-size: var(--jf-label-section-size);\n color: var(--jf-text-label-color);\n}\n\n@media (prefers-color-scheme: dark) {\n .jf-text-label {\n color: var(--jf-text-label-color-dark);\n }\n}\n\n/* Flex */\n.jf-flex-between {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--jf-gap);\n}\n\n.jf-flex-between-start {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--jf-gap);\n}\n\n.jf-flex-actions {\n display: flex;\n flex: none;\n align-items: center;\n gap: 0.25rem;\n}\n\n/* Native `<input type=\"number\">` for integer/number JsonForms controls (see README) */\n.jf-input-native {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n border: var(--jf-input-border);\n border-radius: var(--jf-input-radius);\n background: var(--jf-input-bg);\n padding: var(--jf-input-padding-y) var(--jf-input-padding-x);\n font: inherit;\n line-height: 1.5;\n outline: none;\n}\n\n.jf-input-native:focus-visible {\n outline: 2px solid rgb(59 130 246);\n outline-offset: 0;\n}\n\n.jf-input-native:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.jf-input-native--error {\n border: var(--jf-input-border-error);\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jsonforms-nuxt-ui-renderers",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "JSONForms renderer set for Nuxt UI (@nuxt/ui) on Vue 3 / Nuxt.",
5
5
  "license": "MIT",
6
6
  "author": "OpenApp contributors",