@microsoft/fast-html 1.0.0-alpha.20 → 1.0.0-alpha.22
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/README.md +0 -18
- package/dist/dts/components/schema.d.ts +2 -2
- package/dist/dts/components/template.d.ts +8 -4
- package/dist/esm/components/schema.js +10 -9
- package/dist/esm/components/schema.spec.js +75 -42
- package/dist/esm/components/template.js +5 -12
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/fast-html.d.ts +10 -5
- package/dist/fast-html.untrimmed.d.ts +10 -5
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -55,24 +55,6 @@ Example:
|
|
|
55
55
|
|
|
56
56
|
One of the benefits of FAST declarative HTML templates is that the server can be stack agnostic as JavaScript does not need to be interpreted. By default `@microsoft/fast-html` will expect hydratable content and uses comments and datasets for tracking the binding logic. For more information on what that markup should look like, as well as an example of how initial state may be applied, read our [documentation](./RENDERING.md) to understand what markup should be generated for a hydratable experience. For the sake of brevity hydratable markup will be excluded from the README.
|
|
57
57
|
|
|
58
|
-
#### Adding shadowOptions
|
|
59
|
-
|
|
60
|
-
By default `shadowOptions` via the `TemplateElement` will be with `"mode": "open"` once the template has been set. To set each components `shadowOptions` you can pass an `options` object.
|
|
61
|
-
|
|
62
|
-
Example:
|
|
63
|
-
|
|
64
|
-
```typescript
|
|
65
|
-
TemplateElement.options({
|
|
66
|
-
"my-custom-element": {
|
|
67
|
-
shadowOptions: {
|
|
68
|
-
mode: "closed",
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
|
-
}).define({
|
|
72
|
-
name: "f-template",
|
|
73
|
-
});
|
|
74
|
-
```
|
|
75
|
-
|
|
76
58
|
#### Using the RenderableFASTElement
|
|
77
59
|
|
|
78
60
|
The use of `RenderableFASTElement` as a mixin for your custom element will automatically remove the `defer-hydration` attribute signalling for hydration to begin, and if you need to add state before hydration should occur you can make use of the `prepare` method.
|
|
@@ -37,7 +37,7 @@ export interface RepeatCachedPath extends CachedPathCommon {
|
|
|
37
37
|
type: RepeatCachedPathType;
|
|
38
38
|
}
|
|
39
39
|
export type CachedPath = DefaultCachedPath | RepeatCachedPath | AccessCachedPath | EventCachedPath;
|
|
40
|
-
export type CachedPathMap = Map<string, JSONSchema
|
|
40
|
+
export type CachedPathMap = Map<string, Map<string, JSONSchema>>;
|
|
41
41
|
interface RegisterPathConfig {
|
|
42
42
|
rootPropertyName: string;
|
|
43
43
|
pathConfig: CachedPath;
|
|
@@ -57,7 +57,7 @@ export declare class Schema {
|
|
|
57
57
|
/**
|
|
58
58
|
* A JSON schema describing each root schema
|
|
59
59
|
*/
|
|
60
|
-
|
|
60
|
+
static jsonSchemaMap: CachedPathMap;
|
|
61
61
|
constructor(name: string);
|
|
62
62
|
/**
|
|
63
63
|
* Add a path to a schema
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { FASTElement
|
|
1
|
+
import { FASTElement } from "@microsoft/fast-element";
|
|
2
2
|
import "@microsoft/fast-element/install-hydratable-view-templates.js";
|
|
3
3
|
export type ObserverMapOption = "all";
|
|
4
4
|
export interface ElementOptions {
|
|
5
|
-
shadowOptions?: ShadowRootOptions | undefined;
|
|
6
5
|
observerMap?: ObserverMapOption | undefined;
|
|
7
6
|
}
|
|
8
7
|
/**
|
|
@@ -23,13 +22,18 @@ declare class TemplateElement extends FASTElement {
|
|
|
23
22
|
* A dictionary of custom element options
|
|
24
23
|
*/
|
|
25
24
|
static elementOptions: ElementOptionsDictionary;
|
|
26
|
-
private partials;
|
|
27
25
|
/**
|
|
28
26
|
* ObserverMap instance for caching binding paths
|
|
29
27
|
*/
|
|
30
28
|
private observerMap?;
|
|
31
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Default element options
|
|
31
|
+
*/
|
|
32
32
|
private static defaultElementOptions;
|
|
33
|
+
/**
|
|
34
|
+
* Metadata containing JSON schema for properties on a custom eleemnt
|
|
35
|
+
*/
|
|
36
|
+
private schema?;
|
|
33
37
|
static options(elementOptions?: ElementOptionsDictionary): typeof TemplateElement;
|
|
34
38
|
constructor();
|
|
35
39
|
/**
|
|
@@ -9,11 +9,8 @@ export const refPropertyName = "$ref";
|
|
|
9
9
|
*/
|
|
10
10
|
export class Schema {
|
|
11
11
|
constructor(name) {
|
|
12
|
-
/**
|
|
13
|
-
* A JSON schema describing each root schema
|
|
14
|
-
*/
|
|
15
|
-
this.jsonSchemaMap = new Map();
|
|
16
12
|
this.customElementName = name;
|
|
13
|
+
Schema.jsonSchemaMap.set(this.customElementName, new Map());
|
|
17
14
|
}
|
|
18
15
|
/**
|
|
19
16
|
* Add a path to a schema
|
|
@@ -22,11 +19,11 @@ export class Schema {
|
|
|
22
19
|
addPath(config) {
|
|
23
20
|
var _a, _b, _c;
|
|
24
21
|
const splitPath = this.getSplitPath(config.pathConfig.path);
|
|
25
|
-
let schema =
|
|
22
|
+
let schema = Schema.jsonSchemaMap.get(this.customElementName).get(config.rootPropertyName);
|
|
26
23
|
// Create a root level property JSON
|
|
27
24
|
if (!schema) {
|
|
28
25
|
this.addNewSchema(config.rootPropertyName);
|
|
29
|
-
schema =
|
|
26
|
+
schema = Schema.jsonSchemaMap.get(this.customElementName).get(config.rootPropertyName);
|
|
30
27
|
}
|
|
31
28
|
switch (config.pathConfig.type) {
|
|
32
29
|
case "default":
|
|
@@ -80,14 +77,14 @@ export class Schema {
|
|
|
80
77
|
*/
|
|
81
78
|
getSchema(rootPropertyName) {
|
|
82
79
|
var _a;
|
|
83
|
-
return (_a =
|
|
80
|
+
return ((_a = Schema.jsonSchemaMap.get(this.customElementName).get(rootPropertyName)) !== null && _a !== void 0 ? _a : null);
|
|
84
81
|
}
|
|
85
82
|
/**
|
|
86
83
|
* Gets root properties
|
|
87
84
|
* @returns IterableIterator<string>
|
|
88
85
|
*/
|
|
89
86
|
getRootProperties() {
|
|
90
|
-
return
|
|
87
|
+
return Schema.jsonSchemaMap.get(this.customElementName).keys();
|
|
91
88
|
}
|
|
92
89
|
/**
|
|
93
90
|
* Get a path split into property names
|
|
@@ -110,7 +107,7 @@ export class Schema {
|
|
|
110
107
|
* @param propertyName The name of the property to assign this JSON schema to
|
|
111
108
|
*/
|
|
112
109
|
addNewSchema(propertyName) {
|
|
113
|
-
|
|
110
|
+
Schema.jsonSchemaMap.get(this.customElementName).set(propertyName, {
|
|
114
111
|
$schema: "https://json-schema.org/draft/2019-09/schema",
|
|
115
112
|
$id: `https://fast.design/schemas/${this.customElementName}/${propertyName}.json`,
|
|
116
113
|
[defsPropertyName]: {},
|
|
@@ -213,3 +210,7 @@ export class Schema {
|
|
|
213
210
|
return this.getParentContexts(schema, parentParentContext.at(-1), [parentContext, ...contexts]);
|
|
214
211
|
}
|
|
215
212
|
}
|
|
213
|
+
/**
|
|
214
|
+
* A JSON schema describing each root schema
|
|
215
|
+
*/
|
|
216
|
+
Schema.jsonSchemaMap = new Map();
|
|
@@ -75,8 +75,41 @@ test.describe("Schema", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
75
75
|
expect((_b = schemaA.$defs) === null || _b === void 0 ? void 0 : _b["item"].$fast_context).toEqual("items");
|
|
76
76
|
expect((_c = schemaA.$defs) === null || _c === void 0 ? void 0 : _c["item"].$fast_parent_contexts).toEqual([null]);
|
|
77
77
|
}));
|
|
78
|
+
test("should add an object to a context in a schema", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
79
|
+
var _d, _e, _f, _g, _h, _j;
|
|
80
|
+
const schema = new Schema("my-custom-element");
|
|
81
|
+
schema.addPath({
|
|
82
|
+
rootPropertyName: "items",
|
|
83
|
+
pathConfig: {
|
|
84
|
+
type: "repeat",
|
|
85
|
+
path: "items",
|
|
86
|
+
currentContext: "item",
|
|
87
|
+
parentContext: null,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
schema.addPath({
|
|
91
|
+
rootPropertyName: "items",
|
|
92
|
+
pathConfig: {
|
|
93
|
+
type: "default",
|
|
94
|
+
path: "item.a.b",
|
|
95
|
+
currentContext: "item",
|
|
96
|
+
parentContext: null,
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
const schemaA = schema.getSchema("items");
|
|
100
|
+
expect(schemaA).toBeDefined();
|
|
101
|
+
expect(schemaA.$ref).toBeDefined();
|
|
102
|
+
expect(schemaA.$ref).toEqual("#/$defs/item");
|
|
103
|
+
expect(schemaA.type).toEqual("array");
|
|
104
|
+
expect((_d = schemaA.$defs) === null || _d === void 0 ? void 0 : _d["item"]).toBeDefined();
|
|
105
|
+
expect((_e = schemaA.$defs) === null || _e === void 0 ? void 0 : _e["item"].$fast_context).toEqual("items");
|
|
106
|
+
expect((_f = schemaA.$defs) === null || _f === void 0 ? void 0 : _f["item"].$fast_parent_contexts).toEqual([null]);
|
|
107
|
+
expect((_g = schemaA.$defs) === null || _g === void 0 ? void 0 : _g["item"].properties).toBeDefined();
|
|
108
|
+
expect((_h = schemaA.$defs) === null || _h === void 0 ? void 0 : _h["item"].properties["a"]).toBeDefined();
|
|
109
|
+
expect((_j = schemaA.$defs) === null || _j === void 0 ? void 0 : _j["item"].properties["a"].type).toEqual("object");
|
|
110
|
+
}));
|
|
78
111
|
test("should add a nested context in a schema", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
79
|
-
var
|
|
112
|
+
var _k, _l, _m, _o, _p;
|
|
80
113
|
const schema = new Schema("my-custom-element");
|
|
81
114
|
schema.addPath({
|
|
82
115
|
rootPropertyName: "a",
|
|
@@ -98,14 +131,14 @@ test.describe("Schema", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
98
131
|
});
|
|
99
132
|
const schemaA = schema.getSchema("a");
|
|
100
133
|
expect(schemaA).toBeDefined();
|
|
101
|
-
expect((
|
|
102
|
-
expect((
|
|
103
|
-
expect((
|
|
104
|
-
expect((
|
|
105
|
-
expect((
|
|
134
|
+
expect((_k = schemaA === null || schemaA === void 0 ? void 0 : schemaA.properties) === null || _k === void 0 ? void 0 : _k["items"]).toBeDefined();
|
|
135
|
+
expect((_l = schemaA === null || schemaA === void 0 ? void 0 : schemaA.properties) === null || _l === void 0 ? void 0 : _l["items"].items.$ref).toEqual("#/$defs/item");
|
|
136
|
+
expect((_m = schemaA.$defs) === null || _m === void 0 ? void 0 : _m["item"]).toBeDefined();
|
|
137
|
+
expect((_o = schemaA.$defs) === null || _o === void 0 ? void 0 : _o["item"].$fast_context).toEqual("items");
|
|
138
|
+
expect((_p = schemaA.$defs) === null || _p === void 0 ? void 0 : _p["item"].$fast_parent_contexts).toEqual([null]);
|
|
106
139
|
}));
|
|
107
140
|
test("should define an object as a nested context in a schema", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
108
|
-
var
|
|
141
|
+
var _q, _r, _s, _t, _u, _v, _w;
|
|
109
142
|
const schema = new Schema("my-custom-element");
|
|
110
143
|
schema.addPath({
|
|
111
144
|
rootPropertyName: "a",
|
|
@@ -136,15 +169,15 @@ test.describe("Schema", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
136
169
|
});
|
|
137
170
|
const schemaA = schema.getSchema("a");
|
|
138
171
|
expect(schemaA).toBeDefined();
|
|
139
|
-
expect((
|
|
140
|
-
expect((
|
|
141
|
-
expect((
|
|
142
|
-
expect((
|
|
143
|
-
expect((
|
|
144
|
-
expect((
|
|
172
|
+
expect((_q = schemaA.$defs) === null || _q === void 0 ? void 0 : _q["item"]).toBeDefined();
|
|
173
|
+
expect((_r = schemaA.$defs) === null || _r === void 0 ? void 0 : _r["item"].$fast_context).toEqual("items");
|
|
174
|
+
expect((_s = schemaA.$defs) === null || _s === void 0 ? void 0 : _s["item"].$fast_parent_contexts).toEqual([null]);
|
|
175
|
+
expect((_t = schemaA.$defs) === null || _t === void 0 ? void 0 : _t["item"].type).toEqual("object");
|
|
176
|
+
expect((_u = schemaA.$defs) === null || _u === void 0 ? void 0 : _u["item"].properties).toBeDefined();
|
|
177
|
+
expect((_w = (_v = schemaA.$defs) === null || _v === void 0 ? void 0 : _v["item"].properties) === null || _w === void 0 ? void 0 : _w["b"]).toBeDefined();
|
|
145
178
|
}));
|
|
146
179
|
test("should define nested contexts in a schema", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
147
|
-
var
|
|
180
|
+
var _x, _y, _z, _0, _1, _2;
|
|
148
181
|
const schema = new Schema("my-custom-element");
|
|
149
182
|
schema.addPath({
|
|
150
183
|
rootPropertyName: "a",
|
|
@@ -175,15 +208,15 @@ test.describe("Schema", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
175
208
|
});
|
|
176
209
|
const schemaA = schema.getSchema("a");
|
|
177
210
|
expect(schemaA).toBeDefined();
|
|
178
|
-
expect((
|
|
179
|
-
expect((
|
|
180
|
-
expect((
|
|
181
|
-
expect((
|
|
182
|
-
expect((
|
|
183
|
-
expect((
|
|
211
|
+
expect((_x = schemaA.$defs) === null || _x === void 0 ? void 0 : _x["user"]).toBeDefined();
|
|
212
|
+
expect((_y = schemaA.$defs) === null || _y === void 0 ? void 0 : _y["user"].$fast_context).toEqual("users");
|
|
213
|
+
expect((_z = schemaA.$defs) === null || _z === void 0 ? void 0 : _z["user"].$fast_parent_contexts).toEqual([null]);
|
|
214
|
+
expect((_0 = schemaA.$defs) === null || _0 === void 0 ? void 0 : _0["post"]).toBeDefined();
|
|
215
|
+
expect((_1 = schemaA.$defs) === null || _1 === void 0 ? void 0 : _1["post"].$fast_context).toEqual("posts");
|
|
216
|
+
expect((_2 = schemaA.$defs) === null || _2 === void 0 ? void 0 : _2["post"].$fast_parent_contexts).toEqual([null, "user"]);
|
|
184
217
|
}));
|
|
185
218
|
test("should define nested contexts with objects in a schema", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
186
|
-
var
|
|
219
|
+
var _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23;
|
|
187
220
|
const schema = new Schema("my-custom-element");
|
|
188
221
|
schema.addPath({
|
|
189
222
|
rootPropertyName: "a",
|
|
@@ -232,26 +265,26 @@ test.describe("Schema", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
232
265
|
});
|
|
233
266
|
const schemaA = schema.getSchema("a");
|
|
234
267
|
expect(schemaA).toBeDefined();
|
|
235
|
-
expect((
|
|
236
|
-
expect((
|
|
237
|
-
expect((
|
|
238
|
-
expect((
|
|
239
|
-
expect((
|
|
240
|
-
expect((
|
|
241
|
-
expect((
|
|
242
|
-
expect((
|
|
243
|
-
expect((
|
|
244
|
-
expect((
|
|
245
|
-
expect((
|
|
246
|
-
expect((
|
|
247
|
-
expect((
|
|
248
|
-
expect((
|
|
249
|
-
expect((
|
|
250
|
-
expect((
|
|
251
|
-
expect((
|
|
252
|
-
expect((
|
|
253
|
-
expect((
|
|
254
|
-
expect((
|
|
255
|
-
expect((
|
|
268
|
+
expect((_3 = schemaA.$defs) === null || _3 === void 0 ? void 0 : _3["user"]).toBeDefined();
|
|
269
|
+
expect((_4 = schemaA.$defs) === null || _4 === void 0 ? void 0 : _4["user"].$fast_context).toEqual("users");
|
|
270
|
+
expect((_5 = schemaA.$defs) === null || _5 === void 0 ? void 0 : _5["user"].$fast_parent_contexts).toEqual([null]);
|
|
271
|
+
expect((_6 = schemaA.$defs) === null || _6 === void 0 ? void 0 : _6["user"].type).toEqual("object");
|
|
272
|
+
expect((_7 = schemaA.$defs) === null || _7 === void 0 ? void 0 : _7["user"].properties).toBeDefined();
|
|
273
|
+
expect((_8 = schemaA.$defs) === null || _8 === void 0 ? void 0 : _8["user"].properties["a"]).toBeDefined();
|
|
274
|
+
expect((_9 = schemaA.$defs) === null || _9 === void 0 ? void 0 : _9["user"].properties["a"].properties["b"]).toBeDefined();
|
|
275
|
+
expect((_10 = schemaA.$defs) === null || _10 === void 0 ? void 0 : _10["post"]).toBeDefined();
|
|
276
|
+
expect((_11 = schemaA.$defs) === null || _11 === void 0 ? void 0 : _11["post"].$fast_context).toEqual("posts");
|
|
277
|
+
expect((_12 = schemaA.$defs) === null || _12 === void 0 ? void 0 : _12["post"].$fast_parent_contexts).toEqual([null, "user"]);
|
|
278
|
+
expect((_13 = schemaA.$defs) === null || _13 === void 0 ? void 0 : _13["post"].type).toEqual("object");
|
|
279
|
+
expect((_14 = schemaA.$defs) === null || _14 === void 0 ? void 0 : _14["post"].properties).toBeDefined();
|
|
280
|
+
expect((_15 = schemaA.$defs) === null || _15 === void 0 ? void 0 : _15["post"].properties["c"]).toBeDefined();
|
|
281
|
+
expect((_16 = schemaA.$defs) === null || _16 === void 0 ? void 0 : _16["post"].properties["c"].properties["d"]).toBeDefined();
|
|
282
|
+
expect((_17 = schemaA.$defs) === null || _17 === void 0 ? void 0 : _17["post"].properties["meta"]).toBeDefined();
|
|
283
|
+
expect((_18 = schemaA.$defs) === null || _18 === void 0 ? void 0 : _18["post"].properties["meta"].properties["tags"]).toBeDefined();
|
|
284
|
+
expect((_19 = schemaA.$defs) === null || _19 === void 0 ? void 0 : _19["post"].properties["meta"].properties["tags"].items).toBeDefined();
|
|
285
|
+
expect((_20 = schemaA.$defs) === null || _20 === void 0 ? void 0 : _20["post"].properties["meta"].properties["tags"].items.$ref).toEqual("#/$defs/tag");
|
|
286
|
+
expect((_21 = schemaA.$defs) === null || _21 === void 0 ? void 0 : _21["tag"]).toBeDefined();
|
|
287
|
+
expect((_22 = schemaA.$defs) === null || _22 === void 0 ? void 0 : _22["tag"].$fast_context).toEqual("tags");
|
|
288
|
+
expect((_23 = schemaA.$defs) === null || _23 === void 0 ? void 0 : _23["tag"].$fast_parent_contexts).toEqual([null, "user", "post"]);
|
|
256
289
|
}));
|
|
257
290
|
}));
|
|
@@ -9,12 +9,10 @@ import { Schema } from "./schema.js";
|
|
|
9
9
|
*/
|
|
10
10
|
class TemplateElement extends FASTElement {
|
|
11
11
|
static options(elementOptions = {}) {
|
|
12
|
-
var _a;
|
|
13
12
|
const result = {};
|
|
14
13
|
for (const key in elementOptions) {
|
|
15
14
|
const value = elementOptions[key];
|
|
16
15
|
result[key] = {
|
|
17
|
-
shadowOptions: (_a = value.shadowOptions) !== null && _a !== void 0 ? _a : TemplateElement.defaultElementOptions.shadowOptions,
|
|
18
16
|
observerMap: value.observerMap,
|
|
19
17
|
};
|
|
20
18
|
}
|
|
@@ -24,7 +22,6 @@ class TemplateElement extends FASTElement {
|
|
|
24
22
|
}
|
|
25
23
|
constructor() {
|
|
26
24
|
super();
|
|
27
|
-
this.partials = {};
|
|
28
25
|
// Ensure elementOptions is initialized if it's empty
|
|
29
26
|
if (!TemplateElement.elementOptions ||
|
|
30
27
|
Object.keys(TemplateElement.elementOptions).length === 0) {
|
|
@@ -45,7 +42,7 @@ class TemplateElement extends FASTElement {
|
|
|
45
42
|
if (typeof this.name === "string") {
|
|
46
43
|
this.schema = new Schema(this.name);
|
|
47
44
|
FASTElementDefinition.registerAsync(this.name).then((value) => __awaiter(this, void 0, void 0, function* () {
|
|
48
|
-
var _a, _b, _c
|
|
45
|
+
var _a, _b, _c;
|
|
49
46
|
if (!((_a = TemplateElement.elementOptions) === null || _a === void 0 ? void 0 : _a[this.name])) {
|
|
50
47
|
TemplateElement.setOptions(this.name);
|
|
51
48
|
}
|
|
@@ -64,9 +61,6 @@ class TemplateElement extends FASTElement {
|
|
|
64
61
|
if (registeredFastElement) {
|
|
65
62
|
// all new elements will get the updated template
|
|
66
63
|
registeredFastElement.template = this.resolveTemplateOrBehavior(strings, values);
|
|
67
|
-
// set shadow options as defined by the f-template
|
|
68
|
-
registeredFastElement.shadowOptions =
|
|
69
|
-
(_d = TemplateElement.elementOptions[this.name]) === null || _d === void 0 ? void 0 : _d.shadowOptions;
|
|
70
64
|
}
|
|
71
65
|
}
|
|
72
66
|
else {
|
|
@@ -272,11 +266,10 @@ class TemplateElement extends FASTElement {
|
|
|
272
266
|
* A dictionary of custom element options
|
|
273
267
|
*/
|
|
274
268
|
TemplateElement.elementOptions = {};
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
};
|
|
269
|
+
/**
|
|
270
|
+
* Default element options
|
|
271
|
+
*/
|
|
272
|
+
TemplateElement.defaultElementOptions = {};
|
|
280
273
|
__decorate([
|
|
281
274
|
attr,
|
|
282
275
|
__metadata("design:type", String)
|