@narrative.io/jsonforms-provider-protocols 1.1.0-beta.1 → 1.1.0-beta.11

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.
Files changed (61) hide show
  1. package/README.md +61 -0
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +24 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/jsonforms-provider-protocols.css +0 -4
  7. package/dist/protocols/rest_api.d.ts +1 -0
  8. package/dist/protocols/rest_api.d.ts.map +1 -1
  9. package/dist/protocols/rest_api.js +6 -1
  10. package/dist/protocols/rest_api.js.map +1 -1
  11. package/dist/vue/composables/useDerive.d.ts +13 -0
  12. package/dist/vue/composables/useDerive.d.ts.map +1 -0
  13. package/dist/vue/composables/useDerive.js +71 -0
  14. package/dist/vue/composables/useDerive.js.map +1 -0
  15. package/dist/vue/index.d.ts +1 -1
  16. package/dist/vue/index.d.ts.map +1 -1
  17. package/dist/vue/index.js +6 -6
  18. package/dist/vue/index.js.map +1 -1
  19. package/dist/vue/primevue/JfBoolean.vue.d.ts +20 -32
  20. package/dist/vue/primevue/JfBoolean.vue.d.ts.map +1 -1
  21. package/dist/vue/primevue/JfBoolean.vue.js +38 -6
  22. package/dist/vue/primevue/JfBoolean.vue.js.map +1 -1
  23. package/dist/vue/primevue/JfEnum.vue.d.ts +20 -32
  24. package/dist/vue/primevue/JfEnum.vue.d.ts.map +1 -1
  25. package/dist/vue/primevue/JfEnum.vue.js +152 -5
  26. package/dist/vue/primevue/JfEnum.vue.js.map +1 -1
  27. package/dist/vue/primevue/JfEnum.vue2.js +1 -61
  28. package/dist/vue/primevue/JfEnum.vue2.js.map +1 -1
  29. package/dist/vue/primevue/JfEnumArray.vue.d.ts +20 -32
  30. package/dist/vue/primevue/JfEnumArray.vue.d.ts.map +1 -1
  31. package/dist/vue/primevue/JfEnumArray.vue.js +93 -13
  32. package/dist/vue/primevue/JfEnumArray.vue.js.map +1 -1
  33. package/dist/vue/primevue/JfNumber.vue.d.ts +20 -32
  34. package/dist/vue/primevue/JfNumber.vue.d.ts.map +1 -1
  35. package/dist/vue/primevue/JfNumber.vue.js +87 -13
  36. package/dist/vue/primevue/JfNumber.vue.js.map +1 -1
  37. package/dist/vue/primevue/JfText.vue.d.ts +20 -32
  38. package/dist/vue/primevue/JfText.vue.d.ts.map +1 -1
  39. package/dist/vue/primevue/JfText.vue.js +131 -16
  40. package/dist/vue/primevue/JfText.vue.js.map +1 -1
  41. package/dist/vue/primevue/JfTextArea.vue.d.ts +20 -32
  42. package/dist/vue/primevue/JfTextArea.vue.d.ts.map +1 -1
  43. package/dist/vue/primevue/JfTextArea.vue.js +49 -11
  44. package/dist/vue/primevue/JfTextArea.vue.js.map +1 -1
  45. package/dist/vue/primevue/index.d.ts +2 -75
  46. package/dist/vue/primevue/index.d.ts.map +1 -1
  47. package/dist/vue/primevue/index.js +47 -28
  48. package/dist/vue/primevue/index.js.map +1 -1
  49. package/package.json +1 -1
  50. package/src/index.ts +15 -2
  51. package/src/protocols/rest_api.ts +8 -1
  52. package/src/vue/composables/useDerive.ts +105 -0
  53. package/src/vue/index.ts +10 -1
  54. package/src/vue/primevue/JfBoolean.vue +42 -5
  55. package/src/vue/primevue/JfEnum.vue +131 -20
  56. package/src/vue/primevue/JfEnumArray.vue +118 -14
  57. package/src/vue/primevue/JfNumber.vue +104 -13
  58. package/src/vue/primevue/JfText.vue +156 -13
  59. package/src/vue/primevue/JfTextArea.vue +57 -10
  60. package/src/vue/primevue/index.ts +49 -37
  61. package/src/vue/styles.css +5 -0
@@ -1,75 +1,63 @@
1
- import type { ControlElement } from "@jsonforms/core";
2
1
  declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
3
- schema: {
2
+ uischema: {
3
+ type: ObjectConstructor;
4
4
  required: true;
5
- type: import("vue").PropType<import("@jsonforms/core").JsonSchema>;
6
5
  };
7
- uischema: {
6
+ schema: {
7
+ type: ObjectConstructor;
8
8
  required: true;
9
- type: import("vue").PropType<ControlElement>;
10
9
  };
11
10
  path: {
12
- required: true;
13
11
  type: StringConstructor;
12
+ required: true;
14
13
  };
15
14
  enabled: {
16
- required: false;
17
15
  type: BooleanConstructor;
18
16
  default: undefined;
19
17
  };
20
18
  renderers: {
21
- required: boolean;
22
- type: import("vue").PropType<import("@jsonforms/core").JsonFormsRendererRegistryEntry[]>;
23
- default: undefined;
19
+ type: ArrayConstructor;
20
+ required: false;
24
21
  };
25
22
  cells: {
26
- required: boolean;
27
- type: import("vue").PropType<import("@jsonforms/core").JsonFormsCellRendererRegistryEntry[]>;
28
- default: undefined;
23
+ type: ArrayConstructor;
24
+ required: false;
29
25
  };
30
26
  config: {
31
- required: boolean;
32
27
  type: ObjectConstructor;
33
- default: undefined;
28
+ required: false;
34
29
  };
35
30
  }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
36
- schema: {
31
+ uischema: {
32
+ type: ObjectConstructor;
37
33
  required: true;
38
- type: import("vue").PropType<import("@jsonforms/core").JsonSchema>;
39
34
  };
40
- uischema: {
35
+ schema: {
36
+ type: ObjectConstructor;
41
37
  required: true;
42
- type: import("vue").PropType<ControlElement>;
43
38
  };
44
39
  path: {
45
- required: true;
46
40
  type: StringConstructor;
41
+ required: true;
47
42
  };
48
43
  enabled: {
49
- required: false;
50
44
  type: BooleanConstructor;
51
45
  default: undefined;
52
46
  };
53
47
  renderers: {
54
- required: boolean;
55
- type: import("vue").PropType<import("@jsonforms/core").JsonFormsRendererRegistryEntry[]>;
56
- default: undefined;
48
+ type: ArrayConstructor;
49
+ required: false;
57
50
  };
58
51
  cells: {
59
- required: boolean;
60
- type: import("vue").PropType<import("@jsonforms/core").JsonFormsCellRendererRegistryEntry[]>;
61
- default: undefined;
52
+ type: ArrayConstructor;
53
+ required: false;
62
54
  };
63
55
  config: {
64
- required: boolean;
65
56
  type: ObjectConstructor;
66
- default: undefined;
57
+ required: false;
67
58
  };
68
59
  }>> & Readonly<{}>, {
69
60
  enabled: boolean;
70
- renderers: import("@jsonforms/core").JsonFormsRendererRegistryEntry[];
71
- cells: import("@jsonforms/core").JsonFormsCellRendererRegistryEntry[];
72
- config: Record<string, any>;
73
61
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
74
62
  export default _default;
75
63
  //# sourceMappingURL=JfNumber.vue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"JfNumber.vue.d.ts","sourceRoot":"","sources":["../../../src/vue/primevue/JfNumber.vue"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6HtD,wBAEG"}
1
+ {"version":3,"file":"JfNumber.vue.d.ts","sourceRoot":"","sources":["../../../src/vue/primevue/JfNumber.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8IA,wBA+PK"}
@@ -1,5 +1,6 @@
1
- import { defineComponent, computed, createElementBlock, openBlock, createCommentVNode, createVNode, unref, toDisplayString } from "vue";
2
- import { rendererProps, useJsonFormsControl } from "@jsonforms/vue";
1
+ import { defineComponent, getCurrentInstance, computed, ref, createElementBlock, openBlock, createCommentVNode, createVNode, unref, toDisplayString } from "vue";
2
+ import { useJsonFormsControl } from "@jsonforms/vue";
3
+ import { useDerive } from "../composables/useDerive.js";
3
4
  import InputNumber from "primevue/inputnumber";
4
5
  const _hoisted_1 = { class: "flex flex-column gap-2" };
5
6
  const _hoisted_2 = {
@@ -14,17 +15,85 @@ const _hoisted_4 = {
14
15
  key: 2,
15
16
  class: "p-error"
16
17
  };
18
+ const __default__ = {
19
+ name: "JfNumber",
20
+ props: {
21
+ uischema: {
22
+ type: Object,
23
+ required: true
24
+ },
25
+ schema: {
26
+ type: Object,
27
+ required: true
28
+ },
29
+ path: {
30
+ type: String,
31
+ required: true
32
+ },
33
+ enabled: {
34
+ type: Boolean,
35
+ default: void 0
36
+ },
37
+ renderers: {
38
+ type: Array,
39
+ required: false
40
+ },
41
+ cells: {
42
+ type: Array,
43
+ required: false
44
+ },
45
+ config: {
46
+ type: Object,
47
+ required: false
48
+ }
49
+ }
50
+ };
17
51
  const _sfc_main = /* @__PURE__ */ defineComponent({
18
- ...{ name: "JfNumber" },
19
- __name: "JfNumber",
20
- props: rendererProps(),
52
+ ...__default__,
21
53
  setup(__props) {
22
- const props = __props;
54
+ const instance = getCurrentInstance();
55
+ const props = instance.props;
23
56
  const { control, handleChange } = useJsonFormsControl(props);
57
+ const options = computed(
58
+ () => control.value.uischema?.options ?? {}
59
+ );
24
60
  const placeholder = computed(
25
- () => control.value.uischema?.options?.placeholder ?? control.value.description
61
+ () => options.value.placeholder ?? control.value.description
26
62
  );
27
- const onNumber = (val) => handleChange(control.value.path, val ?? void 0);
63
+ useDerive({ control, handleChange });
64
+ const mode = computed(() => {
65
+ if (options.value.currency) return "currency";
66
+ if (options.value.decimal || typeof options.value.precision === "number")
67
+ return "decimal";
68
+ return void 0;
69
+ });
70
+ const currency = computed(
71
+ () => typeof options.value.currency === "string" ? options.value.currency : "USD"
72
+ );
73
+ const minFractionDigits = computed(() => {
74
+ if (mode.value === "currency") return 2;
75
+ if (typeof options.value.precision === "number")
76
+ return options.value.precision;
77
+ return void 0;
78
+ });
79
+ const maxFractionDigits = computed(() => {
80
+ if (mode.value === "currency") return 2;
81
+ if (typeof options.value.precision === "number")
82
+ return options.value.precision;
83
+ return void 0;
84
+ });
85
+ const useGrouping = computed(() => {
86
+ if (mode.value === "currency") return true;
87
+ return options.value.useGrouping === true;
88
+ });
89
+ const hasInteracted = ref(false);
90
+ const showErrors = computed(() => hasInteracted.value && control.value.errors);
91
+ const onNumber = (val) => {
92
+ handleChange(control.value.path, val ?? void 0);
93
+ };
94
+ const onBlur = () => {
95
+ hasInteracted.value = true;
96
+ };
28
97
  return (_ctx, _cache) => {
29
98
  return openBlock(), createElementBlock("div", _hoisted_1, [
30
99
  unref(control).label ? (openBlock(), createElementBlock("label", _hoisted_2, toDisplayString(unref(control).label), 1)) : createCommentVNode("", true),
@@ -32,14 +101,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
32
101
  createVNode(unref(InputNumber), {
33
102
  class: "w-full",
34
103
  "input-class": "w-full",
35
- "use-grouping": false,
104
+ "use-grouping": useGrouping.value,
105
+ mode: mode.value,
106
+ currency: currency.value,
107
+ "min-fraction-digits": minFractionDigits.value,
108
+ "max-fraction-digits": maxFractionDigits.value,
36
109
  "model-value": typeof unref(control).data === "number" ? unref(control).data : null,
37
110
  placeholder: placeholder.value,
38
111
  disabled: !unref(control).enabled,
39
- "aria-invalid": !!unref(control).errors || void 0,
40
- "onUpdate:modelValue": onNumber
41
- }, null, 8, ["model-value", "placeholder", "disabled", "aria-invalid"]),
42
- unref(control).errors ? (openBlock(), createElementBlock("small", _hoisted_4, toDisplayString(unref(control).errors), 1)) : createCommentVNode("", true)
112
+ "aria-invalid": !!showErrors.value || void 0,
113
+ "onUpdate:modelValue": onNumber,
114
+ onBlur
115
+ }, null, 8, ["use-grouping", "mode", "currency", "min-fraction-digits", "max-fraction-digits", "model-value", "placeholder", "disabled", "aria-invalid"]),
116
+ showErrors.value ? (openBlock(), createElementBlock("small", _hoisted_4, toDisplayString(unref(control).errors), 1)) : createCommentVNode("", true)
43
117
  ]);
44
118
  };
45
119
  }
@@ -1 +1 @@
1
- {"version":3,"file":"JfNumber.vue.js","sources":["../../../src/vue/primevue/JfNumber.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ControlElement } from \"@jsonforms/core\";\nimport { rendererProps, useJsonFormsControl } from \"@jsonforms/vue\";\nimport { computed } from \"vue\";\nimport InputNumber from \"primevue/inputnumber\";\n\ndefineOptions({ name: \"JfNumber\" });\n\nconst props = defineProps(rendererProps<ControlElement>());\nconst { control, handleChange } = useJsonFormsControl(props);\n\nconst placeholder = computed<string | undefined>(\n () =>\n (control.value.uischema as { options?: { placeholder?: string } })?.options\n ?.placeholder ?? control.value.description,\n);\n\nconst onNumber = (val: number | null) =>\n handleChange(control.value.path, val ?? undefined);\n</script>\n\n<template>\n <div class=\"flex flex-column gap-2\">\n <label v-if=\"control.label\" class=\"text-color text-left\">{{\n control.label\n }}</label>\n <div v-if=\"control.description\" class=\"text-color-secondary text-left\">\n {{ control.description }}\n </div>\n <InputNumber\n class=\"w-full\"\n input-class=\"w-full\"\n :use-grouping=\"false\"\n :model-value=\"typeof control.data === 'number' ? control.data : null\"\n :placeholder=\"placeholder\"\n :disabled=\"!control.enabled\"\n :aria-invalid=\"!!control.errors || undefined\"\n @update:model-value=\"onNumber\"\n />\n <small v-if=\"control.errors\" class=\"p-error\">{{ control.errors }}</small>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","_unref","_toDisplayString","_createVNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAQA,UAAM,QAAQ;AACd,UAAM,EAAE,SAAS,iBAAiB,oBAAoB,KAAK;AAE3D,UAAM,cAAc;AAAA,MAClB,MACG,QAAQ,MAAM,UAAqD,SAChE,eAAe,QAAQ,MAAM;AAAA,IAAA;AAGrC,UAAM,WAAW,CAAC,QAChB,aAAa,QAAQ,MAAM,MAAM,OAAO,MAAS;;AAIjD,aAAAA,UAAA,GAAAC,mBAkBM,OAlBN,YAkBM;AAAA,QAjBSC,MAAA,OAAA,EAAQ,SAArBF,UAAA,GAAAC,mBAEU,SAFV,YAEUE,gBADRD,MAAA,OAAA,EAAQ,KAAK,GAAA,CAAA;QAEJA,MAAA,OAAA,EAAQ,eAAnBF,UAAA,GAAAC,mBAEM,OAFN,YAEME,gBADDD,MAAA,OAAA,EAAQ,WAAW,GAAA,CAAA;QAExBE,YASEF,MAAA,WAAA,GAAA;AAAA,UARA,OAAM;AAAA,UACN,eAAY;AAAA,UACX,gBAAc;AAAA,UACd,sBAAoBA,MAAA,OAAA,EAAQ,SAAI,WAAgBA,MAAA,OAAA,EAAQ,OAAI;AAAA,UAC5D,aAAa,YAAA;AAAA,UACb,UAAQ,CAAGA,MAAA,OAAA,EAAQ;AAAA,UACnB,gBAAY,CAAA,CAAIA,MAAA,OAAA,EAAQ,UAAU;AAAA,UAClC,uBAAoB;AAAA,QAAA;QAEVA,MAAA,OAAA,EAAQ,UAArBF,UAAA,GAAAC,mBAAyE,SAAzE,YAAyEE,gBAAzBD,MAAA,OAAA,EAAQ,MAAM,GAAA,CAAA;;;;;"}
1
+ {"version":3,"file":"JfNumber.vue.js","sources":["../../../src/vue/primevue/JfNumber.vue"],"sourcesContent":["<script lang=\"ts\">\nexport default {\n name: \"JfNumber\",\n props: {\n uischema: {\n type: Object,\n required: true,\n },\n schema: {\n type: Object,\n required: true,\n },\n path: {\n type: String,\n required: true,\n },\n enabled: {\n type: Boolean,\n default: undefined,\n },\n renderers: {\n type: Array,\n required: false,\n },\n cells: {\n type: Array,\n required: false,\n },\n config: {\n type: Object,\n required: false,\n },\n },\n};\n</script>\n\n<script setup lang=\"ts\">\nimport type { ControlProps } from \"@jsonforms/vue\";\nimport { useJsonFormsControl } from \"@jsonforms/vue\";\nimport { computed, ref, getCurrentInstance } from \"vue\";\nimport { useDerive } from \"../composables/useDerive\";\nimport InputNumber from \"primevue/inputnumber\";\n\n// Access props from the component instance\nconst instance = getCurrentInstance()!;\nconst props = instance.props as unknown as ControlProps;\nconst { control, handleChange } = useJsonFormsControl(props);\n\nconst options = computed(\n () =>\n (control.value.uischema as { options?: Record<string, unknown> })\n ?.options ?? {},\n);\n\nconst placeholder = computed<string | undefined>(\n () => (options.value.placeholder as string) ?? control.value.description,\n);\n\n// Add derive functionality\nuseDerive({ control, handleChange });\n\n// Currency and decimal configuration\nconst mode = computed(() => {\n if (options.value.currency) return \"currency\";\n if (options.value.decimal || typeof options.value.precision === \"number\")\n return \"decimal\";\n return undefined;\n});\n\nconst currency = computed(() =>\n typeof options.value.currency === \"string\" ? options.value.currency : \"USD\",\n);\n\nconst minFractionDigits = computed(() => {\n if (mode.value === \"currency\") return 2;\n if (typeof options.value.precision === \"number\")\n return options.value.precision;\n return undefined;\n});\n\nconst maxFractionDigits = computed(() => {\n if (mode.value === \"currency\") return 2;\n if (typeof options.value.precision === \"number\")\n return options.value.precision;\n return undefined;\n});\n\nconst useGrouping = computed(() => {\n // Enable grouping for currency by default, or if explicitly set\n if (mode.value === \"currency\") return true;\n return options.value.useGrouping === true;\n});\n\n// Track user interaction\nconst hasInteracted = ref(false);\n\nconst showErrors = computed(() => hasInteracted.value && control.value.errors);\n\nconst onNumber = (val: number | null) => {\n handleChange(control.value.path, val ?? undefined);\n};\n\nconst onBlur = () => {\n hasInteracted.value = true;\n};\n</script>\n\n<template>\n <div class=\"flex flex-column gap-2\">\n <label v-if=\"control.label\" class=\"text-color text-left\">{{\n control.label\n }}</label>\n <div v-if=\"control.description\" class=\"text-color-secondary text-left\">\n {{ control.description }}\n </div>\n <InputNumber\n class=\"w-full\"\n input-class=\"w-full\"\n :use-grouping=\"useGrouping\"\n :mode=\"mode\"\n :currency=\"currency\"\n :min-fraction-digits=\"minFractionDigits\"\n :max-fraction-digits=\"maxFractionDigits\"\n :model-value=\"typeof control.data === 'number' ? control.data : null\"\n :placeholder=\"placeholder\"\n :disabled=\"!control.enabled\"\n :aria-invalid=\"!!showErrors || undefined\"\n @update:model-value=\"onNumber\"\n @blur=\"onBlur\"\n />\n <small v-if=\"showErrors\" class=\"p-error\">{{ control.errors }}</small>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","_unref","_toDisplayString","_createVNode"],"mappings":"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"}
@@ -1,75 +1,63 @@
1
- import type { ControlElement } from "@jsonforms/core";
2
1
  declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
3
- schema: {
2
+ uischema: {
3
+ type: ObjectConstructor;
4
4
  required: true;
5
- type: import("vue").PropType<import("@jsonforms/core").JsonSchema>;
6
5
  };
7
- uischema: {
6
+ schema: {
7
+ type: ObjectConstructor;
8
8
  required: true;
9
- type: import("vue").PropType<ControlElement>;
10
9
  };
11
10
  path: {
12
- required: true;
13
11
  type: StringConstructor;
12
+ required: true;
14
13
  };
15
14
  enabled: {
16
- required: false;
17
15
  type: BooleanConstructor;
18
16
  default: undefined;
19
17
  };
20
18
  renderers: {
21
- required: boolean;
22
- type: import("vue").PropType<import("@jsonforms/core").JsonFormsRendererRegistryEntry[]>;
23
- default: undefined;
19
+ type: ArrayConstructor;
20
+ required: false;
24
21
  };
25
22
  cells: {
26
- required: boolean;
27
- type: import("vue").PropType<import("@jsonforms/core").JsonFormsCellRendererRegistryEntry[]>;
28
- default: undefined;
23
+ type: ArrayConstructor;
24
+ required: false;
29
25
  };
30
26
  config: {
31
- required: boolean;
32
27
  type: ObjectConstructor;
33
- default: undefined;
28
+ required: false;
34
29
  };
35
30
  }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
36
- schema: {
31
+ uischema: {
32
+ type: ObjectConstructor;
37
33
  required: true;
38
- type: import("vue").PropType<import("@jsonforms/core").JsonSchema>;
39
34
  };
40
- uischema: {
35
+ schema: {
36
+ type: ObjectConstructor;
41
37
  required: true;
42
- type: import("vue").PropType<ControlElement>;
43
38
  };
44
39
  path: {
45
- required: true;
46
40
  type: StringConstructor;
41
+ required: true;
47
42
  };
48
43
  enabled: {
49
- required: false;
50
44
  type: BooleanConstructor;
51
45
  default: undefined;
52
46
  };
53
47
  renderers: {
54
- required: boolean;
55
- type: import("vue").PropType<import("@jsonforms/core").JsonFormsRendererRegistryEntry[]>;
56
- default: undefined;
48
+ type: ArrayConstructor;
49
+ required: false;
57
50
  };
58
51
  cells: {
59
- required: boolean;
60
- type: import("vue").PropType<import("@jsonforms/core").JsonFormsCellRendererRegistryEntry[]>;
61
- default: undefined;
52
+ type: ArrayConstructor;
53
+ required: false;
62
54
  };
63
55
  config: {
64
- required: boolean;
65
56
  type: ObjectConstructor;
66
- default: undefined;
57
+ required: false;
67
58
  };
68
59
  }>> & Readonly<{}>, {
69
60
  enabled: boolean;
70
- renderers: import("@jsonforms/core").JsonFormsRendererRegistryEntry[];
71
- cells: import("@jsonforms/core").JsonFormsCellRendererRegistryEntry[];
72
- config: Record<string, any>;
73
61
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
74
62
  export default _default;
75
63
  //# sourceMappingURL=JfText.vue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"JfText.vue.d.ts","sourceRoot":"","sources":["../../../src/vue/primevue/JfText.vue"],"names":[],"mappings":"AAiDA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmItD,wBAEG"}
1
+ {"version":3,"file":"JfText.vue.d.ts","sourceRoot":"","sources":["../../../src/vue/primevue/JfText.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyMA,wBAgXK"}
@@ -1,6 +1,9 @@
1
- import { defineComponent, computed, createElementBlock, openBlock, createCommentVNode, createVNode, unref, toDisplayString } from "vue";
2
- import { rendererProps, useJsonFormsControl } from "@jsonforms/vue";
1
+ import { defineComponent, getCurrentInstance, computed, inject, ref, watch, createElementBlock, openBlock, createCommentVNode, createBlock, unref, toDisplayString } from "vue";
2
+ import { useJsonFormsControl } from "@jsonforms/vue";
3
+ import { useProvider } from "../composables/useProvider.js";
4
+ import { useDerive } from "../composables/useDerive.js";
3
5
  import InputText from "primevue/inputtext";
6
+ import AutoComplete from "primevue/autocomplete";
4
7
  const _hoisted_1 = { class: "flex flex-column gap-2" };
5
8
  const _hoisted_2 = {
6
9
  key: 0,
@@ -11,41 +14,153 @@ const _hoisted_3 = {
11
14
  class: "text-color-secondary text-left"
12
15
  };
13
16
  const _hoisted_4 = {
14
- key: 2,
17
+ key: 4,
18
+ class: "p-error",
19
+ role: "alert"
20
+ };
21
+ const _hoisted_5 = {
22
+ key: 5,
15
23
  class: "p-error"
16
24
  };
25
+ const __default__ = {
26
+ name: "JfText",
27
+ props: {
28
+ uischema: {
29
+ type: Object,
30
+ required: true
31
+ },
32
+ schema: {
33
+ type: Object,
34
+ required: true
35
+ },
36
+ path: {
37
+ type: String,
38
+ required: true
39
+ },
40
+ enabled: {
41
+ type: Boolean,
42
+ default: void 0
43
+ },
44
+ renderers: {
45
+ type: Array,
46
+ required: false
47
+ },
48
+ cells: {
49
+ type: Array,
50
+ required: false
51
+ },
52
+ config: {
53
+ type: Object,
54
+ required: false
55
+ }
56
+ }
57
+ };
17
58
  const _sfc_main = /* @__PURE__ */ defineComponent({
18
- ...{ name: "JfText" },
19
- __name: "JfText",
20
- props: rendererProps(),
59
+ ...__default__,
21
60
  setup(__props) {
22
- const props = __props;
61
+ const instance = getCurrentInstance();
62
+ const props = instance.props;
23
63
  const { control, handleChange } = useJsonFormsControl(props);
24
- const placeholder = computed(
25
- () => control.value.uischema?.options?.placeholder ?? control.value.description
64
+ const binding = computed(() => {
65
+ const provider = control.value.uischema?.options?.provider;
66
+ if (provider && typeof provider === "object" && !provider.load) {
67
+ return { ...provider, load: "query" };
68
+ }
69
+ return provider;
70
+ });
71
+ const deps = computed(
72
+ () => control.value.schema?.["x-provider"]?.dependsOn ?? []
26
73
  );
74
+ const depValues = computed(() => {
75
+ return deps.value.map((dep) => {
76
+ const path = dep.startsWith("#/") ? dep.slice(2) : dep;
77
+ const keys = path.replace(/\//g, ".").split(".");
78
+ let value = rootData.value;
79
+ for (const key of keys) {
80
+ if (value && typeof value === "object" && key in value) {
81
+ value = value[key];
82
+ } else {
83
+ return null;
84
+ }
85
+ }
86
+ return value;
87
+ });
88
+ });
89
+ const injectedFormData = inject("formData", { value: {} });
90
+ const rootData = computed(() => injectedFormData.value || {});
91
+ const query = ref("");
92
+ const { items, loading, error, reload } = useProvider(binding, {
93
+ data: rootData,
94
+ path: control.value.path,
95
+ uiQuery: query.value,
96
+ dependsOnValues: depValues.value
97
+ });
98
+ watch(query, () => {
99
+ if (binding.value?.load === "query") reload();
100
+ });
101
+ const placeholder = computed(() => {
102
+ if (loading.value) return "Loading…";
103
+ return control.value.uischema?.options?.placeholder ?? control.value.description;
104
+ });
105
+ const isAutocomplete = computed(() => !!binding.value);
106
+ useDerive({ control, handleChange });
107
+ const hasInteracted = ref(false);
108
+ const hasFocused = ref(false);
109
+ const showErrors = computed(() => hasInteracted.value && control.value.errors);
27
110
  function onInput(val) {
28
- const newValue = val ?? "";
29
- if ((control.value.data ?? "") !== newValue) {
111
+ const newValue = val && val.trim() !== "" ? val : void 0;
112
+ if (control.value.data !== newValue) {
30
113
  handleChange(control.value.path, newValue);
31
114
  }
32
115
  }
116
+ function onBlur() {
117
+ if (hasFocused.value) {
118
+ hasInteracted.value = true;
119
+ }
120
+ }
121
+ function onFocus() {
122
+ hasFocused.value = true;
123
+ }
124
+ const onComplete = (event) => {
125
+ query.value = event.query;
126
+ };
127
+ const onSelect = (event) => {
128
+ const newValue = event.value?.value ?? event.value;
129
+ handleChange(control.value.path, newValue);
130
+ };
33
131
  return (_ctx, _cache) => {
34
132
  return openBlock(), createElementBlock("div", _hoisted_1, [
35
133
  unref(control).label ? (openBlock(), createElementBlock("label", _hoisted_2, toDisplayString(unref(control).label), 1)) : createCommentVNode("", true),
36
134
  unref(control).description ? (openBlock(), createElementBlock("div", _hoisted_3, toDisplayString(unref(control).description), 1)) : createCommentVNode("", true),
37
- createVNode(unref(InputText), {
135
+ isAutocomplete.value ? (openBlock(), createBlock(unref(AutoComplete), {
136
+ key: 2,
137
+ class: "w-full",
138
+ "model-value": unref(control).data ?? "",
139
+ suggestions: unref(items),
140
+ "option-label": "label",
141
+ placeholder: placeholder.value,
142
+ disabled: !unref(control).enabled,
143
+ "aria-invalid": !!showErrors.value || void 0,
144
+ onComplete,
145
+ onItemSelect: onSelect,
146
+ "onUpdate:modelValue": onInput,
147
+ onBlur,
148
+ onFocus
149
+ }, null, 8, ["model-value", "suggestions", "placeholder", "disabled", "aria-invalid"])) : (openBlock(), createBlock(unref(InputText), {
150
+ key: 3,
38
151
  class: "w-full",
39
152
  "model-value": unref(control).data ?? "",
40
153
  disabled: !unref(control).enabled,
41
- "aria-invalid": !!unref(control).errors || void 0,
154
+ "aria-invalid": !!showErrors.value || void 0,
42
155
  placeholder: placeholder.value,
43
156
  autocapitalize: "off",
44
157
  autocomplete: "off",
45
158
  spellcheck: "false",
46
- "onUpdate:modelValue": onInput
47
- }, null, 8, ["model-value", "disabled", "aria-invalid", "placeholder"]),
48
- unref(control).errors ? (openBlock(), createElementBlock("small", _hoisted_4, toDisplayString(unref(control).errors), 1)) : createCommentVNode("", true)
159
+ "onUpdate:modelValue": onInput,
160
+ onBlur,
161
+ onFocus
162
+ }, null, 8, ["model-value", "disabled", "aria-invalid", "placeholder"])),
163
+ unref(error) ? (openBlock(), createElementBlock("small", _hoisted_4, "Failed: " + toDisplayString(unref(error)), 1)) : showErrors.value ? (openBlock(), createElementBlock("small", _hoisted_5, toDisplayString(unref(control).errors), 1)) : createCommentVNode("", true)
49
164
  ]);
50
165
  };
51
166
  }
@@ -1 +1 @@
1
- {"version":3,"file":"JfText.vue.js","sources":["../../../src/vue/primevue/JfText.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ControlElement } from \"@jsonforms/core\";\nimport { rendererProps, useJsonFormsControl } from \"@jsonforms/vue\";\nimport { computed } from \"vue\";\nimport InputText from \"primevue/inputtext\";\n\ndefineOptions({ name: \"JfText\" });\n\nconst props = defineProps(rendererProps<ControlElement>());\nconst { control, handleChange } = useJsonFormsControl(props);\n\nconst placeholder = computed<string | undefined>(\n () =>\n (control.value.uischema as { options?: { placeholder?: string } })?.options\n ?.placeholder ?? control.value.description,\n);\n\nfunction onInput(val: string | undefined) {\n const newValue = val ?? \"\";\n if ((control.value.data ?? \"\") !== newValue) {\n handleChange(control.value.path, newValue);\n }\n}\n</script>\n\n<template>\n <div class=\"flex flex-column gap-2\">\n <label v-if=\"control.label\" class=\"text-color text-left\">{{\n control.label\n }}</label>\n <div v-if=\"control.description\" class=\"text-color-secondary text-left\">\n {{ control.description }}\n </div>\n <InputText\n class=\"w-full\"\n :model-value=\"control.data ?? ''\"\n :disabled=\"!control.enabled\"\n :aria-invalid=\"!!control.errors || undefined\"\n :placeholder=\"placeholder\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n @update:model-value=\"onInput\"\n />\n <small v-if=\"control.errors\" class=\"p-error\">{{ control.errors }}</small>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","_unref","_toDisplayString","_createVNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAQA,UAAM,QAAQ;AACd,UAAM,EAAE,SAAS,iBAAiB,oBAAoB,KAAK;AAE3D,UAAM,cAAc;AAAA,MAClB,MACG,QAAQ,MAAM,UAAqD,SAChE,eAAe,QAAQ,MAAM;AAAA,IAAA;AAGrC,aAAS,QAAQ,KAAyB;AACxC,YAAM,WAAW,OAAO;AACxB,WAAK,QAAQ,MAAM,QAAQ,QAAQ,UAAU;AAC3C,qBAAa,QAAQ,MAAM,MAAM,QAAQ;AAAA,MAC3C;AAAA,IACF;;AAIE,aAAAA,UAAA,GAAAC,mBAmBM,OAnBN,YAmBM;AAAA,QAlBSC,MAAA,OAAA,EAAQ,SAArBF,UAAA,GAAAC,mBAEU,SAFV,YAEUE,gBADRD,MAAA,OAAA,EAAQ,KAAK,GAAA,CAAA;QAEJA,MAAA,OAAA,EAAQ,eAAnBF,UAAA,GAAAC,mBAEM,OAFN,YAEME,gBADDD,MAAA,OAAA,EAAQ,WAAW,GAAA,CAAA;QAExBE,YAUEF,MAAA,SAAA,GAAA;AAAA,UATA,OAAM;AAAA,UACL,eAAaA,MAAA,OAAA,EAAQ,QAAI;AAAA,UACzB,UAAQ,CAAGA,MAAA,OAAA,EAAQ;AAAA,UACnB,gBAAY,CAAA,CAAIA,MAAA,OAAA,EAAQ,UAAU;AAAA,UAClC,aAAa,YAAA;AAAA,UACd,gBAAe;AAAA,UACf,cAAa;AAAA,UACb,YAAW;AAAA,UACV,uBAAoB;AAAA,QAAA;QAEVA,MAAA,OAAA,EAAQ,UAArBF,UAAA,GAAAC,mBAAyE,SAAzE,YAAyEE,gBAAzBD,MAAA,OAAA,EAAQ,MAAM,GAAA,CAAA;;;;;"}
1
+ {"version":3,"file":"JfText.vue.js","sources":["../../../src/vue/primevue/JfText.vue"],"sourcesContent":["<script lang=\"ts\">\nexport default {\n name: \"JfText\",\n props: {\n uischema: {\n type: Object,\n required: true,\n },\n schema: {\n type: Object,\n required: true,\n },\n path: {\n type: String,\n required: true,\n },\n enabled: {\n type: Boolean,\n default: undefined,\n },\n renderers: {\n type: Array,\n required: false,\n },\n cells: {\n type: Array,\n required: false,\n },\n config: {\n type: Object,\n required: false,\n },\n },\n};\n</script>\n\n<script setup lang=\"ts\">\nimport type { ControlProps } from \"@jsonforms/vue\";\nimport { useJsonFormsControl } from \"@jsonforms/vue\";\nimport { computed, ref, inject, watch, getCurrentInstance } from \"vue\";\nimport { useProvider } from \"../composables/useProvider\";\nimport { useDerive } from \"../composables/useDerive\";\nimport InputText from \"primevue/inputtext\";\nimport AutoComplete from \"primevue/autocomplete\";\n\n// Access props from the component instance\nconst instance = getCurrentInstance()!;\nconst props = instance.props as unknown as ControlProps;\nconst { control, handleChange } = useJsonFormsControl(props);\n\n// Provider support for autocomplete functionality\nconst binding = computed(() => {\n const provider = control.value.uischema?.options?.provider;\n // Ensure load property is set to 'query' by default for autocomplete\n if (provider && typeof provider === \"object\" && !provider.load) {\n return { ...provider, load: \"query\" };\n }\n return provider;\n});\n\nconst deps = computed(\n () =>\n ((\n (control.value.schema as Record<string, unknown>)?.[\n \"x-provider\"\n ] as Record<string, unknown>\n )?.dependsOn as string[]) ?? [],\n);\nconst depValues = computed(() => {\n return deps.value.map((dep) => {\n // Resolve dependency value from form data using JSON pointer-like path\n const path = dep.startsWith(\"#/\") ? dep.slice(2) : dep;\n const keys = path.replace(/\\//g, \".\").split(\".\");\n let value: unknown = rootData.value;\n for (const key of keys) {\n if (value && typeof value === \"object\" && key in value) {\n value = (value as Record<string, unknown>)[key];\n } else {\n return null;\n }\n }\n return value;\n });\n});\n\n// Get the root form data from JSONForms context for template URL resolution\nconst injectedFormData = inject<{ value: unknown }>(\"formData\", { value: {} });\nconst rootData = computed(() => injectedFormData.value || {});\n\nconst query = ref(\"\");\nconst { items, loading, error, reload } = useProvider(binding, {\n data: rootData,\n path: control.value.path,\n uiQuery: query.value,\n dependsOnValues: depValues.value,\n});\n\nwatch(query, () => {\n if (binding.value?.load === \"query\") reload();\n});\n\nconst placeholder = computed<string | undefined>(() => {\n if (loading.value) return \"Loading…\";\n return (\n (control.value.uischema as { options?: { placeholder?: string } })?.options\n ?.placeholder ?? control.value.description\n );\n});\n\nconst isAutocomplete = computed(() => !!binding.value);\n\n// Add derive functionality\nuseDerive({ control, handleChange });\n\n// Track user interaction\nconst hasInteracted = ref(false);\nconst hasFocused = ref(false);\n\nconst showErrors = computed(() => hasInteracted.value && control.value.errors);\n\nfunction onInput(val: string | undefined) {\n // Convert empty strings to undefined for proper required field validation\n const newValue = val && val.trim() !== \"\" ? val : undefined;\n if (control.value.data !== newValue) {\n handleChange(control.value.path, newValue);\n }\n}\n\nfunction onBlur() {\n if (hasFocused.value) {\n hasInteracted.value = true;\n }\n}\n\nfunction onFocus() {\n hasFocused.value = true;\n}\n\n// Autocomplete specific handlers\nconst onComplete = (event: { query: string }) => {\n query.value = event.query;\n};\n\nconst onSelect = (event: { value?: { value?: unknown } | unknown }) => {\n const newValue = (event.value as { value?: unknown })?.value ?? event.value;\n handleChange(control.value.path, newValue);\n};\n</script>\n\n<template>\n <div class=\"flex flex-column gap-2\">\n <label v-if=\"control.label\" class=\"text-color text-left\">{{\n control.label\n }}</label>\n <div v-if=\"control.description\" class=\"text-color-secondary text-left\">\n {{ control.description }}\n </div>\n <AutoComplete\n v-if=\"isAutocomplete\"\n class=\"w-full\"\n :model-value=\"control.data ?? ''\"\n :suggestions=\"items\"\n option-label=\"label\"\n :placeholder=\"placeholder\"\n :disabled=\"!control.enabled\"\n :aria-invalid=\"!!showErrors || undefined\"\n @complete=\"onComplete\"\n @item-select=\"onSelect\"\n @update:model-value=\"onInput\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n />\n <InputText\n v-else\n class=\"w-full\"\n :model-value=\"control.data ?? ''\"\n :disabled=\"!control.enabled\"\n :aria-invalid=\"!!showErrors || undefined\"\n :placeholder=\"placeholder\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n @update:model-value=\"onInput\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n />\n <small v-if=\"error\" class=\"p-error\" role=\"alert\">Failed: {{ error }}</small>\n <small v-else-if=\"showErrors\" class=\"p-error\">{{ control.errors }}</small>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","_unref","_toDisplayString","_createBlock"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AACA,MAAA,cAAe;AAAA,EACb,MAAM;AAAA,EACN,OAAO;AAAA,IACL,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,IAEZ,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,IAEZ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,IAEZ,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,IAEX,WAAW;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,IAEZ,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,IAEZ,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,EACZ;AAEJ;;;;AAaA,UAAM,WAAW,mBAAA;AACjB,UAAM,QAAQ,SAAS;AACvB,UAAM,EAAE,SAAS,iBAAiB,oBAAoB,KAAK;AAG3D,UAAM,UAAU,SAAS,MAAM;AAC7B,YAAM,WAAW,QAAQ,MAAM,UAAU,SAAS;AAElD,UAAI,YAAY,OAAO,aAAa,YAAY,CAAC,SAAS,MAAM;AAC9D,eAAO,EAAE,GAAG,UAAU,MAAM,QAAA;AAAA,MAC9B;AACA,aAAO;AAAA,IACT,CAAC;AAED,UAAM,OAAO;AAAA,MACX,MAEK,QAAQ,MAAM,SACb,YACF,GACC,aAA0B,CAAA;AAAA,IAAC;AAElC,UAAM,YAAY,SAAS,MAAM;AAC/B,aAAO,KAAK,MAAM,IAAI,CAAC,QAAQ;AAE7B,cAAM,OAAO,IAAI,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI;AACnD,cAAM,OAAO,KAAK,QAAQ,OAAO,GAAG,EAAE,MAAM,GAAG;AAC/C,YAAI,QAAiB,SAAS;AAC9B,mBAAW,OAAO,MAAM;AACtB,cAAI,SAAS,OAAO,UAAU,YAAY,OAAO,OAAO;AACtD,oBAAS,MAAkC,GAAG;AAAA,UAChD,OAAO;AACL,mBAAO;AAAA,UACT;AAAA,QACF;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH,CAAC;AAGD,UAAM,mBAAmB,OAA2B,YAAY,EAAE,OAAO,CAAA,GAAI;AAC7E,UAAM,WAAW,SAAS,MAAM,iBAAiB,SAAS,CAAA,CAAE;AAE5D,UAAM,QAAQ,IAAI,EAAE;AACpB,UAAM,EAAE,OAAO,SAAS,OAAO,OAAA,IAAW,YAAY,SAAS;AAAA,MAC7D,MAAM;AAAA,MACN,MAAM,QAAQ,MAAM;AAAA,MACpB,SAAS,MAAM;AAAA,MACf,iBAAiB,UAAU;AAAA,IAAA,CAC5B;AAED,UAAM,OAAO,MAAM;AACjB,UAAI,QAAQ,OAAO,SAAS,QAAS,QAAA;AAAA,IACvC,CAAC;AAED,UAAM,cAAc,SAA6B,MAAM;AACrD,UAAI,QAAQ,MAAO,QAAO;AAC1B,aACG,QAAQ,MAAM,UAAqD,SAChE,eAAe,QAAQ,MAAM;AAAA,IAErC,CAAC;AAED,UAAM,iBAAiB,SAAS,MAAM,CAAC,CAAC,QAAQ,KAAK;AAGrD,cAAU,EAAE,SAAS,cAAc;AAGnC,UAAM,gBAAgB,IAAI,KAAK;AAC/B,UAAM,aAAa,IAAI,KAAK;AAE5B,UAAM,aAAa,SAAS,MAAM,cAAc,SAAS,QAAQ,MAAM,MAAM;AAE7E,aAAS,QAAQ,KAAyB;AAExC,YAAM,WAAW,OAAO,IAAI,KAAA,MAAW,KAAK,MAAM;AAClD,UAAI,QAAQ,MAAM,SAAS,UAAU;AACnC,qBAAa,QAAQ,MAAM,MAAM,QAAQ;AAAA,MAC3C;AAAA,IACF;AAEA,aAAS,SAAS;AAChB,UAAI,WAAW,OAAO;AACpB,sBAAc,QAAQ;AAAA,MACxB;AAAA,IACF;AAEA,aAAS,UAAU;AACjB,iBAAW,QAAQ;AAAA,IACrB;AAGA,UAAM,aAAa,CAAC,UAA6B;AAC/C,YAAM,QAAQ,MAAM;AAAA,IACtB;AAEA,UAAM,WAAW,CAAC,UAAqD;AACrE,YAAM,WAAY,MAAM,OAA+B,SAAS,MAAM;AACtE,mBAAa,QAAQ,MAAM,MAAM,QAAQ;AAAA,IAC3C;;AAIE,aAAAA,UAAA,GAAAC,mBAsCM,OAtCN,YAsCM;AAAA,QArCSC,MAAA,OAAA,EAAQ,SAArBF,UAAA,GAAAC,mBAEU,SAFV,YAEUE,gBADRD,MAAA,OAAA,EAAQ,KAAK,GAAA,CAAA;QAEJA,MAAA,OAAA,EAAQ,eAAnBF,UAAA,GAAAC,mBAEM,OAFN,YAEME,gBADDD,MAAA,OAAA,EAAQ,WAAW,GAAA,CAAA;QAGhB,eAAA,sBADRE,YAcEF,MAAA,YAAA,GAAA;AAAA;UAZA,OAAM;AAAA,UACL,eAAaA,MAAA,OAAA,EAAQ,QAAI;AAAA,UACzB,aAAaA,MAAA,KAAA;AAAA,UACd,gBAAa;AAAA,UACZ,aAAa,YAAA;AAAA,UACb,UAAQ,CAAGA,MAAA,OAAA,EAAQ;AAAA,UACnB,gBAAY,CAAA,CAAI,WAAA,SAAc;AAAA,UAC9B;AAAA,UACA,cAAa;AAAA,UACb,uBAAoB;AAAA,UACpB;AAAA,UACA;AAAA,QAAA,wGAEHE,YAaEF,MAAA,SAAA,GAAA;AAAA;UAXA,OAAM;AAAA,UACL,eAAaA,MAAA,OAAA,EAAQ,QAAI;AAAA,UACzB,UAAQ,CAAGA,MAAA,OAAA,EAAQ;AAAA,UACnB,gBAAY,CAAA,CAAI,WAAA,SAAc;AAAA,UAC9B,aAAa,YAAA;AAAA,UACd,gBAAe;AAAA,UACf,cAAa;AAAA,UACb,YAAW;AAAA,UACV,uBAAoB;AAAA,UACpB;AAAA,UACA;AAAA,QAAA;QAEUA,MAAA,KAAA,KAAbF,UAAA,GAAAC,mBAA4E,SAA5E,YAAiD,6BAAWC,MAAA,KAAA,CAAK,GAAA,CAAA,KAC/C,WAAA,SAAlBF,UAAA,GAAAC,mBAA0E,SAA1E,YAA0EE,gBAAzBD,MAAA,OAAA,EAAQ,MAAM,GAAA,CAAA;;;;;"}