@ghentcdh/json-forms-vue 0.6.6 → 0.6.8

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/index.js CHANGED
@@ -3,13 +3,13 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const toolsVue = require("@ghentcdh/tools-vue");
4
4
  const ui = require("@ghentcdh/ui");
5
5
  const core = require("@jsonforms/core");
6
- const vue$1 = require("@jsonforms/vue");
7
6
  const vue = require("vue");
7
+ const vue$1 = require("@jsonforms/vue");
8
8
  const vueVanilla = require("@jsonforms/vue-vanilla");
9
+ const lodashEs = require("lodash-es");
9
10
  const testers = require("@jsonforms/core/src/testers/testers");
10
11
  const jsonFormsCore = require("@ghentcdh/json-forms-core");
11
12
  const vueRouter = require("vue-router");
12
- const lodashEs = require("lodash-es");
13
13
  const core$1 = require("@vueuse/core");
14
14
  class FormStore {
15
15
  constructor(schema) {
@@ -48,158 +48,169 @@ const useVanillaControlCustom = (input, adaptTarget = (v) => v.value) => {
48
48
  isTouched.value = true;
49
49
  isFocused.value = false;
50
50
  };
51
- const controlWrapper2 = vue.computed(() => {
51
+ const controlWrapper = vue.computed(() => {
52
52
  return {
53
53
  ...vanillaControl.controlWrapper.value,
54
+ ...lodashEs.omit(vanillaControl.appliedOptions.value, "styles"),
54
55
  isFocused: isFocused.value,
55
56
  isTouched: isTouched.value
56
57
  };
57
58
  });
58
59
  return {
59
60
  ...vanillaControl,
60
- controlWrapper: controlWrapper2,
61
+ controlWrapper,
61
62
  isFocused,
62
63
  isTouched,
63
64
  onFocus,
64
65
  onBlur
66
+ // handleChange,
65
67
  };
66
68
  };
67
- const controlRenderer$8 = vue.defineComponent({
68
- name: "BooleanControlRenderer",
69
- components: {
70
- ControlWrapper: ui.ControlWrapper
71
- },
72
- props: {
73
- ...vue$1.rendererProps()
74
- },
75
- setup(props) {
76
- const control = useVanillaControlCustom(
69
+ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
70
+ __name: "BooleanControlRenderer",
71
+ props: { ...vue$1.rendererProps() },
72
+ setup(__props) {
73
+ const props = __props;
74
+ const { control, onChange, appliedOptions, onFocus, onBlur, controlWrapper } = useVanillaControlCustom(vue$1.useJsonFormsControl(props), (target) => {
75
+ return Boolean(target.value) ?? false;
76
+ });
77
+ return (_ctx, _cache) => {
78
+ return vue.openBlock(), vue.createBlock(vue.unref(ui.Checkbox), vue.mergeProps(vue.unref(controlWrapper), {
79
+ modelValue: vue.unref(control).data,
80
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.unref(control).data = $event),
81
+ enabled: vue.unref(control).enabled,
82
+ config: vue.unref(appliedOptions),
83
+ onChange: vue.unref(onChange),
84
+ onFocus: vue.unref(onFocus),
85
+ onBlur: vue.unref(onBlur)
86
+ }), null, 16, ["modelValue", "enabled", "config", "onChange", "onFocus", "onBlur"]);
87
+ };
88
+ }
89
+ });
90
+ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
91
+ __name: "IntegerControlRenderer",
92
+ props: { ...vue$1.rendererProps() },
93
+ setup(__props) {
94
+ const props = __props;
95
+ const { control, onChange, appliedOptions, onFocus, onBlur, controlWrapper } = useVanillaControlCustom(
77
96
  vue$1.useJsonFormsControl(props),
78
- (target) => {
79
- return Boolean(target.value) ?? false;
80
- }
97
+ (target) => target.value === "" ? void 0 : Number(target.value)
81
98
  );
82
- if (control.control.value.data === void 0) {
83
- control.handleChange(control.control.value.path, false);
84
- }
85
- return control;
86
- },
87
- computed: {
88
- controlWrapper() {
89
- return controlWrapper;
90
- }
99
+ const steps = vue.computed(() => appliedOptions.value.steps ?? 1);
100
+ return (_ctx, _cache) => {
101
+ return vue.openBlock(), vue.createBlock(vue.unref(ui.InputNumber), vue.mergeProps(vue.unref(controlWrapper), {
102
+ modelValue: vue.unref(control).data,
103
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.unref(control).data = $event),
104
+ enabled: vue.unref(control).enabled,
105
+ config: vue.unref(appliedOptions),
106
+ steps: steps.value,
107
+ onChange: vue.unref(onChange),
108
+ onFocus: vue.unref(onFocus),
109
+ onBlur: vue.unref(onBlur)
110
+ }), null, 16, ["modelValue", "enabled", "config", "steps", "onChange", "onFocus", "onBlur"]);
111
+ };
91
112
  }
92
113
  });
93
- const entry$8 = {
94
- renderer: controlRenderer$8,
95
- tester: core.rankWith(1, core.isBooleanControl)
96
- };
97
- const _export_sfc = (sfc, props) => {
98
- const target = sfc.__vccOpts || sfc;
99
- for (const [key, val] of props) {
100
- target[key] = val;
114
+ const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
115
+ __name: "MarkdownControlRenderer",
116
+ props: { ...vue$1.rendererProps() },
117
+ setup(__props) {
118
+ const props = __props;
119
+ const {
120
+ control,
121
+ handleChange,
122
+ appliedOptions,
123
+ onFocus,
124
+ onBlur,
125
+ controlWrapper
126
+ } = useVanillaControlCustom(vue$1.useJsonFormsControl(props));
127
+ const changeValue = (value) => {
128
+ handleChange(control.value.path, value);
129
+ };
130
+ return (_ctx, _cache) => {
131
+ return vue.openBlock(), vue.createBlock(vue.unref(ui.Markdown), vue.mergeProps(vue.unref(controlWrapper), {
132
+ modelValue: vue.unref(control).data,
133
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.unref(control).data = $event),
134
+ enabled: vue.unref(control).enabled,
135
+ config: vue.unref(appliedOptions),
136
+ onChange: changeValue,
137
+ onFocus: vue.unref(onFocus),
138
+ onBlur: vue.unref(onBlur)
139
+ }), null, 16, ["modelValue", "enabled", "config", "onFocus", "onBlur"]);
140
+ };
101
141
  }
102
- return target;
103
- };
104
- const _hoisted_1$a = { class: "flex justify-around flex-col h-full" };
105
- const _hoisted_2$3 = { class: "fieldset-label" };
106
- const _hoisted_3$3 = ["id", "checked", "disabled", "autofocus", "placeholder"];
107
- const _hoisted_4$2 = { class: "font-bold text-gray-500 text-sm" };
108
- function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
109
- const _component_control_wrapper = vue.resolveComponent("control-wrapper");
110
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$a, [
111
- vue.createVNode(_component_control_wrapper, vue.mergeProps(_ctx.controlWrapper, {
112
- styles: _ctx.styles,
113
- "hide-label": true
114
- }), {
115
- default: vue.withCtx(() => [
116
- vue.createElementVNode("label", _hoisted_2$3, [
117
- vue.createElementVNode("input", {
118
- id: _ctx.control.id + "-input",
119
- type: "checkbox",
120
- class: vue.normalizeClass(["checkbox"]),
121
- checked: _ctx.control.data,
122
- disabled: !_ctx.control.enabled,
123
- autofocus: _ctx.appliedOptions.focus,
124
- placeholder: _ctx.appliedOptions.placeholder,
125
- onChange: _cache[0] || (_cache[0] = (...args) => _ctx.onChange && _ctx.onChange(...args)),
126
- onFocus: _cache[1] || (_cache[1] = (...args) => _ctx.onFocus && _ctx.onFocus(...args)),
127
- onBlur: _cache[2] || (_cache[2] = (...args) => _ctx.onBlur && _ctx.onBlur(...args))
128
- }, null, 40, _hoisted_3$3),
129
- vue.createElementVNode("span", _hoisted_4$2, vue.toDisplayString(_ctx.control.label), 1)
130
- ])
131
- ]),
132
- _: 1
133
- }, 16, ["styles"])
134
- ]);
135
- }
136
- const BooleanControlRenderer = /* @__PURE__ */ _export_sfc(controlRenderer$8, [["render", _sfc_render$7]]);
137
- const showErrors = (isTouched, isFocused, errors) => {
138
- return !!(isTouched && errors);
139
- };
140
- const inputClasses = (styles, isFocused, isTouched, errors) => {
141
- return [
142
- styles?.control.input,
143
- { "input-error": showErrors(isTouched, isFocused, errors) }
144
- ];
145
- };
146
- const controlRenderer$7 = vue.defineComponent({
147
- name: "IntegerControlRenderer",
148
- components: {
149
- ControlWrapper: ui.ControlWrapper
150
- },
151
- props: {
152
- ...vue$1.rendererProps()
153
- },
154
- setup(props) {
155
- return useVanillaControlCustom(
142
+ });
143
+ const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
144
+ __name: "NumberControlRenderer",
145
+ props: { ...vue$1.rendererProps() },
146
+ setup(__props) {
147
+ const props = __props;
148
+ const { control, onChange, appliedOptions, onFocus, onBlur, controlWrapper } = useVanillaControlCustom(
156
149
  vue$1.useJsonFormsControl(props),
157
150
  (target) => target.value === "" ? void 0 : Number(target.value)
158
151
  );
159
- },
160
- computed: {
161
- step() {
162
- const options = this.appliedOptions;
163
- return options.step ?? 1;
164
- },
165
- inputClass() {
166
- return inputClasses(
167
- this.styles,
168
- this.isFocused,
169
- this.isTouched,
170
- this.controlWrapper?.errors
171
- );
172
- }
152
+ const steps = vue.computed(() => appliedOptions.value.steps ?? 0.01);
153
+ return (_ctx, _cache) => {
154
+ return vue.openBlock(), vue.createBlock(vue.unref(ui.InputNumber), vue.mergeProps(vue.unref(controlWrapper), {
155
+ modelValue: vue.unref(control).data,
156
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.unref(control).data = $event),
157
+ enabled: vue.unref(control).enabled,
158
+ config: vue.unref(appliedOptions),
159
+ steps: steps.value,
160
+ onChange: vue.unref(onChange),
161
+ onFocus: vue.unref(onFocus),
162
+ onBlur: vue.unref(onBlur)
163
+ }), null, 16, ["modelValue", "enabled", "config", "steps", "onChange", "onFocus", "onBlur"]);
164
+ };
165
+ }
166
+ });
167
+ const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
168
+ __name: "StringControlRenderer",
169
+ props: { ...vue$1.rendererProps() },
170
+ setup(__props) {
171
+ const props = __props;
172
+ const {
173
+ control,
174
+ onChange,
175
+ appliedOptions,
176
+ onFocus,
177
+ onBlur,
178
+ controlWrapper,
179
+ styles
180
+ } = useVanillaControlCustom(vue$1.useJsonFormsControl(props));
181
+ return (_ctx, _cache) => {
182
+ return vue.openBlock(), vue.createBlock(vue.unref(ui.Input), vue.mergeProps(vue.unref(controlWrapper), {
183
+ modelValue: vue.unref(control).data,
184
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.unref(control).data = $event),
185
+ enabled: vue.unref(control).enabled,
186
+ config: vue.unref(appliedOptions),
187
+ styles: vue.unref(styles),
188
+ onChange: vue.unref(onChange),
189
+ onFocus: vue.unref(onFocus),
190
+ onBlur: vue.unref(onBlur)
191
+ }), null, 16, ["modelValue", "enabled", "config", "styles", "onChange", "onFocus", "onBlur"]);
192
+ };
193
+ }
194
+ });
195
+ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
196
+ __name: "TextAreaControlRenderer",
197
+ props: { ...vue$1.rendererProps() },
198
+ setup(__props) {
199
+ const props = __props;
200
+ const { control, onChange, appliedOptions, onFocus, onBlur, controlWrapper } = useVanillaControlCustom(vue$1.useJsonFormsControl(props));
201
+ return (_ctx, _cache) => {
202
+ return vue.openBlock(), vue.createBlock(vue.unref(ui.Textarea), vue.mergeProps(vue.unref(controlWrapper), {
203
+ modelValue: vue.unref(control).data,
204
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.unref(control).data = $event),
205
+ enabled: vue.unref(control).enabled,
206
+ config: vue.unref(appliedOptions),
207
+ onChange: vue.unref(onChange),
208
+ onFocus: vue.unref(onFocus),
209
+ onBlur: vue.unref(onBlur)
210
+ }), null, 16, ["modelValue", "enabled", "config", "onChange", "onFocus", "onBlur"]);
211
+ };
173
212
  }
174
213
  });
175
- const entry$7 = {
176
- renderer: controlRenderer$7,
177
- tester: core.rankWith(1, core.isIntegerControl)
178
- };
179
- const _hoisted_1$9 = ["id", "step", "value", "disabled", "autofocus", "placeholder"];
180
- function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
181
- const _component_control_wrapper = vue.resolveComponent("control-wrapper");
182
- return vue.openBlock(), vue.createBlock(_component_control_wrapper, vue.mergeProps(_ctx.controlWrapper, { styles: _ctx.styles }), {
183
- default: vue.withCtx(() => [
184
- vue.createElementVNode("input", {
185
- id: _ctx.control.id + "-input",
186
- autocomplete: "off",
187
- type: "number",
188
- step: _ctx.step,
189
- class: vue.normalizeClass(_ctx.inputClass),
190
- value: _ctx.control.data,
191
- disabled: !_ctx.control.enabled,
192
- autofocus: _ctx.appliedOptions.focus,
193
- placeholder: _ctx.appliedOptions.placeholder,
194
- onChange: _cache[0] || (_cache[0] = (...args) => _ctx.onChange && _ctx.onChange(...args)),
195
- onFocus: _cache[1] || (_cache[1] = (...args) => _ctx.onFocus && _ctx.onFocus(...args)),
196
- onBlur: _cache[2] || (_cache[2] = (...args) => _ctx.onBlur && _ctx.onBlur(...args))
197
- }, null, 42, _hoisted_1$9)
198
- ]),
199
- _: 1
200
- }, 16, ["styles"]);
201
- }
202
- const IntegerControlRenderer = /* @__PURE__ */ _export_sfc(controlRenderer$7, [["render", _sfc_render$6]]);
203
214
  const isAutoCompleteControl = testers.and(
204
215
  // uiTypeIs('Control'),
205
216
  testers.optionIs("format", jsonFormsCore.ControlType.autocomplete)
@@ -216,10 +227,6 @@ const isMarkdownControl = testers.and(
216
227
  core.uiTypeIs("Control"),
217
228
  testers.optionIs("format", jsonFormsCore.ControlType.markdown)
218
229
  );
219
- const isFixedArray = testers.and(
220
- testers.schemaTypeIs("array"),
221
- testers.optionIs("format", jsonFormsCore.ControlType.fixedArray)
222
- );
223
230
  const isArrayRenderer = testers.and(
224
231
  testers.schemaTypeIs("array")
225
232
  // optionIs('format', ControlType.array),
@@ -230,228 +237,61 @@ const isCustomControl = (customType) => {
230
237
  testers.optionIs("type", customType)
231
238
  );
232
239
  };
233
- const controlRenderer$6 = vue.defineComponent({
234
- name: "MarkdownControlRenderer",
235
- components: {
236
- Markdown: ui.Markdown
237
- },
238
- props: {
239
- ...vue$1.rendererProps()
240
- },
241
- setup(props) {
242
- const control = useVanillaControlCustom(
243
- vue$1.useJsonFormsControl(props),
244
- (target) => target.value ?? void 0
245
- );
246
- const field = control.appliedOptions.value.field;
240
+ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
241
+ __name: "AutocompleteControlRenderer",
242
+ props: { ...vue$1.rendererProps() },
243
+ setup(__props) {
244
+ const props = __props;
245
+ const {
246
+ control,
247
+ handleChange: _handleChange,
248
+ appliedOptions,
249
+ onFocus,
250
+ onBlur,
251
+ controlWrapper
252
+ } = useVanillaControlCustom(vue$1.useJsonFormsControl(props));
253
+ const field = vue.computed(() => appliedOptions.value.field);
247
254
  const handleChange = (result) => {
248
- const { path } = control.control.value;
249
- control.handleChange(path, result);
255
+ const { path } = control.value;
256
+ _handleChange(path, result);
250
257
  };
251
- return { ...control, field, handleChange };
252
- }
253
- });
254
- const entry$6 = {
255
- renderer: controlRenderer$6,
256
- tester: core.rankWith(1, isMarkdownControl)
257
- };
258
- function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
259
- const _component_Markdown = vue.resolveComponent("Markdown");
260
- return vue.openBlock(), vue.createBlock(_component_Markdown, vue.mergeProps(_ctx.controlWrapper, {
261
- modelValue: _ctx.control.data,
262
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.control.data = $event),
263
- enabled: _ctx.control.enabled,
264
- config: _ctx.appliedOptions,
265
- onChange: _ctx.handleChange,
266
- onFocus: _ctx.onFocus,
267
- onBlur: _ctx.onBlur
268
- }), null, 16, ["modelValue", "enabled", "config", "onChange", "onFocus", "onBlur"]);
269
- }
270
- const MarkdownControlRenderer = /* @__PURE__ */ _export_sfc(controlRenderer$6, [["render", _sfc_render$5]]);
271
- const controlRenderer$5 = vue.defineComponent({
272
- name: "NumberControlRenderer",
273
- components: {
274
- ControlWrapper: ui.ControlWrapper
275
- },
276
- props: {
277
- ...vue$1.rendererProps()
278
- },
279
- setup(props) {
280
- return useVanillaControlCustom(
281
- vue$1.useJsonFormsControl(props),
282
- (target) => target.value === "" ? void 0 : Number(target.value)
283
- );
284
- },
285
- computed: {
286
- step() {
287
- const options = this.appliedOptions;
288
- return options.step ?? 0.1;
289
- },
290
- inputClass() {
291
- return inputClasses(
292
- this.styles,
293
- this.isFocused,
294
- this.isTouched,
295
- this.controlWrapper?.errors
296
- );
297
- }
298
- }
299
- });
300
- const entry$5 = {
301
- renderer: controlRenderer$5,
302
- tester: core.rankWith(1, core.isNumberControl)
303
- };
304
- const _hoisted_1$8 = ["id", "step", "value", "disabled", "autofocus", "placeholder"];
305
- function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
306
- const _component_control_wrapper = vue.resolveComponent("control-wrapper");
307
- return vue.openBlock(), vue.createBlock(_component_control_wrapper, vue.mergeProps(_ctx.controlWrapper, { styles: _ctx.styles }), {
308
- default: vue.withCtx(() => [
309
- vue.createElementVNode("input", {
310
- id: _ctx.control.id + "-input",
311
- autocomplete: "off",
312
- type: "number",
313
- step: _ctx.step,
314
- class: vue.normalizeClass(_ctx.inputClass),
315
- value: _ctx.control.data,
316
- disabled: !_ctx.control.enabled,
317
- autofocus: _ctx.appliedOptions.focus,
318
- placeholder: _ctx.appliedOptions.placeholder,
319
- onChange: _cache[0] || (_cache[0] = (...args) => _ctx.onChange && _ctx.onChange(...args)),
320
- onFocus: _cache[1] || (_cache[1] = (...args) => _ctx.onFocus && _ctx.onFocus(...args)),
321
- onBlur: _cache[2] || (_cache[2] = (...args) => _ctx.onBlur && _ctx.onBlur(...args))
322
- }, null, 42, _hoisted_1$8)
323
- ]),
324
- _: 1
325
- }, 16, ["styles"]);
326
- }
327
- const NumberControlRenderer = /* @__PURE__ */ _export_sfc(controlRenderer$5, [["render", _sfc_render$4]]);
328
- const controlRenderer$4 = vue.defineComponent({
329
- name: "StringControlRenderer",
330
- components: {
331
- ControlWrapper: ui.ControlWrapper
332
- },
333
- props: {
334
- ...vue$1.rendererProps()
335
- },
336
- setup(props) {
337
- return useVanillaControlCustom(
338
- vue$1.useJsonFormsControl(props),
339
- (target) => target.value ?? void 0
340
- );
341
- },
342
- computed: {
343
- inputClass() {
344
- return inputClasses(
345
- this.styles,
346
- this.isFocused,
347
- this.isTouched,
348
- this.controlWrapper?.errors
349
- );
350
- }
351
- }
352
- });
353
- const entry$4 = {
354
- renderer: controlRenderer$4,
355
- tester: core.rankWith(1, isStringFormat)
356
- };
357
- const _hoisted_1$7 = ["id", "value", "disabled", "autofocus", "placeholder"];
358
- function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
359
- const _component_ControlWrapper = vue.resolveComponent("ControlWrapper");
360
- return vue.openBlock(), vue.createBlock(_component_ControlWrapper, vue.mergeProps(_ctx.controlWrapper, { styles: _ctx.styles }), {
361
- default: vue.withCtx(() => [
362
- vue.createElementVNode("input", {
363
- id: _ctx.control.id + "-input",
364
- type: "text",
365
- class: vue.normalizeClass(_ctx.inputClass),
366
- value: _ctx.control.data,
367
- disabled: !_ctx.control.enabled,
368
- autofocus: _ctx.appliedOptions.focus,
369
- placeholder: _ctx.appliedOptions.placeholder,
370
- autocomplete: "off",
371
- onChange: _cache[0] || (_cache[0] = (...args) => _ctx.onChange && _ctx.onChange(...args)),
372
- onFocus: _cache[1] || (_cache[1] = (...args) => _ctx.onFocus && _ctx.onFocus(...args)),
373
- onBlur: _cache[2] || (_cache[2] = (...args) => _ctx.onBlur && _ctx.onBlur(...args))
374
- }, null, 42, _hoisted_1$7)
375
- ]),
376
- _: 1
377
- }, 16, ["styles"]);
378
- }
379
- const StringControlRenderer = /* @__PURE__ */ _export_sfc(controlRenderer$4, [["render", _sfc_render$3]]);
380
- const controlRenderer$3 = vue.defineComponent({
381
- name: "TextAreaControlRenderer",
382
- components: {
383
- ControlWrapper: ui.ControlWrapper
384
- },
385
- props: {
386
- ...vue$1.rendererProps()
387
- },
388
- setup(props) {
389
- return useVanillaControlCustom(
390
- vue$1.useJsonFormsControl(props),
391
- (target) => target.value ?? void 0
392
- );
393
- }
394
- });
395
- const entry$3 = {
396
- renderer: controlRenderer$3,
397
- tester: core.rankWith(1, isTextAreaControl)
398
- };
399
- const controlRenderer$2 = vue.defineComponent({
400
- name: "AutocompleteControlRenderer",
401
- components: {
402
- Autocomplete: ui.Autocomplete
403
- },
404
- props: {
405
- ...vue$1.rendererProps()
406
- },
407
- setup(props) {
408
- const control = useVanillaControlCustom(
409
- vue$1.useJsonFormsControl(props),
410
- (target) => target.value ?? void 0
411
- );
412
- const field = control.appliedOptions.value.field;
413
- const handleChange = (result) => {
414
- const { path } = control.control.value;
415
- control.handleChange(path, result);
258
+ return (_ctx, _cache) => {
259
+ return vue.openBlock(), vue.createBlock(vue.unref(ui.Autocomplete), vue.mergeProps(vue.unref(controlWrapper), {
260
+ modelValue: vue.unref(control).data,
261
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.unref(control).data = $event),
262
+ enabled: vue.unref(control).enabled,
263
+ config: vue.unref(appliedOptions),
264
+ "label-key": field.value?.label,
265
+ "value-key": field.value?.id,
266
+ onChange: handleChange,
267
+ onFocus: vue.unref(onFocus),
268
+ onBlur: vue.unref(onBlur)
269
+ }), null, 16, ["modelValue", "enabled", "config", "label-key", "value-key", "onFocus", "onBlur"]);
416
270
  };
417
- return { ...control, field, handleChange };
418
271
  }
419
272
  });
420
- const entry$2 = {
421
- renderer: controlRenderer$2,
422
- tester: core.rankWith(1, isAutoCompleteControl)
423
- };
424
- function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
425
- const _component_Autocomplete = vue.resolveComponent("Autocomplete");
426
- return vue.openBlock(), vue.createBlock(_component_Autocomplete, vue.mergeProps(_ctx.controlWrapper, {
427
- modelValue: _ctx.control.data,
428
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.control.data = $event),
429
- enabled: _ctx.control.enabled,
430
- config: _ctx.appliedOptions,
431
- "label-key": _ctx.field?.label,
432
- "value-key": _ctx.field?.id,
433
- onChange: _ctx.handleChange,
434
- onFocus: _ctx.onFocus,
435
- onBlur: _ctx.onBlur
436
- }), null, 16, ["modelValue", "enabled", "config", "label-key", "value-key", "onChange", "onFocus", "onBlur"]);
437
- }
438
- const AutocompleteControlRenderer = /* @__PURE__ */ _export_sfc(controlRenderer$2, [["render", _sfc_render$2]]);
439
273
  const controlRenderers = [
440
274
  // First custom renderers on format
441
- entry$6,
442
- entry$2,
443
- entry$3,
444
- // multiStringControlRendererEntry,
445
- // enumControlRendererEntry,
446
- // oneOfEnumControlRendererEntry,
447
- // dateControlRendererEntry,
448
- // dateTimeControlRendererEntry,
449
- // timeControlRendererEntry,
450
- entry$8,
275
+ {
276
+ tester: core.rankWith(10, isMarkdownControl),
277
+ renderer: _sfc_main$e
278
+ },
279
+ {
280
+ tester: core.rankWith(10, isAutoCompleteControl),
281
+ renderer: _sfc_main$a
282
+ },
283
+ {
284
+ tester: core.rankWith(10, isTextAreaControl),
285
+ renderer: _sfc_main$b
286
+ },
451
287
  // Renderers based on type if no format is provided
452
- entry$4,
453
- entry$5,
454
- entry$7
288
+ { tester: core.rankWith(10, isStringFormat), renderer: _sfc_main$c },
289
+ { tester: core.rankWith(10, core.isNumberControl), renderer: _sfc_main$d },
290
+ {
291
+ tester: core.rankWith(10, core.isIntegerControl),
292
+ renderer: _sfc_main$f
293
+ },
294
+ { tester: core.rankWith(10, core.isBooleanControl), renderer: _sfc_main$g }
455
295
  ];
456
296
  const actionMap = {
457
297
  edit: (router, action) => ({
@@ -486,255 +326,233 @@ class FormState {
486
326
  const useFormState = (form) => {
487
327
  return FormState.getInstance();
488
328
  };
489
- const controlRenderer$1 = vue.defineComponent({
490
- name: "ArrayListRenderer",
491
- components: {
492
- DispatchRenderer: vue$1.DispatchRenderer,
493
- Btn: ui.Btn
494
- },
495
- props: {
496
- ...vue$1.rendererProps()
497
- },
498
- setup(props) {
329
+ const _hoisted_1$8 = ["title"];
330
+ const _hoisted_2$2 = { key: 0 };
331
+ const _hoisted_3$1 = {
332
+ key: 1,
333
+ class: "list-row"
334
+ };
335
+ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
336
+ __name: "ArrayRenderer",
337
+ props: { ...vue$1.rendererProps() },
338
+ setup(__props) {
339
+ const props = __props;
499
340
  const vanillaArrayControl = vueVanilla.useVanillaArrayControl(
500
341
  vue$1.useJsonFormsArrayControl(props)
501
342
  );
502
- const control = vanillaArrayControl.control.value;
503
- if (!control.data || control.data.length < 1) {
343
+ const { styles, childUiSchema, control, appliedOptions } = vanillaArrayControl;
344
+ if (!control.value.data || control.value.data.length < 1) {
504
345
  vanillaArrayControl.addItem(
505
- control.path,
506
- core.createDefaultValue(control.schema, control.rootSchema)
346
+ control.value.path,
347
+ core.createDefaultValue(control.value.schema, control.value.rootSchema)
507
348
  )();
508
349
  }
509
- return vanillaArrayControl;
510
- },
511
- computed: {
512
- IconEnum() {
513
- return ui.IconEnum;
514
- },
515
- noData() {
516
- return !this.control.data || this.control.data.length === 0;
517
- },
518
- actions() {
519
- const actions = this.uischema.options?.actions ?? [];
520
- return mapArrayActions(vueRouter.useRouter(), actions);
521
- },
522
- showDelete() {
523
- return this.control.data?.length > 1;
524
- },
525
- translations() {
526
- const jsonforms = vue.inject("jsonforms");
527
- return core.getArrayTranslations(
528
- jsonforms?.i18n?.translate ?? core.defaultJsonFormsI18nState.translate,
529
- core.arrayDefaultTranslations,
530
- this.control.i18nKeyPrefix,
531
- this.control.label
532
- );
533
- },
534
- labelKey() {
535
- const key = this.uischema?.options?.labelKey;
350
+ const noData = vue.computed(
351
+ () => !control.value.data || control.value.data.length === 0
352
+ );
353
+ const actions = vue.computed(() => {
354
+ const actions2 = props.uischema.options?.actions ?? [];
355
+ return mapArrayActions(vueRouter.useRouter(), actions2);
356
+ });
357
+ const showDelete = vue.computed(() => control.value.data?.length > 1);
358
+ vue.computed(() => {
359
+ const key = control.value.uischema?.options?.labelKey;
536
360
  if (!key) return null;
537
361
  return key;
538
- }
539
- },
540
- methods: {
541
- composePaths: core.composePaths,
542
- createDefaultValue: core.createDefaultValue,
543
- deleteButtonClick(index) {
544
- this.removeItems(this.control.path, [index])();
545
- },
546
- dispatchEvent: (event, data) => {
362
+ });
363
+ const deleteButtonClick = (index) => {
364
+ vanillaArrayControl.removeItems(control.value.path, [index])();
365
+ };
366
+ const dispatchEvent = (event, data) => {
547
367
  const form_id = "";
548
368
  useFormState().dispatchEvent(form_id, event, data);
549
- },
550
- addButtonClick() {
551
- this.addItem(
552
- this.control.path,
553
- core.createDefaultValue(this.control.schema, this.control.rootSchema)
369
+ };
370
+ const addButtonClick = () => {
371
+ vanillaArrayControl.addItem(
372
+ control.value.path,
373
+ core.createDefaultValue(control.value.schema, control.value.rootSchema)
554
374
  )();
555
- }
375
+ };
376
+ const showActions = vue.computed(() => {
377
+ return !appliedOptions.value.hideActions;
378
+ });
379
+ return (_ctx, _cache) => {
380
+ return vue.openBlock(), vue.createElementBlock("div", {
381
+ title: vue.unref(control).label
382
+ }, [
383
+ vue.createElementVNode("div", {
384
+ class: vue.normalizeClass([
385
+ "flex gap-2",
386
+ vue.unref(appliedOptions)?.layout === "row" ? "flex-row items-center" : "flex-col"
387
+ ])
388
+ }, [
389
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(control).data, (element, index) => {
390
+ return vue.openBlock(), vue.createElementBlock("div", {
391
+ key: `${vue.unref(control).path}-${index}`,
392
+ class: "flex-1"
393
+ }, [
394
+ vue.createElementVNode("div", {
395
+ class: vue.normalizeClass([
396
+ "flex gap-2",
397
+ vue.unref(appliedOptions)?.layout === "row" ? "flex-col" : "flex-row items-center"
398
+ ])
399
+ }, [
400
+ vue.createElementVNode("div", null, [
401
+ vue.createVNode(vue.unref(vue$1.DispatchRenderer), {
402
+ schema: vue.unref(control).schema,
403
+ uischema: vue.unref(childUiSchema),
404
+ path: vue.unref(core.composePaths)(vue.unref(control).path, `${index}`),
405
+ enabled: vue.unref(control).enabled,
406
+ renderers: vue.unref(control).renderers,
407
+ cells: vue.unref(control).cells
408
+ }, null, 8, ["schema", "uischema", "path", "enabled", "renderers", "cells"])
409
+ ]),
410
+ showActions.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$2, [
411
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(actions.value, (action) => {
412
+ return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
413
+ action.show(element) ? (vue.openBlock(), vue.createBlock(vue.unref(ui.Btn), {
414
+ key: action.label,
415
+ icon: action.icon,
416
+ outline: true,
417
+ onClick: ($event) => dispatchEvent(action.label, element)
418
+ }, null, 8, ["icon", "onClick"])) : vue.createCommentVNode("", true)
419
+ ], 64);
420
+ }), 256)),
421
+ showDelete.value ? (vue.openBlock(), vue.createBlock(vue.unref(ui.Btn), {
422
+ key: 0,
423
+ icon: vue.unref(ui.IconEnum).Delete,
424
+ outline: true,
425
+ onClick: ($event) => deleteButtonClick(index)
426
+ }, null, 8, ["icon", "onClick"])) : vue.createCommentVNode("", true)
427
+ ])) : vue.createCommentVNode("", true)
428
+ ], 2)
429
+ ]);
430
+ }), 128)),
431
+ noData.value ? (vue.openBlock(), vue.createElementBlock("div", {
432
+ key: 0,
433
+ class: vue.normalizeClass(["list-row", vue.unref(styles).arrayList.noData])
434
+ }, " No data ", 2)) : vue.createCommentVNode("", true),
435
+ showActions.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$1, [
436
+ vue.createVNode(vue.unref(ui.Btn), {
437
+ icon: vue.unref(ui.IconEnum).Plus,
438
+ outline: true,
439
+ onClick: addButtonClick
440
+ }, {
441
+ default: vue.withCtx(() => [..._cache[0] || (_cache[0] = [
442
+ vue.createTextVNode(" Add ", -1)
443
+ ])]),
444
+ _: 1
445
+ }, 8, ["icon"])
446
+ ])) : vue.createCommentVNode("", true)
447
+ ], 2)
448
+ ], 8, _hoisted_1$8);
449
+ };
556
450
  }
557
451
  });
558
- const entry$1 = {
559
- renderer: controlRenderer$1,
560
- tester: core.rankWith(2, isArrayRenderer)
561
- };
562
- const _hoisted_1$6 = { class: "fieldset" };
563
- const _hoisted_2$2 = { class: "flex gap-2 items-center" };
564
- const _hoisted_3$2 = { class: "mt-3 flex gap-2" };
565
- const _hoisted_4$1 = { class: "py-2" };
566
- function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
567
- const _component_dispatch_renderer = vue.resolveComponent("dispatch-renderer");
568
- const _component_Btn = vue.resolveComponent("Btn");
569
- return _ctx.control.visible ? (vue.openBlock(), vue.createElementBlock("fieldset", {
570
- key: 0,
571
- class: vue.normalizeClass(_ctx.styles.arrayList.root)
572
- }, [
573
- !_ctx.labelKey ? (vue.openBlock(), vue.createElementBlock("legend", {
574
- key: 0,
575
- class: vue.normalizeClass(_ctx.styles.arrayList.legend)
576
- }, [
577
- vue.createElementVNode("label", {
578
- class: vue.normalizeClass(_ctx.styles.arrayList.label)
579
- }, vue.toDisplayString(_ctx.control.label), 3)
580
- ], 2)) : vue.createCommentVNode("", true),
581
- vue.createElementVNode("div", null, [
582
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.control.data, (element, index) => {
583
- return vue.openBlock(), vue.createElementBlock("div", {
584
- key: `${_ctx.control.path}-${index}`
585
- }, [
586
- vue.createElementVNode("fieldset", _hoisted_1$6, [
587
- _ctx.labelKey ? (vue.openBlock(), vue.createElementBlock("legend", {
588
- key: 0,
589
- class: vue.normalizeClass(_ctx.styles.arrayList.legend)
590
- }, vue.toDisplayString(element[_ctx.labelKey]?.toLowerCase()), 3)) : vue.createCommentVNode("", true),
591
- vue.createElementVNode("div", _hoisted_2$2, [
592
- vue.createVNode(_component_dispatch_renderer, {
593
- schema: _ctx.control.schema,
594
- uischema: _ctx.childUiSchema,
595
- path: _ctx.composePaths(_ctx.control.path, `${index}`),
596
- enabled: _ctx.control.enabled,
597
- renderers: _ctx.control.renderers,
598
- cells: _ctx.control.cells
599
- }, null, 8, ["schema", "uischema", "path", "enabled", "renderers", "cells"]),
600
- vue.createElementVNode("div", _hoisted_3$2, [
601
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.actions, (action) => {
602
- return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
603
- action.show(element) ? (vue.openBlock(), vue.createBlock(_component_Btn, {
604
- key: action.label,
605
- icon: action.icon,
606
- outline: true,
607
- onClick: ($event) => _ctx.dispatchEvent(action.label, element)
608
- }, null, 8, ["icon", "onClick"])) : vue.createCommentVNode("", true)
609
- ], 64);
610
- }), 256)),
611
- _ctx.showDelete ? (vue.openBlock(), vue.createBlock(_component_Btn, {
612
- key: 0,
613
- icon: _ctx.IconEnum.Delete,
614
- outline: true,
615
- onClick: ($event) => _ctx.deleteButtonClick(index)
616
- }, null, 8, ["icon", "onClick"])) : vue.createCommentVNode("", true)
617
- ])
618
- ])
452
+ const arrayRenderers = [
453
+ {
454
+ tester: core.rankWith(12, isArrayRenderer),
455
+ renderer: _sfc_main$9
456
+ }
457
+ ];
458
+ const _hoisted_1$7 = { class: "flex flex-col gap-4" };
459
+ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
460
+ __name: "CollapseLayout",
461
+ props: { ...vue$1.rendererProps() },
462
+ setup(__props) {
463
+ const props = __props;
464
+ const jsonLayout = vue$1.useJsonFormsLayout(props);
465
+ const { layout, renderers, cells } = jsonLayout;
466
+ const title = vue.computed(() => {
467
+ const { titleKey, title: title2 } = layout?.value.uischema?.options ?? {};
468
+ if (title2) return title2;
469
+ if (titleKey) return layout?.value.data[titleKey];
470
+ return layout?.value.uischema?.options?.titleKey;
471
+ });
472
+ return (_ctx, _cache) => {
473
+ return vue.openBlock(), vue.createBlock(vue.unref(ui.Collapse), { title: title.value }, {
474
+ default: vue.withCtx(() => [
475
+ vue.createElementVNode("div", _hoisted_1$7, [
476
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(layout).uischema.elements, (element, index) => {
477
+ return vue.openBlock(), vue.createBlock(vue.unref(vue$1.DispatchRenderer), {
478
+ key: index,
479
+ schema: vue.unref(layout).schema,
480
+ uischema: element,
481
+ path: vue.unref(layout).path,
482
+ renderers: vue.unref(renderers),
483
+ cells: vue.unref(cells)
484
+ }, null, 8, ["schema", "uischema", "path", "renderers", "cells"]);
485
+ }), 128))
619
486
  ])
620
- ]);
621
- }), 128))
622
- ]),
623
- vue.createElementVNode("div", _hoisted_4$1, [
624
- vue.createVNode(_component_Btn, {
625
- icon: _ctx.IconEnum.Plus,
626
- outline: true,
627
- onClick: _ctx.addButtonClick
628
- }, {
629
- default: vue.withCtx(() => [..._cache[0] || (_cache[0] = [
630
- vue.createTextVNode(" Add ", -1)
631
- ])]),
487
+ ]),
632
488
  _: 1
633
- }, 8, ["icon", "onClick"])
634
- ]),
635
- _ctx.noData ? (vue.openBlock(), vue.createElementBlock("div", {
636
- key: 1,
637
- class: vue.normalizeClass(_ctx.styles.arrayList.noData)
638
- }, vue.toDisplayString(_ctx.translations.noDataMessage), 3)) : vue.createCommentVNode("", true)
639
- ], 2)) : vue.createCommentVNode("", true);
640
- }
641
- const ArrayRenderer = /* @__PURE__ */ _export_sfc(controlRenderer$1, [["render", _sfc_render$1]]);
642
- const controlRenderer = vue.defineComponent({
643
- name: "FixedArrayListRenderer",
644
- components: {
645
- DispatchRenderer: vue$1.DispatchRenderer
646
- },
647
- props: {
648
- ...vue$1.rendererProps()
649
- },
650
- setup(props) {
651
- return vueVanilla.useVanillaArrayControl(vue$1.useJsonFormsArrayControl(props));
652
- },
653
- computed: {
654
- noData() {
655
- return !this.control.data || this.control.data.length === 0;
656
- },
657
- translations() {
658
- const jsonforms = vue.inject("jsonforms");
659
- return core.getArrayTranslations(
660
- jsonforms?.i18n?.translate ?? core.defaultJsonFormsI18nState.translate,
661
- core.arrayDefaultTranslations,
662
- this.control.i18nKeyPrefix,
663
- this.control.label
664
- );
665
- },
666
- labelKey() {
667
- const key = this.uischema?.options?.labelKey;
668
- if (!key) return null;
669
- return key;
670
- }
671
- },
672
- methods: {
673
- composePaths: core.composePaths,
674
- createDefaultValue: core.createDefaultValue
489
+ }, 8, ["title"]);
490
+ };
491
+ }
492
+ });
493
+ const _hoisted_1$6 = { class: "flex flex-row gap-4 items-center" };
494
+ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
495
+ __name: "HorizontalLayout",
496
+ props: { ...vue$1.rendererProps() },
497
+ setup(__props) {
498
+ const props = __props;
499
+ const { layout, renderers, cells } = vue$1.useJsonFormsLayout(props);
500
+ return (_ctx, _cache) => {
501
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [
502
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(layout).uischema.elements, (element, index) => {
503
+ return vue.openBlock(), vue.createBlock(vue.unref(vue$1.DispatchRenderer), {
504
+ key: index,
505
+ schema: vue.unref(layout).schema,
506
+ uischema: element,
507
+ path: vue.unref(layout).path,
508
+ renderers: vue.unref(renderers),
509
+ cells: vue.unref(cells)
510
+ }, null, 8, ["schema", "uischema", "path", "renderers", "cells"]);
511
+ }), 128))
512
+ ]);
513
+ };
514
+ }
515
+ });
516
+ const _hoisted_1$5 = { class: "flex flex-col gap-4" };
517
+ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
518
+ __name: "VerticalLayout",
519
+ props: { ...vue$1.rendererProps() },
520
+ setup(__props) {
521
+ const props = __props;
522
+ const { layout, renderers, cells } = vue$1.useJsonFormsLayout(props);
523
+ return (_ctx, _cache) => {
524
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
525
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(layout).uischema.elements, (element, index) => {
526
+ return vue.openBlock(), vue.createBlock(vue.unref(vue$1.DispatchRenderer), {
527
+ key: index,
528
+ schema: vue.unref(layout).schema,
529
+ uischema: element,
530
+ path: vue.unref(layout).path,
531
+ renderers: vue.unref(renderers),
532
+ cells: vue.unref(cells)
533
+ }, null, 8, ["schema", "uischema", "path", "renderers", "cells"]);
534
+ }), 128))
535
+ ]);
536
+ };
675
537
  }
676
538
  });
677
- const entry = {
678
- renderer: controlRenderer,
679
- tester: core.rankWith(2, isFixedArray)
680
- };
681
- const _hoisted_1$5 = { class: "fieldset" };
682
- function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
683
- const _component_dispatch_renderer = vue.resolveComponent("dispatch-renderer");
684
- return _ctx.control.visible ? (vue.openBlock(), vue.createElementBlock("fieldset", {
685
- key: 0,
686
- class: vue.normalizeClass(_ctx.styles.arrayList.root)
687
- }, [
688
- !_ctx.labelKey ? (vue.openBlock(), vue.createElementBlock("legend", {
689
- key: 0,
690
- class: vue.normalizeClass(_ctx.styles.arrayList.legend)
691
- }, [
692
- vue.createElementVNode("label", {
693
- class: vue.normalizeClass(_ctx.styles.arrayList.label)
694
- }, vue.toDisplayString(_ctx.control.label), 3)
695
- ], 2)) : vue.createCommentVNode("", true),
696
- vue.createElementVNode("div", {
697
- class: vue.normalizeClass(_ctx.styles.fixedArrayList.root)
698
- }, [
699
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.control.data, (element, index) => {
700
- return vue.openBlock(), vue.createElementBlock("div", {
701
- key: `${_ctx.control.path}-${index}`,
702
- class: vue.normalizeClass(_ctx.styles.fixedArrayList.item)
703
- }, [
704
- vue.createElementVNode("fieldset", _hoisted_1$5, [
705
- _ctx.labelKey ? (vue.openBlock(), vue.createElementBlock("legend", {
706
- key: 0,
707
- class: vue.normalizeClass(_ctx.styles.arrayList.legend)
708
- }, vue.toDisplayString(element[_ctx.labelKey]?.toLowerCase()), 3)) : vue.createCommentVNode("", true),
709
- vue.createVNode(_component_dispatch_renderer, {
710
- schema: _ctx.control.schema,
711
- uischema: _ctx.childUiSchema,
712
- path: _ctx.composePaths(_ctx.control.path, `${index}`),
713
- enabled: _ctx.control.enabled,
714
- renderers: _ctx.control.renderers,
715
- cells: _ctx.control.cells
716
- }, null, 8, ["schema", "uischema", "path", "enabled", "renderers", "cells"])
717
- ])
718
- ], 2);
719
- }), 128))
720
- ], 2),
721
- _ctx.noData ? (vue.openBlock(), vue.createElementBlock("div", {
722
- key: 1,
723
- class: vue.normalizeClass(_ctx.styles.arrayList.noData)
724
- }, vue.toDisplayString(_ctx.translations.noDataMessage), 3)) : vue.createCommentVNode("", true)
725
- ], 2)) : vue.createCommentVNode("", true);
726
- }
727
- const FixedArrayRenderer = /* @__PURE__ */ _export_sfc(controlRenderer, [["render", _sfc_render]]);
728
- const arrayRenderers = [
729
- entry,
730
- entry$1
731
- ];
732
539
  const layoutRenderers = [
733
- // LayoutRenderer
540
+ {
541
+ tester: core.rankWith(10, core.uiTypeIs(jsonFormsCore.LayoutTypes.VerticalLayout)),
542
+ renderer: _sfc_main$6
543
+ },
544
+ {
545
+ tester: core.rankWith(10, core.uiTypeIs(jsonFormsCore.LayoutTypes.HorizontalLayout)),
546
+ renderer: _sfc_main$7
547
+ },
548
+ {
549
+ tester: core.rankWith(10, core.uiTypeIs(jsonFormsCore.LayoutTypes.CollapseLayout)),
550
+ renderer: _sfc_main$8
551
+ }
734
552
  ];
735
553
  const _hoisted_1$4 = { class: "" };
736
554
  const _hoisted_2$1 = { class: "flex gap-2 items-center mb-2" };
737
- const _hoisted_3$1 = { class: "flex gap-2" };
555
+ const _hoisted_3 = { class: "flex gap-2" };
738
556
  const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
739
557
  __name: "table-filter",
740
558
  props: {
@@ -778,7 +596,7 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
778
596
  _: 1
779
597
  })) : vue.createCommentVNode("", true)
780
598
  ]),
781
- vue.createElementVNode("div", _hoisted_3$1, [
599
+ vue.createElementVNode("div", _hoisted_3, [
782
600
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.filters, (filter) => {
783
601
  return vue.openBlock(), vue.createBlock(vue.unref(ui.BtnBadge), {
784
602
  key: filter.key,
@@ -1108,12 +926,12 @@ const customRenderers = [
1108
926
  const customRenderesName = customRenderers.map((c) => {
1109
927
  return c.renderer.name;
1110
928
  });
1111
- const useVanillaRenderers = vueVanilla.vanillaRenderers.filter(
929
+ vueVanilla.vanillaRenderers.filter(
1112
930
  (v) => !customRenderesName.includes(v.renderer.name)
1113
931
  );
1114
932
  const tailwindRenderers = [
1115
- ...customRenderers,
1116
- ...useVanillaRenderers
933
+ ...vueVanilla.vanillaRenderers,
934
+ ...customRenderers
1117
935
  ];
1118
936
  const _hoisted_1$1 = ["id"];
1119
937
  const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
@@ -1129,7 +947,7 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
1129
947
  "modelValue": {},
1130
948
  "modelModifiers": {}
1131
949
  }),
1132
- emits: /* @__PURE__ */ vue.mergeModels(["valid", "change", "submit"], ["update:modelValue"]),
950
+ emits: /* @__PURE__ */ vue.mergeModels(["valid", "change", "submit", "errors"], ["update:modelValue"]),
1133
951
  setup(__props, { emit: __emit }) {
1134
952
  const properties = __props;
1135
953
  const _JSON_FORM_ID = `json-form-${Date.now()}`;
@@ -1142,6 +960,8 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
1142
960
  valid.value = event.errors.length === 0;
1143
961
  emits("valid", valid.value);
1144
962
  emits("change", event.data);
963
+ emits("errors", event.errors);
964
+ toolsVue.Debugger.debug(event.errors);
1145
965
  };
1146
966
  const onSubmit = (event) => {
1147
967
  event.preventDefault();
@@ -1182,10 +1002,8 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
1182
1002
  };
1183
1003
  }
1184
1004
  });
1185
- const _hoisted_1 = { class: "card w-full shadow border-2" };
1186
- const _hoisted_2 = { class: "card-body" };
1187
- const _hoisted_3 = { class: "card-title" };
1188
- const _hoisted_4 = { class: "card-actions flex justify-end" };
1005
+ const _hoisted_1 = { class: "card-actions flex justify-between" };
1006
+ const _hoisted_2 = { class: "flex justify-end gap-2" };
1189
1007
  const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
1190
1008
  __name: "form-with-actions.component",
1191
1009
  props: /* @__PURE__ */ vue.mergeModels({
@@ -1202,23 +1020,33 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
1202
1020
  const properties = __props;
1203
1021
  const valid = vue.ref(false);
1204
1022
  const formData = vue.useModel(__props, "modelValue");
1023
+ const submitted = vue.ref(false);
1205
1024
  const store = new FormStore(properties.formSchema);
1206
1025
  const emits = __emit;
1207
1026
  const save = () => {
1027
+ submitted.value = true;
1028
+ if (!valid.value) {
1029
+ return;
1030
+ }
1208
1031
  store.save(formData.value.id, formData.value).then(() => {
1209
1032
  emits("success");
1210
1033
  });
1211
1034
  };
1212
1035
  const clear = () => {
1213
1036
  formData.value = { id: null };
1037
+ submitted.value = false;
1214
1038
  };
1215
1039
  const onValid = (v) => {
1040
+ submitted.value = false;
1216
1041
  valid.value = v;
1217
1042
  };
1043
+ const title = vue.computed(() => {
1044
+ if (!properties.updateTitle) return properties.createTitle;
1045
+ return formData.value?.id ? properties.updateTitle : properties.createTitle;
1046
+ });
1218
1047
  return (_ctx, _cache) => {
1219
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
1220
- vue.createElementVNode("div", _hoisted_2, [
1221
- vue.createElementVNode("h1", _hoisted_3, vue.toDisplayString(formData.value?.id ? __props.updateTitle : __props.createTitle), 1),
1048
+ return vue.openBlock(), vue.createBlock(vue.unref(ui.Collapse), { title: title.value }, {
1049
+ default: vue.withCtx(() => [
1222
1050
  vue.createVNode(_sfc_main$2, {
1223
1051
  id: `form_${properties.id}`,
1224
1052
  modelValue: formData.value,
@@ -1228,29 +1056,41 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
1228
1056
  onValid: _cache[1] || (_cache[1] = ($event) => onValid($event)),
1229
1057
  onSubmit: save
1230
1058
  }, null, 8, ["id", "modelValue", "schema", "uischema"]),
1231
- vue.createElementVNode("div", _hoisted_4, [
1232
- vue.createVNode(vue.unref(ui.Btn), {
1233
- outline: true,
1234
- onClick: clear
1235
- }, {
1236
- default: vue.withCtx(() => [..._cache[2] || (_cache[2] = [
1237
- vue.createTextVNode(" Clear ", -1)
1238
- ])]),
1239
- _: 1
1240
- }),
1241
- vue.createVNode(vue.unref(ui.Btn), {
1242
- color: vue.unref(ui.Color).primary,
1243
- disabled: !valid.value,
1244
- onClick: save
1245
- }, {
1246
- default: vue.withCtx(() => [..._cache[3] || (_cache[3] = [
1247
- vue.createTextVNode(" Save ", -1)
1248
- ])]),
1249
- _: 1
1250
- }, 8, ["color", "disabled"])
1059
+ vue.createElementVNode("div", _hoisted_1, [
1060
+ vue.createElementVNode("div", null, [
1061
+ !valid.value && submitted.value ? (vue.openBlock(), vue.createBlock(vue.unref(ui.Alert), {
1062
+ key: 0,
1063
+ message: "The form is not valid",
1064
+ type: "error"
1065
+ })) : vue.createCommentVNode("", true)
1066
+ ]),
1067
+ vue.createElementVNode("div", _hoisted_2, [
1068
+ vue.renderSlot(_ctx.$slots, "actions"),
1069
+ !formData.value.id ? (vue.openBlock(), vue.createBlock(vue.unref(ui.Btn), {
1070
+ key: 0,
1071
+ outline: true,
1072
+ onClick: clear
1073
+ }, {
1074
+ default: vue.withCtx(() => [..._cache[2] || (_cache[2] = [
1075
+ vue.createTextVNode(" Clear ", -1)
1076
+ ])]),
1077
+ _: 1
1078
+ })) : vue.createCommentVNode("", true),
1079
+ vue.createVNode(vue.unref(ui.Btn), {
1080
+ color: vue.unref(ui.Color).primary,
1081
+ disabled: submitted.value,
1082
+ onClick: save
1083
+ }, {
1084
+ default: vue.withCtx(() => [..._cache[3] || (_cache[3] = [
1085
+ vue.createTextVNode(" Save ", -1)
1086
+ ])]),
1087
+ _: 1
1088
+ }, 8, ["color", "disabled"])
1089
+ ])
1251
1090
  ])
1252
- ])
1253
- ]);
1091
+ ]),
1092
+ _: 3
1093
+ }, 8, ["title"]);
1254
1094
  };
1255
1095
  }
1256
1096
  });
@@ -1375,7 +1215,7 @@ const createRepository = (formSchemaModel, httpRequest, options = {}) => {
1375
1215
  const create = (object, options2) => {
1376
1216
  return httpRequest.post(getDataUri(), object, options2).then((response) => {
1377
1217
  handleSuccess(`Created ${notificationEntity}`);
1378
- return response;
1218
+ return response.data;
1379
1219
  }).catch((response) => {
1380
1220
  handleError(response, `Failed to create ${notificationEntity}`);
1381
1221
  });
@@ -1383,13 +1223,17 @@ const createRepository = (formSchemaModel, httpRequest, options = {}) => {
1383
1223
  const patch = (id, object, options2) => {
1384
1224
  return httpRequest.patch(getDataUri(id), object, options2).then((response) => {
1385
1225
  handleSuccess(`Saved ${notificationEntity}`);
1386
- return response;
1226
+ return response.data;
1387
1227
  }).catch((response) => {
1388
1228
  handleError(response, `Failed to save ${notificationEntity}`);
1389
1229
  });
1390
1230
  };
1391
1231
  const get = (id, options2) => {
1392
- return httpRequest.get(getDataUri(id), options2);
1232
+ return httpRequest.get(getDataUri(id), options2).then((response) => {
1233
+ return response.data;
1234
+ }).catch((response) => {
1235
+ handleError(response, `Failed to load data`);
1236
+ });
1393
1237
  };
1394
1238
  const _delete = (id, options2) => {
1395
1239
  return httpRequest.delete(getDataUri(id), options2).then((response) => {
@@ -1404,26 +1248,25 @@ const createRepository = (formSchemaModel, httpRequest, options = {}) => {
1404
1248
  objects.map((object) => httpRequest.post(getDataUri(), object, options2))
1405
1249
  ).then((response) => {
1406
1250
  handleSuccess(`Created ${notificationEntity}`);
1407
- return response;
1251
+ return response.data;
1408
1252
  }).catch((response) => {
1409
1253
  handleError(response, `Failed to save ${notificationEntity}`);
1410
1254
  });
1411
1255
  };
1412
1256
  return { create, patch, createMulti, delete: _delete, get };
1413
1257
  };
1414
- exports.ArrayRenderer = ArrayRenderer;
1415
- exports.AutocompleteControlRenderer = AutocompleteControlRenderer;
1416
- exports.BooleanControlRenderer = BooleanControlRenderer;
1417
- exports.FixedArrayRenderer = FixedArrayRenderer;
1258
+ exports.ArrayRenderer = _sfc_main$9;
1259
+ exports.AutocompleteControlRenderer = _sfc_main$a;
1260
+ exports.BooleanControlRenderer = _sfc_main$g;
1418
1261
  exports.FormComponent = _sfc_main$2;
1419
1262
  exports.FormModal = _sfc_main;
1420
1263
  exports.FormModalService = FormModalService;
1421
1264
  exports.FormStore = FormStore;
1422
1265
  exports.FormWithActions = _sfc_main$1;
1423
1266
  exports.FormWithTableComponent = _sfc_main$3;
1424
- exports.IntegerControlRenderer = IntegerControlRenderer;
1425
- exports.NumberControlRenderer = NumberControlRenderer;
1426
- exports.StringControlRenderer = StringControlRenderer;
1267
+ exports.IntegerControlRenderer = _sfc_main$f;
1268
+ exports.NumberControlRenderer = _sfc_main$d;
1269
+ exports.StringControlRenderer = _sfc_main$c;
1427
1270
  exports.TableComponent = _sfc_main$4;
1428
1271
  exports.arrayRenderers = arrayRenderers;
1429
1272
  exports.controlRenderers = controlRenderers;
@@ -1431,10 +1274,9 @@ exports.createRepository = createRepository;
1431
1274
  exports.isArrayRenderer = isArrayRenderer;
1432
1275
  exports.isAutoCompleteControl = isAutoCompleteControl;
1433
1276
  exports.isCustomControl = isCustomControl;
1434
- exports.isFixedArray = isFixedArray;
1435
1277
  exports.isMarkdownControl = isMarkdownControl;
1436
1278
  exports.isStringFormat = isStringFormat;
1437
1279
  exports.isTextAreaControl = isTextAreaControl;
1438
1280
  exports.layoutRenderers = layoutRenderers;
1439
- exports.markdownControlRenderer = MarkdownControlRenderer;
1281
+ exports.markdownControlRenderer = _sfc_main$e;
1440
1282
  exports.useFormState = useFormState;