jsonforms-nuxt-ui-renderers 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,896 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ nuxtUiRenderers: () => nuxtUiRenderers
24
+ });
25
+ module.exports = __toCommonJS(index_exports);
26
+
27
+ // src/nuxtUiRenderers.ts
28
+ var import_core3 = require("@jsonforms/core");
29
+ var import_vue30 = require("vue");
30
+
31
+ // src/renderers/complex/NuxtUiArrayListRenderer.ts
32
+ var import_core = require("@jsonforms/core");
33
+ var import_vue2 = require("@jsonforms/vue");
34
+ var import_vue3 = require("vue");
35
+
36
+ // src/renderers/util.ts
37
+ var import_vue = require("vue");
38
+ function trimmedOrUndefined(input) {
39
+ const v = input?.trim();
40
+ return v ? v : void 0;
41
+ }
42
+
43
+ // src/renderers/complex/NuxtUiArrayListRenderer.ts
44
+ var NuxtUiArrayListRenderer = (0, import_vue3.defineComponent)({
45
+ name: "NuxtUiArrayListRenderer",
46
+ components: { DispatchRenderer: import_vue2.DispatchRenderer },
47
+ props: (0, import_vue2.rendererProps)(),
48
+ setup(props) {
49
+ const { control, addItem, removeItems, moveUp, moveDown } = (0, import_vue2.useJsonFormsArrayControl)(
50
+ props
51
+ );
52
+ const errorMessage = (0, import_vue3.computed)(() => trimmedOrUndefined(control.value.errors));
53
+ const items = (0, import_vue3.computed)(
54
+ () => Array.isArray(control.value.data) ? control.value.data : []
55
+ );
56
+ const arraySchema = (0, import_vue3.computed)(() => {
57
+ try {
58
+ return import_core.Resolve.schema(
59
+ props.schema,
60
+ control.value.uischema.scope,
61
+ control.value.rootSchema
62
+ );
63
+ } catch {
64
+ return void 0;
65
+ }
66
+ });
67
+ const maxItemsReached = (0, import_vue3.computed)(() => {
68
+ const max = arraySchema.value?.maxItems;
69
+ return typeof max === "number" ? items.value.length >= max : false;
70
+ });
71
+ const minItemsReached = (0, import_vue3.computed)(() => {
72
+ const min = arraySchema.value?.minItems;
73
+ return typeof min === "number" ? items.value.length <= min : false;
74
+ });
75
+ const childUiSchema = (0, import_vue3.computed)(
76
+ () => (0, import_core.findUISchema)(
77
+ control.value.uischemas,
78
+ control.value.schema,
79
+ control.value.uischema.scope,
80
+ control.value.path,
81
+ void 0,
82
+ control.value.uischema,
83
+ control.value.rootSchema
84
+ )
85
+ );
86
+ function childLabelForIndex(index) {
87
+ const childLabelProp = getChildLabelPropFromUiSchemaOptions(control.value.uischema.options) ?? (0, import_core.getFirstPrimitiveProp)(control.value.schema);
88
+ if (!childLabelProp) return `${index}`;
89
+ const labelValue = import_core.Resolve.data(
90
+ control.value.data,
91
+ (0, import_core.composePaths)(`${index}`, childLabelProp)
92
+ );
93
+ if (labelValue === void 0 || labelValue === null || Number.isNaN(labelValue)) {
94
+ return "";
95
+ }
96
+ return String(labelValue);
97
+ }
98
+ function getChildLabelPropFromUiSchemaOptions(options) {
99
+ if (!options || typeof options !== "object") return void 0;
100
+ const value = options.childLabelProp;
101
+ return typeof value === "string" ? value : void 0;
102
+ }
103
+ function addButtonClick() {
104
+ addItem(
105
+ control.value.path,
106
+ (0, import_core.createDefaultValue)(control.value.schema, control.value.rootSchema)
107
+ )();
108
+ }
109
+ return () => {
110
+ if (!control.value.visible) return null;
111
+ const UFormField = (0, import_vue3.resolveComponent)("UFormField");
112
+ const UButton = (0, import_vue3.resolveComponent)("UButton");
113
+ return (0, import_vue3.h)(
114
+ "div",
115
+ {},
116
+ (0, import_vue3.h)(
117
+ UFormField,
118
+ {
119
+ label: control.value.label,
120
+ description: control.value.description,
121
+ required: control.value.required,
122
+ error: errorMessage.value
123
+ },
124
+ {
125
+ default: () => (0, import_vue3.h)("div", { class: "flex flex-col gap-3" }, [
126
+ (0, import_vue3.h)("div", { class: "flex items-center justify-between gap-3" }, [
127
+ (0, import_vue3.h)(
128
+ "div",
129
+ { class: "text-xs text-gray-500" },
130
+ `${items.value.length} items`
131
+ ),
132
+ (0, import_vue3.h)(
133
+ UButton,
134
+ {
135
+ type: "button",
136
+ size: "xs",
137
+ variant: "soft",
138
+ color: "neutral",
139
+ disabled: !control.value.enabled || maxItemsReached.value,
140
+ onClick: addButtonClick
141
+ },
142
+ { default: () => "Add" }
143
+ )
144
+ ]),
145
+ items.value.length === 0 ? (0, import_vue3.h)(
146
+ "div",
147
+ { class: "text-sm text-gray-500" },
148
+ "No items."
149
+ ) : null,
150
+ ...items.value.map(
151
+ (_item, index) => (0, import_vue3.h)(
152
+ "div",
153
+ { key: `${control.value.path}-${index}`, class: "rounded border p-3" },
154
+ [
155
+ (0, import_vue3.h)(
156
+ "div",
157
+ { class: "mb-3 flex items-start justify-between gap-3" },
158
+ [
159
+ (0, import_vue3.h)("div", { class: "min-w-0" }, [
160
+ (0, import_vue3.h)(
161
+ "div",
162
+ {
163
+ class: "text-xs font-semibold text-gray-700 dark:text-gray-200"
164
+ },
165
+ [
166
+ `Item ${index + 1}`,
167
+ childLabelForIndex(index) ? (0, import_vue3.h)(
168
+ "span",
169
+ {
170
+ class: "font-normal text-gray-500"
171
+ },
172
+ ` \u2014 ${childLabelForIndex(index)}`
173
+ ) : null
174
+ ]
175
+ )
176
+ ]),
177
+ (0, import_vue3.h)("div", { class: "flex flex-none items-center gap-1" }, [
178
+ (0, import_vue3.h)(
179
+ UButton,
180
+ {
181
+ type: "button",
182
+ size: "xs",
183
+ variant: "ghost",
184
+ color: "neutral",
185
+ disabled: !control.value.enabled || index === 0,
186
+ onClick: () => moveUp?.(control.value.path, index)()
187
+ },
188
+ { default: () => "Up" }
189
+ ),
190
+ (0, import_vue3.h)(
191
+ UButton,
192
+ {
193
+ type: "button",
194
+ size: "xs",
195
+ variant: "ghost",
196
+ color: "neutral",
197
+ disabled: !control.value.enabled || index >= items.value.length - 1,
198
+ onClick: () => moveDown?.(control.value.path, index)()
199
+ },
200
+ { default: () => "Down" }
201
+ ),
202
+ (0, import_vue3.h)(
203
+ UButton,
204
+ {
205
+ type: "button",
206
+ size: "xs",
207
+ variant: "ghost",
208
+ color: "error",
209
+ disabled: !control.value.enabled || minItemsReached.value,
210
+ onClick: () => removeItems?.(control.value.path, [index])()
211
+ },
212
+ { default: () => "Remove" }
213
+ )
214
+ ])
215
+ ]
216
+ ),
217
+ (0, import_vue3.h)(import_vue2.DispatchRenderer, {
218
+ schema: control.value.schema,
219
+ uischema: childUiSchema.value,
220
+ path: (0, import_core.composePaths)(control.value.path, `${index}`),
221
+ enabled: control.value.enabled,
222
+ renderers: control.value.renderers,
223
+ cells: control.value.cells
224
+ })
225
+ ]
226
+ )
227
+ )
228
+ ])
229
+ }
230
+ )
231
+ );
232
+ };
233
+ }
234
+ });
235
+
236
+ // src/renderers/complex/NuxtUiObjectRenderer.ts
237
+ var import_core2 = require("@jsonforms/core");
238
+ var import_vue4 = require("@jsonforms/vue");
239
+ var import_vue5 = require("vue");
240
+ var NuxtUiObjectRenderer = (0, import_vue5.defineComponent)({
241
+ name: "NuxtUiObjectRenderer",
242
+ components: { DispatchRenderer: import_vue4.DispatchRenderer },
243
+ props: (0, import_vue4.rendererProps)(),
244
+ setup(props) {
245
+ const { control } = (0, import_vue4.useJsonFormsControlWithDetail)(
246
+ props
247
+ );
248
+ const detailUiSchema = (0, import_vue5.computed)(() => {
249
+ const uiSchemaGenerator = () => {
250
+ const uiSchema = import_core2.Generate.uiSchema(
251
+ control.value.schema,
252
+ "Group",
253
+ void 0,
254
+ control.value.rootSchema
255
+ );
256
+ if (!control.value.path) {
257
+ uiSchema.type = "VerticalLayout";
258
+ } else {
259
+ ;
260
+ uiSchema.label = control.value.label;
261
+ }
262
+ return uiSchema;
263
+ };
264
+ return (0, import_core2.findUISchema)(
265
+ control.value.uischemas,
266
+ control.value.schema,
267
+ control.value.uischema.scope,
268
+ control.value.path,
269
+ uiSchemaGenerator,
270
+ control.value.uischema,
271
+ control.value.rootSchema
272
+ );
273
+ });
274
+ return () => {
275
+ if (!control.value.visible) return null;
276
+ return (0, import_vue5.h)(import_vue4.DispatchRenderer, {
277
+ visible: control.value.visible,
278
+ enabled: control.value.enabled,
279
+ schema: control.value.schema,
280
+ uischema: detailUiSchema.value,
281
+ path: control.value.path,
282
+ renderers: control.value.renderers,
283
+ cells: control.value.cells
284
+ });
285
+ };
286
+ }
287
+ });
288
+
289
+ // src/renderers/controls/NuxtUiBooleanControl.ts
290
+ var import_vue6 = require("@jsonforms/vue");
291
+ var import_vue7 = require("vue");
292
+ var NuxtUiBooleanControl = (0, import_vue7.defineComponent)({
293
+ name: "NuxtUiBooleanControl",
294
+ props: (0, import_vue6.rendererProps)(),
295
+ setup(props) {
296
+ const { control, handleChange } = (0, import_vue6.useJsonFormsControl)(
297
+ props
298
+ );
299
+ const errorMessage = (0, import_vue7.computed)(() => trimmedOrUndefined(control.value.errors));
300
+ const modelValue = (0, import_vue7.computed)({
301
+ get: () => Boolean(control.value.data),
302
+ set: (v) => handleChange(control.value.path, v)
303
+ });
304
+ return () => {
305
+ if (!control.value.visible) return null;
306
+ const UFormField = (0, import_vue7.resolveComponent)("UFormField");
307
+ const USwitch = (0, import_vue7.resolveComponent)("USwitch");
308
+ return (0, import_vue7.h)(
309
+ "div",
310
+ {},
311
+ (0, import_vue7.h)(
312
+ UFormField,
313
+ {
314
+ label: control.value.label,
315
+ description: control.value.description,
316
+ required: control.value.required,
317
+ error: errorMessage.value
318
+ },
319
+ {
320
+ default: () => (0, import_vue7.h)(
321
+ "div",
322
+ { class: "flex items-center justify-between gap-3" },
323
+ (0, import_vue7.h)(USwitch, {
324
+ modelValue: modelValue.value,
325
+ disabled: !control.value.enabled,
326
+ "aria-invalid": Boolean(errorMessage.value),
327
+ "onUpdate:modelValue": (v) => {
328
+ modelValue.value = v;
329
+ }
330
+ })
331
+ )
332
+ }
333
+ )
334
+ );
335
+ };
336
+ }
337
+ });
338
+
339
+ // src/renderers/controls/NuxtUiEnumControl.ts
340
+ var import_vue8 = require("@jsonforms/vue");
341
+ var import_vue9 = require("vue");
342
+ function schemaEnumOptions(schema) {
343
+ if (!schema) return [];
344
+ if (Array.isArray(schema.enum)) {
345
+ return schema.enum.map((v) => ({ label: String(v), value: v }));
346
+ }
347
+ const oneOf = schema.oneOf;
348
+ if (!Array.isArray(oneOf)) return [];
349
+ const out = [];
350
+ for (const entry of oneOf) {
351
+ if (typeof entry !== "object" || entry === null) continue;
352
+ const maybe = entry;
353
+ if (!("const" in maybe)) continue;
354
+ out.push({
355
+ value: maybe.const,
356
+ label: typeof maybe.title === "string" && maybe.title.trim() ? maybe.title : String(maybe.const)
357
+ });
358
+ }
359
+ return out;
360
+ }
361
+ var NuxtUiEnumControl = (0, import_vue9.defineComponent)({
362
+ name: "NuxtUiEnumControl",
363
+ props: (0, import_vue8.rendererProps)(),
364
+ setup(props) {
365
+ const { control, handleChange } = (0, import_vue8.useJsonFormsControl)(
366
+ props
367
+ );
368
+ const errorMessage = (0, import_vue9.computed)(() => trimmedOrUndefined(control.value.errors));
369
+ const options = (0, import_vue9.computed)(() => schemaEnumOptions(control.value.schema));
370
+ const selectedValue = (0, import_vue9.computed)({
371
+ get: () => control.value.data,
372
+ set: (v) => handleChange(control.value.path, v)
373
+ });
374
+ return () => {
375
+ if (!control.value.visible) return null;
376
+ const UFormField = (0, import_vue9.resolveComponent)("UFormField");
377
+ const USelectMenu = (0, import_vue9.resolveComponent)("USelectMenu");
378
+ return (0, import_vue9.h)(
379
+ "div",
380
+ {},
381
+ (0, import_vue9.h)(
382
+ UFormField,
383
+ {
384
+ label: control.value.label,
385
+ description: control.value.description,
386
+ required: control.value.required,
387
+ error: errorMessage.value
388
+ },
389
+ {
390
+ default: () => (0, import_vue9.h)(USelectMenu, {
391
+ modelValue: selectedValue.value,
392
+ items: options.value,
393
+ valueKey: "value",
394
+ labelKey: "label",
395
+ disabled: !control.value.enabled,
396
+ color: errorMessage.value ? "error" : void 0,
397
+ "aria-invalid": Boolean(errorMessage.value),
398
+ placeholder: "Select...",
399
+ "onUpdate:modelValue": (v) => {
400
+ selectedValue.value = v;
401
+ }
402
+ })
403
+ }
404
+ )
405
+ );
406
+ };
407
+ }
408
+ });
409
+
410
+ // src/renderers/controls/NuxtUiIntegerControl.ts
411
+ var import_vue10 = require("@jsonforms/vue");
412
+ var import_vue11 = require("vue");
413
+ var NuxtUiIntegerControl = (0, import_vue11.defineComponent)({
414
+ name: "NuxtUiIntegerControl",
415
+ props: (0, import_vue10.rendererProps)(),
416
+ setup(props) {
417
+ const { control, handleChange } = (0, import_vue10.useJsonFormsControl)(
418
+ props
419
+ );
420
+ const errorMessage = (0, import_vue11.computed)(() => trimmedOrUndefined(control.value.errors));
421
+ const modelValue = (0, import_vue11.computed)(() => {
422
+ const v = control.value.data;
423
+ return v === null || v === void 0 ? "" : String(v);
424
+ });
425
+ function onUpdate(raw) {
426
+ const trimmed = raw.trim();
427
+ if (trimmed === "") {
428
+ handleChange(control.value.path, void 0);
429
+ return;
430
+ }
431
+ const parsed = Number.parseInt(trimmed, 10);
432
+ handleChange(control.value.path, Number.isFinite(parsed) ? parsed : void 0);
433
+ }
434
+ return () => {
435
+ if (!control.value.visible) return null;
436
+ const UFormField = (0, import_vue11.resolveComponent)("UFormField");
437
+ const UInput = (0, import_vue11.resolveComponent)("UInput");
438
+ return (0, import_vue11.h)(
439
+ "div",
440
+ {},
441
+ (0, import_vue11.h)(
442
+ UFormField,
443
+ {
444
+ label: control.value.label,
445
+ description: control.value.description,
446
+ required: control.value.required,
447
+ error: errorMessage.value
448
+ },
449
+ {
450
+ default: () => (0, import_vue11.h)(UInput, {
451
+ type: "number",
452
+ inputmode: "numeric",
453
+ step: "1",
454
+ modelValue: modelValue.value,
455
+ disabled: !control.value.enabled,
456
+ color: errorMessage.value ? "error" : void 0,
457
+ "aria-invalid": Boolean(errorMessage.value),
458
+ "onUpdate:modelValue": onUpdate
459
+ })
460
+ }
461
+ )
462
+ );
463
+ };
464
+ }
465
+ });
466
+
467
+ // src/renderers/controls/NuxtUiNumberControl.ts
468
+ var import_vue12 = require("@jsonforms/vue");
469
+ var import_vue13 = require("vue");
470
+ var NuxtUiNumberControl = (0, import_vue13.defineComponent)({
471
+ name: "NuxtUiNumberControl",
472
+ props: (0, import_vue12.rendererProps)(),
473
+ setup(props) {
474
+ const { control, handleChange } = (0, import_vue12.useJsonFormsControl)(
475
+ props
476
+ );
477
+ const errorMessage = (0, import_vue13.computed)(() => trimmedOrUndefined(control.value.errors));
478
+ const modelValue = (0, import_vue13.computed)(() => {
479
+ const v = control.value.data;
480
+ return v === null || v === void 0 ? "" : String(v);
481
+ });
482
+ function onUpdate(raw) {
483
+ const trimmed = raw.trim();
484
+ if (trimmed === "") {
485
+ handleChange(control.value.path, void 0);
486
+ return;
487
+ }
488
+ const parsed = Number(trimmed);
489
+ handleChange(control.value.path, Number.isFinite(parsed) ? parsed : void 0);
490
+ }
491
+ return () => {
492
+ if (!control.value.visible) return null;
493
+ const UFormField = (0, import_vue13.resolveComponent)("UFormField");
494
+ const UInput = (0, import_vue13.resolveComponent)("UInput");
495
+ return (0, import_vue13.h)(
496
+ "div",
497
+ {},
498
+ (0, import_vue13.h)(
499
+ UFormField,
500
+ {
501
+ label: control.value.label,
502
+ description: control.value.description,
503
+ required: control.value.required,
504
+ error: errorMessage.value
505
+ },
506
+ {
507
+ default: () => (0, import_vue13.h)(UInput, {
508
+ type: "number",
509
+ inputmode: "decimal",
510
+ modelValue: modelValue.value,
511
+ disabled: !control.value.enabled,
512
+ color: errorMessage.value ? "error" : void 0,
513
+ "aria-invalid": Boolean(errorMessage.value),
514
+ "onUpdate:modelValue": onUpdate
515
+ })
516
+ }
517
+ )
518
+ );
519
+ };
520
+ }
521
+ });
522
+
523
+ // src/renderers/controls/NuxtUiStringControl.ts
524
+ var import_vue14 = require("@jsonforms/vue");
525
+ var import_vue15 = require("vue");
526
+ var NuxtUiStringControl = (0, import_vue15.defineComponent)({
527
+ name: "NuxtUiStringControl",
528
+ props: (0, import_vue14.rendererProps)(),
529
+ setup(props) {
530
+ const { control, handleChange } = (0, import_vue14.useJsonFormsControl)(
531
+ props
532
+ );
533
+ const errorMessage = (0, import_vue15.computed)(() => trimmedOrUndefined(control.value.errors));
534
+ return () => {
535
+ if (!control.value.visible) return null;
536
+ const UFormField = (0, import_vue15.resolveComponent)("UFormField");
537
+ const UInput = (0, import_vue15.resolveComponent)("UInput");
538
+ return (0, import_vue15.h)(
539
+ "div",
540
+ {},
541
+ (0, import_vue15.h)(
542
+ UFormField,
543
+ {
544
+ label: control.value.label,
545
+ description: control.value.description,
546
+ required: control.value.required,
547
+ error: errorMessage.value
548
+ },
549
+ {
550
+ default: () => (0, import_vue15.h)(UInput, {
551
+ modelValue: control.value.data ?? "",
552
+ class: "w-full",
553
+ disabled: !control.value.enabled,
554
+ color: errorMessage.value ? "error" : void 0,
555
+ "aria-invalid": Boolean(errorMessage.value),
556
+ "onUpdate:modelValue": (v) => handleChange(control.value.path, v)
557
+ })
558
+ }
559
+ )
560
+ );
561
+ };
562
+ }
563
+ });
564
+
565
+ // src/renderers/controls/NuxtUiTextareaControl.ts
566
+ var import_vue16 = require("@jsonforms/vue");
567
+ var import_vue17 = require("vue");
568
+ var NuxtUiTextareaControl = (0, import_vue17.defineComponent)({
569
+ name: "NuxtUiTextareaControl",
570
+ props: (0, import_vue16.rendererProps)(),
571
+ setup(props) {
572
+ const { control, handleChange } = (0, import_vue16.useJsonFormsControl)(
573
+ props
574
+ );
575
+ const errorMessage = (0, import_vue17.computed)(() => trimmedOrUndefined(control.value.errors));
576
+ return () => {
577
+ if (!control.value.visible) return null;
578
+ const UFormField = (0, import_vue17.resolveComponent)("UFormField");
579
+ const UTextarea = (0, import_vue17.resolveComponent)("UTextarea");
580
+ return (0, import_vue17.h)(
581
+ "div",
582
+ {},
583
+ (0, import_vue17.h)(
584
+ UFormField,
585
+ {
586
+ label: control.value.label,
587
+ description: control.value.description,
588
+ required: control.value.required,
589
+ error: errorMessage.value
590
+ },
591
+ {
592
+ default: () => (0, import_vue17.h)(UTextarea, {
593
+ modelValue: control.value.data ?? "",
594
+ class: "w-full",
595
+ disabled: !control.value.enabled,
596
+ color: errorMessage.value ? "error" : void 0,
597
+ "aria-invalid": Boolean(errorMessage.value),
598
+ rows: 5,
599
+ "onUpdate:modelValue": (v) => handleChange(control.value.path, v)
600
+ })
601
+ }
602
+ )
603
+ );
604
+ };
605
+ }
606
+ });
607
+
608
+ // src/renderers/layouts/NuxtUiCategorizationRenderer.ts
609
+ var import_vue18 = require("@jsonforms/vue");
610
+ var import_vue19 = require("vue");
611
+ var NuxtUiCategorizationRenderer = (0, import_vue19.defineComponent)({
612
+ name: "NuxtUiCategorizationRenderer",
613
+ components: { DispatchRenderer: import_vue18.DispatchRenderer },
614
+ props: (0, import_vue18.rendererProps)(),
615
+ setup(props) {
616
+ const { layout, categories } = (0, import_vue18.useJsonFormsCategorization)(
617
+ props
618
+ );
619
+ return () => {
620
+ if (!layout.value.visible) return null;
621
+ return (0, import_vue19.h)(
622
+ "div",
623
+ { class: "flex flex-col gap-6" },
624
+ categories.map((categoryRef, catIndex) => {
625
+ const category = categoryRef.value;
626
+ const elements = category.uischema.elements ?? [];
627
+ return (0, import_vue19.h)(
628
+ "div",
629
+ { key: `${layout.value.path}-cat-${catIndex}`, class: "flex flex-col gap-3" },
630
+ [
631
+ category.label ? (0, import_vue19.h)("div", { class: "text-sm font-semibold" }, category.label) : null,
632
+ (0, import_vue19.h)(
633
+ "div",
634
+ { class: "flex flex-col gap-3" },
635
+ elements.map(
636
+ (element, index) => (0, import_vue19.h)(
637
+ "div",
638
+ { key: `${category.path}-${index}` },
639
+ (0, import_vue19.h)(import_vue18.DispatchRenderer, {
640
+ schema: category.schema,
641
+ uischema: element,
642
+ path: category.path,
643
+ enabled: category.enabled,
644
+ renderers: category.renderers,
645
+ cells: category.cells
646
+ })
647
+ )
648
+ )
649
+ )
650
+ ]
651
+ );
652
+ })
653
+ );
654
+ };
655
+ }
656
+ });
657
+
658
+ // src/renderers/layouts/NuxtUiCategoryRenderer.ts
659
+ var import_vue20 = require("@jsonforms/vue");
660
+ var import_vue21 = require("vue");
661
+ var NuxtUiCategoryRenderer = (0, import_vue21.defineComponent)({
662
+ name: "NuxtUiCategoryRenderer",
663
+ components: { DispatchRenderer: import_vue20.DispatchRenderer },
664
+ props: (0, import_vue20.rendererProps)(),
665
+ setup(props) {
666
+ const { layout } = (0, import_vue20.useJsonFormsLayout)(
667
+ props
668
+ );
669
+ return () => {
670
+ if (!layout.value.visible) return null;
671
+ const elements = layout.value.uischema.elements ?? [];
672
+ return (0, import_vue21.h)("div", { class: "flex flex-col gap-3" }, [
673
+ layout.value.label ? (0, import_vue21.h)("div", { class: "text-sm font-semibold" }, layout.value.label) : null,
674
+ (0, import_vue21.h)(
675
+ "div",
676
+ { class: "flex flex-col gap-3" },
677
+ elements.map(
678
+ (element, index) => (0, import_vue21.h)(
679
+ "div",
680
+ { key: `${layout.value.path}-${index}` },
681
+ (0, import_vue21.h)(import_vue20.DispatchRenderer, {
682
+ schema: layout.value.schema,
683
+ uischema: element,
684
+ path: layout.value.path,
685
+ enabled: layout.value.enabled,
686
+ renderers: layout.value.renderers,
687
+ cells: layout.value.cells
688
+ })
689
+ )
690
+ )
691
+ )
692
+ ]);
693
+ };
694
+ }
695
+ });
696
+
697
+ // src/renderers/layouts/NuxtUiGroupRenderer.ts
698
+ var import_vue22 = require("@jsonforms/vue");
699
+ var import_vue23 = require("vue");
700
+ var NuxtUiGroupRenderer = (0, import_vue23.defineComponent)({
701
+ name: "NuxtUiGroupRenderer",
702
+ components: { DispatchRenderer: import_vue22.DispatchRenderer },
703
+ props: (0, import_vue22.rendererProps)(),
704
+ setup(props) {
705
+ const { layout } = (0, import_vue22.useJsonFormsLayout)(
706
+ props
707
+ );
708
+ return () => {
709
+ if (!layout.value.visible) return null;
710
+ const elements = layout.value.uischema.elements ?? [];
711
+ return (0, import_vue23.h)("div", { class: "rounded border p-3" }, [
712
+ layout.value.label ? (0, import_vue23.h)("div", { class: "mb-3 text-sm font-semibold" }, layout.value.label) : null,
713
+ (0, import_vue23.h)(
714
+ "div",
715
+ { class: "flex flex-col gap-3" },
716
+ elements.map(
717
+ (element, index) => (0, import_vue23.h)(
718
+ "div",
719
+ { key: `${layout.value.path}-${index}` },
720
+ (0, import_vue23.h)(import_vue22.DispatchRenderer, {
721
+ schema: layout.value.schema,
722
+ uischema: element,
723
+ path: layout.value.path,
724
+ enabled: layout.value.enabled,
725
+ renderers: layout.value.renderers,
726
+ cells: layout.value.cells
727
+ })
728
+ )
729
+ )
730
+ )
731
+ ]);
732
+ };
733
+ }
734
+ });
735
+
736
+ // src/renderers/layouts/NuxtUiHorizontalLayoutRenderer.ts
737
+ var import_vue24 = require("@jsonforms/vue");
738
+ var import_vue25 = require("vue");
739
+ var NuxtUiHorizontalLayoutRenderer = (0, import_vue25.defineComponent)({
740
+ name: "NuxtUiHorizontalLayoutRenderer",
741
+ components: { DispatchRenderer: import_vue24.DispatchRenderer },
742
+ props: (0, import_vue24.rendererProps)(),
743
+ setup(props) {
744
+ const { layout } = (0, import_vue24.useJsonFormsLayout)(
745
+ props
746
+ );
747
+ return () => {
748
+ if (!layout.value.visible) return null;
749
+ const elements = layout.value.uischema.elements ?? [];
750
+ return (0, import_vue25.h)(
751
+ "div",
752
+ { class: "flex flex-col gap-3 md:flex-row md:flex-wrap" },
753
+ elements.map(
754
+ (element, index) => (0, import_vue25.h)(
755
+ "div",
756
+ { key: `${layout.value.path}-${index}`, class: "min-w-0 flex-1" },
757
+ (0, import_vue25.h)(import_vue24.DispatchRenderer, {
758
+ schema: layout.value.schema,
759
+ uischema: element,
760
+ path: layout.value.path,
761
+ enabled: layout.value.enabled,
762
+ renderers: layout.value.renderers,
763
+ cells: layout.value.cells
764
+ })
765
+ )
766
+ )
767
+ );
768
+ };
769
+ }
770
+ });
771
+
772
+ // src/renderers/layouts/NuxtUiLabelRenderer.ts
773
+ var import_vue26 = require("@jsonforms/vue");
774
+ var import_vue27 = require("vue");
775
+ var NuxtUiLabelRenderer = (0, import_vue27.defineComponent)({
776
+ name: "NuxtUiLabelRenderer",
777
+ props: (0, import_vue26.rendererProps)(),
778
+ setup(props) {
779
+ const { label } = (0, import_vue26.useJsonFormsLabel)(
780
+ props
781
+ );
782
+ return () => {
783
+ if (!label.value.visible) return null;
784
+ return (0, import_vue27.h)(
785
+ "div",
786
+ { class: "text-sm text-gray-600 dark:text-gray-300" },
787
+ label.value.text
788
+ );
789
+ };
790
+ }
791
+ });
792
+
793
+ // src/renderers/layouts/NuxtUiVerticalLayoutRenderer.ts
794
+ var import_vue28 = require("@jsonforms/vue");
795
+ var import_vue29 = require("vue");
796
+ var NuxtUiVerticalLayoutRenderer = (0, import_vue29.defineComponent)({
797
+ name: "NuxtUiVerticalLayoutRenderer",
798
+ components: { DispatchRenderer: import_vue28.DispatchRenderer },
799
+ props: (0, import_vue28.rendererProps)(),
800
+ setup(props) {
801
+ const { layout } = (0, import_vue28.useJsonFormsLayout)(
802
+ props
803
+ );
804
+ return () => {
805
+ if (!layout.value.visible) return null;
806
+ const elements = layout.value.uischema.elements ?? [];
807
+ return (0, import_vue29.h)(
808
+ "div",
809
+ { class: "flex flex-col gap-3" },
810
+ elements.map(
811
+ (element, index) => (0, import_vue29.h)(
812
+ "div",
813
+ { key: `${layout.value.path}-${index}` },
814
+ (0, import_vue29.h)(import_vue28.DispatchRenderer, {
815
+ schema: layout.value.schema,
816
+ uischema: element,
817
+ path: layout.value.path,
818
+ enabled: layout.value.enabled,
819
+ renderers: layout.value.renderers,
820
+ cells: layout.value.cells
821
+ })
822
+ )
823
+ )
824
+ );
825
+ };
826
+ }
827
+ });
828
+
829
+ // src/nuxtUiRenderers.ts
830
+ var RANK = 10;
831
+ var nuxtUiRenderers = [
832
+ // Layouts
833
+ {
834
+ tester: (0, import_core3.rankWith)(RANK, (0, import_core3.uiTypeIs)("VerticalLayout")),
835
+ renderer: (0, import_vue30.markRaw)(NuxtUiVerticalLayoutRenderer)
836
+ },
837
+ {
838
+ tester: (0, import_core3.rankWith)(RANK, (0, import_core3.uiTypeIs)("HorizontalLayout")),
839
+ renderer: (0, import_vue30.markRaw)(NuxtUiHorizontalLayoutRenderer)
840
+ },
841
+ {
842
+ tester: (0, import_core3.rankWith)(RANK, (0, import_core3.uiTypeIs)("Group")),
843
+ renderer: (0, import_vue30.markRaw)(NuxtUiGroupRenderer)
844
+ },
845
+ {
846
+ tester: (0, import_core3.rankWith)(RANK, (0, import_core3.uiTypeIs)("Categorization")),
847
+ renderer: (0, import_vue30.markRaw)(NuxtUiCategorizationRenderer)
848
+ },
849
+ {
850
+ tester: (0, import_core3.rankWith)(RANK, (0, import_core3.uiTypeIs)("Category")),
851
+ renderer: (0, import_vue30.markRaw)(NuxtUiCategoryRenderer)
852
+ },
853
+ {
854
+ tester: (0, import_core3.rankWith)(RANK, (0, import_core3.uiTypeIs)("Label")),
855
+ renderer: (0, import_vue30.markRaw)(NuxtUiLabelRenderer)
856
+ },
857
+ // Complex schemas
858
+ {
859
+ tester: (0, import_core3.rankWith)(RANK, (0, import_core3.schemaTypeIs)("array")),
860
+ renderer: (0, import_vue30.markRaw)(NuxtUiArrayListRenderer)
861
+ },
862
+ {
863
+ tester: (0, import_core3.rankWith)(RANK, import_core3.isObjectControl),
864
+ renderer: (0, import_vue30.markRaw)(NuxtUiObjectRenderer)
865
+ },
866
+ // Primitive controls
867
+ {
868
+ tester: (0, import_core3.rankWith)(RANK, import_core3.isMultiLineControl),
869
+ renderer: (0, import_vue30.markRaw)(NuxtUiTextareaControl)
870
+ },
871
+ {
872
+ tester: (0, import_core3.rankWith)(RANK, import_core3.isStringControl),
873
+ renderer: (0, import_vue30.markRaw)(NuxtUiStringControl)
874
+ },
875
+ {
876
+ tester: (0, import_core3.rankWith)(RANK, import_core3.isNumberControl),
877
+ renderer: (0, import_vue30.markRaw)(NuxtUiNumberControl)
878
+ },
879
+ {
880
+ tester: (0, import_core3.rankWith)(RANK, import_core3.isIntegerControl),
881
+ renderer: (0, import_vue30.markRaw)(NuxtUiIntegerControl)
882
+ },
883
+ {
884
+ tester: (0, import_core3.rankWith)(RANK, import_core3.isBooleanControl),
885
+ renderer: (0, import_vue30.markRaw)(NuxtUiBooleanControl)
886
+ },
887
+ {
888
+ tester: (0, import_core3.rankWith)(RANK, import_core3.isEnumControl),
889
+ renderer: (0, import_vue30.markRaw)(NuxtUiEnumControl)
890
+ }
891
+ ];
892
+ // Annotate the CommonJS export names for ESM import in node:
893
+ 0 && (module.exports = {
894
+ nuxtUiRenderers
895
+ });
896
+ //# sourceMappingURL=index.cjs.map