@citolab/qti-components 6.9.1-beta.65 → 6.9.1-beta.68

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.
@@ -1,2 +1,289 @@
1
- import{a,b,c}from"../chunk-YY52I6U7.js";import"../chunk-NYAUPIAG.js";export{a as qtiTransformItem,b as qtiTransformManifest,c as qtiTransformTest};
2
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
1
+ // src/lib/qti-transformers/qti-transformers.ts
2
+ var xml = String.raw;
3
+ var xmlToHTML = xml`<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
4
+ <xsl:output method="html" version="5.0" encoding="UTF-8" indent="yes" />
5
+ <xsl:template match="@*|node()">
6
+ <xsl:copy>
7
+ <xsl:apply-templates select="@*|node()"/>
8
+ </xsl:copy>
9
+ </xsl:template>
10
+
11
+ <!-- remove existing namespaces -->
12
+ <xsl:template match="*">
13
+ <!-- remove element prefix -->
14
+ <xsl:element name="{local-name()}">
15
+ <!-- process attributes -->
16
+ <xsl:for-each select="@*">
17
+ <!-- remove attribute prefix -->
18
+ <xsl:attribute name="{local-name()}">
19
+ <xsl:value-of select="."/>
20
+ </xsl:attribute>
21
+ </xsl:for-each>
22
+ <xsl:apply-templates/>
23
+ </xsl:element>
24
+ </xsl:template>
25
+ </xsl:stylesheet>`;
26
+ function extendElementName(xmlFragment, tagName, extension) {
27
+ xmlFragment.querySelectorAll(tagName).forEach((element) => {
28
+ const newTagName = `${tagName}-${extension}`;
29
+ const newElement = createElementWithNewTagName(element, newTagName);
30
+ element.replaceWith(newElement);
31
+ });
32
+ }
33
+ function extendElementsWithClass(xmlFragment, classNamePattern) {
34
+ xmlFragment.querySelectorAll("*").forEach((element) => {
35
+ const classList = element.classList;
36
+ if (classList) {
37
+ classList.forEach((className) => {
38
+ if (className.startsWith(`${classNamePattern}:`)) {
39
+ const suffix = className.slice(`${classNamePattern}:`.length);
40
+ const newTagName = `${element.nodeName}-${suffix}`;
41
+ const newElement = createElementWithNewTagName(element, newTagName);
42
+ element.replaceWith(newElement);
43
+ }
44
+ });
45
+ }
46
+ });
47
+ }
48
+ function createElementWithNewTagName(element, newTagName) {
49
+ const newElement = document.createElement(newTagName);
50
+ for (const attr of element.attributes) {
51
+ newElement.setAttribute(attr.name, attr.value);
52
+ }
53
+ while (element.firstChild) {
54
+ newElement.appendChild(element.firstChild);
55
+ }
56
+ return newElement;
57
+ }
58
+ function itemsFromTest(xmlFragment) {
59
+ const items = [];
60
+ xmlFragment.querySelectorAll("qti-assessment-item-ref").forEach((el) => {
61
+ const identifier = el.getAttribute("identifier");
62
+ const href = el.getAttribute("href");
63
+ const category = el.getAttribute("category");
64
+ items.push({ identifier, href, category });
65
+ });
66
+ return items;
67
+ }
68
+ var currentRequest = null;
69
+ function loadXML(url, cancelPreviousRequest = false) {
70
+ if (cancelPreviousRequest && currentRequest !== null) {
71
+ currentRequest.abort();
72
+ }
73
+ return new Promise((resolve, reject) => {
74
+ const xhr = new XMLHttpRequest();
75
+ currentRequest = xhr;
76
+ xhr.open("GET", url, true);
77
+ xhr.responseType = "document";
78
+ xhr.onload = () => {
79
+ if (xhr.status >= 200 && xhr.status < 300) {
80
+ resolve(xhr.responseXML);
81
+ } else {
82
+ reject(xhr.statusText);
83
+ }
84
+ };
85
+ xhr.onerror = () => {
86
+ reject(xhr.statusText);
87
+ };
88
+ xhr.send();
89
+ });
90
+ }
91
+ function parseXML(xmlDocument) {
92
+ const parser = new DOMParser();
93
+ const xmlFragment = parser.parseFromString(xmlDocument, "text/xml");
94
+ return xmlFragment;
95
+ }
96
+ function toHTML(xmlFragment) {
97
+ const processor = new XSLTProcessor();
98
+ const xsltDocument = new DOMParser().parseFromString(xmlToHTML, "text/xml");
99
+ processor.importStylesheet(xsltDocument);
100
+ const itemHTMLFragment = processor.transformToFragment(xmlFragment, document);
101
+ return itemHTMLFragment;
102
+ }
103
+ function setLocation(xmlFragment, location) {
104
+ if (!location.endsWith("/")) {
105
+ location += "/";
106
+ }
107
+ xmlFragment.querySelectorAll("[src],[href],[primary-path]").forEach((elWithSrc) => {
108
+ var _a;
109
+ let attr = "";
110
+ if (elWithSrc.getAttribute("src")) {
111
+ attr = "src";
112
+ }
113
+ if (elWithSrc.getAttribute("href")) {
114
+ attr = "href";
115
+ }
116
+ if (elWithSrc.getAttribute("primary-path")) {
117
+ attr = "primary-path";
118
+ }
119
+ const attrValue = (_a = elWithSrc.getAttribute(attr)) == null ? void 0 : _a.trim();
120
+ if (!attrValue.startsWith("data:") && !attrValue.startsWith("http")) {
121
+ const newSrcValue = location + encodeURI(attrValue);
122
+ elWithSrc.setAttribute(attr, newSrcValue);
123
+ }
124
+ });
125
+ }
126
+ function convertCDATAtoComment(xmlFragment) {
127
+ const cdataElements = xmlFragment.querySelectorAll('qti-custom-operator[class="js.org"] > qti-base-value');
128
+ cdataElements.forEach((element) => {
129
+ const commentText = document.createComment(element.textContent);
130
+ element.replaceChild(commentText, element.firstChild);
131
+ });
132
+ }
133
+ function stripStyleSheets(xmlFragment) {
134
+ xmlFragment.querySelectorAll("qti-stylesheet").forEach((stylesheet) => stylesheet.remove());
135
+ }
136
+
137
+ // src/lib/qti-transformers/qti-transform-item.ts
138
+ var qtiTransformItem = () => {
139
+ let xmlFragment;
140
+ const api = {
141
+ async load(uri, cancelPreviousRequest = false) {
142
+ return new Promise((resolve, reject) => {
143
+ loadXML(uri, cancelPreviousRequest).then((xml2) => {
144
+ xmlFragment = xml2;
145
+ api.path(uri.substring(0, uri.lastIndexOf("/")));
146
+ return resolve(api);
147
+ });
148
+ });
149
+ },
150
+ parse(xmlString) {
151
+ xmlFragment = parseXML(xmlString);
152
+ return api;
153
+ },
154
+ path: (location) => {
155
+ setLocation(xmlFragment, location);
156
+ return api;
157
+ },
158
+ fn(fn) {
159
+ fn(xmlFragment);
160
+ return api;
161
+ },
162
+ pciHooks(uri) {
163
+ const attributes = ["hook", "module"];
164
+ const documentPath = uri.substring(0, uri.lastIndexOf("/"));
165
+ for (const attribute of attributes) {
166
+ const srcAttributes = xmlFragment.querySelectorAll("[" + attribute + "]");
167
+ srcAttributes.forEach((node) => {
168
+ const srcValue = node.getAttribute(attribute);
169
+ if (!srcValue.startsWith("data:") && !srcValue.startsWith("http")) {
170
+ node.setAttribute("base-url", uri);
171
+ node.setAttribute(
172
+ "module",
173
+ documentPath + "/" + encodeURI(srcValue + (srcValue.endsWith(".js") ? "" : ".js"))
174
+ );
175
+ }
176
+ });
177
+ }
178
+ return api;
179
+ },
180
+ extendElementName: (tagName, extension) => {
181
+ extendElementName(xmlFragment, tagName, extension);
182
+ return api;
183
+ },
184
+ extendElementsWithClass: (param = "extend") => {
185
+ extendElementsWithClass(xmlFragment, param);
186
+ return api;
187
+ },
188
+ customInteraction(baseRef, baseItem) {
189
+ const qtiCustomInteraction = xmlFragment.querySelector("qti-custom-interaction");
190
+ const qtiCustomInteractionObject = qtiCustomInteraction.querySelector("object");
191
+ qtiCustomInteraction.setAttribute("data-base-ref", baseRef);
192
+ qtiCustomInteraction.setAttribute("data-base-item", baseRef + baseItem);
193
+ qtiCustomInteraction.setAttribute("data", qtiCustomInteractionObject.getAttribute("data"));
194
+ qtiCustomInteraction.setAttribute("width", qtiCustomInteractionObject.getAttribute("width"));
195
+ qtiCustomInteraction.setAttribute("height", qtiCustomInteractionObject.getAttribute("height"));
196
+ qtiCustomInteraction.removeChild(qtiCustomInteractionObject);
197
+ return api;
198
+ },
199
+ convertCDATAtoComment() {
200
+ convertCDATAtoComment(xmlFragment);
201
+ return api;
202
+ },
203
+ stripStyleSheets() {
204
+ stripStyleSheets(xmlFragment);
205
+ return api;
206
+ },
207
+ html() {
208
+ return new XMLSerializer().serializeToString(toHTML(xmlFragment));
209
+ },
210
+ xml() {
211
+ return new XMLSerializer().serializeToString(xmlFragment);
212
+ },
213
+ htmlDoc() {
214
+ return toHTML(xmlFragment);
215
+ },
216
+ xmlDoc() {
217
+ return xmlFragment;
218
+ }
219
+ };
220
+ return api;
221
+ };
222
+
223
+ // src/lib/qti-transformers/qti-transform-manifest.ts
224
+ var qtiTransformManifest = () => {
225
+ let xmlFragment;
226
+ const api = {
227
+ async load(uri) {
228
+ return new Promise((resolve, reject) => {
229
+ loadXML(uri).then((xml2) => {
230
+ xmlFragment = xml2;
231
+ return resolve(api);
232
+ });
233
+ });
234
+ },
235
+ parse(xmlString) {
236
+ xmlFragment = parseXML(xmlString);
237
+ },
238
+ assessmentTest() {
239
+ const el = xmlFragment.querySelector('resource[type="imsqti_test_xmlv3p0"]');
240
+ return { href: el.getAttribute("href"), identifier: el.getAttribute("identifier") };
241
+ }
242
+ };
243
+ return api;
244
+ };
245
+
246
+ // src/lib/qti-transformers/qti-transform-test.ts
247
+ var qtiTransformTest = () => {
248
+ let xmlFragment;
249
+ const api = {
250
+ async load(uri) {
251
+ return new Promise((resolve, reject) => {
252
+ loadXML(uri).then((xml2) => {
253
+ xmlFragment = xml2;
254
+ return resolve(api);
255
+ });
256
+ });
257
+ },
258
+ parse(xmlString) {
259
+ xmlFragment = parseXML(xmlString);
260
+ return api;
261
+ },
262
+ fn(fn) {
263
+ fn(xmlFragment);
264
+ return api;
265
+ },
266
+ items() {
267
+ return itemsFromTest(xmlFragment);
268
+ },
269
+ html() {
270
+ return new XMLSerializer().serializeToString(toHTML(xmlFragment));
271
+ },
272
+ xml() {
273
+ return new XMLSerializer().serializeToString(xmlFragment);
274
+ },
275
+ htmlDoc() {
276
+ return toHTML(xmlFragment);
277
+ },
278
+ xmlDoc() {
279
+ return xmlFragment;
280
+ }
281
+ };
282
+ return api;
283
+ };
284
+ export {
285
+ qtiTransformItem,
286
+ qtiTransformManifest,
287
+ qtiTransformTest
288
+ };
289
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2xpYi9xdGktdHJhbnNmb3JtZXJzL3F0aS10cmFuc2Zvcm1lcnMudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktdHJhbnNmb3JtZXJzL3F0aS10cmFuc2Zvcm0taXRlbS50cyIsICIuLi8uLi9zcmMvbGliL3F0aS10cmFuc2Zvcm1lcnMvcXRpLXRyYW5zZm9ybS1tYW5pZmVzdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS10cmFuc2Zvcm1lcnMvcXRpLXRyYW5zZm9ybS10ZXN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCB4bWwgPSBTdHJpbmcucmF3O1xuXG4vKiAgIDwhLS0gY29udmVydCBDREFUQSB0byBjb21tZW50cyAtLT5cbiAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD1cInRleHQoKVtjb250YWlucyguLCAnQ0RBVEEnKV1cIj5cbiAgPHhzbDpjb21tZW50PlxuICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PVwiLlwiLz5cbiAgPC94c2w6Y29tbWVudD5cbjwveHNsOnRlbXBsYXRlPlxuKi9cblxuLypcbiAgPCEtLSByZW1vdmUgeG1sIGNvbW1lbnRzIC0tPlxuICA8eHNsOnRlbXBsYXRlIG1hdGNoPVwiY29tbWVudCgpXCIgLz5cbiAgKi9cblxuY29uc3QgeG1sVG9IVE1MID0geG1sYDx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM6eHNsPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtXCI+XG48eHNsOm91dHB1dCBtZXRob2Q9XCJodG1sXCIgdmVyc2lvbj1cIjUuMFwiIGVuY29kaW5nPVwiVVRGLThcIiBpbmRlbnQ9XCJ5ZXNcIiAvPlxuICA8eHNsOnRlbXBsYXRlIG1hdGNoPVwiQCp8bm9kZSgpXCI+XG4gICAgPHhzbDpjb3B5PlxuICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PVwiQCp8bm9kZSgpXCIvPlxuICAgIDwveHNsOmNvcHk+XG4gIDwveHNsOnRlbXBsYXRlPlxuXG4gIDwhLS0gcmVtb3ZlIGV4aXN0aW5nIG5hbWVzcGFjZXMgLS0+XG4gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9XCIqXCI+XG4gICAgPCEtLSByZW1vdmUgZWxlbWVudCBwcmVmaXggLS0+XG4gICAgPHhzbDplbGVtZW50IG5hbWU9XCJ7bG9jYWwtbmFtZSgpfVwiPlxuICAgICAgPCEtLSBwcm9jZXNzIGF0dHJpYnV0ZXMgLS0+XG4gICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD1cIkAqXCI+XG4gICAgICAgIDwhLS0gcmVtb3ZlIGF0dHJpYnV0ZSBwcmVmaXggLS0+XG4gICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9XCJ7bG9jYWwtbmFtZSgpfVwiPlxuICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PVwiLlwiLz5cbiAgICAgICAgPC94c2w6YXR0cmlidXRlPlxuICAgICAgPC94c2w6Zm9yLWVhY2g+XG4gICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPlxuICA8L3hzbDplbGVtZW50PlxuPC94c2w6dGVtcGxhdGU+XG48L3hzbDpzdHlsZXNoZWV0PmA7XG5cbi8vIEZ1bmN0aW9uIHRvIGV4dGVuZCBlbGVtZW50cyB3aXRoIGEgc3BlY2lmaWMgdGFnIG5hbWUgYnkgYWRkaW5nIGFuIGV4dGVuc2lvbiBzdWZmaXhcbmV4cG9ydCBmdW5jdGlvbiBleHRlbmRFbGVtZW50TmFtZSh4bWxGcmFnbWVudDogWE1MRG9jdW1lbnQsIHRhZ05hbWU6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcpIHtcbiAgeG1sRnJhZ21lbnQucXVlcnlTZWxlY3RvckFsbCh0YWdOYW1lKS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IG5ld1RhZ05hbWUgPSBgJHt0YWdOYW1lfS0ke2V4dGVuc2lvbn1gO1xuICAgIGNvbnN0IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50V2l0aE5ld1RhZ05hbWUoZWxlbWVudCwgbmV3VGFnTmFtZSk7XG4gICAgZWxlbWVudC5yZXBsYWNlV2l0aChuZXdFbGVtZW50KTtcbiAgfSk7XG59XG5cbi8vIEZ1bmN0aW9uIHRvIGV4dGVuZCBhbnkgZWxlbWVudCB3aXRoIGEgc3BlY2lmaWMgY2xhc3MgcGF0dGVybiAoZS5nLiwgXCJleHRlbmQ6c3VmZml4XCIpXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kRWxlbWVudHNXaXRoQ2xhc3MoeG1sRnJhZ21lbnQ6IFhNTERvY3VtZW50LCBjbGFzc05hbWVQYXR0ZXJuOiBzdHJpbmcpIHtcbiAgeG1sRnJhZ21lbnQucXVlcnlTZWxlY3RvckFsbCgnKicpLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgY29uc3QgY2xhc3NMaXN0ID0gZWxlbWVudC5jbGFzc0xpc3Q7XG4gICAgaWYgKGNsYXNzTGlzdCkge1xuICAgICAgY2xhc3NMaXN0LmZvckVhY2goY2xhc3NOYW1lID0+IHtcbiAgICAgICAgaWYgKGNsYXNzTmFtZS5zdGFydHNXaXRoKGAke2NsYXNzTmFtZVBhdHRlcm59OmApKSB7XG4gICAgICAgICAgY29uc3Qgc3VmZml4ID0gY2xhc3NOYW1lLnNsaWNlKGAke2NsYXNzTmFtZVBhdHRlcm59OmAubGVuZ3RoKTtcbiAgICAgICAgICBjb25zdCBuZXdUYWdOYW1lID0gYCR7ZWxlbWVudC5ub2RlTmFtZX0tJHtzdWZmaXh9YDtcbiAgICAgICAgICBjb25zdCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudFdpdGhOZXdUYWdOYW1lKGVsZW1lbnQsIG5ld1RhZ05hbWUpO1xuICAgICAgICAgIGVsZW1lbnQucmVwbGFjZVdpdGgobmV3RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgZWxlbWVudCB3aXRoIGEgbmV3IHRhZyBuYW1lIGFuZCBjb3B5IGF0dHJpYnV0ZXMgYW5kIGNoaWxkcmVuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50V2l0aE5ld1RhZ05hbWUoZWxlbWVudCwgbmV3VGFnTmFtZSkge1xuICBjb25zdCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuZXdUYWdOYW1lKTtcbiAgLy8gQ29weSBhdHRyaWJ1dGVzXG4gIGZvciAoY29uc3QgYXR0ciBvZiBlbGVtZW50LmF0dHJpYnV0ZXMpIHtcbiAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudmFsdWUpO1xuICB9XG4gIC8vIENvcHkgY2hpbGQgbm9kZXNcbiAgd2hpbGUgKGVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudC5maXJzdENoaWxkKTtcbiAgfVxuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGl0ZW1zRnJvbVRlc3QoeG1sRnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQpIHtcbiAgY29uc3QgaXRlbXM6IHsgaWRlbnRpZmllcjogc3RyaW5nOyBocmVmOiBzdHJpbmc7IGNhdGVnb3J5OiBzdHJpbmcgfVtdID0gW107XG4gIHhtbEZyYWdtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0tcmVmJykuZm9yRWFjaChlbCA9PiB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IGVsLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuICAgIGNvbnN0IGhyZWYgPSBlbC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICBjb25zdCBjYXRlZ29yeSA9IGVsLmdldEF0dHJpYnV0ZSgnY2F0ZWdvcnknKTtcbiAgICBpdGVtcy5wdXNoKHsgaWRlbnRpZmllciwgaHJlZiwgY2F0ZWdvcnkgfSk7XG4gIH0pO1xuICByZXR1cm4gaXRlbXM7XG59XG5cbmxldCBjdXJyZW50UmVxdWVzdDogWE1MSHR0cFJlcXVlc3QgfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRYTUwodXJsLCBjYW5jZWxQcmV2aW91c1JlcXVlc3QgPSBmYWxzZSkge1xuICBpZiAoY2FuY2VsUHJldmlvdXNSZXF1ZXN0ICYmIGN1cnJlbnRSZXF1ZXN0ICE9PSBudWxsKSB7XG4gICAgY3VycmVudFJlcXVlc3QuYWJvcnQoKTsgLy8gQWJvcnQgdGhlIG9uZ29pbmcgcmVxdWVzdCBpZiB0aGVyZSBpcyBvbmVcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZTxYTUxEb2N1bWVudCB8IG51bGw+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICBjdXJyZW50UmVxdWVzdCA9IHhocjsgLy8gU3RvcmUgdGhlIGN1cnJlbnQgcmVxdWVzdFxuXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7XG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdkb2N1bWVudCc7XG5cbiAgICB4aHIub25sb2FkID0gKCkgPT4ge1xuICAgICAgaWYgKHhoci5zdGF0dXMgPj0gMjAwICYmIHhoci5zdGF0dXMgPCAzMDApIHtcbiAgICAgICAgcmVzb2x2ZSh4aHIucmVzcG9uc2VYTUwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgeGhyLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgIH07XG5cbiAgICB4aHIuc2VuZCgpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWE1MKHhtbERvY3VtZW50OiBzdHJpbmcpIHtcbiAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICBjb25zdCB4bWxGcmFnbWVudCA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoeG1sRG9jdW1lbnQsICd0ZXh0L3htbCcpO1xuICByZXR1cm4geG1sRnJhZ21lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0hUTUwoeG1sRnJhZ21lbnQ6IERvY3VtZW50KTogRG9jdW1lbnRGcmFnbWVudCB7XG4gIGNvbnN0IHByb2Nlc3NvciA9IG5ldyBYU0xUUHJvY2Vzc29yKCk7XG4gIGNvbnN0IHhzbHREb2N1bWVudCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoeG1sVG9IVE1MLCAndGV4dC94bWwnKTtcbiAgcHJvY2Vzc29yLmltcG9ydFN0eWxlc2hlZXQoeHNsdERvY3VtZW50KTtcbiAgY29uc3QgaXRlbUhUTUxGcmFnbWVudCA9IHByb2Nlc3Nvci50cmFuc2Zvcm1Ub0ZyYWdtZW50KHhtbEZyYWdtZW50LCBkb2N1bWVudCk7XG4gIHJldHVybiBpdGVtSFRNTEZyYWdtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9jYXRpb24oeG1sRnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQsIGxvY2F0aW9uOiBzdHJpbmcpIHtcbiAgaWYgKCFsb2NhdGlvbi5lbmRzV2l0aCgnLycpKSB7XG4gICAgbG9jYXRpb24gKz0gJy8nO1xuICB9XG5cbiAgeG1sRnJhZ21lbnQucXVlcnlTZWxlY3RvckFsbCgnW3NyY10sW2hyZWZdLFtwcmltYXJ5LXBhdGhdJykuZm9yRWFjaChlbFdpdGhTcmMgPT4ge1xuICAgIGxldCBhdHRyOiAnc3JjJyB8ICdocmVmJyB8ICdwcmltYXJ5LXBhdGgnIHwgJycgPSAnJztcblxuICAgIGlmIChlbFdpdGhTcmMuZ2V0QXR0cmlidXRlKCdzcmMnKSkge1xuICAgICAgYXR0ciA9ICdzcmMnO1xuICAgIH1cbiAgICBpZiAoZWxXaXRoU3JjLmdldEF0dHJpYnV0ZSgnaHJlZicpKSB7XG4gICAgICBhdHRyID0gJ2hyZWYnO1xuICAgIH1cbiAgICBpZiAoZWxXaXRoU3JjLmdldEF0dHJpYnV0ZSgncHJpbWFyeS1wYXRoJykpIHtcbiAgICAgIGF0dHIgPSAncHJpbWFyeS1wYXRoJztcbiAgICB9XG4gICAgY29uc3QgYXR0clZhbHVlID0gZWxXaXRoU3JjLmdldEF0dHJpYnV0ZShhdHRyKT8udHJpbSgpO1xuXG4gICAgaWYgKCFhdHRyVmFsdWUuc3RhcnRzV2l0aCgnZGF0YTonKSAmJiAhYXR0clZhbHVlLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgY29uc3QgbmV3U3JjVmFsdWUgPSBsb2NhdGlvbiArIGVuY29kZVVSSShhdHRyVmFsdWUpO1xuICAgICAgZWxXaXRoU3JjLnNldEF0dHJpYnV0ZShhdHRyLCBuZXdTcmNWYWx1ZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRDREFUQXRvQ29tbWVudCh4bWxGcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCkge1xuICBjb25zdCBjZGF0YUVsZW1lbnRzID0geG1sRnJhZ21lbnQucXVlcnlTZWxlY3RvckFsbCgncXRpLWN1c3RvbS1vcGVyYXRvcltjbGFzcz1cImpzLm9yZ1wiXSA+IHF0aS1iYXNlLXZhbHVlJyk7XG4gIGNkYXRhRWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICBjb25zdCBjb21tZW50VGV4dCA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoZWxlbWVudC50ZXh0Q29udGVudCk7XG4gICAgZWxlbWVudC5yZXBsYWNlQ2hpbGQoY29tbWVudFRleHQsIGVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBTdHlsZVNoZWV0cyh4bWxGcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCkge1xuICAvLyByZW1vdmUgcXRpLXN0eWxlc2hlZXQgdGFnXG4gIHhtbEZyYWdtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zdHlsZXNoZWV0JykuZm9yRWFjaChzdHlsZXNoZWV0ID0+IHN0eWxlc2hlZXQucmVtb3ZlKCkpO1xufVxuIiwgIi8qKlxuICogQnJvd3NlciBiYXNlZCBRVEktWE1MIHRvIEhUTUwgdHJhbnNmb3JtZXIuXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIG1ldGhvZHMgdG8gbG9hZCwgcGFyc2UsIHRyYW5zZm9ybSBhbmQgc2VyaWFsaXplIFFUSSBYTUwgaXRlbXMuXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBtZXRob2RzIHRvIGxvYWQsIHBhcnNlLCB0cmFuc2Zvcm0gYW5kIHNlcmlhbGl6ZSBRVEkgWE1MIGl0ZW1zLlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHF0aVRyYW5zZm9ybWVyID0gcXRpVHJhbnNmb3JtSXRlbSgpO1xuICogYXdhaXQgcXRpVHJhbnNmb3JtZXIubG9hZCgncGF0aC90by94bWwvZmlsZS54bWwnKTtcbiAqIHF0aVRyYW5zZm9ybWVyLnBhdGgoJy9hc3Nlc3NtZW50SXRlbS9pdGVtQm9keScpO1xuICogY29uc3QgaHRtbCA9IHF0aVRyYW5zZm9ybWVyLmh0bWwoKTtcbiAqIGNvbnN0IHhtbCA9IHF0aVRyYW5zZm9ybWVyLnhtbCgpO1xuICogY29uc3QgaHRtbGRvYyA9IHF0aVRyYW5zZm9ybWVyLmh0bWxkb2MoKTtcbiAqIGNvbnN0IHhtbGRvYyA9IHF0aVRyYW5zZm9ybWVyLnhtbGRvYygpO1xuICpcbiAqIHF0aVRyYW5zZm9ybUl0ZW0oKS5wYXJzZShzdG9yeVhNTCkuaHRtbCgpXG4gKi9cblxuaW1wb3J0IHtcbiAgY29udmVydENEQVRBdG9Db21tZW50LFxuICBleHRlbmRFbGVtZW50TmFtZSxcbiAgZXh0ZW5kRWxlbWVudHNXaXRoQ2xhc3MsXG4gIGxvYWRYTUwsXG4gIHBhcnNlWE1MLFxuICBzZXRMb2NhdGlvbixcbiAgc3RyaXBTdHlsZVNoZWV0cyxcbiAgdG9IVE1MXG59IGZyb20gJy4vcXRpLXRyYW5zZm9ybWVycyc7XG5cbmV4cG9ydCB0eXBlIHRyYW5zZm9ybUl0ZW1BcGkgPSB7XG4gIGxvYWQ6ICh1cmk6IHN0cmluZywgY2FuY2VsUHJldmlvdXNSZXF1ZXN0PzogYm9vbGVhbikgPT4gUHJvbWlzZTx0cmFuc2Zvcm1JdGVtQXBpPjtcbiAgcGFyc2U6ICh4bWxTdHJpbmc6IHN0cmluZykgPT4gdHJhbnNmb3JtSXRlbUFwaTtcbiAgcGF0aDogKGxvY2F0aW9uOiBzdHJpbmcpID0+IHRyYW5zZm9ybUl0ZW1BcGk7XG4gIGZuOiAoZm46ICh4bWxGcmFnbWVudDogWE1MRG9jdW1lbnQpID0+IHZvaWQpID0+IHRyYW5zZm9ybUl0ZW1BcGk7XG4gIHBjaUhvb2tzOiAodXJpOiBzdHJpbmcpID0+IHRyYW5zZm9ybUl0ZW1BcGk7XG4gIGV4dGVuZEVsZW1lbnROYW1lOiAoZWxlbWVudE5hbWU6IHN0cmluZywgZXh0ZW5kOiBzdHJpbmcpID0+IHRyYW5zZm9ybUl0ZW1BcGk7XG4gIGV4dGVuZEVsZW1lbnRzV2l0aENsYXNzOiAocGFyYW0/OiBzdHJpbmcpID0+IHRyYW5zZm9ybUl0ZW1BcGk7XG4gIGN1c3RvbUludGVyYWN0aW9uOiAoYmFzZVJlZjogc3RyaW5nLCBiYXNlSXRlbTogc3RyaW5nKSA9PiB0cmFuc2Zvcm1JdGVtQXBpO1xuICBjb252ZXJ0Q0RBVEF0b0NvbW1lbnQ6ICgpID0+IHRyYW5zZm9ybUl0ZW1BcGk7XG4gIHN0cmlwU3R5bGVTaGVldHM6ICgpID0+IHRyYW5zZm9ybUl0ZW1BcGk7XG4gIGh0bWw6ICgpID0+IHN0cmluZztcbiAgeG1sOiAoKSA9PiBzdHJpbmc7XG4gIGh0bWxEb2M6ICgpID0+IERvY3VtZW50RnJhZ21lbnQ7XG4gIHhtbERvYzogKCkgPT4gWE1MRG9jdW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgcXRpVHJhbnNmb3JtSXRlbSA9ICgpID0+IHtcbiAgbGV0IHhtbEZyYWdtZW50OiBYTUxEb2N1bWVudDtcblxuICBjb25zdCBhcGk6IHRyYW5zZm9ybUl0ZW1BcGkgPSB7XG4gICAgYXN5bmMgbG9hZCh1cmk6IHN0cmluZywgY2FuY2VsUHJldmlvdXNSZXF1ZXN0ID0gZmFsc2UpOiBQcm9taXNlPHR5cGVvZiBhcGk+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx0eXBlb2YgYXBpPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxvYWRYTUwodXJpLCBjYW5jZWxQcmV2aW91c1JlcXVlc3QpLnRoZW4oeG1sID0+IHtcbiAgICAgICAgICB4bWxGcmFnbWVudCA9IHhtbDtcbiAgICAgICAgICAvLyBzZXQgdGhlIGJhc2UgcGF0aCBmb3IgaW1hZ2VzIGFuZCBvdGhlciByZXNvdXJjZXMsXG4gICAgICAgICAgLy8geW91IHByb2JhYmx5IHdhbnQgdG8gc2V0IHRoZSBiYXNlIHBhdGggdG8gdGhlIGRvY3VtZW50IHJvb3QgZWxzZSB5b3UgY2FuIHVzZSB0aGUgcGF0aCBtZXRob2QgdG8gc2V0IGl0XG4gICAgICAgICAgYXBpLnBhdGgodXJpLnN1YnN0cmluZygwLCB1cmkubGFzdEluZGV4T2YoJy8nKSkpO1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKGFwaSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwYXJzZSh4bWxTdHJpbmc6IHN0cmluZyk6IHR5cGVvZiBhcGkge1xuICAgICAgeG1sRnJhZ21lbnQgPSBwYXJzZVhNTCh4bWxTdHJpbmcpO1xuICAgICAgcmV0dXJuIGFwaTtcbiAgICB9LFxuICAgIHBhdGg6IChsb2NhdGlvbjogc3RyaW5nKTogdHlwZW9mIGFwaSA9PiB7XG4gICAgICBzZXRMb2NhdGlvbih4bWxGcmFnbWVudCwgbG9jYXRpb24pO1xuICAgICAgcmV0dXJuIGFwaTtcbiAgICB9LFxuICAgIGZuKGZuOiAoeG1sRnJhZ21lbnQ6IFhNTERvY3VtZW50KSA9PiB2b2lkKTogdHlwZW9mIGFwaSB7XG4gICAgICBmbih4bWxGcmFnbWVudCk7XG4gICAgICByZXR1cm4gYXBpO1xuICAgIH0sXG4gICAgcGNpSG9va3ModXJpOiBzdHJpbmcpOiB0eXBlb2YgYXBpIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbJ2hvb2snLCAnbW9kdWxlJ107XG4gICAgICBjb25zdCBkb2N1bWVudFBhdGggPSB1cmkuc3Vic3RyaW5nKDAsIHVyaS5sYXN0SW5kZXhPZignLycpKTtcbiAgICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgY29uc3Qgc3JjQXR0cmlidXRlcyA9IHhtbEZyYWdtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1snICsgYXR0cmlidXRlICsgJ10nKTtcbiAgICAgICAgc3JjQXR0cmlidXRlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHNyY1ZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKSE7XG4gICAgICAgICAgaWYgKCFzcmNWYWx1ZS5zdGFydHNXaXRoKCdkYXRhOicpICYmICFzcmNWYWx1ZS5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgICAgIC8vIEp1c3QgcGFzdGUgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHNyYyBsb2NhdGlvbiBhZnRlciB0aGUgZG9jdW1lbnRyb290UGF0aFxuICAgICAgICAgICAgLy8gb2xkIHBjaXMgY2FuIGhhdmUgYSAuanMsIG5ldyBwY2kncyBkb24ndFxuICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2Jhc2UtdXJsJywgdXJpKTtcbiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgICAnbW9kdWxlJyxcbiAgICAgICAgICAgICAgZG9jdW1lbnRQYXRoICsgJy8nICsgZW5jb2RlVVJJKHNyY1ZhbHVlICsgKHNyY1ZhbHVlLmVuZHNXaXRoKCcuanMnKSA/ICcnIDogJy5qcycpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFwaTtcbiAgICB9LFxuICAgIGV4dGVuZEVsZW1lbnROYW1lOiAodGFnTmFtZTogc3RyaW5nLCBleHRlbnNpb246IHN0cmluZyk6IHR5cGVvZiBhcGkgPT4ge1xuICAgICAgZXh0ZW5kRWxlbWVudE5hbWUoeG1sRnJhZ21lbnQsIHRhZ05hbWUsIGV4dGVuc2lvbik7XG4gICAgICByZXR1cm4gYXBpO1xuICAgIH0sXG4gICAgZXh0ZW5kRWxlbWVudHNXaXRoQ2xhc3M6IChwYXJhbTogc3RyaW5nID0gJ2V4dGVuZCcpOiB0eXBlb2YgYXBpID0+IHtcbiAgICAgIGV4dGVuZEVsZW1lbnRzV2l0aENsYXNzKHhtbEZyYWdtZW50LCBwYXJhbSk7XG4gICAgICByZXR1cm4gYXBpO1xuICAgIH0sXG4gICAgY3VzdG9tSW50ZXJhY3Rpb24oYmFzZVJlZjogc3RyaW5nLCBiYXNlSXRlbTogc3RyaW5nKTogdHlwZW9mIGFwaSB7XG4gICAgICBjb25zdCBxdGlDdXN0b21JbnRlcmFjdGlvbiA9IHhtbEZyYWdtZW50LnF1ZXJ5U2VsZWN0b3IoJ3F0aS1jdXN0b20taW50ZXJhY3Rpb24nKTtcbiAgICAgIGNvbnN0IHF0aUN1c3RvbUludGVyYWN0aW9uT2JqZWN0ID0gcXRpQ3VzdG9tSW50ZXJhY3Rpb24ucXVlcnlTZWxlY3Rvcignb2JqZWN0Jyk7XG5cbiAgICAgIHF0aUN1c3RvbUludGVyYWN0aW9uLnNldEF0dHJpYnV0ZSgnZGF0YS1iYXNlLXJlZicsIGJhc2VSZWYpO1xuICAgICAgcXRpQ3VzdG9tSW50ZXJhY3Rpb24uc2V0QXR0cmlidXRlKCdkYXRhLWJhc2UtaXRlbScsIGJhc2VSZWYgKyBiYXNlSXRlbSk7XG4gICAgICBxdGlDdXN0b21JbnRlcmFjdGlvbi5zZXRBdHRyaWJ1dGUoJ2RhdGEnLCBxdGlDdXN0b21JbnRlcmFjdGlvbk9iamVjdC5nZXRBdHRyaWJ1dGUoJ2RhdGEnKSk7XG4gICAgICBxdGlDdXN0b21JbnRlcmFjdGlvbi5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgcXRpQ3VzdG9tSW50ZXJhY3Rpb25PYmplY3QuZ2V0QXR0cmlidXRlKCd3aWR0aCcpKTtcbiAgICAgIHF0aUN1c3RvbUludGVyYWN0aW9uLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgcXRpQ3VzdG9tSW50ZXJhY3Rpb25PYmplY3QuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSk7XG5cbiAgICAgIHF0aUN1c3RvbUludGVyYWN0aW9uLnJlbW92ZUNoaWxkKHF0aUN1c3RvbUludGVyYWN0aW9uT2JqZWN0KTtcbiAgICAgIHJldHVybiBhcGk7XG4gICAgfSxcbiAgICBjb252ZXJ0Q0RBVEF0b0NvbW1lbnQoKTogdHlwZW9mIGFwaSB7XG4gICAgICBjb252ZXJ0Q0RBVEF0b0NvbW1lbnQoeG1sRnJhZ21lbnQpO1xuICAgICAgcmV0dXJuIGFwaTtcbiAgICB9LFxuICAgIHN0cmlwU3R5bGVTaGVldHMoKTogdHlwZW9mIGFwaSB7XG4gICAgICBzdHJpcFN0eWxlU2hlZXRzKHhtbEZyYWdtZW50KTtcbiAgICAgIHJldHVybiBhcGk7XG4gICAgfSxcbiAgICBodG1sKCkge1xuICAgICAgcmV0dXJuIG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcodG9IVE1MKHhtbEZyYWdtZW50KSk7XG4gICAgfSxcbiAgICB4bWwoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKHhtbEZyYWdtZW50KTtcbiAgICB9LFxuICAgIGh0bWxEb2MoKSB7XG4gICAgICByZXR1cm4gdG9IVE1MKHhtbEZyYWdtZW50KTtcbiAgICB9LFxuICAgIHhtbERvYygpOiBYTUxEb2N1bWVudCB7XG4gICAgICByZXR1cm4geG1sRnJhZ21lbnQ7IC8vIG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoeG1sRnJhZ21lbnQpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGFwaTtcbn07XG4iLCAiaW1wb3J0IHsgbG9hZFhNTCwgcGFyc2VYTUwgfSBmcm9tIFwiLi9xdGktdHJhbnNmb3JtZXJzXCI7XG5cbmV4cG9ydCBjb25zdCBxdGlUcmFuc2Zvcm1NYW5pZmVzdCA9ICgpOiB7XG4gICAgbG9hZDogKHVyaTogc3RyaW5nKSA9PiBQcm9taXNlPHR5cGVvZiBhcGk+O1xuICAgIGFzc2Vzc21lbnRUZXN0OiAoKSA9PiB7IGhyZWY6IHN0cmluZzsgaWRlbnRpZmllcjogc3RyaW5nIH07XG4gIH0gPT4ge1xuICAgIGxldCB4bWxGcmFnbWVudDogWE1MRG9jdW1lbnQ7XG4gIFxuICAgIGNvbnN0IGFwaSA9IHtcbiAgICAgIGFzeW5jIGxvYWQodXJpKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx0eXBlb2YgYXBpPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgbG9hZFhNTCh1cmkpLnRoZW4oeG1sID0+IHtcbiAgICAgICAgICAgIHhtbEZyYWdtZW50ID0geG1sO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoYXBpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcGFyc2UoeG1sU3RyaW5nOiBzdHJpbmcpIHtcbiAgICAgICAgeG1sRnJhZ21lbnQgPSBwYXJzZVhNTCh4bWxTdHJpbmcpO1xuICAgICAgfSxcbiAgICAgIGFzc2Vzc21lbnRUZXN0KCkge1xuICAgICAgICBjb25zdCBlbCA9IHhtbEZyYWdtZW50LnF1ZXJ5U2VsZWN0b3IoJ3Jlc291cmNlW3R5cGU9XCJpbXNxdGlfdGVzdF94bWx2M3AwXCJdJyk7XG4gICAgICAgIHJldHVybiB7IGhyZWY6IGVsLmdldEF0dHJpYnV0ZSgnaHJlZicpLCBpZGVudGlmaWVyOiBlbC5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSB9O1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGFwaTtcbiAgfTsiLCAiXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggbWV0aG9kcyB0byBsb2FkLCBwYXJzZSBhbmQgdHJhbnNmb3JtIFFUSSB0ZXN0cy5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIG1ldGhvZHMgdG8gbG9hZCwgcGFyc2UgYW5kIHRyYW5zZm9ybSBRVEkgdGVzdHMuXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcXRpVHJhbnNmb3JtZXIgPSBxdGlUcmFuc2Zvcm1UZXN0KCk7XG4gKiBhd2FpdCBxdGlUcmFuc2Zvcm1lci5sb2FkKCdodHRwczovL2V4YW1wbGUuY29tL3Rlc3QueG1sJyk7XG4gKiBjb25zdCBpdGVtcyA9IHF0aVRyYW5zZm9ybWVyLml0ZW1zKCk7XG4gKiBjb25zdCBodG1sID0gcXRpVHJhbnNmb3JtZXIuaHRtbCgpO1xuICogY29uc3QgeG1sID0gcXRpVHJhbnNmb3JtZXIueG1sKCk7XG4gKi9cblxuaW1wb3J0IHsgaXRlbXNGcm9tVGVzdCwgbG9hZFhNTCwgcGFyc2VYTUwsIHRvSFRNTCB9IGZyb20gXCIuL3F0aS10cmFuc2Zvcm1lcnNcIjtcblxuZXhwb3J0IHR5cGUgdHJhbnNmb3JtVGVzdEFwaSA9IHtcbiAgICBsb2FkOiAodXJpOiBzdHJpbmcpID0+IFByb21pc2U8dHJhbnNmb3JtVGVzdEFwaT47XG4gICAgcGFyc2U6ICh4bWxTdHJpbmc6IHN0cmluZykgPT4gdHJhbnNmb3JtVGVzdEFwaTtcbiAgICBmbjogKGZuOiAoeG1sRnJhZ21lbnQ6IFhNTERvY3VtZW50KSA9PiB2b2lkKSA9PiB0cmFuc2Zvcm1UZXN0QXBpO1xuICAgIGl0ZW1zOiAoKSA9PiB7IGlkZW50aWZpZXI6IHN0cmluZzsgaHJlZjogc3RyaW5nOyBjYXRlZ29yeTogc3RyaW5nIH1bXTtcbiAgICBodG1sOiAoKSA9PiBzdHJpbmc7XG4gICAgeG1sOiAoKSA9PiBzdHJpbmc7XG4gICAgaHRtbERvYzogKCkgPT4gRG9jdW1lbnRGcmFnbWVudDtcbiAgICB4bWxEb2M6ICgpID0+IFhNTERvY3VtZW50O1xuICB9XG4gIFxuICBleHBvcnQgY29uc3QgcXRpVHJhbnNmb3JtVGVzdCA9ICgpOiB0cmFuc2Zvcm1UZXN0QXBpID0+IHtcbiAgICBsZXQgeG1sRnJhZ21lbnQ6IFhNTERvY3VtZW50O1xuICBcbiAgICBjb25zdCBhcGk6dHJhbnNmb3JtVGVzdEFwaSA9IHtcbiAgICAgIGFzeW5jIGxvYWQodXJpKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx0cmFuc2Zvcm1UZXN0QXBpPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgbG9hZFhNTCh1cmkpLnRoZW4oeG1sID0+IHtcbiAgICAgICAgICAgIHhtbEZyYWdtZW50ID0geG1sO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoYXBpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcGFyc2UoeG1sU3RyaW5nOiBzdHJpbmcpIHtcbiAgICAgICAgeG1sRnJhZ21lbnQgPSBwYXJzZVhNTCh4bWxTdHJpbmcpO1xuICAgICAgICByZXR1cm4gYXBpO1xuICAgICAgfSxcbiAgICAgIGZuKGZuOiAoeG1sRnJhZ21lbnQ6IFhNTERvY3VtZW50KSA9PiB2b2lkKSB7XG4gICAgICAgIGZuKHhtbEZyYWdtZW50KTtcbiAgICAgICAgcmV0dXJuIGFwaTtcbiAgICAgIH0sXG4gICAgICBpdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zRnJvbVRlc3QoeG1sRnJhZ21lbnQpO1xuICAgICAgfSxcbiAgICAgIGh0bWwoKSB7XG4gICAgICAgIHJldHVybiBuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKHRvSFRNTCh4bWxGcmFnbWVudCkpO1xuICAgICAgfSxcbiAgICAgIHhtbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyh4bWxGcmFnbWVudCk7XG4gICAgICB9LFxuICAgICAgaHRtbERvYygpIHtcbiAgICAgICAgcmV0dXJuIHRvSFRNTCh4bWxGcmFnbWVudCk7XG4gICAgICB9LFxuICAgICAgeG1sRG9jKCk6IFhNTERvY3VtZW50IHtcbiAgICAgICAgcmV0dXJuIHhtbEZyYWdtZW50O1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGFwaTtcbiAgfTsiXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsSUFBTSxNQUFNLE9BQU87QUFlbkIsSUFBTSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5QlgsU0FBUyxrQkFBa0IsYUFBMEIsU0FBaUIsV0FBbUI7QUFDOUYsY0FBWSxpQkFBaUIsT0FBTyxFQUFFLFFBQVEsYUFBVztBQUN2RCxVQUFNLGFBQWEsR0FBRyxPQUFPLElBQUksU0FBUztBQUMxQyxVQUFNLGFBQWEsNEJBQTRCLFNBQVMsVUFBVTtBQUNsRSxZQUFRLFlBQVksVUFBVTtBQUFBLEVBQ2hDLENBQUM7QUFDSDtBQUdPLFNBQVMsd0JBQXdCLGFBQTBCLGtCQUEwQjtBQUMxRixjQUFZLGlCQUFpQixHQUFHLEVBQUUsUUFBUSxhQUFXO0FBQ25ELFVBQU0sWUFBWSxRQUFRO0FBQzFCLFFBQUksV0FBVztBQUNiLGdCQUFVLFFBQVEsZUFBYTtBQUM3QixZQUFJLFVBQVUsV0FBVyxHQUFHLGdCQUFnQixHQUFHLEdBQUc7QUFDaEQsZ0JBQU0sU0FBUyxVQUFVLE1BQU0sR0FBRyxnQkFBZ0IsSUFBSSxNQUFNO0FBQzVELGdCQUFNLGFBQWEsR0FBRyxRQUFRLFFBQVEsSUFBSSxNQUFNO0FBQ2hELGdCQUFNLGFBQWEsNEJBQTRCLFNBQVMsVUFBVTtBQUNsRSxrQkFBUSxZQUFZLFVBQVU7QUFBQSxRQUNoQztBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGLENBQUM7QUFDSDtBQUdBLFNBQVMsNEJBQTRCLFNBQVMsWUFBWTtBQUN4RCxRQUFNLGFBQWEsU0FBUyxjQUFjLFVBQVU7QUFFcEQsYUFBVyxRQUFRLFFBQVEsWUFBWTtBQUNyQyxlQUFXLGFBQWEsS0FBSyxNQUFNLEtBQUssS0FBSztBQUFBLEVBQy9DO0FBRUEsU0FBTyxRQUFRLFlBQVk7QUFDekIsZUFBVyxZQUFZLFFBQVEsVUFBVTtBQUFBLEVBQzNDO0FBQ0EsU0FBTztBQUNUO0FBRU8sU0FBUyxjQUFjLGFBQStCO0FBQzNELFFBQU0sUUFBa0UsQ0FBQztBQUN6RSxjQUFZLGlCQUFpQix5QkFBeUIsRUFBRSxRQUFRLFFBQU07QUFDcEUsVUFBTSxhQUFhLEdBQUcsYUFBYSxZQUFZO0FBQy9DLFVBQU0sT0FBTyxHQUFHLGFBQWEsTUFBTTtBQUNuQyxVQUFNLFdBQVcsR0FBRyxhQUFhLFVBQVU7QUFDM0MsVUFBTSxLQUFLLEVBQUUsWUFBWSxNQUFNLFNBQVMsQ0FBQztBQUFBLEVBQzNDLENBQUM7QUFDRCxTQUFPO0FBQ1Q7QUFFQSxJQUFJLGlCQUF3QztBQUVyQyxTQUFTLFFBQVEsS0FBSyx3QkFBd0IsT0FBTztBQUMxRCxNQUFJLHlCQUF5QixtQkFBbUIsTUFBTTtBQUNwRCxtQkFBZSxNQUFNO0FBQUEsRUFDdkI7QUFFQSxTQUFPLElBQUksUUFBNEIsQ0FBQyxTQUFTLFdBQVc7QUFDMUQsVUFBTSxNQUFNLElBQUksZUFBZTtBQUMvQixxQkFBaUI7QUFFakIsUUFBSSxLQUFLLE9BQU8sS0FBSyxJQUFJO0FBQ3pCLFFBQUksZUFBZTtBQUVuQixRQUFJLFNBQVMsTUFBTTtBQUNqQixVQUFJLElBQUksVUFBVSxPQUFPLElBQUksU0FBUyxLQUFLO0FBQ3pDLGdCQUFRLElBQUksV0FBVztBQUFBLE1BQ3pCLE9BQU87QUFDTCxlQUFPLElBQUksVUFBVTtBQUFBLE1BQ3ZCO0FBQUEsSUFDRjtBQUVBLFFBQUksVUFBVSxNQUFNO0FBQ2xCLGFBQU8sSUFBSSxVQUFVO0FBQUEsSUFDdkI7QUFFQSxRQUFJLEtBQUs7QUFBQSxFQUNYLENBQUM7QUFDSDtBQUVPLFNBQVMsU0FBUyxhQUFxQjtBQUM1QyxRQUFNLFNBQVMsSUFBSSxVQUFVO0FBQzdCLFFBQU0sY0FBYyxPQUFPLGdCQUFnQixhQUFhLFVBQVU7QUFDbEUsU0FBTztBQUNUO0FBRU8sU0FBUyxPQUFPLGFBQXlDO0FBQzlELFFBQU0sWUFBWSxJQUFJLGNBQWM7QUFDcEMsUUFBTSxlQUFlLElBQUksVUFBVSxFQUFFLGdCQUFnQixXQUFXLFVBQVU7QUFDMUUsWUFBVSxpQkFBaUIsWUFBWTtBQUN2QyxRQUFNLG1CQUFtQixVQUFVLG9CQUFvQixhQUFhLFFBQVE7QUFDNUUsU0FBTztBQUNUO0FBRU8sU0FBUyxZQUFZLGFBQStCLFVBQWtCO0FBQzNFLE1BQUksQ0FBQyxTQUFTLFNBQVMsR0FBRyxHQUFHO0FBQzNCLGdCQUFZO0FBQUEsRUFDZDtBQUVBLGNBQVksaUJBQWlCLDZCQUE2QixFQUFFLFFBQVEsZUFBYTtBQTNJbkY7QUE0SUksUUFBSSxPQUE2QztBQUVqRCxRQUFJLFVBQVUsYUFBYSxLQUFLLEdBQUc7QUFDakMsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLFVBQVUsYUFBYSxNQUFNLEdBQUc7QUFDbEMsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLFVBQVUsYUFBYSxjQUFjLEdBQUc7QUFDMUMsYUFBTztBQUFBLElBQ1Q7QUFDQSxVQUFNLGFBQVksZUFBVSxhQUFhLElBQUksTUFBM0IsbUJBQThCO0FBRWhELFFBQUksQ0FBQyxVQUFVLFdBQVcsT0FBTyxLQUFLLENBQUMsVUFBVSxXQUFXLE1BQU0sR0FBRztBQUNuRSxZQUFNLGNBQWMsV0FBVyxVQUFVLFNBQVM7QUFDbEQsZ0JBQVUsYUFBYSxNQUFNLFdBQVc7QUFBQSxJQUMxQztBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBRU8sU0FBUyxzQkFBc0IsYUFBK0I7QUFDbkUsUUFBTSxnQkFBZ0IsWUFBWSxpQkFBaUIsc0RBQXNEO0FBQ3pHLGdCQUFjLFFBQVEsYUFBVztBQUMvQixVQUFNLGNBQWMsU0FBUyxjQUFjLFFBQVEsV0FBVztBQUM5RCxZQUFRLGFBQWEsYUFBYSxRQUFRLFVBQVU7QUFBQSxFQUN0RCxDQUFDO0FBQ0g7QUFFTyxTQUFTLGlCQUFpQixhQUErQjtBQUU5RCxjQUFZLGlCQUFpQixnQkFBZ0IsRUFBRSxRQUFRLGdCQUFjLFdBQVcsT0FBTyxDQUFDO0FBQzFGOzs7QUMvSE8sSUFBTSxtQkFBbUIsTUFBTTtBQUNwQyxNQUFJO0FBRUosUUFBTSxNQUF3QjtBQUFBLElBQzVCLE1BQU0sS0FBSyxLQUFhLHdCQUF3QixPQUE0QjtBQUMxRSxhQUFPLElBQUksUUFBb0IsQ0FBQyxTQUFTLFdBQVc7QUFDbEQsZ0JBQVEsS0FBSyxxQkFBcUIsRUFBRSxLQUFLLENBQUFBLFNBQU87QUFDOUMsd0JBQWNBO0FBR2QsY0FBSSxLQUFLLElBQUksVUFBVSxHQUFHLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQUMvQyxpQkFBTyxRQUFRLEdBQUc7QUFBQSxRQUNwQixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUFBLElBQ0EsTUFBTSxXQUErQjtBQUNuQyxvQkFBYyxTQUFTLFNBQVM7QUFDaEMsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLE1BQU0sQ0FBQyxhQUFpQztBQUN0QyxrQkFBWSxhQUFhLFFBQVE7QUFDakMsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEdBQUcsSUFBb0Q7QUFDckQsU0FBRyxXQUFXO0FBQ2QsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLFNBQVMsS0FBeUI7QUFDaEMsWUFBTSxhQUFhLENBQUMsUUFBUSxRQUFRO0FBQ3BDLFlBQU0sZUFBZSxJQUFJLFVBQVUsR0FBRyxJQUFJLFlBQVksR0FBRyxDQUFDO0FBQzFELGlCQUFXLGFBQWEsWUFBWTtBQUNsQyxjQUFNLGdCQUFnQixZQUFZLGlCQUFpQixNQUFNLFlBQVksR0FBRztBQUN4RSxzQkFBYyxRQUFRLFVBQVE7QUFDNUIsZ0JBQU0sV0FBVyxLQUFLLGFBQWEsU0FBUztBQUM1QyxjQUFJLENBQUMsU0FBUyxXQUFXLE9BQU8sS0FBSyxDQUFDLFNBQVMsV0FBVyxNQUFNLEdBQUc7QUFHakUsaUJBQUssYUFBYSxZQUFZLEdBQUc7QUFDakMsaUJBQUs7QUFBQSxjQUNIO0FBQUEsY0FDQSxlQUFlLE1BQU0sVUFBVSxZQUFZLFNBQVMsU0FBUyxLQUFLLElBQUksS0FBSyxNQUFNO0FBQUEsWUFDbkY7QUFBQSxVQUNGO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxtQkFBbUIsQ0FBQyxTQUFpQixjQUFrQztBQUNyRSx3QkFBa0IsYUFBYSxTQUFTLFNBQVM7QUFDakQsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLHlCQUF5QixDQUFDLFFBQWdCLGFBQXlCO0FBQ2pFLDhCQUF3QixhQUFhLEtBQUs7QUFDMUMsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLGtCQUFrQixTQUFpQixVQUE4QjtBQUMvRCxZQUFNLHVCQUF1QixZQUFZLGNBQWMsd0JBQXdCO0FBQy9FLFlBQU0sNkJBQTZCLHFCQUFxQixjQUFjLFFBQVE7QUFFOUUsMkJBQXFCLGFBQWEsaUJBQWlCLE9BQU87QUFDMUQsMkJBQXFCLGFBQWEsa0JBQWtCLFVBQVUsUUFBUTtBQUN0RSwyQkFBcUIsYUFBYSxRQUFRLDJCQUEyQixhQUFhLE1BQU0sQ0FBQztBQUN6RiwyQkFBcUIsYUFBYSxTQUFTLDJCQUEyQixhQUFhLE9BQU8sQ0FBQztBQUMzRiwyQkFBcUIsYUFBYSxVQUFVLDJCQUEyQixhQUFhLFFBQVEsQ0FBQztBQUU3RiwyQkFBcUIsWUFBWSwwQkFBMEI7QUFDM0QsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLHdCQUFvQztBQUNsQyw0QkFBc0IsV0FBVztBQUNqQyxhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsbUJBQStCO0FBQzdCLHVCQUFpQixXQUFXO0FBQzVCLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxPQUFPO0FBQ0wsYUFBTyxJQUFJLGNBQWMsRUFBRSxrQkFBa0IsT0FBTyxXQUFXLENBQUM7QUFBQSxJQUNsRTtBQUFBLElBQ0EsTUFBYztBQUNaLGFBQU8sSUFBSSxjQUFjLEVBQUUsa0JBQWtCLFdBQVc7QUFBQSxJQUMxRDtBQUFBLElBQ0EsVUFBVTtBQUNSLGFBQU8sT0FBTyxXQUFXO0FBQUEsSUFDM0I7QUFBQSxJQUNBLFNBQXNCO0FBQ3BCLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDs7O0FDcElPLElBQU0sdUJBQXVCLE1BRzdCO0FBQ0gsTUFBSTtBQUVKLFFBQU0sTUFBTTtBQUFBLElBQ1YsTUFBTSxLQUFLLEtBQUs7QUFDZCxhQUFPLElBQUksUUFBb0IsQ0FBQyxTQUFTLFdBQVc7QUFDbEQsZ0JBQVEsR0FBRyxFQUFFLEtBQUssQ0FBQUMsU0FBTztBQUN2Qix3QkFBY0E7QUFDZCxpQkFBTyxRQUFRLEdBQUc7QUFBQSxRQUNwQixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUFBLElBQ0EsTUFBTSxXQUFtQjtBQUN2QixvQkFBYyxTQUFTLFNBQVM7QUFBQSxJQUNsQztBQUFBLElBQ0EsaUJBQWlCO0FBQ2YsWUFBTSxLQUFLLFlBQVksY0FBYyxzQ0FBc0M7QUFDM0UsYUFBTyxFQUFFLE1BQU0sR0FBRyxhQUFhLE1BQU0sR0FBRyxZQUFZLEdBQUcsYUFBYSxZQUFZLEVBQUU7QUFBQSxJQUNwRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7OztBQ0RPLElBQU0sbUJBQW1CLE1BQXdCO0FBQ3RELE1BQUk7QUFFSixRQUFNLE1BQXVCO0FBQUEsSUFDM0IsTUFBTSxLQUFLLEtBQUs7QUFDZCxhQUFPLElBQUksUUFBMEIsQ0FBQyxTQUFTLFdBQVc7QUFDeEQsZ0JBQVEsR0FBRyxFQUFFLEtBQUssQ0FBQUMsU0FBTztBQUN2Qix3QkFBY0E7QUFDZCxpQkFBTyxRQUFRLEdBQUc7QUFBQSxRQUNwQixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUFBLElBQ0EsTUFBTSxXQUFtQjtBQUN2QixvQkFBYyxTQUFTLFNBQVM7QUFDaEMsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEdBQUcsSUFBd0M7QUFDekMsU0FBRyxXQUFXO0FBQ2QsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLFFBQVE7QUFDTixhQUFPLGNBQWMsV0FBVztBQUFBLElBQ2xDO0FBQUEsSUFDQSxPQUFPO0FBQ0wsYUFBTyxJQUFJLGNBQWMsRUFBRSxrQkFBa0IsT0FBTyxXQUFXLENBQUM7QUFBQSxJQUNsRTtBQUFBLElBQ0EsTUFBYztBQUNaLGFBQU8sSUFBSSxjQUFjLEVBQUUsa0JBQWtCLFdBQVc7QUFBQSxJQUMxRDtBQUFBLElBQ0EsVUFBVTtBQUNSLGFBQU8sT0FBTyxXQUFXO0FBQUEsSUFDM0I7QUFBQSxJQUNBLFNBQXNCO0FBQ3BCLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFsieG1sIiwgInhtbCIsICJ4bWwiXQp9Cg==
@@ -0,0 +1,44 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/microsoft/vscode-css-languageservice/main/docs/customData.schema.json",
3
+ "version": 1.1,
4
+ "properties": [
5
+ {
6
+ "name": "--show-value",
7
+ "description": "shows the current value while sliding",
8
+ "values": []
9
+ },
10
+ {
11
+ "name": "--show-ticks",
12
+ "description": "shows the ticks according to steps",
13
+ "values": []
14
+ },
15
+ {
16
+ "name": "--show-bounds",
17
+ "description": "shows value for lower and upper boundary",
18
+ "values": []
19
+ }
20
+ ],
21
+ "pseudoElements": [
22
+ {
23
+ "name": "::part(slider)",
24
+ "description": "-- slider inluding, bounds and ticks and value, use it for paddings and margins"
25
+ },
26
+ {
27
+ "name": "::part(bounds)",
28
+ "description": "-- div for bounds, containing two divs for with min, and max bounds value"
29
+ },
30
+ {
31
+ "name": "::part(ticks)",
32
+ "description": "-- div for ticks, use lineair gradient and exposed css variables for styling"
33
+ },
34
+ {
35
+ "name": "::part(rail)",
36
+ "description": "-- div for rail, style according to needs"
37
+ },
38
+ {
39
+ "name": "::part(knob)",
40
+ "description": "-- div, should be relative or absolute"
41
+ },
42
+ { "name": "::part(value)", "description": "-- div, containing value" }
43
+ ]
44
+ }