@rooted/elements 1.0.0-alpha.5 → 1.0.0-alpha.7
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/elements.d.mts +92 -58
- package/dist/elements.mjs +97 -110
- package/dist/events.d.mts +1 -1
- package/dist/events.mjs +1 -3
- package/package.json +7 -7
- package/readme.md +20 -3
package/dist/elements.d.mts
CHANGED
|
@@ -1,29 +1,49 @@
|
|
|
1
|
-
import { ElementOnHandlers } from
|
|
2
|
-
|
|
1
|
+
import { ElementOnHandlers } from "@rooted/events";
|
|
2
|
+
//#region src/aria.d.mts
|
|
3
3
|
type StripAria<S extends string> = S extends `aria${infer Rest}` ? Uncapitalize<Rest> : S;
|
|
4
|
-
type AriaStringProperties = {
|
|
5
|
-
[P in keyof ARIAMixin as ARIAMixin[P] extends string | null ? StripAria<string & P> : never]?: string | null;
|
|
6
|
-
};
|
|
4
|
+
type AriaStringProperties = { [P in keyof ARIAMixin as ARIAMixin[P] extends string | null ? StripAria<string & P> : never]?: string | null; };
|
|
7
5
|
type AriaIdReferenceProperties = {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
6
|
+
/** {@inheritdoc ARIAMixin['ariaActiveDescendantElement']} */
|
|
7
|
+
activeDescendant?: string | Element | null;
|
|
8
|
+
/** {@inheritdoc ARIAMixin['ariaControlsElements']} */
|
|
9
|
+
controls?: string | Element | null;
|
|
10
|
+
/** {@inheritdoc ARIAMixin['ariaDescribedByElements']} */
|
|
11
|
+
describedBy?: string | Element | null;
|
|
12
|
+
/** {@inheritdoc ARIAMixin['ariaDetailsElements']} */
|
|
13
|
+
details?: string | Element | null;
|
|
14
|
+
/** {@inheritdoc ARIAMixin['ariaErrorMessageElements']} */
|
|
15
|
+
errorMessage?: string | Element | null;
|
|
16
|
+
/** {@inheritdoc ARIAMixin['ariaFlowToElements']} */
|
|
17
|
+
flowTo?: string | Element | null;
|
|
18
|
+
/** {@inheritdoc ARIAMixin['ariaLabelledByElements']} */
|
|
19
|
+
labelledBy?: string | Element | null;
|
|
20
|
+
/** {@inheritdoc ARIAMixin['ariaOwnsElements']} */
|
|
21
|
+
owns?: string | Element | null;
|
|
24
22
|
};
|
|
23
|
+
/**
|
|
24
|
+
* Shape of the `aria` prop on `element(...)`. Accepts every ARIA attribute
|
|
25
|
+
* defined on `ARIAMixin`, with the `aria` prefix stripped (so `aria-label`
|
|
26
|
+
* becomes `label`, `aria-describedby` becomes `describedBy`).
|
|
27
|
+
*
|
|
28
|
+
* For ID-reference attributes (`aria-labelledby`, `aria-controls`, etc.) the
|
|
29
|
+
* value can be a string ID or an `Element` reference. Element references are
|
|
30
|
+
* set via the IDL reflection property when supported, falling back to the
|
|
31
|
+
* attribute value otherwise.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* element('button', {
|
|
36
|
+
* aria: {
|
|
37
|
+
* label: 'Save',
|
|
38
|
+
* describedBy: helpTextElement,
|
|
39
|
+
* pressed: 'false',
|
|
40
|
+
* },
|
|
41
|
+
* })
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
25
44
|
type Aria = AriaStringProperties & AriaIdReferenceProperties;
|
|
26
|
-
|
|
45
|
+
//#endregion
|
|
46
|
+
//#region src/classes.d.mts
|
|
27
47
|
/**
|
|
28
48
|
* A single CSS class value. Falsy variants (`undefined` and `null`) are
|
|
29
49
|
* automatically filtered out when building a class list, so conditional
|
|
@@ -67,60 +87,74 @@ declare function cssClass(className: string): CssClass;
|
|
|
67
87
|
declare function cssClass(className: string, visible: boolean | null | undefined): CssClass;
|
|
68
88
|
declare function cssClass(className: CssClass): CssClass;
|
|
69
89
|
declare function cssClass(className: CssClass, visible: boolean | null | undefined): CssClass;
|
|
70
|
-
|
|
90
|
+
//#endregion
|
|
91
|
+
//#region src/element-type-utilities.d.mts
|
|
71
92
|
type IfEquals<X, Y, A = X, B = never> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? A : B;
|
|
72
|
-
type NonWritableKeys<T> = {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}, {
|
|
76
|
-
-readonly [Q in P]: T[P];
|
|
77
|
-
}, never, P>;
|
|
78
|
-
}[keyof T];
|
|
79
|
-
type FunctionKeys<T> = {
|
|
80
|
-
[P in keyof T]: NonNullable<T[P]> extends (...arguments_: never[]) => unknown ? P : never;
|
|
81
|
-
}[keyof T];
|
|
82
|
-
type OnHandlerKeys<T> = {
|
|
83
|
-
[P in keyof T]: P extends `on${string}` ? P : never;
|
|
84
|
-
}[keyof T];
|
|
93
|
+
type NonWritableKeys<T> = { [P in keyof T]-?: IfEquals<{ [Q in P]: T[P]; }, { -readonly [Q in P]: T[P]; }, never, P>; }[keyof T];
|
|
94
|
+
type FunctionKeys<T> = { [P in keyof T]: NonNullable<T[P]> extends ((...arguments_: never[]) => unknown) ? P : never; }[keyof T];
|
|
95
|
+
type OnHandlerKeys<T> = { [P in keyof T]: P extends `on${string}` ? P : never; }[keyof T];
|
|
85
96
|
/** A subset of CSSStyleDeclaration containing only the individual CSS style properties. */
|
|
86
|
-
type InlineStyle = {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
97
|
+
type InlineStyle = { [K in keyof CSSStyleDeclaration as CSSStyleDeclaration[K] extends string ? K extends 'cssText' ? never : K : never]?: string; };
|
|
98
|
+
//#endregion
|
|
99
|
+
//#region src/html-element-properties.d.mts
|
|
90
100
|
type SanitizedHtmlProperties<TElement extends HTMLElement> = Omit<TElement, NonWritableKeys<TElement> | FunctionKeys<TElement> | Exclude<keyof ARIAMixin, 'role'> | OnHandlerKeys<TElement> | 'children' | 'className' | 'classList' | 'style'>;
|
|
91
101
|
type HtmlElementPropertiesMapped<TElement extends HTMLElement> = Partial<SanitizedHtmlProperties<TElement>> & {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
102
|
+
[key: string]: unknown;
|
|
103
|
+
children?: Array<Node | string> | Node | string;
|
|
104
|
+
classes?: CssClasses;
|
|
105
|
+
style?: InlineStyle;
|
|
106
|
+
aria?: Aria;
|
|
107
|
+
on?: ElementOnHandlers<TElement>;
|
|
97
108
|
};
|
|
109
|
+
/**
|
|
110
|
+
* Typed properties for the HTML element with tag `KElement`. Returned as the
|
|
111
|
+
* second argument to `element(tag, props)` for HTML tags.
|
|
112
|
+
*
|
|
113
|
+
* Includes the writable DOM properties of the element, plus rooted's own
|
|
114
|
+
* `classes`, `style`, `aria`, `on`, and `children` shorthands. Unknown keys
|
|
115
|
+
* (`data-*`, custom attributes) fall through as strings.
|
|
116
|
+
*/
|
|
98
117
|
type HtmlElementProperties<KElement extends keyof HTMLElementTagNameMap> = HtmlElementPropertiesMapped<HTMLElementTagNameMap[KElement]>;
|
|
99
|
-
|
|
118
|
+
//#endregion
|
|
119
|
+
//#region src/svg-element-properties.d.mts
|
|
120
|
+
/**
|
|
121
|
+
* Tag names accepted by `element(...)` for SVG. Use `'svg'` for the root
|
|
122
|
+
* element and `'svg:<name>'` for the rest. The prefix avoids collisions with
|
|
123
|
+
* same-named HTML tags (`a`, `title`, etc.).
|
|
124
|
+
*/
|
|
100
125
|
type SvgTagName = 'svg' | `svg:${Exclude<keyof SVGElementTagNameMap, 'svg'>}`;
|
|
126
|
+
/** Maps a {@link SvgTagName} back to the concrete SVG element class. */
|
|
101
127
|
type SvgTagElement<T extends SvgTagName> = T extends 'svg' ? SVGSVGElement : T extends `svg:${infer K extends keyof SVGElementTagNameMap}` ? SVGElementTagNameMap[K] : never;
|
|
102
128
|
type SanitizedSvgProperties<TElement extends SVGElement> = Omit<TElement, NonWritableKeys<TElement> | FunctionKeys<TElement> | Exclude<keyof ARIAMixin, 'role'> | OnHandlerKeys<TElement> | 'children' | 'className' | 'classList' | 'style'>;
|
|
103
129
|
type SvgElementPropertiesMapped<TElement extends SVGElement> = Partial<SanitizedSvgProperties<TElement>> & {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
130
|
+
[key: string]: unknown;
|
|
131
|
+
classes?: CssClasses;
|
|
132
|
+
style?: InlineStyle;
|
|
133
|
+
children?: Array<Node | string> | Node | string;
|
|
134
|
+
aria?: Aria;
|
|
135
|
+
on?: ElementOnHandlers<TElement>;
|
|
110
136
|
};
|
|
137
|
+
/**
|
|
138
|
+
* Typed properties for the SVG element with tag `K`. Returned as the second
|
|
139
|
+
* argument to `element(tag, props)` for SVG tags. Unknown keys fall through
|
|
140
|
+
* to `setAttribute`, so SVG-specific attributes (`viewBox`, `d`, `href`)
|
|
141
|
+
* work without special-casing.
|
|
142
|
+
*/
|
|
111
143
|
type SvgElementProperties<K extends SvgTagName> = SvgElementPropertiesMapped<SvgTagElement<K> & SVGElement>;
|
|
112
|
-
|
|
144
|
+
//#endregion
|
|
145
|
+
//#region src/element-factory.d.mts
|
|
113
146
|
type ElementCreator = (key: string, ns?: string) => Element;
|
|
114
147
|
/**
|
|
115
148
|
* The overloaded function type returned by {@link createElementFactory}.
|
|
116
149
|
* Accepts HTML or SVG tag names and returns the matching element type.
|
|
117
150
|
*/
|
|
118
151
|
interface ElementCreatorFunction {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
152
|
+
(tag: 'svg', properties?: SvgElementProperties<'svg'>): SVGSVGElement;
|
|
153
|
+
<K extends Exclude<SvgTagName, 'svg'>>(tag: K, properties?: SvgElementProperties<K>): SvgTagElement<K>;
|
|
154
|
+
<K extends keyof HTMLElementTagNameMap>(tag: K, properties?: NoInfer<HtmlElementProperties<K>>): HTMLElementTagNameMap[K];
|
|
122
155
|
}
|
|
123
156
|
type ElementFactory = ElementCreatorFunction;
|
|
124
157
|
declare function createElementFactory(constructElement: ElementCreator, signal: AbortSignal): ElementCreatorFunction;
|
|
125
|
-
|
|
126
|
-
export { type Aria,
|
|
158
|
+
//#endregion
|
|
159
|
+
export { type Aria, CssClass, CssClasses, ElementCreator, ElementCreatorFunction, ElementFactory, type HtmlElementProperties, type SvgElementProperties, type SvgTagElement, type SvgTagName, createElementFactory, cssClass };
|
|
160
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudHMuZC5tdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FyaWEubXRzIiwiLi4vc3JjL2NsYXNzZXMubXRzIiwiLi4vc3JjL2VsZW1lbnQtdHlwZS11dGlsaXRpZXMubXRzIiwiLi4vc3JjL2h0bWwtZWxlbWVudC1wcm9wZXJ0aWVzLm10cyIsIi4uL3NyYy9zdmctZWxlbWVudC1wcm9wZXJ0aWVzLm10cyIsIi4uL3NyYy9lbGVtZW50LWZhY3RvcnkubXRzIl0sIm1hcHBpbmdzIjoiOztLQUFLLFVBQVUsb0JBQW9CLHVCQUF1QixTQUFTLGFBQWEsUUFBUTtLQUVuRiwwQkFDSCxXQUFXLGFBQWEsVUFBVSwyQkFBMkIsbUJBQW1CO0tBSTdFOztFQUVKLDRCQUE0Qjs7RUFFNUIsb0JBQW9COztFQUVwQix1QkFBdUI7O0VBRXZCLG1CQUFtQjs7RUFFbkIsd0JBQXdCOztFQUV4QixrQkFBa0I7O0VBRWxCLHNCQUFzQjs7RUFFdEIsZ0JBQWdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXdCTCxPQUFPLHVCQUF1Qjs7Ozs7Ozs7S0MxQzlCOzs7Ozs7Ozs7OztLQVlBLGFBQWEsTUFBTSxZQUFZOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQkF3QjNCLFNBQVMsb0JBQW9CO2lCQUM3QixTQUFTLG1CQUFtQixzQ0FBc0M7aUJBQ2xFLFNBQVMsV0FBVyxXQUFXO2lCQUMvQixTQUFTLFdBQVcsVUFBVSxzQ0FBc0M7OztLQzVDeEUsU0FBUyxHQUFHLEdBQUcsSUFBSSxHQUFHLGVBQWUsUUFBUSxVQUFVLHFCQUFxQixRQUFRLFVBQVUsYUFBYSxJQUFJO0tBQy9HLGdCQUFnQixRQUMxQixXQUFXLE1BQU0sWUFBWSxLQUFLLElBQUksRUFBRSxvQkFBbUIsS0FBSyxJQUFJLEVBQUUsY0FBYSxZQUM3RTtLQUNJLGFBQWEsUUFDdkIsV0FBVyxJQUFJLFlBQVksRUFBRSxpQkFBZ0IsbUNBQWtDLG1CQUN6RTtLQUNJLGNBQWMsUUFBUSxXQUFXLElBQUksMEJBQTBCLG1CQUFrQjs7S0FHakYsaUJBQWlCLFdBQVcsdUJBQXVCLG9CQUFvQixvQkFBb0IsOEJBQThCOzs7S0NKaEksd0JBQXdCLGlCQUFpQixlQUFlLEtBQzVELFVBQ0UsZ0JBQWdCLFlBQ2hCLGFBQWEsWUFDYixjQUFjLHFCQUNkLGNBQWM7S0FJWiw0QkFBNEIsaUJBQWlCLGVBQy9DLFFBQVEsd0JBQXdCO0dBR2hDO0VBQ0QsV0FBVyxNQUFNLGlCQUFpQjtFQUNsQyxVQUFVO0VBQ1YsUUFBUTtFQUNSLE9BQU87RUFDUCxLQUFLLGtCQUFrQjs7Ozs7Ozs7OztLQVdiLHNCQUFzQix1QkFBdUIseUJBQ3RELDRCQUE0QixzQkFBc0I7Ozs7Ozs7O0tDekJ6Qyw0QkFBNEIsY0FBYzs7S0FHMUMsY0FBYyxVQUFVLGNBQ2pDLGtCQUFrQixnQkFDbEIsdUJBQXVCLGdCQUFnQix5QkFBeUIscUJBQXFCO0tBR25GLHVCQUF1QixpQkFBaUIsY0FBYyxLQUMxRCxVQUNFLGdCQUFnQixZQUNoQixhQUFhLFlBQ2IsY0FBYyxxQkFDZCxjQUFjO0tBSVosMkJBQTJCLGlCQUFpQixjQUM5QyxRQUFRLHVCQUF1QjtHQUcvQjtFQUNELFVBQVU7RUFDVixRQUFRO0VBQ1IsV0FBVyxNQUFNLGlCQUFpQjtFQUNsQyxPQUFPO0VBQ1AsS0FBSyxrQkFBa0I7Ozs7Ozs7O0tBU2IscUJBQXFCLFVBQVUsY0FDeEMsMkJBQTJCLGNBQWMsS0FBSzs7O0tDUHJDLGtCQUFrQixhQUFhLGdCQUFnQjs7Ozs7VUFNMUM7R0FDZixZQUFZLGFBQWEsOEJBQThCO0dBQ3ZELFVBQVUsUUFBUSxvQkFBb0IsS0FBSyxHQUFHLGFBQWEscUJBQXFCLEtBQUssY0FBYztHQUNuRyxnQkFBZ0IsdUJBQXVCLEtBQUssR0FBRyxhQUFhLFFBQVEsc0JBQXNCLE1BQU0sc0JBQXNCOztLQUc1RyxpQkFBaUI7aUJBQ2IscUJBQXFCLGtCQUFrQixnQkFBZ0IsUUFBUSxjQUFjIn0=
|
package/dist/elements.mjs
CHANGED
|
@@ -1,129 +1,116 @@
|
|
|
1
|
-
|
|
1
|
+
//#region src/classes.mts
|
|
2
2
|
function cssClass(className, visible = true) {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
if (visible !== true) return;
|
|
4
|
+
return className;
|
|
5
5
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
6
|
+
//#endregion
|
|
7
|
+
//#region src/aria.mts
|
|
8
|
+
const ariaIdReferenceAttributes = {
|
|
9
|
+
activeDescendant: "aria-activedescendant",
|
|
10
|
+
controls: "aria-controls",
|
|
11
|
+
describedBy: "aria-describedby",
|
|
12
|
+
details: "aria-details",
|
|
13
|
+
errorMessage: "aria-errormessage",
|
|
14
|
+
flowTo: "aria-flowto",
|
|
15
|
+
labelledBy: "aria-labelledby",
|
|
16
|
+
owns: "aria-owns"
|
|
17
17
|
};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
18
|
+
const ariaIdReferenceElementProperties = {
|
|
19
|
+
activeDescendant: "ariaActiveDescendantElement",
|
|
20
|
+
controls: "ariaControlsElements",
|
|
21
|
+
describedBy: "ariaDescribedByElements",
|
|
22
|
+
details: "ariaDetailsElements",
|
|
23
|
+
errorMessage: "ariaErrorMessageElements",
|
|
24
|
+
flowTo: "ariaFlowToElements",
|
|
25
|
+
labelledBy: "ariaLabelledByElements",
|
|
26
|
+
owns: "ariaOwnsElements"
|
|
27
27
|
};
|
|
28
28
|
function setProperty(element, key, value) {
|
|
29
|
-
|
|
29
|
+
element[key] = value;
|
|
30
30
|
}
|
|
31
31
|
function buildAriaProperties(aria, element) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
32
|
+
if (!aria) return;
|
|
33
|
+
for (const [key, value] of Object.entries(aria)) {
|
|
34
|
+
if (!(key in ariaIdReferenceAttributes)) {
|
|
35
|
+
setProperty(element, `aria${key[0].toUpperCase()}${key.slice(1)}`, value);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (value === null || value === void 0) {
|
|
39
|
+
element.removeAttribute(ariaIdReferenceAttributes[key]);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (value instanceof Element) {
|
|
43
|
+
const idlKey = ariaIdReferenceElementProperties[key];
|
|
44
|
+
setProperty(element, idlKey, idlKey.endsWith("Elements") ? [value] : value);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
element.setAttribute(ariaIdReferenceAttributes[key], value);
|
|
48
|
+
}
|
|
50
49
|
}
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
//#endregion
|
|
51
|
+
//#region src/element-factory.mts
|
|
53
52
|
function buildOnHandlers(on, element, signal) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
(event) => void handler(event),
|
|
60
|
-
signal ? { signal } : void 0
|
|
61
|
-
);
|
|
62
|
-
}
|
|
53
|
+
if (!on) return;
|
|
54
|
+
for (const [key, handler] of Object.entries(on)) {
|
|
55
|
+
if (!handler) continue;
|
|
56
|
+
element.addEventListener(key, (event) => void handler(event), signal ? { signal } : void 0);
|
|
57
|
+
}
|
|
63
58
|
}
|
|
64
59
|
function buildClassList(classes) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
60
|
+
if (classes === null || classes === void 0) return {};
|
|
61
|
+
if (Array.isArray(classes)) return { className: classes.filter(Boolean).join(" ") };
|
|
62
|
+
return { className: String(classes) };
|
|
68
63
|
}
|
|
69
64
|
function isWritableDomProperty(element, key) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
65
|
+
let proto = element;
|
|
66
|
+
while (proto) {
|
|
67
|
+
const desc = Object.getOwnPropertyDescriptor(proto, key);
|
|
68
|
+
if (desc) return !!(desc.writable || desc.set);
|
|
69
|
+
proto = Object.getPrototypeOf(proto);
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
77
72
|
}
|
|
78
73
|
function createElementFactory(constructElement, signal) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return newElement;
|
|
114
|
-
}
|
|
115
|
-
return createElement;
|
|
74
|
+
function createElement(tag, properties) {
|
|
75
|
+
if (tag === "svg" || tag.startsWith("svg:")) {
|
|
76
|
+
const actualTag = tag === "svg" ? "svg" : tag.slice(4);
|
|
77
|
+
const { classes, children, aria, on, style, ...attributes } = properties ?? {};
|
|
78
|
+
const newElement = constructElement(actualTag, "http://www.w3.org/2000/svg");
|
|
79
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
80
|
+
if (value === void 0 || value === null) continue;
|
|
81
|
+
if (isWritableDomProperty(newElement, key)) newElement[key] = value;
|
|
82
|
+
else if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") newElement.setAttribute(key, String(value));
|
|
83
|
+
}
|
|
84
|
+
const { className } = buildClassList(classes);
|
|
85
|
+
if (className) newElement.setAttribute("class", className);
|
|
86
|
+
if (style) Object.assign(newElement.style, style);
|
|
87
|
+
buildAriaProperties(aria, newElement);
|
|
88
|
+
buildOnHandlers(on, newElement, signal);
|
|
89
|
+
appendChildren(newElement, children);
|
|
90
|
+
return newElement;
|
|
91
|
+
}
|
|
92
|
+
const { aria, children, classes, on, style, ...assignableProperties } = properties ?? {};
|
|
93
|
+
const newElement = constructElement(tag);
|
|
94
|
+
const { className } = buildClassList(classes);
|
|
95
|
+
if (className) newElement.className = className;
|
|
96
|
+
for (const [key, value] of Object.entries(assignableProperties)) {
|
|
97
|
+
if (value === void 0 || value === null) continue;
|
|
98
|
+
if (isWritableDomProperty(newElement, key)) newElement[key] = value;
|
|
99
|
+
else if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") newElement.setAttribute(key, String(value));
|
|
100
|
+
}
|
|
101
|
+
if (style) Object.assign(newElement.style, style);
|
|
102
|
+
buildAriaProperties(aria, newElement);
|
|
103
|
+
buildOnHandlers(on, newElement, signal);
|
|
104
|
+
appendChildren(newElement, children);
|
|
105
|
+
return newElement;
|
|
106
|
+
}
|
|
107
|
+
return createElement;
|
|
116
108
|
}
|
|
117
109
|
function appendChildren(element, children) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
element.append(child);
|
|
121
|
-
}
|
|
122
|
-
} else if (children) {
|
|
123
|
-
element.append(children);
|
|
124
|
-
}
|
|
110
|
+
if (Array.isArray(children)) for (const child of children) element.append(child);
|
|
111
|
+
else if (children) element.append(children);
|
|
125
112
|
}
|
|
126
|
-
|
|
113
|
+
//#endregion
|
|
127
114
|
export { createElementFactory, cssClass };
|
|
128
|
-
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGFzc2VzLm10cyIsIi4uL3NyYy9hcmlhLm10cyIsIi4uL3NyYy9lbGVtZW50LWZhY3RvcnkubXRzIl0sIm5hbWVzIjpbImNsYXNzZXMiLCJjaGlsZHJlbiIsImFyaWEiLCJvbiIsInN0eWxlIiwibmV3RWxlbWVudCJdLCJtYXBwaW5ncyI6IjtBQTZDTyxTQUFTLFFBQUEsQ0FBUyxTQUFBLEVBQXFCLE9BQUEsR0FBc0MsSUFBQSxFQUFnQjtBQUNuRyxFQUFBLElBQUksWUFBWSxJQUFBLEVBQU07QUFDdEIsRUFBQSxPQUFPLFNBQUE7QUFDUjs7O0FDcEJBLElBQU0seUJBQUEsR0FBNkU7QUFBQSxFQUNsRixnQkFBQSxFQUFrQix1QkFBQTtBQUFBLEVBQ2xCLFFBQUEsRUFBVSxlQUFBO0FBQUEsRUFDVixXQUFBLEVBQWEsa0JBQUE7QUFBQSxFQUNiLE9BQUEsRUFBUyxjQUFBO0FBQUEsRUFDVCxZQUFBLEVBQWMsbUJBQUE7QUFBQSxFQUNkLE1BQUEsRUFBUSxhQUFBO0FBQUEsRUFDUixVQUFBLEVBQVksaUJBQUE7QUFBQSxFQUNaLElBQUEsRUFBTTtBQUNQLENBQUE7QUFHQSxJQUFNLGdDQUFBLEdBQW9GO0FBQUEsRUFDekYsZ0JBQUEsRUFBa0IsNkJBQUE7QUFBQSxFQUNsQixRQUFBLEVBQVUsc0JBQUE7QUFBQSxFQUNWLFdBQUEsRUFBYSx5QkFBQTtBQUFBLEVBQ2IsT0FBQSxFQUFTLHFCQUFBO0FBQUEsRUFDVCxZQUFBLEVBQWMsMEJBQUE7QUFBQSxFQUNkLE1BQUEsRUFBUSxvQkFBQTtBQUFBLEVBQ1IsVUFBQSxFQUFZLHdCQUFBO0FBQUEsRUFDWixJQUFBLEVBQU07QUFDUCxDQUFBO0FBRUEsU0FBUyxXQUFBLENBQVksT0FBQSxFQUFrQixHQUFBLEVBQWEsS0FBQSxFQUFzQjtBQUN6RSxFQUFDLE9BQUEsQ0FBK0MsR0FBRyxDQUFBLEdBQUksS0FBQTtBQUN4RDtBQUVPLFNBQVMsbUJBQUEsQ0FBb0IsTUFBd0IsT0FBQSxFQUF3QjtBQUNu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QWtFO0FBQzNHLEVBQUEsSUFBSSxLQUFBLENBQU0sT0FBQSxDQUFRLFFBQVEsQ0FBQSxFQUFHO0FBQzVCLElBQUEsS0FBQSxNQUFXLFNBQVMsUUFBQSxFQUFVO0FBQzdCLE1BQUEsT0FBQSxDQUFRLE9BQU8sS0FBSyxDQUFBO0FBQUEsSUFDckI7QUFBQSxFQUNELFdBQ1MsUUFBQSxFQUFVO0FBQ2xCLElBQUEsT0FBQSxDQUFRLE9BQU8sUUFBUSxDQUFBO0FBQUEsRUFDeEI7QUFDRCIsImZpbGUiOiJlbGVtZW50cy5tanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgc2luZ2xlIENTUyBjbGFzcyB2YWx1ZS4gRmFsc3kgdmFyaWFudHMgKGB1bmRlZmluZWRgIGFuZCBgbnVsbGApIGFyZVxuICogYXV0b21hdGljYWxseSBmaWx0ZXJlZCBvdXQgd2hlbiBidWlsZGluZyBhIGNsYXNzIGxpc3QsIHNvIGNvbmRpdGlvbmFsXG4gKiBjbGFzc2VzIGNhbiBiZSBleHByZXNzZWQgd2l0aG91dCBleHBsaWNpdCBndWFyZHMuXG4gKi9cbmV4cG9ydCB0eXBlIENzc0NsYXNzID0gc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4vKipcbiAqIE9uZSBvciBtb3JlIENTUyBjbGFzcyB2YWx1ZXMgYWNjZXB0ZWQgYnkgdGhlIGBjbGFzc2VzYCBwcm9wIG9mIGV2ZXJ5IEhUTUxcbiAqIGVsZW1lbnQgY3JlYXRlZCB2aWEgYGNyZWF0ZSgpYCBvciBgYXBwZW5kKClgLlxuICpcbiAqIC0gQSBzaW5nbGUgc3RyaW5nIGlzIHVzZWQgYXMtaXMuXG4gKiAtIEFuIGFycmF5IG9mIHtAbGluayBDc3NDbGFzc30gdmFsdWVzIGlzIGpvaW5lZCB3aXRoIHNwYWNlcyBhZnRlciBmYWxzeVxuICogICBlbnRyaWVzIGFyZSByZW1vdmVkLlxuICpcbiAqIEBzZWUge0BsaW5rIGNzc0NsYXNzfSBmb3IgY29tcG9zaW5nIGNvbmRpdGlvbmFsIGNsYXNzIG5hbWVzLlxuICovXG5leHBvcnQgdHlwZSBDc3NDbGFzc2VzID0gQXJyYXk8Q3NzQ2xhc3M+IHwgQ3NzQ2xhc3NcblxuLyoqXG4gKiBSZXR1cm5zIGBjbGFzc05hbWVgIHdoZW4gYHZpc2libGVgIGlzIHRydXRoeSwgb3RoZXJ3aXNlIGB1bmRlZmluZWRgLlxuICpcbiAqIERlc2lnbmVkIHRvIGNvbXBvc2UgY2xlYW5seSB3aXRoIHtAbGluayBDc3NDbGFzc2VzfTogZmFsc3kgdmFsdWVzIGFyZVxuICogZmlsdGVyZWQgb3V0IGF1dG9tYXRpY2FsbHksIHNvIHN0YXRpYyBhbmQgY29uZGl0aW9uYWwgY2xhc3NlcyBjYW4gYmUgbWl4ZWRcbiAqIGluIGEgc2luZ2xlIGFycmF5IHdpdGhvdXQgYnJhbmNoaW5nLlxuICpcbiAqIEBwYXJhbSBjbGFzc05hbWUgLSBUaGUgQ1NTIGNsYXNzIHRvIGFwcGx5LlxuICogQHBhcmFtIHZpc2libGUgLSBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpIHRoZSBjbGFzcyBpcyByZXR1cm5lZDsgYW55IG90aGVyXG4gKiAgIHZhbHVlIHByb2R1Y2VzIGB1bmRlZmluZWRgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogYXBwZW5kKCdidXR0b24nLCB7XG4gKiAgIGNsYXNzZXM6IFtcbiAqICAgICAnYnRuJyxcbiAqICAgICBjc3NDbGFzcygnYnRuLS1hY3RpdmUnLCBpc0FjdGl2ZSksXG4gKiAgICAgY3NzQ2xhc3MoJ2J0bi0tZGlzYWJsZWQnLCBpc0Rpc2FibGVkKSxcbiAqICAgXSxcbiAqIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNzc0NsYXNzKGNsYXNzTmFtZTogc3RyaW5nKTogQ3NzQ2xhc3NcbmV4cG9ydCBmdW5jdGlvbiBjc3NDbGFzcyhjbGFzc05hbWU6IHN0cmluZywgdmlzaWJsZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpOiBDc3NDbGFzc1xuZXhwb3J0IGZ1bmN0aW9uIGNzc0NsYXNzKGNsYXNzTmFtZTogQ3NzQ2xhc3MpOiBDc3NDbGFzc1xuZXhwb3J0IGZ1bmN0aW9uIGNzc0NsYXNzKGNsYXNzTmFtZTogQ3NzQ2xhc3MsIHZpc2libGU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKTogQ3NzQ2xhc3NcbmV4cG9ydCBmdW5jdGlvbiBjc3NDbGFzcyhjbGFzc05hbWU6IENzc0NsYXNzLCB2aXNpYmxlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHRydWUpOiBDc3NDbGFzcyB7XG5cdGlmICh2aXNpYmxlICE9PSB0cnVlKSByZXR1cm5cblx0cmV0dXJuIGNsYXNzTmFtZVxufVxuIiwidHlwZSBTdHJpcEFyaWE8UyBleHRlbmRzIHN0cmluZz4gPSBTIGV4dGVuZHMgYGFyaWEke2luZmVyIFJlc3R9YCA/IFVuY2FwaXRhbGl6ZTxSZXN0PiA6IFNcblxudHlwZSBBcmlhU3RyaW5nUHJvcGVydGllcyA9IHtcblx0W1AgaW4ga2V5b2YgQVJJQU1peGluIGFzIEFSSUFNaXhpbltQXSBleHRlbmRzIHN0cmluZyB8IG51bGwgPyBTdHJpcEFyaWE8c3RyaW5nICYgUD4gOiBuZXZlcl0/OiBzdHJpbmcgfCBudWxsXG59XG5cbi8vIFByb3BlcnRpZXMgdGhhdCBvbmx5IGV4aXN0IGFzIEVsZW1lbnRbXSBpbiBBUklBTWl4aW4g4oCUIGFjY2VwdHMgYSBzdHJpbmcgSUQgb3IgYW4gRWxlbWVudCBkaXJlY3RseVxudHlwZSBBcmlhSWRSZWZlcmVuY2VQcm9wZXJ0aWVzID0ge1xuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYUFjdGl2ZURlc2NlbmRhbnRFbGVtZW50J119ICovXG5cdGFjdGl2ZURlc2NlbmRhbnQ/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYUNvbnRyb2xzRWxlbWVudHMnXX0gKi9cblx0Y29udHJvbHM/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYURlc2NyaWJlZEJ5RWxlbWVudHMnXX0gKi9cblx0ZGVzY3JpYmVkQnk/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYURldGFpbHNFbGVtZW50cyddfSAqL1xuXHRkZXRhaWxzPzogc3RyaW5nIHwgRWxlbWVudCB8IG51bGxcblx0LyoqIHtAaW5oZXJpdGRvYyBBUklBTWl4aW5bJ2FyaWFFcnJvck1lc3NhZ2VFbGVtZW50cyddfSAqL1xuXHRlcnJvck1lc3NhZ2U/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYUZsb3dUb0VsZW1lbnRzJ119ICovXG5cdGZsb3dUbz86IHN0cmluZyB8IEVsZW1lbnQgfCBudWxsXG5cdC8qKiB7QGluaGVyaXRkb2MgQVJJQU1peGluWydhcmlhTGFiZWxsZWRCeUVsZW1lbnRzJ119ICovXG5cdGxhYmVsbGVkQnk/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYU93bnNFbGVtZW50cyddfSAqL1xuXHRvd25zPzogc3RyaW5nIHwgRWxlbWVudCB8IG51bGxcbn1cblxuZXhwb3J0IHR5cGUgQXJpYSA9IEFyaWFTdHJpbmdQcm9wZXJ0aWVzICYgQXJpYUlkUmVmZXJlbmNlUHJvcGVydGllc1xuXG5jb25zdCBhcmlhSWRSZWZlcmVuY2VBdHRyaWJ1dGVzOiBSZWNvcmQ8a2V5b2YgQXJpYUlkUmVmZXJlbmNlUHJvcGVydGllcywgc3RyaW5nPiA9IHtcblx0YWN0aXZlRGVzY2VuZGFudDogJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsXG5cdGNvbnRyb2xzOiAnYXJpYS1jb250cm9scycsXG5cdGRlc2NyaWJlZEJ5OiAnYXJpYS1kZXNjcmliZWRieScsXG5cdGRldGFpbHM6ICdhcmlhLWRldGFpbHMnLFxuXHRlcnJvck1lc3NhZ2U6ICdhcmlhLWVycm9ybWVzc2FnZScsXG5cdGZsb3dUbzogJ2FyaWEtZmxvd3RvJyxcblx0bGFiZWxsZWRCeTogJ2FyaWEtbGFiZWxsZWRieScsXG5cdG93bnM6ICdhcmlhLW93bnMnLFxufVxuXG4vLyBhcmlhQWN0aXZlRGVzY2VuZGFudEVsZW1lbnQgaXMgc2luZ3VsYXI7IHRoZSByZXN0IHRha2UgRWxlbWVudFtdXG5jb25zdCBhcmlhSWRSZWZlcmVuY2VFbGVtZW50UHJvcGVydGllczogUmVjb3JkPGtleW9mIEFyaWFJZFJlZmVyZW5jZVByb3BlcnRpZXMsIHN0cmluZz4gPSB7XG5cdGFjdGl2ZURlc2NlbmRhbnQ6ICdhcmlhQWN0aXZlRGVzY2VuZGFudEVsZW1lbnQnLFxuXHRjb250cm9sczogJ2FyaWFDb250cm9sc0VsZW1lbnRzJyxcblx0ZGVzY3JpYmVkQnk6ICdhcmlhRGVzY3JpYmVkQnlFbGVtZW50cycsXG5cdGRldGFpbHM6ICdhcmlhRGV0YWlsc0VsZW1lbnRzJyxcblx0ZXJyb3JNZXNzYWdlOiAnYXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzJyxcblx0Zmxvd1RvOiAnYXJpYUZsb3dUb0VsZW1lbnRzJyxcblx0bGFiZWxsZWRCeTogJ2FyaWFMYWJlbGxlZEJ5RWxlbWVudHMnLFxuXHRvd25zOiAnYXJpYU93bnNFbGVtZW50cycsXG59XG5cbmZ1bmN0aW9uIHNldFByb3BlcnR5KGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuXHQoZWxlbWVudCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldID0gdmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQXJpYVByb3BlcnRpZXMoYXJpYTogQXJpYSB8IHVuZGVmaW5lZCwgZWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuXHRpZiAoIWFyaWEpIHJldHVyblxuXHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhcmlhKSkge1xuXHRcdGlmICghKGtleSBpbiBhcmlhSWRSZWZlcmVuY2VBdHRyaWJ1dGVzKSkge1xuXHRcdFx0Y29uc3QgZG9tS2V5ID0gYGFyaWEke2tleVswXS50b1VwcGVyQ2FzZSgpfSR7a2V5LnNsaWNlKDEpfWBcblx0XHRcdHNldFByb3BlcnR5KGVsZW1lbnQsIGRvbUtleSwgdmFsdWUpXG5cdFx0XHRjb250aW51ZVxuXHRcdH1cblx0XHRpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXJpYUlkUmVmZXJlbmNlQXR0cmlidXRlc1trZXkgYXMga2V5b2YgQXJpYUlkUmVmZXJlbmNlUHJvcGVydGllc10pXG5cdFx0XHRjb250aW51ZVxuXHRcdH1cblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG5cdFx0XHRjb25zdCBpZGxLZXkgPSBhcmlhSWRSZWZlcmVuY2VFbGVtZW50UHJvcGVydGllc1trZXkgYXMga2V5b2YgQXJpYUlkUmVmZXJlbmNlUHJvcGVydGllc11cblx0XHRcdHNldFByb3BlcnR5KGVsZW1lbnQsIGlkbEtleSwgaWRsS2V5LmVuZHNXaXRoKCdFbGVtZW50cycpID8gW3ZhbHVlXSA6IHZhbHVlKVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXJpYUlkUmVmZXJlbmNlQXR0cmlidXRlc1trZXkgYXMga2V5b2YgQXJpYUlkUmVmZXJlbmNlUHJvcGVydGllc10sIHZhbHVlKVxuXHR9XG59XG4iLCJpbXBvcnQgeyBFbGVtZW50T25IYW5kbGVycyB9IGZyb20gJ0Byb290ZWQvZXZlbnRzJ1xuXG5pbXBvcnQgeyB0eXBlIEFyaWEsIGJ1aWxkQXJpYVByb3BlcnRpZXMgfSBmcm9tICcuL2FyaWEubXRzJ1xuaW1wb3J0IHsgQ3NzQ2xhc3NlcyB9IGZyb20gJy4vY2xhc3Nlcy5tdHMnXG5pbXBvcnQgeyBIdG1sRWxlbWVudFByb3BlcnRpZXMgfSBmcm9tICcuL2h0bWwtZWxlbWVudC1wcm9wZXJ0aWVzLm10cydcbmltcG9ydCB7IFN2Z0VsZW1lbnRQcm9wZXJ0aWVzLCBTdmdUYWdFbGVtZW50LCBTdmdUYWdOYW1lIH0gZnJvbSAnLi9zdmctZWxlbWVudC1wcm9wZXJ0aWVzLm10cydcblxuZnVuY3Rpb24gYnVpbGRPbkhhbmRsZXJzPFRFbGVtZW50IGV4dGVuZHMgRWxlbWVudD4oXG5cdG9uOiBFbGVtZW50T25IYW5kbGVyczxURWxlbWVudD4gfCB1bmRlZmluZWQsXG5cdGVsZW1lbnQ6IFRFbGVtZW50LFxuXHRzaWduYWw6IEFib3J0U2lnbmFsLFxuKTogdm9pZCB7XG5cdGlmICghb24pIHJldHVyblxuXHRmb3IgKGNvbnN0IFtrZXksIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKG9uKSkge1xuXHRcdGlmICghaGFuZGxlcikgY29udGludWVcblx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHRrZXksXG5cdFx0XHRldmVudCA9PiB2b2lkIChoYW5kbGVyIGFzIChldmVudD86IEV2ZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikoZXZlbnQpLFxuXHRcdFx0c2lnbmFsID8geyBzaWduYWwgfSA6IHVuZGVmaW5lZCxcblx0XHQpXG5cdH1cbn1cblxuZnVuY3Rpb24gYnVpbGRDbGFzc0xpc3QoY2xhc3NlczogQ3NzQ2xhc3NlcyB8IHVuZGVmaW5lZCkge1xuXHRpZiAoY2xhc3NlcyA9PT0gbnVsbCB8fCBjbGFzc2VzID09PSB1bmRlZmluZWQpIHJldHVybiB7fVxuXHRpZiAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSkgcmV0dXJuIHsgY2xhc3NOYW1lOiBjbGFzc2VzLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJykgfVxuXG5cdHJldHVybiB7IGNsYXNzTmFtZTogU3RyaW5nKGNsYXNzZXMpIH1cbn1cblxuZnVuY3Rpb24gaXNXcml0YWJsZURvbVByb3BlcnR5KGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGxldCBwcm90bzogb2JqZWN0IHwgbnVsbCA9IGVsZW1lbnRcblx0d2hpbGUgKHByb3RvKSB7XG5cdFx0Y29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIGtleSlcblx0XHRpZiAoZGVzYykgcmV0dXJuICEhKGRlc2Mud3JpdGFibGUgfHwgZGVzYy5zZXQpXG5cdFx0cHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pIGFzIG9iamVjdCB8IG51bGxcblx0fVxuXHRyZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IHR5cGUgRWxlbWVudENyZWF0b3IgPSAoa2V5OiBzdHJpbmcsIG5zPzogc3RyaW5nKSA9PiBFbGVtZW50XG5cbi8qKlxuICogVGhlIG92ZXJsb2FkZWQgZnVuY3Rpb24gdHlwZSByZXR1cm5lZCBieSB7QGxpbmsgY3JlYXRlRWxlbWVudEZhY3Rvcnl9LlxuICogQWNjZXB0cyBIVE1MIG9yIFNWRyB0YWcgbmFtZXMgYW5kIHJldHVybnMgdGhlIG1hdGNoaW5nIGVsZW1lbnQgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50Q3JlYXRvckZ1bmN0aW9uIHtcblx0KHRhZzogJ3N2ZycsIHByb3BlcnRpZXM/OiBTdmdFbGVtZW50UHJvcGVydGllczwnc3ZnJz4pOiBTVkdTVkdFbGVtZW50XG5cdDxLIGV4dGVuZHMgRXhjbHVkZTxTdmdUYWdOYW1lLCAnc3ZnJz4+KHRhZzogSywgcHJvcGVydGllcz86IFN2Z0VsZW1lbnRQcm9wZXJ0aWVzPEs+KTogU3ZnVGFnRWxlbWVudDxLPlxuXHQ8SyBleHRlbmRzIGtleW9mIEhUTUxFbGVtZW50VGFnTmFtZU1hcD4odGFnOiBLLCBwcm9wZXJ0aWVzPzogTm9JbmZlcjxIdG1sRWxlbWVudFByb3BlcnRpZXM8Sz4+KTogSFRNTEVsZW1lbnRUYWdOYW1lTWFwW0tdXG59XG5cbmV4cG9ydCB0eXBlIEVsZW1lbnRGYWN0b3J5ID0gRWxlbWVudENyZWF0b3JGdW5jdGlvblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRGYWN0b3J5KGNvbnN0cnVjdEVsZW1lbnQ6IEVsZW1lbnRDcmVhdG9yLCBzaWduYWw6IEFib3J0U2lnbmFsKTogRWxlbWVudENyZWF0b3JGdW5jdGlvbiB7XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IEhUTUwgb3IgU1ZHIGVsZW1lbnQuIFRoZSBlbGVtZW50IGlzICoqbm90KiogYXBwZW5kZWQgdG8gdGhlXG5cdCAqIGRvY3VtZW50IGF1dG9tYXRpY2FsbHkuXG5cdCAqXG5cdCAqICoqSFRNTCBlbGVtZW50cyoqIOKAlCBwYXNzIGFueSB0YWcgZnJvbSBgSFRNTEVsZW1lbnRUYWdOYW1lTWFwYDpcblx0ICogYGBgdHNcblx0ICogZWxlbWVudCgnZGl2JywgeyBjbGFzc2VzOiAnY2FyZCcsIGNoaWxkcmVuOiBbLi4uXSB9KVxuXHQgKiBgYGBcblx0ICpcblx0ICogKipTVkcgZWxlbWVudHMqKiDigJQgdXNlIGAnc3ZnJ2AgZm9yIHRoZSByb290IGVsZW1lbnQsIG9yIHByZWZpeCBvdGhlciBTVkdcblx0ICogdGFncyB3aXRoIGAnc3ZnOidgIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBzYW1lLW5hbWVkIEhUTUwgdGFnczpcblx0ICogYGBgdHNcblx0ICogZWxlbWVudCgnc3ZnJywgeyB2aWV3Qm94OiAnMCAwIDI0IDI0JywgY2hpbGRyZW46IGVsZW1lbnQoJ3N2Zzp1c2UnLCB7IGhyZWY6IHVybCB9KSB9KVxuXHQgKiBgYGBcblx0ICpcblx0ICogKipgY2xhc3Nlc2AqKiDigJQgYWNjZXB0cyBhIHNpbmdsZSBjbGFzcyBzdHJpbmcgb3IgYSB7QGxpbmsgQ3NzQ2xhc3Nlc30gYXJyYXk7XG5cdCAqIGZhbHN5IGVudHJpZXMgYXJlIGZpbHRlcmVkIG91dCBhdXRvbWF0aWNhbGx5LlxuXHQgKlxuXHQgKiAqKkRPTSBwcm9wZXJ0eSBuYW1lcyoqIOKAlCBmb3IgSFRNTCBlbGVtZW50cywgb3RoZXIgcHJvcGVydGllcyBhcmUgc2V0IHZpYVxuXHQgKiBgT2JqZWN0LmFzc2lnbmAgYW5kIG11c3QgdXNlIERPTSBwcm9wZXJ0eSBuYW1lcywgbm90IEhUTUwgYXR0cmlidXRlIG5hbWVzOlxuXHQgKiB8IEhUTUwgYXR0cmlidXRlIHwgRE9NIHByb3BlcnR5IHxcblx0ICogfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18XG5cdCAqIHwgYGZvcmAgICAgICAgICAgfCBgaHRtbEZvcmAgICAgfFxuXHQgKiB8IGByZWFkb25seWAgICAgIHwgYHJlYWRPbmx5YCAgIHxcblx0ICpcblx0ICogRm9yIFNWRyBlbGVtZW50cywgd3JpdGFibGUgRE9NIHByb3BlcnRpZXMgYXJlIHNldCBkaXJlY3RseTsgYW55dGhpbmcgZWxzZVxuXHQgKiAoZS5nLiBgdmlld0JveGAsIGBocmVmYCkgZmFsbHMgYmFjayB0byBgc2V0QXR0cmlidXRlYCBhdXRvbWF0aWNhbGx5LlxuXHQgKlxuXHQgKiAqKkNoaWxkcmVuKiog4oCUIHBhc3MgYSBzaW5nbGUgYE5vZGVgIG9yIGFuIGFycmF5IG9mIGBOb2RlYHMgdmlhIHRoZVxuXHQgKiBgY2hpbGRyZW5gIHByb3BlcnR5OyB0aGV5IGFyZSBhcHBlbmRlZCBpbiBvcmRlci5cblx0ICpcblx0ICogKipFdmVudCBsaXN0ZW5lcnMqKiDigJQgdXNlIHRoZSBgb25gIHByb3Agd2l0aCBhbiBvYmplY3Qgb2YgZXZlbnQgaGFuZGxlcnMuXG5cdCAqIExpc3RlbmVycyBhcmUgYXV0b21hdGljYWxseSByZW1vdmVkIHdoZW4gdGhlIGNvbXBvbmVudCB1bm1vdW50cy5cblx0ICpcblx0ICogKipBUklBKiog4oCUIHVzZSB0aGUgYGFyaWFgIHByb3AgZm9yIEFSSUEgYXR0cmlidXRlcy4gQWNjZXB0cyBzdHJpbmcgSURzIG9yXG5cdCAqIGBFbGVtZW50YCByZWZlcmVuY2VzIGZvciBJREwgcmVmbGVjdGlvbiBwcm9wZXJ0aWVzLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGB0c1xuXHQgKiBjb25zdCBkaXYgPSBlbGVtZW50KCdkaXYnLCB7XG5cdCAqICAgY2xhc3NlczogJ2NhcmQnLFxuXHQgKiAgIGFyaWE6IHsgbGFiZWw6ICdDYXJkJywgbGFiZWxsZWRCeTogaGVhZGluZ0VsIH0sXG5cdCAqICAgY2hpbGRyZW46IFtcblx0ICogICAgIGVsZW1lbnQoJ2gyJywgeyB0ZXh0Q29udGVudDogJ1RpdGxlJyB9KSxcblx0ICogICAgIGVsZW1lbnQoJ3AnLCAgeyB0ZXh0Q29udGVudDogJ0JvZHknICB9KSxcblx0ICogICBdLFxuXHQgKiB9KVxuXHQgKlxuXHQgKiBjb25zdCBpY29uID0gZWxlbWVudCgnc3ZnJywge1xuXHQgKiAgIHZpZXdCb3g6ICcwIDAgMjQgMjQnLFxuXHQgKiAgIGFyaWE6IHsgaGlkZGVuOiAndHJ1ZScgfSxcblx0ICogICBjaGlsZHJlbjogZWxlbWVudCgnc3ZnOnVzZScsIHsgaHJlZjogc3ByaXRlVXJsIH0pLFxuXHQgKiB9KVxuXHQgKiBgYGBcblx0ICovXG5cdGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodGFnOiAnc3ZnJywgcHJvcGVydGllcz86IFN2Z0VsZW1lbnRQcm9wZXJ0aWVzPCdzdmcnPik6IFNWR1NWR0VsZW1lbnRcblx0ZnVuY3Rpb24gY3JlYXRlRWxlbWVudDxLIGV4dGVuZHMgRXhjbHVkZTxTdmdUYWdOYW1lLCAnc3ZnJz4+KHRhZzogSywgcHJvcGVydGllcz86IFN2Z0VsZW1lbnRQcm9wZXJ0aWVzPEs+KTogU3ZnVGFnRWxlbWVudDxLPlxuXHRmdW5jdGlvbiBjcmVhdGVFbGVtZW50PEtFbGVtZW50IGV4dGVuZHMga2V5b2YgSFRNTEVsZW1lbnRUYWdOYW1lTWFwPih0YWc6IEtFbGVtZW50LCBwcm9wZXJ0aWVzPzogTm9JbmZlcjxIdG1sRWxlbWVudFByb3BlcnRpZXM8S0VsZW1lbnQ+Pik6IEhUTUxFbGVtZW50VGFnTmFtZU1hcFtLRWxlbWVudF1cblx0ZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWc6IHN0cmluZywgcHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogRWxlbWVudCB7XG5cdFx0aWYgKHRhZyA9PT0gJ3N2ZycgfHwgdGFnLnN0YXJ0c1dpdGgoJ3N2ZzonKSkge1xuXHRcdFx0Y29uc3QgYWN0dWFsVGFnID0gdGFnID09PSAnc3ZnJyA/ICdzdmcnIDogdGFnLnNsaWNlKDQpXG5cdFx0XHRjb25zdCB7IGNsYXNzZXMsIGNoaWxkcmVuLCBhcmlhLCBvbiwgc3R5bGUsIC4uLmF0dHJpYnV0ZXMgfSA9IHByb3BlcnRpZXMgPz8ge31cblx0XHRcdGNvbnN0IG5ld0VsZW1lbnQgPSBjb25zdHJ1Y3RFbGVtZW50KGFjdHVhbFRhZywgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJykgYXMgU1ZHRWxlbWVudFxuXG5cdFx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKSkge1xuXHRcdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgY29udGludWVcblx0XHRcdFx0aWYgKGlzV3JpdGFibGVEb21Qcm9wZXJ0eShuZXdFbGVtZW50LCBrZXkpKSB7XG5cdFx0XHRcdFx0OyhuZXdFbGVtZW50IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gPSB2YWx1ZVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuXHRcdFx0XHRcdG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgU3RyaW5nKHZhbHVlKSlcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB7IGNsYXNzTmFtZSB9ID0gYnVpbGRDbGFzc0xpc3QoY2xhc3NlcyBhcyBDc3NDbGFzc2VzIHwgdW5kZWZpbmVkKVxuXHRcdFx0aWYgKGNsYXNzTmFtZSkgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgY2xhc3NOYW1lKVxuXG5cdFx0XHRpZiAoc3R5bGUpIE9iamVjdC5hc3NpZ24obmV3RWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cdFx0XHRidWlsZEFyaWFQcm9wZXJ0aWVzKGFyaWEgYXMgQXJpYSB8IHVuZGVmaW5lZCwgbmV3RWxlbWVudClcblx0XHRcdGJ1aWxkT25IYW5kbGVycyhvbiBhcyBFbGVtZW50T25IYW5kbGVyczxFbGVtZW50PiB8IHVuZGVmaW5lZCwgbmV3RWxlbWVudCwgc2lnbmFsKVxuXG5cdFx0XHRhcHBlbmRDaGlsZHJlbihuZXdFbGVtZW50LCBjaGlsZHJlbiBhcyBBcnJheTxOb2RlIHwgc3RyaW5nPiB8IE5vZGUgfCBzdHJpbmcgfCB1bmRlZmluZWQpXG5cblx0XHRcdHJldHVybiBuZXdFbGVtZW50XG5cdFx0fVxuXG5cdFx0Y29uc3QgeyBhcmlhLCBjaGlsZHJlbiwgY2xhc3Nlcywgb24sIHN0eWxlLCAuLi5hc3NpZ25hYmxlUHJvcGVydGllcyB9ID0gcHJvcGVydGllcyA/PyB7fVxuXHRcdGNvbnN0IGRlZmluZWRQcm9wZXJ0aWVzID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdFxuXHRcdFx0LmVudHJpZXMoYXNzaWduYWJsZVByb3BlcnRpZXMpXG5cdFx0XHQuZmlsdGVyKChbLCB2XSkgPT4gdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGwpLFxuXHRcdClcblx0XHRjb25zdCBuZXdFbGVtZW50ID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdGNvbnN0cnVjdEVsZW1lbnQodGFnKSBhcyBIVE1MRWxlbWVudCxcblx0XHRcdGRlZmluZWRQcm9wZXJ0aWVzLFxuXHRcdFx0YnVpbGRDbGFzc0xpc3QoY2xhc3NlcyBhcyBDc3NDbGFzc2VzIHwgdW5kZWZpbmVkKSxcblx0XHQpXG5cblx0XHRpZiAoc3R5bGUpIE9iamVjdC5hc3NpZ24obmV3RWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cdFx0YnVpbGRBcmlhUHJvcGVydGllcyhhcmlhIGFzIEFyaWEgfCB1bmRlZmluZWQsIG5ld0VsZW1lbnQpXG5cdFx0YnVpbGRPbkhhbmRsZXJzKG9uIGFzIEVsZW1lbnRPbkhhbmRsZXJzPEhUTUxFbGVtZW50PiB8IHVuZGVmaW5lZCwgbmV3RWxlbWVudCwgc2lnbmFsKVxuXHRcdGFwcGVuZENoaWxkcmVuKG5ld0VsZW1lbnQsIGNoaWxkcmVuIGFzIEFycmF5PE5vZGUgfCBzdHJpbmc+IHwgTm9kZSB8IHN0cmluZyB8IHVuZGVmaW5lZClcblxuXHRcdHJldHVybiBuZXdFbGVtZW50XG5cdH1cblxuXHRyZXR1cm4gY3JlYXRlRWxlbWVudCBhcyB1bmtub3duIGFzIEVsZW1lbnRDcmVhdG9yRnVuY3Rpb25cbn1cblxuZnVuY3Rpb24gYXBwZW5kQ2hpbGRyZW4oZWxlbWVudDogRWxlbWVudCwgY2hpbGRyZW46IEFycmF5PE5vZGUgfCBzdHJpbmc+IHwgTm9kZSB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcblx0XHRmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG5cdFx0XHRlbGVtZW50LmFwcGVuZChjaGlsZClcblx0XHR9XG5cdH1cblx0ZWxzZSBpZiAoY2hpbGRyZW4pIHtcblx0XHRlbGVtZW50LmFwcGVuZChjaGlsZHJlbilcblx0fVxufVxuIl19
|
|
115
|
+
|
|
116
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudHMubWpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGFzc2VzLm10cyIsIi4uL3NyYy9hcmlhLm10cyIsIi4uL3NyYy9lbGVtZW50LWZhY3RvcnkubXRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBzaW5nbGUgQ1NTIGNsYXNzIHZhbHVlLiBGYWxzeSB2YXJpYW50cyAoYHVuZGVmaW5lZGAgYW5kIGBudWxsYCkgYXJlXG4gKiBhdXRvbWF0aWNhbGx5IGZpbHRlcmVkIG91dCB3aGVuIGJ1aWxkaW5nIGEgY2xhc3MgbGlzdCwgc28gY29uZGl0aW9uYWxcbiAqIGNsYXNzZXMgY2FuIGJlIGV4cHJlc3NlZCB3aXRob3V0IGV4cGxpY2l0IGd1YXJkcy5cbiAqL1xuZXhwb3J0IHR5cGUgQ3NzQ2xhc3MgPSBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG5cbi8qKlxuICogT25lIG9yIG1vcmUgQ1NTIGNsYXNzIHZhbHVlcyBhY2NlcHRlZCBieSB0aGUgYGNsYXNzZXNgIHByb3Agb2YgZXZlcnkgSFRNTFxuICogZWxlbWVudCBjcmVhdGVkIHZpYSBgY3JlYXRlKClgIG9yIGBhcHBlbmQoKWAuXG4gKlxuICogLSBBIHNpbmdsZSBzdHJpbmcgaXMgdXNlZCBhcy1pcy5cbiAqIC0gQW4gYXJyYXkgb2Yge0BsaW5rIENzc0NsYXNzfSB2YWx1ZXMgaXMgam9pbmVkIHdpdGggc3BhY2VzIGFmdGVyIGZhbHN5XG4gKiAgIGVudHJpZXMgYXJlIHJlbW92ZWQuXG4gKlxuICogQHNlZSB7QGxpbmsgY3NzQ2xhc3N9IGZvciBjb21wb3NpbmcgY29uZGl0aW9uYWwgY2xhc3MgbmFtZXMuXG4gKi9cbmV4cG9ydCB0eXBlIENzc0NsYXNzZXMgPSBBcnJheTxDc3NDbGFzcz4gfCBDc3NDbGFzc1xuXG4vKipcbiAqIFJldHVybnMgYGNsYXNzTmFtZWAgd2hlbiBgdmlzaWJsZWAgaXMgdHJ1dGh5LCBvdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gKlxuICogRGVzaWduZWQgdG8gY29tcG9zZSBjbGVhbmx5IHdpdGgge0BsaW5rIENzc0NsYXNzZXN9OiBmYWxzeSB2YWx1ZXMgYXJlXG4gKiBmaWx0ZXJlZCBvdXQgYXV0b21hdGljYWxseSwgc28gc3RhdGljIGFuZCBjb25kaXRpb25hbCBjbGFzc2VzIGNhbiBiZSBtaXhlZFxuICogaW4gYSBzaW5nbGUgYXJyYXkgd2l0aG91dCBicmFuY2hpbmcuXG4gKlxuICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBDU1MgY2xhc3MgdG8gYXBwbHkuXG4gKiBAcGFyYW0gdmlzaWJsZSAtIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCkgdGhlIGNsYXNzIGlzIHJldHVybmVkOyBhbnkgb3RoZXJcbiAqICAgdmFsdWUgcHJvZHVjZXMgYHVuZGVmaW5lZGAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBhcHBlbmQoJ2J1dHRvbicsIHtcbiAqICAgY2xhc3NlczogW1xuICogICAgICdidG4nLFxuICogICAgIGNzc0NsYXNzKCdidG4tLWFjdGl2ZScsIGlzQWN0aXZlKSxcbiAqICAgICBjc3NDbGFzcygnYnRuLS1kaXNhYmxlZCcsIGlzRGlzYWJsZWQpLFxuICogICBdLFxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpOiBDc3NDbGFzc1xuZXhwb3J0IGZ1bmN0aW9uIGNzc0NsYXNzKGNsYXNzTmFtZTogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCk6IENzc0NsYXNzXG5leHBvcnQgZnVuY3Rpb24gY3NzQ2xhc3MoY2xhc3NOYW1lOiBDc3NDbGFzcyk6IENzc0NsYXNzXG5leHBvcnQgZnVuY3Rpb24gY3NzQ2xhc3MoY2xhc3NOYW1lOiBDc3NDbGFzcywgdmlzaWJsZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpOiBDc3NDbGFzc1xuZXhwb3J0IGZ1bmN0aW9uIGNzc0NsYXNzKGNsYXNzTmFtZTogQ3NzQ2xhc3MsIHZpc2libGU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkID0gdHJ1ZSk6IENzc0NsYXNzIHtcblx0aWYgKHZpc2libGUgIT09IHRydWUpIHJldHVyblxuXHRyZXR1cm4gY2xhc3NOYW1lXG59XG4iLCJ0eXBlIFN0cmlwQXJpYTxTIGV4dGVuZHMgc3RyaW5nPiA9IFMgZXh0ZW5kcyBgYXJpYSR7aW5mZXIgUmVzdH1gID8gVW5jYXBpdGFsaXplPFJlc3Q+IDogU1xuXG50eXBlIEFyaWFTdHJpbmdQcm9wZXJ0aWVzID0ge1xuXHRbUCBpbiBrZXlvZiBBUklBTWl4aW4gYXMgQVJJQU1peGluW1BdIGV4dGVuZHMgc3RyaW5nIHwgbnVsbCA/IFN0cmlwQXJpYTxzdHJpbmcgJiBQPiA6IG5ldmVyXT86IHN0cmluZyB8IG51bGxcbn1cblxuLy8gUHJvcGVydGllcyB0aGF0IG9ubHkgZXhpc3QgYXMgRWxlbWVudFtdIGluIEFSSUFNaXhpbi4gQWNjZXB0cyBhIHN0cmluZyBJRCBvciBhbiBFbGVtZW50IGRpcmVjdGx5LlxudHlwZSBBcmlhSWRSZWZlcmVuY2VQcm9wZXJ0aWVzID0ge1xuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYUFjdGl2ZURlc2NlbmRhbnRFbGVtZW50J119ICovXG5cdGFjdGl2ZURlc2NlbmRhbnQ/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYUNvbnRyb2xzRWxlbWVudHMnXX0gKi9cblx0Y29udHJvbHM/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYURlc2NyaWJlZEJ5RWxlbWVudHMnXX0gKi9cblx0ZGVzY3JpYmVkQnk/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYURldGFpbHNFbGVtZW50cyddfSAqL1xuXHRkZXRhaWxzPzogc3RyaW5nIHwgRWxlbWVudCB8IG51bGxcblx0LyoqIHtAaW5oZXJpdGRvYyBBUklBTWl4aW5bJ2FyaWFFcnJvck1lc3NhZ2VFbGVtZW50cyddfSAqL1xuXHRlcnJvck1lc3NhZ2U/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYUZsb3dUb0VsZW1lbnRzJ119ICovXG5cdGZsb3dUbz86IHN0cmluZyB8IEVsZW1lbnQgfCBudWxsXG5cdC8qKiB7QGluaGVyaXRkb2MgQVJJQU1peGluWydhcmlhTGFiZWxsZWRCeUVsZW1lbnRzJ119ICovXG5cdGxhYmVsbGVkQnk/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYU93bnNFbGVtZW50cyddfSAqL1xuXHRvd25zPzogc3RyaW5nIHwgRWxlbWVudCB8IG51bGxcbn1cblxuLyoqXG4gKiBTaGFwZSBvZiB0aGUgYGFyaWFgIHByb3Agb24gYGVsZW1lbnQoLi4uKWAuIEFjY2VwdHMgZXZlcnkgQVJJQSBhdHRyaWJ1dGVcbiAqIGRlZmluZWQgb24gYEFSSUFNaXhpbmAsIHdpdGggdGhlIGBhcmlhYCBwcmVmaXggc3RyaXBwZWQgKHNvIGBhcmlhLWxhYmVsYFxuICogYmVjb21lcyBgbGFiZWxgLCBgYXJpYS1kZXNjcmliZWRieWAgYmVjb21lcyBgZGVzY3JpYmVkQnlgKS5cbiAqXG4gKiBGb3IgSUQtcmVmZXJlbmNlIGF0dHJpYnV0ZXMgKGBhcmlhLWxhYmVsbGVkYnlgLCBgYXJpYS1jb250cm9sc2AsIGV0Yy4pIHRoZVxuICogdmFsdWUgY2FuIGJlIGEgc3RyaW5nIElEIG9yIGFuIGBFbGVtZW50YCByZWZlcmVuY2UuIEVsZW1lbnQgcmVmZXJlbmNlcyBhcmVcbiAqIHNldCB2aWEgdGhlIElETCByZWZsZWN0aW9uIHByb3BlcnR5IHdoZW4gc3VwcG9ydGVkLCBmYWxsaW5nIGJhY2sgdG8gdGhlXG4gKiBhdHRyaWJ1dGUgdmFsdWUgb3RoZXJ3aXNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogZWxlbWVudCgnYnV0dG9uJywge1xuICogICBhcmlhOiB7XG4gKiAgICAgbGFiZWw6ICdTYXZlJyxcbiAqICAgICBkZXNjcmliZWRCeTogaGVscFRleHRFbGVtZW50LFxuICogICAgIHByZXNzZWQ6ICdmYWxzZScsXG4gKiAgIH0sXG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIEFyaWEgPSBBcmlhU3RyaW5nUHJvcGVydGllcyAmIEFyaWFJZFJlZmVyZW5jZVByb3BlcnRpZXNcblxuY29uc3QgYXJpYUlkUmVmZXJlbmNlQXR0cmlidXRlczogUmVjb3JkPGtleW9mIEFyaWFJZFJlZmVyZW5jZVByb3BlcnRpZXMsIHN0cmluZz4gPSB7XG5cdGFjdGl2ZURlc2NlbmRhbnQ6ICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLFxuXHRjb250cm9sczogJ2FyaWEtY29udHJvbHMnLFxuXHRkZXNjcmliZWRCeTogJ2FyaWEtZGVzY3JpYmVkYnknLFxuXHRkZXRhaWxzOiAnYXJpYS1kZXRhaWxzJyxcblx0ZXJyb3JNZXNzYWdlOiAnYXJpYS1lcnJvcm1lc3NhZ2UnLFxuXHRmbG93VG86ICdhcmlhLWZsb3d0bycsXG5cdGxhYmVsbGVkQnk6ICdhcmlhLWxhYmVsbGVkYnknLFxuXHRvd25zOiAnYXJpYS1vd25zJyxcbn1cblxuLy8gYXJpYUFjdGl2ZURlc2NlbmRhbnRFbGVtZW50IGlzIHNpbmd1bGFyOyB0aGUgcmVzdCB0YWtlIEVsZW1lbnRbXVxuY29uc3QgYXJpYUlkUmVmZXJlbmNlRWxlbWVudFByb3BlcnRpZXM6IFJlY29yZDxrZXlvZiBBcmlhSWRSZWZlcmVuY2VQcm9wZXJ0aWVzLCBzdHJpbmc+ID0ge1xuXHRhY3RpdmVEZXNjZW5kYW50OiAnYXJpYUFjdGl2ZURlc2NlbmRhbnRFbGVtZW50Jyxcblx0Y29udHJvbHM6ICdhcmlhQ29udHJvbHNFbGVtZW50cycsXG5cdGRlc2NyaWJlZEJ5OiAnYXJpYURlc2NyaWJlZEJ5RWxlbWVudHMnLFxuXHRkZXRhaWxzOiAnYXJpYURldGFpbHNFbGVtZW50cycsXG5cdGVycm9yTWVzc2FnZTogJ2FyaWFFcnJvck1lc3NhZ2VFbGVtZW50cycsXG5cdGZsb3dUbzogJ2FyaWFGbG93VG9FbGVtZW50cycsXG5cdGxhYmVsbGVkQnk6ICdhcmlhTGFiZWxsZWRCeUVsZW1lbnRzJyxcblx0b3duczogJ2FyaWFPd25zRWxlbWVudHMnLFxufVxuXG5mdW5jdGlvbiBzZXRQcm9wZXJ0eShlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcblx0KGVsZW1lbnQgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSA9IHZhbHVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFyaWFQcm9wZXJ0aWVzKGFyaWE6IEFyaWEgfCB1bmRlZmluZWQsIGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcblx0aWYgKCFhcmlhKSByZXR1cm5cblx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXJpYSkpIHtcblx0XHRpZiAoIShrZXkgaW4gYXJpYUlkUmVmZXJlbmNlQXR0cmlidXRlcykpIHtcblx0XHRcdGNvbnN0IGRvbUtleSA9IGBhcmlhJHtrZXlbMF0udG9VcHBlckNhc2UoKX0ke2tleS5zbGljZSgxKX1gXG5cdFx0XHRzZXRQcm9wZXJ0eShlbGVtZW50LCBkb21LZXksIHZhbHVlKVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cdFx0aWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGFyaWFJZFJlZmVyZW5jZUF0dHJpYnV0ZXNba2V5IGFzIGtleW9mIEFyaWFJZFJlZmVyZW5jZVByb3BlcnRpZXNdKVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudCkge1xuXHRcdFx0Y29uc3QgaWRsS2V5ID0gYXJpYUlkUmVmZXJlbmNlRWxlbWVudFByb3BlcnRpZXNba2V5IGFzIGtleW9mIEFyaWFJZFJlZmVyZW5jZVByb3BlcnRpZXNdXG5cdFx0XHRzZXRQcm9wZXJ0eShlbGVtZW50LCBpZGxLZXksIGlkbEtleS5lbmRzV2l0aCgnRWxlbWVudHMnKSA/IFt2YWx1ZV0gOiB2YWx1ZSlcblx0XHRcdGNvbnRpbnVlXG5cdFx0fVxuXHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKGFyaWFJZFJlZmVyZW5jZUF0dHJpYnV0ZXNba2V5IGFzIGtleW9mIEFyaWFJZFJlZmVyZW5jZVByb3BlcnRpZXNdLCB2YWx1ZSlcblx0fVxufVxuIiwiaW1wb3J0IHsgRWxlbWVudE9uSGFuZGxlcnMgfSBmcm9tICdAcm9vdGVkL2V2ZW50cydcblxuaW1wb3J0IHsgdHlwZSBBcmlhLCBidWlsZEFyaWFQcm9wZXJ0aWVzIH0gZnJvbSAnLi9hcmlhLm10cydcbmltcG9ydCB7IENzc0NsYXNzZXMgfSBmcm9tICcuL2NsYXNzZXMubXRzJ1xuaW1wb3J0IHsgSHRtbEVsZW1lbnRQcm9wZXJ0aWVzIH0gZnJvbSAnLi9odG1sLWVsZW1lbnQtcHJvcGVydGllcy5tdHMnXG5pbXBvcnQgeyBTdmdFbGVtZW50UHJvcGVydGllcywgU3ZnVGFnRWxlbWVudCwgU3ZnVGFnTmFtZSB9IGZyb20gJy4vc3ZnLWVsZW1lbnQtcHJvcGVydGllcy5tdHMnXG5cbmZ1bmN0aW9uIGJ1aWxkT25IYW5kbGVyczxURWxlbWVudCBleHRlbmRzIEVsZW1lbnQ+KFxuXHRvbjogRWxlbWVudE9uSGFuZGxlcnM8VEVsZW1lbnQ+IHwgdW5kZWZpbmVkLFxuXHRlbGVtZW50OiBURWxlbWVudCxcblx0c2lnbmFsOiBBYm9ydFNpZ25hbCxcbik6IHZvaWQge1xuXHRpZiAoIW9uKSByZXR1cm5cblx0Zm9yIChjb25zdCBba2V5LCBoYW5kbGVyXSBvZiBPYmplY3QuZW50cmllcyhvbikpIHtcblx0XHRpZiAoIWhhbmRsZXIpIGNvbnRpbnVlXG5cdFx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0a2V5LFxuXHRcdFx0ZXZlbnQgPT4gdm9pZCAoaGFuZGxlciBhcyAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pKGV2ZW50KSxcblx0XHRcdHNpZ25hbCA/IHsgc2lnbmFsIH0gOiB1bmRlZmluZWQsXG5cdFx0KVxuXHR9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ2xhc3NMaXN0KGNsYXNzZXM6IENzc0NsYXNzZXMgfCB1bmRlZmluZWQpIHtcblx0aWYgKGNsYXNzZXMgPT09IG51bGwgfHwgY2xhc3NlcyA9PT0gdW5kZWZpbmVkKSByZXR1cm4ge31cblx0aWYgKEFycmF5LmlzQXJyYXkoY2xhc3NlcykpIHJldHVybiB7IGNsYXNzTmFtZTogY2xhc3Nlcy5maWx0ZXIoQm9vbGVhbikuam9pbignICcpIH1cblxuXHRyZXR1cm4geyBjbGFzc05hbWU6IFN0cmluZyhjbGFzc2VzKSB9XG59XG5cbmZ1bmN0aW9uIGlzV3JpdGFibGVEb21Qcm9wZXJ0eShlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRsZXQgcHJvdG86IG9iamVjdCB8IG51bGwgPSBlbGVtZW50XG5cdHdoaWxlIChwcm90bykge1xuXHRcdGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBrZXkpXG5cdFx0aWYgKGRlc2MpIHJldHVybiAhIShkZXNjLndyaXRhYmxlIHx8IGRlc2Muc2V0KVxuXHRcdHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKSBhcyBvYmplY3QgfCBudWxsXG5cdH1cblx0cmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCB0eXBlIEVsZW1lbnRDcmVhdG9yID0gKGtleTogc3RyaW5nLCBucz86IHN0cmluZykgPT4gRWxlbWVudFxuXG4vKipcbiAqIFRoZSBvdmVybG9hZGVkIGZ1bmN0aW9uIHR5cGUgcmV0dXJuZWQgYnkge0BsaW5rIGNyZWF0ZUVsZW1lbnRGYWN0b3J5fS5cbiAqIEFjY2VwdHMgSFRNTCBvciBTVkcgdGFnIG5hbWVzIGFuZCByZXR1cm5zIHRoZSBtYXRjaGluZyBlbGVtZW50IHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudENyZWF0b3JGdW5jdGlvbiB7XG5cdCh0YWc6ICdzdmcnLCBwcm9wZXJ0aWVzPzogU3ZnRWxlbWVudFByb3BlcnRpZXM8J3N2Zyc+KTogU1ZHU1ZHRWxlbWVudFxuXHQ8SyBleHRlbmRzIEV4Y2x1ZGU8U3ZnVGFnTmFtZSwgJ3N2Zyc+Pih0YWc6IEssIHByb3BlcnRpZXM/OiBTdmdFbGVtZW50UHJvcGVydGllczxLPik6IFN2Z1RhZ0VsZW1lbnQ8Sz5cblx0PEsgZXh0ZW5kcyBrZXlvZiBIVE1MRWxlbWVudFRhZ05hbWVNYXA+KHRhZzogSywgcHJvcGVydGllcz86IE5vSW5mZXI8SHRtbEVsZW1lbnRQcm9wZXJ0aWVzPEs+Pik6IEhUTUxFbGVtZW50VGFnTmFtZU1hcFtLXVxufVxuXG5leHBvcnQgdHlwZSBFbGVtZW50RmFjdG9yeSA9IEVsZW1lbnRDcmVhdG9yRnVuY3Rpb25cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbGVtZW50RmFjdG9yeShjb25zdHJ1Y3RFbGVtZW50OiBFbGVtZW50Q3JlYXRvciwgc2lnbmFsOiBBYm9ydFNpZ25hbCk6IEVsZW1lbnRDcmVhdG9yRnVuY3Rpb24ge1xuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBIVE1MIG9yIFNWRyBlbGVtZW50LiBUaGUgZWxlbWVudCBpcyBOT1QgYXBwZW5kZWQgdG8gdGhlXG5cdCAqIGRvY3VtZW50OyBwYXNzIGl0IHRvIGBhcHBlbmRgLCBgcHJlcGVuZGAsIG9yIHNldCBpdCBhcyBgY2hpbGRyZW5gIG9mXG5cdCAqIGFub3RoZXIgZWxlbWVudC5cblx0ICpcblx0ICogSFRNTCB0YWdzIHVzZSB0aGUgcmVndWxhciBgSFRNTEVsZW1lbnRUYWdOYW1lTWFwYCBrZXlzLiBTVkcgdGFncyB1c2Vcblx0ICogYCdzdmcnYCBmb3IgdGhlIHJvb3QgYW5kIGAnc3ZnOjxuYW1lPidgIGZvciBldmVyeXRoaW5nIGVsc2UgKHRoZSBwcmVmaXhcblx0ICoga2VlcHMgdGhlbSBmcm9tIGNvbGxpZGluZyB3aXRoIHNhbWUtbmFtZWQgSFRNTCB0YWdzKS5cblx0ICpcblx0ICogUHJvcGVydGllczpcblx0ICogLSBgY2xhc3Nlc2A6IGEgY2xhc3Mgc3RyaW5nIG9yIGEge0BsaW5rIENzc0NsYXNzZXN9IGFycmF5LiBGYWxzeVxuXHQgKiAgIGVudHJpZXMgYXJlIGZpbHRlcmVkIG91dC5cblx0ICogLSBgYXJpYWA6IEFSSUEgYXR0cmlidXRlcy4gQWNjZXB0cyBzdHJpbmcgSURzIG9yIGBFbGVtZW50YCByZWZlcmVuY2VzXG5cdCAqICAgZm9yIElETCByZWZsZWN0aW9uIHByb3BlcnRpZXMgKGUuZy4gYGFyaWEtbGFiZWxsZWRieWApLlxuXHQgKiAtIGBvbmA6IGFuIG9iamVjdCBvZiBldmVudCBoYW5kbGVycy4gRWFjaCBsaXN0ZW5lciBpcyByZW1vdmVkIHdoZW4gdGhlXG5cdCAqICAgY29tcG9uZW50IHVubW91bnRzLlxuXHQgKiAgIGBjaGlsZHJlbmA6IGEgc2luZ2xlIGBOb2RlYCBvciBhbiBhcnJheTsgYXBwZW5kZWQgaW4gb3JkZXIuXG5cdCAqIC0gT3RoZXIgcHJvcHMgYXJlIHNldCBhcyBET00gcHJvcGVydGllcyAoc28gYGh0bWxGb3JgIG5vdCBgZm9yYCxcblx0ICogICBgcmVhZE9ubHlgIG5vdCBgcmVhZG9ubHlgKS4gT24gU1ZHLCBhbnl0aGluZyB0aGF0IGlzbid0IGEgd3JpdGFibGVcblx0ICogICBET00gcHJvcGVydHkgZmFsbHMgYmFjayB0byBgc2V0QXR0cmlidXRlYC5cblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogYGBgdHNcblx0ICogY29uc3QgZGl2ID0gZWxlbWVudCgnZGl2Jywge1xuXHQgKiAgIGNsYXNzZXM6ICdjYXJkJyxcblx0ICogICBhcmlhOiB7IGxhYmVsOiAnQ2FyZCcsIGxhYmVsbGVkQnk6IGhlYWRpbmdFbCB9LFxuXHQgKiAgIGNoaWxkcmVuOiBbXG5cdCAqICAgICBlbGVtZW50KCdoMicsIHsgdGV4dENvbnRlbnQ6ICdUaXRsZScgfSksXG5cdCAqICAgICBlbGVtZW50KCdwJywgIHsgdGV4dENvbnRlbnQ6ICdCb2R5JyAgfSksXG5cdCAqICAgXSxcblx0ICogfSlcblx0ICpcblx0ICogY29uc3QgaWNvbiA9IGVsZW1lbnQoJ3N2ZycsIHtcblx0ICogICB2aWV3Qm94OiAnMCAwIDI0IDI0Jyxcblx0ICogICBhcmlhOiB7IGhpZGRlbjogJ3RydWUnIH0sXG5cdCAqICAgY2hpbGRyZW46IGVsZW1lbnQoJ3N2Zzp1c2UnLCB7IGhyZWY6IHNwcml0ZVVybCB9KSxcblx0ICogfSlcblx0ICogYGBgXG5cdCAqL1xuXHRmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZzogJ3N2ZycsIHByb3BlcnRpZXM/OiBTdmdFbGVtZW50UHJvcGVydGllczwnc3ZnJz4pOiBTVkdTVkdFbGVtZW50XG5cdGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQ8SyBleHRlbmRzIEV4Y2x1ZGU8U3ZnVGFnTmFtZSwgJ3N2Zyc+Pih0YWc6IEssIHByb3BlcnRpZXM/OiBTdmdFbGVtZW50UHJvcGVydGllczxLPik6IFN2Z1RhZ0VsZW1lbnQ8Sz5cblx0ZnVuY3Rpb24gY3JlYXRlRWxlbWVudDxLRWxlbWVudCBleHRlbmRzIGtleW9mIEhUTUxFbGVtZW50VGFnTmFtZU1hcD4odGFnOiBLRWxlbWVudCwgcHJvcGVydGllcz86IE5vSW5mZXI8SHRtbEVsZW1lbnRQcm9wZXJ0aWVzPEtFbGVtZW50Pj4pOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbS0VsZW1lbnRdXG5cdGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodGFnOiBzdHJpbmcsIHByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEVsZW1lbnQge1xuXHRcdGlmICh0YWcgPT09ICdzdmcnIHx8IHRhZy5zdGFydHNXaXRoKCdzdmc6JykpIHtcblx0XHRcdGNvbnN0IGFjdHVhbFRhZyA9IHRhZyA9PT0gJ3N2ZycgPyAnc3ZnJyA6IHRhZy5zbGljZSg0KVxuXHRcdFx0Y29uc3QgeyBjbGFzc2VzLCBjaGlsZHJlbiwgYXJpYSwgb24sIHN0eWxlLCAuLi5hdHRyaWJ1dGVzIH0gPSBwcm9wZXJ0aWVzID8/IHt9XG5cdFx0XHRjb25zdCBuZXdFbGVtZW50ID0gY29uc3RydWN0RWxlbWVudChhY3R1YWxUYWcsICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycpIGFzIFNWR0VsZW1lbnRcblxuXHRcdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykpIHtcblx0XHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIGNvbnRpbnVlXG5cdFx0XHRcdGlmIChpc1dyaXRhYmxlRG9tUHJvcGVydHkobmV3RWxlbWVudCwga2V5KSkge1xuXHRcdFx0XHRcdDsobmV3RWxlbWVudCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldID0gdmFsdWVcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcblx0XHRcdFx0XHRuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIFN0cmluZyh2YWx1ZSkpXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgeyBjbGFzc05hbWUgfSA9IGJ1aWxkQ2xhc3NMaXN0KGNsYXNzZXMgYXMgQ3NzQ2xhc3NlcyB8IHVuZGVmaW5lZClcblx0XHRcdGlmIChjbGFzc05hbWUpIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIGNsYXNzTmFtZSlcblxuXHRcdFx0aWYgKHN0eWxlKSBPYmplY3QuYXNzaWduKG5ld0VsZW1lbnQuc3R5bGUsIHN0eWxlKVxuXHRcdFx0YnVpbGRBcmlhUHJvcGVydGllcyhhcmlhIGFzIEFyaWEgfCB1bmRlZmluZWQsIG5ld0VsZW1lbnQpXG5cdFx0XHRidWlsZE9uSGFuZGxlcnMob24gYXMgRWxlbWVudE9uSGFuZGxlcnM8RWxlbWVudD4gfCB1bmRlZmluZWQsIG5ld0VsZW1lbnQsIHNpZ25hbClcblxuXHRcdFx0YXBwZW5kQ2hpbGRyZW4obmV3RWxlbWVudCwgY2hpbGRyZW4gYXMgQXJyYXk8Tm9kZSB8IHN0cmluZz4gfCBOb2RlIHwgc3RyaW5nIHwgdW5kZWZpbmVkKVxuXG5cdFx0XHRyZXR1cm4gbmV3RWxlbWVudFxuXHRcdH1cblxuXHRcdGNvbnN0IHsgYXJpYSwgY2hpbGRyZW4sIGNsYXNzZXMsIG9uLCBzdHlsZSwgLi4uYXNzaWduYWJsZVByb3BlcnRpZXMgfSA9IHByb3BlcnRpZXMgPz8ge31cblx0XHRjb25zdCBuZXdFbGVtZW50ID0gY29uc3RydWN0RWxlbWVudCh0YWcpIGFzIEhUTUxFbGVtZW50XG5cblx0XHRjb25zdCB7IGNsYXNzTmFtZSB9ID0gYnVpbGRDbGFzc0xpc3QoY2xhc3NlcyBhcyBDc3NDbGFzc2VzIHwgdW5kZWZpbmVkKVxuXHRcdGlmIChjbGFzc05hbWUpIG5ld0VsZW1lbnQuY2xhc3NOYW1lID0gY2xhc3NOYW1lXG5cblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhc3NpZ25hYmxlUHJvcGVydGllcykpIHtcblx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSBjb250aW51ZVxuXHRcdFx0aWYgKGlzV3JpdGFibGVEb21Qcm9wZXJ0eShuZXdFbGVtZW50LCBrZXkpKSB7XG5cdFx0XHRcdDsobmV3RWxlbWVudCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldID0gdmFsdWVcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuXHRcdFx0XHRuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIFN0cmluZyh2YWx1ZSkpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHN0eWxlKSBPYmplY3QuYXNzaWduKG5ld0VsZW1lbnQuc3R5bGUsIHN0eWxlKVxuXHRcdGJ1aWxkQXJpYVByb3BlcnRpZXMoYXJpYSBhcyBBcmlhIHwgdW5kZWZpbmVkLCBuZXdFbGVtZW50KVxuXHRcdGJ1aWxkT25IYW5kbGVycyhvbiBhcyBFbGVtZW50T25IYW5kbGVyczxIVE1MRWxlbWVudD4gfCB1bmRlZmluZWQsIG5ld0VsZW1lbnQsIHNpZ25hbClcblx0XHRhcHBlbmRDaGlsZHJlbihuZXdFbGVtZW50LCBjaGlsZHJlbiBhcyBBcnJheTxOb2RlIHwgc3RyaW5nPiB8IE5vZGUgfCBzdHJpbmcgfCB1bmRlZmluZWQpXG5cblx0XHRyZXR1cm4gbmV3RWxlbWVudFxuXHR9XG5cblx0cmV0dXJuIGNyZWF0ZUVsZW1lbnRcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ2hpbGRyZW4oZWxlbWVudDogRWxlbWVudCwgY2hpbGRyZW46IEFycmF5PE5vZGUgfCBzdHJpbmc+IHwgTm9kZSB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcblx0XHRmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG5cdFx0XHRlbGVtZW50LmFwcGVuZChjaGlsZClcblx0XHR9XG5cdH1cblx0ZWxzZSBpZiAoY2hpbGRyZW4pIHtcblx0XHRlbGVtZW50LmFwcGVuZChjaGlsZHJlbilcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBNkNBLFNBQWdCLFNBQVMsV0FBcUIsVUFBc0MsTUFBZ0I7Q0FDbkcsSUFBSSxZQUFZLE1BQU07Q0FDdEIsT0FBTztBQUNSOzs7QUNDQSxNQUFNLDRCQUE2RTtDQUNsRixrQkFBa0I7Q0FDbEIsVUFBVTtDQUNWLGFBQWE7Q0FDYixTQUFTO0NBQ1QsY0FBYztDQUNkLFFBQVE7Q0FDUixZQUFZO0NBQ1osTUFBTTtBQUNQO0FBR0EsTUFBTSxtQ0FBb0Y7Q0FDekYsa0JBQWtCO0NBQ2xCLFVBQVU7Q0FDVixhQUFhO0NBQ2IsU0FBUztDQUNULGNBQWM7Q0FDZCxRQUFRO0NBQ1IsWUFBWTtDQUNaLE1BQU07QUFDUDtBQUVBLFNBQVMsWUFBWSxTQUFrQixLQUFhLE9BQXNCO0NBQ3pFLFFBQWdELE9BQU87QUFDeEQ7QUFFQSxTQUFnQixvQkFBb0IsTUFBd0IsU0FBd0I7Q0FDbkYsSUFBSSxDQUFDLE1BQU07Q0FDWCxLQUFLLE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxRQUFRLElBQUksR0FBRztFQUNoRCxJQUFJLEVBQUUsT0FBTyw0QkFBNEI7R0FFeEMsWUFBWSxTQUFTLE9BREMsSUFBSSxFQUFFLENBQUMsWUFBWSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQzNCLEtBQUs7R0FDbEM7RUFDRDtFQUNBLElBQUksVUFBVSxRQUFRLFVBQVUsS0FBQSxHQUFXO0dBQzFDLFFBQVEsZ0JBQWdCLDBCQUEwQixJQUF1QztHQUN6RjtFQUNEO0VBQ0EsSUFBSSxpQkFBaUIsU0FBUztHQUM3QixNQUFNLFNBQVMsaUNBQWlDO0dBQ2hELFlBQVksU0FBUyxRQUFRLE9BQU8sU0FBUyxVQUFVLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSztHQUMxRTtFQUNEO0VBQ0EsUUFBUSxhQUFhLDBCQUEwQixNQUF5QyxLQUFLO0NBQzlGO0FBQ0Q7OztBQ3hGQSxTQUFTLGdCQUNSLElBQ0EsU0FDQSxRQUNPO0NBQ1AsSUFBSSxDQUFDLElBQUk7Q0FDVCxLQUFLLE1BQU0sQ0FBQyxLQUFLLFlBQVksT0FBTyxRQUFRLEVBQUUsR0FBRztFQUNoRCxJQUFJLENBQUMsU0FBUztFQUNkLFFBQVEsaUJBQ1AsTUFDQSxVQUFTLEtBQU0sUUFBb0QsS0FBSyxHQUN4RSxTQUFTLEVBQUUsT0FBTyxJQUFJLEtBQUEsQ0FDdkI7Q0FDRDtBQUNEO0FBRUEsU0FBUyxlQUFlLFNBQWlDO0NBQ3hELElBQUksWUFBWSxRQUFRLFlBQVksS0FBQSxHQUFXLE9BQU8sQ0FBQztDQUN2RCxJQUFJLE1BQU0sUUFBUSxPQUFPLEdBQUcsT0FBTyxFQUFFLFdBQVcsUUFBUSxPQUFPLE9BQU8sQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0NBRWxGLE9BQU8sRUFBRSxXQUFXLE9BQU8sT0FBTyxFQUFFO0FBQ3JDO0FBRUEsU0FBUyxzQkFBc0IsU0FBa0IsS0FBc0I7Q0FDdEUsSUFBSSxRQUF1QjtDQUMzQixPQUFPLE9BQU87RUFDYixNQUFNLE9BQU8sT0FBTyx5QkFBeUIsT0FBTyxHQUFHO0VBQ3ZELElBQUksTUFBTSxPQUFPLENBQUMsRUFBRSxLQUFLLFlBQVksS0FBSztFQUMxQyxRQUFRLE9BQU8sZUFBZSxLQUFLO0NBQ3BDO0NBQ0EsT0FBTztBQUNSO0FBZUEsU0FBZ0IscUJBQXFCLGtCQUFrQyxRQUE2QztDQTJDbkgsU0FBUyxjQUFjLEtBQWEsWUFBK0M7RUFDbEYsSUFBSSxRQUFRLFNBQVMsSUFBSSxXQUFXLE1BQU0sR0FBRztHQUM1QyxNQUFNLFlBQVksUUFBUSxRQUFRLFFBQVEsSUFBSSxNQUFNLENBQUM7R0FDckQsTUFBTSxFQUFFLFNBQVMsVUFBVSxNQUFNLElBQUksT0FBTyxHQUFHLGVBQWUsY0FBYyxDQUFDO0dBQzdFLE1BQU0sYUFBYSxpQkFBaUIsV0FBVyw0QkFBNEI7R0FFM0UsS0FBSyxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sUUFBUSxVQUFVLEdBQUc7SUFDdEQsSUFBSSxVQUFVLEtBQUEsS0FBYSxVQUFVLE1BQU07SUFDM0MsSUFBSSxzQkFBc0IsWUFBWSxHQUFHLEdBQ3ZDLFdBQW1ELE9BQU87U0FFdkQsSUFBSSxPQUFPLFVBQVUsWUFBWSxPQUFPLFVBQVUsWUFBWSxPQUFPLFVBQVUsV0FDbkYsV0FBVyxhQUFhLEtBQUssT0FBTyxLQUFLLENBQUM7R0FFNUM7R0FFQSxNQUFNLEVBQUUsY0FBYyxlQUFlLE9BQWlDO0dBQ3RFLElBQUksV0FBVyxXQUFXLGFBQWEsU0FBUyxTQUFTO0dBRXpELElBQUksT0FBTyxPQUFPLE9BQU8sV0FBVyxPQUFPLEtBQUs7R0FDaEQsb0JBQW9CLE1BQTBCLFVBQVU7R0FDeEQsZ0JBQWdCLElBQThDLFlBQVksTUFBTTtHQUVoRixlQUFlLFlBQVksUUFBNEQ7R0FFdkYsT0FBTztFQUNSO0VBRUEsTUFBTSxFQUFFLE1BQU0sVUFBVSxTQUFTLElBQUksT0FBTyxHQUFHLHlCQUF5QixjQUFjLENBQUM7RUFDdkYsTUFBTSxhQUFhLGlCQUFpQixHQUFHO0VBRXZDLE1BQU0sRUFBRSxjQUFjLGVBQWUsT0FBaUM7RUFDdEUsSUFBSSxXQUFXLFdBQVcsWUFBWTtFQUV0QyxLQUFLLE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxRQUFRLG9CQUFvQixHQUFHO0dBQ2hFLElBQUksVUFBVSxLQUFBLEtBQWEsVUFBVSxNQUFNO0dBQzNDLElBQUksc0JBQXNCLFlBQVksR0FBRyxHQUN2QyxXQUFtRCxPQUFPO1FBRXZELElBQUksT0FBTyxVQUFVLFlBQVksT0FBTyxVQUFVLFlBQVksT0FBTyxVQUFVLFdBQ25GLFdBQVcsYUFBYSxLQUFLLE9BQU8sS0FBSyxDQUFDO0VBRTVDO0VBRUEsSUFBSSxPQUFPLE9BQU8sT0FBTyxXQUFXLE9BQU8sS0FBSztFQUNoRCxvQkFBb0IsTUFBMEIsVUFBVTtFQUN4RCxnQkFBZ0IsSUFBa0QsWUFBWSxNQUFNO0VBQ3BGLGVBQWUsWUFBWSxRQUE0RDtFQUV2RixPQUFPO0NBQ1I7Q0FFQSxPQUFPO0FBQ1I7QUFFQSxTQUFTLGVBQWUsU0FBa0IsVUFBa0U7Q0FDM0csSUFBSSxNQUFNLFFBQVEsUUFBUSxHQUN6QixLQUFLLE1BQU0sU0FBUyxVQUNuQixRQUFRLE9BQU8sS0FBSztNQUdqQixJQUFJLFVBQ1IsUUFBUSxPQUFPLFFBQVE7QUFFekIifQ==
|
package/dist/events.d.mts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from "@rooted/events";
|
package/dist/events.mjs
CHANGED
|
@@ -1,3 +1 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
//# sourceMappingURL=events.mjs.map
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJldmVudHMubWpzIiwic291cmNlc0NvbnRlbnQiOltdfQ==
|
|
1
|
+
export * from "@rooted/events";
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rooted/elements",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.0-alpha.7",
|
|
4
|
+
"description": "Typed HTML and SVG element factory for the rooted framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"web-components",
|
|
7
7
|
"custom-elements",
|
|
@@ -44,17 +44,17 @@
|
|
|
44
44
|
"scripts": {
|
|
45
45
|
"build": "pnpm build:ci",
|
|
46
46
|
"build:dev": "pnpm build:ci && rooted-development extract-api",
|
|
47
|
-
"build:ci": "
|
|
48
|
-
"watch": "
|
|
47
|
+
"build:ci": "tsdown",
|
|
48
|
+
"watch": "tsdown --watch --no-clean",
|
|
49
49
|
"clean": "rm -rf dist",
|
|
50
50
|
"extract-api": "rooted-development extract-api"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
|
-
"@rooted/events": "1.0.0-alpha.
|
|
53
|
+
"@rooted/events": "1.0.0-alpha.7"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@rooted/development": "workspace:*",
|
|
57
|
-
"@rooted/events": "1.0.0-alpha.
|
|
58
|
-
"tsx": "^4.
|
|
57
|
+
"@rooted/events": "1.0.0-alpha.7",
|
|
58
|
+
"tsx": "^4.23.1"
|
|
59
59
|
}
|
|
60
60
|
}
|
package/readme.md
CHANGED
|
@@ -1,7 +1,24 @@
|
|
|
1
1
|
# [`@rooted/elements`](https://www.npmjs.com/package/@rooted/elements)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Typed HTML and SVG element factory. Usable on its own, or as the DOM helper layer for the [`@rooted/*`](https://github.com/Marvin-Brouwer/rooted#rooted) framework.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> [!IMPORTANT]
|
|
6
|
+
> This package is still in alpha.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
```sh
|
|
9
|
+
pnpm add @rooted/elements
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
import { element } from '@rooted/elements'
|
|
14
|
+
|
|
15
|
+
const card = element('div', {
|
|
16
|
+
classes: 'card',
|
|
17
|
+
children: [
|
|
18
|
+
element('h2', { textContent: 'Title' }),
|
|
19
|
+
element('p', { textContent: 'Body' }),
|
|
20
|
+
],
|
|
21
|
+
})
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
More in the [elements page](https://github.com/Marvin-Brouwer/rooted/blob/main/docs/advanced/elements.md).
|