@narrative.io/jsonforms-provider-protocols 1.1.0-beta.11 → 1.1.0-beta.12
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.
|
@@ -5,6 +5,7 @@ import JfEnum from "./JfEnum.vue";
|
|
|
5
5
|
import JfEnumArray from "./JfEnumArray.vue";
|
|
6
6
|
import JfBoolean from "./JfBoolean.vue";
|
|
7
7
|
import type { JsonFormsRendererRegistryEntry } from "@jsonforms/core";
|
|
8
|
+
export declare function createPrimevueRenderers(): JsonFormsRendererRegistryEntry[];
|
|
8
9
|
export declare const primevueRenderers: JsonFormsRendererRegistryEntry[];
|
|
9
10
|
export { JfText, JfTextArea, JfNumber, JfEnum, JfEnumArray, JfBoolean };
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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;AA+BxC,OAAO,KAAK,EAAE,8BAA8B,EAAE,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;AA+BxC,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AAMtE,wBAAgB,uBAAuB,IAAI,8BAA8B,EAAE,CAqF1E;AAKD,eAAO,MAAM,iBAAiB,EAAE,8BAA8B,EA4B7D,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -28,56 +28,98 @@ const injectLayoutStyles = () => {
|
|
|
28
28
|
}
|
|
29
29
|
};
|
|
30
30
|
injectLayoutStyles();
|
|
31
|
-
const isScalarEnum = (s) => {
|
|
32
|
-
const schema = s;
|
|
33
|
-
return schema && schema.type !== "array" && (Array.isArray(schema.enum) || Array.isArray(schema.oneOf));
|
|
34
|
-
};
|
|
35
|
-
const isEnumArray = (s) => {
|
|
36
|
-
const schema = s;
|
|
37
|
-
return schema?.type === "array" && (Array.isArray(schema.items?.enum) || Array.isArray(schema.items?.oneOf));
|
|
38
|
-
};
|
|
39
31
|
const PRIME = 100;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
32
|
+
function createPrimevueRenderers() {
|
|
33
|
+
try {
|
|
34
|
+
const jsonformsCore = require("@jsonforms/core");
|
|
35
|
+
const {
|
|
36
|
+
rankWith,
|
|
37
|
+
isStringControl,
|
|
38
|
+
or,
|
|
39
|
+
isNumberControl,
|
|
40
|
+
isIntegerControl,
|
|
41
|
+
and,
|
|
42
|
+
isControl,
|
|
43
|
+
schemaMatches,
|
|
44
|
+
isBooleanControl
|
|
45
|
+
} = jsonformsCore;
|
|
46
|
+
const isScalarEnum = (s) => {
|
|
47
|
+
const schema = s;
|
|
48
|
+
return schema && schema.type !== "array" && (Array.isArray(schema.enum) || Array.isArray(schema.oneOf));
|
|
49
|
+
};
|
|
50
|
+
const isEnumArray = (s) => {
|
|
51
|
+
const schema = s;
|
|
52
|
+
return schema?.type === "array" && (Array.isArray(schema.items?.enum) || Array.isArray(schema.items?.oneOf));
|
|
53
|
+
};
|
|
54
|
+
const isMultilineString = (uischema, schema) => {
|
|
55
|
+
const controlUischema = uischema;
|
|
56
|
+
return and(
|
|
57
|
+
isStringControl,
|
|
58
|
+
() => controlUischema?.options?.multi === true
|
|
59
|
+
)(
|
|
60
|
+
uischema,
|
|
61
|
+
schema,
|
|
62
|
+
{}
|
|
63
|
+
);
|
|
64
|
+
};
|
|
65
|
+
return [
|
|
66
|
+
// Multiline text has higher priority than regular text
|
|
67
|
+
{ tester: rankWith(PRIME + 4, isMultilineString), renderer: _sfc_main },
|
|
68
|
+
{ tester: rankWith(PRIME + 3, isStringControl), renderer: _sfc_main$1 },
|
|
69
|
+
{
|
|
70
|
+
tester: rankWith(PRIME + 4, or(isNumberControl, isIntegerControl)),
|
|
71
|
+
renderer: _sfc_main$2
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
tester: rankWith(
|
|
75
|
+
PRIME + 5,
|
|
76
|
+
and(isControl, schemaMatches(isScalarEnum))
|
|
77
|
+
),
|
|
78
|
+
renderer: _sfc_main$3
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
tester: rankWith(PRIME + 6, and(isControl, schemaMatches(isEnumArray))),
|
|
82
|
+
renderer: _sfc_main$4
|
|
83
|
+
},
|
|
84
|
+
{ tester: rankWith(PRIME + 3, isBooleanControl), renderer: _sfc_main$5 }
|
|
85
|
+
];
|
|
86
|
+
} catch {
|
|
87
|
+
console.warn(
|
|
88
|
+
"@jsonforms/core not available, returning empty renderers array"
|
|
60
89
|
);
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
90
|
+
return [];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
let _cachedRenderers = null;
|
|
94
|
+
const primevueRenderers = new Proxy(
|
|
95
|
+
[],
|
|
96
|
+
{
|
|
97
|
+
get(target, prop) {
|
|
98
|
+
if (_cachedRenderers === null) {
|
|
99
|
+
_cachedRenderers = createPrimevueRenderers();
|
|
100
|
+
}
|
|
101
|
+
return Reflect.get(_cachedRenderers, prop);
|
|
69
102
|
},
|
|
70
|
-
{
|
|
71
|
-
|
|
72
|
-
|
|
103
|
+
has(target, prop) {
|
|
104
|
+
if (_cachedRenderers === null) {
|
|
105
|
+
_cachedRenderers = createPrimevueRenderers();
|
|
106
|
+
}
|
|
107
|
+
return Reflect.has(_cachedRenderers, prop);
|
|
73
108
|
},
|
|
74
|
-
{
|
|
75
|
-
|
|
76
|
-
|
|
109
|
+
ownKeys() {
|
|
110
|
+
if (_cachedRenderers === null) {
|
|
111
|
+
_cachedRenderers = createPrimevueRenderers();
|
|
112
|
+
}
|
|
113
|
+
return Reflect.ownKeys(_cachedRenderers);
|
|
77
114
|
},
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
115
|
+
getOwnPropertyDescriptor(_, prop) {
|
|
116
|
+
if (_cachedRenderers === null) {
|
|
117
|
+
_cachedRenderers = createPrimevueRenderers();
|
|
118
|
+
}
|
|
119
|
+
return Reflect.getOwnPropertyDescriptor(_cachedRenderers, prop);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
);
|
|
81
123
|
export {
|
|
82
124
|
_sfc_main$5 as JfBoolean,
|
|
83
125
|
_sfc_main$3 as JfEnum,
|
|
@@ -85,6 +127,7 @@ export {
|
|
|
85
127
|
_sfc_main$2 as JfNumber,
|
|
86
128
|
_sfc_main$1 as JfText,
|
|
87
129
|
_sfc_main as JfTextArea,
|
|
130
|
+
createPrimevueRenderers,
|
|
88
131
|
primevueRenderers
|
|
89
132
|
};
|
|
90
133
|
//# 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// Import types only to avoid circular dependencies\nimport type { JsonFormsRendererRegistryEntry } from \"@jsonforms/core\";\n\n// helpers for enum detection\
|
|
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// Import types only to avoid circular dependencies\nimport type { JsonFormsRendererRegistryEntry } from \"@jsonforms/core\";\n\n// Give PrimeVue renderers a high base rank; vanilla commonly uses small ranks (2–5)\nconst PRIME = 100;\n\n// Function to create renderers - called lazily when needed\nexport function createPrimevueRenderers(): JsonFormsRendererRegistryEntry[] {\n // This will only work if @jsonforms/core is already loaded by the consuming application\n // which should be the case since they need it to use JSONForms\n try {\n // Use require.resolve to check if module is available, then use regular import\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const jsonformsCore = require(\"@jsonforms/core\");\n const {\n rankWith,\n isStringControl,\n or,\n isNumberControl,\n isIntegerControl,\n and,\n isControl,\n schemaMatches,\n isBooleanControl,\n } = jsonformsCore;\n\n // helpers for enum detection\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) ||\n 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(\n isStringControl,\n () => controlUischema?.options?.multi === true,\n )(\n uischema as Parameters<typeof isStringControl>[0],\n schema as Parameters<typeof isStringControl>[1],\n {} as Parameters<typeof isStringControl>[2],\n );\n };\n\n return [\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, or(isNumberControl, isIntegerControl)),\n renderer: JfNumber,\n },\n {\n tester: rankWith(\n PRIME + 5,\n and(isControl, schemaMatches(isScalarEnum)),\n ),\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 } catch {\n console.warn(\n \"@jsonforms/core not available, returning empty renderers array\",\n );\n return [];\n }\n}\n\n// For backward compatibility - export a lazy-initialized array\nlet _cachedRenderers: JsonFormsRendererRegistryEntry[] | null = null;\n\nexport const primevueRenderers: JsonFormsRendererRegistryEntry[] = new Proxy(\n [],\n {\n get(target, prop) {\n if (_cachedRenderers === null) {\n _cachedRenderers = createPrimevueRenderers();\n }\n return Reflect.get(_cachedRenderers, prop);\n },\n has(target, prop) {\n if (_cachedRenderers === null) {\n _cachedRenderers = createPrimevueRenderers();\n }\n return Reflect.has(_cachedRenderers, prop);\n },\n ownKeys() {\n if (_cachedRenderers === null) {\n _cachedRenderers = createPrimevueRenderers();\n }\n return Reflect.ownKeys(_cachedRenderers);\n },\n getOwnPropertyDescriptor(_, prop) {\n if (_cachedRenderers === null) {\n _cachedRenderers = createPrimevueRenderers();\n }\n return Reflect.getOwnPropertyDescriptor(_cachedRenderers, prop);\n },\n },\n);\n\nexport { JfText, JfTextArea, JfNumber, JfEnum, JfEnumArray, JfBoolean };\n"],"names":["JfTextArea","JfText","JfNumber","JfEnum","JfEnumArray","JfBoolean"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -36,76 +36,128 @@ injectLayoutStyles();
|
|
|
36
36
|
// Import types only to avoid circular dependencies
|
|
37
37
|
import type { JsonFormsRendererRegistryEntry } from "@jsonforms/core";
|
|
38
38
|
|
|
39
|
-
// helpers for enum detection
|
|
40
|
-
const isScalarEnum = (s?: object) => {
|
|
41
|
-
const schema = s as { type?: string; enum?: unknown[]; oneOf?: unknown[] };
|
|
42
|
-
return (
|
|
43
|
-
schema &&
|
|
44
|
-
schema.type !== "array" &&
|
|
45
|
-
(Array.isArray(schema.enum) || Array.isArray(schema.oneOf))
|
|
46
|
-
);
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
const isEnumArray = (s?: object) => {
|
|
50
|
-
const schema = s as {
|
|
51
|
-
type?: string;
|
|
52
|
-
items?: { enum?: unknown[]; oneOf?: unknown[] };
|
|
53
|
-
};
|
|
54
|
-
return (
|
|
55
|
-
schema?.type === "array" &&
|
|
56
|
-
(Array.isArray(schema.items?.enum) || Array.isArray(schema.items?.oneOf))
|
|
57
|
-
);
|
|
58
|
-
};
|
|
59
|
-
|
|
60
39
|
// Give PrimeVue renderers a high base rank; vanilla commonly uses small ranks (2–5)
|
|
61
40
|
const PRIME = 100;
|
|
62
41
|
|
|
63
|
-
//
|
|
64
|
-
export
|
|
42
|
+
// Function to create renderers - called lazily when needed
|
|
43
|
+
export function createPrimevueRenderers(): JsonFormsRendererRegistryEntry[] {
|
|
44
|
+
// This will only work if @jsonforms/core is already loaded by the consuming application
|
|
45
|
+
// which should be the case since they need it to use JSONForms
|
|
46
|
+
try {
|
|
47
|
+
// Use require.resolve to check if module is available, then use regular import
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
49
|
+
const jsonformsCore = require("@jsonforms/core");
|
|
50
|
+
const {
|
|
51
|
+
rankWith,
|
|
52
|
+
isStringControl,
|
|
53
|
+
or,
|
|
54
|
+
isNumberControl,
|
|
55
|
+
isIntegerControl,
|
|
56
|
+
and,
|
|
57
|
+
isControl,
|
|
58
|
+
schemaMatches,
|
|
59
|
+
isBooleanControl,
|
|
60
|
+
} = jsonformsCore;
|
|
61
|
+
|
|
62
|
+
// helpers for enum detection
|
|
63
|
+
const isScalarEnum = (s?: object) => {
|
|
64
|
+
const schema = s as {
|
|
65
|
+
type?: string;
|
|
66
|
+
enum?: unknown[];
|
|
67
|
+
oneOf?: unknown[];
|
|
68
|
+
};
|
|
69
|
+
return (
|
|
70
|
+
schema &&
|
|
71
|
+
schema.type !== "array" &&
|
|
72
|
+
(Array.isArray(schema.enum) || Array.isArray(schema.oneOf))
|
|
73
|
+
);
|
|
74
|
+
};
|
|
65
75
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
schemaMatches,
|
|
78
|
-
isBooleanControl,
|
|
79
|
-
} = jsonformsCore;
|
|
76
|
+
const isEnumArray = (s?: object) => {
|
|
77
|
+
const schema = s as {
|
|
78
|
+
type?: string;
|
|
79
|
+
items?: { enum?: unknown[]; oneOf?: unknown[] };
|
|
80
|
+
};
|
|
81
|
+
return (
|
|
82
|
+
schema?.type === "array" &&
|
|
83
|
+
(Array.isArray(schema.items?.enum) ||
|
|
84
|
+
Array.isArray(schema.items?.oneOf))
|
|
85
|
+
);
|
|
86
|
+
};
|
|
80
87
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
// helper for multiline detection
|
|
89
|
+
const isMultilineString = (uischema: unknown, schema: unknown) => {
|
|
90
|
+
const controlUischema = uischema as { options?: { multi?: boolean } };
|
|
91
|
+
return and(
|
|
92
|
+
isStringControl,
|
|
93
|
+
() => controlUischema?.options?.multi === true,
|
|
94
|
+
)(
|
|
95
|
+
uischema as Parameters<typeof isStringControl>[0],
|
|
96
|
+
schema as Parameters<typeof isStringControl>[1],
|
|
97
|
+
{} as Parameters<typeof isStringControl>[2],
|
|
98
|
+
);
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
return [
|
|
102
|
+
// Multiline text has higher priority than regular text
|
|
103
|
+
{ tester: rankWith(PRIME + 4, isMultilineString), renderer: JfTextArea },
|
|
104
|
+
{ tester: rankWith(PRIME + 3, isStringControl), renderer: JfText },
|
|
105
|
+
{
|
|
106
|
+
tester: rankWith(PRIME + 4, or(isNumberControl, isIntegerControl)),
|
|
107
|
+
renderer: JfNumber,
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
tester: rankWith(
|
|
111
|
+
PRIME + 5,
|
|
112
|
+
and(isControl, schemaMatches(isScalarEnum)),
|
|
113
|
+
),
|
|
114
|
+
renderer: JfEnum,
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
tester: rankWith(PRIME + 6, and(isControl, schemaMatches(isEnumArray))),
|
|
118
|
+
renderer: JfEnumArray,
|
|
119
|
+
},
|
|
120
|
+
{ tester: rankWith(PRIME + 3, isBooleanControl), renderer: JfBoolean },
|
|
121
|
+
];
|
|
122
|
+
} catch {
|
|
123
|
+
console.warn(
|
|
124
|
+
"@jsonforms/core not available, returning empty renderers array",
|
|
88
125
|
);
|
|
89
|
-
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
90
129
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
130
|
+
// For backward compatibility - export a lazy-initialized array
|
|
131
|
+
let _cachedRenderers: JsonFormsRendererRegistryEntry[] | null = null;
|
|
132
|
+
|
|
133
|
+
export const primevueRenderers: JsonFormsRendererRegistryEntry[] = new Proxy(
|
|
134
|
+
[],
|
|
135
|
+
{
|
|
136
|
+
get(target, prop) {
|
|
137
|
+
if (_cachedRenderers === null) {
|
|
138
|
+
_cachedRenderers = createPrimevueRenderers();
|
|
139
|
+
}
|
|
140
|
+
return Reflect.get(_cachedRenderers, prop);
|
|
141
|
+
},
|
|
142
|
+
has(target, prop) {
|
|
143
|
+
if (_cachedRenderers === null) {
|
|
144
|
+
_cachedRenderers = createPrimevueRenderers();
|
|
145
|
+
}
|
|
146
|
+
return Reflect.has(_cachedRenderers, prop);
|
|
98
147
|
},
|
|
99
|
-
{
|
|
100
|
-
|
|
101
|
-
|
|
148
|
+
ownKeys() {
|
|
149
|
+
if (_cachedRenderers === null) {
|
|
150
|
+
_cachedRenderers = createPrimevueRenderers();
|
|
151
|
+
}
|
|
152
|
+
return Reflect.ownKeys(_cachedRenderers);
|
|
102
153
|
},
|
|
103
|
-
{
|
|
104
|
-
|
|
105
|
-
|
|
154
|
+
getOwnPropertyDescriptor(_, prop) {
|
|
155
|
+
if (_cachedRenderers === null) {
|
|
156
|
+
_cachedRenderers = createPrimevueRenderers();
|
|
157
|
+
}
|
|
158
|
+
return Reflect.getOwnPropertyDescriptor(_cachedRenderers, prop);
|
|
106
159
|
},
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
});
|
|
160
|
+
},
|
|
161
|
+
);
|
|
110
162
|
|
|
111
163
|
export { JfText, JfTextArea, JfNumber, JfEnum, JfEnumArray, JfBoolean };
|