@narrative.io/jsonforms-provider-protocols 1.1.0-beta.13 → 1.1.0-beta.15
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/vue/index.d.ts +1 -1
- package/dist/vue/index.d.ts.map +1 -1
- package/dist/vue/index.js +2 -1
- package/dist/vue/index.js.map +1 -1
- package/dist/vue/primevue/index.d.ts.map +1 -1
- package/dist/vue/primevue/index.js +71 -11
- package/dist/vue/primevue/index.js.map +1 -1
- package/package.json +1 -1
- package/src/vue/index.ts +1 -1
- package/src/vue/primevue/index.ts +26 -7
package/dist/vue/index.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export declare const providerRenderers: {
|
|
|
14
14
|
path: string;
|
|
15
15
|
}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
16
16
|
}[];
|
|
17
|
-
export { primevueRenderers } from "./primevue";
|
|
17
|
+
export { primevueRenderers, registerPrimevueRenderers } from "./primevue";
|
|
18
18
|
export { ProviderAutocomplete, ProviderSelect, ProviderMultiSelect };
|
|
19
19
|
export { useProvider } from "./composables/useProvider";
|
|
20
20
|
export * from "./testers";
|
package/dist/vue/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vue/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AASvD,OAAO,oBAAoB,MAAM,uCAAuC,CAAC;AACzE,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,mBAAmB,MAAM,sCAAsC,CAAC;AAgDvE,eAAO,MAAM,iBAAiB;;;;;;;;;;;GAI7B,CAAC;AAGF,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vue/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AASvD,OAAO,oBAAoB,MAAM,uCAAuC,CAAC;AACzE,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,mBAAmB,MAAM,sCAAsC,CAAC;AAgDvE,eAAO,MAAM,iBAAiB;;;;;;;;;;;GAI7B,CAAC;AAGF,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAG1E,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,mBAAmB,EAAE,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,cAAc,WAAW,CAAC;AAG1B,OAAO,EACL,MAAM,EACN,UAAU,EACV,QAAQ,EACR,MAAM,EACN,WAAW,EACX,SAAS,GACV,MAAM,YAAY,CAAC"}
|
package/dist/vue/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import { rankWith, and, or, isStringControl, isNumberControl, isIntegerControl }
|
|
|
2
2
|
import _sfc_main from "./components/ProviderAutocomplete.vue.js";
|
|
3
3
|
import ProviderSelect from "./components/ProviderSelect.vue.js";
|
|
4
4
|
import ProviderMultiSelect from "./components/ProviderMultiSelect.vue.js";
|
|
5
|
-
import { primevueRenderers } from "./primevue/index.js";
|
|
5
|
+
import { primevueRenderers, registerPrimevueRenderers } from "./primevue/index.js";
|
|
6
6
|
import { useProvider } from "./composables/useProvider.js";
|
|
7
7
|
import { providerTester } from "./testers.js";
|
|
8
8
|
import { default as default2 } from "./primevue/JfText.vue.js";
|
|
@@ -65,6 +65,7 @@ export {
|
|
|
65
65
|
primevueRenderers,
|
|
66
66
|
providerRenderers,
|
|
67
67
|
providerTester,
|
|
68
|
+
registerPrimevueRenderers,
|
|
68
69
|
useProvider
|
|
69
70
|
};
|
|
70
71
|
//# sourceMappingURL=index.js.map
|
package/dist/vue/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/vue/index.ts"],"sourcesContent":["import type { UISchemaElement } from \"@jsonforms/core\";\nimport {\n and,\n isIntegerControl,\n isNumberControl,\n isStringControl,\n or,\n rankWith,\n} from \"@jsonforms/core\";\nimport ProviderAutocomplete from \"./components/ProviderAutocomplete.vue\";\nimport ProviderSelect from \"./components/ProviderSelect.vue\";\nimport ProviderMultiSelect from \"./components/ProviderMultiSelect.vue\";\n\n// Custom tester that checks if provider option exists (as object or boolean)\nconst hasProvider = (uischema: UISchemaElement) => {\n return uischema?.options?.provider !== undefined;\n};\n\n// Create specific testers for each component type\nconst providerSelectTester = rankWith(\n 106, // Higher than PrimeVue base (100) to ensure providers take precedence\n and(\n or(isStringControl, isNumberControl, isIntegerControl),\n hasProvider,\n (uischema) => !uischema?.options?.autocomplete,\n ),\n);\n\nconst providerAutocompleteTester = rankWith(\n 107, // Higher than PrimeVue base (100) to ensure providers take precedence\n and(\n or(isStringControl, isNumberControl, isIntegerControl),\n hasProvider,\n (uischema) => uischema?.options?.autocomplete === true,\n ),\n);\n\n// Custom array tester - check both uischema control type and schema type\nconst isArrayControl = (uischema: UISchemaElement, schema: unknown) => {\n const controlSchema = uischema as { type: string; scope?: string };\n if (controlSchema.type !== \"Control\" || !controlSchema.scope) {\n return false;\n }\n\n // Extract the property schema from the root schema\n const rootSchema = schema as { properties?: Record<string, unknown> };\n const propertyPath = controlSchema.scope.replace(\"#/properties/\", \"\");\n const propertySchema = rootSchema?.properties?.[propertyPath] as {\n type?: string;\n };\n\n return propertySchema?.type === \"array\";\n};\n\nconst providerMultiSelectTester = rankWith(\n 108, // Highest priority for array controls with providers\n and(isArrayControl, hasProvider),\n);\n\nexport const providerRenderers = [\n { tester: providerMultiSelectTester, renderer: ProviderMultiSelect },\n { tester: providerAutocompleteTester, renderer: ProviderAutocomplete },\n { tester: providerSelectTester, renderer: ProviderSelect },\n];\n\n// Export PrimeVue renderers (styles are auto-injected)\nexport { primevueRenderers } from \"./primevue\";\n\n// Export individual components\nexport { ProviderAutocomplete, ProviderSelect, ProviderMultiSelect };\nexport { useProvider } from \"./composables/useProvider\";\nexport * from \"./testers\";\n\n// Export individual PrimeVue components using lazy evaluation to avoid circular deps\nexport {\n JfText,\n JfTextArea,\n JfNumber,\n JfEnum,\n JfEnumArray,\n JfBoolean,\n} from \"./primevue\";\n"],"names":["ProviderAutocomplete"],"mappings":";;;;;;;;;;;;;AAcA,MAAM,cAAc,CAAC,aAA8B;AACjD,SAAO,UAAU,SAAS,aAAa;AACzC;AAGA,MAAM,uBAAuB;AAAA,EAC3B;AAAA;AAAA,EACA;AAAA,IACE,GAAG,iBAAiB,iBAAiB,gBAAgB;AAAA,IACrD;AAAA,IACA,CAAC,aAAa,CAAC,UAAU,SAAS;AAAA,EAAA;AAEtC;AAEA,MAAM,6BAA6B;AAAA,EACjC;AAAA;AAAA,EACA;AAAA,IACE,GAAG,iBAAiB,iBAAiB,gBAAgB;AAAA,IACrD;AAAA,IACA,CAAC,aAAa,UAAU,SAAS,iBAAiB;AAAA,EAAA;AAEtD;AAGA,MAAM,iBAAiB,CAAC,UAA2B,WAAoB;AACrE,QAAM,gBAAgB;AACtB,MAAI,cAAc,SAAS,aAAa,CAAC,cAAc,OAAO;AAC5D,WAAO;AAAA,EACT;AAGA,QAAM,aAAa;AACnB,QAAM,eAAe,cAAc,MAAM,QAAQ,iBAAiB,EAAE;AACpE,QAAM,iBAAiB,YAAY,aAAa,YAAY;AAI5D,SAAO,gBAAgB,SAAS;AAClC;AAEA,MAAM,4BAA4B;AAAA,EAChC;AAAA;AAAA,EACA,IAAI,gBAAgB,WAAW;AACjC;AAEO,MAAM,oBAAoB;AAAA,EAC/B,EAAE,QAAQ,2BAA2B,UAAU,oBAAA;AAAA,EAC/C,EAAE,QAAQ,4BAA4B,UAAUA,UAAA;AAAA,EAChD,EAAE,QAAQ,sBAAsB,UAAU,eAAA;AAC5C;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/vue/index.ts"],"sourcesContent":["import type { UISchemaElement } from \"@jsonforms/core\";\nimport {\n and,\n isIntegerControl,\n isNumberControl,\n isStringControl,\n or,\n rankWith,\n} from \"@jsonforms/core\";\nimport ProviderAutocomplete from \"./components/ProviderAutocomplete.vue\";\nimport ProviderSelect from \"./components/ProviderSelect.vue\";\nimport ProviderMultiSelect from \"./components/ProviderMultiSelect.vue\";\n\n// Custom tester that checks if provider option exists (as object or boolean)\nconst hasProvider = (uischema: UISchemaElement) => {\n return uischema?.options?.provider !== undefined;\n};\n\n// Create specific testers for each component type\nconst providerSelectTester = rankWith(\n 106, // Higher than PrimeVue base (100) to ensure providers take precedence\n and(\n or(isStringControl, isNumberControl, isIntegerControl),\n hasProvider,\n (uischema) => !uischema?.options?.autocomplete,\n ),\n);\n\nconst providerAutocompleteTester = rankWith(\n 107, // Higher than PrimeVue base (100) to ensure providers take precedence\n and(\n or(isStringControl, isNumberControl, isIntegerControl),\n hasProvider,\n (uischema) => uischema?.options?.autocomplete === true,\n ),\n);\n\n// Custom array tester - check both uischema control type and schema type\nconst isArrayControl = (uischema: UISchemaElement, schema: unknown) => {\n const controlSchema = uischema as { type: string; scope?: string };\n if (controlSchema.type !== \"Control\" || !controlSchema.scope) {\n return false;\n }\n\n // Extract the property schema from the root schema\n const rootSchema = schema as { properties?: Record<string, unknown> };\n const propertyPath = controlSchema.scope.replace(\"#/properties/\", \"\");\n const propertySchema = rootSchema?.properties?.[propertyPath] as {\n type?: string;\n };\n\n return propertySchema?.type === \"array\";\n};\n\nconst providerMultiSelectTester = rankWith(\n 108, // Highest priority for array controls with providers\n and(isArrayControl, hasProvider),\n);\n\nexport const providerRenderers = [\n { tester: providerMultiSelectTester, renderer: ProviderMultiSelect },\n { tester: providerAutocompleteTester, renderer: ProviderAutocomplete },\n { tester: providerSelectTester, renderer: ProviderSelect },\n];\n\n// Export PrimeVue renderers (styles are auto-injected)\nexport { primevueRenderers, registerPrimevueRenderers } from \"./primevue\";\n\n// Export individual components\nexport { ProviderAutocomplete, ProviderSelect, ProviderMultiSelect };\nexport { useProvider } from \"./composables/useProvider\";\nexport * from \"./testers\";\n\n// Export individual PrimeVue components using lazy evaluation to avoid circular deps\nexport {\n JfText,\n JfTextArea,\n JfNumber,\n JfEnum,\n JfEnumArray,\n JfBoolean,\n} from \"./primevue\";\n"],"names":["ProviderAutocomplete"],"mappings":";;;;;;;;;;;;;AAcA,MAAM,cAAc,CAAC,aAA8B;AACjD,SAAO,UAAU,SAAS,aAAa;AACzC;AAGA,MAAM,uBAAuB;AAAA,EAC3B;AAAA;AAAA,EACA;AAAA,IACE,GAAG,iBAAiB,iBAAiB,gBAAgB;AAAA,IACrD;AAAA,IACA,CAAC,aAAa,CAAC,UAAU,SAAS;AAAA,EAAA;AAEtC;AAEA,MAAM,6BAA6B;AAAA,EACjC;AAAA;AAAA,EACA;AAAA,IACE,GAAG,iBAAiB,iBAAiB,gBAAgB;AAAA,IACrD;AAAA,IACA,CAAC,aAAa,UAAU,SAAS,iBAAiB;AAAA,EAAA;AAEtD;AAGA,MAAM,iBAAiB,CAAC,UAA2B,WAAoB;AACrE,QAAM,gBAAgB;AACtB,MAAI,cAAc,SAAS,aAAa,CAAC,cAAc,OAAO;AAC5D,WAAO;AAAA,EACT;AAGA,QAAM,aAAa;AACnB,QAAM,eAAe,cAAc,MAAM,QAAQ,iBAAiB,EAAE;AACpE,QAAM,iBAAiB,YAAY,aAAa,YAAY;AAI5D,SAAO,gBAAgB,SAAS;AAClC;AAEA,MAAM,4BAA4B;AAAA,EAChC;AAAA;AAAA,EACA,IAAI,gBAAgB,WAAW;AACjC;AAEO,MAAM,oBAAoB;AAAA,EAC/B,EAAE,QAAQ,2BAA2B,UAAU,oBAAA;AAAA,EAC/C,EAAE,QAAQ,4BAA4B,UAAUA,UAAA;AAAA,EAChD,EAAE,QAAQ,sBAAsB,UAAU,eAAA;AAC5C;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vue/primevue/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,SAAS,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vue/primevue/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAkCxC,eAAO,MAAM,iBAAiB,EAAE,OAAO,EAAO,CAAC;AAK/C,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,GAAG,GAAG,OAAO,EAAE,CA4FvE;AAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import "vue";
|
|
2
|
-
import "
|
|
3
|
-
import "
|
|
4
|
-
import "
|
|
5
|
-
import "
|
|
6
|
-
import "
|
|
7
|
-
import "primevue/inputnumber";
|
|
8
|
-
import "primevue/dropdown";
|
|
9
|
-
import "primevue/multiselect";
|
|
10
|
-
import "primevue/checkbox";
|
|
1
|
+
import _sfc_main$1 from "./JfText.vue.js";
|
|
2
|
+
import _sfc_main from "./JfTextArea.vue.js";
|
|
3
|
+
import _sfc_main$2 from "./JfNumber.vue.js";
|
|
4
|
+
import _sfc_main$3 from "./JfEnum.vue.js";
|
|
5
|
+
import _sfc_main$4 from "./JfEnumArray.vue.js";
|
|
6
|
+
import _sfc_main$5 from "./JfBoolean.vue.js";
|
|
11
7
|
const injectLayoutStyles = () => {
|
|
12
8
|
if (typeof window !== "undefined" && typeof document !== "undefined") {
|
|
13
9
|
if (!document.getElementById("jsonforms-primevue-styles")) {
|
|
@@ -32,8 +28,72 @@ const injectLayoutStyles = () => {
|
|
|
32
28
|
}
|
|
33
29
|
};
|
|
34
30
|
injectLayoutStyles();
|
|
31
|
+
let renderersInitialized = false;
|
|
35
32
|
const primevueRenderers = [];
|
|
33
|
+
function registerPrimevueRenderers(jsonformsCore) {
|
|
34
|
+
if (renderersInitialized) {
|
|
35
|
+
return primevueRenderers;
|
|
36
|
+
}
|
|
37
|
+
const {
|
|
38
|
+
rankWith,
|
|
39
|
+
isStringControl,
|
|
40
|
+
isNumberControl,
|
|
41
|
+
and,
|
|
42
|
+
isControl,
|
|
43
|
+
schemaMatches,
|
|
44
|
+
isBooleanControl
|
|
45
|
+
} = jsonformsCore;
|
|
46
|
+
const PRIME = 100;
|
|
47
|
+
const isNumericControl = (uischema, schema) => {
|
|
48
|
+
const s = schema;
|
|
49
|
+
return s && (s.type === "number" || s.type === "integer" || s.type === "string" && s.multipleOf !== void 0);
|
|
50
|
+
};
|
|
51
|
+
const isScalarEnum = (s) => {
|
|
52
|
+
const schema = s;
|
|
53
|
+
return schema && schema.type !== "array" && (Array.isArray(schema.enum) || Array.isArray(schema.oneOf));
|
|
54
|
+
};
|
|
55
|
+
const isEnumArray = (s) => {
|
|
56
|
+
const schema = s;
|
|
57
|
+
return schema?.type === "array" && (Array.isArray(schema.items?.enum) || Array.isArray(schema.items?.oneOf));
|
|
58
|
+
};
|
|
59
|
+
const isMultilineString = (uischema, schema) => {
|
|
60
|
+
const controlUischema = uischema;
|
|
61
|
+
return and(isStringControl, () => controlUischema?.options?.multi === true)(
|
|
62
|
+
uischema,
|
|
63
|
+
schema,
|
|
64
|
+
{}
|
|
65
|
+
);
|
|
66
|
+
};
|
|
67
|
+
const renderers = [
|
|
68
|
+
// Multiline text has higher priority than regular text
|
|
69
|
+
{ tester: rankWith(PRIME + 4, isMultilineString), renderer: _sfc_main },
|
|
70
|
+
{ tester: rankWith(PRIME + 3, isStringControl), renderer: _sfc_main$1 },
|
|
71
|
+
{
|
|
72
|
+
tester: rankWith(PRIME + 4, and(isControl, isNumericControl)),
|
|
73
|
+
renderer: _sfc_main$2
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
tester: rankWith(PRIME + 5, and(isControl, schemaMatches(isScalarEnum))),
|
|
77
|
+
renderer: _sfc_main$3
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
tester: rankWith(PRIME + 6, and(isControl, schemaMatches(isEnumArray))),
|
|
81
|
+
renderer: _sfc_main$4
|
|
82
|
+
},
|
|
83
|
+
{ tester: rankWith(PRIME + 3, isBooleanControl), renderer: _sfc_main$5 }
|
|
84
|
+
];
|
|
85
|
+
primevueRenderers.splice(0, primevueRenderers.length, ...renderers);
|
|
86
|
+
renderersInitialized = true;
|
|
87
|
+
return renderers;
|
|
88
|
+
}
|
|
36
89
|
export {
|
|
37
|
-
|
|
90
|
+
_sfc_main$5 as JfBoolean,
|
|
91
|
+
_sfc_main$3 as JfEnum,
|
|
92
|
+
_sfc_main$4 as JfEnumArray,
|
|
93
|
+
_sfc_main$2 as JfNumber,
|
|
94
|
+
_sfc_main$1 as JfText,
|
|
95
|
+
_sfc_main as JfTextArea,
|
|
96
|
+
primevueRenderers,
|
|
97
|
+
registerPrimevueRenderers
|
|
38
98
|
};
|
|
39
99
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/vue/primevue/index.ts"],"sourcesContent":["import JfText from \"./JfText.vue\";\nimport JfTextArea from \"./JfTextArea.vue\";\nimport JfNumber from \"./JfNumber.vue\";\nimport JfEnum from \"./JfEnum.vue\";\nimport JfEnumArray from \"./JfEnumArray.vue\";\nimport JfBoolean from \"./JfBoolean.vue\";\n\n// Auto-inject layout styles\nconst injectLayoutStyles = () => {\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n if (!document.getElementById(\"jsonforms-primevue-styles\")) {\n const style = document.createElement(\"style\");\n style.id = \"jsonforms-primevue-styles\";\n style.textContent = `\n/* JSONForms PrimeVue Provider Protocols Layout Styles */\n.vertical-layout {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 1rem;\n width: 100%;\n}\n\n.vertical-layout-item {\n width: 100%;\n}\n `;\n document.head.appendChild(style);\n }\n }\n};\n\n// Inject styles when this module is imported\ninjectLayoutStyles();\n\n//
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/vue/primevue/index.ts"],"sourcesContent":["import JfText from \"./JfText.vue\";\nimport JfTextArea from \"./JfTextArea.vue\";\nimport JfNumber from \"./JfNumber.vue\";\nimport JfEnum from \"./JfEnum.vue\";\nimport JfEnumArray from \"./JfEnumArray.vue\";\nimport JfBoolean from \"./JfBoolean.vue\";\n\n// Auto-inject layout styles\nconst injectLayoutStyles = () => {\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n if (!document.getElementById(\"jsonforms-primevue-styles\")) {\n const style = document.createElement(\"style\");\n style.id = \"jsonforms-primevue-styles\";\n style.textContent = `\n/* JSONForms PrimeVue Provider Protocols Layout Styles */\n.vertical-layout {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 1rem;\n width: 100%;\n}\n\n.vertical-layout-item {\n width: 100%;\n}\n `;\n document.head.appendChild(style);\n }\n }\n};\n\n// Inject styles when this module is imported\ninjectLayoutStyles();\n\n// Track whether renderers have been registered to avoid duplicate registrations\nlet renderersInitialized = false;\n\n// Return empty renderers array initially\nexport const primevueRenderers: unknown[] = [];\n\n// Export a function that can be called by the consumer to register renderers\n// This should only be called once during application initialization\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function registerPrimevueRenderers(jsonformsCore: any): unknown[] {\n // Prevent duplicate registration which causes AJV schema recompilation\n if (renderersInitialized) {\n return primevueRenderers as unknown[];\n }\n\n const {\n rankWith,\n isStringControl,\n isNumberControl,\n and,\n isControl,\n schemaMatches,\n isBooleanControl,\n } = jsonformsCore;\n\n // Give PrimeVue renderers a high base rank; vanilla commonly uses small ranks (2–5)\n const PRIME = 100;\n\n // Create a custom number control tester that avoids AJV integer schema compilation\n // This combines number and integer checks without triggering internal schema creation\n const isNumericControl = (uischema: unknown, schema: unknown) => {\n const s = schema as { type?: string; multipleOf?: number };\n return (\n s &&\n (s.type === \"number\" || \n s.type === \"integer\" || \n (s.type === \"string\" && s.multipleOf !== undefined))\n );\n };\n\n // helpers for enum detection - using simple schema checks instead of JSONForms internal functions\n const isScalarEnum = (s?: object) => {\n const schema = s as {\n type?: string;\n enum?: unknown[];\n oneOf?: unknown[];\n };\n return (\n schema &&\n schema.type !== \"array\" &&\n (Array.isArray(schema.enum) || Array.isArray(schema.oneOf))\n );\n };\n\n const isEnumArray = (s?: object) => {\n const schema = s as {\n type?: string;\n items?: { enum?: unknown[]; oneOf?: unknown[] };\n };\n return (\n schema?.type === \"array\" &&\n (Array.isArray(schema.items?.enum) || Array.isArray(schema.items?.oneOf))\n );\n };\n\n // helper for multiline detection\n const isMultilineString = (uischema: unknown, schema: unknown) => {\n const controlUischema = uischema as { options?: { multi?: boolean } };\n return and(isStringControl, () => controlUischema?.options?.multi === true)(\n uischema as Parameters<typeof isStringControl>[0],\n schema as Parameters<typeof isStringControl>[1],\n {} as Parameters<typeof isStringControl>[2],\n );\n };\n\n const renderers = [\n // Multiline text has higher priority than regular text\n { tester: rankWith(PRIME + 4, isMultilineString), renderer: JfTextArea },\n { tester: rankWith(PRIME + 3, isStringControl), renderer: JfText },\n {\n tester: rankWith(PRIME + 4, and(isControl, isNumericControl)),\n renderer: JfNumber,\n },\n {\n tester: rankWith(PRIME + 5, and(isControl, schemaMatches(isScalarEnum))),\n renderer: JfEnum,\n },\n {\n tester: rankWith(PRIME + 6, and(isControl, schemaMatches(isEnumArray))),\n renderer: JfEnumArray,\n },\n { tester: rankWith(PRIME + 3, isBooleanControl), renderer: JfBoolean },\n ];\n\n // Update the exported array\n primevueRenderers.splice(0, primevueRenderers.length, ...renderers);\n \n // Mark as initialized to prevent duplicate registrations\n renderersInitialized = true;\n\n return renderers;\n}\n\nexport { JfText, JfTextArea, JfNumber, JfEnum, JfEnumArray, JfBoolean };\n"],"names":["JfTextArea","JfText","JfNumber","JfEnum","JfEnumArray","JfBoolean"],"mappings":";;;;;;AAQA,MAAM,qBAAqB,MAAM;AAC/B,MAAI,OAAO,WAAW,eAAe,OAAO,aAAa,aAAa;AACpE,QAAI,CAAC,SAAS,eAAe,2BAA2B,GAAG;AACzD,YAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,YAAM,KAAK;AACX,YAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcpB,eAAS,KAAK,YAAY,KAAK;AAAA,IACjC;AAAA,EACF;AACF;AAGA,mBAAA;AAGA,IAAI,uBAAuB;AAGpB,MAAM,oBAA+B,CAAA;AAKrC,SAAS,0BAA0B,eAA+B;AAEvE,MAAI,sBAAsB;AACxB,WAAO;AAAA,EACT;AAEA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAGJ,QAAM,QAAQ;AAId,QAAM,mBAAmB,CAAC,UAAmB,WAAoB;AAC/D,UAAM,IAAI;AACV,WACE,MACC,EAAE,SAAS,YACX,EAAE,SAAS,aACV,EAAE,SAAS,YAAY,EAAE,eAAe;AAAA,EAE9C;AAGA,QAAM,eAAe,CAAC,MAAe;AACnC,UAAM,SAAS;AAKf,WACE,UACA,OAAO,SAAS,YACf,MAAM,QAAQ,OAAO,IAAI,KAAK,MAAM,QAAQ,OAAO,KAAK;AAAA,EAE7D;AAEA,QAAM,cAAc,CAAC,MAAe;AAClC,UAAM,SAAS;AAIf,WACE,QAAQ,SAAS,YAChB,MAAM,QAAQ,OAAO,OAAO,IAAI,KAAK,MAAM,QAAQ,OAAO,OAAO,KAAK;AAAA,EAE3E;AAGA,QAAM,oBAAoB,CAAC,UAAmB,WAAoB;AAChE,UAAM,kBAAkB;AACxB,WAAO,IAAI,iBAAiB,MAAM,iBAAiB,SAAS,UAAU,IAAI;AAAA,MACxE;AAAA,MACA;AAAA,MACA,CAAA;AAAA,IAAC;AAAA,EAEL;AAEA,QAAM,YAAY;AAAA;AAAA,IAEhB,EAAE,QAAQ,SAAS,QAAQ,GAAG,iBAAiB,GAAG,UAAUA,UAAA;AAAA,IAC5D,EAAE,QAAQ,SAAS,QAAQ,GAAG,eAAe,GAAG,UAAUC,YAAA;AAAA,IAC1D;AAAA,MACE,QAAQ,SAAS,QAAQ,GAAG,IAAI,WAAW,gBAAgB,CAAC;AAAA,MAC5D,UAAUC;AAAAA,IAAA;AAAA,IAEZ;AAAA,MACE,QAAQ,SAAS,QAAQ,GAAG,IAAI,WAAW,cAAc,YAAY,CAAC,CAAC;AAAA,MACvE,UAAUC;AAAAA,IAAA;AAAA,IAEZ;AAAA,MACE,QAAQ,SAAS,QAAQ,GAAG,IAAI,WAAW,cAAc,WAAW,CAAC,CAAC;AAAA,MACtE,UAAUC;AAAAA,IAAA;AAAA,IAEZ,EAAE,QAAQ,SAAS,QAAQ,GAAG,gBAAgB,GAAG,UAAUC,YAAA;AAAA,EAAU;AAIvE,oBAAkB,OAAO,GAAG,kBAAkB,QAAQ,GAAG,SAAS;AAGlE,yBAAuB;AAEvB,SAAO;AACT;"}
|
package/package.json
CHANGED
package/src/vue/index.ts
CHANGED
|
@@ -64,7 +64,7 @@ export const providerRenderers = [
|
|
|
64
64
|
];
|
|
65
65
|
|
|
66
66
|
// Export PrimeVue renderers (styles are auto-injected)
|
|
67
|
-
export { primevueRenderers } from "./primevue";
|
|
67
|
+
export { primevueRenderers, registerPrimevueRenderers } from "./primevue";
|
|
68
68
|
|
|
69
69
|
// Export individual components
|
|
70
70
|
export { ProviderAutocomplete, ProviderSelect, ProviderMultiSelect };
|
|
@@ -33,21 +33,25 @@ const injectLayoutStyles = () => {
|
|
|
33
33
|
// Inject styles when this module is imported
|
|
34
34
|
injectLayoutStyles();
|
|
35
35
|
|
|
36
|
-
//
|
|
37
|
-
|
|
36
|
+
// Track whether renderers have been registered to avoid duplicate registrations
|
|
37
|
+
let renderersInitialized = false;
|
|
38
38
|
|
|
39
|
+
// Return empty renderers array initially
|
|
39
40
|
export const primevueRenderers: unknown[] = [];
|
|
40
41
|
|
|
41
42
|
// Export a function that can be called by the consumer to register renderers
|
|
42
|
-
// This
|
|
43
|
+
// This should only be called once during application initialization
|
|
43
44
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
45
|
export function registerPrimevueRenderers(jsonformsCore: any): unknown[] {
|
|
46
|
+
// Prevent duplicate registration which causes AJV schema recompilation
|
|
47
|
+
if (renderersInitialized) {
|
|
48
|
+
return primevueRenderers as unknown[];
|
|
49
|
+
}
|
|
50
|
+
|
|
45
51
|
const {
|
|
46
52
|
rankWith,
|
|
47
53
|
isStringControl,
|
|
48
|
-
or,
|
|
49
54
|
isNumberControl,
|
|
50
|
-
isIntegerControl,
|
|
51
55
|
and,
|
|
52
56
|
isControl,
|
|
53
57
|
schemaMatches,
|
|
@@ -57,7 +61,19 @@ export function registerPrimevueRenderers(jsonformsCore: any): unknown[] {
|
|
|
57
61
|
// Give PrimeVue renderers a high base rank; vanilla commonly uses small ranks (2–5)
|
|
58
62
|
const PRIME = 100;
|
|
59
63
|
|
|
60
|
-
//
|
|
64
|
+
// Create a custom number control tester that avoids AJV integer schema compilation
|
|
65
|
+
// This combines number and integer checks without triggering internal schema creation
|
|
66
|
+
const isNumericControl = (uischema: unknown, schema: unknown) => {
|
|
67
|
+
const s = schema as { type?: string; multipleOf?: number };
|
|
68
|
+
return (
|
|
69
|
+
s &&
|
|
70
|
+
(s.type === "number" ||
|
|
71
|
+
s.type === "integer" ||
|
|
72
|
+
(s.type === "string" && s.multipleOf !== undefined))
|
|
73
|
+
);
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// helpers for enum detection - using simple schema checks instead of JSONForms internal functions
|
|
61
77
|
const isScalarEnum = (s?: object) => {
|
|
62
78
|
const schema = s as {
|
|
63
79
|
type?: string;
|
|
@@ -97,7 +113,7 @@ export function registerPrimevueRenderers(jsonformsCore: any): unknown[] {
|
|
|
97
113
|
{ tester: rankWith(PRIME + 4, isMultilineString), renderer: JfTextArea },
|
|
98
114
|
{ tester: rankWith(PRIME + 3, isStringControl), renderer: JfText },
|
|
99
115
|
{
|
|
100
|
-
tester: rankWith(PRIME + 4,
|
|
116
|
+
tester: rankWith(PRIME + 4, and(isControl, isNumericControl)),
|
|
101
117
|
renderer: JfNumber,
|
|
102
118
|
},
|
|
103
119
|
{
|
|
@@ -113,6 +129,9 @@ export function registerPrimevueRenderers(jsonformsCore: any): unknown[] {
|
|
|
113
129
|
|
|
114
130
|
// Update the exported array
|
|
115
131
|
primevueRenderers.splice(0, primevueRenderers.length, ...renderers);
|
|
132
|
+
|
|
133
|
+
// Mark as initialized to prevent duplicate registrations
|
|
134
|
+
renderersInitialized = true;
|
|
116
135
|
|
|
117
136
|
return renderers;
|
|
118
137
|
}
|